v0.16.3
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
13
14 OpJacobian(const bool eval_rhs, const bool eval_lhs,
15 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
16 boost::shared_ptr<PhysicalEquations> physics_ptr)
17 : UserDataOperator(NOSPACE, OPSPACE), evalRhs(eval_rhs),
18 evalLhs(eval_lhs), dataAtPts(data_ptr), physicsPtr(physics_ptr) {}
19
20 virtual MoFEMErrorCode evaluateRhs(EntData &data) = 0;
21 virtual MoFEMErrorCode evaluateLhs(EntData &data) = 0;
22
23 MoFEMErrorCode doWork(int side, EntityType type, EntData &data);
24
25protected:
26 OpJacobian(FieldSpace space, UserDataOperator::OpType op_type)
27 : UserDataOperator(space, op_type) {}
28
30
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), assembleSymmetry(false), dataAtPts(data_ptr) {}
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),
58 assembleSymmetry(assemble_symmetry), dataAtPts(data_ptr),
59 scaleOff(scale_off) {}
60
62 : T(space, T::OPSPACE), assembleSymmetry(false) {}
63
64 VectorDouble nF; ///< local right hand side vector
65 MatrixDouble K; ///< local tangent matrix
66 MatrixDouble transposeK;
67
69
70 virtual MoFEMErrorCode integrate(EntData &) {
72 SETERRQ(PETSC_COMM_SELF, MOFEM_NOT_IMPLEMENTED, "Not yet implemented");
74 }
75
76 virtual MoFEMErrorCode integrate(int, EntityType,
77 EntData &data) {
79 CHKERR integrate(data);
81 }
82
83 virtual MoFEMErrorCode assemble(EntData &data) {
85 double *vec_ptr = nF.data().data();
86 int nb_dofs = data.getIndices().size();
87 int *ind_ptr = data.getIndices().data().data();
88 CHKERR VecSetValues(this->getTSf(), nb_dofs, ind_ptr, vec_ptr, ADD_VALUES);
90 }
91
92 virtual MoFEMErrorCode assemble(int, EntityType,
93 EntData &data) {
95 CHKERR assemble(data);
97 }
98
99 virtual MoFEMErrorCode integrate(EntData &, EntData &) {
101 SETERRQ(PETSC_COMM_SELF, MOFEM_NOT_IMPLEMENTED, "Not yet implemented");
103 }
104
105 virtual MoFEMErrorCode assemble(int, int,
106 EntityType, EntityType,
107 EntData &row_data, EntData &col_data) {
109
110 if (assembleSymmetry) {
111 const auto row_nb_dofs = row_data.getIndices().size();
112 const auto col_nb_dofs = col_data.getIndices().size();
113 transposeK.resize(col_nb_dofs, row_nb_dofs, false);
114 noalias(transposeK) = trans(K);
115 transposeK *= scaleOff();
116 }
117
118 CHKERR MatSetValues<AssemblyTypeSelector<A>>(this->getTSB(), row_data,
119 col_data, K, ADD_VALUES);
120 if (assembleSymmetry) {
121 CHKERR MatSetValues<AssemblyTypeSelector<A>>(
122 this->getTSB(), col_data, row_data, transposeK, ADD_VALUES);
123 }
124
126 }
127
128 MoFEMErrorCode doWork(int side, EntityType type, EntData &data) {
130 if (data.getIndices().empty())
132 nF.resize(data.getIndices().size(), false);
133 nF.clear();
134 CHKERR integrate(side, type, data);
135 CHKERR assemble(side, type, data);
137 }
138
139 MoFEMErrorCode doWork(int row_side, int col_side, EntityType row_type,
140 EntityType col_type, EntData &row_data,
141 EntData &col_data) {
143 if (row_data.getIndices().empty())
145 if (col_data.getIndices().empty())
147 K.resize(row_data.getIndices().size(), col_data.getIndices().size(), false);
148 K.clear();
149 CHKERR integrate(row_data, col_data);
150 CHKERR assemble(row_side, col_side, row_type, col_type, row_data, col_data);
152 }
153};
154
155struct OpAssembleVolume : public OpAssembleBasic<VolUserDataOperator> {
157 using ScaleOff = typename OP::ScaleOff;
158
160
161 MoFEMErrorCode assemble(int row_side, int col_side, EntityType row_type,
162 EntityType col_type, EntData &row_data,
163 EntData &col_data) {
165 CHKERR OP::assemble(row_side, col_side, row_type, col_type, row_data,
166 col_data);
167 constexpr bool store_matrices = false;
168 if constexpr (store_matrices) {
170 m.resize(K.size1(), K.size2(), false);
171 noalias(m) = K;
172 if (assembleSymmetry) {
174 m.resize(K.size2(), K.size1(), false);
175 noalias(m) = transposeK;
176 }
177 }
179 };
180
181protected:
182 static inline std::map<std::pair<std::string, std::string>, MatrixDouble>
184};
185
186struct OpAssembleFace : public OpAssembleBasic<FaceUserDataOperator> {
187 using OpAssembleBasic<FaceUserDataOperator>::OpAssembleBasic;
188};
189
191 using OpAssembleVolume::OpAssembleVolume;
192 MoFEMErrorCode doWork(int, EntityType, EntData &) {
194 SETERRQ(PETSC_COMM_SELF, MOFEM_NOT_IMPLEMENTED,
195 "OpAssembleVolumePositiveDefine not implemented");
197 }
198
199 MoFEMErrorCode doWork(int row_side, int col_side, EntityType row_type,
200 EntityType col_type, EntData &row_data,
201 EntData &col_data) {
203 if (row_data.getIndices().empty())
205 if (col_data.getIndices().empty())
207 K.resize(row_data.getIndices().size(), col_data.getIndices().size(), false);
208 K.clear();
209 CHKERR integrate(row_data, col_data);
210
211 constexpr bool run_psd = true;
212
213 if (run_psd) {
214
215 auto higham_method_one_pass = [&](MatrixDouble &mat) {
216 int n = mat.size1();
217 const int lda = n;
218 const int size = (n + 2) * n;
219 int lwork = size;
220 double *work = new double[size];
221
222 VectorDouble eig(n, 0.0);
223 MatrixDouble eigen_vec = prod(trans(mat), mat);
224 if (lapack_dsyev('V', 'U', n, eigen_vec.data().data(), lda,
225 eig.data().data(), work, lwork) > 0)
227 "The algorithm failed to compute eigenvalues.");
228 delete[] work;
229
230 for (auto &e : eig) {
231 constexpr double eps = std::numeric_limits<double>::epsilon();
232 e = std::max(std::sqrt(std::abs(e)), eps);
233 }
234
235 auto diagonal_matrix =
236 ublas::diagonal_matrix<double, ublas::row_major,
237 VecAllocator<double>>(n, eig.data());
238 MatrixDouble symm_mat;
239 symm_mat = prod(trans(eigen_vec), diagonal_matrix);
240 symm_mat = prod(symm_mat, eigen_vec);
241
242 MatrixDouble hat_m = (mat + symm_mat) / 2.0;
243
244 return hat_m;
245 };
246
247 auto hat_k = higham_method_one_pass(K);
248 K.swap(hat_k);
249 }
250
251 CHKERR assemble(row_side, col_side, row_type, col_type, row_data, col_data);
253 }
254
255private:
256};
257
258/** @brief Calculate q = 3 K_ext epsilon_ext at integration points. */
261 VectorPtr external_pressure_ptr,
262 boost::shared_ptr<ExternalStrainVec> external_strain_vec_ptr,
263 std::map<std::string, boost::shared_ptr<ScalingMethod>> smv);
264
265 MoFEMErrorCode doWork(int side, EntityType type, EntData &data) override;
266
267private:
269 boost::shared_ptr<ExternalStrainVec> externalStrainVecPtr;
270 std::map<std::string, boost::shared_ptr<ScalingMethod>> scalingMethodsMap;
271};
272
274
276 boost::shared_ptr<DataAtIntegrationPts> data_ptr)
278 MoFEMErrorCode doWork(int side, EntityType type, EntData &data);
279
280private:
281 boost::shared_ptr<DataAtIntegrationPts>
282 dataAtPts; ///< data at integration pts
283};
284
287 boost::shared_ptr<DataAtIntegrationPts> data_ptr)
288 : SideEleOp(NOSPACE, SideEleOp::OPSPACE), dataAtPts(data_ptr) {
289 std::fill(&doEntities[MBVERTEX], &doEntities[MBMAXTYPE], false);
290 for (auto t = moab::CN::TypeDimensionMap[SPACE_DIM].first;
291 t <= moab::CN::TypeDimensionMap[SPACE_DIM].second; ++t)
292 doEntities[t] = true;
293 sYmm = false;
294 }
295 MoFEMErrorCode doWork(int side, EntityType type, EntData &data);
296
297private:
298 boost::shared_ptr<DataAtIntegrationPts>
299 dataAtPts; ///< data at integration pts
300};
301
302struct OpCalculateReactionForces : public FaceUserDataOperator {
303 OpCalculateReactionForces(boost::shared_ptr<DataAtIntegrationPts> data_ptr,
304 std::string block_name, Range block_entities,
305 std::array<double, 6> &reaction_vec)
306 : FaceUserDataOperator(NOSPACE, OPSPACE), dataAtPts(data_ptr),
307 blockEntities(block_entities), blockName(block_name),
308 reactionVec(reaction_vec) {}
309 MoFEMErrorCode doWork(int side, EntityType type, EntData &data);
310
311private:
312 boost::shared_ptr<DataAtIntegrationPts>
313 dataAtPts; ///< data at integration pts
315 std::string blockName;
316 std::array<double, 6> &reactionVec;
317};
318
321 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
322 const double alpha, const double rho)
323 : OpAssembleVolume(field_name, data_ptr, OPROW), alphaW(alpha),
324 alphaRho(rho) {}
325 MoFEMErrorCode integrate(EntData &data);
326
327private:
328 const double alphaW;
329 const double alphaRho;
330};
331
333 OpSpatialRotation(const std::string &field_name,
334 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
335 double alpha_r, double alpha_omega,
336 double alpha_viscous_r, double alpha_viscous_omega)
337 : OpAssembleVolume(field_name, data_ptr, OPROW), alphaR(alpha_r),
338 alphaOmega(alpha_omega), alphaViscousR(alpha_viscous_r),
339 alphaViscousOmega(alpha_viscous_omega) {
340 }
341 MoFEMErrorCode integrate(EntData &data);
342
343private:
344 double alphaR;
348};
349
352 boost::shared_ptr<DataAtIntegrationPts> data_ptr)
353 : OpAssembleVolume(field_name, data_ptr, OPROW) {}
354 MoFEMErrorCode integrate(EntData &data);
355
356private:
357};
358
361 boost::shared_ptr<DataAtIntegrationPts> data_ptr)
362 : OpAssembleVolume(field_name, data_ptr, OPROW) {}
363 MoFEMErrorCode integrate(EntData &data);
364
365private:
366};
367
370 boost::shared_ptr<DataAtIntegrationPts> data_ptr)
371 : OpAssembleVolume(field_name, data_ptr, OPROW) {}
372 MoFEMErrorCode integrate(EntData &data);
373};
374
375template <int INTERP_ORDER>
377 OpGetInternalStress(boost::shared_ptr<DataAtIntegrationPts> data_ptr,
378 std::string tag_name = "")
379 : UserDataOperator(H1, OPLAST), dataAtPts(data_ptr), tagName(tag_name) {
380 std::fill(&doEntities[MBVERTEX], &doEntities[MBMAXTYPE], false);
381 doEntities[MBVERTEX] = true;
382 }
383 MoFEMErrorCode doWork(int side, EntityType type, EntData &data);
384
385private:
386 boost::shared_ptr<DataAtIntegrationPts> dataAtPts;
387 std::string tagName;
388};
389
390template <bool VOIGT>
393 const std::string &field_name,
394 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
395 boost::shared_ptr<ScalingMethod> scaling_method_ptr)
396 : OpAssembleVolume(field_name, data_ptr, OPROW),
397 scalingMethodPtr(scaling_method_ptr) {}
398 MoFEMErrorCode integrate(EntData &row_data);
399
400protected:
401 boost::shared_ptr<ScalingMethod> scalingMethodPtr;
402};
403
404template <AssemblyType A, IntegrationType I> struct OpDispBcImpl;
405
406template <AssemblyType A>
407struct OpDispBcImpl<A, GAUSS>
408 : public FormsIntegrators<FaceUserDataOperator>::Assembly<A>::OpBrokenBase {
409
410 using OP = typename FormsIntegrators<FaceUserDataOperator>::Assembly<
412
414 boost::shared_ptr<std::vector<BrokenBaseSideData>> broken_base_side_data,
415 boost::shared_ptr<BcDispVec> &bc_disp_ptr,
416 std::map<std::string, boost::shared_ptr<ScalingMethod>> smv,
417 boost::shared_ptr<Range> ents_ptr = nullptr)
418 : OP(broken_base_side_data, ents_ptr), bcDispPtr(bc_disp_ptr),
419 scalingMethodsMap(smv) {}
420
421protected:
422 MoFEMErrorCode iNtegrate(EntData &data);
423 boost::shared_ptr<BcDispVec> bcDispPtr;
424 std::map<std::string, boost::shared_ptr<ScalingMethod>> scalingMethodsMap;
425};
426
427struct OpDispBc : public OpDispBcImpl<PETSC, GAUSS> {
429 using OP::OpDispBcImpl;
430
431protected:
432 MoFEMErrorCode iNtegrate(EntData &data);
433};
434
435template <AssemblyType A, IntegrationType I> struct OpRotationBcImpl;
436
437template <AssemblyType A>
438struct OpRotationBcImpl<A, GAUSS>
439 : public FormsIntegrators<FaceUserDataOperator>::Assembly<A>::OpBrokenBase {
440
441 using OP = typename FormsIntegrators<FaceUserDataOperator>::Assembly<
443
445 boost::shared_ptr<std::vector<BrokenBaseSideData>> broken_base_side_data,
446 boost::shared_ptr<BcRotVec> &bc_rot_ptr,
447 std::map<std::string, boost::shared_ptr<ScalingMethod>> smv,
448 boost::shared_ptr<Range> ents_ptr = nullptr)
449 : OP(broken_base_side_data, ents_ptr), bcRotPtr(bc_rot_ptr),
450 scalingMethodsMap(smv) {}
451
452protected:
453 MoFEMErrorCode iNtegrate(EntData &data);
454 boost::shared_ptr<BcRotVec> bcRotPtr;
455 std::map<std::string, boost::shared_ptr<ScalingMethod>> scalingMethodsMap;
456};
457
458/**
459 * @brief Apply rotation boundary condition
460 *
461 * The boundary condition is applied getting data from the SPATIAL_ROTATION_BC
462 * blockset.
463 *
464 * Centre of rotation is given by the first three attributes of the blockset.
465 * The fort parameter is angle of rotation
466 *
467 */
468struct OpRotationBc : public OpRotationBcImpl<PETSC, GAUSS> {
470 using OP::OpRotationBcImpl;
471
472protected:
473 MoFEMErrorCode iNtegrate(EntData &data);
474};
475
477 : public FormsIntegrators<FaceUserDataOperator>::Assembly<PETSC>::OpBase {
479 const std::string row_field, boost::shared_ptr<TractionBcVec> bc_data,
480 boost::shared_ptr<double> piola_scale_ptr,
481 std::map<std::string, boost::shared_ptr<ScalingMethod>> smv)
482 : FormsIntegrators<FaceUserDataOperator>::Assembly<PETSC>::OpBase(
483 row_field, row_field, FaceUserDataOperator::OPROW),
484 bcData(bc_data), piolaScalePtr(piola_scale_ptr), scalingMethodsMap(smv) {}
485
486 MoFEMErrorCode iNtegrate(EntData &data);
487
488protected:
489 boost::shared_ptr<TractionBcVec> bcData;
490 boost::shared_ptr<double> piolaScalePtr;
491 std::map<std::string, boost::shared_ptr<ScalingMethod>> scalingMethodsMap;
492};
493
495 : public FormsIntegrators<FaceUserDataOperator>::Assembly<PETSC>::OpBase {
497 const std::string row_field, boost::shared_ptr<PressureBcVec> bc_data,
498 boost::shared_ptr<double> piola_scale_ptr,
499 boost::shared_ptr<MatrixDouble> hybrid_grad_disp,
500 std::map<std::string, boost::shared_ptr<ScalingMethod>> smv)
501 : FormsIntegrators<FaceUserDataOperator>::Assembly<PETSC>::OpBase(
502 row_field, row_field, FaceUserDataOperator::OPROW),
503 bcData(bc_data), piolaScalePtr(piola_scale_ptr),
504 hybridGradDispPtr(hybrid_grad_disp), scalingMethodsMap(smv) {}
505
506 MoFEMErrorCode iNtegrate(EntData &data);
507
508protected:
509 boost::shared_ptr<PressureBcVec> bcData;
510 boost::shared_ptr<double> piolaScalePtr;
511 boost::shared_ptr<MatrixDouble> hybridGradDispPtr;
512 std::map<std::string, boost::shared_ptr<ScalingMethod>> scalingMethodsMap;
513};
514
515template <AssemblyType A, IntegrationType I>
517
518template <AssemblyType A>
520 : public FormsIntegrators<FaceUserDataOperator>::Assembly<A>::OpBase {
521
522 using OP =
523 typename FormsIntegrators<FaceUserDataOperator>::Assembly<A>::OpBase;
524
526 std::string row_field, boost::shared_ptr<PressureBcVec> bc_data,
527 boost::shared_ptr<MatrixDouble> hybrid_grad_disp,
528 std::map<std::string, boost::shared_ptr<ScalingMethod>> smv)
529 : OP(row_field, row_field, OP::OPROWCOL), bcData(bc_data),
530 hybridGradDispPtr(hybrid_grad_disp), scalingMethodsMap(smv) {}
531
532protected:
533 MoFEMErrorCode iNtegrate(EntData &row_data, EntData &col_data);
534 boost::shared_ptr<PressureBcVec> bcData;
535 boost::shared_ptr<MatrixDouble> hybridGradDispPtr;
536 std::map<std::string, boost::shared_ptr<ScalingMethod>> scalingMethodsMap;
537};
538
540 : public OpBrokenPressureBcLhsImpl_dU<A, GAUSS> {
543
544protected:
545 MoFEMErrorCode iNtegrate(EntData &row_data, EntData &col_data);
546};
547
549 : public FormsIntegrators<FaceUserDataOperator>::Assembly<PETSC>::OpBase {
551 const std::string row_field,
552 boost::shared_ptr<AnalyticalTractionBcVec> bc_data,
553 boost::shared_ptr<double> piola_scale_ptr,
554 std::map<std::string, boost::shared_ptr<ScalingMethod>> smv)
555 : FormsIntegrators<FaceUserDataOperator>::Assembly<PETSC>::OpBase(
556 row_field, row_field, FaceUserDataOperator::OPROW),
557 bcData(bc_data), piolaScalePtr(piola_scale_ptr),
558 scalingMethodsMap(smv) {}
559
560 MoFEMErrorCode iNtegrate(EntData &data);
561
562protected:
563 boost::shared_ptr<AnalyticalTractionBcVec> bcData;
564 boost::shared_ptr<double> piolaScalePtr;
565 std::map<std::string, boost::shared_ptr<ScalingMethod>> scalingMethodsMap;
566};
567
569 : public FormsIntegrators<FaceUserDataOperator>::Assembly<PETSC>::OpBase {
570
571 using OP =
572 typename FormsIntegrators<FaceUserDataOperator>::Assembly<PETSC>::OpBase;
573
575 std::string row_field, boost::shared_ptr<MatrixDouble> hybrid_disp_ptr,
576 boost::shared_ptr<std::vector<BrokenBaseSideData>> broken_side_data_ptr,
577 boost::shared_ptr<SpringBcVec> bc_spring_ptr)
578 : OP(row_field, row_field, OP::OPROW), hybridDispPtr(hybrid_disp_ptr),
579 brokenBaseSideDataPtr(broken_side_data_ptr), bcSpringPtr(bc_spring_ptr) {
580 }
581
582 MoFEMErrorCode iNtegrate(EntData &data);
583
584protected:
585 boost::shared_ptr<MatrixDouble> hybridDispPtr;
586 boost::shared_ptr<std::vector<BrokenBaseSideData>> brokenBaseSideDataPtr;
587 boost::shared_ptr<SpringBcVec> bcSpringPtr;
588};
589
591 : public FormsIntegrators<FaceUserDataOperator>::Assembly<A>::OpBase {
592
593 using OP = typename FormsIntegrators<FaceUserDataOperator>::Assembly<A>::OpBase;
594
595 OpSpringLhsBc_dU(std::string row_field,
596 boost::shared_ptr<SpringBcVec> bc_spring_ptr)
597 : OP(row_field, row_field, OP::OPROWCOL), bcSpringPtr(bc_spring_ptr) {}
598
599 MoFEMErrorCode iNtegrate(EntData &row_data, EntData &col_data);
600
601protected:
602 boost::shared_ptr<SpringBcVec> bcSpringPtr;
603};
604
606 : public FormsIntegrators<FaceUserDataOperator>::Assembly<A>::OpBrokenBase {
607
608 using OP =
609 typename FormsIntegrators<FaceUserDataOperator>::Assembly<A>::OpBrokenBase;
610
612 std::string row_field,
613 boost::shared_ptr<std::vector<BrokenBaseSideData>> broken_base_side_data,
614 boost::shared_ptr<SpringBcVec> bc_spring_ptr)
615 : OP(row_field, broken_base_side_data, false, false, nullptr),
616 bcSpringPtr(bc_spring_ptr) {}
617
618 MoFEMErrorCode iNtegrate(EntData &row_data, EntData &col_data);
619
620protected:
621 boost::shared_ptr<SpringBcVec> bcSpringPtr;
622};
623
624template <AssemblyType A, IntegrationType I> struct OpNormalDispBcRhsImpl;
625template <AssemblyType A, IntegrationType I> struct OpNormalDispBcLhsImpl_dU;
626template <AssemblyType A, IntegrationType I> struct OpNormalDispBcLhsImpl_dP;
627
628template <AssemblyType A>
630 : public FormsIntegrators<FaceUserDataOperator>::Assembly<PETSC>::OpBase {
631
632 using OP =
633 typename FormsIntegrators<FaceUserDataOperator>::Assembly<PETSC>::OpBase;
634
636 std::string row_field, boost::shared_ptr<MatrixDouble> hybrid_disp_ptr,
637 boost::shared_ptr<std::vector<BrokenBaseSideData>> broken_side_data_ptr,
638 // boost::shared_ptr<MatrixDouble> piola_stress_ptr,
639 boost::shared_ptr<NormalDisplacementBcVec> &bc_disp_ptr,
640 std::map<std::string, boost::shared_ptr<ScalingMethod>> smv,
641 boost::shared_ptr<Range> ents_ptr = nullptr)
642 : FormsIntegrators<FaceUserDataOperator>::Assembly<PETSC>::OpBase(
643 row_field, row_field, OP::OPROW),
644 hybridDispPtr(hybrid_disp_ptr),
645 brokenBaseSideDataPtr(
646 broken_side_data_ptr), /*piolaStressPtr(piola_stress_ptr),*/
647 bcDispPtr(bc_disp_ptr), scalingMethodsMap(smv) {}
648
649protected:
650 MoFEMErrorCode iNtegrate(EntData &data);
651 boost::shared_ptr<MatrixDouble> hybridDispPtr;
652 boost::shared_ptr<std::vector<BrokenBaseSideData>> brokenBaseSideDataPtr;
653 // boost::shared_ptr<MatrixDouble> piolaStressPtr;
654 boost::shared_ptr<NormalDisplacementBcVec> bcDispPtr;
655 std::map<std::string, boost::shared_ptr<ScalingMethod>> scalingMethodsMap;
656};
657
658template <AssemblyType A>
660 : public FormsIntegrators<FaceUserDataOperator>::Assembly<A>::OpBase {
661
662 using OP =
663 typename FormsIntegrators<FaceUserDataOperator>::Assembly<A>::OpBase;
664
666 std::string row_field,
667 boost::shared_ptr<NormalDisplacementBcVec> &bc_disp_ptr,
668 std::map<std::string, boost::shared_ptr<ScalingMethod>> smv,
669 boost::shared_ptr<Range> ents_ptr = nullptr)
670 : OP(row_field, row_field, OP::OPROWCOL), bcDispPtr(bc_disp_ptr),
671 scalingMethodsMap(smv) {}
672
673protected:
674 MoFEMErrorCode iNtegrate(EntData &row_data, EntData &col_data);
675 boost::shared_ptr<NormalDisplacementBcVec> bcDispPtr;
676 std::map<std::string, boost::shared_ptr<ScalingMethod>> scalingMethodsMap;
677};
678
679template <AssemblyType A>
681 : public FormsIntegrators<FaceUserDataOperator>::Assembly<A>::OpBrokenBase {
682
683 using OP = typename FormsIntegrators<FaceUserDataOperator>::Assembly<
685
687 std::string row_field,
688 boost::shared_ptr<std::vector<BrokenBaseSideData>> broken_base_side_data,
689 boost::shared_ptr<NormalDisplacementBcVec> &bc_disp_ptr,
690 std::map<std::string, boost::shared_ptr<ScalingMethod>> smv,
691 boost::shared_ptr<Range> ents_ptr = nullptr)
692 : OP(row_field, broken_base_side_data, false, false, ents_ptr),
693 bcDispPtr(bc_disp_ptr), scalingMethodsMap(smv) {}
694
695protected:
696 MoFEMErrorCode iNtegrate(EntData &row_data, EntData &col_data);
697 boost::shared_ptr<NormalDisplacementBcVec> bcDispPtr;
698 std::map<std::string, boost::shared_ptr<ScalingMethod>> scalingMethodsMap;
699};
700
701struct OpNormalDispRhsBc : public OpNormalDispBcRhsImpl<PETSC, GAUSS> {
703 using OP::OpNormalDispBcRhsImpl;
704
705protected:
706 MoFEMErrorCode iNtegrate(EntData &data);
707};
708
712
713protected:
714 MoFEMErrorCode iNtegrate(EntData &row_data, EntData &col_data);
715};
716
720
721protected:
722 MoFEMErrorCode iNtegrate(EntData &row_data, EntData &col_data);
723};
724
725template <AssemblyType A, IntegrationType I> struct OpAnalyticalDispBcImpl;
726
727template <AssemblyType A>
729 : public FormsIntegrators<FaceUserDataOperator>::Assembly<A>::OpBrokenBase {
730
731 using OP = typename FormsIntegrators<FaceUserDataOperator>::Assembly<
733
735 boost::shared_ptr<std::vector<BrokenBaseSideData>> broken_base_side_data,
736 boost::shared_ptr<AnalyticalDisplacementBcVec> &bc_disp_ptr,
737 std::map<std::string, boost::shared_ptr<ScalingMethod>> smv,
738 boost::shared_ptr<Range> ents_ptr = nullptr)
739 : OP(broken_base_side_data, ents_ptr), bcDispPtr(bc_disp_ptr),
740 scalingMethodsMap(smv) {}
741
742protected:
743 MoFEMErrorCode iNtegrate(EntData &data);
744 boost::shared_ptr<AnalyticalDisplacementBcVec> bcDispPtr;
745 std::map<std::string, boost::shared_ptr<ScalingMethod>> scalingMethodsMap;
746};
747
748struct OpAnalyticalDispBc : public OpAnalyticalDispBcImpl<PETSC, GAUSS> {
750 using OP::OpAnalyticalDispBcImpl;
751
752protected:
753 MoFEMErrorCode iNtegrate(EntData &data);
754};
755
757 OpSpatialEquilibrium_dw_dP(std::string row_field, std::string col_field,
758 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
759 const bool assemble_off = false)
760 : OpAssembleVolume(row_field, col_field, data_ptr, OPROWCOL,
761 assemble_off) {
762 sYmm = false;
763 }
764 MoFEMErrorCode integrate(EntData &row_data, EntData &col_data);
765};
766
768 const double alphaW;
769 const double alphaRho;
770 OpSpatialEquilibrium_dw_dw(std::string row_field, std::string col_field,
771 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
772 const double alpha, const double rho)
773 : OpAssembleVolume(row_field, col_field, data_ptr, OPROWCOL, false),
774 alphaW(alpha), alphaRho(rho) {
775 sYmm = true;
776 }
777 MoFEMErrorCode integrate(EntData &row_data, EntData &col_data);
778};
779
781 OpSpatialPhysical_du_dP(std::string row_field, std::string col_field,
782 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
783 const bool assemble_off = false)
784 : OpAssembleVolume(row_field, col_field, data_ptr, OPROWCOL,
785 assemble_off) {
786 sYmm = false;
787 }
788
789 MoFEMErrorCode integrate(EntData &row_data, EntData &col_data);
790};
791
793 OpSpatialPhysical_du_dBubble(std::string row_field, std::string col_field,
794 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
795 const bool assemble_off = false)
796 : OpAssembleVolume(row_field, col_field, data_ptr, OPROWCOL,
797 assemble_off) {
798 sYmm = false;
799 }
800
801 MoFEMErrorCode integrate(EntData &row_data, EntData &col_data);
802};
803
805 using OpAssembleVolume::OpAssembleVolume;
806 OpSpatialPhysical_du_domega(std::string row_field, std::string col_field,
807 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
808 const bool assemble_off)
809 : OpAssembleVolume(row_field, col_field, data_ptr, OPROWCOL,
810 assemble_off) {
811 sYmm = false;
812 }
813 MoFEMErrorCode integrate(EntData &row_data, EntData &col_data);
814};
815
817 OpSpatialRotation_domega_du(std::string row_field, std::string col_field,
818 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
819 [[maybe_unused]] double alpha_omega)
820 : OpAssembleVolume(row_field, col_field, data_ptr, OPROWCOL, false) {
821 sYmm = false;
822 }
823 MoFEMErrorCode integrate(EntData &row_data, EntData &col_data);
824
825private:
826};
827
829 OpSpatialRotation_domega_dP(std::string row_field, std::string col_field,
830 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
831 const bool assemble_off)
832 : OpAssembleVolume(row_field, col_field, data_ptr, OPROWCOL,
833 assemble_off) {
834 sYmm = false;
835 }
836 MoFEMErrorCode integrate(EntData &row_data, EntData &col_data);
837};
838
841 std::string row_field, std::string col_field,
842 boost::shared_ptr<DataAtIntegrationPts> data_ptr, const bool assemble_off)
843 : OpAssembleVolume(row_field, col_field, data_ptr, OPROWCOL,
844 assemble_off) {
845 sYmm = false;
846 }
847 MoFEMErrorCode integrate(EntData &row_data, EntData &col_data);
848};
849
852 std::string row_field, std::string col_field,
853 boost::shared_ptr<DataAtIntegrationPts> data_ptr, double alpha_r,
854 double alpha_omega, double alpha_viscous_r,
855 double alpha_viscous_omega)
856 : OpAssembleVolume(row_field, col_field, data_ptr, OPROWCOL, false),
857 alphaR(alpha_r), alphaOmega(alpha_omega),
858 alphaViscousR(alpha_viscous_r),
859 alphaViscousOmega(alpha_viscous_omega) {
860 sYmm = false;
861 }
862 MoFEMErrorCode integrate(EntData &row_data, EntData &col_data);
863
864private:
865 double alphaR;
869};
870
872 OpSpatialConsistency_dP_dP(std::string row_field, std::string col_field,
873 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
874 const bool has_nonhomogeneous_mat_block)
875 : OpAssembleVolume(row_field, col_field, data_ptr, OPROWCOL, false),
876 hasNonhomogeneousMatBlock(has_nonhomogeneous_mat_block) {
877 sYmm = false;
878 }
879 MoFEMErrorCode integrate(EntData &row_data, EntData &col_data);
880
881private:
882 template <int S>
883 MoFEMErrorCode integrateImpl(EntData &row_data, EntData &col_data);
885};
886
889 std::string row_field, std::string col_field,
890 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
891 const bool has_nonhomogeneous_mat_block)
892 : OpAssembleVolume(row_field, col_field, data_ptr, OPROWCOL, false),
893 hasNonhomogeneousMatBlock(has_nonhomogeneous_mat_block) {
894 sYmm = false;
895 }
896 MoFEMErrorCode integrate(EntData &row_data, EntData &col_data);
897
898private:
899 template <int S>
900 MoFEMErrorCode integrateImpl(EntData &row_data, EntData &col_data);
902};
903
906 std::string row_field, std::string col_field,
907 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
908 const bool has_nonhomogeneous_mat_block)
909 : OpAssembleVolume(row_field, col_field, data_ptr, OPROWCOL, true),
910 hasNonhomogeneousMatBlock(has_nonhomogeneous_mat_block) {
911 sYmm = false;
912 }
913 MoFEMErrorCode integrate(EntData &row_data, EntData &col_data);
914
915private:
916 template <int S>
917 MoFEMErrorCode integrateImpl(EntData &row_data, EntData &col_data);
919};
920
922 FormsIntegrators<VolUserDataOperator>::Assembly<A>::BiLinearForm<
923 GAUSS>::OpMass<3, 9>;
924
926 FormsIntegrators<VolUserDataOperator>::Assembly<A>::BiLinearForm<
927 GAUSS>::OpMass<9, 9>;
928
930 OpStressGram_dBubble_dP(std::string row_field, std::string col_field,
931 boost::shared_ptr<DataAtIntegrationPts> data_ptr)
932 : OpAssembleVolume(row_field, col_field, data_ptr, OPROWCOL, true) {
933 sYmm = false;
934 }
935 MoFEMErrorCode integrate(EntData &row_data, EntData &col_data);
936};
937
940 std::string row_field, std::string col_field,
941 boost::shared_ptr<DataAtIntegrationPts> data_ptr, const bool assemble_off)
942 : OpAssembleVolume(row_field, col_field, data_ptr, OPROWCOL,
943 assemble_off) {
944 sYmm = false;
945 }
946 MoFEMErrorCode integrate(EntData &row_data, EntData &col_data);
947
948private:
949};
950
953 std::string row_field, std::string col_field,
954 boost::shared_ptr<DataAtIntegrationPts> data_ptr, const bool assemble_off)
955 : OpAssembleVolume(row_field, col_field, data_ptr, OPROWCOL,
956 assemble_off) {
957 sYmm = false;
958 }
959 MoFEMErrorCode integrate(EntData &row_data, EntData &col_data);
960
961private:
962};
963
965 : public VolumeElementForcesAndSourcesCoreOnSide::UserDataOperator {
966
967 using OP = VolumeElementForcesAndSourcesCoreOnSide::UserDataOperator;
968
969 moab::Interface &postProcMesh;
970 std::vector<EntityHandle> &mapGaussPts;
971 boost::shared_ptr<DataAtIntegrationPts> dataAtPts;
972
973 OpPostProcDataStructure(moab::Interface &post_proc_mesh,
974 std::vector<EntityHandle> &map_gauss_pts,
975 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
976 int sense)
977 : OP(NOSPACE, UserDataOperator::OPSPACE), postProcMesh(post_proc_mesh),
978 mapGaussPts(map_gauss_pts), dataAtPts(data_ptr), tagSense(sense) {}
979
980 MoFEMErrorCode doWork(int side, EntityType type, EntData &data);
981
982private:
984};
985
987 : public VolumeElementForcesAndSourcesCoreOnSide::UserDataOperator {
988
989 // @note This is not on the side, since, integrate energy in the volume
990 using OP = VolumeElementForcesAndSourcesCoreOnSide::UserDataOperator;
991
992 OpFaceSideMaterialForce(boost::shared_ptr<DataAtIntegrationPts> data_ptr)
993 : OP(NOSPACE, OPSPACE), dataAtPts(data_ptr) {}
994
995 MoFEMErrorCode doWork(int side, EntityType type, EntData &data);
996
997private:
998 boost::shared_ptr<DataAtIntegrationPts>
999 dataAtPts; ///< data at integration pts
1000};
1001
1003 : public FaceElementForcesAndSourcesCore::UserDataOperator {
1004
1005 // @note This is not on the side, since, integrate energy in the volume
1006 using OP = FaceElementForcesAndSourcesCore::UserDataOperator;
1007
1008 OpFaceMaterialForce(boost::shared_ptr<DataAtIntegrationPts> data_ptr)
1009 : OP(NOSPACE, OPSPACE), dataAtPts(data_ptr) {}
1010
1011 MoFEMErrorCode doWork(int side, EntityType type, EntData &data);
1012
1013private:
1014 boost::shared_ptr<DataAtIntegrationPts>
1015 dataAtPts; ///< data at integration pts
1016};
1017
1018template <int FE_DIM, int PROBLEM_DIM, int SPACE_DIM> struct AddHOOps;
1019
1020template <> struct AddHOOps<2, 3, 3> {
1021 AddHOOps() = delete;
1022 static MoFEMErrorCode
1023 add(boost::ptr_deque<ForcesAndSourcesCore::UserDataOperator> &pipeline,
1024 std::vector<FieldSpace> space, std::string geom_field_name,
1025 boost::shared_ptr<Range> crack_front_edges_ptr);
1026};
1027
1028template <> struct AddHOOps<2, 2, 3> {
1029 AddHOOps() = delete;
1030 static MoFEMErrorCode
1031 add(boost::ptr_deque<ForcesAndSourcesCore::UserDataOperator> &pipeline,
1032 std::vector<FieldSpace> space, std::string geom_field_name,
1033 boost::shared_ptr<Range> crack_front_edges_ptr);
1034};
1035
1036template <> struct AddHOOps<3, 3, 3> {
1037 AddHOOps() = delete;
1038 static MoFEMErrorCode
1039 add(boost::ptr_deque<ForcesAndSourcesCore::UserDataOperator> &pipeline,
1040 std::vector<FieldSpace> space, std::string geom_field_name,
1041 boost::shared_ptr<Range> crack_front_edges_ptr,
1042 boost::shared_ptr<MatrixDouble> jac = nullptr,
1043 boost::shared_ptr<VectorDouble> det = nullptr,
1044 boost::shared_ptr<MatrixDouble> inv_jac = nullptr);
1045};
1046
1048 FormsIntegrators<FaceElementForcesAndSourcesCore::UserDataOperator>::
1049 Assembly<A>::LinearForm<GAUSS>::OpBaseTimesVector<1, SPACE_DIM,
1050 SPACE_DIM>;
1051
1052template <typename OP>
1053struct OpStabBrokenBaseImpl : public OpBrokenBaseImpl<OP> {
1054
1055 using BASE = OpBrokenBaseImpl<OP>;
1056 using BASE::BASE;
1057
1058 MoFEMErrorCode doWork(int row_side, EntityType row_type,
1059 EntitiesFieldData::EntData &row_data) {
1061
1062 if (OP::entsPtr) {
1063 if (OP::entsPtr->find(this->getFEEntityHandle()) == OP::entsPtr->end())
1065 }
1066
1067#ifndef NDEBUG
1068 if (!BASE::brokenBaseSideData) {
1069 SETERRQ(PETSC_COMM_SELF, MOFEM_IMPOSSIBLE_CASE, "space not set");
1070 }
1071#endif // NDEBUG
1072
1073 auto do_work_rhs = [this](int, EntityType,
1074 EntitiesFieldData::EntData &row_data) {
1076 // get number of dofs on row
1077 OP::nbRows = row_data.getIndices().size();
1078 if (!OP::nbRows)
1080 // get number of integration points
1081 OP::nbIntegrationPts = OP::getGaussPts().size2();
1082 // get row base functions
1083 OP::nbRowBaseFunctions = OP::getNbOfBaseFunctions(row_data);
1084 // resize and clear the right hand side vector
1085 OP::locF.resize(OP::nbRows, false);
1086 OP::locF.clear();
1087 // integrate local vector
1088 CHKERR this->iNtegrate(row_data);
1089 // assemble local vector
1090 CHKERR this->aSsemble(row_data);
1092 };
1093
1094 auto do_work_lhs = [this](int row_side, int col_side, EntityType row_type,
1095 EntityType col_type,
1096 EntitiesFieldData::EntData &row_data,
1097 EntitiesFieldData::EntData &col_data) {
1099
1100 auto check_if_assemble_transpose = [&] {
1101 if (this->sYmm) {
1102 if (OP::rowSide != OP::colSide || OP::rowType != OP::colType)
1103 return true;
1104 else
1105 return false;
1106 } else if (OP::assembleTranspose) {
1107 return true;
1108 }
1109 return false;
1110 };
1111
1112 OP::rowSide = row_side;
1113 OP::rowType = row_type;
1114 OP::colSide = col_side;
1115 OP::colType = col_type;
1116 OP::nbCols = col_data.getIndices().size();
1117 OP::locMat.resize(OP::nbRows, OP::nbCols, false);
1118 OP::locMat.clear();
1119 CHKERR this->iNtegrate(row_data, col_data);
1120 CHKERR this->aSsemble(row_data, col_data, check_if_assemble_transpose());
1122 };
1123
1124 switch (OP::opType) {
1125 case OP::OPROW:
1126
1127 OP::nbRows = row_data.getIndices().size();
1128 if (!OP::nbRows)
1130 OP::nbIntegrationPts = OP::getGaussPts().size2();
1131 OP::nbRowBaseFunctions = OP::getNbOfBaseFunctions(row_data);
1132
1133 if (!OP::nbRows)
1135
1136 for (auto &bd : *BASE::brokenBaseSideData) {
1137
1138#ifndef NDEBUG
1139 if (!bd.getData().getNSharedPtr(bd.getData().getBase())) {
1140 SETERRQ(PETSC_COMM_SELF, MOFEM_DATA_INCONSISTENCY,
1141 "base functions not set");
1142 }
1143#endif
1144
1145 CHKERR do_work_lhs(
1146
1147 // side
1148 row_side, bd.getSide(),
1149
1150 // type
1151 row_type, bd.getType(),
1152
1153 // row_data
1154 row_data, bd.getData()
1155
1156 );
1157 }
1158
1159 break;
1160 case OP::OPSPACE:
1161 for (auto &bd : *BASE::brokenBaseSideData) {
1162 fluxMatPtr = boost::shared_ptr<MatrixDouble>(BASE::brokenBaseSideData,
1163 &bd.getFlux());
1164 CHKERR do_work_rhs(bd.getSide(), bd.getType(), bd.getData());
1165 }
1166 break;
1167 default:
1170 (std::string("wrong op type ") +
1171 OpBaseDerivativesBase::OpTypeNames[static_cast<unsigned char>(
1172 OP::opType)])
1173 .c_str());
1174 }
1175
1177 }
1178
1179protected:
1180 boost::weak_ptr<MatrixDouble> fluxMatPtr;
1181};
1182
1184 : public OpStabBrokenBaseImpl<OpBaseTimesVectorFace> {
1185
1188 boost::shared_ptr<std::vector<BrokenBaseSideData>> broken_base_side_data,
1189 boost::shared_ptr<MatrixDouble> vec,
1190 ScalarFun beta_coeff = [](double, double, double) constexpr { return 1; },
1191 boost::shared_ptr<Range> ents_ptr = nullptr);
1192};
1193
1195 : public OpStabBrokenBaseImpl<OpBaseTimesVectorFace> {
1196
1199 boost::shared_ptr<std::vector<BrokenBaseSideData>> broken_base_side_data,
1200 ScalarFun beta_coeff = [](double, double, double) constexpr { return 1; },
1201 boost::shared_ptr<Range> ents_ptr = nullptr);
1202
1203protected:
1204 MoFEMErrorCode doWork(int row_side, EntityType row_type,
1205 EntitiesFieldData::EntData &row_data);
1206};
1207
1209
1212 const std::string row_field,
1213 boost::shared_ptr<std::vector<BrokenBaseSideData>> broken_base_side_data,
1214 ScalarFun beta_coeff, boost::shared_ptr<Range> ents_ptr = nullptr);
1215
1216protected:
1217 MoFEMErrorCode iNtegrate(EntitiesFieldData::EntData &data);
1218 boost::shared_ptr<std::vector<BrokenBaseSideData>> brokenBaseSideDataPtr;
1219};
1220
1222 FormsIntegrators<FaceElementForcesAndSourcesCore::UserDataOperator>::
1223 Assembly<A>::BiLinearForm<GAUSS>::OpMass<1, SPACE_DIM>;
1224
1225struct OpHyrbridBaseBrokenBase : public OpStabBrokenBaseImpl<OpMassVectorFace> {
1226
1229 std::string row_field,
1230 boost::shared_ptr<std::vector<BrokenBaseSideData>> broken_base_side_data,
1231 ScalarFun beta, const bool assmb_transpose, const bool only_transpose,
1232 boost::shared_ptr<Range> ents_ptr = nullptr);
1233};
1234
1235struct OpBrokenBaseBrokenBase : public OpStabBrokenBaseImpl<OpMassVectorFace> {
1236
1239 boost::shared_ptr<std::vector<BrokenBaseSideData>> broken_base_side_data,
1240 ScalarFun beta, boost::shared_ptr<Range> ents_ptr = nullptr);
1241
1242 MoFEMErrorCode doWork(int row_side, EntityType row_type,
1243 EntitiesFieldData::EntData &row_data);
1244};
1245
1247
1249
1251 boost::shared_ptr<std::vector<BrokenBaseSideData>> broken_base_side_data,
1252 boost::shared_ptr<BcDispVec> &bc_disp_ptr,
1253 std::map<std::string, boost::shared_ptr<ScalingMethod>> smv,
1254 ScalarFun tau_coeff, boost::shared_ptr<Range> ents_ptr = nullptr)
1255 : OpBrokenBaseTimesBrokenDisp(broken_base_side_data, tau_coeff, ents_ptr),
1256 bcDispPtr(bc_disp_ptr), scalingMethodsMap(smv) {}
1257
1258protected:
1259 MoFEMErrorCode iNtegrate(EntData &data);
1260 boost::shared_ptr<BcDispVec> bcDispPtr;
1261 std::map<std::string, boost::shared_ptr<ScalingMethod>> scalingMethodsMap;
1262};
1263
1265
1267
1269 boost::shared_ptr<std::vector<BrokenBaseSideData>> broken_base_side_data,
1270 boost::shared_ptr<BcDispVec> &bc_disp_ptr, ScalarFun tau_coeff,
1271 boost::shared_ptr<Range> ents_ptr = nullptr)
1272 : OP(broken_base_side_data, tau_coeff, ents_ptr), bcDispPtr(bc_disp_ptr) {
1273 }
1274
1275protected:
1276 MoFEMErrorCode iNtegrate(EntData &row_data, EntData &col_data);
1277 boost::shared_ptr<BcDispVec> bcDispPtr;
1278};
1279
1282
1284
1286 boost::shared_ptr<std::vector<BrokenBaseSideData>> broken_base_side_data,
1287 boost::shared_ptr<AnalyticalDisplacementBcVec> &bc_disp_ptr,
1288 std::map<std::string, boost::shared_ptr<ScalingMethod>> smv,
1289 ScalarFun tau_coeff, boost::shared_ptr<Range> ents_ptr = nullptr)
1290 : OpBrokenBaseTimesBrokenDisp(broken_base_side_data, tau_coeff, ents_ptr),
1291 bcDispPtr(bc_disp_ptr), scalingMethodsMap(smv) {}
1292
1293protected:
1294 MoFEMErrorCode iNtegrate(EntData &data);
1295 boost::shared_ptr<AnalyticalDisplacementBcVec> bcDispPtr;
1296 std::map<std::string, boost::shared_ptr<ScalingMethod>> scalingMethodsMap;
1297};
1298
1300
1302
1304 boost::shared_ptr<std::vector<BrokenBaseSideData>> broken_base_side_data,
1305 boost::shared_ptr<AnalyticalDisplacementBcVec> &bc_disp_ptr,
1306 ScalarFun tau_coeff, boost::shared_ptr<Range> ents_ptr = nullptr)
1307 : OP(broken_base_side_data, tau_coeff, ents_ptr), bcDispPtr(bc_disp_ptr) {
1308 }
1309
1310protected:
1311 MoFEMErrorCode iNtegrate(EntData &row_data, EntData &col_data);
1312 boost::shared_ptr<AnalyticalDisplacementBcVec> bcDispPtr;
1313};
1314
1316
1318
1320 boost::shared_ptr<std::vector<BrokenBaseSideData>> broken_base_side_data,
1321 boost::shared_ptr<BcRotVec> &bc_ptr,
1322 std::map<std::string, boost::shared_ptr<ScalingMethod>> smv,
1323 ScalarFun tau_coeff, boost::shared_ptr<Range> ents_ptr = nullptr)
1324 : OpBrokenBaseTimesBrokenDisp(broken_base_side_data, tau_coeff, ents_ptr),
1325 bcRotPtr(bc_ptr), scalingMethodsMap(smv) {}
1326
1327protected:
1328 MoFEMErrorCode iNtegrate(EntData &data);
1329 boost::shared_ptr<BcRotVec> bcRotPtr;
1330 std::map<std::string, boost::shared_ptr<ScalingMethod>> scalingMethodsMap;
1331};
1332
1334
1336
1338 boost::shared_ptr<std::vector<BrokenBaseSideData>> broken_base_side_data,
1339 boost::shared_ptr<BcRotVec> &bc_ptr, ScalarFun tau_coeff,
1340 boost::shared_ptr<Range> ents_ptr = nullptr)
1341 : OP(broken_base_side_data, tau_coeff, ents_ptr), bcRotPtr(bc_ptr) {
1342 }
1343
1344protected:
1345 MoFEMErrorCode iNtegrate(EntData &row_data, EntData &col_data);
1346 boost::shared_ptr<BcRotVec> bcRotPtr;
1347};
FormsIntegrators< FaceElementForcesAndSourcesCore::UserDataOperator >::Assembly< A >::BiLinearForm< GAUSS >::OpMass< 1, SPACE_DIM > OpMassVectorFace
FormsIntegrators< VolUserDataOperator >::Assembly< A >::BiLinearForm< GAUSS >::OpMass< 9, 9 > OpStressGram_dBubble_dBubble
FormsIntegrators< FaceElementForcesAndSourcesCore::UserDataOperator >::Assembly< A >::LinearForm< GAUSS >::OpBaseTimesVector< 1, SPACE_DIM, SPACE_DIM > OpBaseTimesVectorFace
FormsIntegrators< VolUserDataOperator >::Assembly< A >::BiLinearForm< GAUSS >::OpMass< 3, 9 > OpStressGram_dP_dP
ForcesAndSourcesCore::UserDataOperator UserDataOperator
std::string type
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()
FieldSpace
approximation spaces
Definition definitions.h:82
@ 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 ...
#define CHK_MOAB_THROW(err, msg)
Check error code of MoAB function and throw MoFEM exception.
@ MOFEM_IMPOSSIBLE_CASE
Definition definitions.h:35
@ MOFEM_DATA_INCONSISTENCY
Definition definitions.h:31
@ 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.
const double n
refractive index of diffusive medium
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)
constexpr AssemblyType A
constexpr double t
plate stiffness
Definition plate.cpp:58
constexpr auto field_name
OpBaseImpl< PETSC, EdgeEleOp > OpBase
Definition radiation.cpp:29
FormsIntegrators< DomainEleOp >::Assembly< PETSC >::BiLinearForm< GAUSS >::OpMass< 1, SPACE_DIM > OpMass
[Only used with Hooke equation (linear material model)]
Definition seepage.cpp:56
FTensor::Index< 'm', 3 > m
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, boost::shared_ptr< MatrixDouble > jac=nullptr, boost::shared_ptr< VectorDouble > det=nullptr, boost::shared_ptr< MatrixDouble > inv_jac=nullptr)
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 degrees of freedom 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
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)
MoFEMErrorCode doWork(int side, EntityType type, EntData &data)
virtual MoFEMErrorCode integrate(int, EntityType, EntData &data)
virtual MoFEMErrorCode assemble(EntData &data)
virtual MoFEMErrorCode integrate(EntData &, EntData &)
OpAssembleBasic(const std::string &field_name, boost::shared_ptr< DataAtIntegrationPts > data_ptr, const char type)
virtual MoFEMErrorCode integrate(EntData &)
virtual MoFEMErrorCode assemble(int, int, EntityType, EntityType, EntData &row_data, EntData &col_data)
boost::function< double()> ScaleOff
boost::shared_ptr< DataAtIntegrationPts > dataAtPts
data at integration pts
OpAssembleBasic(const FieldSpace space)
virtual MoFEMErrorCode assemble(int, EntityType, 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, EntityType, EntData &)
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.
typename OP::ScaleOff ScaleOff
static std::map< std::pair< std::string, std::string >, MatrixDouble > mapMatrix
MoFEMErrorCode assemble(int row_side, int col_side, EntityType row_type, EntityType col_type, EntData &row_data, EntData &col_data)
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
MoFEMErrorCode doWork(int row_side, EntityType row_type, EntitiesFieldData::EntData &row_data)
MoFEMErrorCode doWork(int row_side, EntityType row_type, EntitiesFieldData::EntData &row_data)
MoFEMErrorCode iNtegrate(EntData &row_data, EntData &col_data)
boost::shared_ptr< MatrixDouble > hybridGradDispPtr
OpBrokenPressureBcLhsImpl_dU(std::string row_field, boost::shared_ptr< PressureBcVec > bc_data, boost::shared_ptr< MatrixDouble > hybrid_grad_disp, std::map< std::string, boost::shared_ptr< ScalingMethod > > smv)
std::map< std::string, boost::shared_ptr< ScalingMethod > > scalingMethodsMap
boost::shared_ptr< PressureBcVec > bcData
MoFEMErrorCode iNtegrate(EntData &row_data, EntData &col_data)
boost::shared_ptr< MatrixDouble > hybridGradDispPtr
boost::shared_ptr< double > piolaScalePtr
MoFEMErrorCode iNtegrate(EntData &data)
OpBrokenPressureBc(const std::string row_field, boost::shared_ptr< PressureBcVec > bc_data, boost::shared_ptr< double > piola_scale_ptr, boost::shared_ptr< MatrixDouble > hybrid_grad_disp, std::map< std::string, boost::shared_ptr< ScalingMethod > > smv)
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)
Calculate q = 3 K_ext epsilon_ext at integration points.
std::map< std::string, boost::shared_ptr< ScalingMethod > > scalingMethodsMap
MoFEMErrorCode doWork(int side, EntityType type, EntData &data) override
Operator for linear form, usually to calculate values on right hand side.
boost::shared_ptr< ExternalStrainVec > externalStrainVecPtr
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.
OpCalculateRotationAndSpatialGradient(boost::shared_ptr< DataAtIntegrationPts > data_ptr)
boost::shared_ptr< DataAtIntegrationPts > dataAtPts
data at integration pts
MoFEMErrorCode doWork(int side, EntityType type, EntData &data)
OpCalculateTractionFromSideEle(boost::shared_ptr< DataAtIntegrationPts > data_ptr)
boost::shared_ptr< DataAtIntegrationPts > dataAtPts
data at integration pts
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)
Caluclate face material force and normal pressure at gauss points.
OpFaceSideMaterialForce(boost::shared_ptr< DataAtIntegrationPts > data_ptr)
boost::shared_ptr< DataAtIntegrationPts > dataAtPts
data at integration pts
MoFEMErrorCode doWork(int side, EntityType type, EntData &data)
boost::shared_ptr< DataAtIntegrationPts > dataAtPts
OpGetInternalStress(boost::shared_ptr< DataAtIntegrationPts > data_ptr, std::string tag_name="")
MoFEMErrorCode iNtegrate(EntitiesFieldData::EntData &data)
boost::shared_ptr< std::vector< BrokenBaseSideData > > brokenBaseSideDataPtr
virtual MoFEMErrorCode evaluateLhs(EntData &data)=0
boost::shared_ptr< PhysicalEquations > physicsPtr
material physical equations
virtual MoFEMErrorCode evaluateRhs(EntData &data)=0
OpJacobian(FieldSpace space, UserDataOperator::OpType op_type)
boost::shared_ptr< DataAtIntegrationPts > dataAtPts
data at integration pts
OpJacobian(const bool eval_rhs, const bool eval_lhs, boost::shared_ptr< DataAtIntegrationPts > data_ptr, boost::shared_ptr< PhysicalEquations > physics_ptr)
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
OpNormalDispBcRhsImpl(std::string row_field, boost::shared_ptr< MatrixDouble > hybrid_disp_ptr, boost::shared_ptr< std::vector< BrokenBaseSideData > > broken_side_data_ptr, 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 &data)
boost::shared_ptr< NormalDisplacementBcVec > bcDispPtr
boost::shared_ptr< std::vector< BrokenBaseSideData > > brokenBaseSideDataPtr
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)
OpSpatialConsistency_dBubble_dBubble(std::string row_field, std::string col_field, boost::shared_ptr< DataAtIntegrationPts > data_ptr, const bool has_nonhomogeneous_mat_block)
MoFEMErrorCode integrate(EntData &row_data, EntData &col_data)
MoFEMErrorCode integrateImpl(EntData &row_data, EntData &col_data)
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, const bool has_nonhomogeneous_mat_block)
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)
OpSpatialConsistency_dP_dP(std::string row_field, std::string col_field, boost::shared_ptr< DataAtIntegrationPts > data_ptr, const bool has_nonhomogeneous_mat_block)
MoFEMErrorCode integrate(EntData &row_data, EntData &col_data)
MoFEMErrorCode integrateImpl(EntData &row_data, EntData &col_data)
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)
MoFEMErrorCode integrate(EntData &row_data)
OpSpatialPhysicalInternalStress(const std::string &field_name, boost::shared_ptr< DataAtIntegrationPts > data_ptr, boost::shared_ptr< ScalingMethod > scaling_method_ptr)
boost::shared_ptr< ScalingMethod > scalingMethodPtr
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)
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_r, double alpha_omega, double alpha_viscous_r, double alpha_viscous_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)
MoFEMErrorCode integrate(EntData &data)
OpSpatialRotation(const std::string &field_name, boost::shared_ptr< DataAtIntegrationPts > data_ptr, double alpha_r, double alpha_omega, double alpha_viscous_r, double alpha_viscous_omega)
MoFEMErrorCode iNtegrate(EntData &row_data, EntData &col_data)
boost::shared_ptr< SpringBcVec > bcSpringPtr
OpSpringLhsBc_dP(std::string row_field, boost::shared_ptr< std::vector< BrokenBaseSideData > > broken_base_side_data, boost::shared_ptr< SpringBcVec > bc_spring_ptr)
MoFEMErrorCode iNtegrate(EntData &row_data, EntData &col_data)
boost::shared_ptr< SpringBcVec > bcSpringPtr
OpSpringLhsBc_dU(std::string row_field, boost::shared_ptr< SpringBcVec > bc_spring_ptr)
boost::shared_ptr< MatrixDouble > hybridDispPtr
OpSpringRhsBc(std::string row_field, boost::shared_ptr< MatrixDouble > hybrid_disp_ptr, boost::shared_ptr< std::vector< BrokenBaseSideData > > broken_side_data_ptr, boost::shared_ptr< SpringBcVec > bc_spring_ptr)
MoFEMErrorCode iNtegrate(EntData &data)
boost::shared_ptr< SpringBcVec > bcSpringPtr
boost::shared_ptr< std::vector< BrokenBaseSideData > > brokenBaseSideDataPtr
boost::weak_ptr< MatrixDouble > fluxMatPtr
MoFEMErrorCode doWork(int row_side, EntityType row_type, EntitiesFieldData::EntData &row_data)
OpBrokenBaseImpl< OP > BASE
OpStressGram_dBubble_dP(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)
boost::shared_ptr< BcDispVec > bcDispPtr
OpTauStabilizationDispLhsBc(boost::shared_ptr< std::vector< BrokenBaseSideData > > broken_base_side_data, boost::shared_ptr< BcDispVec > &bc_disp_ptr, ScalarFun tau_coeff, boost::shared_ptr< Range > ents_ptr=nullptr)
OpTauStabilizationDispRhsBc(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, ScalarFun tau_coeff, boost::shared_ptr< Range > ents_ptr=nullptr)
std::map< std::string, boost::shared_ptr< ScalingMethod > > scalingMethodsMap
MoFEMErrorCode iNtegrate(EntData &data)
boost::shared_ptr< BcDispVec > bcDispPtr
boost::shared_ptr< AnalyticalDisplacementBcVec > bcDispPtr
MoFEMErrorCode iNtegrate(EntData &data)
OpTauStabilizationOpAnalyticalDispBc(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, ScalarFun tau_coeff, boost::shared_ptr< Range > ents_ptr=nullptr)
std::map< std::string, boost::shared_ptr< ScalingMethod > > scalingMethodsMap
MoFEMErrorCode iNtegrate(EntData &row_data, EntData &col_data)
boost::shared_ptr< AnalyticalDisplacementBcVec > bcDispPtr
OpTauStabilizationOpAnalyticalDispLhsBc(boost::shared_ptr< std::vector< BrokenBaseSideData > > broken_base_side_data, boost::shared_ptr< AnalyticalDisplacementBcVec > &bc_disp_ptr, ScalarFun tau_coeff, boost::shared_ptr< Range > ents_ptr=nullptr)
boost::shared_ptr< BcRotVec > bcRotPtr
OpTauStabilizationRotationLhsBc(boost::shared_ptr< std::vector< BrokenBaseSideData > > broken_base_side_data, boost::shared_ptr< BcRotVec > &bc_ptr, ScalarFun tau_coeff, boost::shared_ptr< Range > ents_ptr=nullptr)
MoFEMErrorCode iNtegrate(EntData &row_data, EntData &col_data)
std::map< std::string, boost::shared_ptr< ScalingMethod > > scalingMethodsMap
OpTauStabilizationRotationRhsBc(boost::shared_ptr< std::vector< BrokenBaseSideData > > broken_base_side_data, boost::shared_ptr< BcRotVec > &bc_ptr, std::map< std::string, boost::shared_ptr< ScalingMethod > > smv, ScalarFun tau_coeff, boost::shared_ptr< Range > ents_ptr=nullptr)
MoFEMErrorCode iNtegrate(EntData &data)
boost::shared_ptr< BcRotVec > bcRotPtr
double rho
Definition plastic.cpp:144