505 auto nb_gauss_pts = DomainEleOp::getGaussPts().size2();
506 auto t_w = DomainEleOp::getFTensor0IntegrationWeight();
510 auto t_flow = getFTensor2SymmetricFromMat<DIM>(
commonDataPtr->plasticFlow);
511 auto t_plastic_strain =
512 getFTensor2SymmetricFromMat<DIM>(
commonDataPtr->plasticStrain);
513 auto t_plastic_strain_dot =
514 getFTensor2SymmetricFromMat<DIM>(
commonDataPtr->plasticStrainDot);
516 getFTensor2SymmetricFromMat<DIM>(*(
commonDataPtr->mStressPtr));
518 auto t_D = getFTensor4DdgFromMat<DIM, DIM, 0>(*
commonDataPtr->mDPtr);
519 auto t_D_Op = getFTensor4DdgFromMat<DIM, DIM, 0>(*
mDPtr);
526 t_flow_dir_dstress(
i,
j,
k,
l) =
527 1.5 * (t_diff_deviator(
M,
N,
i,
j) * t_diff_deviator(
M,
N,
k,
l));
528 t_flow_dir_dstrain(
i,
j,
k,
l) =
529 t_flow_dir_dstress(
i,
j,
m,
n) * t_D_Op(
m,
n,
k,
l);
557 auto t_res_c_dstrain =
558 getFTensor2SymmetricFromMat<DIM>(
commonDataPtr->resCdStrain);
559 auto t_res_c_plastic_strain =
560 getFTensor2SymmetricFromMat<DIM>(
commonDataPtr->resCdPlasticStrain);
561 auto t_res_flow = getFTensor2SymmetricFromMat<DIM>(
commonDataPtr->resFlow);
562 auto t_res_flow_dtau =
563 getFTensor2SymmetricFromMat<DIM>(
commonDataPtr->resFlowDtau);
564 auto t_res_flow_dstrain =
565 getFTensor4DdgFromMat<DIM, DIM>(
commonDataPtr->resFlowDstrain);
566 auto t_res_flow_dplastic_strain =
567 getFTensor4DdgFromMat<DIM, DIM>(
commonDataPtr->resFlowDstrainDot);
575 ++t_plastic_strain_dot;
580 ++t_res_c_plastic_strain;
583 ++t_res_flow_dstrain;
584 ++t_res_flow_dplastic_strain;
588 auto get_avtive_pts = [&]() {
589 int nb_points_avtive_on_elem = 0;
590 int nb_points_on_elem = 0;
595 auto t_plastic_strain_dot =
596 getFTensor2SymmetricFromMat<SPACE_DIM>(
commonDataPtr->plasticStrainDot);
598 auto dt = this->getTStimeStep();
600 for (
auto gg = 0; gg != nb_gauss_pts; ++gg) {
603 eqiv, t_tau_dot, t_f,
611 ++nb_points_avtive_on_elem;
617 ++t_plastic_strain_dot;
627 nb_points += nb_points_on_elem;
628 if (nb_points_avtive_on_elem > 0) {
630 active_points += nb_points_avtive_on_elem;
631 if (nb_points_avtive_on_elem == nb_points_on_elem) {
636 if (nb_points_avtive_on_elem != nb_points_on_elem)
642 if (DomainEleOp::getTSCtx() == TSMethod::TSContext::CTX_TSSETIJACOBIAN) {
646 auto dt = this->getTStimeStep();
647 for (
auto gg = 0; gg != nb_gauss_pts; ++gg) {
651 t_diff_plastic_strain,
657 const auto d_sigma_y =
665 auto c =
constraint(eqiv, t_tau_dot, t_f, sigma_y, abs_ww,
677 t_stress,
trace(t_stress),
684 t_flow_dir(
k,
l) = 1.5 * (t_dev_stress(
I,
J) * t_diff_deviator(
I,
J,
k,
l));
686 t_flow_dstrain(
i,
j) = t_flow(
k,
l) * t_D_Op(
k,
l,
i,
j);
688 auto get_res_c = [&]() {
return c; };
690 auto get_res_c_dstrain = [&](
auto &t_diff_res) {
691 t_diff_res(
i,
j) = c_f * t_flow_dstrain(
i,
j);
694 auto get_res_c_dplastic_strain = [&](
auto &t_diff_res) {
695 t_diff_res(
i,
j) = (this->getTSa() * c_equiv) * t_diff_eqiv(
i,
j);
696 t_diff_res(
k,
l) -= c_f * t_flow(
i,
j) * t_alpha_dir(
i,
j,
k,
l);
699 auto get_res_c_dtau = [&]() {
700 return this->getTSa() * c_dot_tau + c_sigma_y * d_sigma_y;
703 auto get_res_c_plastic_strain = [&](
auto &t_diff_res) {
704 t_diff_res(
k,
l) = -c_f * t_flow(
i,
j) * t_alpha_dir(
i,
j,
k,
l);
707 auto get_res_flow = [&](
auto &t_res_flow) {
708 const auto a = sigma_y;
709 const auto b = t_tau_dot;
710 t_res_flow(
k,
l) =
a * t_plastic_strain_dot(
k,
l) - b * t_flow_dir(
k,
l);
713 auto get_res_flow_dtau = [&](
auto &t_res_flow_dtau) {
714 const auto da = d_sigma_y;
715 const auto db = this->getTSa();
716 t_res_flow_dtau(
k,
l) =
717 da * t_plastic_strain_dot(
k,
l) - db * t_flow_dir(
k,
l);
720 auto get_res_flow_dstrain = [&](
auto &t_res_flow_dstrain) {
721 const auto b = t_tau_dot;
722 t_res_flow_dstrain(
m,
n,
k,
l) = -t_flow_dir_dstrain(
m,
n,
k,
l) * b;
725 auto get_res_flow_dplastic_strain = [&](
auto &t_res_flow_dplastic_strain) {
726 const auto a = sigma_y;
727 t_res_flow_dplastic_strain(
m,
n,
k,
l) =
728 (
a * this->getTSa()) * t_diff_plastic_strain(
m,
n,
k,
l);
729 const auto b = t_tau_dot;
730 t_res_flow_dplastic_strain(
m,
n,
i,
j) +=
731 (t_flow_dir_dstrain(
m,
n,
k,
l) * t_alpha_dir(
k,
l,
i,
j)) * b;
734 t_res_c = get_res_c();
735 get_res_flow(t_res_flow);
737 if (this->getTSCtx() == TSMethod::TSContext::CTX_TSSETIJACOBIAN) {
738 t_res_c_dtau = get_res_c_dtau();
739 get_res_c_dstrain(t_res_c_dstrain);
740 get_res_c_dplastic_strain(t_res_c_plastic_strain);
741 get_res_flow_dtau(t_res_flow_dtau);
742 get_res_flow_dstrain(t_res_flow_dstrain);
743 get_res_flow_dplastic_strain(t_res_flow_dplastic_strain);