99 {
101
103 int nb_integration_pts = getGaussPts().size2();
104
105
113
114
116
118
119 dataAtPts->hAtPts.resize(9, nb_integration_pts,
false);
120 dataAtPts->hdOmegaAtPts.resize(9 * 3, nb_integration_pts,
false);
121 dataAtPts->hdLogStretchAtPts.resize(9 * 6, nb_integration_pts,
false);
122
123 dataAtPts->leviKirchhoffAtPts.resize(3, nb_integration_pts,
false);
124 dataAtPts->leviKirchhoffdOmegaAtPts.resize(9, nb_integration_pts,
false);
126 nb_integration_pts, false);
127 dataAtPts->leviKirchhoffPAtPts.resize(9 * 3, nb_integration_pts,
false);
128
129 dataAtPts->adjointPdstretchAtPts.resize(9, nb_integration_pts,
false);
133 false);
134 dataAtPts->rotMatAtPts.resize(9, nb_integration_pts,
false);
135 dataAtPts->stretchTensorAtPts.resize(6, nb_integration_pts,
false);
136 dataAtPts->diffStretchTensorAtPts.resize(36, nb_integration_pts,
false);
137 dataAtPts->eigenVals.resize(3, nb_integration_pts,
false);
138 dataAtPts->eigenVecs.resize(9, nb_integration_pts,
false);
139 dataAtPts->nbUniq.resize(nb_integration_pts,
false);
140 dataAtPts->eigenValsC.resize(3, nb_integration_pts,
false);
141 dataAtPts->eigenVecsC.resize(9, nb_integration_pts,
false);
142 dataAtPts->nbUniqC.resize(nb_integration_pts,
false);
143
144 dataAtPts->logStretch2H1AtPts.resize(6, nb_integration_pts,
false);
145 dataAtPts->logStretchTotalTensorAtPts.resize(6, nb_integration_pts,
false);
146
147 dataAtPts->internalStressAtPts.resize(9, nb_integration_pts,
false);
149
150
153 auto t_h_dlog_u =
156 auto t_levi_kirchhoff_domega =
159 dataAtPts->leviKirchhoffdLogStreatchAtPts);
160 auto t_levi_kirchhoff_dP =
162 auto t_approx_P_adjoint__dstretch =
164 auto t_approx_P_adjoint_log_du =
166 auto t_approx_P_adjoint_log_du_dP =
168 auto t_approx_P_adjoint_log_du_domega =
172 auto t_diff_u =
177 auto t_nb_uniq =
182 auto t_nb_uniq_C =
184
185 auto t_log_stretch_total =
187 auto t_log_u2_h1 =
189
190
194 auto t_log_u =
196
197 auto next = [&]() {
198
199 ++t_h;
200 ++t_h_domega;
201 ++t_h_dlog_u;
202 ++t_levi_kirchhoff;
203 ++t_levi_kirchhoff_domega;
204 ++t_levi_kirchhoff_dstreach;
205 ++t_levi_kirchhoff_dP;
206 ++t_approx_P_adjoint__dstretch;
207 ++t_approx_P_adjoint_log_du;
208 ++t_approx_P_adjoint_log_du_dP;
209 ++t_approx_P_adjoint_log_du_domega;
210 ++t_R;
211 ++t_u;
212 ++t_diff_u;
213 ++t_eigen_vals;
214 ++t_eigen_vecs;
215 ++t_nb_uniq;
216 ++t_eigen_vals_C;
217 ++t_eigen_vecs_C;
218 ++t_nb_uniq_C;
219 ++t_log_u2_h1;
220 ++t_log_stretch_total;
221
222 ++t_omega;
223 ++t_grad_h1;
224 ++t_approx_P;
225 ++t_log_u;
226 };
227
230
231 auto bound_eig = [&](auto &eig) {
233 const auto zero = std::exp(std::numeric_limits<double>::min_exponent);
234 const auto large = std::exp(std::numeric_limits<double>::max_exponent);
235 for (int ii = 0; ii != 3; ++ii) {
236 eig(ii) = std::min(std::max(zero, eig(ii)), large);
237 }
239 };
240
241 auto calculate_log_stretch = [&]() {
244 eigen_vec(
i,
j) = t_log_u(
i,
j);
246 MOFEM_LOG(
"SELF", Sev::error) <<
"Failed to compute eigen values";
247 }
248
249
251 if (t_nb_uniq < 3) {
253 }
254 t_eigen_vals(
i) = eig(
i);
255 t_eigen_vecs(
i,
j) = eigen_vec(
i,
j);
258 auto get_t_diff_u = [&]() {
261 t_nb_uniq);
262 };
263 t_diff_u(
i,
j,
k,
l) = get_t_diff_u()(
i,
j,
k,
l);
265 t_Ldiff_u(
i,
j,
L) = t_diff_u(
i,
j,
m,
n) * t_L(
m,
n,
L);
266 return t_Ldiff_u;
267 };
268
269 auto calculate_total_stretch = [&](auto &t_h1) {
271
272 t_log_u2_h1(
i,
j) = 0;
273 t_log_stretch_total(
i,
j) = t_log_u(
i,
j);
274
278 t_inv_u_h1(
i,
j) = t_symm_kd(
i,
j);
279
280 return std::make_pair(t_R_h1, t_inv_u_h1);
281
282 } else {
283
286
288 t_C_h1(
i,
j) = t_h1(
k,
i) * t_h1(
k,
j);
289 eigen_vec(
i,
j) = t_C_h1(
i,
j);
291 MOFEM_LOG(
"SELF", Sev::error) <<
"Failed to compute eigen values";
292 }
293
295 if (t_nb_uniq_C < 3) {
297 }
300 }
301 t_eigen_vals_C(
i) = eig(
i);
302 t_eigen_vecs_C(
i,
j) = eigen_vec(
i,
j);
303
306 t_log_stretch_total(
i,
j) = t_log_u2_h1(
i,
j) / 2 + t_log_u(
i,
j);
307
308 auto f_inv_sqrt = [](auto e) { return 1. / std::sqrt(e); };
312 t_R_h1(
i,
j) = t_h1(
i, o) * t_inv_u_h1(o,
j);
313
314 return std::make_pair(t_R_h1, t_inv_u_h1);
315 }
316 };
317
318 auto no_h1_loop = [&]() {
320
323 break;
325 break;
326 default:
328 "rotSelector should be large");
329 };
330
331 for (int gg = 0; gg != nb_integration_pts; ++gg) {
332
334
337
338
339 auto t_Ldiff_u = calculate_log_stretch();
340
341
342 auto [t_R_h1, t_inv_u_h1] = calculate_total_stretch(t_h1);
343
348
350
351
357
360
363 break;
364
365 default:
367 "rotationSelector not handled");
368 }
369
370 constexpr double half_r = 1 / 2.;
371 constexpr double half_l = 1 / 2.;
372
373
374 t_h(
i,
k) = t_R(
i,
l) * t_u(
l,
k);
375
376
377 t_approx_P_adjoint__dstretch(
l,
k) =
378 (t_R(
i,
l) * t_approx_P(
i,
k) + t_R(
i,
k) * t_approx_P(
i,
l));
379 t_approx_P_adjoint__dstretch(
l,
k) /= 2.;
380
381 t_approx_P_adjoint_log_du(
L) =
382 (t_approx_P_adjoint__dstretch(
l,
k) * t_Ldiff_u(
l,
k,
L) +
383 t_approx_P_adjoint__dstretch(
k,
l) * t_Ldiff_u(
l,
k,
L) +
384 t_approx_P_adjoint__dstretch(
l,
k) * t_Ldiff_u(
k,
l,
L) +
385 t_approx_P_adjoint__dstretch(
k,
l) * t_Ldiff_u(
k,
l,
L)) /
386 4.;
387
388
389 t_levi_kirchhoff(
m) =
390
391 half_r * (t_diff_Rr(
i,
l,
m) * (t_u(
l,
k) * t_approx_P(
i,
k)) +
392 t_diff_Rr(
i,
k,
m) * (t_u(
l,
k) * t_approx_P(
i,
l)))
393
394 +
395
396 half_l * (t_diff_Rl(
i,
l,
m) * (t_u(
l,
k) * t_approx_P(
i,
k)) +
397 t_diff_Rl(
i,
k,
m) * (t_u(
l,
k) * t_approx_P(
i,
l)));
398 t_levi_kirchhoff(
m) /= 2.;
399
401
403 t_h_domega(
i,
k,
m) = half_r * (t_diff_Rr(
i,
l,
m) * t_u(
l,
k))
404
405 +
406
407 half_l * (t_diff_Rl(
i,
l,
m) * t_u(
l,
k));
408 } else {
409 t_h_domega(
i,
k,
m) = t_diff_R(
i,
l,
m) * t_u(
l,
k);
410 }
411
412 t_h_dlog_u(
i,
k,
L) = t_R(
i,
l) * t_Ldiff_u(
l,
k,
L);
413
414 t_approx_P_adjoint_log_du_dP(
i,
k,
L) =
415 t_R(
i,
l) * (t_Ldiff_u(
l,
k,
L) + t_Ldiff_u(
k,
l,
L)) / 2.;
416
419 t_A(
k,
l,
m) = t_diff_Rr(
i,
l,
m) * t_approx_P(
i,
k) +
420 t_diff_Rr(
i,
k,
m) * t_approx_P(
i,
l);
423 t_B(
k,
l,
m) = t_diff_Rl(
i,
l,
m) * t_approx_P(
i,
k) +
424 t_diff_Rl(
i,
k,
m) * t_approx_P(
i,
l);
426
427 t_approx_P_adjoint_log_du_domega(
m,
L) =
428 half_r * (t_A(
k,
l,
m) *
429 (t_Ldiff_u(
k,
l,
L) + t_Ldiff_u(
k,
l,
L)) / 2) +
430 half_l * (t_B(
k,
l,
m) *
431 (t_Ldiff_u(
k,
l,
L) + t_Ldiff_u(
k,
l,
L)) / 2);
432 } else {
434 t_A(
k,
l,
m) = t_diff_R(
i,
l,
m) * t_approx_P(
i,
k);
435 t_approx_P_adjoint_log_du_domega(
m,
L) =
436 t_A(
k,
l,
m) * t_Ldiff_u(
k,
l,
L);
437 }
438
439 t_levi_kirchhoff_dstreach(
m,
L) =
440 half_r *
441 (t_diff_Rr(
i,
l,
m) * (t_Ldiff_u(
l,
k,
L) * t_approx_P(
i,
k)))
442
443 +
444
445 half_l *
446 (t_diff_Rl(
i,
l,
m) * (t_Ldiff_u(
l,
k,
L) * t_approx_P(
i,
k)));
447
448 t_levi_kirchhoff_dP(
m,
i,
k) =
449 half_r * t_diff_Rr(
i,
l,
m) * (t_u(
l,
k))
450
451 +
452
453 half_l * t_diff_Rl(
i,
l,
m) * (t_u(
l,
k));
454
455 t_levi_kirchhoff_domega(
m,
n) =
456 half_r *
457 (t_diff_diff_Rr(
i,
l,
m,
n) * (t_u(
l,
k) * t_approx_P(
i,
k)) +
458 t_diff_diff_Rr(
i,
k,
m,
n) * (t_u(
l,
k) * t_approx_P(
i,
l)))
459
460 +
461
462 half_l *
463 (t_diff_diff_Rl(
i,
l,
m,
n) * (t_u(
l,
k) * t_approx_P(
i,
k)) +
464 t_diff_diff_Rl(
i,
k,
m,
n) * (t_u(
l,
k) * t_approx_P(
i,
l)));
465 t_levi_kirchhoff_domega(
m,
n) /= 2.;
466 }
467
468 next();
469 }
470
472 };
473
474 auto large_loop = [&]() {
476
479 break;
481 break;
482 default:
484 "rotSelector should be large");
485 };
486
487 for (int gg = 0; gg != nb_integration_pts; ++gg) {
488
490
495 break;
498 break;
499 default:
501 "gradApproximator not handled");
502 };
503
504
505 auto t_Ldiff_u = calculate_log_stretch();
506
507 auto [t_R_h1, t_inv_u_h1] = calculate_total_stretch(t_h1);
508
510 t_h_u(
l,
k) = t_u(
l, o) * t_h1(o,
k);
512 t_Ldiff_h_u(
l,
k,
L) = t_Ldiff_u(
l, o,
L) * t_h1(o,
k);
513
518
520
521
527
530
533 break;
537
539 t_diff_diff_Rr(
i,
j,
l,
m) = 0;
540
542 t_diff_diff_Rl(
i,
j,
l,
m) = 0;
543 break;
544
545 default:
547 "rotationSelector not handled");
548 }
549
550 constexpr double half_r = 1 / 2.;
551 constexpr double half_l = 1 / 2.;
552
553
554 t_h(
i,
k) = t_R(
i,
l) * t_h_u(
l,
k);
555
556
557 t_approx_P_adjoint__dstretch(
l, o) =
558 (t_R(
i,
l) * t_approx_P(
i,
k)) * t_h1(o,
k);
559 t_approx_P_adjoint_log_du(
L) =
560 t_approx_P_adjoint__dstretch(
l, o) * t_Ldiff_u(
l, o,
L);
561
562
563 t_levi_kirchhoff(
m) =
564
565 half_r * ((t_diff_Rr(
i,
l,
m) * (t_h_u(
l,
k)) * t_approx_P(
i,
k)))
566
567 +
568
569 half_l * ((t_diff_Rl(
i,
l,
m) * (t_h_u(
l,
k)) * t_approx_P(
i,
k)));
570
572
574 t_h_domega(
i,
k,
m) = half_r * (t_diff_Rr(
i,
l,
m) * t_h_u(
l,
k))
575
576 +
577
578 half_l * (t_diff_Rl(
i,
l,
m) * t_h_u(
l,
k));
579 } else {
580 t_h_domega(
i,
k,
m) = t_diff_R(
i,
l,
m) * t_h_u(
l,
k);
581 }
582
583 t_h_dlog_u(
i,
k,
L) = t_R(
i,
l) * t_Ldiff_h_u(
l,
k,
L);
584
585 t_approx_P_adjoint_log_du_dP(
i,
k,
L) =
586 t_R(
i,
l) * t_Ldiff_h_u(
l,
k,
L);
587
590 t_A(
m,
L,
i,
k) = t_diff_Rr(
i,
l,
m) * t_Ldiff_h_u(
l,
k,
L);
592 t_B(
m,
L,
i,
k) = t_diff_Rl(
i,
l,
m) * t_Ldiff_h_u(
l,
k,
L);
593
594 t_approx_P_adjoint_log_du_domega(
m,
L) =
595 half_r * (t_A(
m,
L,
i,
k) * t_approx_P(
i,
k))
596
597 +
598
599 half_l * (t_B(
m,
L,
i,
k) * t_approx_P(
i,
k));
600 } else {
602 t_A(
m,
L,
i,
k) = t_diff_R(
i,
l,
m) * t_Ldiff_h_u(
l,
k,
L);
603 t_approx_P_adjoint_log_du_domega(
m,
L) =
604 t_A(
m,
L,
i,
k) * t_approx_P(
i,
k);
605 }
606
607 t_levi_kirchhoff_dstreach(
m,
L) =
608 half_r *
609 (t_diff_Rr(
i,
l,
m) * (t_Ldiff_h_u(
l,
k,
L) * t_approx_P(
i,
k)))
610
611 +
612
613 half_l * (t_diff_Rl(
i,
l,
m) *
614 (t_Ldiff_h_u(
l,
k,
L) * t_approx_P(
i,
k)));
615
616 t_levi_kirchhoff_dP(
m,
i,
k) =
617
618 half_r * (t_diff_Rr(
i,
l,
m) * t_h_u(
l,
k))
619
620 +
621
622 half_l * (t_diff_Rl(
i,
l,
m) * t_h_u(
l,
k));
623
624 t_levi_kirchhoff_domega(
m,
n) =
625 half_r *
626 (t_diff_diff_Rr(
i,
l,
m,
n) * (t_h_u(
l,
k) * t_approx_P(
i,
k)))
627
628 +
629
630 half_l *
631 (t_diff_diff_Rl(
i,
l,
m,
n) * (t_h_u(
l,
k) * t_approx_P(
i,
k)));
632 }
633
634 next();
635 }
636
638 };
639
640 auto moderate_loop = [&]() {
642
645 break;
647 break;
648 default:
650 "rotSelector should be large");
651 };
652
653 for (int gg = 0; gg != nb_integration_pts; ++gg) {
654
656
661 break;
662 default:
664 "gradApproximator not handled");
665 };
666
667
668 auto t_Ldiff_u = calculate_log_stretch();
669
670 auto [t_R_h1, t_inv_u_h1] = calculate_total_stretch(t_h1);
671
673 t_h_u(
l,
k) = (t_symm_kd(
l, o) + t_log_u(
l, o)) * t_h1(o,
k);
675 t_L_h(
l,
k,
L) = t_L(
l, o,
L) * t_h1(o,
k);
676
681
683
684
690
693
696 break;
700
702 t_diff_diff_Rr(
i,
j,
l,
m) = 0;
703
705 t_diff_diff_Rl(
i,
j,
l,
m) = 0;
706 break;
707
708 default:
710 "rotationSelector not handled");
711 }
712
713 constexpr double half_r = 1 / 2.;
714 constexpr double half_l = 1 / 2.;
715
716
717 t_h(
i,
k) = t_R(
i,
l) * t_h_u(
l,
k);
718
719
720 t_approx_P_adjoint__dstretch(
l, o) =
721 (t_R(
i,
l) * t_approx_P(
i,
k)) * t_h1(o,
k);
722
723 t_approx_P_adjoint_log_du(
L) =
724 t_approx_P_adjoint__dstretch(
l, o) * t_L(
l, o,
L);
725
726
727 t_levi_kirchhoff(
m) =
728
729 half_r * ((t_diff_Rr(
i,
l,
m) * (t_h_u(
l,
k)) * t_approx_P(
i,
k)))
730
731 +
732
733 half_l * ((t_diff_Rl(
i,
l,
m) * (t_h_u(
l,
k)) * t_approx_P(
i,
k)));
734
736
738 t_h_domega(
i,
k,
m) = half_r * (t_diff_Rr(
i,
l,
m) * t_h_u(
l,
k))
739
740 +
741
742 half_l * (t_diff_Rl(
i,
l,
m) * t_h_u(
l,
k));
743 } else {
744 t_h_domega(
i,
k,
m) = t_diff_R(
i,
l,
m) * t_h_u(
l,
k);
745 }
746
747 t_h_dlog_u(
i,
k,
L) = t_R(
i,
l) * t_L_h(
l,
k,
L);
748
749 t_approx_P_adjoint_log_du_dP(
i,
k,
L) = t_R(
i,
l) * t_L_h(
l,
k,
L);
750
753 t_A(
m,
L,
i,
k) = t_diff_Rr(
i,
l,
m) * t_L_h(
l,
k,
L);
755 t_B(
m,
L,
i,
k) = t_diff_Rl(
i,
l,
m) * t_L_h(
l,
k,
L);
756 t_approx_P_adjoint_log_du_domega(
m,
L) =
757 half_r * (t_A(
m,
L,
i,
k) * t_approx_P(
i,
k))
758
759 +
760
761 half_l * (t_B(
m,
L,
i,
k) * t_approx_P(
i,
k));
762 } else {
764 t_A(
m,
L,
i,
k) = t_diff_R(
i,
l,
m) * t_L_h(
l,
k,
L);
765 t_approx_P_adjoint_log_du_domega(
m,
L) =
766 t_A(
m,
L,
i,
k) * t_approx_P(
i,
k);
767 }
768
769 t_levi_kirchhoff_dstreach(
m,
L) =
770 half_r * (t_diff_Rr(
i,
l,
m) * (t_L_h(
l,
k,
L) * t_approx_P(
i,
k)))
771
772 +
773
774 half_l * (t_diff_Rl(
i,
l,
m) * (t_L_h(
l,
k,
L) * t_approx_P(
i,
k)));
775
776 t_levi_kirchhoff_dP(
m,
i,
k) =
777
778 half_r * (t_diff_Rr(
i,
l,
m) * t_h_u(
l,
k))
779
780 +
781
782 half_l * (t_diff_Rl(
i,
l,
m) * t_h_u(
l,
k));
783
784 t_levi_kirchhoff_domega(
m,
n) =
785 half_r *
786 (t_diff_diff_Rr(
i,
l,
m,
n) * (t_h_u(
l,
k) * t_approx_P(
i,
k)))
787
788 +
789
790 half_l *
791 (t_diff_diff_Rl(
i,
l,
m,
n) * (t_h_u(
l,
k) * t_approx_P(
i,
k)));
792 }
793
794 next();
795 }
796
798 };
799
800 auto small_loop = [&]() {
804 break;
805 default:
807 "rotSelector should be small");
808 };
809
810 for (int gg = 0; gg != nb_integration_pts; ++gg) {
811
816 break;
817 default:
819 "gradApproximator not handled");
820 };
821
822
824
826 t_Ldiff_u(
i,
j,
L) = calculate_log_stretch()(
i,
j,
L);
827 } else {
828 t_u(
i,
j) = t_symm_kd(
i,
j) + t_log_u(
i,
j);
829 t_Ldiff_u(
i,
j,
L) = t_L(
i,
j,
L);
830 }
831 t_log_u2_h1(
i,
j) = 0;
832 t_log_stretch_total(
i,
j) = t_log_u(
i,
j);
833
836
838 t_h_dlog_u(
i,
j,
L) = t_Ldiff_u(
i,
j,
L);
839
840
841 t_approx_P_adjoint__dstretch(
i,
j) = t_approx_P(
i,
j);
842 t_approx_P_adjoint_log_du(
L) =
843 t_approx_P_adjoint__dstretch(
i,
j) * t_Ldiff_u(
i,
j,
L);
844 t_approx_P_adjoint_log_du_dP(
i,
j,
L) = t_Ldiff_u(
i,
j,
L);
845 t_approx_P_adjoint_log_du_domega(
m,
L) = 0;
846
847
849 t_levi_kirchhoff_dstreach(
m,
L) = 0;
851 t_levi_kirchhoff_domega(
m,
n) = 0;
852
853 next();
854 }
855
857 };
858
862 break;
866 break;
870 break;
874 break;
875 default:
877 "gradApproximator not handled");
878 break;
879 };
880
882}
#define FTENSOR_INDEX(DIM, I)
Kronecker Delta class symmetric.
#define MoFEMFunctionReturnHot(a)
Last executable line of each PETSc function used for error handling. Replaces return()
#define MoFEMFunctionBegin
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
@ MOFEM_DATA_INCONSISTENCY
#define MoFEMFunctionReturn(a)
Last executable line of each PETSc function used for error handling. Replaces return()
#define CHKERR
Inline error check.
#define MOFEM_LOG(channel, severity)
Log.
FTensor::Index< 'i', SPACE_DIM > i
const double n
refractive index of diffusive medium
FTensor::Index< 'l', 3 > l
FTensor::Index< 'j', 3 > j
FTensor::Index< 'k', 3 > k
auto getMat(A &&t_val, B &&t_vec, Fun< double > f)
Get the Mat object.
auto getDiffMat(A &&t_val, B &&t_vec, Fun< double > f, Fun< double > d_f, const int nb)
Get the Diff Mat object.
auto get_uniq_nb(double *ptr)
auto sort_eigen_vals(A &eig, B &eigen_vec)
static constexpr auto size_symm
constexpr std::enable_if<(Dim0<=2 &&Dim1<=2), Tensor2_Expr< Levi_Civita< T >, T, Dim0, Dim1, i, j > >::type levi_civita(const Index< i, Dim0 > &, const Index< j, Dim1 > &)
levi_civita functions to make for easy adhoc use
static FTensor::Tensor3< FTensor::PackPtr< T *, 1 >, Tensor_Dim0, Tensor_Dim1, Tensor_Dim2 > getFTensor3FromMat(ublas::matrix< T, L, A > &data)
Get tensor rank 3 (non symmetries) form data matrix.
static FTensor::Ddg< FTensor::PackPtr< T *, 1 >, Tensor_Dim01, Tensor_Dim23 > getFTensor4DdgFromMat(ublas::matrix< T, L, A > &data)
Get symmetric tensor rank 4 on first two and last indices from form data matrix.
FTensor::Tensor1< FTensor::PackPtr< T *, S >, Tensor_Dim > getFTensor1FromMat(ublas::matrix< T, L, A > &data)
Get tensor rank 1 (vector) form data matrix.
FTensor::Tensor2< FTensor::PackPtr< double *, 1 >, Tensor_Dim1, Tensor_Dim2 > getFTensor2FromMat(MatrixDouble &data)
Get tensor rank 2 (matrix) form data matrix.
static auto getFTensor2SymmetricFromMat(ublas::matrix< T, L, A > &data)
Get symmetric tensor rank 2 (matrix) form data matrix.
MoFEMErrorCode computeEigenValuesSymmetric(const MatrixDouble &mat, VectorDouble &eig, MatrixDouble &eigen_vec)
compute eigenvalues of a symmetric matrix using lapack dsyev
FTensor::Index< 'm', 3 > m
static enum StretchSelector stretchSelector
static enum SymmetrySelector symmetrySelector
static enum RotSelector rotSelector
static enum RotSelector gradApproximator
static boost::function< double(const double)> f
static boost::function< double(const double)> d_f
static boost::function< double(const double)> inv_f
boost::shared_ptr< DataAtIntegrationPts > dataAtPts
data at integration pts
static auto diffExp(A &&t_w_vee, B &&theta)
static auto exp(A &&t_w_vee, B &&theta)