265 int nb_integration_pts = getGaussPts().size2();
273 dataAtPts->hAtPts.resize(9, nb_integration_pts,
false);
274 dataAtPts->hdOmegaAtPts.resize(9 * 3, nb_integration_pts,
false);
275 dataAtPts->hdLogStretchAtPts.resize(9 * 6, nb_integration_pts,
false);
276 dataAtPts->leviKirchhoffAtPts.resize(3, nb_integration_pts,
false);
277 dataAtPts->leviKirchhoffPAtPts.resize(9 * 3, nb_integration_pts,
false);
278 dataAtPts->leviKirchhoffOmegaAtPts.resize(9, nb_integration_pts,
false);
280 dataAtPts->adjointPdstretchAtPts.resize(9, nb_integration_pts,
false);
285 dataAtPts->rotMatAtPts.resize(9, nb_integration_pts,
false);
286 dataAtPts->diffRotMatAtPts.resize(27, nb_integration_pts,
false);
287 dataAtPts->stretchTensorAtPts.resize(6, nb_integration_pts,
false);
288 dataAtPts->diffStretchTensorAtPts.resize(36, nb_integration_pts,
false);
289 dataAtPts->eigenVals.resize(3, nb_integration_pts,
false);
290 dataAtPts->eigenVecs.resize(9, nb_integration_pts,
false);
291 dataAtPts->nbUniq.resize(nb_integration_pts,
false);
293 dataAtPts->logStretchTotalTensorAtPts.resize(6, nb_integration_pts,
false);
295 auto t_h = getFTensor2FromMat<3, 3>(
dataAtPts->hAtPts);
296 auto t_h_domega = getFTensor3FromMat<3, 3, 3>(
dataAtPts->hdOmegaAtPts);
298 getFTensor3FromMat<3, 3, size_symm>(
dataAtPts->hdLogStretchAtPts);
299 auto t_levi_kirchoff = getFTensor1FromMat<3>(
dataAtPts->leviKirchhoffAtPts);
300 auto t_levi_kirchoff_dP =
301 getFTensor3FromMat<3, 3, 3>(
dataAtPts->leviKirchhoffPAtPts);
302 auto t_levi_kirchoff_domega =
303 getFTensor2FromMat<3, 3>(
dataAtPts->leviKirchhoffOmegaAtPts);
304 auto t_approx_P_adjont_dstretch =
305 getFTensor2FromMat<3, 3>(
dataAtPts->adjointPdstretchAtPts);
306 auto t_approx_P_adjont_log_du =
307 getFTensor1FromMat<size_symm>(
dataAtPts->adjointPdUAtPts);
308 auto t_approx_P_adjont_log_du_dP =
309 getFTensor3FromMat<3, 3, size_symm>(
dataAtPts->adjointPdUdPAtPts);
310 auto t_approx_P_adjont_log_du_domega =
311 getFTensor2FromMat<3, size_symm>(
dataAtPts->adjointPdUdOmegaAtPts);
312 auto t_omega = getFTensor1FromMat<3>(
dataAtPts->rotAxisAtPts);
313 auto t_R = getFTensor2FromMat<3, 3>(
dataAtPts->rotMatAtPts);
314 auto t_diff_R = getFTensor3FromMat<3, 3, 3>(
dataAtPts->diffRotMatAtPts);
316 getFTensor2SymmetricFromMat<3>(
dataAtPts->logStretchTensorAtPts);
317 auto t_u = getFTensor2SymmetricFromMat<3>(
dataAtPts->stretchTensorAtPts);
318 auto t_approx_P = getFTensor2FromMat<3, 3>(
dataAtPts->approxPAtPts);
320 getFTensor4DdgFromMat<3, 3, 1>(
dataAtPts->diffStretchTensorAtPts);
321 auto t_eigen_vals = getFTensor1FromMat<3>(
dataAtPts->eigenVals);
322 auto t_eigen_vecs = getFTensor2FromMat<3, 3>(
dataAtPts->eigenVecs);
325 auto t_grad_h1 = getFTensor2FromMat<3, 3>(
dataAtPts->wGradH1AtPts);
326 auto t_log_stretch_total =
327 getFTensor2SymmetricFromMat<3>(
dataAtPts->logStretchTotalTensorAtPts);
330 for (
int gg = 0; gg != nb_integration_pts; ++gg) {
341 auto calulate_rotation = [&]() {
345 t_diff_R(
i,
j,
k) = t0_diff(
i,
j,
k);
346 t_R(
i,
j) = t0(
i,
j);
349 auto calulate_streach = [&]() {
350 eigen_vec(
i,
j) = t_log_u(
i,
j);
353 nbUniq[gg] = get_uniq_nb<3>(&eig(0));
354 if (nbUniq[gg] < 3) {
355 sort_eigen_vals<3>(eig, eigen_vec);
357 t_eigen_vals(
i) = eig(
i);
358 t_eigen_vecs(
i,
j) = eigen_vec(
i,
j);
361 t_u(
i,
j) = t_u_tmp(
i,
j);
365 t_diff_u(
i,
j,
k,
l) = t_diff_u_tmp(
i,
j,
k,
l);
366 t_Ldiff_u(
i,
j,
L) = t_diff_u(
i,
j,
m,
n) * t_L(
m,
n,
L);
376 t_Ru(
i,
m) = t_R(
i,
l) * t_u(
l,
m);
377 t_h(
i,
j) = t_Ru(
i,
m) * t_h1(
m,
j);
378 t_h_domega(
i,
j,
k) = (t_diff_R(
i,
l,
k) * t_u(
l,
m)) * t_h1(
m,
j);
379 t_h_dlog_u(
i,
j,
L) = (t_R(
i,
l) * t_Ldiff_u(
l,
m,
L)) * t_h1(
m,
j);
382 t_approx_P_intermidiate(
i,
m) = t_approx_P(
i,
j) * t_h1(
m,
j);
383 t_approx_P_adjont_dstretch(
l,
m) =
384 t_approx_P_intermidiate(
i,
m) * t_R(
i,
l);
388 t_levi_kirchoff_dP(
i,
j,
k) =
390 t_levi_kirchoff_domega(
k,
n) =
392 (t_approx_P_intermidiate(
i,
m) * t_diff_R(
i,
l,
n));
394 t_approx_P_adjont_log_du(
L) =
395 t_Ldiff_u(
l,
m,
L) * t_approx_P_adjont_dstretch(
l,
m);
396 t_approx_P_adjont_log_du_dP(
i,
j,
L) = t_h_dlog_u(
i,
j,
L);
397 t_approx_P_adjont_log_du_domega(
n,
L) =
399 (t_approx_P_intermidiate(
i,
m) * t_diff_R(
i,
l,
n));
408 t_Omega(
i,
j) = FTensor::levi_civita<double>(
i,
j,
k) * t_omega(
k);
409 t_Ru(
i,
m) = t_Omega(
i,
m) + t_u(
i,
m);
410 t_h(
i,
j) = t_Ru(
i,
m) * t_h1(
m,
j);
411 t_h_domega(
i,
j,
k) = FTensor::levi_civita<double>(
i,
m,
k) * t_h1(
m,
j);
412 t_h_dlog_u(
i,
j,
L) = t_Ldiff_u(
i,
m,
L) * t_h1(
m,
j);
415 t_approx_P_intermidiate(
i,
m) = t_approx_P(
i,
j) * t_h1(
m,
j);
416 t_approx_P_adjont_dstretch(
i,
m) = t_approx_P_intermidiate(
i,
m);
421 t_levi_kirchoff_domega(
k,
n) = 0;
423 t_approx_P_adjont_log_du(
L) =
424 t_Ldiff_u(
i,
m,
L) * t_approx_P_adjont_dstretch(
i,
m);
425 t_approx_P_adjont_log_du_dP(
i,
j,
L) = t_h_dlog_u(
i,
j,
L);
426 t_approx_P_adjont_log_du_domega(
n,
L) = 0;
438 t_Omega(
i,
j) = FTensor::levi_civita<double>(
i,
j,
k) * t_omega(
k);
439 t_h(
i,
j) = t_Omega(
i,
j) + t_u(
i,
j);
440 t_h_domega(
i,
j,
k) = FTensor::levi_civita<double>(
i,
j,
k);
441 t_h_dlog_u(
i,
j,
L) = t_Ldiff_u(
i,
j,
L);
446 t_levi_kirchoff_domega(
k,
l) = 0;
448 t_approx_P_adjont_dstretch(
i,
j) = t_approx_P(
i,
j);
449 t_approx_P_adjont_log_du(
L) =
450 t_Ldiff_u(
i,
j,
L) * t_approx_P_adjont_dstretch(
i,
j);
451 t_approx_P_adjont_log_du_dP(
i,
j,
L) = t_h_dlog_u(
i,
j,
L);
452 t_approx_P_adjont_log_du_domega(
m,
L) = 0;
460 t_C_h1(
i,
j) = t_h1(
k,
i) * t_h1(
k,
j);
461 eigen_vec(
i,
j) = t_C_h1(
i,
j);
467 for (
int ii = 0; ii != 3; ++ii) {
468 eig(ii) = std::max(eig(ii),
470 std::numeric_limits<double>::min_exponent)));
475 auto t_log_u2_h1_tmp =
481 t_log_stretch_total(
i,
j) = t_log_u2_h1_tmp(
i,
j) / 2 + t_log_u(
i,
j);
484 t_log_stretch_total(
i,
j) = t_log_u(
i,
j);
492 ++t_levi_kirchoff_dP;
493 ++t_levi_kirchoff_domega;
494 ++t_approx_P_adjont_dstretch;
495 ++t_approx_P_adjont_log_du;
496 ++t_approx_P_adjont_log_du_dP;
497 ++t_approx_P_adjont_log_du_domega;
508 ++t_log_stretch_total;