v0.16.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
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
273// Add operator to calculate Eshelby tensor
274
276 : public ForcesAndSourcesCore::UserDataOperator {
277 OpCalculateEshelbyStress(boost::shared_ptr<DataAtIntegrationPts> data_ptr)
279 dataAtPts(data_ptr) {}
280 MoFEMErrorCode doWork(int side, EntityType type, EntData &data);
281
282private:
283 boost::shared_ptr<DataAtIntegrationPts>
284 dataAtPts; ///< data at integration pts
285};
286
288
290 boost::shared_ptr<DataAtIntegrationPts> data_ptr)
292 MoFEMErrorCode doWork(int side, EntityType type, EntData &data);
293
294private:
295 boost::shared_ptr<DataAtIntegrationPts>
296 dataAtPts; ///< data at integration pts
297};
298
301 boost::shared_ptr<DataAtIntegrationPts> data_ptr)
302 : SideEleOp(NOSPACE, SideEleOp::OPSPACE), dataAtPts(data_ptr) {
303 std::fill(&doEntities[MBVERTEX], &doEntities[MBMAXTYPE], false);
304 for (auto t = moab::CN::TypeDimensionMap[SPACE_DIM].first;
305 t <= moab::CN::TypeDimensionMap[SPACE_DIM].second; ++t)
306 doEntities[t] = true;
307 sYmm = false;
308 }
309 MoFEMErrorCode doWork(int side, EntityType type, EntData &data);
310
311private:
312 boost::shared_ptr<DataAtIntegrationPts>
313 dataAtPts; ///< data at integration pts
314};
315
316struct OpCalculateReactionForces : public FaceUserDataOperator {
317 OpCalculateReactionForces(boost::shared_ptr<DataAtIntegrationPts> data_ptr,
318 std::string block_name, Range block_entities,
319 std::array<double, 6> &reaction_vec)
320 : FaceUserDataOperator(NOSPACE, OPSPACE), dataAtPts(data_ptr),
321 blockEntities(block_entities), blockName(block_name),
322 reactionVec(reaction_vec) {}
323 MoFEMErrorCode doWork(int side, EntityType type, EntData &data);
324
325private:
326 boost::shared_ptr<DataAtIntegrationPts>
327 dataAtPts; ///< data at integration pts
329 std::string blockName;
330 std::array<double, 6> &reactionVec;
331};
332
335 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
336 const double alpha, const double rho)
337 : OpAssembleVolume(field_name, data_ptr, OPROW), alphaW(alpha),
338 alphaRho(rho) {}
339 MoFEMErrorCode integrate(EntData &data);
340
341private:
342 const double alphaW;
343 const double alphaRho;
344};
345
347 OpSpatialRotation(const std::string &field_name,
348 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
349 double alpha_r, double alpha_r0, double alpha_omega,
350 double alpha_omega0, double alpha_viscous_r,
351 double alpha_viscous_r0, double alpha_viscous_omega,
352 double alpha_viscous_omega0)
353 : OpAssembleVolume(field_name, data_ptr, OPROW), alphaR(alpha_r),
354 alphaR0(alpha_r0), alphaOmega(alpha_omega), alphaOmega0(alpha_omega0),
355 alphaViscousR(alpha_viscous_r), alphaViscousR0(alpha_viscous_r0),
356 alphaViscousOmega(alpha_viscous_omega),
357 alphaViscousOmega0(alpha_viscous_omega0) {
358 }
359 MoFEMErrorCode integrate(EntData &data);
360
361private:
362 double alphaR;
363 double alphaR0;
370};
371
374 boost::shared_ptr<DataAtIntegrationPts> data_ptr)
375 : OpAssembleVolume(field_name, data_ptr, OPROW) {}
376 MoFEMErrorCode integrate(EntData &data);
377
378private:
379};
380
383 boost::shared_ptr<DataAtIntegrationPts> data_ptr)
384 : OpAssembleVolume(field_name, data_ptr, OPROW) {}
385 MoFEMErrorCode integrate(EntData &data);
386
387private:
388};
389
392 boost::shared_ptr<DataAtIntegrationPts> data_ptr)
393 : OpAssembleVolume(field_name, data_ptr, OPROW) {}
394 MoFEMErrorCode integrate(EntData &data);
395};
396
397template <int INTERP_ORDER>
399 OpGetInternalStress(boost::shared_ptr<DataAtIntegrationPts> data_ptr,
400 std::string tag_name = "")
401 : UserDataOperator(H1, OPLAST), dataAtPts(data_ptr), tagName(tag_name) {
402 std::fill(&doEntities[MBVERTEX], &doEntities[MBMAXTYPE], false);
403 doEntities[MBVERTEX] = true;
404 }
405 MoFEMErrorCode doWork(int side, EntityType type, EntData &data);
406
407private:
408 boost::shared_ptr<DataAtIntegrationPts> dataAtPts;
409 std::string tagName;
410};
411
412template <bool VOIGT>
415 const std::string &field_name,
416 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
417 boost::shared_ptr<ScalingMethod> scaling_method_ptr)
418 : OpAssembleVolume(field_name, data_ptr, OPROW),
419 scalingMethodPtr(scaling_method_ptr) {}
420 MoFEMErrorCode integrate(EntData &row_data);
421
422protected:
423 boost::shared_ptr<ScalingMethod> scalingMethodPtr;
424};
425
426template <AssemblyType A, IntegrationType I> struct OpDispBcImpl;
427
428template <AssemblyType A>
429struct OpDispBcImpl<A, GAUSS>
430 : public FormsIntegrators<FaceUserDataOperator>::Assembly<A>::OpBrokenBase {
431
432 using OP = typename FormsIntegrators<FaceUserDataOperator>::Assembly<
434
436 boost::shared_ptr<std::vector<BrokenBaseSideData>> broken_base_side_data,
437 boost::shared_ptr<BcDispVec> &bc_disp_ptr,
438 std::map<std::string, boost::shared_ptr<ScalingMethod>> smv,
439 boost::shared_ptr<Range> ents_ptr = nullptr)
440 : OP(broken_base_side_data, ents_ptr), bcDispPtr(bc_disp_ptr),
441 scalingMethodsMap(smv) {}
442
443protected:
444 MoFEMErrorCode iNtegrate(EntData &data);
445 boost::shared_ptr<BcDispVec> bcDispPtr;
446 std::map<std::string, boost::shared_ptr<ScalingMethod>> scalingMethodsMap;
447};
448
449struct OpDispBc : public OpDispBcImpl<PETSC, GAUSS> {
451 using OP::OpDispBcImpl;
452
453protected:
454 MoFEMErrorCode iNtegrate(EntData &data);
455};
456
457template <AssemblyType A, IntegrationType I> struct OpRotationBcImpl;
458
459template <AssemblyType A>
460struct OpRotationBcImpl<A, GAUSS>
461 : public FormsIntegrators<FaceUserDataOperator>::Assembly<A>::OpBrokenBase {
462
463 using OP = typename FormsIntegrators<FaceUserDataOperator>::Assembly<
465
467 boost::shared_ptr<std::vector<BrokenBaseSideData>> broken_base_side_data,
468 boost::shared_ptr<BcRotVec> &bc_rot_ptr,
469 std::map<std::string, boost::shared_ptr<ScalingMethod>> smv,
470 boost::shared_ptr<Range> ents_ptr = nullptr)
471 : OP(broken_base_side_data, ents_ptr), bcRotPtr(bc_rot_ptr),
472 scalingMethodsMap(smv) {}
473
474protected:
475 MoFEMErrorCode iNtegrate(EntData &data);
476 boost::shared_ptr<BcRotVec> bcRotPtr;
477 std::map<std::string, boost::shared_ptr<ScalingMethod>> scalingMethodsMap;
478};
479
480/**
481 * @brief Apply rotation boundary condition
482 *
483 * The boundary condition is applied getting data from the SPATIAL_ROTATION_BC
484 * blockset.
485 *
486 * Centre of rotation is given by the first three attributes of the blockset.
487 * The fort parameter is angle of rotation
488 *
489 */
490struct OpRotationBc : public OpRotationBcImpl<PETSC, GAUSS> {
492 using OP::OpRotationBcImpl;
493
494protected:
495 MoFEMErrorCode iNtegrate(EntData &data);
496};
497
499 : public FormsIntegrators<FaceUserDataOperator>::Assembly<PETSC>::OpBase {
501 const std::string row_field, boost::shared_ptr<TractionBcVec> bc_data,
502 boost::shared_ptr<double> piola_scale_ptr,
503 std::map<std::string, boost::shared_ptr<ScalingMethod>> smv)
504 : FormsIntegrators<FaceUserDataOperator>::Assembly<PETSC>::OpBase(
505 row_field, row_field, FaceUserDataOperator::OPROW),
506 bcData(bc_data), piolaScalePtr(piola_scale_ptr), scalingMethodsMap(smv) {}
507
508 MoFEMErrorCode iNtegrate(EntData &data);
509
510protected:
511 boost::shared_ptr<TractionBcVec> bcData;
512 boost::shared_ptr<double> piolaScalePtr;
513 std::map<std::string, boost::shared_ptr<ScalingMethod>> scalingMethodsMap;
514};
515
517 : public FormsIntegrators<FaceUserDataOperator>::Assembly<PETSC>::OpBase {
519 const std::string row_field, boost::shared_ptr<PressureBcVec> bc_data,
520 boost::shared_ptr<double> piola_scale_ptr,
521 boost::shared_ptr<MatrixDouble> hybrid_grad_disp,
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(piola_scale_ptr),
526 hybridGradDispPtr(hybrid_grad_disp), scalingMethodsMap(smv) {}
527
528 MoFEMErrorCode iNtegrate(EntData &data);
529
530protected:
531 boost::shared_ptr<PressureBcVec> bcData;
532 boost::shared_ptr<double> piolaScalePtr;
533 boost::shared_ptr<MatrixDouble> hybridGradDispPtr;
534 std::map<std::string, boost::shared_ptr<ScalingMethod>> scalingMethodsMap;
535};
536
537template <AssemblyType A, IntegrationType I>
539
540template <AssemblyType A>
542 : public FormsIntegrators<FaceUserDataOperator>::Assembly<A>::OpBase {
543
544 using OP =
545 typename FormsIntegrators<FaceUserDataOperator>::Assembly<A>::OpBase;
546
548 std::string row_field, boost::shared_ptr<PressureBcVec> bc_data,
549 boost::shared_ptr<MatrixDouble> hybrid_grad_disp,
550 std::map<std::string, boost::shared_ptr<ScalingMethod>> smv)
551 : OP(row_field, row_field, OP::OPROWCOL), bcData(bc_data),
552 hybridGradDispPtr(hybrid_grad_disp), scalingMethodsMap(smv) {}
553
554protected:
555 MoFEMErrorCode iNtegrate(EntData &row_data, EntData &col_data);
556 boost::shared_ptr<PressureBcVec> bcData;
557 boost::shared_ptr<MatrixDouble> hybridGradDispPtr;
558 std::map<std::string, boost::shared_ptr<ScalingMethod>> scalingMethodsMap;
559};
560
562 : public OpBrokenPressureBcLhsImpl_dU<A, GAUSS> {
565
566protected:
567 MoFEMErrorCode iNtegrate(EntData &row_data, EntData &col_data);
568};
569
571 : public FormsIntegrators<FaceUserDataOperator>::Assembly<PETSC>::OpBase {
573 const std::string row_field,
574 boost::shared_ptr<AnalyticalTractionBcVec> bc_data,
575 boost::shared_ptr<double> piola_scale_ptr,
576 std::map<std::string, boost::shared_ptr<ScalingMethod>> smv)
577 : FormsIntegrators<FaceUserDataOperator>::Assembly<PETSC>::OpBase(
578 row_field, row_field, FaceUserDataOperator::OPROW),
579 bcData(bc_data), piolaScalePtr(piola_scale_ptr),
580 scalingMethodsMap(smv) {}
581
582 MoFEMErrorCode iNtegrate(EntData &data);
583
584protected:
585 boost::shared_ptr<AnalyticalTractionBcVec> bcData;
586 boost::shared_ptr<double> piolaScalePtr;
587 std::map<std::string, boost::shared_ptr<ScalingMethod>> scalingMethodsMap;
588};
589
591 : public FormsIntegrators<FaceUserDataOperator>::Assembly<PETSC>::OpBase {
592
593 using OP =
594 typename FormsIntegrators<FaceUserDataOperator>::Assembly<PETSC>::OpBase;
595
597 std::string row_field, boost::shared_ptr<MatrixDouble> hybrid_disp_ptr,
598 boost::shared_ptr<std::vector<BrokenBaseSideData>> broken_side_data_ptr,
599 boost::shared_ptr<SpringBcVec> bc_spring_ptr)
600 : OP(row_field, row_field, OP::OPROW), hybridDispPtr(hybrid_disp_ptr),
601 brokenBaseSideDataPtr(broken_side_data_ptr), bcSpringPtr(bc_spring_ptr) {
602 }
603
604 MoFEMErrorCode iNtegrate(EntData &data);
605
606protected:
607 boost::shared_ptr<MatrixDouble> hybridDispPtr;
608 boost::shared_ptr<std::vector<BrokenBaseSideData>> brokenBaseSideDataPtr;
609 boost::shared_ptr<SpringBcVec> bcSpringPtr;
610};
611
613 : public FormsIntegrators<FaceUserDataOperator>::Assembly<A>::OpBase {
614
615 using OP = typename FormsIntegrators<FaceUserDataOperator>::Assembly<A>::OpBase;
616
617 OpSpringLhsBc_dU(std::string row_field,
618 boost::shared_ptr<SpringBcVec> bc_spring_ptr)
619 : OP(row_field, row_field, OP::OPROWCOL), bcSpringPtr(bc_spring_ptr) {}
620
621 MoFEMErrorCode iNtegrate(EntData &row_data, EntData &col_data);
622
623protected:
624 boost::shared_ptr<SpringBcVec> bcSpringPtr;
625};
626
628 : public FormsIntegrators<FaceUserDataOperator>::Assembly<A>::OpBrokenBase {
629
630 using OP =
631 typename FormsIntegrators<FaceUserDataOperator>::Assembly<A>::OpBrokenBase;
632
634 std::string row_field,
635 boost::shared_ptr<std::vector<BrokenBaseSideData>> broken_base_side_data,
636 boost::shared_ptr<SpringBcVec> bc_spring_ptr)
637 : OP(row_field, broken_base_side_data, false, false, nullptr),
638 bcSpringPtr(bc_spring_ptr) {}
639
640 MoFEMErrorCode iNtegrate(EntData &row_data, EntData &col_data);
641
642protected:
643 boost::shared_ptr<SpringBcVec> bcSpringPtr;
644};
645
646template <AssemblyType A, IntegrationType I> struct OpNormalDispBcRhsImpl;
647template <AssemblyType A, IntegrationType I> struct OpNormalDispBcLhsImpl_dU;
648template <AssemblyType A, IntegrationType I> struct OpNormalDispBcLhsImpl_dP;
649
650template <AssemblyType A>
652 : public FormsIntegrators<FaceUserDataOperator>::Assembly<PETSC>::OpBase {
653
654 using OP =
655 typename FormsIntegrators<FaceUserDataOperator>::Assembly<PETSC>::OpBase;
656
658 std::string row_field, boost::shared_ptr<MatrixDouble> hybrid_disp_ptr,
659 boost::shared_ptr<std::vector<BrokenBaseSideData>> broken_side_data_ptr,
660 // boost::shared_ptr<MatrixDouble> piola_stress_ptr,
661 boost::shared_ptr<NormalDisplacementBcVec> &bc_disp_ptr,
662 std::map<std::string, boost::shared_ptr<ScalingMethod>> smv,
663 boost::shared_ptr<Range> ents_ptr = nullptr)
664 : FormsIntegrators<FaceUserDataOperator>::Assembly<PETSC>::OpBase(
665 row_field, row_field, OP::OPROW),
666 hybridDispPtr(hybrid_disp_ptr),
667 brokenBaseSideDataPtr(
668 broken_side_data_ptr), /*piolaStressPtr(piola_stress_ptr),*/
669 bcDispPtr(bc_disp_ptr), scalingMethodsMap(smv) {}
670
671protected:
672 MoFEMErrorCode iNtegrate(EntData &data);
673 boost::shared_ptr<MatrixDouble> hybridDispPtr;
674 boost::shared_ptr<std::vector<BrokenBaseSideData>> brokenBaseSideDataPtr;
675 // boost::shared_ptr<MatrixDouble> piolaStressPtr;
676 boost::shared_ptr<NormalDisplacementBcVec> bcDispPtr;
677 std::map<std::string, boost::shared_ptr<ScalingMethod>> scalingMethodsMap;
678};
679
680template <AssemblyType A>
682 : public FormsIntegrators<FaceUserDataOperator>::Assembly<A>::OpBase {
683
684 using OP =
685 typename FormsIntegrators<FaceUserDataOperator>::Assembly<A>::OpBase;
686
688 std::string row_field,
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, row_field, OP::OPROWCOL), bcDispPtr(bc_disp_ptr),
693 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
701template <AssemblyType A>
703 : public FormsIntegrators<FaceUserDataOperator>::Assembly<A>::OpBrokenBase {
704
705 using OP = typename FormsIntegrators<FaceUserDataOperator>::Assembly<
707
709 std::string row_field,
710 boost::shared_ptr<std::vector<BrokenBaseSideData>> broken_base_side_data,
711 boost::shared_ptr<NormalDisplacementBcVec> &bc_disp_ptr,
712 std::map<std::string, boost::shared_ptr<ScalingMethod>> smv,
713 boost::shared_ptr<Range> ents_ptr = nullptr)
714 : OP(row_field, broken_base_side_data, false, false, ents_ptr),
715 bcDispPtr(bc_disp_ptr), scalingMethodsMap(smv) {}
716
717protected:
718 MoFEMErrorCode iNtegrate(EntData &row_data, EntData &col_data);
719 boost::shared_ptr<NormalDisplacementBcVec> bcDispPtr;
720 std::map<std::string, boost::shared_ptr<ScalingMethod>> scalingMethodsMap;
721};
722
723struct OpNormalDispRhsBc : public OpNormalDispBcRhsImpl<PETSC, GAUSS> {
725 using OP::OpNormalDispBcRhsImpl;
726
727protected:
728 MoFEMErrorCode iNtegrate(EntData &data);
729};
730
734
735protected:
736 MoFEMErrorCode iNtegrate(EntData &row_data, EntData &col_data);
737};
738
742
743protected:
744 MoFEMErrorCode iNtegrate(EntData &row_data, EntData &col_data);
745};
746
747template <AssemblyType A, IntegrationType I> struct OpAnalyticalDispBcImpl;
748
749template <AssemblyType A>
751 : public FormsIntegrators<FaceUserDataOperator>::Assembly<A>::OpBrokenBase {
752
753 using OP = typename FormsIntegrators<FaceUserDataOperator>::Assembly<
755
757 boost::shared_ptr<std::vector<BrokenBaseSideData>> broken_base_side_data,
758 boost::shared_ptr<AnalyticalDisplacementBcVec> &bc_disp_ptr,
759 std::map<std::string, boost::shared_ptr<ScalingMethod>> smv,
760 boost::shared_ptr<Range> ents_ptr = nullptr)
761 : OP(broken_base_side_data, ents_ptr), bcDispPtr(bc_disp_ptr),
762 scalingMethodsMap(smv) {}
763
764protected:
765 MoFEMErrorCode iNtegrate(EntData &data);
766 boost::shared_ptr<AnalyticalDisplacementBcVec> bcDispPtr;
767 std::map<std::string, boost::shared_ptr<ScalingMethod>> scalingMethodsMap;
768};
769
770struct OpAnalyticalDispBc : public OpAnalyticalDispBcImpl<PETSC, GAUSS> {
772 using OP::OpAnalyticalDispBcImpl;
773
774protected:
775 MoFEMErrorCode iNtegrate(EntData &data);
776};
777
779 OpSpatialEquilibrium_dw_dP(std::string row_field, std::string col_field,
780 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
781 const bool assemble_off = false)
782 : OpAssembleVolume(row_field, col_field, data_ptr, OPROWCOL,
783 assemble_off) {
784 sYmm = false;
785 }
786 MoFEMErrorCode integrate(EntData &row_data, EntData &col_data);
787};
788
790 const double alphaW;
791 const double alphaRho;
792 OpSpatialEquilibrium_dw_dw(std::string row_field, std::string col_field,
793 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
794 const double alpha, const double rho)
795 : OpAssembleVolume(row_field, col_field, data_ptr, OPROWCOL, false),
796 alphaW(alpha), alphaRho(rho) {
797 sYmm = true;
798 }
799 MoFEMErrorCode integrate(EntData &row_data, EntData &col_data);
800};
801
803 OpSpatialPhysical_du_dP(std::string row_field, std::string col_field,
804 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
805 const bool assemble_off = false)
806 : OpAssembleVolume(row_field, col_field, data_ptr, OPROWCOL,
807 assemble_off) {
808 sYmm = false;
809 }
810
811 MoFEMErrorCode integrate(EntData &row_data, EntData &col_data);
812};
813
815 OpSpatialPhysical_du_dBubble(std::string row_field, std::string col_field,
816 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
817 const bool assemble_off = false)
818 : OpAssembleVolume(row_field, col_field, data_ptr, OPROWCOL,
819 assemble_off) {
820 sYmm = false;
821 }
822
823 MoFEMErrorCode integrate(EntData &row_data, EntData &col_data);
824};
825
827 using OpAssembleVolume::OpAssembleVolume;
828 OpSpatialPhysical_du_domega(std::string row_field, std::string col_field,
829 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
830 const bool assemble_off)
831 : OpAssembleVolume(row_field, col_field, data_ptr, OPROWCOL,
832 assemble_off) {
833 sYmm = false;
834 }
835 MoFEMErrorCode integrate(EntData &row_data, EntData &col_data);
836};
837
839 OpSpatialRotation_domega_du(std::string row_field, std::string col_field,
840 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
841 [[maybe_unused]] double alpha_omega)
842 : OpAssembleVolume(row_field, col_field, data_ptr, OPROWCOL, false) {
843 sYmm = false;
844 }
845 MoFEMErrorCode integrate(EntData &row_data, EntData &col_data);
846
847private:
848};
849
851 OpSpatialRotation_domega_dP(std::string row_field, std::string col_field,
852 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
853 const bool assemble_off)
854 : OpAssembleVolume(row_field, col_field, data_ptr, OPROWCOL,
855 assemble_off) {
856 sYmm = false;
857 }
858 MoFEMErrorCode integrate(EntData &row_data, EntData &col_data);
859};
860
863 std::string row_field, std::string col_field,
864 boost::shared_ptr<DataAtIntegrationPts> data_ptr, const bool assemble_off)
865 : OpAssembleVolume(row_field, col_field, data_ptr, OPROWCOL,
866 assemble_off) {
867 sYmm = false;
868 }
869 MoFEMErrorCode integrate(EntData &row_data, EntData &col_data);
870};
871
874 std::string row_field, std::string col_field,
875 boost::shared_ptr<DataAtIntegrationPts> data_ptr, double alpha_r,
876 double alpha_r0,
877 double alpha_omega, double alpha_omega0, double alpha_viscous_r,
878 double alpha_viscous_r0, double alpha_viscous_omega,
879 double alpha_viscous_omega0)
880 : OpAssembleVolume(row_field, col_field, data_ptr, OPROWCOL, false),
881 alphaR(alpha_r), alphaR0(alpha_r0), alphaOmega(alpha_omega),
882 alphaOmega0(alpha_omega0), alphaViscousR(alpha_viscous_r),
883 alphaViscousR0(alpha_viscous_r0),
884 alphaViscousOmega(alpha_viscous_omega),
885 alphaViscousOmega0(alpha_viscous_omega0) {
886 sYmm = false;
887 }
888 MoFEMErrorCode integrate(EntData &row_data, EntData &col_data);
889
890private:
891 double alphaR;
892 double alphaR0;
899};
900
902 OpSpatialConsistency_dP_dP(std::string row_field, std::string col_field,
903 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
904 const bool has_nonhomogeneous_mat_block)
905 : OpAssembleVolume(row_field, col_field, data_ptr, OPROWCOL, false),
906 hasNonhomogeneousMatBlock(has_nonhomogeneous_mat_block) {
907 sYmm = false;
908 }
909 MoFEMErrorCode integrate(EntData &row_data, EntData &col_data);
910
911private:
912 template <int S>
913 MoFEMErrorCode integrateImpl(EntData &row_data, EntData &col_data);
915};
916
919 std::string row_field, std::string col_field,
920 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
921 const bool has_nonhomogeneous_mat_block)
922 : OpAssembleVolume(row_field, col_field, data_ptr, OPROWCOL, false),
923 hasNonhomogeneousMatBlock(has_nonhomogeneous_mat_block) {
924 sYmm = false;
925 }
926 MoFEMErrorCode integrate(EntData &row_data, EntData &col_data);
927
928private:
929 template <int S>
930 MoFEMErrorCode integrateImpl(EntData &row_data, EntData &col_data);
932};
933
936 std::string row_field, std::string col_field,
937 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
938 const bool has_nonhomogeneous_mat_block)
939 : OpAssembleVolume(row_field, col_field, data_ptr, OPROWCOL, true),
940 hasNonhomogeneousMatBlock(has_nonhomogeneous_mat_block) {
941 sYmm = false;
942 }
943 MoFEMErrorCode integrate(EntData &row_data, EntData &col_data);
944
945private:
946 template <int S>
947 MoFEMErrorCode integrateImpl(EntData &row_data, EntData &col_data);
949};
950
952 FormsIntegrators<VolUserDataOperator>::Assembly<A>::BiLinearForm<
953 GAUSS>::OpMass<3, 9>;
954
956 FormsIntegrators<VolUserDataOperator>::Assembly<A>::BiLinearForm<
957 GAUSS>::OpMass<9, 9>;
958
960 OpStressGram_dBubble_dP(std::string row_field, std::string col_field,
961 boost::shared_ptr<DataAtIntegrationPts> data_ptr)
962 : OpAssembleVolume(row_field, col_field, data_ptr, OPROWCOL, true) {
963 sYmm = false;
964 }
965 MoFEMErrorCode integrate(EntData &row_data, EntData &col_data);
966};
967
970 std::string row_field, std::string col_field,
971 boost::shared_ptr<DataAtIntegrationPts> data_ptr, const bool assemble_off)
972 : OpAssembleVolume(row_field, col_field, data_ptr, OPROWCOL,
973 assemble_off) {
974 sYmm = false;
975 }
976 MoFEMErrorCode integrate(EntData &row_data, EntData &col_data);
977
978private:
979};
980
983 std::string row_field, std::string col_field,
984 boost::shared_ptr<DataAtIntegrationPts> data_ptr, const bool assemble_off)
985 : OpAssembleVolume(row_field, col_field, data_ptr, OPROWCOL,
986 assemble_off) {
987 sYmm = false;
988 }
989 MoFEMErrorCode integrate(EntData &row_data, EntData &col_data);
990
991private:
992};
993
995 : public VolumeElementForcesAndSourcesCoreOnSide::UserDataOperator {
996
997 using OP = VolumeElementForcesAndSourcesCoreOnSide::UserDataOperator;
998
999 moab::Interface &postProcMesh;
1000 std::vector<EntityHandle> &mapGaussPts;
1001 boost::shared_ptr<DataAtIntegrationPts> dataAtPts;
1002
1003 OpPostProcDataStructure(moab::Interface &post_proc_mesh,
1004 std::vector<EntityHandle> &map_gauss_pts,
1005 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
1006 int sense)
1007 : OP(NOSPACE, UserDataOperator::OPSPACE), postProcMesh(post_proc_mesh),
1008 mapGaussPts(map_gauss_pts), dataAtPts(data_ptr), tagSense(sense) {}
1009
1010 MoFEMErrorCode doWork(int side, EntityType type, EntData &data);
1011
1012private:
1014};
1015
1017 OpSpatialPrj(std::string row_field,
1018 boost::shared_ptr<DataAtIntegrationPts> data_ptr)
1019 : OpAssembleVolume(row_field, data_ptr, OPROW) {}
1020 MoFEMErrorCode integrate(EntData &row_data);
1021};
1022
1024 OpSpatialPrj_dx_dx(std::string row_field, std::string col_field,
1025 boost::shared_ptr<DataAtIntegrationPts> data_ptr)
1026 : OpAssembleVolume(row_field, col_field, data_ptr, OPROWCOL, false) {
1027 // FIXME: That is symmetric
1028 sYmm = false;
1029 }
1030 MoFEMErrorCode integrate(EntData &row_data, EntData &col_data);
1031};
1032
1034 OpSpatialPrj_dx_dw(std::string row_field, std::string col_field,
1035 boost::shared_ptr<DataAtIntegrationPts> data_ptr)
1036 : OpAssembleVolume(row_field, col_field, data_ptr, OPROWCOL, false) {
1037 sYmm = false;
1038 }
1039 MoFEMErrorCode integrate(EntData &row_data, EntData &col_data);
1040};
1041
1043 : public VolumeElementForcesAndSourcesCoreOnSide::UserDataOperator {
1044
1045 // @note This is not on the side, since, integrate energy in the volume
1046 using OP = VolumeElementForcesAndSourcesCoreOnSide::UserDataOperator;
1047
1048 OpFaceSideMaterialForce(boost::shared_ptr<DataAtIntegrationPts> data_ptr)
1049 : OP(NOSPACE, OPSPACE), dataAtPts(data_ptr) {}
1050
1051 MoFEMErrorCode doWork(int side, EntityType type, EntData &data);
1052
1053private:
1054 boost::shared_ptr<DataAtIntegrationPts>
1055 dataAtPts; ///< data at integration pts
1056};
1057
1059 : public FaceElementForcesAndSourcesCore::UserDataOperator {
1060
1061 // @note This is not on the side, since, integrate energy in the volume
1062 using OP = FaceElementForcesAndSourcesCore::UserDataOperator;
1063
1064 OpFaceMaterialForce(boost::shared_ptr<DataAtIntegrationPts> data_ptr)
1065 : OP(NOSPACE, OPSPACE), dataAtPts(data_ptr) {}
1066
1067 MoFEMErrorCode doWork(int side, EntityType type, EntData &data);
1068
1069private:
1070 boost::shared_ptr<DataAtIntegrationPts>
1071 dataAtPts; ///< data at integration pts
1072};
1073
1074template <int FE_DIM, int PROBLEM_DIM, int SPACE_DIM> struct AddHOOps;
1075
1076template <> struct AddHOOps<2, 3, 3> {
1077 AddHOOps() = delete;
1078 static MoFEMErrorCode
1079 add(boost::ptr_deque<ForcesAndSourcesCore::UserDataOperator> &pipeline,
1080 std::vector<FieldSpace> space, std::string geom_field_name,
1081 boost::shared_ptr<Range> crack_front_edges_ptr);
1082};
1083
1084template <> struct AddHOOps<2, 2, 3> {
1085 AddHOOps() = delete;
1086 static MoFEMErrorCode
1087 add(boost::ptr_deque<ForcesAndSourcesCore::UserDataOperator> &pipeline,
1088 std::vector<FieldSpace> space, std::string geom_field_name,
1089 boost::shared_ptr<Range> crack_front_edges_ptr);
1090};
1091
1092template <> struct AddHOOps<3, 3, 3> {
1093 AddHOOps() = delete;
1094 static MoFEMErrorCode
1095 add(boost::ptr_deque<ForcesAndSourcesCore::UserDataOperator> &pipeline,
1096 std::vector<FieldSpace> space, std::string geom_field_name,
1097 boost::shared_ptr<Range> crack_front_edges_ptr,
1098 boost::shared_ptr<MatrixDouble> jac = nullptr,
1099 boost::shared_ptr<VectorDouble> det = nullptr,
1100 boost::shared_ptr<MatrixDouble> inv_jac = nullptr);
1101};
1102
1104 FormsIntegrators<FaceElementForcesAndSourcesCore::UserDataOperator>::
1105 Assembly<A>::LinearForm<GAUSS>::OpBaseTimesVector<1, SPACE_DIM,
1106 SPACE_DIM>;
1107
1108template <typename OP>
1109struct OpStabBrokenBaseImpl : public OpBrokenBaseImpl<OP> {
1110
1111 using BASE = OpBrokenBaseImpl<OP>;
1112 using BASE::BASE;
1113
1114 MoFEMErrorCode doWork(int row_side, EntityType row_type,
1115 EntitiesFieldData::EntData &row_data) {
1117
1118 if (OP::entsPtr) {
1119 if (OP::entsPtr->find(this->getFEEntityHandle()) == OP::entsPtr->end())
1121 }
1122
1123#ifndef NDEBUG
1124 if (!BASE::brokenBaseSideData) {
1125 SETERRQ(PETSC_COMM_SELF, MOFEM_IMPOSSIBLE_CASE, "space not set");
1126 }
1127#endif // NDEBUG
1128
1129 auto do_work_rhs = [this](int, EntityType,
1130 EntitiesFieldData::EntData &row_data) {
1132 // get number of dofs on row
1133 OP::nbRows = row_data.getIndices().size();
1134 if (!OP::nbRows)
1136 // get number of integration points
1137 OP::nbIntegrationPts = OP::getGaussPts().size2();
1138 // get row base functions
1139 OP::nbRowBaseFunctions = OP::getNbOfBaseFunctions(row_data);
1140 // resize and clear the right hand side vector
1141 OP::locF.resize(OP::nbRows, false);
1142 OP::locF.clear();
1143 // integrate local vector
1144 CHKERR this->iNtegrate(row_data);
1145 // assemble local vector
1146 CHKERR this->aSsemble(row_data);
1148 };
1149
1150 auto do_work_lhs = [this](int row_side, int col_side, EntityType row_type,
1151 EntityType col_type,
1152 EntitiesFieldData::EntData &row_data,
1153 EntitiesFieldData::EntData &col_data) {
1155
1156 auto check_if_assemble_transpose = [&] {
1157 if (this->sYmm) {
1158 if (OP::rowSide != OP::colSide || OP::rowType != OP::colType)
1159 return true;
1160 else
1161 return false;
1162 } else if (OP::assembleTranspose) {
1163 return true;
1164 }
1165 return false;
1166 };
1167
1168 OP::rowSide = row_side;
1169 OP::rowType = row_type;
1170 OP::colSide = col_side;
1171 OP::colType = col_type;
1172 OP::nbCols = col_data.getIndices().size();
1173 OP::locMat.resize(OP::nbRows, OP::nbCols, false);
1174 OP::locMat.clear();
1175 CHKERR this->iNtegrate(row_data, col_data);
1176 CHKERR this->aSsemble(row_data, col_data, check_if_assemble_transpose());
1178 };
1179
1180 switch (OP::opType) {
1181 case OP::OPROW:
1182
1183 OP::nbRows = row_data.getIndices().size();
1184 if (!OP::nbRows)
1186 OP::nbIntegrationPts = OP::getGaussPts().size2();
1187 OP::nbRowBaseFunctions = OP::getNbOfBaseFunctions(row_data);
1188
1189 if (!OP::nbRows)
1191
1192 for (auto &bd : *BASE::brokenBaseSideData) {
1193
1194#ifndef NDEBUG
1195 if (!bd.getData().getNSharedPtr(bd.getData().getBase())) {
1196 SETERRQ(PETSC_COMM_SELF, MOFEM_DATA_INCONSISTENCY,
1197 "base functions not set");
1198 }
1199#endif
1200
1201 CHKERR do_work_lhs(
1202
1203 // side
1204 row_side, bd.getSide(),
1205
1206 // type
1207 row_type, bd.getType(),
1208
1209 // row_data
1210 row_data, bd.getData()
1211
1212 );
1213 }
1214
1215 break;
1216 case OP::OPSPACE:
1217 for (auto &bd : *BASE::brokenBaseSideData) {
1218 fluxMatPtr = boost::shared_ptr<MatrixDouble>(BASE::brokenBaseSideData,
1219 &bd.getFlux());
1220 CHKERR do_work_rhs(bd.getSide(), bd.getType(), bd.getData());
1221 }
1222 break;
1223 default:
1226 (std::string("wrong op type ") +
1227 OpBaseDerivativesBase::OpTypeNames[static_cast<unsigned char>(
1228 OP::opType)])
1229 .c_str());
1230 }
1231
1233 }
1234
1235protected:
1236 boost::weak_ptr<MatrixDouble> fluxMatPtr;
1237};
1238
1240 : public OpStabBrokenBaseImpl<OpBaseTimesVectorFace> {
1241
1244 boost::shared_ptr<std::vector<BrokenBaseSideData>> broken_base_side_data,
1245 boost::shared_ptr<MatrixDouble> vec,
1246 ScalarFun beta_coeff = [](double, double, double) constexpr { return 1; },
1247 boost::shared_ptr<Range> ents_ptr = nullptr);
1248};
1249
1251 : public OpStabBrokenBaseImpl<OpBaseTimesVectorFace> {
1252
1255 boost::shared_ptr<std::vector<BrokenBaseSideData>> broken_base_side_data,
1256 ScalarFun beta_coeff = [](double, double, double) constexpr { return 1; },
1257 boost::shared_ptr<Range> ents_ptr = nullptr);
1258
1259protected:
1260 MoFEMErrorCode doWork(int row_side, EntityType row_type,
1261 EntitiesFieldData::EntData &row_data);
1262};
1263
1265
1268 const std::string row_field,
1269 boost::shared_ptr<std::vector<BrokenBaseSideData>> broken_base_side_data,
1270 ScalarFun beta_coeff, boost::shared_ptr<Range> ents_ptr = nullptr);
1271
1272protected:
1273 MoFEMErrorCode iNtegrate(EntitiesFieldData::EntData &data);
1274 boost::shared_ptr<std::vector<BrokenBaseSideData>> brokenBaseSideDataPtr;
1275};
1276
1278 FormsIntegrators<FaceElementForcesAndSourcesCore::UserDataOperator>::
1279 Assembly<A>::BiLinearForm<GAUSS>::OpMass<1, SPACE_DIM>;
1280
1281struct OpHyrbridBaseBrokenBase : public OpStabBrokenBaseImpl<OpMassVectorFace> {
1282
1285 std::string row_field,
1286 boost::shared_ptr<std::vector<BrokenBaseSideData>> broken_base_side_data,
1287 ScalarFun beta, const bool assmb_transpose, const bool only_transpose,
1288 boost::shared_ptr<Range> ents_ptr = nullptr);
1289};
1290
1291struct OpBrokenBaseBrokenBase : public OpStabBrokenBaseImpl<OpMassVectorFace> {
1292
1295 boost::shared_ptr<std::vector<BrokenBaseSideData>> broken_base_side_data,
1296 ScalarFun beta, boost::shared_ptr<Range> ents_ptr = nullptr);
1297
1298 MoFEMErrorCode doWork(int row_side, EntityType row_type,
1299 EntitiesFieldData::EntData &row_data);
1300};
1301
1303
1305
1307 boost::shared_ptr<std::vector<BrokenBaseSideData>> broken_base_side_data,
1308 boost::shared_ptr<BcDispVec> &bc_disp_ptr,
1309 std::map<std::string, boost::shared_ptr<ScalingMethod>> smv,
1310 ScalarFun tau_coeff, boost::shared_ptr<Range> ents_ptr = nullptr)
1311 : OpBrokenBaseTimesBrokenDisp(broken_base_side_data, tau_coeff, ents_ptr),
1312 bcDispPtr(bc_disp_ptr), scalingMethodsMap(smv) {}
1313
1314protected:
1315 MoFEMErrorCode iNtegrate(EntData &data);
1316 boost::shared_ptr<BcDispVec> bcDispPtr;
1317 std::map<std::string, boost::shared_ptr<ScalingMethod>> scalingMethodsMap;
1318};
1319
1321
1323
1325 boost::shared_ptr<std::vector<BrokenBaseSideData>> broken_base_side_data,
1326 boost::shared_ptr<BcDispVec> &bc_disp_ptr, ScalarFun tau_coeff,
1327 boost::shared_ptr<Range> ents_ptr = nullptr)
1328 : OP(broken_base_side_data, tau_coeff, ents_ptr), bcDispPtr(bc_disp_ptr) {
1329 }
1330
1331protected:
1332 MoFEMErrorCode iNtegrate(EntData &row_data, EntData &col_data);
1333 boost::shared_ptr<BcDispVec> bcDispPtr;
1334};
1335
1338
1340
1342 boost::shared_ptr<std::vector<BrokenBaseSideData>> broken_base_side_data,
1343 boost::shared_ptr<AnalyticalDisplacementBcVec> &bc_disp_ptr,
1344 std::map<std::string, boost::shared_ptr<ScalingMethod>> smv,
1345 ScalarFun tau_coeff, boost::shared_ptr<Range> ents_ptr = nullptr)
1346 : OpBrokenBaseTimesBrokenDisp(broken_base_side_data, tau_coeff, ents_ptr),
1347 bcDispPtr(bc_disp_ptr), scalingMethodsMap(smv) {}
1348
1349protected:
1350 MoFEMErrorCode iNtegrate(EntData &data);
1351 boost::shared_ptr<AnalyticalDisplacementBcVec> bcDispPtr;
1352 std::map<std::string, boost::shared_ptr<ScalingMethod>> scalingMethodsMap;
1353};
1354
1356
1358
1360 boost::shared_ptr<std::vector<BrokenBaseSideData>> broken_base_side_data,
1361 boost::shared_ptr<AnalyticalDisplacementBcVec> &bc_disp_ptr,
1362 ScalarFun tau_coeff, boost::shared_ptr<Range> ents_ptr = nullptr)
1363 : OP(broken_base_side_data, tau_coeff, ents_ptr), bcDispPtr(bc_disp_ptr) {
1364 }
1365
1366protected:
1367 MoFEMErrorCode iNtegrate(EntData &row_data, EntData &col_data);
1368 boost::shared_ptr<AnalyticalDisplacementBcVec> bcDispPtr;
1369};
1370
1372
1374
1376 boost::shared_ptr<std::vector<BrokenBaseSideData>> broken_base_side_data,
1377 boost::shared_ptr<BcRotVec> &bc_ptr,
1378 std::map<std::string, boost::shared_ptr<ScalingMethod>> smv,
1379 ScalarFun tau_coeff, boost::shared_ptr<Range> ents_ptr = nullptr)
1380 : OpBrokenBaseTimesBrokenDisp(broken_base_side_data, tau_coeff, ents_ptr),
1381 bcRotPtr(bc_ptr), scalingMethodsMap(smv) {}
1382
1383protected:
1384 MoFEMErrorCode iNtegrate(EntData &data);
1385 boost::shared_ptr<BcRotVec> bcRotPtr;
1386 std::map<std::string, boost::shared_ptr<ScalingMethod>> scalingMethodsMap;
1387};
1388
1390
1392
1394 boost::shared_ptr<std::vector<BrokenBaseSideData>> broken_base_side_data,
1395 boost::shared_ptr<BcRotVec> &bc_ptr, ScalarFun tau_coeff,
1396 boost::shared_ptr<Range> ents_ptr = nullptr)
1397 : OP(broken_base_side_data, tau_coeff, ents_ptr), bcRotPtr(bc_ptr) {
1398 }
1399
1400protected:
1401 MoFEMErrorCode iNtegrate(EntData &row_data, EntData &col_data);
1402 boost::shared_ptr<BcRotVec> bcRotPtr;
1403};
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)
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)
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)
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)
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_r0, double alpha_omega, double alpha_omega0, double alpha_viscous_r, double alpha_viscous_r0, double alpha_viscous_omega, double alpha_viscous_omega0)
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_r, double alpha_r0, double alpha_omega, double alpha_omega0, double alpha_viscous_r, double alpha_viscous_r0, double alpha_viscous_omega, double alpha_viscous_omega0)
MoFEMErrorCode integrate(EntData &data)
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:145