v0.16.0
Loading...
Searching...
No Matches
EshelbianPlasticity.hpp
Go to the documentation of this file.
1/**
2 * \file EshelbianPlasticity.hpp
3 * \brief Eshelbian plasticity interface
4 *
5 * \brief Problem implementation for mix element for large-strain elasticity
6 *
7 * For reference on mixed formulation see: \cite gopalakrishnan2012second and
8 * \cite cockburn2010new
9 *
10 * \todo Implementation of plasticity
11 */
12
13// DO NOT DELETE MIGHT BE USEFULL
14// #include <boost/multiprecision/mpfr.hpp>
15// using mpfr50 = boost::multiprecision::number<
16// boost::multiprecision::mpfr_float_backend<50>>;
17
18// inline mpfr50 exp_hi(const mpfr50 x) { return boost::multiprecision::exp(x);
19// } inline mpfr50 log_hi(const mpfr50 x) { return
20// boost::multiprecision::log(x); }
21
22constexpr int SPACE_DIM = 3;
23// constexpr auto A = AssemblyType::BLOCK_SCHUR;
24constexpr auto A = AssemblyType::BLOCK_MAT;
25
26#include "MatOps.hpp"
27
28#ifndef __ESHELBIAN_PLASTICITY_HPP__
29 #define __ESHELBIAN_PLASTICITY_HPP__
30
32
33namespace EshelbianPlasticity {
34
35using DL = DataLayoutTraits<DataLayout::GaussByCoeffs>;
36
37struct ContactTree;
38
43 LOG /*linar extenion*/,
44 LOG_QUADRATIC /*quadratic extension*/,
46};
48
49using MatrixPtr = boost::shared_ptr<MatrixDouble>;
50using VectorPtr = boost::shared_ptr<VectorDouble>;
51
52using EntData = EntitiesFieldData::EntData;
53using UserDataOperator = ForcesAndSourcesCore::UserDataOperator;
54using VolUserDataOperator = VolumeElementForcesAndSourcesCore::UserDataOperator;
55using FaceUserDataOperator = FaceElementForcesAndSourcesCore::UserDataOperator;
56using EleOnSide = PipelineManager::ElementsAndOpsByDim<SPACE_DIM>::FaceSideEle;
57using SideEleOp = EleOnSide::UserDataOperator;
58
60struct TopologicalData;
61
62struct AnalyticalExprPython;
63
65 : public boost::enable_shared_from_this<MatOpsDataAtIntegrationPts> {
66
69 matOpsData->insertCommonData("approxPAtPts");
70 matOpsData->insertCommonData("divPAtPts");
71 matOpsData->insertCommonData("wL2AtPts");
72 matOpsData->insertCommonData("wL2DotAtPts");
73 matOpsData->insertCommonData("wL2DotDotAtPts");
74 matOpsData->insertCommonData("logStretchTensorAtPts");
75 matOpsData->insertCommonData("logStretchDotTensorAtPts");
76 matOpsData->insertCommonData("gradLogStretchDotTensorAtPts");
77 matOpsData->insertCommonData("rotAxisAtPts");
78 matOpsData->insertCommonData("rotAxis0AtPts");
79 matOpsData->insertCommonData("rotAxisDotAtPts");
80 matOpsData->insertCommonData("rotAxisGradDotAtPts");
81 matOpsData->insertCommonData("stretchH1AtPts");
82 matOpsData->insertCommonData("wGradH1AtPts");
83 matOpsData->insertCommonData("stretchTensorAtPts");
84 matOpsData->insertCommonData("diffStretchH1AtPts");
85 matOpsData->insertCommonData("diffStretchTensorAtPts");
86 matOpsData->insertCommonData("hAtPts");
87 matOpsData->insertCommonData("adjointPdstretchAtPts");
88 matOpsData->insertCommonData("adjointPdUAtPts");
89 matOpsData->insertCommonData("adjointPdUdOmegaAtPts");
90 matOpsData->insertCommonData("adjointPdUdPAtPts");
91 matOpsData->insertCommonData("eigenVals");
92 matOpsData->insertCommonData("eigenVecs");
93 matOpsData->insertCommonData("PAtPts");
94 matOpsData->insertCommonData("PAtPts_du");
95 }
96
97 boost::shared_ptr<MatOps::MatOpsData> matOpsData;
98};
99
101
102 MatrixDouble tractionAtPts;
103
104 MatrixDouble wH1AtPts;
105 MatrixDouble XH1AtPts;
106 MatrixDouble contactL2AtPts;
107 MatrixDouble logStretch2H1AtPts;
109
110 MatrixDouble hdOmegaAtPts;
111 MatrixDouble hdLogStretchAtPts;
112 MatrixDouble leviKirchhoffAtPts;
116 MatrixDouble rotMatAtPts;
117 MatrixDouble SigmaAtPts;
118 VectorDouble energyAtPts; //< this is density of energy at integration points
119 MatrixDouble flowL2AtPts;
120
121 MatrixDouble varRotAxis;
122 MatrixDouble varGradRotAxis;
123 MatrixDouble varLogStreach;
124 MatrixDouble varPiola;
125 MatrixDouble varDivPiola;
126 MatrixDouble varWL2;
127 MatrixDouble varHybridDispAtPts;
128
129 VectorInt nbUniq;
130 MatrixDouble eigenValsC;
131 MatrixDouble eigenVecsC;
132 VectorInt nbUniqC;
133
134 MatrixDouble matD;
135 MatrixDouble matAxiatorD;
136 MatrixDouble matDeviatorD;
137 MatrixDouble matInvD;
138
140
141 MatrixDouble facePiolaAtPts;
142 MatrixDouble hybridDispAtPts;
143 MatrixDouble hybridDispDotAtPts;
147
148 MatrixDouble gradientAtPts;
149
150 double mu;
151 double lambda;
152 VectorDouble muAtPts;
153 VectorDouble lambdaAtPts;
154 VectorDouble youngModulusAtPts;
155 double piolaScale = 1.;
156 double faceEnergy = 0.;
157
158 inline auto getPiolaScalePtr() {
159 return boost::shared_ptr<double>(shared_from_this(), &piolaScale);
160 }
161
162 static constexpr int SizeSymm = (SPACE_DIM * (SPACE_DIM + 1)) / 2;
163
164 template <class Tensor>
165 static inline auto getFTensor(MatrixDouble &m, const int nb_gauss_pts) {
166 return MatrixSizeHelper<Tensor, DL>::get(m, nb_gauss_pts)();
167 }
168
169 template <class Tensor>
170 static inline auto getFTensor(MatrixPtr m, const int nb_gauss_pts) {
171 return getFTensor<Tensor>(*m, nb_gauss_pts);
172 }
173
174 inline auto getFTensorApproxP(const int nb_gauss_pts) {
175 return getFTensor<
176 GetFTensor2FromMatType<SPACE_DIM, SPACE_DIM, -1, DL>>(
177 matOpsData->getCommonDataPtr("approxPAtPts"), nb_gauss_pts);
178 }
179
180 inline auto getFTensorP(const int nb_gauss_pts) {
181 return getFTensor<
182 GetFTensor2FromMatType<SPACE_DIM, SPACE_DIM, -1, DL>>(
183 matOpsData->getCommonDataPtr("PAtPts"), nb_gauss_pts);
184 }
185
186 inline auto getFTensorPDu(const int nb_gauss_pts) {
187 return getFTensor<GetFTensor4FromMatType<
189 matOpsData->getCommonDataPtr("PAtPts_du"), nb_gauss_pts);
190 }
191
192 inline auto getFTensorDivP(const int nb_gauss_pts) {
193 return getFTensor<GetFTensor1FromMatType<SPACE_DIM, -1, DL>>(
194 matOpsData->getCommonDataPtr("divPAtPts"), nb_gauss_pts);
195 }
196
197 inline auto getFTensorSmallWL2(const int nb_gauss_pts) {
198 return getFTensor<GetFTensor1FromMatType<SPACE_DIM, -1, DL>>(
199 matOpsData->getCommonDataPtr("wL2AtPts"), nb_gauss_pts);
200 }
201
202 inline auto getFTensorSmallWL2Dot(const int nb_gauss_pts) {
203 return getFTensor<GetFTensor1FromMatType<SPACE_DIM, -1, DL>>(
204 matOpsData->getCommonDataPtr("wL2DotAtPts"), nb_gauss_pts);
205 }
206
207 inline auto getFTensorSmallWL2DotDot(const int nb_gauss_pts) {
208 return getFTensor<GetFTensor1FromMatType<SPACE_DIM, -1, DL>>(
209 matOpsData->getCommonDataPtr("wL2DotDotAtPts"), nb_gauss_pts);
210 }
211
212 inline auto getFTensorLogStretch(const int nb_gauss_pts) {
213 return getFTensor<GetFTensor2SymmetricFromMatType<SPACE_DIM, -1, DL>>(
214 matOpsData->getCommonDataPtr("logStretchTensorAtPts"),
215 nb_gauss_pts);
216 }
217
218 inline auto getFTensorLogStretchDot(const int nb_gauss_pts) {
219 return getFTensor<GetFTensor2SymmetricFromMatType<SPACE_DIM, -1, DL>>(
220 matOpsData->getCommonDataPtr("logStretchDotTensorAtPts"),
221 nb_gauss_pts);
222 }
223
224 inline auto getFTensorGradLogStretchDot(const int nb_gauss_pts) {
225 return getFTensor<GetFTensor2FromMatType<SizeSymm, SPACE_DIM, -1, DL>>(
226 matOpsData->getCommonDataPtr("gradLogStretchDotTensorAtPts"),
227 nb_gauss_pts);
228 }
229
230 inline auto getFTensorRotAxis(const int nb_gauss_pts) {
231 return getFTensor<GetFTensor1FromMatType<SPACE_DIM, -1, DL>>(
232 matOpsData->getCommonDataPtr("rotAxisAtPts"), nb_gauss_pts);
233 }
234
235 inline auto getFTensorRotAxis0(const int nb_gauss_pts) {
236 return getFTensor<GetFTensor1FromMatType<SPACE_DIM, -1, DL>>(
237 matOpsData->getCommonDataPtr("rotAxis0AtPts"), nb_gauss_pts);
238 }
239
240 inline auto getFTensorRotAxisDot(const int nb_gauss_pts) {
241 return getFTensor<GetFTensor1FromMatType<SPACE_DIM, -1, DL>>(
242 matOpsData->getCommonDataPtr("rotAxisDotAtPts"), nb_gauss_pts);
243 }
244
245 inline auto getFTensorRotAxisGradDot(const int nb_gauss_pts) {
246 return getFTensor<
247 GetFTensor2FromMatType<SPACE_DIM, SPACE_DIM, -1, DL>>(
248 matOpsData->getCommonDataPtr("rotAxisGradDotAtPts"), nb_gauss_pts);
249 }
250
251 inline auto getFTensorStretchH1(const int nb_gauss_pts) {
252 return getFTensor<
253 GetFTensor2FromMatType<SPACE_DIM, SPACE_DIM, -1, DL>>(
254 matOpsData->getCommonDataPtr("stretchH1AtPts"), nb_gauss_pts);
255 }
256
257 inline auto getFTensorSmallWGradH1(const int nb_gauss_pts) {
258 return getFTensor<
259 GetFTensor2FromMatType<SPACE_DIM, SPACE_DIM, -1, DL>>(
260 matOpsData->getCommonDataPtr("wGradH1AtPts"), nb_gauss_pts);
261 }
262
263 inline auto getFTensorStretch(const int nb_gauss_pts) {
264 return getFTensor<GetFTensor2SymmetricFromMatType<SPACE_DIM, -1, DL>>(
265 matOpsData->getCommonDataPtr("stretchTensorAtPts"), nb_gauss_pts);
266 }
267
268 inline auto getFTensorDiffStretchH1(const int nb_gauss_pts) {
269 return getFTensor<GetFTensor4FromMatType<
271 matOpsData->getCommonDataPtr("diffStretchH1AtPts"), nb_gauss_pts);
272 }
273
274 inline auto getFTensorDiffStretch(const int nb_gauss_pts) {
275 return getFTensor<
276 GetFTensor4DdgFromMatType<SPACE_DIM, SPACE_DIM, -1, DL>>(
277 matOpsData->getCommonDataPtr("diffStretchTensorAtPts"),
278 nb_gauss_pts);
279 }
280
281 inline auto getFTensorSmallH(const int nb_gauss_pts) {
282 return getFTensor<
283 GetFTensor2FromMatType<SPACE_DIM, SPACE_DIM, -1, DL>>(
284 matOpsData->getCommonDataPtr("hAtPts"), nb_gauss_pts);
285 }
286
287 inline auto getFTensorAdjointPdstretch(const int nb_gauss_pts) {
288 return getFTensor<
289 GetFTensor2FromMatType<SPACE_DIM, SPACE_DIM, -1, DL>>(
290 matOpsData->getCommonDataPtr("adjointPdstretchAtPts"),
291 nb_gauss_pts);
292 }
293
294 inline auto getFTensorAdjointPdU(const int nb_gauss_pts) {
295 return getFTensor<GetFTensor1FromMatType<SizeSymm, -1, DL>>(
296 matOpsData->getCommonDataPtr("adjointPdUAtPts"), nb_gauss_pts);
297 }
298
299 inline auto getFTensorAdjointPdUdOmega(const int nb_gauss_pts) {
300 return getFTensor<GetFTensor2FromMatType<SPACE_DIM, SizeSymm, -1, DL>>(
301 matOpsData->getCommonDataPtr("adjointPdUdOmegaAtPts"),
302 nb_gauss_pts);
303 }
304
305 inline auto getFTensorAdjointPdUdP(const int nb_gauss_pts) {
306 return getFTensor<
307 GetFTensor3FromMatType<SPACE_DIM, SPACE_DIM, SizeSymm, -1, DL>>(
308 matOpsData->getCommonDataPtr("adjointPdUdPAtPts"), nb_gauss_pts);
309 }
310
311 inline auto getFTensorEigenVals(const int nb_gauss_pts) {
312 return getFTensor<GetFTensor1FromMatType<SPACE_DIM, -1, DL>>(
313 matOpsData->getCommonDataPtr("eigenVals"), nb_gauss_pts);
314 }
315
316 inline auto getFTensorEigenVecs(const int nb_gauss_pts) {
317 return getFTensor<
318 GetFTensor2FromMatType<SPACE_DIM, SPACE_DIM, -1, DL>>(
319 matOpsData->getCommonDataPtr("eigenVecs"), nb_gauss_pts);
320 }
321
323 return matOpsData->getCommonDataPtr("approxPAtPts");
324 }
325
326 inline MatrixPtr getPAtPts() { return matOpsData->getCommonDataPtr("PAtPts"); }
327
329 return matOpsData->getCommonDataPtr("PAtPts_du");
330 }
331
333 return matOpsData->getCommonDataPtr("diffStretchH1AtPts");
334 }
335
337 return matOpsData->getCommonDataPtr("stretchH1AtPts");
338 }
339
341 return matOpsData->getCommonDataPtr("adjointPdstretchAtPts");
342 }
343
345 return matOpsData->getCommonDataPtr("adjointPdUAtPts");
346 }
347
349 return matOpsData->getCommonDataPtr("adjointPdUdOmegaAtPts");
350 }
351
353 return matOpsData->getCommonDataPtr("adjointPdUdPAtPts");
354 }
355
357 return matOpsData->getCommonDataPtr("eigenVals");
358 }
359
361 return matOpsData->getCommonDataPtr("eigenVecs");
362 }
363
365 return matOpsData->getCommonDataPtr("divPAtPts");
366 }
367
369 return matOpsData->getCommonDataPtr("wL2AtPts");
370 }
371
373 return matOpsData->getCommonDataPtr("wL2DotAtPts");
374 }
375
377 return matOpsData->getCommonDataPtr("wL2DotDotAtPts");
378 }
379
381 return matOpsData->getCommonDataPtr("logStretchTensorAtPts");
382 }
383
385 return matOpsData->getCommonDataPtr("stretchTensorAtPts");
386 }
387
389 return matOpsData->getCommonDataPtr("diffStretchTensorAtPts");
390 }
391
393 return matOpsData->getCommonDataPtr("hAtPts");
394 }
395
397 return matOpsData->getCommonDataPtr("logStretchDotTensorAtPts");
398 }
399
401 return matOpsData->getCommonDataPtr("gradLogStretchDotTensorAtPts");
402 }
403
405 return matOpsData->getCommonDataPtr("rotAxisAtPts");
406 }
407
409 return matOpsData->getCommonDataPtr("rotAxis0AtPts");
410 }
411
413 return matOpsData->getCommonDataPtr("rotAxisDotAtPts");
414 }
415
417 return matOpsData->getCommonDataPtr("rotAxisGradDotAtPts");
418 }
419
421 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &matD);
422 }
423
425 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &matInvD);
426 }
427
429 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &matAxiatorD);
430 }
431
433 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &matDeviatorD);
434 }
435
437 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &wH1AtPts);
438 }
439
441 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &XH1AtPts);
442 }
443
445 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &contactL2AtPts);
446 }
447
449 return matOpsData->getCommonDataPtr("wGradH1AtPts");
450 }
451
453 return boost::shared_ptr<MatrixDouble>(shared_from_this(),
455 };
456
458 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &varRotAxis);
459 }
460
462 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &varGradRotAxis);
463 }
464
466 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &varLogStreach);
467 }
468
470 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &varPiola);
471 }
472
474 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &varDivPiola);
475 }
476
478 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &varWL2);
479 }
480
482 return boost::shared_ptr<MatrixDouble>(shared_from_this(),
484 }
485
487 return boost::shared_ptr<MatrixDouble>(shared_from_this(),
489 }
490
492 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &facePiolaAtPts);
493 }
494
496 return boost::shared_ptr<MatrixDouble>(shared_from_this(),
498 }
499
501 return boost::shared_ptr<MatrixDouble>(shared_from_this(),
503 }
504
506 return boost::shared_ptr<MatrixDouble>(shared_from_this(),
508 }
509
511 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &gradientAtPts);
512 }
513
515 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &rotMatAtPts);
516 }
517
518 inline auto getFTensorEigenValsC(const int nb_gauss_pts) {
519 return getFTensor<GetFTensor1FromMatType<SPACE_DIM, -1, DL>>(
520 eigenValsC, nb_gauss_pts);
521 }
522
523 inline auto getFTensorEigenVecsC(const int nb_gauss_pts) {
524 return getFTensor<
525 GetFTensor2FromMatType<SPACE_DIM, SPACE_DIM, -1, DL>>(eigenVecsC,
526 nb_gauss_pts);
527 }
528
529 inline auto getFTensorTraction(const int nb_gauss_pts) {
530 return getFTensor<GetFTensor1FromMatType<SPACE_DIM, -1, DL>>(
531 tractionAtPts, nb_gauss_pts);
532 }
533
534 inline auto getFTensorLogStretch2H1(const int nb_gauss_pts) {
535 return getFTensor<GetFTensor2SymmetricFromMatType<SPACE_DIM, -1, DL>>(
536 logStretch2H1AtPts, nb_gauss_pts);
537 }
538
539 inline auto getFTensorLogStretchTotal(const int nb_gauss_pts) {
540 return getFTensor<GetFTensor2SymmetricFromMatType<SPACE_DIM, -1, DL>>(
541 logStretchTotalTensorAtPts, nb_gauss_pts);
542 }
543
544 inline auto getFTensorSmallHdOmega(const int nb_gauss_pts) {
545 return getFTensor<GetFTensor3FromMatType<SPACE_DIM, SPACE_DIM, SPACE_DIM,
546 -1, DL>>(hdOmegaAtPts,
547 nb_gauss_pts);
548 }
549
550 inline auto getFTensorSmallHdLogStretch(const int nb_gauss_pts) {
551 return getFTensor<
552 GetFTensor3FromMatType<SPACE_DIM, SPACE_DIM, SizeSymm, -1, DL>>(
553 hdLogStretchAtPts, nb_gauss_pts);
554 }
555
556 inline auto getFTensorLeviKirchhoff(const int nb_gauss_pts) {
557 return getFTensor<GetFTensor1FromMatType<SPACE_DIM, -1, DL>>(
558 leviKirchhoffAtPts, nb_gauss_pts);
559 }
560
561 inline auto getFTensorLeviKirchhoffdOmega(const int nb_gauss_pts) {
562 return getFTensor<
563 GetFTensor2FromMatType<SPACE_DIM, SPACE_DIM, -1, DL>>(
564 leviKirchhoffdOmegaAtPts, nb_gauss_pts);
565 }
566
567 inline auto getFTensorLeviKirchhoffdLogStretch(const int nb_gauss_pts) {
568 return getFTensor<GetFTensor2FromMatType<SPACE_DIM, SizeSymm, -1, DL>>(
569 leviKirchhoffdLogStreatchAtPts, nb_gauss_pts);
570 }
571
572 inline auto getFTensorLeviKirchhoffP(const int nb_gauss_pts) {
573 return getFTensor<GetFTensor3FromMatType<SPACE_DIM, SPACE_DIM, SPACE_DIM,
575 nb_gauss_pts);
576 }
577
578 inline auto getFTensorRotMat(const int nb_gauss_pts) {
579 return getFTensor<
580 GetFTensor2FromMatType<SPACE_DIM, SPACE_DIM, -1, DL>>(rotMatAtPts,
581 nb_gauss_pts);
582 }
583
584 inline auto getFTensorSigma(const int nb_gauss_pts) {
585 return getFTensor<
586 GetFTensor2FromMatType<SPACE_DIM, SPACE_DIM, -1, DL>>(SigmaAtPts,
587 nb_gauss_pts);
588 }
589
590 inline auto getFTensorVarRotAxis(const int nb_gauss_pts) {
591 return getFTensor<GetFTensor1FromMatType<SPACE_DIM, -1, DL>>(
592 varRotAxis, nb_gauss_pts);
593 }
594
595 inline auto getFTensorVarGradRotAxis(const int nb_gauss_pts) {
596 return getFTensor<
597 GetFTensor2FromMatType<SPACE_DIM, SPACE_DIM, -1, DL>>(
598 varGradRotAxis, nb_gauss_pts);
599 }
600
601 inline auto getFTensorVarLogStreach(const int nb_gauss_pts) {
602 return getFTensor<GetFTensor1FromMatType<SizeSymm, -1, DL>>(
603 varLogStreach, nb_gauss_pts);
604 }
605
606 inline auto getFTensorVarPiola(const int nb_gauss_pts) {
607 return getFTensor<
608 GetFTensor2FromMatType<SPACE_DIM, SPACE_DIM, -1, DL>>(varPiola,
609 nb_gauss_pts);
610 }
611
612 inline auto getFTensorDivVarPiola(const int nb_gauss_pts) {
613 return getFTensor<GetFTensor1FromMatType<SPACE_DIM, -1, DL>>(
614 varDivPiola, nb_gauss_pts);
615 }
616
617 inline auto getFTensorVarWL2(const int nb_gauss_pts) {
618 return getFTensor<GetFTensor1FromMatType<SPACE_DIM, -1, DL>>(
619 varWL2, nb_gauss_pts);
620 }
621
622 inline auto getFTensorInternalStress(const int nb_gauss_pts) {
623 return getFTensor<
624 GetFTensor2FromMatType<SPACE_DIM, SPACE_DIM, -1, DL>>(
625 internalStressAtPts, nb_gauss_pts);
626 }
627
628 inline auto getFTensorInternalStressVec(const int nb_gauss_pts) {
629 return getFTensor<GetFTensor1FromMatType<SPACE_DIM * SPACE_DIM, -1, DL>>(
630 internalStressAtPts, nb_gauss_pts);
631 }
632
633 inline auto getFTensorSmallWH1(const int nb_gauss_pts) {
634 return getFTensor<GetFTensor1FromMatType<SPACE_DIM, -1, DL>>(wH1AtPts,
635 nb_gauss_pts);
636 }
637
638 inline auto getFTensorSmallHybridDisp(const int nb_gauss_pts) {
639 return getFTensor<GetFTensor1FromMatType<SPACE_DIM, -1, DL>>(
640 hybridDispAtPts, nb_gauss_pts);
641 }
642
643 inline auto getFTensorGradHybridDisp(const int nb_gauss_pts) {
644 return getFTensor<
645 GetFTensor2FromMatType<SPACE_DIM, SPACE_DIM, -1, DL>>(
646 gradHybridDispAtPts, nb_gauss_pts);
647 }
648
649 inline auto getFTensorFaceMaterialForce(const int nb_gauss_pts) {
650 return getFTensor<GetFTensor1FromMatType<SPACE_DIM, -1, DL>>(
651 faceMaterialForceAtPts, nb_gauss_pts);
652 }
653
654 inline auto getFTensorGradient(const int nb_gauss_pts) {
655 return getFTensor<GetFTensor2FromMatType<SPACE_DIM, SPACE_DIM, -1, DL>>(
656 gradientAtPts, nb_gauss_pts);
657 }
658
659 boost::shared_ptr<PhysicalEquations> physicsPtr;
660};
661
662struct OpJacobian;
663
664// Forward declarations
665struct ExternalStrain;
666using ExternalStrainVec = std::vector<ExternalStrain>;
667
669
670 PhysicalEquations() = default;
671 virtual ~PhysicalEquations() = default;
672
673 virtual UserDataOperator *
674 returnOpJacobian(const bool eval_rhs, const bool eval_lhs,
675 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
676 boost::shared_ptr<PhysicalEquations> physics_ptr);
677
678 virtual VolUserDataOperator *
679 returnOpSpatialPhysical(const std::string &field_name,
680 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
681 const double alpha_u);
682
684 const std::string &field_name,
685 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
686 boost::shared_ptr<ExternalStrainVec> external_strain_vec_ptr,
687 std::map<std::string, boost::shared_ptr<ScalingMethod>> smv);
688
690 std::string row_field, std::string col_field,
691 boost::shared_ptr<DataAtIntegrationPts> data_ptr, const double alpha);
692
694 const std::string &field_name,
695 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
696 SmartPetscObj<Vec> assemble_vec,
697 boost::shared_ptr<TopologicalData> topo_ptr, const double alpha_u,
698 boost::shared_ptr<double> J_ptr);
699
700 virtual VolUserDataOperator *
701 returnOpCalculateEnergy(boost::shared_ptr<DataAtIntegrationPts> data_ptr,
702 boost::shared_ptr<double> total_energy_ptr);
703
705 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
706 boost::shared_ptr<PhysicalEquations> physics_ptr);
707
709 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
710 boost::shared_ptr<PhysicalEquations> physics_ptr);
711};
712
713struct BcDisp {
714 BcDisp(std::string name, std::vector<double> attr, Range faces);
715 std::string blockName;
717 VectorDouble3 vals;
718 VectorInt3 flags;
719};
720using BcDispVec = std::vector<BcDisp>;
721
722struct BcRot {
723 BcRot(std::string name, std::vector<double> attr, Range faces);
724 std::string blockName;
726 VectorDouble vals;
727 double theta;
728};
729using BcRotVec = std::vector<BcRot>;
730
731typedef std::vector<Range> TractionFreeBc;
732
734 TractionBc(std::string name, std::vector<double> attr, Range faces);
735 std::string blockName;
737 VectorDouble3 vals;
738 VectorInt3 flags;
739};
740using TractionBcVec = std::vector<TractionBc>;
741
743 NormalDisplacementBc(std::string name, std::vector<double> attr, Range faces);
744 std::string blockName;
746 double val;
747};
748using NormalDisplacementBcVec = std::vector<NormalDisplacementBc>;
749
751 AnalyticalDisplacementBc(std::string name, std::vector<double> attr,
752 Range faces);
753 std::string blockName;
755 VectorInt3 flags;
756};
757using AnalyticalDisplacementBcVec = std::vector<AnalyticalDisplacementBc>;
758
760 AnalyticalTractionBc(std::string name, std::vector<double> attr, Range faces);
761 std::string blockName;
763 VectorInt3 flags;
764};
765using AnalyticalTractionBcVec = std::vector<AnalyticalTractionBc>;
766
768 PressureBc(std::string name, std::vector<double> attr, Range faces);
769 std::string blockName;
771 double val;
772};
773using PressureBcVec = std::vector<PressureBc>;
774
776 ExternalStrain(std::string name, std::vector<double> attr, Range ents);
777 std::string blockName;
779 double val;
781};
782
783template <typename OP_PTR>
784std::tuple<std::string, MatrixDouble>
785getAnalyticalExpr(OP_PTR op_ptr, MatrixDouble &analytical_expr,
786 const std::string block_name);
787
788template <typename OP_PTR>
789std::tuple<std::string, VectorDouble>
790getAnalyticalExternalStrain(OP_PTR op_ptr, VectorDouble &analytical_expr,
791 const std::string block_name);
792
793template <typename OP_PTR>
794VectorDouble getAnalyticalElastic(OP_PTR op_ptr, const std::string block_name);
795
796MatrixDouble analytical_expr_function(double delta_t, double t,
797 int nb_gauss_pts,
798 MatrixDouble &m_ref_coords,
799 MatrixDouble &m_ref_normals,
800 const std::string block_name);
801
802VectorDouble analytical_externalstrain_function(double delta_t, double t,
803 int nb_gauss_pts,
804 MatrixDouble &m_ref_coords,
805 const std::string block_name);
806
807VectorDouble analytical_elastic_function(double delta_t, double t,
808 int nb_gauss_pts,
809 MatrixDouble &m_ref_coords,
810 const std::string block_name);
811
813 #include "EshelbianCore.hpp"
814 #include "EshelbianOperators.hpp"
815
816} // namespace EshelbianPlasticity
817
818#endif //__ESHELBIAN_PLASTICITY_HPP__
Analytical expression Python bridge.
constexpr int SPACE_DIM
constexpr auto A
constexpr int SPACE_DIM
VectorDouble analytical_externalstrain_function(double delta_t, double t, int nb_gauss_pts, MatrixDouble &m_ref_coords, const std::string block_name)
boost::shared_ptr< MatrixDouble > MatrixPtr
std::vector< AnalyticalTractionBc > AnalyticalTractionBcVec
std::vector< TractionBc > TractionBcVec
std::tuple< std::string, VectorDouble > getAnalyticalExternalStrain(OP_PTR op_ptr, VectorDouble &analytical_expr, const std::string block_name)
std::vector< AnalyticalDisplacementBc > AnalyticalDisplacementBcVec
std::vector< PressureBc > PressureBcVec
std::tuple< std::string, MatrixDouble > getAnalyticalExpr(OP_PTR op_ptr, MatrixDouble &analytical_expr, const std::string block_name)
VectorDouble analytical_elastic_function(double delta_t, double t, int nb_gauss_pts, MatrixDouble &m_ref_coords, const std::string block_name)
std::vector< Range > TractionFreeBc
std::vector< ExternalStrain > ExternalStrainVec
ForcesAndSourcesCore::UserDataOperator UserDataOperator
VectorDouble getAnalyticalElastic(OP_PTR op_ptr, const std::string block_name)
DataLayoutTraits< DataLayout::GaussByCoeffs > DL
std::vector< BcRot > BcRotVec
std::vector< NormalDisplacementBc > NormalDisplacementBcVec
FaceElementForcesAndSourcesCore::UserDataOperator FaceUserDataOperator
PipelineManager::ElementsAndOpsByDim< SPACE_DIM >::FaceSideEle EleOnSide
MatrixDouble analytical_expr_function(double delta_t, double t, int nb_gauss_pts, MatrixDouble &m_ref_coords, MatrixDouble &m_ref_normals, const std::string block_name)
std::vector< BcDisp > BcDispVec
boost::shared_ptr< VectorDouble > VectorPtr
boost::shared_ptr< MatOpsData > createMatOpsDataPtr()
Definition MatOps.cpp:671
constexpr double t
plate stiffness
Definition plate.cpp:58
constexpr auto field_name
FTensor::Index< 'm', 3 > m
auto getFTensorLogStretchDot(const int nb_gauss_pts)
auto getFTensorVarGradRotAxis(const int nb_gauss_pts)
auto getFTensorEigenVecsC(const int nb_gauss_pts)
auto getFTensorSmallWL2Dot(const int nb_gauss_pts)
auto getFTensorSmallHdLogStretch(const int nb_gauss_pts)
auto getFTensorAdjointPdstretch(const int nb_gauss_pts)
auto getFTensorSmallHybridDisp(const int nb_gauss_pts)
auto getFTensorVarRotAxis(const int nb_gauss_pts)
auto getFTensorLeviKirchhoffP(const int nb_gauss_pts)
auto getFTensorLeviKirchhoff(const int nb_gauss_pts)
auto getFTensorGradHybridDisp(const int nb_gauss_pts)
auto getFTensorVarLogStreach(const int nb_gauss_pts)
auto getFTensorRotAxisDot(const int nb_gauss_pts)
auto getFTensorAdjointPdUdOmega(const int nb_gauss_pts)
auto getFTensorInternalStressVec(const int nb_gauss_pts)
auto getFTensorLeviKirchhoffdOmega(const int nb_gauss_pts)
auto getFTensorInternalStress(const int nb_gauss_pts)
auto getFTensorSmallWL2DotDot(const int nb_gauss_pts)
auto getFTensorEigenValsC(const int nb_gauss_pts)
auto getFTensorLogStretchTotal(const int nb_gauss_pts)
static auto getFTensor(MatrixDouble &m, const int nb_gauss_pts)
auto getFTensorLeviKirchhoffdLogStretch(const int nb_gauss_pts)
auto getFTensorDiffStretchH1(const int nb_gauss_pts)
auto getFTensorFaceMaterialForce(const int nb_gauss_pts)
auto getFTensorLogStretch2H1(const int nb_gauss_pts)
auto getFTensorSmallWGradH1(const int nb_gauss_pts)
auto getFTensorSmallHdOmega(const int nb_gauss_pts)
auto getFTensorDivVarPiola(const int nb_gauss_pts)
auto getFTensorAdjointPdU(const int nb_gauss_pts)
auto getFTensorRotAxisGradDot(const int nb_gauss_pts)
auto getFTensorLogStretch(const int nb_gauss_pts)
auto getFTensorGradLogStretchDot(const int nb_gauss_pts)
boost::shared_ptr< PhysicalEquations > physicsPtr
auto getFTensorAdjointPdUdP(const int nb_gauss_pts)
static auto getFTensor(MatrixPtr m, const int nb_gauss_pts)
auto getFTensorDiffStretch(const int nb_gauss_pts)
boost::shared_ptr< MatOps::MatOpsData > matOpsData
virtual VolUserDataOperator * returnOpCalculateVarStretchFromStress(boost::shared_ptr< DataAtIntegrationPts > data_ptr, boost::shared_ptr< PhysicalEquations > physics_ptr)
virtual VolUserDataOperator * returnOpCalculateEnergy(boost::shared_ptr< DataAtIntegrationPts > data_ptr, boost::shared_ptr< double > total_energy_ptr)
virtual UserDataOperator * returnOpJacobian(const bool eval_rhs, const bool eval_lhs, boost::shared_ptr< DataAtIntegrationPts > data_ptr, boost::shared_ptr< PhysicalEquations > physics_ptr)
virtual VolUserDataOperator * returnOpSpatialPhysical(const std::string &field_name, boost::shared_ptr< DataAtIntegrationPts > data_ptr, const double alpha_u)
virtual VolUserDataOperator * returnOpSpatialPhysicalExternalStrain(const std::string &field_name, boost::shared_ptr< DataAtIntegrationPts > data_ptr, boost::shared_ptr< ExternalStrainVec > external_strain_vec_ptr, std::map< std::string, boost::shared_ptr< ScalingMethod > > smv)
virtual VolUserDataOperator * returnOpCalculateStretchFromStress(boost::shared_ptr< DataAtIntegrationPts > data_ptr, boost::shared_ptr< PhysicalEquations > physics_ptr)
virtual VolUserDataOperator * returnOpTopoSpatialPhysical(const std::string &field_name, boost::shared_ptr< DataAtIntegrationPts > data_ptr, SmartPetscObj< Vec > assemble_vec, boost::shared_ptr< TopologicalData > topo_ptr, const double alpha_u, boost::shared_ptr< double > J_ptr)
virtual VolUserDataOperator * returnOpSpatialPhysical_du_du(std::string row_field, std::string col_field, boost::shared_ptr< DataAtIntegrationPts > data_ptr, const double alpha)
Data on single entity (This is passed as argument to DataOperator::doWork)