8struct ThermoPlasticBlockedParameters;
28 constexpr auto size_symm = (DIM * (DIM + 1)) / 2;
32 if constexpr (DIM == 2) {
56 t_diff(
i,
j,
k,
l) = 0;
57 t_diff(0, 0, 0, 0) = 1;
58 t_diff(1, 1, 1, 1) = 1;
60 t_diff(1, 0, 1, 0) = 0.5;
61 t_diff(1, 0, 0, 1) = 0.5;
63 t_diff(0, 1, 0, 1) = 0.5;
64 t_diff(0, 1, 1, 0) = 0.5;
66 if constexpr (DIM == 3) {
67 t_diff(2, 2, 2, 2) = 1;
69 t_diff(2, 0, 2, 0) = 0.5;
70 t_diff(2, 0, 0, 2) = 0.5;
71 t_diff(0, 2, 0, 2) = 0.5;
72 t_diff(0, 2, 2, 0) = 0.5;
74 t_diff(2, 1, 2, 1) = 0.5;
75 t_diff(2, 1, 1, 2) = 0.5;
76 t_diff(1, 2, 1, 2) = 0.5;
77 t_diff(1, 2, 2, 1) = 0.5;
85 constexpr double third = boost::math::constants::third<double>();
86 return (t_stress(0, 0) + t_stress(1, 1)) *
third;
91 constexpr double third = boost::math::constants::third<double>();
92 return (t_stress(0, 0) + t_stress(1, 1) + t_stress(2, 2)) *
third;
95template <
typename T,
int DIM>
104 for (
int ii = 0; ii != DIM; ++ii)
105 for (
int jj = ii; jj != DIM; ++jj)
106 t_dev(ii, jj) = t_stress(ii, jj);
107 t_dev(0, 0) -=
trace;
108 t_dev(1, 1) -=
trace;
109 t_dev(2, 2) -=
trace;
110 for (
int ii = 0; ii != DIM; ++ii)
111 for (
int jj = ii; jj != DIM; ++jj)
112 t_dev(ii, jj) -= t_alpha(ii, jj);
134 t_diff_deviator(
I,
J,
k,
l) = 0;
135 for (
int ii = 0; ii != DIM; ++ii)
136 for (
int jj = ii; jj != DIM; ++jj)
137 for (
int kk = 0; kk != DIM; ++kk)
138 for (
int ll = kk; ll != DIM; ++ll)
139 t_diff_deviator(ii, jj, kk, ll) = t_diff_stress(ii, jj, kk, ll);
141 constexpr double third = boost::math::constants::third<double>();
143 t_diff_deviator(0, 0, 0, 0) -=
third;
144 t_diff_deviator(0, 0, 1, 1) -=
third;
146 t_diff_deviator(1, 1, 0, 0) -=
third;
147 t_diff_deviator(1, 1, 1, 1) -=
third;
149 t_diff_deviator(2, 2, 0, 0) -=
third;
150 t_diff_deviator(2, 2, 1, 1) -=
third;
152 if constexpr (DIM == 3) {
153 t_diff_deviator(0, 0, 2, 2) -=
third;
154 t_diff_deviator(1, 1, 2, 2) -=
third;
155 t_diff_deviator(2, 2, 2, 2) -=
third;
158 return t_diff_deviator;
194 return std::sqrt(1.5 * t_stress_deviator(
I,
J) * t_stress_deviator(
I,
J)) +
195 std::numeric_limits<double>::epsilon();
206 (1.5 * (t_dev_stress(
I,
J) * t_diff_deviator(
I,
J,
k,
l))) /
f;
210template <
typename T,
int DIM>
220 t_diff_flow(
i,
j,
k,
l) =
221 (1.5 * (t_diff_deviator(
M,
N,
i,
j) * t_diff_deviator(
M,
N,
k,
l) -
222 (2. / 3.) * t_flow(
i,
j) * t_flow(
k,
l))) /
227template <
typename T,
int DIM>
238 t_diff_flow(
i,
j,
k,
l) =
239 t_diff_plastic_flow_dstress(
i,
j,
m,
n) * t_D(
m,
n,
k,
l);
256 const auto y = x / (
zeta /
dt);
257 if (y > std::numeric_limits<float>::max_exponent10 ||
258 y < std::numeric_limits<float>::min_exponent10) {
264 const auto e = std::exp(y);
265 return (e - 1) / (1 + e);
270 const auto y = -x / (
zeta /
dt);
271 if (y > std::numeric_limits<float>::max_exponent10 ||
272 y < std::numeric_limits<float>::min_exponent10) {
275 const double e = std::exp(y);
276 return x + 2 * (
zeta /
dt) * std::log1p(e);
280inline double w(
double eqiv,
double dot_tau,
double f,
double sigma_y,
282 return (1. /
cn1) * ((
f - sigma_y) / sigma_Y) + dot_tau;
300inline double constraint(
double eqiv,
double dot_tau,
double f,
double sigma_y,
301 double abs_w,
double vis_H,
double sigma_Y) {
309 (
cn0 *
cn1 * ((dot_tau - eqiv)) +
311 cn1 * ((dot_tau) - (1. /
cn1) * (f - sigma_y) / sigma_Y - abs_w))
317 double vis_H,
double sigma_Y) {
318 return vis_H + (sigma_Y / 2) * (
cn0 *
cn1 +
cn1 * (1 - sign));
323 return (sigma_Y / 2) * (-
cn0 *
cn1);
331 return dc_dsigmay * dsigma_y_dtemp;
334template <
typename T,
int DIM>
342 return t_diff_constrain_dstress;
345template <
typename T1,
typename T2,
int DIM>
352 t_diff_constrain_dstrain(
k,
l) =
353 t_diff_constrain_dstress(
i,
j) * t_D(
i,
j,
k,
l);
354 return t_diff_constrain_dstrain;
357template <
typename T,
int DIM>
362 constexpr double A = 2. / 3;
363 return std::sqrt(
A * t_plastic_strain_dot(
i,
j) *
364 t_plastic_strain_dot(
i,
j)) +
365 std::numeric_limits<double>::epsilon();
368template <
typename T1,
typename T2,
typename T3,
int DIM>
370 T3 &t_diff_plastic_strain,
376 constexpr double A = 2. / 3;
378 t_diff_eqiv(
i,
j) =
A * (t_plastic_strain_dot(
k,
l) / eqiv) *
379 t_diff_plastic_strain(
k,
l,
i,
j);
389 &mat(3 * rr + 0, 0), &mat(3 * rr + 0, 1), &mat(3 * rr + 1, 0),
390 &mat(3 * rr + 1, 1), &mat(3 * rr + 2, 0), &mat(3 * rr + 2, 1)};
396 &mat(6 * rr + 0, 0), &mat(6 * rr + 0, 1), &mat(6 * rr + 0, 2),
397 &mat(6 * rr + 1, 0), &mat(6 * rr + 1, 1), &mat(6 * rr + 1, 2),
398 &mat(6 * rr + 2, 0), &mat(6 * rr + 2, 1), &mat(6 * rr + 2, 2),
399 &mat(6 * rr + 3, 0), &mat(6 * rr + 3, 1), &mat(6 * rr + 3, 2),
400 &mat(6 * rr + 4, 0), &mat(6 * rr + 4, 1), &mat(6 * rr + 4, 2),
401 &mat(6 * rr + 5, 0), &mat(6 * rr + 5, 1), &mat(6 * rr + 5, 2)};
406template <
int DIM,
typename DomainEleOp>
411 boost::shared_ptr<CommonData> plastic_common_data_ptr,
412 boost::shared_ptr<ThermoPlasticOps::ThermoPlasticBlockedParameters>
413 tp_common_data_ptr =
nullptr);
414 MoFEMErrorCode doWork(
int side, EntityType type,
EntData &data);
418 boost::shared_ptr<ThermoPlasticOps::ThermoPlasticBlockedParameters>
422template <
int DIM,
typename DomainEleOp>
426 boost::shared_ptr<CommonData> common_data_ptr,
427 boost::shared_ptr<ThermoPlasticOps::ThermoPlasticBlockedParameters>
430 commonDataPtr(common_data_ptr), commonTPDataPtr(tp_common_data_ptr) {
432 std::fill(&DomainEleOp::doEntities[MBEDGE],
433 &DomainEleOp::doEntities[MBMAXTYPE],
false);
436template <
int DIM,
typename DomainEleOp>
438 int side, EntityType type,
EntData &data) {
444 const size_t nb_gauss_pts = commonDataPtr->mStressPtr->size2();
446 auto t_tau = getFTensor0FromVec(commonDataPtr->plasticTau);
447 auto t_plastic_strain =
448 getFTensor2SymmetricFromMat<DIM>(commonDataPtr->plasticStrain);
449 auto t_temp = getFTensor0FromVec(commonTPDataPtr->temperature);
451 commonDataPtr->plasticIsoHardening.resize(nb_gauss_pts,
false);
456 auto t_iso_hardening = getFTensor0FromVec(commonDataPtr->plasticIsoHardening);
460 auto ¶ms = commonDataPtr->blockParams;
462 for (
int i = 0;
i != nb_gauss_pts; ++
i) {
467 commonTPDataPtr->temp0, t_temp);
484template <
int DIM,
typename DomainEleOp>
488 boost::shared_ptr<CommonData> common_data_ptr);
492 boost::shared_ptr<CommonData> commonDataPtr;
495template <
int DIM,
typename DomainEleOp>
498 boost::shared_ptr<CommonData> common_data_ptr)
500 commonDataPtr(common_data_ptr) {
502 std::fill(&DomainEleOp::doEntities[MBEDGE],
503 &DomainEleOp::doEntities[MBMAXTYPE],
false);
506template <
int DIM,
typename DomainEleOp>
507MoFEMErrorCode OpCalculatePlasticSurfaceImpl<DIM, GAUSS, DomainEleOp>::doWork(
508 int side, EntityType type,
EntData &data) {
514 const size_t nb_gauss_pts = commonDataPtr->mStressPtr->size2();
516 getFTensor2SymmetricFromMat<DIM>(*(commonDataPtr->mStressPtr));
517 auto t_plastic_strain =
518 getFTensor2SymmetricFromMat<DIM>(commonDataPtr->plasticStrain);
520 commonDataPtr->plasticSurface.resize(nb_gauss_pts,
false);
521 commonDataPtr->plasticFlow.resize(
size_symm, nb_gauss_pts,
false);
522 auto t_flow = getFTensor2SymmetricFromMat<DIM>(commonDataPtr->plasticFlow);
524 auto ¶ms = commonDataPtr->blockParams;
526 for (
auto &f : commonDataPtr->plasticSurface) {
531 t_stress,
trace(t_stress),
544 t_flow(
i,
j) = t_flow_tmp(
i,
j);
554template <
int DIM,
typename DomainEleOp>
556 OpCalculatePlasticityImpl(
558 boost::shared_ptr<CommonData> common_data_ptr,
559 boost::shared_ptr<MatrixDouble> m_D_ptr,
560 boost::shared_ptr<ThermoPlasticOps::ThermoPlasticBlockedParameters>
561 tp_common_data_ptr =
nullptr);
565 boost::shared_ptr<CommonData> commonDataPtr;
566 boost::shared_ptr<ThermoPlasticOps::ThermoPlasticBlockedParameters>
568 boost::shared_ptr<MatrixDouble> mDPtr;
571template <
int DIM,
typename DomainEleOp>
573 const std::string
field_name, boost::shared_ptr<CommonData> common_data_ptr,
574 boost::shared_ptr<MatrixDouble> m_D_ptr,
575 boost::shared_ptr<ThermoPlasticOps::ThermoPlasticBlockedParameters>
578 commonDataPtr(common_data_ptr), mDPtr(m_D_ptr),
579 TPCommonDataPtr(tp_common_data_ptr) {
581 std::fill(&DomainEleOp::doEntities[MBEDGE],
582 &DomainEleOp::doEntities[MBMAXTYPE],
false);
585template <
int DIM,
typename DomainEleOp>
587 int side, EntityType type,
EntData &data) {
597 auto ¶ms = commonDataPtr->blockParams;
599 auto nb_gauss_pts = DomainEleOp::getGaussPts().size2();
600 auto t_w = DomainEleOp::getFTensor0IntegrationWeight();
601 auto t_tau = getFTensor0FromVec(commonDataPtr->plasticTau);
602 auto t_tau_dot = getFTensor0FromVec(commonDataPtr->plasticTauDot);
603 auto t_f = getFTensor0FromVec(commonDataPtr->plasticSurface);
604 auto t_flow = getFTensor2SymmetricFromMat<DIM>(commonDataPtr->plasticFlow);
605 auto t_plastic_strain =
606 getFTensor2SymmetricFromMat<DIM>(commonDataPtr->plasticStrain);
607 auto t_plastic_strain_dot =
608 getFTensor2SymmetricFromMat<DIM>(commonDataPtr->plasticStrainDot);
610 getFTensor2SymmetricFromMat<DIM>(*(commonDataPtr->mStressPtr));
612 auto t_D = getFTensor4DdgFromMat<DIM, DIM, 0>(*commonDataPtr->mDPtr);
613 auto t_D_Op = getFTensor4DdgFromMat<DIM, DIM, 0>(*mDPtr);
615 auto t_temp = getFTensor0FromVec(TPCommonDataPtr->temperature);
622 t_flow_dir_dstress(
i,
j,
k,
l) =
623 1.5 * (t_diff_deviator(
M,
N,
i,
j) * t_diff_deviator(
M,
N,
k,
l));
624 t_flow_dir_dstrain(
i,
j,
k,
l) =
625 t_flow_dir_dstress(
i,
j,
m,
n) * t_D_Op(
m,
n,
k,
l);
630 commonDataPtr->resC.resize(nb_gauss_pts,
false);
631 commonDataPtr->resCdTau.resize(nb_gauss_pts,
false);
632 commonDataPtr->resCdStrain.resize(
size_symm, nb_gauss_pts,
false);
633 commonDataPtr->resCdPlasticStrain.resize(
size_symm, nb_gauss_pts,
false);
634 TPCommonDataPtr->resCdTemperature.resize(nb_gauss_pts,
false);
635 commonDataPtr->resFlow.resize(
size_symm, nb_gauss_pts,
false);
636 commonDataPtr->resFlowDtau.resize(
size_symm, nb_gauss_pts,
false);
641 TPCommonDataPtr->resFlowDtemp.resize(
size_symm, nb_gauss_pts,
false);
643 commonDataPtr->resC.clear();
644 commonDataPtr->resCdTau.clear();
645 commonDataPtr->resCdStrain.clear();
646 commonDataPtr->resCdPlasticStrain.clear();
647 TPCommonDataPtr->resCdTemperature.clear();
648 commonDataPtr->resFlow.clear();
649 commonDataPtr->resFlowDtau.clear();
650 commonDataPtr->resFlowDstrain.clear();
651 commonDataPtr->resFlowDstrainDot.clear();
652 TPCommonDataPtr->resFlowDtemp.clear();
654 auto t_res_c = getFTensor0FromVec(commonDataPtr->resC);
655 auto t_res_c_dtau = getFTensor0FromVec(commonDataPtr->resCdTau);
656 auto t_res_c_dstrain =
657 getFTensor2SymmetricFromMat<DIM>(commonDataPtr->resCdStrain);
658 auto t_res_c_plastic_strain =
659 getFTensor2SymmetricFromMat<DIM>(commonDataPtr->resCdPlasticStrain);
660 auto t_res_c_temperature =
661 getFTensor0FromVec(TPCommonDataPtr->resCdTemperature);
662 auto t_res_flow = getFTensor2SymmetricFromMat<DIM>(commonDataPtr->resFlow);
663 auto t_res_flow_dtau =
664 getFTensor2SymmetricFromMat<DIM>(commonDataPtr->resFlowDtau);
665 auto t_res_flow_dstrain =
666 getFTensor4DdgFromMat<DIM, DIM>(commonDataPtr->resFlowDstrain);
667 auto t_res_flow_dplastic_strain =
668 getFTensor4DdgFromMat<DIM, DIM>(commonDataPtr->resFlowDstrainDot);
669 auto t_res_flow_dtemp =
670 getFTensor2SymmetricFromMat<DIM>(TPCommonDataPtr->resFlowDtemp);
678 ++t_plastic_strain_dot;
683 ++t_res_c_plastic_strain;
684 ++t_res_c_temperature;
687 ++t_res_flow_dstrain;
688 ++t_res_flow_dplastic_strain;
694 auto get_avtive_pts = [&]() {
695 int nb_points_avtive_on_elem = 0;
696 int nb_points_on_elem = 0;
698 auto t_tau = getFTensor0FromVec(commonDataPtr->plasticTau);
699 auto t_tau_dot = getFTensor0FromVec(commonDataPtr->plasticTauDot);
700 auto t_f = getFTensor0FromVec(commonDataPtr->plasticSurface);
701 auto t_plastic_strain_dot =
702 getFTensor2SymmetricFromMat<SPACE_DIM>(commonDataPtr->plasticStrainDot);
703 auto t_temp = getFTensor0FromVec(TPCommonDataPtr->temperature);
705 auto dt = this->getTStimeStep();
707 for (
auto gg = 0; gg != nb_gauss_pts; ++gg) {
710 w(eqiv, t_tau_dot, t_f,
714 TPCommonDataPtr->temp0, t_temp),
720 ++nb_points_avtive_on_elem;
726 ++t_plastic_strain_dot;
737 nb_points += nb_points_on_elem;
738 if (nb_points_avtive_on_elem > 0) {
740 active_points += nb_points_avtive_on_elem;
741 if (nb_points_avtive_on_elem == nb_points_on_elem) {
746 if (nb_points_avtive_on_elem != nb_points_on_elem)
752 if (DomainEleOp::getTSCtx() == TSMethod::TSContext::CTX_TSSETIJACOBIAN) {
756 auto dt = this->getTStimeStep();
757 for (
auto gg = 0; gg != nb_gauss_pts; ++gg) {
761 t_diff_plastic_strain,
768 TPCommonDataPtr->temp0, t_temp);
773 TPCommonDataPtr->temp0, t_temp);
779 auto c =
constraint(eqiv, t_tau_dot, t_f, sigma_y, abs_ww,
792 TPCommonDataPtr->temp0, t_temp);
797 t_stress,
trace(t_stress),
804 t_flow_dir(
k,
l) = 1.5 * (t_dev_stress(
I,
J) * t_diff_deviator(
I,
J,
k,
l));
806 t_flow_dstrain(
i,
j) = t_flow(
k,
l) * t_D_Op(
k,
l,
i,
j);
808 auto get_res_c = [&]() {
return c; };
810 auto get_res_c_dstrain = [&](
auto &t_diff_res) {
811 t_diff_res(
i,
j) = c_f * t_flow_dstrain(
i,
j);
814 auto get_res_c_dplastic_strain = [&](
auto &t_diff_res) {
815 t_diff_res(
i,
j) = (this->getTSa() * c_equiv) * t_diff_eqiv(
i,
j);
816 t_diff_res(
k,
l) -= c_f * t_flow(
i,
j) * t_alpha_dir(
i,
j,
k,
l);
819 auto get_res_c_dtau = [&]() {
820 return this->getTSa() * c_dot_tau + c_sigma_y * d_sigma_y;
823 auto get_res_c_plastic_strain = [&](
auto &t_diff_res) {
824 t_diff_res(
k,
l) = -c_f * t_flow(
i,
j) * t_alpha_dir(
i,
j,
k,
l);
827 auto get_res_c_dtemperature = [&]() {
return c_temperature; };
829 auto get_res_flow = [&](
auto &t_res_flow) {
830 const auto a = sigma_y;
831 const auto b = t_tau_dot;
832 t_res_flow(
k,
l) =
a * t_plastic_strain_dot(
k,
l) - b * t_flow_dir(
k,
l);
835 auto get_res_flow_dtau = [&](
auto &t_res_flow_dtau) {
836 const auto da = d_sigma_y;
837 const auto db = this->getTSa();
838 t_res_flow_dtau(
k,
l) =
839 da * t_plastic_strain_dot(
k,
l) - db * t_flow_dir(
k,
l);
842 auto get_res_flow_dstrain = [&](
auto &t_res_flow_dstrain) {
843 const auto b = t_tau_dot;
844 t_res_flow_dstrain(
m,
n,
k,
l) = -t_flow_dir_dstrain(
m,
n,
k,
l) * b;
847 auto get_res_flow_dplastic_strain = [&](
auto &t_res_flow_dplastic_strain) {
848 const auto a = sigma_y;
849 t_res_flow_dplastic_strain(
m,
n,
k,
l) =
850 (
a * this->getTSa()) * t_diff_plastic_strain(
m,
n,
k,
l);
851 const auto b = t_tau_dot;
852 t_res_flow_dplastic_strain(
m,
n,
i,
j) +=
853 (t_flow_dir_dstrain(
m,
n,
k,
l) * t_alpha_dir(
k,
l,
i,
j)) * b;
856 auto get_res_flow_dtemp = [&](
auto &t_res_flow_dtemp) {
857 const auto da = d_sigma_y_dtemp;
858 t_res_flow_dtemp(
k,
l) = da * t_plastic_strain_dot(
k,
l);
861 t_res_c = get_res_c();
862 get_res_flow(t_res_flow);
864 if (this->getTSCtx() == TSMethod::TSContext::CTX_TSSETIJACOBIAN) {
865 t_res_c_dtau = get_res_c_dtau();
866 get_res_c_dstrain(t_res_c_dstrain);
867 get_res_c_dplastic_strain(t_res_c_plastic_strain);
868 t_res_c_temperature = get_res_c_dtemperature();
869 get_res_flow_dtau(t_res_flow_dtau);
870 get_res_flow_dstrain(t_res_flow_dstrain);
871 get_res_flow_dplastic_strain(t_res_flow_dplastic_strain);
872 get_res_flow_dtemp(t_res_flow_dtemp);
881template <
int DIM,
typename DomainEleOp>
885 boost::shared_ptr<CommonData> common_data_ptr,
886 boost::shared_ptr<MatrixDouble> m_D_ptr,
887 boost::shared_ptr<ThermoPlasticOps::ThermoPlasticBlockedParameters>
888 tp_common_data_ptr =
nullptr);
889 MoFEMErrorCode doWork(
int side, EntityType type,
EntData &data);
893 boost::shared_ptr<ThermoPlasticOps::ThermoPlasticBlockedParameters>
895 boost::shared_ptr<MatrixDouble>
mDPtr;
898template <
int DIM,
typename DomainEleOp>
900 const std::string
field_name, boost::shared_ptr<CommonData> common_data_ptr,
901 boost::shared_ptr<MatrixDouble> m_D_ptr,
902 boost::shared_ptr<ThermoPlasticOps::ThermoPlasticBlockedParameters>
905 commonDataPtr(common_data_ptr), mDPtr(m_D_ptr),
906 TPCommonDataPtr(tp_common_data_ptr) {
908 std::fill(&DomainEleOp::doEntities[MBEDGE],
909 &DomainEleOp::doEntities[MBMAXTYPE],
false);
912template <
int DIM,
typename DomainEleOp>
914 int side, EntityType type,
EntData &data) {
924 auto ¶ms = commonDataPtr->blockParams;
926 const size_t nb_gauss_pts = DomainEleOp::getGaussPts().size2();
927 auto t_w = DomainEleOp::getFTensor0IntegrationWeight();
928 auto t_tau = getFTensor0FromVec(commonDataPtr->plasticTau);
929 auto t_tau_dot = getFTensor0FromVec(commonDataPtr->plasticTauDot);
930 auto t_f = getFTensor0FromVec(commonDataPtr->plasticSurface);
931 auto t_flow = getFTensor2SymmetricFromMat<DIM>(commonDataPtr->plasticFlow);
932 auto t_plastic_strain =
933 getFTensor2SymmetricFromMat<DIM>(commonDataPtr->plasticStrain);
935 getFTensor2SymmetricFromMat<DIM>(*(commonDataPtr->mStressPtr));
937 auto t_D = getFTensor4DdgFromMat<DIM, DIM, 0>(*commonDataPtr->mDPtr);
938 auto t_D_Op = getFTensor4DdgFromMat<DIM, DIM, 0>(*mDPtr);
940 auto t_temp = getFTensor0FromVec(TPCommonDataPtr->temperature);
947 t_flow_dir_dstress(
i,
j,
k,
l) =
948 1.5 * (t_diff_deviator(
M,
N,
i,
j) * t_diff_deviator(
M,
N,
k,
l));
949 t_flow_dir_dstrain(
i,
j,
k,
l) =
950 t_flow_dir_dstress(
i,
j,
m,
n) * t_D_Op(
m,
n,
k,
l);
955 commonDataPtr->resC.resize(nb_gauss_pts,
false);
956 commonDataPtr->resCdTau.resize(nb_gauss_pts,
false);
957 commonDataPtr->resCdStrain.resize(
size_symm, nb_gauss_pts,
false);
958 commonDataPtr->resCdPlasticStrain.resize(
size_symm, nb_gauss_pts,
false);
959 TPCommonDataPtr->resCdTemperature.resize(nb_gauss_pts,
false);
960 commonDataPtr->resFlow.resize(
size_symm, nb_gauss_pts,
false);
961 commonDataPtr->resFlowDtau.resize(
size_symm, nb_gauss_pts,
false);
966 TPCommonDataPtr->resFlowDtemp.resize(
size_symm, nb_gauss_pts,
false);
968 commonDataPtr->resC.clear();
969 commonDataPtr->resCdTau.clear();
970 commonDataPtr->resCdStrain.clear();
971 commonDataPtr->resCdPlasticStrain.clear();
972 TPCommonDataPtr->resCdTemperature.clear();
973 commonDataPtr->resFlow.clear();
974 commonDataPtr->resFlowDtau.clear();
975 commonDataPtr->resFlowDstrain.clear();
976 commonDataPtr->resFlowDstrainDot.clear();
977 TPCommonDataPtr->resFlowDtemp.clear();
979 auto t_res_c = getFTensor0FromVec(commonDataPtr->resC);
980 auto t_res_c_dtau = getFTensor0FromVec(commonDataPtr->resCdTau);
981 auto t_res_c_dstrain =
982 getFTensor2SymmetricFromMat<DIM>(commonDataPtr->resCdStrain);
983 auto t_res_c_plastic_strain =
984 getFTensor2SymmetricFromMat<DIM>(commonDataPtr->resCdPlasticStrain);
985 auto t_res_c_temperature =
986 getFTensor0FromVec(TPCommonDataPtr->resCdTemperature);
987 auto t_res_flow = getFTensor2SymmetricFromMat<DIM>(commonDataPtr->resFlow);
988 auto t_res_flow_dtau =
989 getFTensor2SymmetricFromMat<DIM>(commonDataPtr->resFlowDtau);
990 auto t_res_flow_dstrain =
991 getFTensor4DdgFromMat<DIM, DIM>(commonDataPtr->resFlowDstrain);
992 auto t_res_flow_dplastic_strain =
993 getFTensor4DdgFromMat<DIM, DIM>(commonDataPtr->resFlowDstrainDot);
994 auto t_res_flow_dtemp =
995 getFTensor2SymmetricFromMat<DIM>(TPCommonDataPtr->resFlowDtemp);
1007 ++t_res_c_plastic_strain;
1008 ++t_res_c_temperature;
1011 ++t_res_flow_dstrain;
1012 ++t_res_flow_dplastic_strain;
1018 auto get_avtive_pts = [&]() {
1019 int nb_points_avtive_on_elem = 0;
1020 int nb_points_on_elem = 0;
1022 auto t_tau = getFTensor0FromVec(commonDataPtr->plasticTau);
1023 auto t_tau_dot = getFTensor0FromVec(commonDataPtr->plasticTauDot);
1024 auto t_f = getFTensor0FromVec(commonDataPtr->plasticSurface);
1025 auto t_plastic_strain_dot =
1026 getFTensor2SymmetricFromMat<SPACE_DIM>(commonDataPtr->plasticStrainDot);
1027 auto t_temp = getFTensor0FromVec(TPCommonDataPtr->temperature);
1029 auto dt = this->getTStimeStep();
1031 for (
auto gg = 0; gg != nb_gauss_pts; ++gg) {
1034 w(eqiv, t_tau_dot, t_f,
1038 TPCommonDataPtr->temp0, t_temp),
1042 ++nb_points_on_elem;
1044 ++nb_points_avtive_on_elem;
1050 ++t_plastic_strain_dot;
1061 nb_points += nb_points_on_elem;
1062 if (nb_points_avtive_on_elem > 0) {
1064 active_points += nb_points_avtive_on_elem;
1065 if (nb_points_avtive_on_elem == nb_points_on_elem) {
1066 ++avtive_full_elems;
1070 if (nb_points_avtive_on_elem != nb_points_on_elem)
1076 if (DomainEleOp::getTSCtx() == TSMethod::TSContext::CTX_TSSETIJACOBIAN) {
1080 for (
auto gg = 0; gg != nb_gauss_pts; ++gg) {
1085 double c_dot_tau, c_sigma_y,
c, c_f, c_equiv;
1088 t_diff_eqiv(
i,
j) = 0.0;
1097 t_stress,
trace(t_stress),
1109template <
int DIM,
typename DomainEleOp>
1116 boost::shared_ptr<CommonData> common_data_ptr,
1117 boost::shared_ptr<MatrixDouble> mDPtr);
1119 boost::shared_ptr<MatrixDouble> mDPtr);
1124 boost::shared_ptr<MatrixDouble> mDPtr;
1125 boost::shared_ptr<CommonData> commonDataPtr;
1128template <
int DIM,
typename DomainEleOp>
1130 const std::string
field_name, boost::shared_ptr<CommonData> common_data_ptr,
1131 boost::shared_ptr<MatrixDouble> m_D_ptr)
1133 commonDataPtr(common_data_ptr), mDPtr(m_D_ptr) {
1135 std::fill(&DomainEleOp::doEntities[MBEDGE],
1136 &DomainEleOp::doEntities[MBMAXTYPE],
false);
1139template <
int DIM,
typename DomainEleOp>
1140OpPlasticStressImpl<DIM, GAUSS, DomainEleOp>::OpPlasticStressImpl(
1141 boost::shared_ptr<CommonData> common_data_ptr,
1142 boost::shared_ptr<MatrixDouble> m_D_ptr)
1144 commonDataPtr(common_data_ptr), mDPtr(m_D_ptr) {}
1147template <
int DIM,
typename DomainEleOp>
1149OpPlasticStressImpl<DIM, GAUSS, DomainEleOp>::doWork(
int side, EntityType type,
1158 const size_t nb_gauss_pts = commonDataPtr->mStrainPtr->size2();
1159 commonDataPtr->mStressPtr->resize((DIM * (DIM + 1)) / 2, nb_gauss_pts);
1160 auto t_D = getFTensor4DdgFromMat<DIM, DIM, 0>(*mDPtr);
1162 getFTensor2SymmetricFromMat<DIM>(*(commonDataPtr->mStrainPtr));
1163 auto t_plastic_strain =
1164 getFTensor2SymmetricFromMat<DIM>(commonDataPtr->plasticStrain);
1166 getFTensor2SymmetricFromMat<DIM>(*(commonDataPtr->mStressPtr));
1168 for (
size_t gg = 0; gg != nb_gauss_pts; ++gg) {
1170 t_D(
i,
j,
k,
l) * (t_strain(
k,
l) - t_plastic_strain(
k,
l));
1180template <
int DIM,
typename AssemblyDomainEleOp>
1184 boost::shared_ptr<CommonData> common_data_ptr,
1185 boost::shared_ptr<MatrixDouble> m_D_ptr);
1189 boost::shared_ptr<CommonData> commonDataPtr;
1190 boost::shared_ptr<MatrixDouble> mDPtr;
1193template <
int DIM,
typename AssemblyDomainEleOp>
1196 boost::shared_ptr<CommonData> common_data_ptr,
1197 boost::shared_ptr<MatrixDouble> m_D_ptr)
1199 commonDataPtr(common_data_ptr), mDPtr(m_D_ptr) {}
1201template <
int DIM,
typename AssemblyDomainEleOp>
1203OpCalculatePlasticFlowRhsImpl<DIM, GAUSS, AssemblyDomainEleOp>::iNtegrate(
1204 EntitiesFieldData::EntData &data) {
1211 constexpr auto size_symm = (DIM * (DIM + 1)) / 2;
1214 const auto nb_integration_pts = AssemblyDomainEleOp::getGaussPts().size2();
1215 const auto nb_base_functions = data.getN().size2();
1217 auto t_res_flow = getFTensor2SymmetricFromMat<DIM>(commonDataPtr->resFlow);
1221 auto next = [&]() { ++t_res_flow; };
1223 auto t_w = AssemblyDomainEleOp::getFTensor0IntegrationWeight();
1224 auto t_base = data.getFTensor0N();
1225 auto &nf = AssemblyDomainEleOp::locF;
1226 for (
size_t gg = 0; gg != nb_integration_pts; ++gg) {
1227 double alpha = AssemblyDomainEleOp::getMeasure() * t_w;
1231 t_rhs(L) = alpha * (t_res_flow(
i,
j) * t_L(
i,
j, L));
1234 auto t_nf = getFTensor1FromArray<size_symm, size_symm>(nf);
1236 for (; bb != AssemblyDomainEleOp::nbRows /
size_symm; ++bb) {
1237 t_nf(L) += t_base * t_rhs(L);
1241 for (; bb < nb_base_functions; ++bb)
1248template <
typename AssemblyDomainEleOp>
1252 boost::shared_ptr<CommonData> common_data_ptr,
1253 boost::shared_ptr<MatrixDouble> m_D_ptr);
1257 boost::shared_ptr<CommonData> commonDataPtr;
1258 boost::shared_ptr<MatrixDouble> mDPtr;
1261template <
typename AssemblyDomainEleOp>
1264 boost::shared_ptr<CommonData> common_data_ptr,
1265 boost::shared_ptr<MatrixDouble> m_D_ptr)
1267 commonDataPtr(common_data_ptr), mDPtr(m_D_ptr) {}
1269template <
typename AssemblyDomainEleOp>
1271OpCalculateConstraintsRhsImpl<GAUSS, AssemblyDomainEleOp>::iNtegrate(
1272 EntitiesFieldData::EntData &data) {
1275 const size_t nb_integration_pts = AssemblyDomainEleOp::getGaussPts().size2();
1276 const size_t nb_base_functions = data.getN().size2();
1278 auto t_res_c = getFTensor0FromVec(commonDataPtr->resC);
1280 auto next = [&]() { ++t_res_c; };
1282 auto t_w = AssemblyDomainEleOp::getFTensor0IntegrationWeight();
1283 auto &nf = AssemblyDomainEleOp::locF;
1284 auto t_base = data.getFTensor0N();
1285 for (
size_t gg = 0; gg != nb_integration_pts; ++gg) {
1286 const double alpha = AssemblyDomainEleOp::getMeasure() * t_w;
1288 const auto res = alpha * t_res_c;
1292 for (; bb != AssemblyDomainEleOp::nbRows; ++bb) {
1293 nf[bb] += t_base * res;
1296 for (; bb < nb_base_functions; ++bb)
1303template <
int DIM,
typename AssemblyDomainEleOp>
1307 const std::string row_field_name,
const std::string col_field_name,
1308 boost::shared_ptr<CommonData> common_data_ptr,
1309 boost::shared_ptr<MatrixDouble> m_D_ptr);
1310 MoFEMErrorCode
iNtegrate(EntitiesFieldData::EntData &row_data,
1311 EntitiesFieldData::EntData &col_data);
1314 boost::shared_ptr<CommonData> commonDataPtr;
1315 boost::shared_ptr<MatrixDouble> mDPtr;
1318template <
int DIM,
typename AssemblyDomainEleOp>
1321 const std::string row_field_name,
const std::string col_field_name,
1322 boost::shared_ptr<CommonData> common_data_ptr,
1323 boost::shared_ptr<MatrixDouble> m_D_ptr)
1326 commonDataPtr(common_data_ptr), mDPtr(m_D_ptr) {
1327 AssemblyDomainEleOp::sYmm =
false;
1333 &mat(3 * rr + 0, 0), &mat(3 * rr + 0, 1), &mat(3 * rr + 0, 2),
1334 &mat(3 * rr + 1, 0), &mat(3 * rr + 1, 1), &mat(3 * rr + 1, 2),
1335 &mat(3 * rr + 2, 0), &mat(3 * rr + 2, 1), &mat(3 * rr + 2, 2)};
1341 &mat(6 * rr + 0, 0), &mat(6 * rr + 0, 1), &mat(6 * rr + 0, 2),
1342 &mat(6 * rr + 0, 3), &mat(6 * rr + 0, 4), &mat(6 * rr + 0, 5),
1343 &mat(6 * rr + 1, 0), &mat(6 * rr + 1, 1), &mat(6 * rr + 1, 2),
1344 &mat(6 * rr + 1, 3), &mat(6 * rr + 1, 4), &mat(6 * rr + 1, 5),
1345 &mat(6 * rr + 2, 0), &mat(6 * rr + 2, 1), &mat(6 * rr + 2, 2),
1346 &mat(6 * rr + 2, 3), &mat(6 * rr + 2, 4), &mat(6 * rr + 2, 5),
1347 &mat(6 * rr + 3, 0), &mat(6 * rr + 3, 1), &mat(6 * rr + 3, 2),
1348 &mat(6 * rr + 3, 3), &mat(6 * rr + 3, 4), &mat(6 * rr + 3, 5),
1349 &mat(6 * rr + 4, 0), &mat(6 * rr + 4, 1), &mat(6 * rr + 4, 2),
1350 &mat(6 * rr + 4, 3), &mat(6 * rr + 4, 4), &mat(6 * rr + 4, 5),
1351 &mat(6 * rr + 5, 0), &mat(6 * rr + 5, 1), &mat(6 * rr + 5, 2),
1352 &mat(6 * rr + 5, 3), &mat(6 * rr + 5, 4), &mat(6 * rr + 5, 5)};
1355template <
int DIM,
typename AssemblyDomainEleOp>
1357OpCalculatePlasticFlowLhs_dEPImpl<DIM, GAUSS, AssemblyDomainEleOp>::iNtegrate(
1358 EntitiesFieldData::EntData &row_data,
1359 EntitiesFieldData::EntData &col_data) {
1366 constexpr auto size_symm = (DIM * (DIM + 1)) / 2;
1370 auto &locMat = AssemblyDomainEleOp::locMat;
1372 const auto nb_integration_pts = AssemblyDomainEleOp::getGaussPts().size2();
1373 const auto nb_row_base_functions = row_data.getN().size2();
1375 auto t_res_flow_dstrain =
1376 getFTensor4DdgFromMat<DIM, DIM>(commonDataPtr->resFlowDstrain);
1377 auto t_res_flow_dplastic_strain =
1378 getFTensor4DdgFromMat<DIM, DIM>(commonDataPtr->resFlowDstrainDot);
1382 ++t_res_flow_dstrain;
1383 ++t_res_flow_dplastic_strain;
1386 auto t_w = AssemblyDomainEleOp::getFTensor0IntegrationWeight();
1387 auto t_row_base = row_data.getFTensor0N();
1388 for (
size_t gg = 0; gg != nb_integration_pts; ++gg) {
1389 double alpha = AssemblyDomainEleOp::getMeasure() * t_w;
1394 alpha * (t_L(
i,
j, O) * ((t_res_flow_dplastic_strain(
i,
j,
k,
l) -
1395 t_res_flow_dstrain(
i,
j,
k,
l)) *
1400 for (; rr != AssemblyDomainEleOp::nbRows /
size_symm; ++rr) {
1403 auto t_col_base = col_data.getFTensor0N(gg, 0);
1404 for (
size_t cc = 0; cc != AssemblyDomainEleOp::nbCols /
size_symm; ++cc) {
1405 t_mat(O, L) += ((t_row_base * t_col_base) * t_res_mat(O, L));
1413 for (; rr < nb_row_base_functions; ++rr)
1420template <
int DIM,
typename AssemblyDomainEleOp>
1424 const std::string row_field_name,
const std::string col_field_name,
1425 boost::shared_ptr<CommonData> common_data_ptr,
1426 boost::shared_ptr<MatrixDouble> m_D_ptr);
1427 MoFEMErrorCode
iNtegrate(EntitiesFieldData::EntData &row_data,
1428 EntitiesFieldData::EntData &col_data);
1431 boost::shared_ptr<CommonData> commonDataPtr;
1432 boost::shared_ptr<MatrixDouble> mDPtr;
1435template <
int DIM,
typename AssemblyDomainEleOp>
1439 const std::string row_field_name,
const std::string col_field_name,
1440 boost::shared_ptr<CommonData> common_data_ptr,
1441 boost::shared_ptr<MatrixDouble> m_D_ptr);
1442 MoFEMErrorCode
iNtegrate(EntitiesFieldData::EntData &row_data,
1443 EntitiesFieldData::EntData &col_data);
1446 boost::shared_ptr<CommonData> commonDataPtr;
1447 boost::shared_ptr<MatrixDouble> mDPtr;
1450template <
int DIM,
typename AssemblyDomainEleOp>
1453 const std::string row_field_name,
const std::string col_field_name,
1454 boost::shared_ptr<CommonData> common_data_ptr,
1455 boost::shared_ptr<MatrixDouble> m_D_ptr)
1458 commonDataPtr(common_data_ptr), mDPtr(m_D_ptr) {
1459 AssemblyDomainEleOp::sYmm =
false;
1465 &mat(3 * rr + 0, 0), &mat(3 * rr + 1, 0), &mat(3 * rr + 2, 0)};
1471 &mat(6 * rr + 0, 0), &mat(6 * rr + 1, 0), &mat(6 * rr + 2, 0),
1472 &mat(6 * rr + 3, 0), &mat(6 * rr + 4, 0), &mat(6 * rr + 5, 0)};
1475template <
int DIM,
typename AssemblyDomainEleOp>
1477OpCalculatePlasticFlowLhs_dTAUImpl<DIM, GAUSS, AssemblyDomainEleOp>::iNtegrate(
1478 EntitiesFieldData::EntData &row_data,
1479 EntitiesFieldData::EntData &col_data) {
1484 constexpr auto size_symm = (DIM * (DIM + 1)) / 2;
1487 const auto nb_integration_pts = AssemblyDomainEleOp::getGaussPts().size2();
1488 const size_t nb_row_base_functions = row_data.getN().size2();
1489 auto &locMat = AssemblyDomainEleOp::locMat;
1491 auto t_res_flow_dtau =
1492 getFTensor2SymmetricFromMat<DIM>(commonDataPtr->resFlowDtau);
1496 auto next = [&]() { ++t_res_flow_dtau; };
1498 auto t_w = AssemblyDomainEleOp::getFTensor0IntegrationWeight();
1499 auto t_row_base = row_data.getFTensor0N();
1500 for (
size_t gg = 0; gg != nb_integration_pts; ++gg) {
1501 double alpha = AssemblyDomainEleOp::getMeasure() * t_w;
1504 t_res_vec(L) = alpha * (t_res_flow_dtau(
i,
j) * t_L(
i,
j, L));
1508 for (; rr != AssemblyDomainEleOp::nbRows /
size_symm; ++rr) {
1511 auto t_col_base = col_data.getFTensor0N(gg, 0);
1512 for (
size_t cc = 0; cc != AssemblyDomainEleOp::nbCols; cc++) {
1513 t_mat(L) += t_row_base * t_col_base * t_res_vec(L);
1519 for (; rr != nb_row_base_functions; ++rr)
1526template <
int DIM,
typename AssemblyDomainEleOp>
1530 const std::string row_field_name,
const std::string col_field_name,
1531 boost::shared_ptr<CommonData> common_data_ptr,
1532 boost::shared_ptr<MatrixDouble> mat_D_ptr);
1533 MoFEMErrorCode
iNtegrate(EntitiesFieldData::EntData &row_data,
1534 EntitiesFieldData::EntData &col_data);
1537 boost::shared_ptr<CommonData> commonDataPtr;
1538 boost::shared_ptr<MatrixDouble> mDPtr;
1541template <
int DIM,
typename AssemblyDomainEleOp>
1544 const std::string row_field_name,
const std::string col_field_name,
1545 boost::shared_ptr<CommonData> common_data_ptr,
1546 boost::shared_ptr<MatrixDouble> m_D_ptr)
1549 commonDataPtr(common_data_ptr), mDPtr(m_D_ptr) {
1550 AssemblyDomainEleOp::sYmm =
false;
1555 &mat(0, 0), &mat(0, 1), &mat(0, 2)};
1560 &mat(0, 0), &mat(0, 1), &mat(0, 2), &mat(0, 3), &mat(0, 4), &mat(0, 5)};
1563template <
int DIM,
typename AssemblyDomainEleOp>
1565OpCalculateConstraintsLhs_dEPImpl<DIM, GAUSS, AssemblyDomainEleOp>::iNtegrate(
1566 EntitiesFieldData::EntData &row_data,
1567 EntitiesFieldData::EntData &col_data) {
1572 constexpr auto size_symm = (DIM * (DIM + 1)) / 2;
1575 const auto nb_integration_pts = AssemblyDomainEleOp::getGaussPts().size2();
1576 const auto nb_row_base_functions = row_data.getN().size2();
1579 getFTensor2SymmetricFromMat<SPACE_DIM>(commonDataPtr->resCdStrain);
1580 auto t_c_dplastic_strain =
1581 getFTensor2SymmetricFromMat<SPACE_DIM>(commonDataPtr->resCdPlasticStrain);
1585 ++t_c_dplastic_strain;
1590 auto t_w = AssemblyDomainEleOp::getFTensor0IntegrationWeight();
1591 auto t_row_base = row_data.getFTensor0N();
1592 for (
auto gg = 0; gg != nb_integration_pts; ++gg) {
1593 const double alpha = AssemblyDomainEleOp::getMeasure() * t_w;
1598 t_L(
i,
j, L) * (t_c_dplastic_strain(
i,
j) - t_c_dstrain(
i,
j));
1604 for (; rr != AssemblyDomainEleOp::nbRows; ++rr) {
1605 const auto row_base = alpha * t_row_base;
1606 auto t_col_base = col_data.getFTensor0N(gg, 0);
1607 for (
size_t cc = 0; cc != AssemblyDomainEleOp::nbCols /
size_symm; cc++) {
1608 t_mat(L) += (row_base * t_col_base) * t_res_vec(L);
1614 for (; rr != nb_row_base_functions; ++rr)
1621template <
typename AssemblyDomainEleOp>
1625 const std::string row_field_name,
const std::string col_field_name,
1626 boost::shared_ptr<CommonData> common_data_ptr);
1627 MoFEMErrorCode
iNtegrate(EntitiesFieldData::EntData &row_data,
1628 EntitiesFieldData::EntData &col_data);
1631 boost::shared_ptr<CommonData> commonDataPtr;
1634template <
typename AssemblyDomainEleOp>
1637 const std::string row_field_name,
const std::string col_field_name,
1638 boost::shared_ptr<CommonData> common_data_ptr)
1641 commonDataPtr(common_data_ptr) {
1642 AssemblyDomainEleOp::sYmm =
false;
1645template <
typename AssemblyDomainEleOp>
1647OpCalculateConstraintsLhs_dTAUImpl<GAUSS, AssemblyDomainEleOp>::iNtegrate(
1648 EntitiesFieldData::EntData &row_data,
1649 EntitiesFieldData::EntData &col_data) {
1652 const auto nb_integration_pts = AssemblyDomainEleOp::getGaussPts().size2();
1653 const auto nb_row_base_functions = row_data.getN().size2();
1655 auto t_res_c_dtau = getFTensor0FromVec(commonDataPtr->resCdTau);
1656 auto next = [&]() { ++t_res_c_dtau; };
1658 auto t_w = AssemblyDomainEleOp::getFTensor0IntegrationWeight();
1659 auto t_row_base = row_data.getFTensor0N();
1660 for (
size_t gg = 0; gg != nb_integration_pts; ++gg) {
1661 const double alpha = AssemblyDomainEleOp::getMeasure() * t_w;
1664 const auto res = alpha * (t_res_c_dtau);
1667 auto mat_ptr = AssemblyDomainEleOp::locMat.data().begin();
1669 for (; rr != AssemblyDomainEleOp::nbRows; ++rr) {
1670 auto t_col_base = col_data.getFTensor0N(gg, 0);
1671 for (
size_t cc = 0; cc != AssemblyDomainEleOp::nbCols; ++cc) {
1672 *mat_ptr += t_row_base * t_col_base * res;
1678 for (; rr < nb_row_base_functions; ++rr)
#define FTENSOR_INDEX(DIM, I)
EntitiesFieldData::EntData EntData
Kronecker Delta class symmetric.
#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
auto diff_plastic_flow_dstress(long double f, FTensor::Tensor2_symmetric< T, DIM > &t_flow, FTensor::Ddg< double, 3, DIM > &&t_diff_deviator)
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 >)
auto symm_L_tensor(FTensor::Number< DIM >)
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)
FTensor::Index< 'M', 3 > M
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 diff_symmetrize(FTensor::Number< DIM >)
auto diff_tensor(FTensor::Number< DIM >)
[Lambda functions]
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 plastic_flow(long double f, FTensor::Tensor2_symmetric< double, 3 > &&t_dev_stress, FTensor::Ddg< double, 3, DIM > &&t_diff_deviator)
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)