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 &data) {
72 SETERRQ(PETSC_COMM_SELF, MOFEM_NOT_IMPLEMENTED, "Not yet implemented");
74 }
75
76 virtual MoFEMErrorCode integrate(int row_side, EntityType row_type,
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 row_side, EntityType row_type,
93 EntData &data) {
95 CHKERR assemble(data);
97 }
98
99 virtual MoFEMErrorCode integrate(EntData &row_data, EntData &col_data) {
101 SETERRQ(PETSC_COMM_SELF, MOFEM_NOT_IMPLEMENTED, "Not yet implemented");
103 }
104
105 virtual MoFEMErrorCode assemble(int row_side, int col_side,
106 EntityType row_type, EntityType col_type,
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 side, EntityType type, EntData &data) {
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// Add operator to calculate Eshelby tensor
259
261 : public ForcesAndSourcesCore::UserDataOperator {
262 OpCalculateEshelbyStress(boost::shared_ptr<DataAtIntegrationPts> data_ptr)
264 dataAtPts(data_ptr) {}
265 MoFEMErrorCode doWork(int side, EntityType type, EntData &data);
266
267private:
268 boost::shared_ptr<DataAtIntegrationPts>
269 dataAtPts; ///< data at integration pts
270};
271
273
275 boost::shared_ptr<DataAtIntegrationPts> data_ptr, double alpha_omega = 0)
277 alphaOmega(alpha_omega) {}
278 MoFEMErrorCode doWork(int side, EntityType type, EntData &data);
279
280private:
281 boost::shared_ptr<DataAtIntegrationPts>
282 dataAtPts; ///< data at integration pts
284};
285
288 boost::shared_ptr<DataAtIntegrationPts> data_ptr)
289 : SideEleOp(NOSPACE, SideEleOp::OPSPACE), dataAtPts(data_ptr) {
290 std::fill(&doEntities[MBVERTEX], &doEntities[MBMAXTYPE], false);
291 for (auto t = moab::CN::TypeDimensionMap[SPACE_DIM].first;
292 t <= moab::CN::TypeDimensionMap[SPACE_DIM].second; ++t)
293 doEntities[t] = true;
294 sYmm = false;
295 }
296 MoFEMErrorCode doWork(int side, EntityType type, EntData &data);
297
298private:
299 boost::shared_ptr<DataAtIntegrationPts>
300 dataAtPts; ///< data at integration pts
301};
302
303struct OpCalculateReactionForces : public FaceUserDataOperator {
304 OpCalculateReactionForces(boost::shared_ptr<DataAtIntegrationPts> data_ptr,
305 std::string block_name, Range block_entities,
306 std::array<double, 6> &reaction_vec)
307 : FaceUserDataOperator(NOSPACE, OPSPACE), dataAtPts(data_ptr),
308 blockName(block_name), blockEntities(block_entities),
309 reactionVec(reaction_vec) {}
310 MoFEMErrorCode doWork(int side, EntityType type, EntData &data);
311
312private:
313 boost::shared_ptr<DataAtIntegrationPts>
314 dataAtPts; ///< data at integration pts
316 std::string blockName;
317 std::array<double, 6> &reactionVec;
318};
319
322 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
323 const double alpha, const double rho)
324 : OpAssembleVolume(field_name, data_ptr, OPROW), alphaW(alpha),
325 alphaRho(rho) {}
326 MoFEMErrorCode integrate(EntData &data);
327
328private:
329 const double alphaW;
330 const double alphaRho;
331};
332
334 OpSpatialRotation(const std::string &field_name,
335 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
336 double alpha_omega)
337 : OpAssembleVolume(field_name, data_ptr, OPROW), alphaOmega(alpha_omega) {
338 }
339 MoFEMErrorCode integrate(EntData &data);
340
341private:
343};
344
347 boost::shared_ptr<DataAtIntegrationPts> data_ptr)
348 : OpAssembleVolume(field_name, data_ptr, OPROW) {}
349 MoFEMErrorCode integrate(EntData &data);
350
351private:
352};
353
356 boost::shared_ptr<DataAtIntegrationPts> data_ptr)
357 : OpAssembleVolume(field_name, data_ptr, OPROW) {}
358 MoFEMErrorCode integrate(EntData &data);
359
360private:
361};
362
365 boost::shared_ptr<DataAtIntegrationPts> data_ptr)
366 : OpAssembleVolume(field_name, data_ptr, OPROW) {}
367 MoFEMErrorCode integrate(EntData &data);
368};
369
370template <int INTERP_ORDER>
372 OpGetInternalStress(boost::shared_ptr<DataAtIntegrationPts> data_ptr,
373 std::string tag_name = "")
374 : UserDataOperator(H1, OPLAST), dataAtPts(data_ptr), tagName(tag_name) {
375 std::fill(&doEntities[MBVERTEX], &doEntities[MBMAXTYPE], false);
376 doEntities[MBVERTEX] = true;
377 }
378 MoFEMErrorCode doWork(int side, EntityType type, EntData &data);
379
380private:
381 boost::shared_ptr<DataAtIntegrationPts> dataAtPts;
382 std::string tagName;
383};
384
385template <bool VOIGT>
388 const std::string &field_name,
389 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
390 boost::shared_ptr<ScalingMethod> scaling_method_ptr)
391 : OpAssembleVolume(field_name, data_ptr, OPROW),
392 scalingMethodPtr(scaling_method_ptr) {}
393 MoFEMErrorCode integrate(EntData &row_data);
394
395protected:
396 boost::shared_ptr<ScalingMethod> scalingMethodPtr;
397};
398
399template <AssemblyType A, IntegrationType I> struct OpDispBcImpl;
400
401template <AssemblyType A>
402struct OpDispBcImpl<A, GAUSS>
403 : public FormsIntegrators<FaceUserDataOperator>::Assembly<A>::OpBrokenBase {
404
405 using OP = typename FormsIntegrators<FaceUserDataOperator>::Assembly<
407
409 boost::shared_ptr<std::vector<BrokenBaseSideData>> broken_base_side_data,
410 boost::shared_ptr<BcDispVec> &bc_disp_ptr,
411 std::map<std::string, boost::shared_ptr<ScalingMethod>> smv,
412 boost::shared_ptr<Range> ents_ptr = nullptr)
413 : OP(broken_base_side_data, ents_ptr), bcDispPtr(bc_disp_ptr),
414 scalingMethodsMap(smv) {}
415
416protected:
417 MoFEMErrorCode iNtegrate(EntData &data);
418 boost::shared_ptr<BcDispVec> bcDispPtr;
419 std::map<std::string, boost::shared_ptr<ScalingMethod>> scalingMethodsMap;
420};
421
422struct OpDispBc : public OpDispBcImpl<PETSC, GAUSS> {
424 using OP::OpDispBcImpl;
425
426protected:
427 MoFEMErrorCode iNtegrate(EntData &data);
428};
429
430template <AssemblyType A, IntegrationType I> struct OpRotationBcImpl;
431
432template <AssemblyType A>
433struct OpRotationBcImpl<A, GAUSS>
434 : public FormsIntegrators<FaceUserDataOperator>::Assembly<A>::OpBrokenBase {
435
436 using OP = typename FormsIntegrators<FaceUserDataOperator>::Assembly<
438
440 boost::shared_ptr<std::vector<BrokenBaseSideData>> broken_base_side_data,
441 boost::shared_ptr<BcRotVec> &bc_rot_ptr,
442 std::map<std::string, boost::shared_ptr<ScalingMethod>> smv,
443 boost::shared_ptr<Range> ents_ptr = nullptr)
444 : OP(broken_base_side_data, ents_ptr), bcRotPtr(bc_rot_ptr),
445 scalingMethodsMap(smv) {}
446
447protected:
448 MoFEMErrorCode iNtegrate(EntData &data);
449 boost::shared_ptr<BcRotVec> bcRotPtr;
450 std::map<std::string, boost::shared_ptr<ScalingMethod>> scalingMethodsMap;
451};
452
453/**
454 * @brief Apply rotation boundary condition
455 *
456 * The boundary condition is applied getting data from the SPATIAL_ROTATION_BC
457 * blockset.
458 *
459 * Centre of rotation is given by the first three attributes of the blockset.
460 * The fort parameter is angle of rotation
461 *
462 */
463struct OpRotationBc : public OpRotationBcImpl<PETSC, GAUSS> {
465 using OP::OpRotationBcImpl;
466
467protected:
468 MoFEMErrorCode iNtegrate(EntData &data);
469};
470
472 : public FormsIntegrators<FaceUserDataOperator>::Assembly<PETSC>::OpBase {
474 const std::string row_field, boost::shared_ptr<TractionBcVec> bc_data,
475 boost::shared_ptr<double> piola_scale_ptr,
476 std::map<std::string, boost::shared_ptr<ScalingMethod>> smv)
477 : FormsIntegrators<FaceUserDataOperator>::Assembly<PETSC>::OpBase(
478 row_field, row_field, FaceUserDataOperator::OPROW),
479 bcData(bc_data), piolaScalePtr(piola_scale_ptr), scalingMethodsMap(smv) {}
480
481 MoFEMErrorCode iNtegrate(EntData &data);
482
483protected:
484 boost::shared_ptr<TractionBcVec> bcData;
485 boost::shared_ptr<double> piolaScalePtr;
486 std::map<std::string, boost::shared_ptr<ScalingMethod>> scalingMethodsMap;
487};
488
490 : public FormsIntegrators<FaceUserDataOperator>::Assembly<PETSC>::OpBase {
492 const std::string row_field, boost::shared_ptr<PressureBcVec> bc_data,
493 boost::shared_ptr<double> piola_scale_ptr,
494 boost::shared_ptr<MatrixDouble> hybrid_grad_disp,
495 std::map<std::string, boost::shared_ptr<ScalingMethod>> smv)
496 : FormsIntegrators<FaceUserDataOperator>::Assembly<PETSC>::OpBase(
497 row_field, row_field, FaceUserDataOperator::OPROW),
498 bcData(bc_data), piolaScalePtr(), hybridGradDispPtr(hybrid_grad_disp),
499 scalingMethodsMap(smv) {}
500
501 MoFEMErrorCode iNtegrate(EntData &data);
502
503protected:
504 boost::shared_ptr<PressureBcVec> bcData;
505 boost::shared_ptr<double> piolaScalePtr;
506 boost::shared_ptr<MatrixDouble> hybridGradDispPtr;
507 std::map<std::string, boost::shared_ptr<ScalingMethod>> scalingMethodsMap;
508};
509
510template <AssemblyType A, IntegrationType I>
512
513template <AssemblyType A>
515 : public FormsIntegrators<FaceUserDataOperator>::Assembly<A>::OpBase {
516
517 using OP =
518 typename FormsIntegrators<FaceUserDataOperator>::Assembly<A>::OpBase;
519
521 std::string row_field, boost::shared_ptr<PressureBcVec> bc_data,
522 boost::shared_ptr<MatrixDouble> hybrid_grad_disp,
523 std::map<std::string, boost::shared_ptr<ScalingMethod>> smv)
524 : OP(row_field, row_field, OP::OPROWCOL), bcData(bc_data),
525 hybridGradDispPtr(hybrid_grad_disp), scalingMethodsMap(smv) {}
526
527protected:
528 MoFEMErrorCode iNtegrate(EntData &row_data, EntData &col_data);
529 boost::shared_ptr<PressureBcVec> bcData;
530 boost::shared_ptr<MatrixDouble> hybridGradDispPtr;
531 std::map<std::string, boost::shared_ptr<ScalingMethod>> scalingMethodsMap;
532};
533
535 : public OpBrokenPressureBcLhsImpl_dU<A, GAUSS> {
538
539protected:
540 MoFEMErrorCode iNtegrate(EntData &row_data, EntData &col_data);
541};
542
544 : public FormsIntegrators<FaceUserDataOperator>::Assembly<PETSC>::OpBase {
546 const std::string row_field,
547 boost::shared_ptr<AnalyticalTractionBcVec> bc_data,
548 boost::shared_ptr<double> piola_scale_ptr,
549 std::map<std::string, boost::shared_ptr<ScalingMethod>> smv)
550 : FormsIntegrators<FaceUserDataOperator>::Assembly<PETSC>::OpBase(
551 row_field, row_field, FaceUserDataOperator::OPROW),
552 bcData(bc_data), piolaScalePtr(piola_scale_ptr),
553 scalingMethodsMap(smv) {}
554
555 MoFEMErrorCode iNtegrate(EntData &data);
556
557protected:
558 boost::shared_ptr<AnalyticalTractionBcVec> bcData;
559 boost::shared_ptr<double> piolaScalePtr;
560 std::map<std::string, boost::shared_ptr<ScalingMethod>> scalingMethodsMap;
561};
562
563template <AssemblyType A, IntegrationType I> struct OpNormalDispBcRhsImpl;
564template <AssemblyType A, IntegrationType I> struct OpNormalDispBcLhsImpl_dU;
565template <AssemblyType A, IntegrationType I> struct OpNormalDispBcLhsImpl_dP;
566
567template <AssemblyType A>
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<MatrixDouble> piola_stress_ptr,
578 boost::shared_ptr<NormalDisplacementBcVec> &bc_disp_ptr,
579 std::map<std::string, boost::shared_ptr<ScalingMethod>> smv,
580 boost::shared_ptr<Range> ents_ptr = nullptr)
581 : FormsIntegrators<FaceUserDataOperator>::Assembly<PETSC>::OpBase(
582 row_field, row_field, OP::OPROW),
583 hybridDispPtr(hybrid_disp_ptr),
584 brokenBaseSideDataPtr(
585 broken_side_data_ptr), /*piolaStressPtr(piola_stress_ptr),*/
586 bcDispPtr(bc_disp_ptr), scalingMethodsMap(smv) {}
587
588protected:
589 MoFEMErrorCode iNtegrate(EntData &data);
590 boost::shared_ptr<MatrixDouble> hybridDispPtr;
591 boost::shared_ptr<std::vector<BrokenBaseSideData>> brokenBaseSideDataPtr;
592 // boost::shared_ptr<MatrixDouble> piolaStressPtr;
593 boost::shared_ptr<NormalDisplacementBcVec> bcDispPtr;
594 std::map<std::string, boost::shared_ptr<ScalingMethod>> scalingMethodsMap;
595};
596
597template <AssemblyType A>
599 : public FormsIntegrators<FaceUserDataOperator>::Assembly<A>::OpBase {
600
601 using OP =
602 typename FormsIntegrators<FaceUserDataOperator>::Assembly<A>::OpBase;
603
605 std::string row_field,
606 boost::shared_ptr<NormalDisplacementBcVec> &bc_disp_ptr,
607 std::map<std::string, boost::shared_ptr<ScalingMethod>> smv,
608 boost::shared_ptr<Range> ents_ptr = nullptr)
609 : OP(row_field, row_field, OP::OPROWCOL), bcDispPtr(bc_disp_ptr),
610 scalingMethodsMap(smv) {}
611
612protected:
613 MoFEMErrorCode iNtegrate(EntData &row_data, EntData &col_data);
614 boost::shared_ptr<NormalDisplacementBcVec> bcDispPtr;
615 std::map<std::string, boost::shared_ptr<ScalingMethod>> scalingMethodsMap;
616};
617
618template <AssemblyType A>
620 : public FormsIntegrators<FaceUserDataOperator>::Assembly<A>::OpBrokenBase {
621
622 using OP = typename FormsIntegrators<FaceUserDataOperator>::Assembly<
624
626 std::string row_field,
627 boost::shared_ptr<std::vector<BrokenBaseSideData>> broken_base_side_data,
628 boost::shared_ptr<NormalDisplacementBcVec> &bc_disp_ptr,
629 std::map<std::string, boost::shared_ptr<ScalingMethod>> smv,
630 boost::shared_ptr<Range> ents_ptr = nullptr)
631 : OP(row_field, broken_base_side_data, false, false, ents_ptr),
632 bcDispPtr(bc_disp_ptr), scalingMethodsMap(smv) {}
633
634protected:
635 MoFEMErrorCode iNtegrate(EntData &row_data, EntData &col_data);
636 boost::shared_ptr<NormalDisplacementBcVec> bcDispPtr;
637 std::map<std::string, boost::shared_ptr<ScalingMethod>> scalingMethodsMap;
638};
639
640struct OpNormalDispRhsBc : public OpNormalDispBcRhsImpl<PETSC, GAUSS> {
642 using OP::OpNormalDispBcRhsImpl;
643
644protected:
645 MoFEMErrorCode iNtegrate(EntData &data);
646};
647
651
652protected:
653 MoFEMErrorCode iNtegrate(EntData &row_data, EntData &col_data);
654};
655
659
660protected:
661 MoFEMErrorCode iNtegrate(EntData &row_data, EntData &col_data);
662};
663
664template <AssemblyType A, IntegrationType I> struct OpAnalyticalDispBcImpl;
665
666template <AssemblyType A>
668 : public FormsIntegrators<FaceUserDataOperator>::Assembly<A>::OpBrokenBase {
669
670 using OP = typename FormsIntegrators<FaceUserDataOperator>::Assembly<
672
674 boost::shared_ptr<std::vector<BrokenBaseSideData>> broken_base_side_data,
675 boost::shared_ptr<AnalyticalDisplacementBcVec> &bc_disp_ptr,
676 std::map<std::string, boost::shared_ptr<ScalingMethod>> smv,
677 boost::shared_ptr<Range> ents_ptr = nullptr)
678 : OP(broken_base_side_data, ents_ptr), bcDispPtr(bc_disp_ptr),
679 scalingMethodsMap(smv) {}
680
681protected:
682 MoFEMErrorCode iNtegrate(EntData &data);
683 boost::shared_ptr<AnalyticalDisplacementBcVec> bcDispPtr;
684 std::map<std::string, boost::shared_ptr<ScalingMethod>> scalingMethodsMap;
685};
686
687struct OpAnalyticalDispBc : public OpAnalyticalDispBcImpl<PETSC, GAUSS> {
689 using OP::OpAnalyticalDispBcImpl;
690
691protected:
692 MoFEMErrorCode iNtegrate(EntData &data);
693};
694
696 OpSpatialEquilibrium_dw_dP(std::string row_field, std::string col_field,
697 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
698 const bool assemble_off = false)
699 : OpAssembleVolume(row_field, col_field, data_ptr, OPROWCOL,
700 assemble_off) {
701 sYmm = false;
702 }
703 MoFEMErrorCode integrate(EntData &row_data, EntData &col_data);
704};
705
707 const double alphaW;
708 const double alphaRho;
709 OpSpatialEquilibrium_dw_dw(std::string row_field, std::string col_field,
710 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
711 const double alpha, const double rho)
712 : OpAssembleVolume(row_field, col_field, data_ptr, OPROWCOL, false),
713 alphaW(alpha), alphaRho(rho) {
714 sYmm = true;
715 }
716 MoFEMErrorCode integrate(EntData &row_data, EntData &col_data);
717};
718
720 OpSpatialPhysical_du_dP(std::string row_field, std::string col_field,
721 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
722 const bool assemble_off = false)
723 : OpAssembleVolume(row_field, col_field, data_ptr, OPROWCOL,
724 assemble_off) {
725 sYmm = false;
726 }
727
728 MoFEMErrorCode integrate(EntData &row_data, EntData &col_data);
729};
730
732 OpSpatialPhysical_du_dBubble(std::string row_field, std::string col_field,
733 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
734 const bool assemble_off = false)
735 : OpAssembleVolume(row_field, col_field, data_ptr, OPROWCOL,
736 assemble_off) {
737 sYmm = false;
738 }
739
740 MoFEMErrorCode integrate(EntData &row_data, EntData &col_data);
741};
742
744 using OpAssembleVolume::OpAssembleVolume;
745 OpSpatialPhysical_du_domega(std::string row_field, std::string col_field,
746 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
747 const bool assemble_off)
748 : OpAssembleVolume(row_field, col_field, data_ptr, OPROWCOL,
749 assemble_off) {
750 sYmm = false;
751 }
752 MoFEMErrorCode integrate(EntData &row_data, EntData &col_data);
753};
754
756 OpSpatialRotation_domega_du(std::string row_field, std::string col_field,
757 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
758 double alpha_omega)
759 : OpAssembleVolume(row_field, col_field, data_ptr, OPROWCOL, false) {
760 sYmm = false;
761 }
762 MoFEMErrorCode integrate(EntData &row_data, EntData &col_data);
763
764private:
765};
766
768 OpSpatialRotation_domega_dP(std::string row_field, std::string col_field,
769 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
770 const bool assemble_off)
771 : OpAssembleVolume(row_field, col_field, data_ptr, OPROWCOL,
772 assemble_off) {
773 sYmm = false;
774 }
775 MoFEMErrorCode integrate(EntData &row_data, EntData &col_data);
776};
777
780 std::string row_field, std::string col_field,
781 boost::shared_ptr<DataAtIntegrationPts> data_ptr, const bool assemble_off)
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
791 std::string row_field, std::string col_field,
792 boost::shared_ptr<DataAtIntegrationPts> data_ptr, double alpha_omega)
793 : OpAssembleVolume(row_field, col_field, data_ptr, OPROWCOL, false),
794 alphaOmega(alpha_omega) {
795 sYmm = false;
796 }
797 MoFEMErrorCode integrate(EntData &row_data, EntData &col_data);
798
799private:
801};
802
804 OpSpatialConsistency_dP_dP(std::string row_field, std::string col_field,
805 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
806 const bool has_nonhomogeneous_mat_block)
807 : OpAssembleVolume(row_field, col_field, data_ptr, OPROWCOL, false),
808 hasNonhomogeneousMatBlock(has_nonhomogeneous_mat_block) {
809 sYmm = false;
810 }
811 MoFEMErrorCode integrate(EntData &row_data, EntData &col_data);
812
813private:
814 template <int S>
815 MoFEMErrorCode integrateImpl(EntData &row_data, EntData &col_data);
817};
818
821 std::string row_field, std::string col_field,
822 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
823 const bool has_nonhomogeneous_mat_block)
824 : OpAssembleVolume(row_field, col_field, data_ptr, OPROWCOL, false),
825 hasNonhomogeneousMatBlock(has_nonhomogeneous_mat_block) {
826 sYmm = false;
827 }
828 MoFEMErrorCode integrate(EntData &row_data, EntData &col_data);
829
830private:
831 template <int S>
832 MoFEMErrorCode integrateImpl(EntData &row_data, EntData &col_data);
834};
835
838 std::string row_field, std::string col_field,
839 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
840 const bool has_nonhomogeneous_mat_block)
841 : OpAssembleVolume(row_field, col_field, data_ptr, OPROWCOL, true),
842 hasNonhomogeneousMatBlock(has_nonhomogeneous_mat_block) {
843 sYmm = false;
844 }
845 MoFEMErrorCode integrate(EntData &row_data, EntData &col_data);
846
847private:
848 template <int S>
849 MoFEMErrorCode integrateImpl(EntData &row_data, EntData &col_data);
851};
852
854 FormsIntegrators<VolUserDataOperator>::Assembly<A>::BiLinearForm<
855 GAUSS>::OpMass<3, 9>;
856
858 FormsIntegrators<VolUserDataOperator>::Assembly<A>::BiLinearForm<
859 GAUSS>::OpMass<9, 9>;
860
862 OpStressGram_dBubble_dP(std::string row_field, std::string col_field,
863 boost::shared_ptr<DataAtIntegrationPts> data_ptr)
864 : OpAssembleVolume(row_field, col_field, data_ptr, OPROWCOL, true) {
865 sYmm = false;
866 }
867 MoFEMErrorCode integrate(EntData &row_data, EntData &col_data);
868};
869
872 std::string row_field, std::string col_field,
873 boost::shared_ptr<DataAtIntegrationPts> data_ptr, const bool assemble_off)
874 : OpAssembleVolume(row_field, col_field, data_ptr, OPROWCOL,
875 assemble_off) {
876 sYmm = false;
877 }
878 MoFEMErrorCode integrate(EntData &row_data, EntData &col_data);
879
880private:
881};
882
885 std::string row_field, std::string col_field,
886 boost::shared_ptr<DataAtIntegrationPts> data_ptr, const bool assemble_off)
887 : OpAssembleVolume(row_field, col_field, data_ptr, OPROWCOL,
888 assemble_off) {
889 sYmm = false;
890 }
891 MoFEMErrorCode integrate(EntData &row_data, EntData &col_data);
892
893private:
894};
895
897 : public VolumeElementForcesAndSourcesCoreOnSide::UserDataOperator {
898
899 using OP = VolumeElementForcesAndSourcesCoreOnSide::UserDataOperator;
900
901 moab::Interface &postProcMesh;
902 std::vector<EntityHandle> &mapGaussPts;
903 boost::shared_ptr<DataAtIntegrationPts> dataAtPts;
904
905 OpPostProcDataStructure(moab::Interface &post_proc_mesh,
906 std::vector<EntityHandle> &map_gauss_pts,
907 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
908 int sense)
909 : OP(NOSPACE, UserDataOperator::OPSPACE), postProcMesh(post_proc_mesh),
910 mapGaussPts(map_gauss_pts), dataAtPts(data_ptr), tagSense(sense) {}
911
912 MoFEMErrorCode doWork(int side, EntityType type, EntData &data);
913
914private:
916};
917
919 OpSpatialPrj(std::string row_field,
920 boost::shared_ptr<DataAtIntegrationPts> data_ptr)
921 : OpAssembleVolume(row_field, data_ptr, OPROW) {}
922 MoFEMErrorCode integrate(EntData &row_data);
923};
924
926 OpSpatialPrj_dx_dx(std::string row_field, std::string col_field,
927 boost::shared_ptr<DataAtIntegrationPts> data_ptr)
928 : OpAssembleVolume(row_field, col_field, data_ptr, OPROWCOL, false) {
929 // FIXME: That is symmetric
930 sYmm = false;
931 }
932 MoFEMErrorCode integrate(EntData &row_data, EntData &col_data);
933};
934
936 OpSpatialPrj_dx_dw(std::string row_field, std::string col_field,
937 boost::shared_ptr<DataAtIntegrationPts> data_ptr)
938 : OpAssembleVolume(row_field, col_field, data_ptr, OPROWCOL, false) {
939 sYmm = false;
940 }
941 MoFEMErrorCode integrate(EntData &row_data, EntData &col_data);
942};
943
945 : public VolumeElementForcesAndSourcesCoreOnSide::UserDataOperator {
946
947 // @note This is not on the side, since, integrate energy in the volume
948 using OP = VolumeElementForcesAndSourcesCoreOnSide::UserDataOperator;
949
950 OpFaceSideMaterialForce(boost::shared_ptr<DataAtIntegrationPts> data_ptr)
951 : OP(NOSPACE, OPSPACE), dataAtPts(data_ptr) {}
952
953 MoFEMErrorCode doWork(int side, EntityType type, EntData &data);
954
955private:
956 boost::shared_ptr<DataAtIntegrationPts>
957 dataAtPts; ///< data at integration pts
958};
959
961 : public FaceElementForcesAndSourcesCore::UserDataOperator {
962
963 // @note This is not on the side, since, integrate energy in the volume
964 using OP = FaceElementForcesAndSourcesCore::UserDataOperator;
965
966 OpFaceMaterialForce(boost::shared_ptr<DataAtIntegrationPts> data_ptr)
967 : OP(NOSPACE, OPSPACE), dataAtPts(data_ptr) {}
968
969 MoFEMErrorCode doWork(int side, EntityType type, EntData &data);
970
971private:
972 boost::shared_ptr<DataAtIntegrationPts>
973 dataAtPts; ///< data at integration pts
974};
975
976template <int FE_DIM, int PROBLEM_DIM, int SPACE_DIM> struct AddHOOps;
977
978template <> struct AddHOOps<2, 3, 3> {
979 AddHOOps() = delete;
980 static MoFEMErrorCode
981 add(boost::ptr_deque<ForcesAndSourcesCore::UserDataOperator> &pipeline,
982 std::vector<FieldSpace> space, std::string geom_field_name,
983 boost::shared_ptr<Range> crack_front_edges_ptr);
984};
985
986template <> struct AddHOOps<2, 2, 3> {
987 AddHOOps() = delete;
988 static MoFEMErrorCode
989 add(boost::ptr_deque<ForcesAndSourcesCore::UserDataOperator> &pipeline,
990 std::vector<FieldSpace> space, std::string geom_field_name,
991 boost::shared_ptr<Range> crack_front_edges_ptr);
992};
993
994template <> struct AddHOOps<3, 3, 3> {
995 AddHOOps() = delete;
996 static MoFEMErrorCode
997 add(boost::ptr_deque<ForcesAndSourcesCore::UserDataOperator> &pipeline,
998 std::vector<FieldSpace> space, std::string geom_field_name,
999 boost::shared_ptr<Range> crack_front_edges_ptr,
1000 boost::shared_ptr<MatrixDouble> jac = nullptr,
1001 boost::shared_ptr<VectorDouble> det = nullptr,
1002 boost::shared_ptr<MatrixDouble> inv_jac = nullptr);
1003};
1004
1006 FormsIntegrators<FaceElementForcesAndSourcesCore::UserDataOperator>::
1007 Assembly<A>::LinearForm<GAUSS>::OpBaseTimesVector<1, SPACE_DIM,
1008 SPACE_DIM>;
1009
1010template <typename OP>
1011struct OpStabBrokenBaseImpl : public OpBrokenBaseImpl<OP> {
1012
1013 using BASE = OpBrokenBaseImpl<OP>;
1014 using BASE::BASE;
1015
1016 MoFEMErrorCode doWork(int row_side, EntityType row_type,
1017 EntitiesFieldData::EntData &row_data) {
1019
1020 if (OP::entsPtr) {
1021 if (OP::entsPtr->find(this->getFEEntityHandle()) == OP::entsPtr->end())
1023 }
1024
1025#ifndef NDEBUG
1026 if (!BASE::brokenBaseSideData) {
1027 SETERRQ(PETSC_COMM_SELF, MOFEM_IMPOSSIBLE_CASE, "space not set");
1028 }
1029#endif // NDEBUG
1030
1031 auto do_work_rhs = [this](int row_side, EntityType row_type,
1032 EntitiesFieldData::EntData &row_data) {
1034 // get number of dofs on row
1035 OP::nbRows = row_data.getIndices().size();
1036 if (!OP::nbRows)
1038 // get number of integration points
1039 OP::nbIntegrationPts = OP::getGaussPts().size2();
1040 // get row base functions
1041 OP::nbRowBaseFunctions = OP::getNbOfBaseFunctions(row_data);
1042 // resize and clear the right hand side vector
1043 OP::locF.resize(OP::nbRows, false);
1044 OP::locF.clear();
1045 // integrate local vector
1046 CHKERR this->iNtegrate(row_data);
1047 // assemble local vector
1048 CHKERR this->aSsemble(row_data);
1050 };
1051
1052 auto do_work_lhs = [this](int row_side, int col_side, EntityType row_type,
1053 EntityType col_type,
1054 EntitiesFieldData::EntData &row_data,
1055 EntitiesFieldData::EntData &col_data) {
1057
1058 auto check_if_assemble_transpose = [&] {
1059 if (this->sYmm) {
1060 if (OP::rowSide != OP::colSide || OP::rowType != OP::colType)
1061 return true;
1062 else
1063 return false;
1064 } else if (OP::assembleTranspose) {
1065 return true;
1066 }
1067 return false;
1068 };
1069
1070 OP::rowSide = row_side;
1071 OP::rowType = row_type;
1072 OP::colSide = col_side;
1073 OP::colType = col_type;
1074 OP::nbCols = col_data.getIndices().size();
1075 OP::locMat.resize(OP::nbRows, OP::nbCols, false);
1076 OP::locMat.clear();
1077 CHKERR this->iNtegrate(row_data, col_data);
1078 CHKERR this->aSsemble(row_data, col_data, check_if_assemble_transpose());
1080 };
1081
1082 switch (OP::opType) {
1083 case OP::OPROW:
1084
1085 OP::nbRows = row_data.getIndices().size();
1086 if (!OP::nbRows)
1088 OP::nbIntegrationPts = OP::getGaussPts().size2();
1089 OP::nbRowBaseFunctions = OP::getNbOfBaseFunctions(row_data);
1090
1091 if (!OP::nbRows)
1093
1094 for (auto &bd : *BASE::brokenBaseSideData) {
1095
1096#ifndef NDEBUG
1097 if (!bd.getData().getNSharedPtr(bd.getData().getBase())) {
1098 SETERRQ(PETSC_COMM_SELF, MOFEM_DATA_INCONSISTENCY,
1099 "base functions not set");
1100 }
1101#endif
1102
1103 CHKERR do_work_lhs(
1104
1105 // side
1106 row_side, bd.getSide(),
1107
1108 // type
1109 row_type, bd.getType(),
1110
1111 // row_data
1112 row_data, bd.getData()
1113
1114 );
1115 }
1116
1117 break;
1118 case OP::OPSPACE:
1119 for (auto &bd : *BASE::brokenBaseSideData) {
1120 fluxMatPtr = boost::shared_ptr<MatrixDouble>(BASE::brokenBaseSideData,
1121 &bd.getFlux());
1122 CHKERR do_work_rhs(bd.getSide(), bd.getType(), bd.getData());
1123 }
1124 break;
1125 default:
1127 (std::string("wrong op type ") +
1128 OpBaseDerivativesBase::OpTypeNames[OP::opType])
1129 .c_str());
1130 }
1131
1133 }
1134
1135protected:
1136 boost::weak_ptr<MatrixDouble> fluxMatPtr;
1137};
1138
1140 : public OpStabBrokenBaseImpl<OpBaseTimesVectorFace> {
1141
1144 boost::shared_ptr<std::vector<BrokenBaseSideData>> broken_base_side_data,
1145 boost::shared_ptr<MatrixDouble> vec,
1146 ScalarFun beta_coeff = [](double, double, double) constexpr { return 1; },
1147 boost::shared_ptr<Range> ents_ptr = nullptr);
1148};
1149
1151 : public OpStabBrokenBaseImpl<OpBaseTimesVectorFace> {
1152
1155 boost::shared_ptr<std::vector<BrokenBaseSideData>> broken_base_side_data,
1156 ScalarFun beta_coeff = [](double, double, double) constexpr { return 1; },
1157 boost::shared_ptr<Range> ents_ptr = nullptr);
1158
1159protected:
1160 MoFEMErrorCode doWork(int row_side, EntityType row_type,
1161 EntitiesFieldData::EntData &row_data);
1162};
1163
1165
1168 const std::string row_field,
1169 boost::shared_ptr<std::vector<BrokenBaseSideData>> broken_base_side_data,
1170 ScalarFun beta_coeff, boost::shared_ptr<Range> ents_ptr = nullptr);
1171
1172protected:
1173 MoFEMErrorCode iNtegrate(EntitiesFieldData::EntData &data);
1174 boost::shared_ptr<std::vector<BrokenBaseSideData>> brokenBaseSideDataPtr;
1175};
1176
1178 FormsIntegrators<FaceElementForcesAndSourcesCore::UserDataOperator>::
1179 Assembly<A>::BiLinearForm<GAUSS>::OpMass<1, SPACE_DIM>;
1180
1181struct OpHyrbridBaseBrokenBase : public OpStabBrokenBaseImpl<OpMassVectorFace> {
1182
1185 std::string row_field,
1186 boost::shared_ptr<std::vector<BrokenBaseSideData>> broken_base_side_data,
1187 ScalarFun beta, const bool assmb_transpose, const bool only_transpose,
1188 boost::shared_ptr<Range> ents_ptr = nullptr);
1189};
1190
1191struct OpBrokenBaseBrokenBase : public OpStabBrokenBaseImpl<OpMassVectorFace> {
1192
1195 boost::shared_ptr<std::vector<BrokenBaseSideData>> broken_base_side_data,
1196 ScalarFun beta, boost::shared_ptr<Range> ents_ptr = nullptr);
1197
1198 MoFEMErrorCode doWork(int row_side, EntityType row_type,
1199 EntitiesFieldData::EntData &row_data);
1200};
1201
1203
1205
1207 boost::shared_ptr<std::vector<BrokenBaseSideData>> broken_base_side_data,
1208 boost::shared_ptr<BcDispVec> &bc_disp_ptr,
1209 std::map<std::string, boost::shared_ptr<ScalingMethod>> smv,
1210 ScalarFun tau_coeff, boost::shared_ptr<Range> ents_ptr = nullptr)
1211 : OpBrokenBaseTimesBrokenDisp(broken_base_side_data, tau_coeff, ents_ptr),
1212 bcDispPtr(bc_disp_ptr), scalingMethodsMap(smv) {}
1213
1214protected:
1215 MoFEMErrorCode iNtegrate(EntData &data);
1216 boost::shared_ptr<BcDispVec> bcDispPtr;
1217 std::map<std::string, boost::shared_ptr<ScalingMethod>> scalingMethodsMap;
1218};
1219
1221
1223
1225 boost::shared_ptr<std::vector<BrokenBaseSideData>> broken_base_side_data,
1226 boost::shared_ptr<BcDispVec> &bc_disp_ptr, ScalarFun tau_coeff,
1227 boost::shared_ptr<Range> ents_ptr = nullptr)
1228 : OP(broken_base_side_data, tau_coeff, ents_ptr), bcDispPtr(bc_disp_ptr) {
1229 }
1230
1231protected:
1232 MoFEMErrorCode iNtegrate(EntData &row_data, EntData &col_data);
1233 boost::shared_ptr<BcDispVec> bcDispPtr;
1234};
1235
1238
1240
1242 boost::shared_ptr<std::vector<BrokenBaseSideData>> broken_base_side_data,
1243 boost::shared_ptr<AnalyticalDisplacementBcVec> &bc_disp_ptr,
1244 std::map<std::string, boost::shared_ptr<ScalingMethod>> smv,
1245 ScalarFun tau_coeff, boost::shared_ptr<Range> ents_ptr = nullptr)
1246 : OpBrokenBaseTimesBrokenDisp(broken_base_side_data, tau_coeff, ents_ptr),
1247 bcDispPtr(bc_disp_ptr), scalingMethodsMap(smv) {}
1248
1249protected:
1250 MoFEMErrorCode iNtegrate(EntData &data);
1251 boost::shared_ptr<AnalyticalDisplacementBcVec> bcDispPtr;
1252 std::map<std::string, boost::shared_ptr<ScalingMethod>> scalingMethodsMap;
1253};
1254
1256
1258
1260 boost::shared_ptr<std::vector<BrokenBaseSideData>> broken_base_side_data,
1261 boost::shared_ptr<AnalyticalDisplacementBcVec> &bc_disp_ptr,
1262 ScalarFun tau_coeff, boost::shared_ptr<Range> ents_ptr = nullptr)
1263 : OP(broken_base_side_data, tau_coeff, ents_ptr), bcDispPtr(bc_disp_ptr) {
1264 }
1265
1266protected:
1267 MoFEMErrorCode iNtegrate(EntData &row_data, EntData &col_data);
1268 boost::shared_ptr<AnalyticalDisplacementBcVec> bcDispPtr;
1269};
1270
1272
1274
1276 boost::shared_ptr<std::vector<BrokenBaseSideData>> broken_base_side_data,
1277 boost::shared_ptr<BcRotVec> &bc_ptr,
1278 std::map<std::string, boost::shared_ptr<ScalingMethod>> smv,
1279 ScalarFun tau_coeff, boost::shared_ptr<Range> ents_ptr = nullptr)
1280 : OpBrokenBaseTimesBrokenDisp(broken_base_side_data, tau_coeff, ents_ptr),
1281 bcRotPtr(bc_ptr), scalingMethodsMap(smv) {}
1282
1283protected:
1284 MoFEMErrorCode iNtegrate(EntData &data);
1285 boost::shared_ptr<BcRotVec> bcRotPtr;
1286 std::map<std::string, boost::shared_ptr<ScalingMethod>> scalingMethodsMap;
1287};
1288
1290
1292
1294 boost::shared_ptr<std::vector<BrokenBaseSideData>> broken_base_side_data,
1295 boost::shared_ptr<BcRotVec> &bc_ptr, ScalarFun tau_coeff,
1296 boost::shared_ptr<Range> ents_ptr = nullptr)
1297 : OP(broken_base_side_data, tau_coeff, ents_ptr), bcRotPtr(bc_ptr) {
1298 }
1299
1300protected:
1301 MoFEMErrorCode iNtegrate(EntData &row_data, EntData &col_data);
1302 boost::shared_ptr<BcRotVec> bcRotPtr;
1303};
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
virtual MoFEMErrorCode integrate(int row_side, EntityType row_type, EntData &data)
VectorDouble nF
local right hand side vector
MoFEMErrorCode doWork(int row_side, int col_side, EntityType row_type, EntityType col_type, EntData &row_data, EntData &col_data)
virtual MoFEMErrorCode assemble(int row_side, int col_side, EntityType row_type, EntityType col_type, EntData &row_data, EntData &col_data)
virtual MoFEMErrorCode integrate(EntData &data)
MoFEMErrorCode doWork(int side, EntityType type, EntData &data)
virtual MoFEMErrorCode assemble(EntData &data)
OpAssembleBasic(const std::string &field_name, boost::shared_ptr< DataAtIntegrationPts > data_ptr, const char type)
virtual MoFEMErrorCode integrate(EntData &row_data, EntData &col_data)
boost::function< double()> ScaleOff
boost::shared_ptr< DataAtIntegrationPts > dataAtPts
data at integration pts
OpAssembleBasic(const FieldSpace space)
virtual MoFEMErrorCode assemble(int row_side, EntityType row_type, EntData &data)
OpAssembleBasic(std::string row_field, std::string col_field, boost::shared_ptr< DataAtIntegrationPts > data_ptr, const char type, const bool assemble_symmetry, ScaleOff scale_off=[]() { return 1;})
MoFEMErrorCode doWork(int side, EntityType type, EntData &data)
Operator for linear form, usually to calculate values on right hand side.
MoFEMErrorCode doWork(int row_side, int col_side, EntityType row_type, EntityType col_type, EntData &row_data, EntData &col_data)
Operator for bi-linear form, usually to calculate values on left hand side.
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)
boost::shared_ptr< DataAtIntegrationPts > dataAtPts
data at integration pts
MoFEMErrorCode doWork(int side, EntityType type, EntData &data)
std::array< double, 6 > & reactionVec
OpCalculateReactionForces(boost::shared_ptr< DataAtIntegrationPts > data_ptr, std::string block_name, Range block_entities, std::array< double, 6 > &reaction_vec)
MoFEMErrorCode doWork(int side, EntityType type, EntData &data)
Operator for linear form, usually to calculate values on right hand side.
boost::shared_ptr< DataAtIntegrationPts > dataAtPts
data at integration pts
OpCalculateRotationAndSpatialGradient(boost::shared_ptr< DataAtIntegrationPts > data_ptr, double alpha_omega=0)
boost::shared_ptr< DataAtIntegrationPts > dataAtPts
data at integration pts
OpCalculateTractionFromSideEl(boost::shared_ptr< DataAtIntegrationPts > data_ptr)
MoFEMErrorCode doWork(int side, EntityType type, EntData &data)
std::map< std::string, boost::shared_ptr< ScalingMethod > > scalingMethodsMap
OpDispBcImpl(boost::shared_ptr< std::vector< BrokenBaseSideData > > broken_base_side_data, boost::shared_ptr< BcDispVec > &bc_disp_ptr, std::map< std::string, boost::shared_ptr< ScalingMethod > > smv, boost::shared_ptr< Range > ents_ptr=nullptr)
MoFEMErrorCode iNtegrate(EntData &data)
boost::shared_ptr< BcDispVec > bcDispPtr
MoFEMErrorCode iNtegrate(EntData &data)
MoFEMErrorCode doWork(int side, EntityType type, EntData &data)
boost::shared_ptr< DataAtIntegrationPts > dataAtPts
data at integration pts
FaceElementForcesAndSourcesCore::UserDataOperator OP
OpFaceMaterialForce(boost::shared_ptr< DataAtIntegrationPts > data_ptr)
MoFEMErrorCode doWork(int side, EntityType type, EntData &data)
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)
OpSpatialRotation_domega_domega(std::string row_field, std::string col_field, boost::shared_ptr< DataAtIntegrationPts > data_ptr, double alpha_omega)
MoFEMErrorCode integrate(EntData &row_data, EntData &col_data)
OpSpatialRotation_domega_du(std::string row_field, std::string col_field, boost::shared_ptr< DataAtIntegrationPts > data_ptr, double alpha_omega)
MoFEMErrorCode integrate(EntData &row_data, EntData &col_data)
OpSpatialRotation(const std::string &field_name, boost::shared_ptr< DataAtIntegrationPts > data_ptr, double alpha_omega)
MoFEMErrorCode integrate(EntData &data)
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