8struct ThermoPlasticBlockedParameters;
15 constexpr double third = boost::math::constants::third<double>();
16 return (t_stress(0, 0) + t_stress(1, 1)) *
third;
21 constexpr double third = boost::math::constants::third<double>();
22 return (t_stress(0, 0) + t_stress(1, 1) + t_stress(2, 2)) *
third;
25template <
typename T,
int DIM>
34 for (
int ii = 0; ii != DIM; ++ii)
35 for (
int jj = ii; jj != DIM; ++jj)
36 t_dev(ii, jj) = t_stress(ii, jj);
40 for (
int ii = 0; ii != DIM; ++ii)
41 for (
int jj = ii; jj != DIM; ++jj)
42 t_dev(ii, jj) -= t_alpha(ii, jj);
64 t_diff_deviator(
I,
J,
k,
l) = 0;
65 for (
int ii = 0; ii != DIM; ++ii)
66 for (
int jj = ii; jj != DIM; ++jj)
67 for (
int kk = 0; kk != DIM; ++kk)
68 for (
int ll = kk; ll != DIM; ++ll)
69 t_diff_deviator(ii, jj, kk, ll) = t_diff_stress(ii, jj, kk, ll);
71 constexpr double third = boost::math::constants::third<double>();
73 t_diff_deviator(0, 0, 0, 0) -=
third;
74 t_diff_deviator(0, 0, 1, 1) -=
third;
76 t_diff_deviator(1, 1, 0, 0) -=
third;
77 t_diff_deviator(1, 1, 1, 1) -=
third;
79 t_diff_deviator(2, 2, 0, 0) -=
third;
80 t_diff_deviator(2, 2, 1, 1) -=
third;
82 if constexpr (DIM == 3) {
83 t_diff_deviator(0, 0, 2, 2) -=
third;
84 t_diff_deviator(1, 1, 2, 2) -=
third;
85 t_diff_deviator(2, 2, 2, 2) -=
third;
88 return t_diff_deviator;
124 return std::sqrt(1.5 * t_stress_deviator(
I,
J) * t_stress_deviator(
I,
J)) +
125 std::numeric_limits<double>::epsilon();
136 (1.5 * (t_dev_stress(
I,
J) * t_diff_deviator(
I,
J,
k,
l))) / f;
140template <
typename T,
int DIM>
150 t_diff_flow(
i,
j,
k,
l) =
151 (1.5 * (t_diff_deviator(
M,
N,
i,
j) * t_diff_deviator(
M,
N,
k,
l) -
152 (2. / 3.) * t_flow(
i,
j) * t_flow(
k,
l))) /
157template <
typename T,
int DIM>
168 t_diff_flow(
i,
j,
k,
l) =
169 t_diff_plastic_flow_dstress(
i,
j,
m,
n) * t_D(
m,
n,
k,
l);
186 const auto y = x / (
zeta /
dt);
187 if (y > std::numeric_limits<float>::max_exponent10 ||
188 y < std::numeric_limits<float>::min_exponent10) {
194 const auto e = std::exp(y);
195 return (e - 1) / (1 + e);
200 const auto y = -x / (
zeta /
dt);
201 if (y > std::numeric_limits<float>::max_exponent10 ||
202 y < std::numeric_limits<float>::min_exponent10) {
205 const double e = std::exp(y);
206 return x + 2 * (
zeta /
dt) * std::log1p(e);
210inline double w(
double eqiv,
double dot_tau,
double f,
double sigma_y,
212 return (1. /
cn1) * ((
f - sigma_y) / sigma_Y) + dot_tau;
230inline double constraint(
double eqiv,
double dot_tau,
double f,
double sigma_y,
231 double abs_w,
double vis_H,
double sigma_Y) {
239 (
cn0 *
cn1 * ((dot_tau - eqiv)) +
241 cn1 * ((dot_tau) - (1. /
cn1) * (f - sigma_y) / sigma_Y - abs_w))
247 double vis_H,
double sigma_Y) {
248 return vis_H + (sigma_Y / 2) * (
cn0 *
cn1 +
cn1 * (1 - sign));
253 return (sigma_Y / 2) * (-
cn0 *
cn1);
261 return dc_dsigmay * dsigma_y_dtemp;
264template <
typename T,
int DIM>
272 return t_diff_constrain_dstress;
275template <
typename T1,
typename T2,
int DIM>
282 t_diff_constrain_dstrain(
k,
l) =
283 t_diff_constrain_dstress(
i,
j) * t_D(
i,
j,
k,
l);
284 return t_diff_constrain_dstrain;
287template <
typename T,
int DIM>
292 constexpr double A = 2. / 3;
293 return std::sqrt(
A * t_plastic_strain_dot(
i,
j) *
294 t_plastic_strain_dot(
i,
j)) +
295 std::numeric_limits<double>::epsilon();
298template <
typename T1,
typename T2,
typename T3,
int DIM>
300 T3 &t_diff_plastic_strain,
306 constexpr double A = 2. / 3;
308 t_diff_eqiv(
i,
j) =
A * (t_plastic_strain_dot(
k,
l) / eqiv) *
309 t_diff_plastic_strain(
k,
l,
i,
j);
319 &mat(3 * rr + 0, 0), &mat(3 * rr + 0, 1), &mat(3 * rr + 1, 0),
320 &mat(3 * rr + 1, 1), &mat(3 * rr + 2, 0), &mat(3 * rr + 2, 1)};
326 &mat(6 * rr + 0, 0), &mat(6 * rr + 0, 1), &mat(6 * rr + 0, 2),
327 &mat(6 * rr + 1, 0), &mat(6 * rr + 1, 1), &mat(6 * rr + 1, 2),
328 &mat(6 * rr + 2, 0), &mat(6 * rr + 2, 1), &mat(6 * rr + 2, 2),
329 &mat(6 * rr + 3, 0), &mat(6 * rr + 3, 1), &mat(6 * rr + 3, 2),
330 &mat(6 * rr + 4, 0), &mat(6 * rr + 4, 1), &mat(6 * rr + 4, 2),
331 &mat(6 * rr + 5, 0), &mat(6 * rr + 5, 1), &mat(6 * rr + 5, 2)};
336template <
int DIM,
typename DomainEleOp>
341 boost::shared_ptr<CommonData> plastic_common_data_ptr,
342 boost::shared_ptr<ThermoPlasticOps::ThermoPlasticBlockedParameters>
343 tp_common_data_ptr =
nullptr);
344 MoFEMErrorCode doWork(
int side, EntityType
type,
EntData &data);
348 boost::shared_ptr<ThermoPlasticOps::ThermoPlasticBlockedParameters>
352template <
int DIM,
typename DomainEleOp>
356 boost::shared_ptr<CommonData> common_data_ptr,
357 boost::shared_ptr<ThermoPlasticOps::ThermoPlasticBlockedParameters>
360 commonDataPtr(common_data_ptr), commonTPDataPtr(tp_common_data_ptr) {
362 std::fill(&DomainEleOp::doEntities[MBEDGE],
363 &DomainEleOp::doEntities[MBMAXTYPE],
false);
366template <
int DIM,
typename DomainEleOp>
374 const size_t nb_gauss_pts = commonDataPtr->mStressPtr->size2();
376 auto t_tau = getFTensor0FromVec(commonDataPtr->plasticTau);
377 auto t_plastic_strain =
378 getFTensor2SymmetricFromMat<DIM>(commonDataPtr->plasticStrain);
379 auto t_temp = getFTensor0FromVec(commonTPDataPtr->temperature);
381 commonDataPtr->plasticIsoHardening.resize(nb_gauss_pts,
false);
386 auto t_iso_hardening = getFTensor0FromVec(commonDataPtr->plasticIsoHardening);
390 auto ¶ms = commonDataPtr->blockParams;
392 for (
int i = 0;
i != nb_gauss_pts; ++
i) {
397 commonTPDataPtr->temp0, t_temp);
414template <
int DIM,
typename DomainEleOp>
418 boost::shared_ptr<CommonData> common_data_ptr);
422 boost::shared_ptr<CommonData> commonDataPtr;
425template <
int DIM,
typename DomainEleOp>
428 boost::shared_ptr<CommonData> common_data_ptr)
430 commonDataPtr(common_data_ptr) {
432 std::fill(&DomainEleOp::doEntities[MBEDGE],
433 &DomainEleOp::doEntities[MBMAXTYPE],
false);
436template <
int DIM,
typename DomainEleOp>
437MoFEMErrorCode OpCalculatePlasticSurfaceImpl<DIM, GAUSS, DomainEleOp>::doWork(
444 const size_t nb_gauss_pts = commonDataPtr->mStressPtr->size2();
446 getFTensor2SymmetricFromMat<DIM>(*(commonDataPtr->mStressPtr));
447 auto t_plastic_strain =
448 getFTensor2SymmetricFromMat<DIM>(commonDataPtr->plasticStrain);
450 commonDataPtr->plasticSurface.resize(nb_gauss_pts,
false);
451 commonDataPtr->plasticFlow.resize(
size_symm, nb_gauss_pts,
false);
452 auto t_flow = getFTensor2SymmetricFromMat<DIM>(commonDataPtr->plasticFlow);
454 auto ¶ms = commonDataPtr->blockParams;
456 for (
auto &f : commonDataPtr->plasticSurface) {
461 t_stress,
trace(t_stress),
474 t_flow(
i,
j) = t_flow_tmp(
i,
j);
484template <
int DIM,
typename DomainEleOp>
486 OpCalculatePlasticityImpl(
488 boost::shared_ptr<CommonData> common_data_ptr,
489 boost::shared_ptr<MatrixDouble> m_D_ptr,
490 boost::shared_ptr<ThermoPlasticOps::ThermoPlasticBlockedParameters>
491 tp_common_data_ptr =
nullptr);
495 boost::shared_ptr<CommonData> commonDataPtr;
496 boost::shared_ptr<ThermoPlasticOps::ThermoPlasticBlockedParameters>
498 boost::shared_ptr<MatrixDouble> mDPtr;
501template <
int DIM,
typename DomainEleOp>
503 const std::string
field_name, boost::shared_ptr<CommonData> common_data_ptr,
504 boost::shared_ptr<MatrixDouble> m_D_ptr,
505 boost::shared_ptr<ThermoPlasticOps::ThermoPlasticBlockedParameters>
508 commonDataPtr(common_data_ptr), mDPtr(m_D_ptr),
509 TPCommonDataPtr(tp_common_data_ptr) {
511 std::fill(&DomainEleOp::doEntities[MBEDGE],
512 &DomainEleOp::doEntities[MBMAXTYPE],
false);
515template <
int DIM,
typename DomainEleOp>
527 auto ¶ms = commonDataPtr->blockParams;
529 auto nb_gauss_pts = DomainEleOp::getGaussPts().size2();
530 auto t_w = DomainEleOp::getFTensor0IntegrationWeight();
531 auto t_tau = getFTensor0FromVec(commonDataPtr->plasticTau);
532 auto t_tau_dot = getFTensor0FromVec(commonDataPtr->plasticTauDot);
533 auto t_f = getFTensor0FromVec(commonDataPtr->plasticSurface);
534 auto t_flow = getFTensor2SymmetricFromMat<DIM>(commonDataPtr->plasticFlow);
535 auto t_plastic_strain =
536 getFTensor2SymmetricFromMat<DIM>(commonDataPtr->plasticStrain);
537 auto t_plastic_strain_dot =
538 getFTensor2SymmetricFromMat<DIM>(commonDataPtr->plasticStrainDot);
540 getFTensor2SymmetricFromMat<DIM>(*(commonDataPtr->mStressPtr));
542 auto t_D = getFTensor4DdgFromMat<DIM, DIM, 0>(*commonDataPtr->mDPtr);
543 auto t_D_Op = getFTensor4DdgFromMat<DIM, DIM, 0>(*mDPtr);
545 auto t_temp = getFTensor0FromVec(TPCommonDataPtr->temperature);
552 t_flow_dir_dstress(
i,
j,
k,
l) =
553 1.5 * (t_diff_deviator(
M,
N,
i,
j) * t_diff_deviator(
M,
N,
k,
l));
554 t_flow_dir_dstrain(
i,
j,
k,
l) =
555 t_flow_dir_dstress(
i,
j,
m,
n) * t_D_Op(
m,
n,
k,
l);
560 commonDataPtr->resC.resize(nb_gauss_pts,
false);
561 commonDataPtr->resCdTau.resize(nb_gauss_pts,
false);
562 commonDataPtr->resCdStrain.resize(
size_symm, nb_gauss_pts,
false);
563 commonDataPtr->resCdPlasticStrain.resize(
size_symm, nb_gauss_pts,
false);
564 TPCommonDataPtr->resCdTemperature.resize(nb_gauss_pts,
false);
565 commonDataPtr->resFlow.resize(
size_symm, nb_gauss_pts,
false);
566 commonDataPtr->resFlowDtau.resize(
size_symm, nb_gauss_pts,
false);
571 TPCommonDataPtr->resFlowDtemp.resize(
size_symm, nb_gauss_pts,
false);
573 commonDataPtr->resC.clear();
574 commonDataPtr->resCdTau.clear();
575 commonDataPtr->resCdStrain.clear();
576 commonDataPtr->resCdPlasticStrain.clear();
577 TPCommonDataPtr->resCdTemperature.clear();
578 commonDataPtr->resFlow.clear();
579 commonDataPtr->resFlowDtau.clear();
580 commonDataPtr->resFlowDstrain.clear();
581 commonDataPtr->resFlowDstrainDot.clear();
582 TPCommonDataPtr->resFlowDtemp.clear();
584 auto t_res_c = getFTensor0FromVec(commonDataPtr->resC);
585 auto t_res_c_dtau = getFTensor0FromVec(commonDataPtr->resCdTau);
586 auto t_res_c_dstrain =
587 getFTensor2SymmetricFromMat<DIM>(commonDataPtr->resCdStrain);
588 auto t_res_c_plastic_strain =
589 getFTensor2SymmetricFromMat<DIM>(commonDataPtr->resCdPlasticStrain);
590 auto t_res_c_temperature =
591 getFTensor0FromVec(TPCommonDataPtr->resCdTemperature);
592 auto t_res_flow = getFTensor2SymmetricFromMat<DIM>(commonDataPtr->resFlow);
593 auto t_res_flow_dtau =
594 getFTensor2SymmetricFromMat<DIM>(commonDataPtr->resFlowDtau);
595 auto t_res_flow_dstrain =
596 getFTensor4DdgFromMat<DIM, DIM>(commonDataPtr->resFlowDstrain);
597 auto t_res_flow_dplastic_strain =
598 getFTensor4DdgFromMat<DIM, DIM>(commonDataPtr->resFlowDstrainDot);
599 auto t_res_flow_dtemp =
600 getFTensor2SymmetricFromMat<DIM>(TPCommonDataPtr->resFlowDtemp);
608 ++t_plastic_strain_dot;
613 ++t_res_c_plastic_strain;
614 ++t_res_c_temperature;
617 ++t_res_flow_dstrain;
618 ++t_res_flow_dplastic_strain;
624 auto get_avtive_pts = [&]() {
625 int nb_points_avtive_on_elem = 0;
626 int nb_points_on_elem = 0;
628 auto t_tau = getFTensor0FromVec(commonDataPtr->plasticTau);
629 auto t_tau_dot = getFTensor0FromVec(commonDataPtr->plasticTauDot);
630 auto t_f = getFTensor0FromVec(commonDataPtr->plasticSurface);
631 auto t_plastic_strain_dot =
632 getFTensor2SymmetricFromMat<SPACE_DIM>(commonDataPtr->plasticStrainDot);
633 auto t_temp = getFTensor0FromVec(TPCommonDataPtr->temperature);
635 auto dt = this->getTStimeStep();
637 for (
auto gg = 0; gg != nb_gauss_pts; ++gg) {
640 w(eqiv, t_tau_dot, t_f,
644 TPCommonDataPtr->temp0, t_temp),
650 ++nb_points_avtive_on_elem;
656 ++t_plastic_strain_dot;
667 nb_points += nb_points_on_elem;
668 if (nb_points_avtive_on_elem > 0) {
670 active_points += nb_points_avtive_on_elem;
671 if (nb_points_avtive_on_elem == nb_points_on_elem) {
676 if (nb_points_avtive_on_elem != nb_points_on_elem)
682 if (DomainEleOp::getTSCtx() == TSMethod::TSContext::CTX_TSSETIJACOBIAN) {
686 auto dt = this->getTStimeStep();
687 for (
auto gg = 0; gg != nb_gauss_pts; ++gg) {
691 t_diff_plastic_strain,
698 TPCommonDataPtr->temp0, t_temp);
703 TPCommonDataPtr->temp0, t_temp);
709 auto c =
constraint(eqiv, t_tau_dot, t_f, sigma_y, abs_ww,
722 TPCommonDataPtr->temp0, t_temp);
727 t_stress,
trace(t_stress),
734 t_flow_dir(
k,
l) = 1.5 * (t_dev_stress(
I,
J) * t_diff_deviator(
I,
J,
k,
l));
736 t_flow_dstrain(
i,
j) = t_flow(
k,
l) * t_D_Op(
k,
l,
i,
j);
738 auto get_res_c = [&]() {
return c; };
740 auto get_res_c_dstrain = [&](
auto &t_diff_res) {
741 t_diff_res(
i,
j) = c_f * t_flow_dstrain(
i,
j);
744 auto get_res_c_dplastic_strain = [&](
auto &t_diff_res) {
745 t_diff_res(
i,
j) = (this->getTSa() * c_equiv) * t_diff_eqiv(
i,
j);
746 t_diff_res(
k,
l) -= c_f * t_flow(
i,
j) * t_alpha_dir(
i,
j,
k,
l);
749 auto get_res_c_dtau = [&]() {
750 return this->getTSa() * c_dot_tau + c_sigma_y * d_sigma_y;
753 auto get_res_c_plastic_strain = [&](
auto &t_diff_res) {
754 t_diff_res(
k,
l) = -c_f * t_flow(
i,
j) * t_alpha_dir(
i,
j,
k,
l);
757 auto get_res_c_dtemperature = [&]() {
return c_temperature; };
759 auto get_res_flow = [&](
auto &t_res_flow) {
760 const auto a = sigma_y;
761 const auto b = t_tau_dot;
762 t_res_flow(
k,
l) =
a * t_plastic_strain_dot(
k,
l) - b * t_flow_dir(
k,
l);
765 auto get_res_flow_dtau = [&](
auto &t_res_flow_dtau) {
766 const auto da = d_sigma_y;
767 const auto db = this->getTSa();
768 t_res_flow_dtau(
k,
l) =
769 da * t_plastic_strain_dot(
k,
l) - db * t_flow_dir(
k,
l);
772 auto get_res_flow_dstrain = [&](
auto &t_res_flow_dstrain) {
773 const auto b = t_tau_dot;
774 t_res_flow_dstrain(
m,
n,
k,
l) = -t_flow_dir_dstrain(
m,
n,
k,
l) * b;
777 auto get_res_flow_dplastic_strain = [&](
auto &t_res_flow_dplastic_strain) {
778 const auto a = sigma_y;
779 t_res_flow_dplastic_strain(
m,
n,
k,
l) =
780 (
a * this->getTSa()) * t_diff_plastic_strain(
m,
n,
k,
l);
781 const auto b = t_tau_dot;
782 t_res_flow_dplastic_strain(
m,
n,
i,
j) +=
783 (t_flow_dir_dstrain(
m,
n,
k,
l) * t_alpha_dir(
k,
l,
i,
j)) * b;
786 auto get_res_flow_dtemp = [&](
auto &t_res_flow_dtemp) {
787 const auto da = d_sigma_y_dtemp;
788 t_res_flow_dtemp(
k,
l) = da * t_plastic_strain_dot(
k,
l);
791 t_res_c = get_res_c();
792 get_res_flow(t_res_flow);
794 if (this->getTSCtx() == TSMethod::TSContext::CTX_TSSETIJACOBIAN) {
795 t_res_c_dtau = get_res_c_dtau();
796 get_res_c_dstrain(t_res_c_dstrain);
797 get_res_c_dplastic_strain(t_res_c_plastic_strain);
798 t_res_c_temperature = get_res_c_dtemperature();
799 get_res_flow_dtau(t_res_flow_dtau);
800 get_res_flow_dstrain(t_res_flow_dstrain);
801 get_res_flow_dplastic_strain(t_res_flow_dplastic_strain);
802 get_res_flow_dtemp(t_res_flow_dtemp);
811template <
int DIM,
typename DomainEleOp>
815 boost::shared_ptr<CommonData> common_data_ptr,
816 boost::shared_ptr<MatrixDouble> m_D_ptr,
817 boost::shared_ptr<ThermoPlasticOps::ThermoPlasticBlockedParameters>
818 tp_common_data_ptr =
nullptr);
819 MoFEMErrorCode doWork(
int side, EntityType
type,
EntData &data);
823 boost::shared_ptr<ThermoPlasticOps::ThermoPlasticBlockedParameters>
825 boost::shared_ptr<MatrixDouble>
mDPtr;
828template <
int DIM,
typename DomainEleOp>
830 const std::string
field_name, boost::shared_ptr<CommonData> common_data_ptr,
831 boost::shared_ptr<MatrixDouble> m_D_ptr,
832 boost::shared_ptr<ThermoPlasticOps::ThermoPlasticBlockedParameters>
835 commonDataPtr(common_data_ptr), mDPtr(m_D_ptr),
836 TPCommonDataPtr(tp_common_data_ptr) {
838 std::fill(&DomainEleOp::doEntities[MBEDGE],
839 &DomainEleOp::doEntities[MBMAXTYPE],
false);
842template <
int DIM,
typename DomainEleOp>
854 auto ¶ms = commonDataPtr->blockParams;
856 const size_t nb_gauss_pts = DomainEleOp::getGaussPts().size2();
857 auto t_w = DomainEleOp::getFTensor0IntegrationWeight();
858 auto t_tau = getFTensor0FromVec(commonDataPtr->plasticTau);
859 auto t_tau_dot = getFTensor0FromVec(commonDataPtr->plasticTauDot);
860 auto t_f = getFTensor0FromVec(commonDataPtr->plasticSurface);
861 auto t_flow = getFTensor2SymmetricFromMat<DIM>(commonDataPtr->plasticFlow);
862 auto t_plastic_strain =
863 getFTensor2SymmetricFromMat<DIM>(commonDataPtr->plasticStrain);
865 getFTensor2SymmetricFromMat<DIM>(*(commonDataPtr->mStressPtr));
867 auto t_D = getFTensor4DdgFromMat<DIM, DIM, 0>(*commonDataPtr->mDPtr);
868 auto t_D_Op = getFTensor4DdgFromMat<DIM, DIM, 0>(*mDPtr);
870 auto t_temp = getFTensor0FromVec(TPCommonDataPtr->temperature);
877 t_flow_dir_dstress(
i,
j,
k,
l) =
878 1.5 * (t_diff_deviator(
M,
N,
i,
j) * t_diff_deviator(
M,
N,
k,
l));
879 t_flow_dir_dstrain(
i,
j,
k,
l) =
880 t_flow_dir_dstress(
i,
j,
m,
n) * t_D_Op(
m,
n,
k,
l);
885 commonDataPtr->resC.resize(nb_gauss_pts,
false);
886 commonDataPtr->resCdTau.resize(nb_gauss_pts,
false);
887 commonDataPtr->resCdStrain.resize(
size_symm, nb_gauss_pts,
false);
888 commonDataPtr->resCdPlasticStrain.resize(
size_symm, nb_gauss_pts,
false);
889 TPCommonDataPtr->resCdTemperature.resize(nb_gauss_pts,
false);
890 commonDataPtr->resFlow.resize(
size_symm, nb_gauss_pts,
false);
891 commonDataPtr->resFlowDtau.resize(
size_symm, nb_gauss_pts,
false);
896 TPCommonDataPtr->resFlowDtemp.resize(
size_symm, nb_gauss_pts,
false);
898 commonDataPtr->resC.clear();
899 commonDataPtr->resCdTau.clear();
900 commonDataPtr->resCdStrain.clear();
901 commonDataPtr->resCdPlasticStrain.clear();
902 TPCommonDataPtr->resCdTemperature.clear();
903 commonDataPtr->resFlow.clear();
904 commonDataPtr->resFlowDtau.clear();
905 commonDataPtr->resFlowDstrain.clear();
906 commonDataPtr->resFlowDstrainDot.clear();
907 TPCommonDataPtr->resFlowDtemp.clear();
909 auto t_res_c = getFTensor0FromVec(commonDataPtr->resC);
910 auto t_res_c_dtau = getFTensor0FromVec(commonDataPtr->resCdTau);
911 auto t_res_c_dstrain =
912 getFTensor2SymmetricFromMat<DIM>(commonDataPtr->resCdStrain);
913 auto t_res_c_plastic_strain =
914 getFTensor2SymmetricFromMat<DIM>(commonDataPtr->resCdPlasticStrain);
915 auto t_res_c_temperature =
916 getFTensor0FromVec(TPCommonDataPtr->resCdTemperature);
917 auto t_res_flow = getFTensor2SymmetricFromMat<DIM>(commonDataPtr->resFlow);
918 auto t_res_flow_dtau =
919 getFTensor2SymmetricFromMat<DIM>(commonDataPtr->resFlowDtau);
920 auto t_res_flow_dstrain =
921 getFTensor4DdgFromMat<DIM, DIM>(commonDataPtr->resFlowDstrain);
922 auto t_res_flow_dplastic_strain =
923 getFTensor4DdgFromMat<DIM, DIM>(commonDataPtr->resFlowDstrainDot);
924 auto t_res_flow_dtemp =
925 getFTensor2SymmetricFromMat<DIM>(TPCommonDataPtr->resFlowDtemp);
937 ++t_res_c_plastic_strain;
938 ++t_res_c_temperature;
941 ++t_res_flow_dstrain;
942 ++t_res_flow_dplastic_strain;
948 auto get_avtive_pts = [&]() {
949 int nb_points_avtive_on_elem = 0;
950 int nb_points_on_elem = 0;
952 auto t_tau = getFTensor0FromVec(commonDataPtr->plasticTau);
953 auto t_tau_dot = getFTensor0FromVec(commonDataPtr->plasticTauDot);
954 auto t_f = getFTensor0FromVec(commonDataPtr->plasticSurface);
955 auto t_plastic_strain_dot =
956 getFTensor2SymmetricFromMat<SPACE_DIM>(commonDataPtr->plasticStrainDot);
957 auto t_temp = getFTensor0FromVec(TPCommonDataPtr->temperature);
959 auto dt = this->getTStimeStep();
961 for (
auto gg = 0; gg != nb_gauss_pts; ++gg) {
964 w(eqiv, t_tau_dot, t_f,
968 TPCommonDataPtr->temp0, t_temp),
974 ++nb_points_avtive_on_elem;
980 ++t_plastic_strain_dot;
991 nb_points += nb_points_on_elem;
992 if (nb_points_avtive_on_elem > 0) {
994 active_points += nb_points_avtive_on_elem;
995 if (nb_points_avtive_on_elem == nb_points_on_elem) {
1000 if (nb_points_avtive_on_elem != nb_points_on_elem)
1006 if (DomainEleOp::getTSCtx() == TSMethod::TSContext::CTX_TSSETIJACOBIAN) {
1010 for (
auto gg = 0; gg != nb_gauss_pts; ++gg) {
1015 double c_dot_tau, c_sigma_y,
c, c_f, c_equiv;
1018 t_diff_eqiv(
i,
j) = 0.0;
1027 t_stress,
trace(t_stress),
1039template <
int DIM,
typename DomainEleOp>
1046 boost::shared_ptr<CommonData> common_data_ptr,
1047 boost::shared_ptr<MatrixDouble> mDPtr);
1049 boost::shared_ptr<MatrixDouble> mDPtr);
1054 boost::shared_ptr<MatrixDouble> mDPtr;
1055 boost::shared_ptr<CommonData> commonDataPtr;
1058template <
int DIM,
typename DomainEleOp>
1060 const std::string
field_name, boost::shared_ptr<CommonData> common_data_ptr,
1061 boost::shared_ptr<MatrixDouble> m_D_ptr)
1063 commonDataPtr(common_data_ptr), mDPtr(m_D_ptr) {
1065 std::fill(&DomainEleOp::doEntities[MBEDGE],
1066 &DomainEleOp::doEntities[MBMAXTYPE],
false);
1069template <
int DIM,
typename DomainEleOp>
1070OpPlasticStressImpl<DIM, GAUSS, DomainEleOp>::OpPlasticStressImpl(
1071 boost::shared_ptr<CommonData> common_data_ptr,
1072 boost::shared_ptr<MatrixDouble> m_D_ptr)
1074 commonDataPtr(common_data_ptr), mDPtr(m_D_ptr) {}
1077template <
int DIM,
typename DomainEleOp>
1079OpPlasticStressImpl<DIM, GAUSS, DomainEleOp>::doWork(
int side, EntityType
type,
1088 const size_t nb_gauss_pts = commonDataPtr->mStrainPtr->size2();
1089 commonDataPtr->mStressPtr->resize((DIM * (DIM + 1)) / 2, nb_gauss_pts);
1090 auto t_D = getFTensor4DdgFromMat<DIM, DIM, 0>(*mDPtr);
1092 getFTensor2SymmetricFromMat<DIM>(*(commonDataPtr->mStrainPtr));
1093 auto t_plastic_strain =
1094 getFTensor2SymmetricFromMat<DIM>(commonDataPtr->plasticStrain);
1096 getFTensor2SymmetricFromMat<DIM>(*(commonDataPtr->mStressPtr));
1098 for (
size_t gg = 0; gg != nb_gauss_pts; ++gg) {
1100 t_D(
i,
j,
k,
l) * (t_strain(
k,
l) - t_plastic_strain(
k,
l));
1110template <
int DIM,
typename AssemblyDomainEleOp>
1114 boost::shared_ptr<CommonData> common_data_ptr,
1115 boost::shared_ptr<MatrixDouble> m_D_ptr);
1119 boost::shared_ptr<CommonData> commonDataPtr;
1120 boost::shared_ptr<MatrixDouble> mDPtr;
1123template <
int DIM,
typename AssemblyDomainEleOp>
1126 boost::shared_ptr<CommonData> common_data_ptr,
1127 boost::shared_ptr<MatrixDouble> m_D_ptr)
1129 commonDataPtr(common_data_ptr), mDPtr(m_D_ptr) {}
1131template <
int DIM,
typename AssemblyDomainEleOp>
1133OpCalculatePlasticFlowRhsImpl<DIM, GAUSS, AssemblyDomainEleOp>::iNtegrate(
1134 EntitiesFieldData::EntData &data) {
1141 constexpr auto size_symm = (DIM * (DIM + 1)) / 2;
1144 const auto nb_integration_pts = AssemblyDomainEleOp::getGaussPts().size2();
1145 const auto nb_base_functions = data.getN().size2();
1147 auto t_res_flow = getFTensor2SymmetricFromMat<DIM>(commonDataPtr->resFlow);
1151 auto next = [&]() { ++t_res_flow; };
1153 auto t_w = AssemblyDomainEleOp::getFTensor0IntegrationWeight();
1154 auto t_base = data.getFTensor0N();
1155 auto &nf = AssemblyDomainEleOp::locF;
1156 for (
size_t gg = 0; gg != nb_integration_pts; ++gg) {
1157 double alpha = AssemblyDomainEleOp::getMeasure() * t_w;
1161 t_rhs(L) = alpha * (t_res_flow(
i,
j) * t_L(
i,
j, L));
1164 auto t_nf = getFTensor1FromArray<size_symm, size_symm>(nf);
1166 for (; bb != AssemblyDomainEleOp::nbRows /
size_symm; ++bb) {
1167 t_nf(L) += t_base * t_rhs(L);
1171 for (; bb < nb_base_functions; ++bb)
1178template <
typename AssemblyDomainEleOp>
1182 boost::shared_ptr<CommonData> common_data_ptr,
1183 boost::shared_ptr<MatrixDouble> m_D_ptr);
1187 boost::shared_ptr<CommonData> commonDataPtr;
1188 boost::shared_ptr<MatrixDouble> mDPtr;
1191template <
typename AssemblyDomainEleOp>
1194 boost::shared_ptr<CommonData> common_data_ptr,
1195 boost::shared_ptr<MatrixDouble> m_D_ptr)
1197 commonDataPtr(common_data_ptr), mDPtr(m_D_ptr) {}
1199template <
typename AssemblyDomainEleOp>
1201OpCalculateConstraintsRhsImpl<GAUSS, AssemblyDomainEleOp>::iNtegrate(
1202 EntitiesFieldData::EntData &data) {
1205 const size_t nb_integration_pts = AssemblyDomainEleOp::getGaussPts().size2();
1206 const size_t nb_base_functions = data.getN().size2();
1208 auto t_res_c = getFTensor0FromVec(commonDataPtr->resC);
1210 auto next = [&]() { ++t_res_c; };
1212 auto t_w = AssemblyDomainEleOp::getFTensor0IntegrationWeight();
1213 auto &nf = AssemblyDomainEleOp::locF;
1214 auto t_base = data.getFTensor0N();
1215 for (
size_t gg = 0; gg != nb_integration_pts; ++gg) {
1216 const double alpha = AssemblyDomainEleOp::getMeasure() * t_w;
1218 const auto res = alpha * t_res_c;
1222 for (; bb != AssemblyDomainEleOp::nbRows; ++bb) {
1223 nf[bb] += t_base * res;
1226 for (; bb < nb_base_functions; ++bb)
1233template <
int DIM,
typename AssemblyDomainEleOp>
1237 const std::string row_field_name,
const std::string col_field_name,
1238 boost::shared_ptr<CommonData> common_data_ptr,
1239 boost::shared_ptr<MatrixDouble> m_D_ptr);
1240 MoFEMErrorCode
iNtegrate(EntitiesFieldData::EntData &row_data,
1241 EntitiesFieldData::EntData &col_data);
1244 boost::shared_ptr<CommonData> commonDataPtr;
1245 boost::shared_ptr<MatrixDouble> mDPtr;
1248template <
int DIM,
typename AssemblyDomainEleOp>
1251 const std::string row_field_name,
const std::string col_field_name,
1252 boost::shared_ptr<CommonData> common_data_ptr,
1253 boost::shared_ptr<MatrixDouble> m_D_ptr)
1256 commonDataPtr(common_data_ptr), mDPtr(m_D_ptr) {
1257 AssemblyDomainEleOp::sYmm =
false;
1263 &mat(3 * rr + 0, 0), &mat(3 * rr + 0, 1), &mat(3 * rr + 0, 2),
1264 &mat(3 * rr + 1, 0), &mat(3 * rr + 1, 1), &mat(3 * rr + 1, 2),
1265 &mat(3 * rr + 2, 0), &mat(3 * rr + 2, 1), &mat(3 * rr + 2, 2)};
1271 &mat(6 * rr + 0, 0), &mat(6 * rr + 0, 1), &mat(6 * rr + 0, 2),
1272 &mat(6 * rr + 0, 3), &mat(6 * rr + 0, 4), &mat(6 * rr + 0, 5),
1273 &mat(6 * rr + 1, 0), &mat(6 * rr + 1, 1), &mat(6 * rr + 1, 2),
1274 &mat(6 * rr + 1, 3), &mat(6 * rr + 1, 4), &mat(6 * rr + 1, 5),
1275 &mat(6 * rr + 2, 0), &mat(6 * rr + 2, 1), &mat(6 * rr + 2, 2),
1276 &mat(6 * rr + 2, 3), &mat(6 * rr + 2, 4), &mat(6 * rr + 2, 5),
1277 &mat(6 * rr + 3, 0), &mat(6 * rr + 3, 1), &mat(6 * rr + 3, 2),
1278 &mat(6 * rr + 3, 3), &mat(6 * rr + 3, 4), &mat(6 * rr + 3, 5),
1279 &mat(6 * rr + 4, 0), &mat(6 * rr + 4, 1), &mat(6 * rr + 4, 2),
1280 &mat(6 * rr + 4, 3), &mat(6 * rr + 4, 4), &mat(6 * rr + 4, 5),
1281 &mat(6 * rr + 5, 0), &mat(6 * rr + 5, 1), &mat(6 * rr + 5, 2),
1282 &mat(6 * rr + 5, 3), &mat(6 * rr + 5, 4), &mat(6 * rr + 5, 5)};
1285template <
int DIM,
typename AssemblyDomainEleOp>
1287OpCalculatePlasticFlowLhs_dEPImpl<DIM, GAUSS, AssemblyDomainEleOp>::iNtegrate(
1288 EntitiesFieldData::EntData &row_data,
1289 EntitiesFieldData::EntData &col_data) {
1296 constexpr auto size_symm = (DIM * (DIM + 1)) / 2;
1300 auto &locMat = AssemblyDomainEleOp::locMat;
1302 const auto nb_integration_pts = AssemblyDomainEleOp::getGaussPts().size2();
1303 const auto nb_row_base_functions = row_data.getN().size2();
1305 auto t_res_flow_dstrain =
1306 getFTensor4DdgFromMat<DIM, DIM>(commonDataPtr->resFlowDstrain);
1307 auto t_res_flow_dplastic_strain =
1308 getFTensor4DdgFromMat<DIM, DIM>(commonDataPtr->resFlowDstrainDot);
1312 ++t_res_flow_dstrain;
1313 ++t_res_flow_dplastic_strain;
1316 auto t_w = AssemblyDomainEleOp::getFTensor0IntegrationWeight();
1317 auto t_row_base = row_data.getFTensor0N();
1318 for (
size_t gg = 0; gg != nb_integration_pts; ++gg) {
1319 double alpha = AssemblyDomainEleOp::getMeasure() * t_w;
1324 alpha * (t_L(
i,
j, O) * ((t_res_flow_dplastic_strain(
i,
j,
k,
l) -
1325 t_res_flow_dstrain(
i,
j,
k,
l)) *
1330 for (; rr != AssemblyDomainEleOp::nbRows /
size_symm; ++rr) {
1333 auto t_col_base = col_data.getFTensor0N(gg, 0);
1334 for (
size_t cc = 0; cc != AssemblyDomainEleOp::nbCols /
size_symm; ++cc) {
1335 t_mat(O, L) += ((t_row_base * t_col_base) * t_res_mat(O, L));
1343 for (; rr < nb_row_base_functions; ++rr)
1350template <
int DIM,
typename AssemblyDomainEleOp>
1354 const std::string row_field_name,
const std::string col_field_name,
1355 boost::shared_ptr<CommonData> common_data_ptr,
1356 boost::shared_ptr<MatrixDouble> m_D_ptr);
1357 MoFEMErrorCode
iNtegrate(EntitiesFieldData::EntData &row_data,
1358 EntitiesFieldData::EntData &col_data);
1361 boost::shared_ptr<CommonData> commonDataPtr;
1362 boost::shared_ptr<MatrixDouble> mDPtr;
1365template <
int DIM,
typename AssemblyDomainEleOp>
1369 const std::string row_field_name,
const std::string col_field_name,
1370 boost::shared_ptr<CommonData> common_data_ptr,
1371 boost::shared_ptr<MatrixDouble> m_D_ptr);
1372 MoFEMErrorCode
iNtegrate(EntitiesFieldData::EntData &row_data,
1373 EntitiesFieldData::EntData &col_data);
1376 boost::shared_ptr<CommonData> commonDataPtr;
1377 boost::shared_ptr<MatrixDouble> mDPtr;
1380template <
int DIM,
typename AssemblyDomainEleOp>
1383 const std::string row_field_name,
const std::string col_field_name,
1384 boost::shared_ptr<CommonData> common_data_ptr,
1385 boost::shared_ptr<MatrixDouble> m_D_ptr)
1388 commonDataPtr(common_data_ptr), mDPtr(m_D_ptr) {
1389 AssemblyDomainEleOp::sYmm =
false;
1395 &mat(3 * rr + 0, 0), &mat(3 * rr + 1, 0), &mat(3 * rr + 2, 0)};
1401 &mat(6 * rr + 0, 0), &mat(6 * rr + 1, 0), &mat(6 * rr + 2, 0),
1402 &mat(6 * rr + 3, 0), &mat(6 * rr + 4, 0), &mat(6 * rr + 5, 0)};
1405template <
int DIM,
typename AssemblyDomainEleOp>
1407OpCalculatePlasticFlowLhs_dTAUImpl<DIM, GAUSS, AssemblyDomainEleOp>::iNtegrate(
1408 EntitiesFieldData::EntData &row_data,
1409 EntitiesFieldData::EntData &col_data) {
1414 constexpr auto size_symm = (DIM * (DIM + 1)) / 2;
1417 const auto nb_integration_pts = AssemblyDomainEleOp::getGaussPts().size2();
1418 const size_t nb_row_base_functions = row_data.getN().size2();
1419 auto &locMat = AssemblyDomainEleOp::locMat;
1421 auto t_res_flow_dtau =
1422 getFTensor2SymmetricFromMat<DIM>(commonDataPtr->resFlowDtau);
1426 auto next = [&]() { ++t_res_flow_dtau; };
1428 auto t_w = AssemblyDomainEleOp::getFTensor0IntegrationWeight();
1429 auto t_row_base = row_data.getFTensor0N();
1430 for (
size_t gg = 0; gg != nb_integration_pts; ++gg) {
1431 double alpha = AssemblyDomainEleOp::getMeasure() * t_w;
1434 t_res_vec(L) = alpha * (t_res_flow_dtau(
i,
j) * t_L(
i,
j, L));
1438 for (; rr != AssemblyDomainEleOp::nbRows /
size_symm; ++rr) {
1441 auto t_col_base = col_data.getFTensor0N(gg, 0);
1442 for (
size_t cc = 0; cc != AssemblyDomainEleOp::nbCols; cc++) {
1443 t_mat(L) += t_row_base * t_col_base * t_res_vec(L);
1449 for (; rr != nb_row_base_functions; ++rr)
1456template <
int DIM,
typename AssemblyDomainEleOp>
1460 const std::string row_field_name,
const std::string col_field_name,
1461 boost::shared_ptr<CommonData> common_data_ptr,
1462 boost::shared_ptr<MatrixDouble> mat_D_ptr);
1463 MoFEMErrorCode
iNtegrate(EntitiesFieldData::EntData &row_data,
1464 EntitiesFieldData::EntData &col_data);
1467 boost::shared_ptr<CommonData> commonDataPtr;
1468 boost::shared_ptr<MatrixDouble> mDPtr;
1471template <
int DIM,
typename AssemblyDomainEleOp>
1474 const std::string row_field_name,
const std::string col_field_name,
1475 boost::shared_ptr<CommonData> common_data_ptr,
1476 boost::shared_ptr<MatrixDouble> m_D_ptr)
1479 commonDataPtr(common_data_ptr), mDPtr(m_D_ptr) {
1480 AssemblyDomainEleOp::sYmm =
false;
1485 &mat(0, 0), &mat(0, 1), &mat(0, 2)};
1490 &mat(0, 0), &mat(0, 1), &mat(0, 2), &mat(0, 3), &mat(0, 4), &mat(0, 5)};
1493template <
int DIM,
typename AssemblyDomainEleOp>
1495OpCalculateConstraintsLhs_dEPImpl<DIM, GAUSS, AssemblyDomainEleOp>::iNtegrate(
1496 EntitiesFieldData::EntData &row_data,
1497 EntitiesFieldData::EntData &col_data) {
1502 constexpr auto size_symm = (DIM * (DIM + 1)) / 2;
1505 const auto nb_integration_pts = AssemblyDomainEleOp::getGaussPts().size2();
1506 const auto nb_row_base_functions = row_data.getN().size2();
1509 getFTensor2SymmetricFromMat<SPACE_DIM>(commonDataPtr->resCdStrain);
1510 auto t_c_dplastic_strain =
1511 getFTensor2SymmetricFromMat<SPACE_DIM>(commonDataPtr->resCdPlasticStrain);
1515 ++t_c_dplastic_strain;
1520 auto t_w = AssemblyDomainEleOp::getFTensor0IntegrationWeight();
1521 auto t_row_base = row_data.getFTensor0N();
1522 for (
auto gg = 0; gg != nb_integration_pts; ++gg) {
1523 const double alpha = AssemblyDomainEleOp::getMeasure() * t_w;
1528 t_L(
i,
j, L) * (t_c_dplastic_strain(
i,
j) - t_c_dstrain(
i,
j));
1534 for (; rr != AssemblyDomainEleOp::nbRows; ++rr) {
1535 const auto row_base = alpha * t_row_base;
1536 auto t_col_base = col_data.getFTensor0N(gg, 0);
1537 for (
size_t cc = 0; cc != AssemblyDomainEleOp::nbCols /
size_symm; cc++) {
1538 t_mat(L) += (row_base * t_col_base) * t_res_vec(L);
1544 for (; rr != nb_row_base_functions; ++rr)
1551template <
typename AssemblyDomainEleOp>
1555 const std::string row_field_name,
const std::string col_field_name,
1556 boost::shared_ptr<CommonData> common_data_ptr);
1557 MoFEMErrorCode
iNtegrate(EntitiesFieldData::EntData &row_data,
1558 EntitiesFieldData::EntData &col_data);
1561 boost::shared_ptr<CommonData> commonDataPtr;
1564template <
typename AssemblyDomainEleOp>
1567 const std::string row_field_name,
const std::string col_field_name,
1568 boost::shared_ptr<CommonData> common_data_ptr)
1571 commonDataPtr(common_data_ptr) {
1572 AssemblyDomainEleOp::sYmm =
false;
1575template <
typename AssemblyDomainEleOp>
1577OpCalculateConstraintsLhs_dTAUImpl<GAUSS, AssemblyDomainEleOp>::iNtegrate(
1578 EntitiesFieldData::EntData &row_data,
1579 EntitiesFieldData::EntData &col_data) {
1582 const auto nb_integration_pts = AssemblyDomainEleOp::getGaussPts().size2();
1583 const auto nb_row_base_functions = row_data.getN().size2();
1585 auto t_res_c_dtau = getFTensor0FromVec(commonDataPtr->resCdTau);
1586 auto next = [&]() { ++t_res_c_dtau; };
1588 auto t_w = AssemblyDomainEleOp::getFTensor0IntegrationWeight();
1589 auto t_row_base = row_data.getFTensor0N();
1590 for (
size_t gg = 0; gg != nb_integration_pts; ++gg) {
1591 const double alpha = AssemblyDomainEleOp::getMeasure() * t_w;
1594 const auto res = alpha * (t_res_c_dtau);
1597 auto mat_ptr = AssemblyDomainEleOp::locMat.data().begin();
1599 for (; rr != AssemblyDomainEleOp::nbRows; ++rr) {
1600 auto t_col_base = col_data.getFTensor0N(gg, 0);
1601 for (
size_t cc = 0; cc != AssemblyDomainEleOp::nbCols; ++cc) {
1602 *mat_ptr += t_row_base * t_col_base * res;
1608 for (; rr < nb_row_base_functions; ++rr)
#define FTENSOR_INDEX(DIM, I)
#define MoFEMFunctionBegin
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
#define MoFEMFunctionReturn(a)
Last executable line of each PETSc function used for error handling. Replaces return()
FTensor::Index< 'i', SPACE_DIM > i
const double c
speed of light (cm/ns)
const double n
refractive index of diffusive medium
FTensor::Index< 'l', 3 > l
FTensor::Index< 'j', 3 > j
FTensor::Index< 'k', 3 > k
PetscErrorCode MoFEMErrorCode
MoFEM/PETSc error code.
static auto get_mat_tensor_sym_dtensor_sym(size_t rr, MatrixDouble &mat, FTensor::Number< 2 >)
FTensor::Index< 'N', 3 > N
static auto get_mat_tensor_sym_dscalar(size_t rr, MatrixDouble &mat, FTensor::Number< 2 >)
double platsic_surface(FTensor::Tensor2_symmetric< double, 3 > &&t_stress_deviator)
auto diff_constrain_dtemp(double dc_dsigmay, double dsigma_y_dtemp)
auto get_mat_scalar_dtensor_sym(MatrixDouble &mat, FTensor::Number< 2 >)
double diff_constrain_ddot_tau(double sign, double eqiv, double dot_tau, double vis_H, double sigma_Y)
auto diff_constrain_dstress(double diff_constrain_df, FTensor::Tensor2_symmetric< T, DIM > &t_plastic_flow)
double constrian_sign(double x, double dt)
FTensor::Index< 'J', 3 > J
double diff_constrain_deqiv(double sign, double eqiv, double dot_tau, double sigma_Y)
auto diff_equivalent_strain_dot(const T1 eqiv, T2 &t_plastic_strain_dot, T3 &t_diff_plastic_strain, FTensor::Number< DIM >)
double constraint(double eqiv, double dot_tau, double f, double sigma_y, double abs_w, double vis_H, double sigma_Y)
auto diff_constrain_df(double sign)
auto diff_constrain_dsigma_y(double sign)
auto plastic_flow(long double f, FTensor::Tensor2_symmetric< double, 3 > &&t_dev_stress, const FTensor::DiffDeviator< T, DIM > &t_diff_deviator)
auto diff_plastic_flow_dstress(long double f, FTensor::Tensor2_symmetric< T, DIM > &t_flow, const FTensor::DiffDeviator< U, DIM > &t_diff_deviator)
FTensor::Index< 'I', 3 > I
[Common data]
auto diff_deviator(FTensor::Ddg< double, DIM, DIM > &&t_diff_stress, FTensor::Number< DIM >)
double trace(FTensor::Tensor2_symmetric< T, 2 > &t_stress)
auto diff_plastic_flow_dstrain(FTensor::Ddg< T, DIM, DIM > &t_D, FTensor::Ddg< double, DIM, DIM > &&t_diff_plastic_flow_dstress)
auto deviator(FTensor::Tensor2_symmetric< T, DIM > &t_stress, double trace, FTensor::Tensor2_symmetric< double, DIM > &t_alpha, FTensor::Number< DIM >)
double w(double eqiv, double dot_tau, double f, double sigma_y, double sigma_Y)
auto diff_constrain_dstrain(T1 &t_D, T2 &&t_diff_constrain_dstress)
static auto get_mat_tensor_sym_dvector(size_t rr, MatrixDouble &mat, FTensor::Number< 2 >)
[Lambda functions]
auto equivalent_strain_dot(FTensor::Tensor2_symmetric< T, DIM > &t_plastic_strain_dot)
double constrain_abs(double x, double dt)
constexpr auto field_name
FTensor::Index< 'm', 3 > m
Data on single entity (This is passed as argument to DataOperator::doWork)
static std::array< int, 5 > activityData
OpCalculateConstraintsLhs_dEPImpl(const std::string row_field_name, const std::string col_field_name, boost::shared_ptr< CommonData > common_data_ptr, boost::shared_ptr< MatrixDouble > mat_D_ptr)
MoFEMErrorCode iNtegrate(EntitiesFieldData::EntData &row_data, EntitiesFieldData::EntData &col_data)
OpCalculateConstraintsLhs_dTAUImpl(const std::string row_field_name, const std::string col_field_name, boost::shared_ptr< CommonData > common_data_ptr)
MoFEMErrorCode iNtegrate(EntitiesFieldData::EntData &row_data, EntitiesFieldData::EntData &col_data)
OpCalculateConstraintsLhs_dUImpl(const std::string row_field_name, const std::string col_field_name, boost::shared_ptr< CommonData > common_data_ptr, boost::shared_ptr< MatrixDouble > m_D_ptr)
MoFEMErrorCode iNtegrate(EntitiesFieldData::EntData &row_data, EntitiesFieldData::EntData &col_data)
OpCalculateConstraintsRhsImpl(const std::string field_name, boost::shared_ptr< CommonData > common_data_ptr, boost::shared_ptr< MatrixDouble > m_D_ptr)
MoFEMErrorCode iNtegrate(EntitiesFieldData::EntData &data)
MoFEMErrorCode iNtegrate(EntitiesFieldData::EntData &row_data, EntitiesFieldData::EntData &col_data)
OpCalculatePlasticFlowLhs_dEPImpl(const std::string row_field_name, const std::string col_field_name, boost::shared_ptr< CommonData > common_data_ptr, boost::shared_ptr< MatrixDouble > m_D_ptr)
MoFEMErrorCode iNtegrate(EntitiesFieldData::EntData &row_data, EntitiesFieldData::EntData &col_data)
OpCalculatePlasticFlowLhs_dTAUImpl(const std::string row_field_name, const std::string col_field_name, boost::shared_ptr< CommonData > common_data_ptr, boost::shared_ptr< MatrixDouble > m_D_ptr)
OpCalculatePlasticFlowRhsImpl(const std::string field_name, boost::shared_ptr< CommonData > common_data_ptr, boost::shared_ptr< MatrixDouble > m_D_ptr)
MoFEMErrorCode iNtegrate(EntitiesFieldData::EntData &data)
boost::shared_ptr< ThermoPlasticOps::ThermoPlasticBlockedParameters > commonTPDataPtr
boost::shared_ptr< CommonData > commonDataPtr
MoFEMErrorCode doWork(int side, EntityType type, EntData &data)
OpCalculatePlasticSurfaceImpl(const std::string field_name, boost::shared_ptr< CommonData > common_data_ptr)
MoFEMErrorCode doWork(int side, EntityType type, EntData &data)
boost::shared_ptr< ThermoPlasticOps::ThermoPlasticBlockedParameters > TPCommonDataPtr
boost::shared_ptr< ThermoPlasticOps::ThermoPlasticBlockedParameters > TPCommonDataPtr
boost::shared_ptr< MatrixDouble > mDPtr
boost::shared_ptr< CommonData > commonDataPtr
OpPlasticStressImpl(boost::shared_ptr< CommonData > common_data_ptr, boost::shared_ptr< MatrixDouble > mDPtr)
MoFEMErrorCode doWork(int side, EntityType type, EntData &data)
DEPRECATED OpPlasticStressImpl(const std::string field_name, boost::shared_ptr< CommonData > common_data_ptr, boost::shared_ptr< MatrixDouble > mDPtr)
double iso_hardening_dtemp(double tau, double H, double omega_0, double Qinf, double omega_h, double b_iso, double sigmaY, double temp_0, double temp)
auto kinematic_hardening(FTensor::Tensor2_symmetric< T, DIM > &t_plastic_strain, double C1_k)
double iso_hardening_dtau(double tau, double H, double Qinf, double b_iso)
double zeta
Viscous hardening.
double iso_hardening(double tau, double H, double Qinf, double b_iso, double sigmaY)