2450 const auto nb_integration_pts = getGaussPts().size2();
2452 auto t_w = getFTensor0IntegrationWeight();
2453 auto t_h = getFTensor2FromMat<3, 3>(
dataAtPts->hAtPts);
2454 auto t_P = getFTensor2FromMat<3, 3>(
dataAtPts->approxPAtPts);
2456 auto t_var_omega = getFTensor1FromMat<3>(
dataAtPts->varRotAxis);
2457 auto t_var_log_u = getFTensor2SymmetricFromMat<3>(
dataAtPts->varLogStreach);
2458 auto t_var_P = getFTensor2FromMat<3, 3>(
dataAtPts->varPiola);
2460 auto t_h_domega = getFTensor3FromMat<3, 3, 3>(
dataAtPts->hdOmegaAtPts);
2462 getFTensor3FromMat<3, 3, size_symm>(
dataAtPts->hdLogStretchAtPts);
2464 auto t_approx_P_adjoint_log_du =
2465 getFTensor1FromMat<size_symm>(
dataAtPts->adjointPdUAtPts);
2467 double var_element_energy = 0.;
2469 for (
auto gg = 0; gg != nb_integration_pts; ++gg) {
2472 t_var_L_u(
L) = t_L(
J,
K,
L) * t_var_log_u(
J,
K);
2473 auto var_energy = t_P(
i,
J) * (t_h_domega(
i,
J,
j) * t_var_omega(
j) +
2474 t_h_dlog_u(
i,
J,
L) * t_var_L_u(
L));
2475 var_element_energy += t_w * var_energy;
2476 auto var_complementary = t_var_P(
i,
J) * t_h(
i,
J);
2477 var_element_energy += t_w * var_complementary;
2490 ++t_approx_P_adjoint_log_du;
2493 var_element_energy *= getMeasure();
2495 auto get_tag = [&]() {
2496 auto &mob = getPtrFE()->mField.get_moab();
2498 double def_val[] = {0.};
2499 CHK_MOAB_THROW(mob.tag_get_handle(
"ReleaseEnergy", 1, MB_TYPE_DOUBLE, tag,
2500 MB_TAG_CREAT | MB_TAG_SPARSE, def_val),
2505 auto set_tag = [&](
auto &&tag,
auto &energy) {
2506 auto &mob = getPtrFE()->mField.get_moab();
2507 auto tet = getPtrFE()->getFEEntityHandle();
2508 CHK_MOAB_THROW(mob.tag_set_data(tag, &tet, 1, &energy),
"set tag");
2511 set_tag(get_tag(), var_element_energy);