v0.15.0
Loading...
Searching...
No Matches
EshelbianOperators.hpp
Go to the documentation of this file.
1/**
2 * @file EshelbianOperators.hpp
3 * @author your name (you@domain.com)
4 * @brief
5 * @version 0.1
6 * @date 2024-12-31
7 *
8 * @copyright Copyright (c) 2024
9 *
10 */
11
12
13
15
16 OpJacobian(const int tag, const bool eval_rhs, const bool eval_lhs,
17 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
18 boost::shared_ptr<PhysicalEquations> physics_ptr)
19 : UserDataOperator(NOSPACE, OPSPACE), tAg(tag), evalRhs(eval_rhs),
20 evalLhs(eval_lhs), dataAtPts(data_ptr), physicsPtr(physics_ptr) {}
21
22 virtual MoFEMErrorCode evaluateRhs(EntData &data) = 0;
23 virtual MoFEMErrorCode evaluateLhs(EntData &data) = 0;
24
25 MoFEMErrorCode doWork(int side, EntityType type, EntData &data);
26
27protected:
29
30 int tAg = -1; ///< adol-c tape
31 bool evalRhs = false;
32 bool evalLhs = false;
33
34 boost::shared_ptr<DataAtIntegrationPts>
35 dataAtPts; ///< data at integration pts
36 boost::shared_ptr<PhysicalEquations>
37 physicsPtr; ///< material physical equations
38};
39
40template <typename T> struct OpAssembleBasic : public T {
41
42 using ScaleOff = boost::function<double()>;
43 const bool assembleSymmetry;
44
45 boost::shared_ptr<DataAtIntegrationPts>
46 dataAtPts; ///< data at integration pts
47
48 OpAssembleBasic(const std::string &field_name,
49 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
50 const char type)
51 : T(field_name, type), dataAtPts(data_ptr), assembleSymmetry(false) {}
52
54 std::string row_field, std::string col_field,
55 boost::shared_ptr<DataAtIntegrationPts> data_ptr, const char type,
56 const bool assemble_symmetry, ScaleOff scale_off = []() { return 1; })
57 : T(row_field, col_field, type, false), dataAtPts(data_ptr),
58 assembleSymmetry(assemble_symmetry), scaleOff(scale_off) {}
59
60 VectorDouble nF; ///< local right hand side vector
61 MatrixDouble K; ///< local tangent matrix
62 MatrixDouble transposeK;
63
65
66 virtual MoFEMErrorCode integrate(EntData &data) {
68 SETERRQ(PETSC_COMM_SELF, MOFEM_NOT_IMPLEMENTED, "Not yet implemented");
70 }
71
72 virtual MoFEMErrorCode integrate(int row_side, EntityType row_type,
73 EntData &data) {
75 CHKERR integrate(data);
77 }
78
79 virtual MoFEMErrorCode assemble(EntData &data) {
81 double *vec_ptr = &*nF.begin();
82 int nb_dofs = data.getIndices().size();
83 int *ind_ptr = &*data.getIndices().begin();
84 CHKERR VecSetValues(this->getTSf(), nb_dofs, ind_ptr, vec_ptr, ADD_VALUES);
86 }
87
88 virtual MoFEMErrorCode assemble(int row_side, EntityType row_type,
89 EntData &data) {
91 CHKERR assemble(data);
93 }
94
95 virtual MoFEMErrorCode integrate(EntData &row_data, EntData &col_data) {
97 SETERRQ(PETSC_COMM_SELF, MOFEM_NOT_IMPLEMENTED, "Not yet implemented");
99 }
100
101 virtual MoFEMErrorCode assemble(int row_side, int col_side,
102 EntityType row_type, EntityType col_type,
103 EntData &row_data, EntData &col_data) {
105
106 if (assembleSymmetry) {
107 const auto row_nb_dofs = row_data.getIndices().size();
108 const auto col_nb_dofs = col_data.getIndices().size();
109 transposeK.resize(col_nb_dofs, row_nb_dofs, false);
110 noalias(transposeK) = trans(K);
111 transposeK *= scaleOff();
112 }
113
114 CHKERR MatSetValues<AssemblyTypeSelector<A>>(this->getTSB(), row_data,
115 col_data, K, ADD_VALUES);
116 if (assembleSymmetry) {
117 CHKERR MatSetValues<AssemblyTypeSelector<A>>(
118 this->getTSB(), col_data, row_data, transposeK, ADD_VALUES);
119 }
120
122 }
123
124 MoFEMErrorCode doWork(int side, EntityType type, EntData &data) {
126 if (data.getIndices().empty())
128 nF.resize(data.getIndices().size(), false);
129 nF.clear();
130 CHKERR integrate(side, type, data);
131 CHKERR assemble(side, type, data);
133 }
134
135 MoFEMErrorCode doWork(int row_side, int col_side, EntityType row_type,
136 EntityType col_type, EntData &row_data,
137 EntData &col_data) {
139 if (row_data.getIndices().empty())
141 if (col_data.getIndices().empty())
143 K.resize(row_data.getIndices().size(), col_data.getIndices().size(), false);
144 K.clear();
145 CHKERR integrate(row_data, col_data);
146 CHKERR assemble(row_side, col_side, row_type, col_type, row_data, col_data);
148 }
149};
150
151struct OpAssembleVolume : public OpAssembleBasic<VolUserDataOperator> {
153};
154
155struct OpAssembleFace : public OpAssembleBasic<FaceUserDataOperator> {
156 using OpAssembleBasic<FaceUserDataOperator>::OpAssembleBasic;
157};
158
160 using OpAssembleVolume::OpAssembleVolume;
161 MoFEMErrorCode doWork(int side, EntityType type, EntData &data) {
163 SETERRQ(PETSC_COMM_SELF, MOFEM_NOT_IMPLEMENTED,
164 "OpAssembleVolumePositiveDefine not implemented");
166 }
167
168 MoFEMErrorCode doWork(int row_side, int col_side, EntityType row_type,
169 EntityType col_type, EntData &row_data,
170 EntData &col_data) {
172 if (row_data.getIndices().empty())
174 if (col_data.getIndices().empty())
176 K.resize(row_data.getIndices().size(), col_data.getIndices().size(), false);
177 K.clear();
178 CHKERR integrate(row_data, col_data);
179
180 auto symmetrize = [](MatrixDouble &&mat) {
181 return (mat + trans(mat)) / 2.0;
182 };
183 auto check_positive_definite = [](MatrixDouble &&mat) {
184 int n = mat.size1();
185 return (lapack_dpotrf('U', n, mat.data().data(), n) == 0);
186 };
187 auto frobenius_norm = [](MatrixDouble &mat) {
188 double sum = 0.0;
189 for (std::size_t i = 0; i < mat.size1(); ++i)
190 for (std::size_t j = 0; j < mat.size2(); ++j)
191 sum += mat(i, j) * mat(i, j);
192 return std::sqrt(sum);
193 };
194
195 auto higham_method_one_pass = [&](MatrixDouble &mat) {
196 int n = mat.size1();
197 const int lda = n;
198 const int size = (n + 2) * n;
199 int lwork = size;
200 double *work = new double[size];
201
202 VectorDouble eig(n, 0.0);
203 MatrixDouble eigen_vec = prod(mat, trans(mat));
204 if (lapack_dsyev('V', 'U', n, eigen_vec.data().data(), lda,
205 eig.data().data(), work, lwork) > 0)
207 "The algorithm failed to compute eigenvalues.");
208 delete[] work;
209
210 double max_e = std::abs(eig[0]);
211 for (auto e : eig) {
212 max_e = std::max(std::abs(e), max_e);
213 }
214 constexpr auto eps = std::numeric_limits<float>::epsilon();
215 auto min_e = std::sqrt(max_e) * eps;
216 for (auto &e : eig) {
217 e = std::sqrt(std::abs(e));
218 e = std::max(e, min_e);
219 e = std::min(e, static_cast<double>(std::numeric_limits<float>::max()));
220 }
221
222 auto diagonal_matrix =
223 ublas::diagonal_matrix<double, ublas::row_major,
224 VecAllocator<double>>(n, eig.data());
225 MatrixDouble symm_mat;
226 symm_mat = prod(trans(eigen_vec), diagonal_matrix);
227 symm_mat = prod(symm_mat, eigen_vec);
228
229 MatrixDouble hat_m = (mat + symm_mat) / 2.0;
230
231 return hat_m;
232 };
233
234 auto hat_k = higham_method_one_pass(K);
235
236 // MatrixDouble tmp_mat = K - hat_k;
237 // auto nrm2 = frobenius_norm(tmp_mat);
238 // MOFEM_LOG("EPSELF", Sev::inform) <<"Higham method one pass norm: " << nrm2;
239 // SETERRQ(PETSC_COMM_SELF, MOFEM_NOT_IMPLEMENTED,
240 // "Higham method one pass not implemented");
241
242 K.swap(hat_k);
243
244 CHKERR assemble(row_side, col_side, row_type, col_type, row_data, col_data);
246 }
247
248private:
249};
250
251// Add operator to calculate Eshelby tensor
252
254 : public ForcesAndSourcesCore::UserDataOperator {
255 OpCalculateEshelbyStress(boost::shared_ptr<DataAtIntegrationPts> data_ptr)
257 dataAtPts(data_ptr) {}
258 MoFEMErrorCode doWork(int side, EntityType type, EntData &data);
259
260private:
261 boost::shared_ptr<DataAtIntegrationPts>
262 dataAtPts; ///< data at integration pts
263};
264
266
268 boost::shared_ptr<DataAtIntegrationPts> data_ptr, double alpha_omega = 0)
270 alphaOmega(alpha_omega) {}
271 MoFEMErrorCode doWork(int side, EntityType type, EntData &data);
272
273private:
274 boost::shared_ptr<DataAtIntegrationPts>
275 dataAtPts; ///< data at integration pts
277};
278
281 boost::shared_ptr<DataAtIntegrationPts> data_ptr)
282 : SideEleOp(NOSPACE, SideEleOp::OPSPACE), dataAtPts(data_ptr) {
283 std::fill(&doEntities[MBVERTEX], &doEntities[MBMAXTYPE], false);
284 for (auto t = moab::CN::TypeDimensionMap[SPACE_DIM].first;
285 t <= moab::CN::TypeDimensionMap[SPACE_DIM].second; ++t)
286 doEntities[t] = true;
287 sYmm = false;
288 }
289 MoFEMErrorCode doWork(int side, EntityType type, EntData &data);
290
291private:
292 boost::shared_ptr<DataAtIntegrationPts>
293 dataAtPts; ///< data at integration pts
294};
295
296struct OpCalculateReactionForces : public FaceUserDataOperator {
297 OpCalculateReactionForces(boost::shared_ptr<DataAtIntegrationPts> data_ptr,
298 std::string block_name, Range block_entities,
299 std::array<double, 6> &reaction_vec)
300 : FaceUserDataOperator(NOSPACE, OPSPACE), dataAtPts(data_ptr),
301 blockName(block_name), blockEntities(block_entities),
302 reactionVec(reaction_vec) {}
303 MoFEMErrorCode doWork(int side, EntityType type, EntData &data);
304
305private:
306 boost::shared_ptr<DataAtIntegrationPts>
307 dataAtPts; ///< data at integration pts
309 std::string blockName;
310 std::array<double, 6> &reactionVec;
311};
312
315 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
316 const double alpha, const double rho)
317 : OpAssembleVolume(field_name, data_ptr, OPROW), alphaW(alpha),
318 alphaRho(rho) {}
319 MoFEMErrorCode integrate(EntData &data);
320
321private:
322 const double alphaW;
323 const double alphaRho;
324
325};
326
328 OpSpatialRotation(const std::string &field_name,
329 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
330 double alpha_omega)
331 : OpAssembleVolume(field_name, data_ptr, OPROW), alphaOmega(alpha_omega) {
332 }
333 MoFEMErrorCode integrate(EntData &data);
334
335private:
337};
338
341 boost::shared_ptr<DataAtIntegrationPts> data_ptr)
342 : OpAssembleVolume(field_name, data_ptr, OPROW) {}
343 MoFEMErrorCode integrate(EntData &data);
344
345private:
346};
347
350 boost::shared_ptr<DataAtIntegrationPts> data_ptr)
351 : OpAssembleVolume(field_name, data_ptr, OPROW) {}
352 MoFEMErrorCode integrate(EntData &data);
353
354private:
355};
356
359 boost::shared_ptr<DataAtIntegrationPts> data_ptr)
360 : OpAssembleVolume(field_name, data_ptr, OPROW) {}
361 MoFEMErrorCode integrate(EntData &data);
362};
363
364template <int INTERP_ORDER>
366 OpGetInternalStress(boost::shared_ptr<DataAtIntegrationPts> data_ptr,
367 std::string tag_name = "")
368 : UserDataOperator(H1, OPLAST), dataAtPts(data_ptr), tagName(tag_name) {
369 std::fill(&doEntities[MBVERTEX], &doEntities[MBMAXTYPE], false);
370 doEntities[MBVERTEX] = true;
371 }
372 MoFEMErrorCode doWork(int side, EntityType type, EntData &data);
373
374private:
375 boost::shared_ptr<DataAtIntegrationPts> dataAtPts;
376 std::string tagName;
377};
378
379template <bool VOIGT>
382 const std::string &field_name,
383 boost::shared_ptr<DataAtIntegrationPts> data_ptr)
384 : OpAssembleVolume(field_name, data_ptr, OPROW) {}
385 MoFEMErrorCode integrate(EntData &row_data);
386};
387
388
390
392 const std::string &field_name,
393 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
394 boost::shared_ptr<ExternalStrainVec> &external_strain_vec_ptr,
395 std::map<std::string, boost::shared_ptr<ScalingMethod>> smv,
396 boost::shared_ptr<Range> ents_ptr = nullptr)
397
398 : OpAssembleVolume(field_name, data_ptr, OPROW), dataAtPts{data_ptr}, externalStrainVecPtr(external_strain_vec_ptr), scalingMethodsMap{smv} {}
399
400protected:
401 MoFEMErrorCode integrate(EntData &row_data);
402
403 boost::shared_ptr<DataAtIntegrationPts> dataAtPts;
404
405 boost::shared_ptr<ExternalStrainVec> externalStrainVecPtr;
406 std::map<std::string, boost::shared_ptr<ScalingMethod>> scalingMethodsMap;
407};
408
409template <AssemblyType A, IntegrationType I> struct OpDispBcImpl;
410
411template <AssemblyType A>
412struct OpDispBcImpl<A, GAUSS>
413 : public FormsIntegrators<FaceUserDataOperator>::Assembly<A>::OpBrokenBase {
414
415 using OP = typename FormsIntegrators<FaceUserDataOperator>::Assembly<
417
419 boost::shared_ptr<std::vector<BrokenBaseSideData>> broken_base_side_data,
420 boost::shared_ptr<BcDispVec> &bc_disp_ptr,
421 std::map<std::string, boost::shared_ptr<ScalingMethod>> smv,
422 boost::shared_ptr<Range> ents_ptr = nullptr)
423 : OP(broken_base_side_data, ents_ptr), bcDispPtr(bc_disp_ptr),
424 scalingMethodsMap(smv) {}
425
426protected:
427 MoFEMErrorCode iNtegrate(EntData &data);
428 boost::shared_ptr<BcDispVec> bcDispPtr;
429 std::map<std::string, boost::shared_ptr<ScalingMethod>> scalingMethodsMap;
430};
431
432struct OpDispBc : public OpDispBcImpl<PETSC, GAUSS> {
434 using OP::OpDispBcImpl;
435
436protected:
437 MoFEMErrorCode iNtegrate(EntData &data);
438};
439
440template <AssemblyType A, IntegrationType I> struct OpRotationBcImpl;
441
442template <AssemblyType A>
443struct OpRotationBcImpl<A, GAUSS>
444 : public FormsIntegrators<FaceUserDataOperator>::Assembly<A>::OpBrokenBase {
445
446 using OP = typename FormsIntegrators<FaceUserDataOperator>::Assembly<
448
450 boost::shared_ptr<std::vector<BrokenBaseSideData>> broken_base_side_data,
451 boost::shared_ptr<BcRotVec> &bc_rot_ptr,
452 std::map<std::string, boost::shared_ptr<ScalingMethod>> smv,
453 boost::shared_ptr<Range> ents_ptr = nullptr)
454 : OP(broken_base_side_data, ents_ptr), bcRotPtr(bc_rot_ptr),
455 scalingMethodsMap(smv) {}
456
457protected:
458 MoFEMErrorCode iNtegrate(EntData &data);
459 boost::shared_ptr<BcRotVec> bcRotPtr;
460 std::map<std::string, boost::shared_ptr<ScalingMethod>> scalingMethodsMap;
461};
462
463/**
464 * @brief Apply rotation boundary condition
465 *
466 * The boundary condition is applied getting data from the SPATIAL_ROTATION_BC
467 * blockset.
468 *
469 * Centre of rotation is given by the first three attributes of the blockset.
470 * The fort parameter is angle of rotation
471 *
472 */
473struct OpRotationBc : public OpRotationBcImpl<PETSC, GAUSS> {
475 using OP::OpRotationBcImpl;
476
477protected:
478 MoFEMErrorCode iNtegrate(EntData &data);
479};
480
482 : public FormsIntegrators<FaceUserDataOperator>::Assembly<PETSC>::OpBase {
484 const std::string row_field, boost::shared_ptr<TractionBcVec> bc_data,
485 boost::shared_ptr<double> piola_scale_ptr,
486 std::map<std::string, boost::shared_ptr<ScalingMethod>> smv)
487 : FormsIntegrators<FaceUserDataOperator>::Assembly<PETSC>::OpBase(
488 row_field, row_field, FaceUserDataOperator::OPROW),
489 bcData(bc_data), piolaScalePtr(), scalingMethodsMap(smv) {}
490
491 MoFEMErrorCode iNtegrate(EntData &data);
492
493protected:
494 boost::shared_ptr<TractionBcVec> bcData;
495 boost::shared_ptr<double> piolaScalePtr;
496 std::map<std::string, boost::shared_ptr<ScalingMethod>> scalingMethodsMap;
497};
498
500 : public FormsIntegrators<FaceUserDataOperator>::Assembly<PETSC>::OpBase {
502 const std::string row_field, boost::shared_ptr<PressureBcVec> bc_data,
503 boost::shared_ptr<double> piola_scale_ptr,
504 std::map<std::string, boost::shared_ptr<ScalingMethod>> smv)
505 : FormsIntegrators<FaceUserDataOperator>::Assembly<PETSC>::OpBase(
506 row_field, row_field, FaceUserDataOperator::OPROW),
507 bcData(bc_data), piolaScalePtr(), scalingMethodsMap(smv) {}
508
509 MoFEMErrorCode iNtegrate(EntData &data);
510
511protected:
512 boost::shared_ptr<PressureBcVec> bcData;
513 boost::shared_ptr<double> piolaScalePtr;
514 std::map<std::string, boost::shared_ptr<ScalingMethod>> scalingMethodsMap;
515};
516
518 : public FormsIntegrators<FaceUserDataOperator>::Assembly<PETSC>::OpBase {
520 const std::string row_field, boost::shared_ptr<AnalyticalTractionBcVec> bc_data,
521 boost::shared_ptr<double> piola_scale_ptr,
522 std::map<std::string, boost::shared_ptr<ScalingMethod>> smv)
523 : FormsIntegrators<FaceUserDataOperator>::Assembly<PETSC>::OpBase(
524 row_field, row_field, FaceUserDataOperator::OPROW),
525 bcData(bc_data), piolaScalePtr(), scalingMethodsMap(smv) {}
526
527 MoFEMErrorCode iNtegrate(EntData &data);
528
529protected:
530 boost::shared_ptr<AnalyticalTractionBcVec> bcData;
531 boost::shared_ptr<double> piolaScalePtr;
532 std::map<std::string, boost::shared_ptr<ScalingMethod>> scalingMethodsMap;
533};
534
535template <AssemblyType A, IntegrationType I> struct OpNormalDispBcRhsImpl;
536template <AssemblyType A, IntegrationType I> struct OpNormalDispBcLhsImpl_dU;
537template <AssemblyType A, IntegrationType I> struct OpNormalDispBcLhsImpl_dP;
538
539template <AssemblyType A>
541 : public FormsIntegrators<FaceUserDataOperator>::Assembly<PETSC>::OpBase {
542
543 using OP =
544 typename FormsIntegrators<FaceUserDataOperator>::Assembly<PETSC>::OpBase;
545
547 std::string row_field, boost::shared_ptr<MatrixDouble> hybrid_disp_ptr,
548 boost::shared_ptr<MatrixDouble> piola_stress_ptr,
549 boost::shared_ptr<NormalDisplacementBcVec> &bc_disp_ptr,
550 std::map<std::string, boost::shared_ptr<ScalingMethod>> smv,
551 boost::shared_ptr<Range> ents_ptr = nullptr)
552 : FormsIntegrators<FaceUserDataOperator>::Assembly<PETSC>::OpBase(
553 row_field, row_field, OP::OPROW),
554 hybridDispPtr(hybrid_disp_ptr), piolaStressPtr(piola_stress_ptr),
555 bcDispPtr(bc_disp_ptr), scalingMethodsMap(smv) {}
556
557protected:
558 MoFEMErrorCode iNtegrate(EntData &data);
559 boost::shared_ptr<MatrixDouble> hybridDispPtr;
560 boost::shared_ptr<MatrixDouble> piolaStressPtr;
561 boost::shared_ptr<NormalDisplacementBcVec> bcDispPtr;
562 std::map<std::string, boost::shared_ptr<ScalingMethod>> scalingMethodsMap;
563};
564
565template <AssemblyType A>
567 : public FormsIntegrators<FaceUserDataOperator>::Assembly<A>::OpBase {
568
569 using OP =
570 typename FormsIntegrators<FaceUserDataOperator>::Assembly<A>::OpBase;
571
573 std::string row_field,
574 boost::shared_ptr<NormalDisplacementBcVec> &bc_disp_ptr,
575 std::map<std::string, boost::shared_ptr<ScalingMethod>> smv,
576 boost::shared_ptr<Range> ents_ptr = nullptr)
577 : OP(row_field, row_field, OP::OPROWCOL), bcDispPtr(bc_disp_ptr),
578 scalingMethodsMap(smv) {}
579
580protected:
581 MoFEMErrorCode iNtegrate(EntData &row_data, EntData &col_data);
582 boost::shared_ptr<NormalDisplacementBcVec> bcDispPtr;
583 std::map<std::string, boost::shared_ptr<ScalingMethod>> scalingMethodsMap;
584};
585
586template <AssemblyType A>
588 : public FormsIntegrators<FaceUserDataOperator>::Assembly<A>::OpBrokenBase {
589
590 using OP = typename FormsIntegrators<FaceUserDataOperator>::Assembly<
592
594 std::string row_field,
595 boost::shared_ptr<std::vector<BrokenBaseSideData>> broken_base_side_data,
596 boost::shared_ptr<NormalDisplacementBcVec> &bc_disp_ptr,
597 std::map<std::string, boost::shared_ptr<ScalingMethod>> smv,
598 boost::shared_ptr<Range> ents_ptr = nullptr)
599 : OP(row_field, broken_base_side_data, false, false, ents_ptr),
600 bcDispPtr(bc_disp_ptr), scalingMethodsMap(smv) {}
601
602protected:
603 MoFEMErrorCode iNtegrate(EntData &row_data, EntData &col_data);
604 boost::shared_ptr<NormalDisplacementBcVec> bcDispPtr;
605 std::map<std::string, boost::shared_ptr<ScalingMethod>> scalingMethodsMap;
606};
607
608struct OpNormalDispRhsBc : public OpNormalDispBcRhsImpl<PETSC, GAUSS> {
610 using OP::OpNormalDispBcRhsImpl;
611
612protected:
613 MoFEMErrorCode iNtegrate(EntData &data);
614};
615
619
620protected:
621 MoFEMErrorCode iNtegrate(EntData &row_data, EntData &col_data);
622};
623
627
628protected:
629 MoFEMErrorCode iNtegrate(EntData &row_data, EntData &col_data);
630};
631
632template <AssemblyType A, IntegrationType I> struct OpAnalyticalDispBcImpl;
633
634template <AssemblyType A>
636 : public FormsIntegrators<FaceUserDataOperator>::Assembly<A>::OpBrokenBase {
637
638 using OP = typename FormsIntegrators<FaceUserDataOperator>::Assembly<
640
642 boost::shared_ptr<std::vector<BrokenBaseSideData>> broken_base_side_data,
643 boost::shared_ptr<AnalyticalDisplacementBcVec> &bc_disp_ptr,
644 std::map<std::string, boost::shared_ptr<ScalingMethod>> smv,
645 boost::shared_ptr<Range> ents_ptr = nullptr)
646 : OP(broken_base_side_data, ents_ptr), bcDispPtr(bc_disp_ptr),
647 scalingMethodsMap(smv) {}
648
649protected:
650 MoFEMErrorCode iNtegrate(EntData &data);
651 boost::shared_ptr<AnalyticalDisplacementBcVec> bcDispPtr;
652 std::map<std::string, boost::shared_ptr<ScalingMethod>> scalingMethodsMap;
653};
654
655struct OpAnalyticalDispBc : public OpAnalyticalDispBcImpl<PETSC, GAUSS> {
657 using OP::OpAnalyticalDispBcImpl;
658
659protected:
660 MoFEMErrorCode iNtegrate(EntData &data);
661};
662
664 OpSpatialEquilibrium_dw_dP(std::string row_field, std::string col_field,
665 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
666 const bool assemble_off = false)
667 : OpAssembleVolume(row_field, col_field, data_ptr, OPROWCOL,
668 assemble_off) {
669 sYmm = false;
670 }
671 MoFEMErrorCode integrate(EntData &row_data, EntData &col_data);
672};
673
675 const double alphaW;
676 const double alphaRho;
677 OpSpatialEquilibrium_dw_dw(std::string row_field, std::string col_field,
678 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
679 const double alpha, const double rho)
680 : OpAssembleVolume(row_field, col_field, data_ptr, OPROWCOL, false),
681 alphaW(alpha), alphaRho(rho) {
682 sYmm = true;
683 }
684 MoFEMErrorCode integrate(EntData &row_data, EntData &col_data);
685};
686
688 OpSpatialPhysical_du_dP(std::string row_field, std::string col_field,
689 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
690 const bool assemble_off = false)
691 : OpAssembleVolume(row_field, col_field, data_ptr, OPROWCOL,
692 assemble_off) {
693 sYmm = false;
694 }
695
696 MoFEMErrorCode integrate(EntData &row_data, EntData &col_data);
697};
698
700 OpSpatialPhysical_du_dBubble(std::string row_field, std::string col_field,
701 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
702 const bool assemble_off = false)
703 : OpAssembleVolume(row_field, col_field, data_ptr, OPROWCOL,
704 assemble_off) {
705 sYmm = false;
706 }
707
708 MoFEMErrorCode integrate(EntData &row_data, EntData &col_data);
709};
710
712 using OpAssembleVolume::OpAssembleVolume;
713 OpSpatialPhysical_du_domega(std::string row_field, std::string col_field,
714 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
715 const bool assemble_off)
716 : OpAssembleVolume(row_field, col_field, data_ptr, OPROWCOL,
717 assemble_off) {
718 sYmm = false;
719 }
720 MoFEMErrorCode integrate(EntData &row_data, EntData &col_data);
721};
722
724 OpSpatialRotation_domega_du(std::string row_field, std::string col_field,
725 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
726 double alpha_omega)
727 : OpAssembleVolume(row_field, col_field, data_ptr, OPROWCOL, false) {
728 sYmm = false;
729 }
730 MoFEMErrorCode integrate(EntData &row_data, EntData &col_data);
731private:
732};
733
735 OpSpatialRotation_domega_dP(std::string row_field, std::string col_field,
736 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
737 const bool assemble_off)
738 : OpAssembleVolume(row_field, col_field, data_ptr, OPROWCOL,
739 assemble_off) {
740 sYmm = false;
741 }
742 MoFEMErrorCode integrate(EntData &row_data, EntData &col_data);
743};
744
747 std::string row_field, std::string col_field,
748 boost::shared_ptr<DataAtIntegrationPts> data_ptr, const bool assemble_off)
749 : OpAssembleVolume(row_field, col_field, data_ptr, OPROWCOL,
750 assemble_off) {
751 sYmm = false;
752 }
753 MoFEMErrorCode integrate(EntData &row_data, EntData &col_data);
754};
755
756
759 std::string row_field, std::string col_field,
760 boost::shared_ptr<DataAtIntegrationPts> data_ptr, double alpha_omega)
761 : OpAssembleVolume(row_field, col_field, data_ptr, OPROWCOL, false),
762 alphaOmega(alpha_omega) {
763 sYmm = false;
764 }
765 MoFEMErrorCode integrate(EntData &row_data, EntData &col_data);
766
767private:
769};
770
772 OpSpatialConsistency_dP_dP(std::string row_field, std::string col_field,
773 boost::shared_ptr<DataAtIntegrationPts> data_ptr)
774 : OpAssembleVolume(row_field, col_field, data_ptr, OPROWCOL, false) {
775 sYmm = false;
776 }
777 MoFEMErrorCode integrate(EntData &row_data, EntData &col_data);
778
779private:
780 template <int S>
781 MoFEMErrorCode integrateImpl(EntData &row_data, EntData &col_data);
782};
783
786 std::string row_field, std::string col_field,
787 boost::shared_ptr<DataAtIntegrationPts> data_ptr)
788 : OpAssembleVolume(row_field, col_field, data_ptr, OPROWCOL, false) {
789 sYmm = false;
790 }
791 MoFEMErrorCode integrate(EntData &row_data, EntData &col_data);
792
793private:
794 template <int S>
795 MoFEMErrorCode integrateImpl(EntData &row_data, EntData &col_data);
796};
797
800 std::string row_field, std::string col_field,
801 boost::shared_ptr<DataAtIntegrationPts> data_ptr)
802 : OpAssembleVolume(row_field, col_field, data_ptr, OPROWCOL, true) {
803 sYmm = false;
804 }
805 MoFEMErrorCode integrate(EntData &row_data, EntData &col_data);
806
807private:
808 template <int S>
809 MoFEMErrorCode integrateImpl(EntData &row_data, EntData &col_data);
810};
811
814 std::string row_field, std::string col_field,
815 boost::shared_ptr<DataAtIntegrationPts> data_ptr, const bool assemble_off)
816 : OpAssembleVolume(row_field, col_field, data_ptr, OPROWCOL,
817 assemble_off) {
818 sYmm = false;
819 }
820 MoFEMErrorCode integrate(EntData &row_data, EntData &col_data);
821
822private:
823};
824
827 std::string row_field, std::string col_field,
828 boost::shared_ptr<DataAtIntegrationPts> data_ptr, const bool assemble_off)
829 : OpAssembleVolume(row_field, col_field, data_ptr, OPROWCOL,
830 assemble_off) {
831 sYmm = false;
832 }
833 MoFEMErrorCode integrate(EntData &row_data, EntData &col_data);
834
835private:
836};
837
839 : public VolumeElementForcesAndSourcesCoreOnSide::UserDataOperator {
840
841 using OP = VolumeElementForcesAndSourcesCoreOnSide::UserDataOperator;
842
843 moab::Interface &postProcMesh;
844 std::vector<EntityHandle> &mapGaussPts;
845 boost::shared_ptr<DataAtIntegrationPts> dataAtPts;
846
847 OpPostProcDataStructure(moab::Interface &post_proc_mesh,
848 std::vector<EntityHandle> &map_gauss_pts,
849 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
850 int sense)
851 : OP(NOSPACE, UserDataOperator::OPSPACE), postProcMesh(post_proc_mesh),
852 mapGaussPts(map_gauss_pts), dataAtPts(data_ptr), tagSense(sense) {}
853
854 MoFEMErrorCode doWork(int side, EntityType type, EntData &data);
855
856private:
858};
859
861 OpSpatialPrj(std::string row_field,
862 boost::shared_ptr<DataAtIntegrationPts> data_ptr)
863 : OpAssembleVolume(row_field, data_ptr, OPROW) {}
864 MoFEMErrorCode integrate(EntData &row_data);
865};
866
868 OpSpatialPrj_dx_dx(std::string row_field, std::string col_field,
869 boost::shared_ptr<DataAtIntegrationPts> data_ptr)
870 : OpAssembleVolume(row_field, col_field, data_ptr, OPROWCOL, false) {
871 // FIXME: That is symmetric
872 sYmm = false;
873 }
874 MoFEMErrorCode integrate(EntData &row_data, EntData &col_data);
875};
876
878 OpSpatialPrj_dx_dw(std::string row_field, std::string col_field,
879 boost::shared_ptr<DataAtIntegrationPts> data_ptr)
880 : OpAssembleVolume(row_field, col_field, data_ptr, OPROWCOL, false) {
881 sYmm = false;
882 }
883 MoFEMErrorCode integrate(EntData &row_data, EntData &col_data);
884};
885
887 : public VolumeElementForcesAndSourcesCoreOnSide::UserDataOperator {
888
889 // @note This is not on the side, since, integrate energy in the volume
890 using OP = VolumeElementForcesAndSourcesCoreOnSide::UserDataOperator;
891
892 OpFaceSideMaterialForce(boost::shared_ptr<DataAtIntegrationPts> data_ptr)
893 : OP(NOSPACE, OPSPACE), dataAtPts(data_ptr) {}
894
895 MoFEMErrorCode doWork(int side, EntityType type, EntData &data);
896
897private:
898 boost::shared_ptr<DataAtIntegrationPts>
899 dataAtPts; ///< data at integration pts
900};
901
903 : public FaceElementForcesAndSourcesCore::UserDataOperator {
904
905 // @note This is not on the side, since, integrate energy in the volume
906 using OP = FaceElementForcesAndSourcesCore::UserDataOperator;
907
908 OpFaceMaterialForce(boost::shared_ptr<DataAtIntegrationPts> data_ptr)
909 : OP(NOSPACE, OPSPACE), dataAtPts(data_ptr) {}
910
911 MoFEMErrorCode doWork(int side, EntityType type, EntData &data);
912
913private:
914 boost::shared_ptr<DataAtIntegrationPts>
915 dataAtPts; ///< data at integration pts
916};
917
918template <int FE_DIM, int PROBLEM_DIM, int SPACE_DIM> struct AddHOOps;
919
920template <> struct AddHOOps<2, 3, 3> {
921 AddHOOps() = delete;
922 static MoFEMErrorCode
923 add(boost::ptr_deque<ForcesAndSourcesCore::UserDataOperator> &pipeline,
924 std::vector<FieldSpace> space, std::string geom_field_name,
925 boost::shared_ptr<Range> crack_front_edges_ptr);
926};
927
928template <> struct AddHOOps<2, 2, 3> {
929 AddHOOps() = delete;
930 static MoFEMErrorCode
931 add(boost::ptr_deque<ForcesAndSourcesCore::UserDataOperator> &pipeline,
932 std::vector<FieldSpace> space, std::string geom_field_name,
933 boost::shared_ptr<Range> crack_front_edges_ptr);
934};
935
936template <> struct AddHOOps<3, 3, 3> {
937 AddHOOps() = delete;
938 static MoFEMErrorCode
939 add(boost::ptr_deque<ForcesAndSourcesCore::UserDataOperator> &pipeline,
940 std::vector<FieldSpace> space, std::string geom_field_name,
941 boost::shared_ptr<Range> crack_front_edges_ptr);
942};
943
ForcesAndSourcesCore::UserDataOperator UserDataOperator
static const double eps
constexpr int SPACE_DIM
#define CHK_THROW_MESSAGE(err, msg)
Check and throw MoFEM exception.
#define MoFEMFunctionReturnHot(a)
Last executable line of each PETSc function used for error handling. Replaces return()
@ H1
continuous field
Definition definitions.h:85
@ NOSPACE
Definition definitions.h:83
#define MoFEMFunctionBegin
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
@ MOFEM_INVALID_DATA
Definition definitions.h:36
@ MOFEM_NOT_IMPLEMENTED
Definition definitions.h:32
#define MoFEMFunctionReturn(a)
Last executable line of each PETSc function used for error handling. Replaces return()
#define CHKERR
Inline error check.
FTensor::Index< 'i', SPACE_DIM > i
const double n
refractive index of diffusive medium
static __CLPK_integer lapack_dpotrf(char uplo, __CLPK_integer n, __CLPK_doublereal *a, __CLPK_integer lda)
static __CLPK_integer lapack_dsyev(char jobz, char uplo, __CLPK_integer n, __CLPK_doublereal *a, __CLPK_integer lda, __CLPK_doublereal *w, __CLPK_doublereal *work, __CLPK_integer lwork)
FTensor::Index< 'j', 3 > j
constexpr AssemblyType A
double rho
Definition plastic.cpp:144
constexpr double t
plate stiffness
Definition plate.cpp:58
constexpr auto field_name
OpBaseImpl< PETSC, EdgeEleOp > OpBase
Definition radiation.cpp:29
static MoFEMErrorCode add(boost::ptr_deque< ForcesAndSourcesCore::UserDataOperator > &pipeline, std::vector< FieldSpace > space, std::string geom_field_name, boost::shared_ptr< Range > crack_front_edges_ptr)
static MoFEMErrorCode add(boost::ptr_deque< ForcesAndSourcesCore::UserDataOperator > &pipeline, std::vector< FieldSpace > space, std::string geom_field_name, boost::shared_ptr< Range > crack_front_edges_ptr)
static MoFEMErrorCode add(boost::ptr_deque< ForcesAndSourcesCore::UserDataOperator > &pipeline, std::vector< FieldSpace > space, std::string geom_field_name, boost::shared_ptr< Range > crack_front_edges_ptr)
bool sYmm
If true assume that matrix is symmetric structure.
Data on single entity (This is passed as argument to DataOperator::doWork)
const VectorInt & getIndices() const
Get global indices of dofs on entity.
@ OPROW
operator doWork function is executed on FE rows
@ OPROWCOL
operator doWork is executed on FE rows &columns
@ OPSPACE
operator do Work is execute on space data
boost::shared_ptr< AnalyticalDisplacementBcVec > bcDispPtr
std::map< std::string, boost::shared_ptr< ScalingMethod > > scalingMethodsMap
MoFEMErrorCode iNtegrate(EntData &data)
OpAnalyticalDispBcImpl(boost::shared_ptr< std::vector< BrokenBaseSideData > > broken_base_side_data, boost::shared_ptr< AnalyticalDisplacementBcVec > &bc_disp_ptr, std::map< std::string, boost::shared_ptr< ScalingMethod > > smv, boost::shared_ptr< Range > ents_ptr=nullptr)
MoFEMErrorCode iNtegrate(EntData &data)
MatrixDouble K
local tangent matrix
virtual MoFEMErrorCode integrate(int row_side, EntityType row_type, EntData &data)
VectorDouble nF
local right hand side vector
MoFEMErrorCode doWork(int row_side, int col_side, EntityType row_type, EntityType col_type, EntData &row_data, EntData &col_data)
virtual MoFEMErrorCode assemble(int row_side, int col_side, EntityType row_type, EntityType col_type, EntData &row_data, EntData &col_data)
virtual MoFEMErrorCode integrate(EntData &data)
MoFEMErrorCode doWork(int side, EntityType type, EntData &data)
virtual MoFEMErrorCode assemble(EntData &data)
OpAssembleBasic(const std::string &field_name, boost::shared_ptr< DataAtIntegrationPts > data_ptr, const char type)
virtual MoFEMErrorCode integrate(EntData &row_data, EntData &col_data)
boost::function< double()> ScaleOff
boost::shared_ptr< DataAtIntegrationPts > dataAtPts
data at integration pts
virtual MoFEMErrorCode assemble(int row_side, EntityType row_type, EntData &data)
OpAssembleBasic(std::string row_field, std::string col_field, boost::shared_ptr< DataAtIntegrationPts > data_ptr, const char type, const bool assemble_symmetry, ScaleOff scale_off=[]() { return 1;})
MoFEMErrorCode doWork(int side, EntityType type, EntData &data)
Operator for linear form, usually to calculate values on right hand side.
MoFEMErrorCode doWork(int row_side, int col_side, EntityType row_type, EntityType col_type, EntData &row_data, EntData &col_data)
Operator for bi-linear form, usually to calculate values on left hand side.
boost::shared_ptr< AnalyticalTractionBcVec > bcData
OpBrokenAnalyticalTractionBc(const std::string row_field, boost::shared_ptr< AnalyticalTractionBcVec > bc_data, boost::shared_ptr< double > piola_scale_ptr, std::map< std::string, boost::shared_ptr< ScalingMethod > > smv)
boost::shared_ptr< double > piolaScalePtr
MoFEMErrorCode iNtegrate(EntData &data)
std::map< std::string, boost::shared_ptr< ScalingMethod > > scalingMethodsMap
OpBrokenPressureBc(const std::string row_field, boost::shared_ptr< PressureBcVec > bc_data, boost::shared_ptr< double > piola_scale_ptr, std::map< std::string, boost::shared_ptr< ScalingMethod > > smv)
boost::shared_ptr< double > piolaScalePtr
MoFEMErrorCode iNtegrate(EntData &data)
std::map< std::string, boost::shared_ptr< ScalingMethod > > scalingMethodsMap
boost::shared_ptr< PressureBcVec > bcData
std::map< std::string, boost::shared_ptr< ScalingMethod > > scalingMethodsMap
OpBrokenTractionBc(const std::string row_field, boost::shared_ptr< TractionBcVec > bc_data, boost::shared_ptr< double > piola_scale_ptr, std::map< std::string, boost::shared_ptr< ScalingMethod > > smv)
boost::shared_ptr< double > piolaScalePtr
boost::shared_ptr< TractionBcVec > bcData
MoFEMErrorCode iNtegrate(EntData &data)
MoFEMErrorCode doWork(int side, EntityType type, EntData &data)
Operator for linear form, usually to calculate values on right hand side.
boost::shared_ptr< DataAtIntegrationPts > dataAtPts
data at integration pts
OpCalculateEshelbyStress(boost::shared_ptr< DataAtIntegrationPts > data_ptr)
boost::shared_ptr< DataAtIntegrationPts > dataAtPts
data at integration pts
MoFEMErrorCode doWork(int side, EntityType type, EntData &data)
std::array< double, 6 > & reactionVec
OpCalculateReactionForces(boost::shared_ptr< DataAtIntegrationPts > data_ptr, std::string block_name, Range block_entities, std::array< double, 6 > &reaction_vec)
MoFEMErrorCode doWork(int side, EntityType type, EntData &data)
Operator for linear form, usually to calculate values on right hand side.
boost::shared_ptr< DataAtIntegrationPts > dataAtPts
data at integration pts
OpCalculateRotationAndSpatialGradient(boost::shared_ptr< DataAtIntegrationPts > data_ptr, double alpha_omega=0)
boost::shared_ptr< DataAtIntegrationPts > dataAtPts
data at integration pts
OpCalculateTractionFromSideEl(boost::shared_ptr< DataAtIntegrationPts > data_ptr)
MoFEMErrorCode doWork(int side, EntityType type, EntData &data)
std::map< std::string, boost::shared_ptr< ScalingMethod > > scalingMethodsMap
OpDispBcImpl(boost::shared_ptr< std::vector< BrokenBaseSideData > > broken_base_side_data, boost::shared_ptr< BcDispVec > &bc_disp_ptr, std::map< std::string, boost::shared_ptr< ScalingMethod > > smv, boost::shared_ptr< Range > ents_ptr=nullptr)
MoFEMErrorCode iNtegrate(EntData &data)
boost::shared_ptr< BcDispVec > bcDispPtr
MoFEMErrorCode iNtegrate(EntData &data)
MoFEMErrorCode doWork(int side, EntityType type, EntData &data)
boost::shared_ptr< DataAtIntegrationPts > dataAtPts
data at integration pts
FaceElementForcesAndSourcesCore::UserDataOperator OP
OpFaceMaterialForce(boost::shared_ptr< DataAtIntegrationPts > data_ptr)
MoFEMErrorCode doWork(int side, EntityType type, EntData &data)
OpFaceSideMaterialForce(boost::shared_ptr< DataAtIntegrationPts > data_ptr)
boost::shared_ptr< DataAtIntegrationPts > dataAtPts
data at integration pts
VolumeElementForcesAndSourcesCoreOnSide::UserDataOperator OP
MoFEMErrorCode doWork(int side, EntityType type, EntData &data)
boost::shared_ptr< DataAtIntegrationPts > dataAtPts
OpGetInternalStress(boost::shared_ptr< DataAtIntegrationPts > data_ptr, std::string tag_name="")
virtual MoFEMErrorCode evaluateLhs(EntData &data)=0
boost::shared_ptr< PhysicalEquations > physicsPtr
material physical equations
virtual MoFEMErrorCode evaluateRhs(EntData &data)=0
OpJacobian(const int tag, const bool eval_rhs, const bool eval_lhs, boost::shared_ptr< DataAtIntegrationPts > data_ptr, boost::shared_ptr< PhysicalEquations > physics_ptr)
boost::shared_ptr< DataAtIntegrationPts > dataAtPts
data at integration pts
int tAg
adol-c tape
MoFEMErrorCode doWork(int side, EntityType type, EntData &data)
boost::shared_ptr< NormalDisplacementBcVec > bcDispPtr
OpNormalDispBcLhsImpl_dP(std::string row_field, boost::shared_ptr< std::vector< BrokenBaseSideData > > broken_base_side_data, boost::shared_ptr< NormalDisplacementBcVec > &bc_disp_ptr, std::map< std::string, boost::shared_ptr< ScalingMethod > > smv, boost::shared_ptr< Range > ents_ptr=nullptr)
std::map< std::string, boost::shared_ptr< ScalingMethod > > scalingMethodsMap
MoFEMErrorCode iNtegrate(EntData &row_data, EntData &col_data)
MoFEMErrorCode iNtegrate(EntData &row_data, EntData &col_data)
std::map< std::string, boost::shared_ptr< ScalingMethod > > scalingMethodsMap
OpNormalDispBcLhsImpl_dU(std::string row_field, boost::shared_ptr< NormalDisplacementBcVec > &bc_disp_ptr, std::map< std::string, boost::shared_ptr< ScalingMethod > > smv, boost::shared_ptr< Range > ents_ptr=nullptr)
boost::shared_ptr< NormalDisplacementBcVec > bcDispPtr
boost::shared_ptr< MatrixDouble > hybridDispPtr
std::map< std::string, boost::shared_ptr< ScalingMethod > > scalingMethodsMap
MoFEMErrorCode iNtegrate(EntData &data)
boost::shared_ptr< NormalDisplacementBcVec > bcDispPtr
boost::shared_ptr< MatrixDouble > piolaStressPtr
OpNormalDispBcRhsImpl(std::string row_field, boost::shared_ptr< MatrixDouble > hybrid_disp_ptr, boost::shared_ptr< MatrixDouble > piola_stress_ptr, boost::shared_ptr< NormalDisplacementBcVec > &bc_disp_ptr, std::map< std::string, boost::shared_ptr< ScalingMethod > > smv, boost::shared_ptr< Range > ents_ptr=nullptr)
MoFEMErrorCode iNtegrate(EntData &row_data, EntData &col_data)
MoFEMErrorCode iNtegrate(EntData &row_data, EntData &col_data)
MoFEMErrorCode iNtegrate(EntData &data)
std::vector< EntityHandle > & mapGaussPts
OpPostProcDataStructure(moab::Interface &post_proc_mesh, std::vector< EntityHandle > &map_gauss_pts, boost::shared_ptr< DataAtIntegrationPts > data_ptr, int sense)
boost::shared_ptr< DataAtIntegrationPts > dataAtPts
MoFEMErrorCode doWork(int side, EntityType type, EntData &data)
VolumeElementForcesAndSourcesCoreOnSide::UserDataOperator OP
OpRotationBcImpl(boost::shared_ptr< std::vector< BrokenBaseSideData > > broken_base_side_data, boost::shared_ptr< BcRotVec > &bc_rot_ptr, std::map< std::string, boost::shared_ptr< ScalingMethod > > smv, boost::shared_ptr< Range > ents_ptr=nullptr)
MoFEMErrorCode iNtegrate(EntData &data)
std::map< std::string, boost::shared_ptr< ScalingMethod > > scalingMethodsMap
boost::shared_ptr< BcRotVec > bcRotPtr
Apply rotation boundary condition.
MoFEMErrorCode iNtegrate(EntData &data)
MoFEMErrorCode integrate(EntData &data)
OpSpatialConsistencyBubble(const std::string &field_name, boost::shared_ptr< DataAtIntegrationPts > data_ptr)
MoFEMErrorCode integrate(EntData &data)
OpSpatialConsistencyDivTerm(const std::string &field_name, boost::shared_ptr< DataAtIntegrationPts > data_ptr)
MoFEMErrorCode integrate(EntData &data)
OpSpatialConsistencyP(const std::string &field_name, boost::shared_ptr< DataAtIntegrationPts > data_ptr)
MoFEMErrorCode integrate(EntData &row_data, EntData &col_data)
OpSpatialConsistency_dBubble_dBubble(std::string row_field, std::string col_field, boost::shared_ptr< DataAtIntegrationPts > data_ptr)
MoFEMErrorCode integrateImpl(EntData &row_data, EntData &col_data)
OpSpatialConsistency_dBubble_dP(std::string row_field, std::string col_field, boost::shared_ptr< DataAtIntegrationPts > data_ptr)
MoFEMErrorCode integrateImpl(EntData &row_data, EntData &col_data)
MoFEMErrorCode integrate(EntData &row_data, EntData &col_data)
MoFEMErrorCode integrate(EntData &row_data, EntData &col_data)
OpSpatialConsistency_dBubble_domega(std::string row_field, std::string col_field, boost::shared_ptr< DataAtIntegrationPts > data_ptr, const bool assemble_off)
MoFEMErrorCode integrate(EntData &row_data, EntData &col_data)
MoFEMErrorCode integrateImpl(EntData &row_data, EntData &col_data)
OpSpatialConsistency_dP_dP(std::string row_field, std::string col_field, boost::shared_ptr< DataAtIntegrationPts > data_ptr)
MoFEMErrorCode integrate(EntData &row_data, EntData &col_data)
OpSpatialConsistency_dP_domega(std::string row_field, std::string col_field, boost::shared_ptr< DataAtIntegrationPts > data_ptr, const bool assemble_off)
OpSpatialEquilibrium_dw_dP(std::string row_field, std::string col_field, boost::shared_ptr< DataAtIntegrationPts > data_ptr, const bool assemble_off=false)
MoFEMErrorCode integrate(EntData &row_data, EntData &col_data)
MoFEMErrorCode integrate(EntData &row_data, EntData &col_data)
OpSpatialEquilibrium_dw_dw(std::string row_field, std::string col_field, boost::shared_ptr< DataAtIntegrationPts > data_ptr, const double alpha, const double rho)
MoFEMErrorCode integrate(EntData &data)
OpSpatialEquilibrium(const std::string &field_name, boost::shared_ptr< DataAtIntegrationPts > data_ptr, const double alpha, const double rho)
boost::shared_ptr< ExternalStrainVec > externalStrainVecPtr
boost::shared_ptr< DataAtIntegrationPts > dataAtPts
OpSpatialPhysicalExternalStrain(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, boost::shared_ptr< Range > ents_ptr=nullptr)
std::map< std::string, boost::shared_ptr< ScalingMethod > > scalingMethodsMap
MoFEMErrorCode integrate(EntData &row_data)
MoFEMErrorCode integrate(EntData &row_data)
OpSpatialPhysicalInternalStress(const std::string &field_name, boost::shared_ptr< DataAtIntegrationPts > data_ptr)
OpSpatialPhysical_du_dBubble(std::string row_field, std::string col_field, boost::shared_ptr< DataAtIntegrationPts > data_ptr, const bool assemble_off=false)
MoFEMErrorCode integrate(EntData &row_data, EntData &col_data)
MoFEMErrorCode integrate(EntData &row_data, EntData &col_data)
OpSpatialPhysical_du_dP(std::string row_field, std::string col_field, boost::shared_ptr< DataAtIntegrationPts > data_ptr, const bool assemble_off=false)
MoFEMErrorCode integrate(EntData &row_data, EntData &col_data)
OpSpatialPhysical_du_domega(std::string row_field, std::string col_field, boost::shared_ptr< DataAtIntegrationPts > data_ptr, const bool assemble_off)
OpSpatialPrj_dx_dw(std::string row_field, std::string col_field, boost::shared_ptr< DataAtIntegrationPts > data_ptr)
MoFEMErrorCode integrate(EntData &row_data, EntData &col_data)
MoFEMErrorCode integrate(EntData &row_data, EntData &col_data)
OpSpatialPrj_dx_dx(std::string row_field, std::string col_field, boost::shared_ptr< DataAtIntegrationPts > data_ptr)
OpSpatialPrj(std::string row_field, boost::shared_ptr< DataAtIntegrationPts > data_ptr)
MoFEMErrorCode integrate(EntData &row_data)
MoFEMErrorCode integrate(EntData &row_data, EntData &col_data)
OpSpatialRotation_domega_dBubble(std::string row_field, std::string col_field, boost::shared_ptr< DataAtIntegrationPts > data_ptr, const bool assemble_off)
OpSpatialRotation_domega_dP(std::string row_field, std::string col_field, boost::shared_ptr< DataAtIntegrationPts > data_ptr, const bool assemble_off)
MoFEMErrorCode integrate(EntData &row_data, EntData &col_data)
OpSpatialRotation_domega_domega(std::string row_field, std::string col_field, boost::shared_ptr< DataAtIntegrationPts > data_ptr, double alpha_omega)
MoFEMErrorCode integrate(EntData &row_data, EntData &col_data)
OpSpatialRotation_domega_du(std::string row_field, std::string col_field, boost::shared_ptr< DataAtIntegrationPts > data_ptr, double alpha_omega)
MoFEMErrorCode integrate(EntData &row_data, EntData &col_data)
OpSpatialRotation(const std::string &field_name, boost::shared_ptr< DataAtIntegrationPts > data_ptr, double alpha_omega)
MoFEMErrorCode integrate(EntData &data)