v0.16.3
Loading...
Searching...
No Matches
EshelbianOperators.hpp
Go to the documentation of this file.
1/**
2 * @file EshelbianOperators.hpp
3 * @author your name (you@domain.com)
4 * @brief
5 * @version 0.1
6 * @date 2024-12-31
7 *
8 * @copyright Copyright (c) 2024
9 *
10 */
11
13
14 OpJacobian(const bool eval_rhs, const bool eval_lhs,
15 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
16 boost::shared_ptr<PhysicalEquations> physics_ptr)
17 : UserDataOperator(NOSPACE, OPSPACE), evalRhs(eval_rhs),
18 evalLhs(eval_lhs), dataAtPts(data_ptr), physicsPtr(physics_ptr) {}
19
20 virtual MoFEMErrorCode evaluateRhs(EntData &data) = 0;
21 virtual MoFEMErrorCode evaluateLhs(EntData &data) = 0;
22
23 MoFEMErrorCode doWork(int side, EntityType type, EntData &data);
24
25protected:
26 OpJacobian(FieldSpace space, UserDataOperator::OpType op_type)
27 : UserDataOperator(space, op_type) {}
28
30
31 bool evalRhs = false;
32 bool evalLhs = false;
33
34 boost::shared_ptr<DataAtIntegrationPts>
35 dataAtPts; ///< data at integration pts
36 boost::shared_ptr<PhysicalEquations>
37 physicsPtr; ///< material physical equations
38};
39
40template <typename T> struct OpAssembleBasic : public T {
41
42 using ScaleOff = boost::function<double()>;
43 const bool assembleSymmetry;
44
45 boost::shared_ptr<DataAtIntegrationPts>
46 dataAtPts; ///< data at integration pts
47
48 OpAssembleBasic(const std::string &field_name,
49 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
50 const char type)
51 : T(field_name, type), assembleSymmetry(false), dataAtPts(data_ptr) {}
52
54 std::string row_field, std::string col_field,
55 boost::shared_ptr<DataAtIntegrationPts> data_ptr, const char type,
56 const bool assemble_symmetry, ScaleOff scale_off = []() { return 1; })
57 : T(row_field, col_field, type, false),
58 assembleSymmetry(assemble_symmetry), dataAtPts(data_ptr),
59 scaleOff(scale_off) {}
60
62 : T(space, T::OPSPACE), assembleSymmetry(false) {}
63
64 VectorDouble nF; ///< local right hand side vector
65 MatrixDouble K; ///< local tangent matrix
66 MatrixDouble transposeK;
67
69
70 virtual MoFEMErrorCode integrate(EntData &) {
72 SETERRQ(PETSC_COMM_SELF, MOFEM_NOT_IMPLEMENTED, "Not yet implemented");
74 }
75
76 virtual MoFEMErrorCode integrate(int, EntityType, EntData &data) {
80 }
81
82 virtual MoFEMErrorCode assemble(EntData &data) {
84 double *vec_ptr = nF.data().data();
85 int nb_dofs = data.getIndices().size();
86 int *ind_ptr = data.getIndices().data().data();
87 CHKERR VecSetValues(this->getTSf(), nb_dofs, ind_ptr, vec_ptr, ADD_VALUES);
89 }
90
91 virtual MoFEMErrorCode assemble(int, EntityType, EntData &data) {
95 }
96
97 virtual MoFEMErrorCode integrate(EntData &, EntData &) {
99 SETERRQ(PETSC_COMM_SELF, MOFEM_NOT_IMPLEMENTED, "Not yet implemented");
101 }
102
103 virtual MoFEMErrorCode assemble(int, int, EntityType, EntityType,
104 EntData &row_data, EntData &col_data) {
106
107 if (assembleSymmetry) {
108 const auto row_nb_dofs = row_data.getIndices().size();
109 const auto col_nb_dofs = col_data.getIndices().size();
110 transposeK.resize(col_nb_dofs, row_nb_dofs, false);
111 noalias(transposeK) = trans(K);
112 transposeK *= scaleOff();
113 }
114
115 CHKERR MatSetValues<AssemblyTypeSelector<A>>(this->getTSB(), row_data,
116 col_data, K, ADD_VALUES);
117 if (assembleSymmetry) {
118 CHKERR MatSetValues<AssemblyTypeSelector<A>>(
119 this->getTSB(), col_data, row_data, transposeK, ADD_VALUES);
120 }
121
123 }
124
125 MoFEMErrorCode doWork(int side, EntityType type, EntData &data) {
127 if (data.getIndices().empty())
129 nF.resize(data.getIndices().size(), false);
130 nF.clear();
131 CHKERR integrate(side, type, data);
132 CHKERR assemble(side, type, data);
134 }
135
136 MoFEMErrorCode doWork(int row_side, int col_side, EntityType row_type,
137 EntityType col_type, EntData &row_data,
138 EntData &col_data) {
140 if (row_data.getIndices().empty())
142 if (col_data.getIndices().empty())
144 K.resize(row_data.getIndices().size(), col_data.getIndices().size(), false);
145 K.clear();
146 CHKERR integrate(row_data, col_data);
147 CHKERR assemble(row_side, col_side, row_type, col_type, row_data, col_data);
149 }
150};
151
152struct OpAssembleVolume : public OpAssembleBasic<VolUserDataOperator> {
154 using ScaleOff = typename OP::ScaleOff;
155
157
158 MoFEMErrorCode assemble(int row_side, int col_side, EntityType row_type,
159 EntityType col_type, EntData &row_data,
160 EntData &col_data) {
162 CHKERR OP::assemble(row_side, col_side, row_type, col_type, row_data,
163 col_data);
164 constexpr bool store_matrices = false;
165 if constexpr (store_matrices) {
167 m.resize(K.size1(), K.size2(), false);
168 noalias(m) = K;
169 if (assembleSymmetry) {
171 m.resize(K.size2(), K.size1(), false);
172 noalias(m) = transposeK;
173 }
174 }
176 };
177
178protected:
179 static inline std::map<std::pair<std::string, std::string>, MatrixDouble>
181};
182
183struct OpAssembleFace : public OpAssembleBasic<FaceUserDataOperator> {
184 using OpAssembleBasic<FaceUserDataOperator>::OpAssembleBasic;
185};
186
188 using OpAssembleVolume::OpAssembleVolume;
189 MoFEMErrorCode doWork(int, EntityType, EntData &) {
191 SETERRQ(PETSC_COMM_SELF, MOFEM_NOT_IMPLEMENTED,
192 "OpAssembleVolumePositiveDefine not implemented");
194 }
195
196 MoFEMErrorCode doWork(int row_side, int col_side, EntityType row_type,
197 EntityType col_type, EntData &row_data,
198 EntData &col_data) {
200 if (row_data.getIndices().empty())
202 if (col_data.getIndices().empty())
204 K.resize(row_data.getIndices().size(), col_data.getIndices().size(), false);
205 K.clear();
206 CHKERR integrate(row_data, col_data);
207
208 constexpr bool run_psd = true;
209
210 if (run_psd) {
211
212 auto higham_method_one_pass = [&](MatrixDouble &mat) {
213 int n = mat.size1();
214 const int lda = n;
215 const int size = (n + 2) * n;
216 int lwork = size;
217 double *work = new double[size];
218
219 VectorDouble eig(n, 0.0);
220 MatrixDouble eigen_vec = prod(trans(mat), mat);
221 if (lapack_dsyev('V', 'U', n, eigen_vec.data().data(), lda,
222 eig.data().data(), work, lwork) > 0)
224 "The algorithm failed to compute eigenvalues.");
225 delete[] work;
226
227 for (auto &e : eig) {
228 constexpr double eps = std::numeric_limits<double>::epsilon();
229 e = std::max(std::sqrt(std::abs(e)), eps);
230 }
231
232 auto diagonal_matrix =
233 ublas::diagonal_matrix<double, ublas::row_major,
234 VecAllocator<double>>(n, eig.data());
235 MatrixDouble symm_mat;
236 symm_mat = prod(trans(eigen_vec), diagonal_matrix);
237 symm_mat = prod(symm_mat, eigen_vec);
238
239 MatrixDouble hat_m = (mat + symm_mat) / 2.0;
240
241 return hat_m;
242 };
243
244 auto hat_k = higham_method_one_pass(K);
245 K.swap(hat_k);
246 }
247
248 CHKERR assemble(row_side, col_side, row_type, col_type, row_data, col_data);
250 }
251
252private:
253};
254
255/** @brief Calculate q = 3 K_ext epsilon_ext at integration points. */
258 VectorPtr external_pressure_ptr,
259 boost::shared_ptr<ExternalStrainVec> external_strain_vec_ptr,
260 std::map<std::string, boost::shared_ptr<ScalingMethod>> smv);
261
262 MoFEMErrorCode doWork(int side, EntityType type, EntData &data) override;
263
264private:
266 boost::shared_ptr<ExternalStrainVec> externalStrainVecPtr;
267 std::map<std::string, boost::shared_ptr<ScalingMethod>> scalingMethodsMap;
268};
269
271
273 boost::shared_ptr<DataAtIntegrationPts> data_ptr)
275 MoFEMErrorCode doWork(int side, EntityType type, EntData &data);
276
277private:
278 boost::shared_ptr<DataAtIntegrationPts>
279 dataAtPts; ///< data at integration pts
280};
281
284 boost::shared_ptr<DataAtIntegrationPts> data_ptr)
285 : SideEleOp(NOSPACE, SideEleOp::OPSPACE), dataAtPts(data_ptr) {
286 std::fill(&doEntities[MBVERTEX], &doEntities[MBMAXTYPE], false);
287 for (auto t = moab::CN::TypeDimensionMap[SPACE_DIM].first;
288 t <= moab::CN::TypeDimensionMap[SPACE_DIM].second; ++t)
289 doEntities[t] = true;
290 sYmm = false;
291 }
292 MoFEMErrorCode doWork(int side, EntityType type, EntData &data);
293
294private:
295 boost::shared_ptr<DataAtIntegrationPts>
296 dataAtPts; ///< data at integration pts
297};
298
299struct OpCalculateReactionForces : public FaceUserDataOperator {
300 OpCalculateReactionForces(boost::shared_ptr<DataAtIntegrationPts> data_ptr,
301 std::string block_name, Range block_entities,
302 std::array<double, 6> &reaction_vec)
303 : FaceUserDataOperator(NOSPACE, OPSPACE), dataAtPts(data_ptr),
304 blockEntities(block_entities), blockName(block_name),
305 reactionVec(reaction_vec) {}
306 MoFEMErrorCode doWork(int side, EntityType type, EntData &data);
307
308private:
309 boost::shared_ptr<DataAtIntegrationPts>
310 dataAtPts; ///< data at integration pts
312 std::string blockName;
313 std::array<double, 6> &reactionVec;
314};
315
318 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
319 const double alpha, const double rho)
320 : OpAssembleVolume(field_name, data_ptr, OPROW), alphaW(alpha),
321 alphaRho(rho) {}
322 MoFEMErrorCode integrate(EntData &data);
323
324private:
325 const double alphaW;
326 const double alphaRho;
327};
328
330 OpSpatialRotation(const std::string &field_name,
331 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
332 double alpha_r, double alpha_omega, double alpha_viscous_r,
333 double alpha_viscous_omega)
334 : OpAssembleVolume(field_name, data_ptr, OPROW), alphaR(alpha_r),
335 alphaOmega(alpha_omega), alphaViscousR(alpha_viscous_r),
336 alphaViscousOmega(alpha_viscous_omega) {}
337 MoFEMErrorCode integrate(EntData &data);
338
339private:
340 double alphaR;
344};
345
348 boost::shared_ptr<DataAtIntegrationPts> data_ptr)
349 : OpAssembleVolume(field_name, data_ptr, OPROW) {}
350 MoFEMErrorCode integrate(EntData &data);
351
352private:
353};
354
357 boost::shared_ptr<DataAtIntegrationPts> data_ptr)
358 : OpAssembleVolume(field_name, data_ptr, OPROW) {}
359 MoFEMErrorCode integrate(EntData &data);
360
361private:
362};
363
366 boost::shared_ptr<DataAtIntegrationPts> data_ptr)
367 : OpAssembleVolume(field_name, data_ptr, OPROW) {}
368 MoFEMErrorCode integrate(EntData &data);
369};
370
371template <int INTERP_ORDER>
373 OpGetInternalStress(boost::shared_ptr<DataAtIntegrationPts> data_ptr,
374 std::string tag_name = "")
375 : UserDataOperator(H1, OPLAST), dataAtPts(data_ptr), tagName(tag_name) {
376 std::fill(&doEntities[MBVERTEX], &doEntities[MBMAXTYPE], false);
377 doEntities[MBVERTEX] = true;
378 }
379 MoFEMErrorCode doWork(int side, EntityType type, EntData &data);
380
381private:
382 boost::shared_ptr<DataAtIntegrationPts> dataAtPts;
383 std::string tagName;
384};
385
386template <bool VOIGT>
389 const std::string &field_name,
390 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
391 boost::shared_ptr<ScalingMethod> scaling_method_ptr)
392 : OpAssembleVolume(field_name, data_ptr, OPROW),
393 scalingMethodPtr(scaling_method_ptr) {}
394 MoFEMErrorCode integrate(EntData &row_data);
395
396protected:
397 boost::shared_ptr<ScalingMethod> scalingMethodPtr;
398};
399
400template <AssemblyType A, IntegrationType I> struct OpDispBcImpl;
401
402template <AssemblyType A>
403struct OpDispBcImpl<A, GAUSS>
404 : public FormsIntegrators<FaceUserDataOperator>::Assembly<A>::OpBrokenBase {
405
406 using OP = typename FormsIntegrators<FaceUserDataOperator>::Assembly<
408
410 boost::shared_ptr<std::vector<BrokenBaseSideData>> broken_base_side_data,
411 boost::shared_ptr<BcDispVec> &bc_disp_ptr,
412 std::map<std::string, boost::shared_ptr<ScalingMethod>> smv,
413 boost::shared_ptr<Range> ents_ptr = nullptr)
414 : OP(broken_base_side_data, ents_ptr), bcDispPtr(bc_disp_ptr),
415 scalingMethodsMap(smv) {}
416
417protected:
418 MoFEMErrorCode iNtegrate(EntData &data);
419 boost::shared_ptr<BcDispVec> bcDispPtr;
420 std::map<std::string, boost::shared_ptr<ScalingMethod>> scalingMethodsMap;
421};
422
423struct OpDispBc : public OpDispBcImpl<PETSC, GAUSS> {
425 using OP::OpDispBcImpl;
426
427protected:
428 MoFEMErrorCode iNtegrate(EntData &data);
429};
430
431template <AssemblyType A, IntegrationType I> struct OpRotationBcImpl;
432
433template <AssemblyType A>
434struct OpRotationBcImpl<A, GAUSS>
435 : public FormsIntegrators<FaceUserDataOperator>::Assembly<A>::OpBrokenBase {
436
437 using OP = typename FormsIntegrators<FaceUserDataOperator>::Assembly<
439
441 boost::shared_ptr<std::vector<BrokenBaseSideData>> broken_base_side_data,
442 boost::shared_ptr<BcRotVec> &bc_rot_ptr,
443 std::map<std::string, boost::shared_ptr<ScalingMethod>> smv,
444 boost::shared_ptr<Range> ents_ptr = nullptr)
445 : OP(broken_base_side_data, ents_ptr), bcRotPtr(bc_rot_ptr),
446 scalingMethodsMap(smv) {}
447
448protected:
449 MoFEMErrorCode iNtegrate(EntData &data);
450 boost::shared_ptr<BcRotVec> bcRotPtr;
451 std::map<std::string, boost::shared_ptr<ScalingMethod>> scalingMethodsMap;
452};
453
454/**
455 * @brief Apply rotation boundary condition
456 *
457 * The boundary condition is applied getting data from the SPATIAL_ROTATION_BC
458 * blockset.
459 *
460 * Centre of rotation is given by the first three attributes of the blockset.
461 * The fort parameter is angle of rotation
462 *
463 */
464struct OpRotationBc : public OpRotationBcImpl<PETSC, GAUSS> {
466 using OP::OpRotationBcImpl;
467
468protected:
469 MoFEMErrorCode iNtegrate(EntData &data);
470};
471
473 : public FormsIntegrators<FaceUserDataOperator>::Assembly<PETSC>::OpBase {
475 const std::string row_field, boost::shared_ptr<TractionBcVec> bc_data,
476 boost::shared_ptr<double> piola_scale_ptr,
477 std::map<std::string, boost::shared_ptr<ScalingMethod>> smv)
478 : FormsIntegrators<FaceUserDataOperator>::Assembly<PETSC>::OpBase(
479 row_field, row_field, FaceUserDataOperator::OPROW),
480 bcData(bc_data), piolaScalePtr(piola_scale_ptr),
481 scalingMethodsMap(smv) {}
482
483 MoFEMErrorCode iNtegrate(EntData &data);
484
485protected:
486 boost::shared_ptr<TractionBcVec> bcData;
487 boost::shared_ptr<double> piolaScalePtr;
488 std::map<std::string, boost::shared_ptr<ScalingMethod>> scalingMethodsMap;
489};
490
492 : public FormsIntegrators<FaceUserDataOperator>::Assembly<PETSC>::OpBase {
494 const std::string row_field, boost::shared_ptr<PressureBcVec> bc_data,
495 boost::shared_ptr<double> piola_scale_ptr,
496 boost::shared_ptr<MatrixDouble> hybrid_grad_disp,
497 std::map<std::string, boost::shared_ptr<ScalingMethod>> smv)
498 : FormsIntegrators<FaceUserDataOperator>::Assembly<PETSC>::OpBase(
499 row_field, row_field, FaceUserDataOperator::OPROW),
500 bcData(bc_data), piolaScalePtr(piola_scale_ptr),
501 hybridGradDispPtr(hybrid_grad_disp), scalingMethodsMap(smv) {}
502
503 MoFEMErrorCode iNtegrate(EntData &data);
504
505protected:
506 boost::shared_ptr<PressureBcVec> bcData;
507 boost::shared_ptr<double> piolaScalePtr;
508 boost::shared_ptr<MatrixDouble> hybridGradDispPtr;
509 std::map<std::string, boost::shared_ptr<ScalingMethod>> scalingMethodsMap;
510};
511
512template <AssemblyType A, IntegrationType I>
514
515template <AssemblyType A>
517 : public FormsIntegrators<FaceUserDataOperator>::Assembly<A>::OpBase {
518
519 using OP =
520 typename FormsIntegrators<FaceUserDataOperator>::Assembly<A>::OpBase;
521
523 std::string row_field, boost::shared_ptr<PressureBcVec> bc_data,
524 boost::shared_ptr<MatrixDouble> hybrid_grad_disp,
525 std::map<std::string, boost::shared_ptr<ScalingMethod>> smv)
526 : OP(row_field, row_field, OP::OPROWCOL), bcData(bc_data),
527 hybridGradDispPtr(hybrid_grad_disp), scalingMethodsMap(smv) {}
528
529protected:
530 MoFEMErrorCode iNtegrate(EntData &row_data, EntData &col_data);
531 boost::shared_ptr<PressureBcVec> bcData;
532 boost::shared_ptr<MatrixDouble> hybridGradDispPtr;
533 std::map<std::string, boost::shared_ptr<ScalingMethod>> scalingMethodsMap;
534};
535
537 : public OpBrokenPressureBcLhsImpl_dU<A, GAUSS> {
540
541protected:
542 MoFEMErrorCode iNtegrate(EntData &row_data, EntData &col_data);
543};
544
546 : public FormsIntegrators<FaceUserDataOperator>::Assembly<PETSC>::OpBase {
548 const std::string row_field,
549 boost::shared_ptr<AnalyticalTractionBcVec> bc_data,
550 boost::shared_ptr<double> piola_scale_ptr,
551 std::map<std::string, boost::shared_ptr<ScalingMethod>> smv)
552 : FormsIntegrators<FaceUserDataOperator>::Assembly<PETSC>::OpBase(
553 row_field, row_field, FaceUserDataOperator::OPROW),
554 bcData(bc_data), piolaScalePtr(piola_scale_ptr),
555 scalingMethodsMap(smv) {}
556
557 MoFEMErrorCode iNtegrate(EntData &data);
558
559protected:
560 boost::shared_ptr<AnalyticalTractionBcVec> bcData;
561 boost::shared_ptr<double> piolaScalePtr;
562 std::map<std::string, boost::shared_ptr<ScalingMethod>> scalingMethodsMap;
563};
564
566 : public FormsIntegrators<FaceUserDataOperator>::Assembly<PETSC>::OpBase {
567
568 using OP =
569 typename FormsIntegrators<FaceUserDataOperator>::Assembly<PETSC>::OpBase;
570
572 std::string row_field, boost::shared_ptr<MatrixDouble> hybrid_disp_ptr,
573 boost::shared_ptr<std::vector<BrokenBaseSideData>> broken_side_data_ptr,
574 boost::shared_ptr<SpringBcVec> bc_spring_ptr)
575 : OP(row_field, row_field, OP::OPROW), hybridDispPtr(hybrid_disp_ptr),
576 brokenBaseSideDataPtr(broken_side_data_ptr),
577 bcSpringPtr(bc_spring_ptr) {}
578
579 MoFEMErrorCode iNtegrate(EntData &data);
580
581protected:
582 boost::shared_ptr<MatrixDouble> hybridDispPtr;
583 boost::shared_ptr<std::vector<BrokenBaseSideData>> brokenBaseSideDataPtr;
584 boost::shared_ptr<SpringBcVec> bcSpringPtr;
585};
586
588 : public FormsIntegrators<FaceUserDataOperator>::Assembly<A>::OpBase {
589
590 using OP =
591 typename FormsIntegrators<FaceUserDataOperator>::Assembly<A>::OpBase;
592
593 OpSpringLhsBc_dU(std::string row_field,
594 boost::shared_ptr<SpringBcVec> bc_spring_ptr)
595 : OP(row_field, row_field, OP::OPROWCOL), bcSpringPtr(bc_spring_ptr) {}
596
597 MoFEMErrorCode iNtegrate(EntData &row_data, EntData &col_data);
598
599protected:
600 boost::shared_ptr<SpringBcVec> bcSpringPtr;
601};
602
604 : public FormsIntegrators<FaceUserDataOperator>::Assembly<A>::OpBrokenBase {
605
606 using OP = typename FormsIntegrators<FaceUserDataOperator>::Assembly<
608
610 std::string row_field,
611 boost::shared_ptr<std::vector<BrokenBaseSideData>> broken_base_side_data,
612 boost::shared_ptr<SpringBcVec> bc_spring_ptr)
613 : OP(row_field, broken_base_side_data, false, false, nullptr),
614 bcSpringPtr(bc_spring_ptr) {}
615
616 MoFEMErrorCode iNtegrate(EntData &row_data, EntData &col_data);
617
618protected:
619 boost::shared_ptr<SpringBcVec> bcSpringPtr;
620};
621
622template <AssemblyType A, IntegrationType I> struct OpNormalDispBcRhsImpl;
623template <AssemblyType A, IntegrationType I> struct OpNormalDispBcLhsImpl_dU;
624template <AssemblyType A, IntegrationType I> struct OpNormalDispBcLhsImpl_dP;
625
626template <AssemblyType A>
628 : public FormsIntegrators<FaceUserDataOperator>::Assembly<PETSC>::OpBase {
629
630 using OP =
631 typename FormsIntegrators<FaceUserDataOperator>::Assembly<PETSC>::OpBase;
632
634 std::string row_field, boost::shared_ptr<MatrixDouble> hybrid_disp_ptr,
635 boost::shared_ptr<std::vector<BrokenBaseSideData>> broken_side_data_ptr,
636 // boost::shared_ptr<MatrixDouble> piola_stress_ptr,
637 boost::shared_ptr<NormalDisplacementBcVec> &bc_disp_ptr,
638 std::map<std::string, boost::shared_ptr<ScalingMethod>> smv,
639 boost::shared_ptr<Range> ents_ptr = nullptr)
640 : FormsIntegrators<FaceUserDataOperator>::Assembly<PETSC>::OpBase(
641 row_field, row_field, OP::OPROW),
642 hybridDispPtr(hybrid_disp_ptr),
643 brokenBaseSideDataPtr(
644 broken_side_data_ptr), /*piolaStressPtr(piola_stress_ptr),*/
645 bcDispPtr(bc_disp_ptr), scalingMethodsMap(smv) {}
646
647protected:
648 MoFEMErrorCode iNtegrate(EntData &data);
649 boost::shared_ptr<MatrixDouble> hybridDispPtr;
650 boost::shared_ptr<std::vector<BrokenBaseSideData>> brokenBaseSideDataPtr;
651 // boost::shared_ptr<MatrixDouble> piolaStressPtr;
652 boost::shared_ptr<NormalDisplacementBcVec> bcDispPtr;
653 std::map<std::string, boost::shared_ptr<ScalingMethod>> scalingMethodsMap;
654};
655
656template <AssemblyType A>
658 : public FormsIntegrators<FaceUserDataOperator>::Assembly<A>::OpBase {
659
660 using OP =
661 typename FormsIntegrators<FaceUserDataOperator>::Assembly<A>::OpBase;
662
664 std::string row_field,
665 boost::shared_ptr<NormalDisplacementBcVec> &bc_disp_ptr,
666 std::map<std::string, boost::shared_ptr<ScalingMethod>> smv,
667 boost::shared_ptr<Range> ents_ptr = nullptr)
668 : OP(row_field, row_field, OP::OPROWCOL), bcDispPtr(bc_disp_ptr),
669 scalingMethodsMap(smv) {}
670
671protected:
672 MoFEMErrorCode iNtegrate(EntData &row_data, EntData &col_data);
673 boost::shared_ptr<NormalDisplacementBcVec> bcDispPtr;
674 std::map<std::string, boost::shared_ptr<ScalingMethod>> scalingMethodsMap;
675};
676
677template <AssemblyType A>
679 : public FormsIntegrators<FaceUserDataOperator>::Assembly<A>::OpBrokenBase {
680
681 using OP = typename FormsIntegrators<FaceUserDataOperator>::Assembly<
683
685 std::string row_field,
686 boost::shared_ptr<std::vector<BrokenBaseSideData>> broken_base_side_data,
687 boost::shared_ptr<NormalDisplacementBcVec> &bc_disp_ptr,
688 std::map<std::string, boost::shared_ptr<ScalingMethod>> smv,
689 boost::shared_ptr<Range> ents_ptr = nullptr)
690 : OP(row_field, broken_base_side_data, false, false, ents_ptr),
691 bcDispPtr(bc_disp_ptr), scalingMethodsMap(smv) {}
692
693protected:
694 MoFEMErrorCode iNtegrate(EntData &row_data, EntData &col_data);
695 boost::shared_ptr<NormalDisplacementBcVec> bcDispPtr;
696 std::map<std::string, boost::shared_ptr<ScalingMethod>> scalingMethodsMap;
697};
698
699struct OpNormalDispRhsBc : public OpNormalDispBcRhsImpl<PETSC, GAUSS> {
701 using OP::OpNormalDispBcRhsImpl;
702
703protected:
704 MoFEMErrorCode iNtegrate(EntData &data);
705};
706
710
711protected:
712 MoFEMErrorCode iNtegrate(EntData &row_data, EntData &col_data);
713};
714
718
719protected:
720 MoFEMErrorCode iNtegrate(EntData &row_data, EntData &col_data);
721};
722
723template <AssemblyType A, IntegrationType I> struct OpAnalyticalDispBcImpl;
724
725template <AssemblyType A>
727 : public FormsIntegrators<FaceUserDataOperator>::Assembly<A>::OpBrokenBase {
728
729 using OP = typename FormsIntegrators<FaceUserDataOperator>::Assembly<
731
733 boost::shared_ptr<std::vector<BrokenBaseSideData>> broken_base_side_data,
734 boost::shared_ptr<AnalyticalDisplacementBcVec> &bc_disp_ptr,
735 std::map<std::string, boost::shared_ptr<ScalingMethod>> smv,
736 boost::shared_ptr<Range> ents_ptr = nullptr)
737 : OP(broken_base_side_data, ents_ptr), bcDispPtr(bc_disp_ptr),
738 scalingMethodsMap(smv) {}
739
740protected:
741 MoFEMErrorCode iNtegrate(EntData &data);
742 boost::shared_ptr<AnalyticalDisplacementBcVec> bcDispPtr;
743 std::map<std::string, boost::shared_ptr<ScalingMethod>> scalingMethodsMap;
744};
745
746struct OpAnalyticalDispBc : public OpAnalyticalDispBcImpl<PETSC, GAUSS> {
748 using OP::OpAnalyticalDispBcImpl;
749
750protected:
751 MoFEMErrorCode iNtegrate(EntData &data);
752};
753
755 OpSpatialEquilibrium_dw_dP(std::string row_field, std::string col_field,
756 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
757 const bool assemble_off = false)
758 : OpAssembleVolume(row_field, col_field, data_ptr, OPROWCOL,
759 assemble_off) {
760 sYmm = false;
761 }
762 MoFEMErrorCode integrate(EntData &row_data, EntData &col_data);
763};
764
766 const double alphaW;
767 const double alphaRho;
768 OpSpatialEquilibrium_dw_dw(std::string row_field, std::string col_field,
769 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
770 const double alpha, const double rho)
771 : OpAssembleVolume(row_field, col_field, data_ptr, OPROWCOL, false),
772 alphaW(alpha), alphaRho(rho) {
773 sYmm = true;
774 }
775 MoFEMErrorCode integrate(EntData &row_data, EntData &col_data);
776};
777
779 OpSpatialPhysical_du_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
787 MoFEMErrorCode integrate(EntData &row_data, EntData &col_data);
788};
789
791 OpSpatialPhysical_du_dBubble(std::string row_field, std::string col_field,
792 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
793 const bool assemble_off = false)
794 : OpAssembleVolume(row_field, col_field, data_ptr, OPROWCOL,
795 assemble_off) {
796 sYmm = false;
797 }
798
799 MoFEMErrorCode integrate(EntData &row_data, EntData &col_data);
800};
801
803 using OpAssembleVolume::OpAssembleVolume;
804 OpSpatialPhysical_du_domega(std::string row_field, std::string col_field,
805 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
806 const bool assemble_off)
807 : OpAssembleVolume(row_field, col_field, data_ptr, OPROWCOL,
808 assemble_off) {
809 sYmm = false;
810 }
811 MoFEMErrorCode integrate(EntData &row_data, EntData &col_data);
812};
813
815 OpSpatialRotation_domega_du(std::string row_field, std::string col_field,
816 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
817 [[maybe_unused]] double alpha_omega)
818 : OpAssembleVolume(row_field, col_field, data_ptr, OPROWCOL, false) {
819 sYmm = false;
820 }
821 MoFEMErrorCode integrate(EntData &row_data, EntData &col_data);
822
823private:
824};
825
827 OpSpatialRotation_domega_dP(std::string row_field, std::string col_field,
828 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
829 const bool assemble_off)
830 : OpAssembleVolume(row_field, col_field, data_ptr, OPROWCOL,
831 assemble_off) {
832 sYmm = false;
833 }
834 MoFEMErrorCode integrate(EntData &row_data, EntData &col_data);
835};
836
839 std::string row_field, std::string col_field,
840 boost::shared_ptr<DataAtIntegrationPts> data_ptr, const bool assemble_off)
841 : OpAssembleVolume(row_field, col_field, data_ptr, OPROWCOL,
842 assemble_off) {
843 sYmm = false;
844 }
845 MoFEMErrorCode integrate(EntData &row_data, EntData &col_data);
846};
847
850 std::string row_field, std::string col_field,
851 boost::shared_ptr<DataAtIntegrationPts> data_ptr, double alpha_r,
852 double alpha_omega, double alpha_viscous_r, double alpha_viscous_omega)
853 : OpAssembleVolume(row_field, col_field, data_ptr, OPROWCOL, false),
854 alphaR(alpha_r), alphaOmega(alpha_omega),
855 alphaViscousR(alpha_viscous_r), alphaViscousOmega(alpha_viscous_omega) {
856 sYmm = false;
857 }
858 MoFEMErrorCode integrate(EntData &row_data, EntData &col_data);
859
860private:
861 double alphaR;
865};
866
867/// Add an intermediate-configuration rotation-gradient block to Schur PC
868/// storage.
870 : public FormsIntegrators<VolUserDataOperator>::Assembly<PETSC>::OpBase {
871 using OP = FormsIntegrators<VolUserDataOperator>::Assembly<PETSC>::OpBase;
872
874 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
875 const double alpha_omega_prec)
876 : OP(field_name, field_name, OPROWCOL), dataAtPts(data_ptr),
877 alphaOmegaPrec(alpha_omega_prec) {
878 sYmm = false;
879 }
880
881protected:
882 MoFEMErrorCode iNtegrate(EntData &row_data, EntData &col_data) override;
883 MoFEMErrorCode aSsemble(EntData &row_data, EntData &col_data,
884 const bool) override;
885
886private:
887 boost::shared_ptr<DataAtIntegrationPts> dataAtPts;
888 const double alphaOmegaPrec;
889};
890
892 OpSpatialConsistency_dP_dP(std::string row_field, std::string col_field,
893 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
894 const bool has_nonhomogeneous_mat_block)
895 : OpAssembleVolume(row_field, col_field, data_ptr, OPROWCOL, false),
896 hasNonhomogeneousMatBlock(has_nonhomogeneous_mat_block) {
897 sYmm = false;
898 }
899 MoFEMErrorCode integrate(EntData &row_data, EntData &col_data);
900
901private:
902 template <int S>
903 MoFEMErrorCode integrateImpl(EntData &row_data, EntData &col_data);
905};
906
909 std::string row_field, std::string col_field,
910 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
911 const bool has_nonhomogeneous_mat_block)
912 : OpAssembleVolume(row_field, col_field, data_ptr, OPROWCOL, false),
913 hasNonhomogeneousMatBlock(has_nonhomogeneous_mat_block) {
914 sYmm = false;
915 }
916 MoFEMErrorCode integrate(EntData &row_data, EntData &col_data);
917
918private:
919 template <int S>
920 MoFEMErrorCode integrateImpl(EntData &row_data, EntData &col_data);
922};
923
926 std::string row_field, std::string col_field,
927 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
928 const bool has_nonhomogeneous_mat_block)
929 : OpAssembleVolume(row_field, col_field, data_ptr, OPROWCOL, true),
930 hasNonhomogeneousMatBlock(has_nonhomogeneous_mat_block) {
931 sYmm = false;
932 }
933 MoFEMErrorCode integrate(EntData &row_data, EntData &col_data);
934
935private:
936 template <int S>
937 MoFEMErrorCode integrateImpl(EntData &row_data, EntData &col_data);
939};
940
941using OpStressGram_dP_dP = FormsIntegrators<VolUserDataOperator>::Assembly<
943
944using OpStressGram_dBubble_dBubble = FormsIntegrators<
945 VolUserDataOperator>::Assembly<A>::BiLinearForm<GAUSS>::OpMass<9, 9>;
946
948 OpStressGram_dBubble_dP(std::string row_field, std::string col_field,
949 boost::shared_ptr<DataAtIntegrationPts> data_ptr)
950 : OpAssembleVolume(row_field, col_field, data_ptr, OPROWCOL, true) {
951 sYmm = false;
952 }
953 MoFEMErrorCode integrate(EntData &row_data, EntData &col_data);
954};
955
958 std::string row_field, std::string col_field,
959 boost::shared_ptr<DataAtIntegrationPts> data_ptr, const bool assemble_off)
960 : OpAssembleVolume(row_field, col_field, data_ptr, OPROWCOL,
961 assemble_off) {
962 sYmm = false;
963 }
964 MoFEMErrorCode integrate(EntData &row_data, EntData &col_data);
965
966private:
967};
968
971 std::string row_field, std::string col_field,
972 boost::shared_ptr<DataAtIntegrationPts> data_ptr, const bool assemble_off)
973 : OpAssembleVolume(row_field, col_field, data_ptr, OPROWCOL,
974 assemble_off) {
975 sYmm = false;
976 }
977 MoFEMErrorCode integrate(EntData &row_data, EntData &col_data);
978
979private:
980};
981
983 : public VolumeElementForcesAndSourcesCoreOnSide::UserDataOperator {
984
985 using OP = VolumeElementForcesAndSourcesCoreOnSide::UserDataOperator;
986
987 moab::Interface &postProcMesh;
988 std::vector<EntityHandle> &mapGaussPts;
989 boost::shared_ptr<DataAtIntegrationPts> dataAtPts;
990
991 OpPostProcDataStructure(moab::Interface &post_proc_mesh,
992 std::vector<EntityHandle> &map_gauss_pts,
993 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
994 int sense)
995 : OP(NOSPACE, UserDataOperator::OPSPACE), postProcMesh(post_proc_mesh),
996 mapGaussPts(map_gauss_pts), dataAtPts(data_ptr), tagSense(sense) {}
997
998 MoFEMErrorCode doWork(int side, EntityType type, EntData &data);
999
1000private:
1002};
1003
1005 : public VolumeElementForcesAndSourcesCoreOnSide::UserDataOperator {
1006
1007 // @note This is not on the side, since, integrate energy in the volume
1008 using OP = VolumeElementForcesAndSourcesCoreOnSide::UserDataOperator;
1009
1010 OpFaceSideMaterialForce(boost::shared_ptr<DataAtIntegrationPts> data_ptr)
1011 : OP(NOSPACE, OPSPACE), dataAtPts(data_ptr) {}
1012
1013 MoFEMErrorCode doWork(int side, EntityType type, EntData &data);
1014
1015private:
1016 boost::shared_ptr<DataAtIntegrationPts>
1017 dataAtPts; ///< data at integration pts
1018};
1019
1021 : public FaceElementForcesAndSourcesCore::UserDataOperator {
1022
1023 // @note This is not on the side, since, integrate energy in the volume
1024 using OP = FaceElementForcesAndSourcesCore::UserDataOperator;
1025
1026 OpFaceMaterialForce(boost::shared_ptr<DataAtIntegrationPts> data_ptr)
1027 : OP(NOSPACE, OPSPACE), dataAtPts(data_ptr) {}
1028
1029 MoFEMErrorCode doWork(int side, EntityType type, EntData &data);
1030
1031private:
1032 boost::shared_ptr<DataAtIntegrationPts>
1033 dataAtPts; ///< data at integration pts
1034};
1035
1036template <int FE_DIM, int PROBLEM_DIM, int SPACE_DIM> struct AddHOOps;
1037
1038template <> struct AddHOOps<2, 3, 3> {
1039 AddHOOps() = delete;
1040 static MoFEMErrorCode
1041 add(boost::ptr_deque<ForcesAndSourcesCore::UserDataOperator> &pipeline,
1042 std::vector<FieldSpace> space, std::string geom_field_name,
1043 boost::shared_ptr<Range> crack_front_edges_ptr);
1044};
1045
1046template <> struct AddHOOps<2, 2, 3> {
1047 AddHOOps() = delete;
1048 static MoFEMErrorCode
1049 add(boost::ptr_deque<ForcesAndSourcesCore::UserDataOperator> &pipeline,
1050 std::vector<FieldSpace> space, std::string geom_field_name,
1051 boost::shared_ptr<Range> crack_front_edges_ptr);
1052};
1053
1054template <> struct AddHOOps<3, 3, 3> {
1055 AddHOOps() = delete;
1056 static MoFEMErrorCode
1057 add(boost::ptr_deque<ForcesAndSourcesCore::UserDataOperator> &pipeline,
1058 std::vector<FieldSpace> space, std::string geom_field_name,
1059 boost::shared_ptr<Range> crack_front_edges_ptr,
1060 boost::shared_ptr<MatrixDouble> jac = nullptr,
1061 boost::shared_ptr<VectorDouble> det = nullptr,
1062 boost::shared_ptr<MatrixDouble> inv_jac = nullptr);
1063};
1064
1066 FormsIntegrators<FaceElementForcesAndSourcesCore::UserDataOperator>::
1067 Assembly<A>::LinearForm<GAUSS>::OpBaseTimesVector<1, SPACE_DIM,
1068 SPACE_DIM>;
1069
1070template <typename OP>
1071struct OpStabBrokenBaseImpl : public OpBrokenBaseImpl<OP> {
1072
1073 using BASE = OpBrokenBaseImpl<OP>;
1074 using BASE::BASE;
1075
1076 MoFEMErrorCode doWork(int row_side, EntityType row_type,
1077 EntitiesFieldData::EntData &row_data) {
1079
1080 if (OP::entsPtr) {
1081 if (OP::entsPtr->find(this->getFEEntityHandle()) == OP::entsPtr->end())
1083 }
1084
1085#ifndef NDEBUG
1086 if (!BASE::brokenBaseSideData) {
1087 SETERRQ(PETSC_COMM_SELF, MOFEM_IMPOSSIBLE_CASE, "space not set");
1088 }
1089#endif // NDEBUG
1090
1091 auto do_work_rhs = [this](int, EntityType,
1092 EntitiesFieldData::EntData &row_data) {
1094 // get number of dofs on row
1095 OP::nbRows = row_data.getIndices().size();
1096 if (!OP::nbRows)
1098 // get number of integration points
1099 OP::nbIntegrationPts = OP::getGaussPts().size2();
1100 // get row base functions
1101 OP::nbRowBaseFunctions = OP::getNbOfBaseFunctions(row_data);
1102 // resize and clear the right hand side vector
1103 OP::locF.resize(OP::nbRows, false);
1104 OP::locF.clear();
1105 // integrate local vector
1106 CHKERR this->iNtegrate(row_data);
1107 // assemble local vector
1108 CHKERR this->aSsemble(row_data);
1110 };
1111
1112 auto do_work_lhs = [this](int row_side, int col_side, EntityType row_type,
1113 EntityType col_type,
1114 EntitiesFieldData::EntData &row_data,
1115 EntitiesFieldData::EntData &col_data) {
1117
1118 auto check_if_assemble_transpose = [&] {
1119 if (this->sYmm) {
1120 if (OP::rowSide != OP::colSide || OP::rowType != OP::colType)
1121 return true;
1122 else
1123 return false;
1124 } else if (OP::assembleTranspose) {
1125 return true;
1126 }
1127 return false;
1128 };
1129
1130 OP::rowSide = row_side;
1131 OP::rowType = row_type;
1132 OP::colSide = col_side;
1133 OP::colType = col_type;
1134 OP::nbCols = col_data.getIndices().size();
1135 OP::locMat.resize(OP::nbRows, OP::nbCols, false);
1136 OP::locMat.clear();
1137 CHKERR this->iNtegrate(row_data, col_data);
1138 CHKERR this->aSsemble(row_data, col_data, check_if_assemble_transpose());
1140 };
1141
1142 switch (OP::opType) {
1143 case OP::OPROW:
1144
1145 OP::nbRows = row_data.getIndices().size();
1146 if (!OP::nbRows)
1148 OP::nbIntegrationPts = OP::getGaussPts().size2();
1149 OP::nbRowBaseFunctions = OP::getNbOfBaseFunctions(row_data);
1150
1151 if (!OP::nbRows)
1153
1154 for (auto &bd : *BASE::brokenBaseSideData) {
1155
1156#ifndef NDEBUG
1157 if (!bd.getData().getNSharedPtr(bd.getData().getBase())) {
1158 SETERRQ(PETSC_COMM_SELF, MOFEM_DATA_INCONSISTENCY,
1159 "base functions not set");
1160 }
1161#endif
1162
1163 CHKERR do_work_lhs(
1164
1165 // side
1166 row_side, bd.getSide(),
1167
1168 // type
1169 row_type, bd.getType(),
1170
1171 // row_data
1172 row_data, bd.getData()
1173
1174 );
1175 }
1176
1177 break;
1178 case OP::OPSPACE:
1179 for (auto &bd : *BASE::brokenBaseSideData) {
1180 fluxMatPtr = boost::shared_ptr<MatrixDouble>(BASE::brokenBaseSideData,
1181 &bd.getFlux());
1182 CHKERR do_work_rhs(bd.getSide(), bd.getType(), bd.getData());
1183 }
1184 break;
1185 default:
1188 (std::string("wrong op type ") +
1189 OpBaseDerivativesBase::OpTypeNames[static_cast<unsigned char>(
1190 OP::opType)])
1191 .c_str());
1192 }
1193
1195 }
1196
1197protected:
1198 boost::weak_ptr<MatrixDouble> fluxMatPtr;
1199};
1200
1202 : public OpStabBrokenBaseImpl<OpBaseTimesVectorFace> {
1203
1206 boost::shared_ptr<std::vector<BrokenBaseSideData>> broken_base_side_data,
1207 boost::shared_ptr<MatrixDouble> vec,
1208 ScalarFun beta_coeff = [](double, double, double) constexpr { return 1; },
1209 boost::shared_ptr<Range> ents_ptr = nullptr);
1210};
1211
1213 : public OpStabBrokenBaseImpl<OpBaseTimesVectorFace> {
1214
1217 boost::shared_ptr<std::vector<BrokenBaseSideData>> broken_base_side_data,
1218 ScalarFun beta_coeff = [](double, double, double) constexpr { return 1; },
1219 boost::shared_ptr<Range> ents_ptr = nullptr);
1220
1221protected:
1222 MoFEMErrorCode doWork(int row_side, EntityType row_type,
1223 EntitiesFieldData::EntData &row_data);
1224};
1225
1227
1230 const std::string row_field,
1231 boost::shared_ptr<std::vector<BrokenBaseSideData>> broken_base_side_data,
1232 ScalarFun beta_coeff, boost::shared_ptr<Range> ents_ptr = nullptr);
1233
1234protected:
1235 MoFEMErrorCode iNtegrate(EntitiesFieldData::EntData &data);
1236 boost::shared_ptr<std::vector<BrokenBaseSideData>> brokenBaseSideDataPtr;
1237};
1238
1240 FormsIntegrators<FaceElementForcesAndSourcesCore::UserDataOperator>::
1241 Assembly<A>::BiLinearForm<GAUSS>::OpMass<1, SPACE_DIM>;
1242
1243struct OpHyrbridBaseBrokenBase : public OpStabBrokenBaseImpl<OpMassVectorFace> {
1244
1247 std::string row_field,
1248 boost::shared_ptr<std::vector<BrokenBaseSideData>> broken_base_side_data,
1249 ScalarFun beta, const bool assmb_transpose, const bool only_transpose,
1250 boost::shared_ptr<Range> ents_ptr = nullptr);
1251};
1252
1253struct OpBrokenBaseBrokenBase : public OpStabBrokenBaseImpl<OpMassVectorFace> {
1254
1257 boost::shared_ptr<std::vector<BrokenBaseSideData>> broken_base_side_data,
1258 ScalarFun beta, boost::shared_ptr<Range> ents_ptr = nullptr);
1259
1260 MoFEMErrorCode doWork(int row_side, EntityType row_type,
1261 EntitiesFieldData::EntData &row_data);
1262};
1263
1265
1267
1269 boost::shared_ptr<std::vector<BrokenBaseSideData>> broken_base_side_data,
1270 boost::shared_ptr<BcDispVec> &bc_disp_ptr,
1271 std::map<std::string, boost::shared_ptr<ScalingMethod>> smv,
1272 ScalarFun tau_coeff, boost::shared_ptr<Range> ents_ptr = nullptr)
1273 : OpBrokenBaseTimesBrokenDisp(broken_base_side_data, tau_coeff, ents_ptr),
1274 bcDispPtr(bc_disp_ptr), scalingMethodsMap(smv) {}
1275
1276protected:
1277 MoFEMErrorCode iNtegrate(EntData &data);
1278 boost::shared_ptr<BcDispVec> bcDispPtr;
1279 std::map<std::string, boost::shared_ptr<ScalingMethod>> scalingMethodsMap;
1280};
1281
1283
1285
1287 boost::shared_ptr<std::vector<BrokenBaseSideData>> broken_base_side_data,
1288 boost::shared_ptr<BcDispVec> &bc_disp_ptr, ScalarFun tau_coeff,
1289 boost::shared_ptr<Range> ents_ptr = nullptr)
1290 : OP(broken_base_side_data, tau_coeff, ents_ptr), bcDispPtr(bc_disp_ptr) {
1291 }
1292
1293protected:
1294 MoFEMErrorCode iNtegrate(EntData &row_data, EntData &col_data);
1295 boost::shared_ptr<BcDispVec> bcDispPtr;
1296};
1297
1300
1302
1304 boost::shared_ptr<std::vector<BrokenBaseSideData>> broken_base_side_data,
1305 boost::shared_ptr<AnalyticalDisplacementBcVec> &bc_disp_ptr,
1306 std::map<std::string, boost::shared_ptr<ScalingMethod>> smv,
1307 ScalarFun tau_coeff, boost::shared_ptr<Range> ents_ptr = nullptr)
1308 : OpBrokenBaseTimesBrokenDisp(broken_base_side_data, tau_coeff, ents_ptr),
1309 bcDispPtr(bc_disp_ptr), scalingMethodsMap(smv) {}
1310
1311protected:
1312 MoFEMErrorCode iNtegrate(EntData &data);
1313 boost::shared_ptr<AnalyticalDisplacementBcVec> bcDispPtr;
1314 std::map<std::string, boost::shared_ptr<ScalingMethod>> scalingMethodsMap;
1315};
1316
1318
1320
1322 boost::shared_ptr<std::vector<BrokenBaseSideData>> broken_base_side_data,
1323 boost::shared_ptr<AnalyticalDisplacementBcVec> &bc_disp_ptr,
1324 ScalarFun tau_coeff, boost::shared_ptr<Range> ents_ptr = nullptr)
1325 : OP(broken_base_side_data, tau_coeff, ents_ptr), bcDispPtr(bc_disp_ptr) {
1326 }
1327
1328protected:
1329 MoFEMErrorCode iNtegrate(EntData &row_data, EntData &col_data);
1330 boost::shared_ptr<AnalyticalDisplacementBcVec> bcDispPtr;
1331};
1332
1334
1336
1338 boost::shared_ptr<std::vector<BrokenBaseSideData>> broken_base_side_data,
1339 boost::shared_ptr<BcRotVec> &bc_ptr,
1340 std::map<std::string, boost::shared_ptr<ScalingMethod>> smv,
1341 ScalarFun tau_coeff, boost::shared_ptr<Range> ents_ptr = nullptr)
1342 : OpBrokenBaseTimesBrokenDisp(broken_base_side_data, tau_coeff, ents_ptr),
1343 bcRotPtr(bc_ptr), scalingMethodsMap(smv) {}
1344
1345protected:
1346 MoFEMErrorCode iNtegrate(EntData &data);
1347 boost::shared_ptr<BcRotVec> bcRotPtr;
1348 std::map<std::string, boost::shared_ptr<ScalingMethod>> scalingMethodsMap;
1349};
1350
1352
1354
1356 boost::shared_ptr<std::vector<BrokenBaseSideData>> broken_base_side_data,
1357 boost::shared_ptr<BcRotVec> &bc_ptr, ScalarFun tau_coeff,
1358 boost::shared_ptr<Range> ents_ptr = nullptr)
1359 : OP(broken_base_side_data, tau_coeff, ents_ptr), bcRotPtr(bc_ptr) {}
1360
1361protected:
1362 MoFEMErrorCode iNtegrate(EntData &row_data, EntData &col_data);
1363 boost::shared_ptr<BcRotVec> bcRotPtr;
1364};
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
boost::shared_ptr< DataAtIntegrationPts > data
SmartPetscObj< Vec > work
PetscInt size
static const double eps
constexpr int SPACE_DIM
#define CHK_THROW_MESSAGE(err, msg)
Check and throw MoFEM exception.
#define MoFEMFunctionReturnHot(a)
Last executable line of each PETSc function used for error handling. Replaces return()
FieldSpace
approximation spaces
Definition definitions.h:82
@ H1
continuous field
Definition definitions.h:85
@ NOSPACE
Definition definitions.h:83
#define MoFEMFunctionBegin
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
#define CHK_MOAB_THROW(err, msg)
Check error code of MoAB function and throw MoFEM exception.
@ MOFEM_IMPOSSIBLE_CASE
Definition definitions.h:35
@ MOFEM_DATA_INCONSISTENCY
Definition definitions.h:31
@ MOFEM_INVALID_DATA
Definition definitions.h:36
@ MOFEM_NOT_IMPLEMENTED
Definition definitions.h:32
#define MoFEMFunctionReturn(a)
Last executable line of each PETSc function used for error handling. Replaces return()
#define CHKERR
Inline error check.
const double n
refractive index of diffusive medium
static __CLPK_integer lapack_dsyev(char jobz, char uplo, __CLPK_integer n, __CLPK_doublereal *a, __CLPK_integer lda, __CLPK_doublereal *w, __CLPK_doublereal *work, __CLPK_integer lwork)
constexpr AssemblyType A
constexpr double t
plate stiffness
Definition plate.cpp:58
constexpr auto field_name
OpBaseImpl< PETSC, EdgeEleOp > OpBase
Definition radiation.cpp:29
FormsIntegrators< DomainEleOp >::Assembly< PETSC >::BiLinearForm< GAUSS >::OpMass< 1, SPACE_DIM > OpMass
[Only used with Hooke equation (linear material model)]
Definition seepage.cpp:56
FTensor::Index< 'm', 3 > m
static MoFEMErrorCode add(boost::ptr_deque< ForcesAndSourcesCore::UserDataOperator > &pipeline, std::vector< FieldSpace > space, std::string geom_field_name, boost::shared_ptr< Range > crack_front_edges_ptr)
static MoFEMErrorCode add(boost::ptr_deque< ForcesAndSourcesCore::UserDataOperator > &pipeline, std::vector< FieldSpace > space, std::string geom_field_name, boost::shared_ptr< Range > crack_front_edges_ptr)
static MoFEMErrorCode add(boost::ptr_deque< ForcesAndSourcesCore::UserDataOperator > &pipeline, std::vector< FieldSpace > space, std::string geom_field_name, boost::shared_ptr< Range > crack_front_edges_ptr, boost::shared_ptr< MatrixDouble > jac=nullptr, boost::shared_ptr< VectorDouble > det=nullptr, boost::shared_ptr< MatrixDouble > inv_jac=nullptr)
bool sYmm
If true assume that matrix is symmetric structure.
Data on single entity (This is passed as argument to DataOperator::doWork)
const VectorInt & getIndices() const
Get global indices of degrees of freedom on entity.
@ OPROW
operator doWork function is executed on FE rows
@ OPROWCOL
operator doWork is executed on FE rows &columns
@ OPSPACE
operator do Work is execute on space data
boost::shared_ptr< AnalyticalDisplacementBcVec > bcDispPtr
std::map< std::string, boost::shared_ptr< ScalingMethod > > scalingMethodsMap
MoFEMErrorCode iNtegrate(EntData &data)
OpAnalyticalDispBcImpl(boost::shared_ptr< std::vector< BrokenBaseSideData > > broken_base_side_data, boost::shared_ptr< AnalyticalDisplacementBcVec > &bc_disp_ptr, std::map< std::string, boost::shared_ptr< ScalingMethod > > smv, boost::shared_ptr< Range > ents_ptr=nullptr)
MoFEMErrorCode iNtegrate(EntData &data)
MatrixDouble K
local tangent matrix
VectorDouble nF
local right hand side vector
MoFEMErrorCode doWork(int row_side, int col_side, EntityType row_type, EntityType col_type, EntData &row_data, EntData &col_data)
MoFEMErrorCode doWork(int side, EntityType type, EntData &data)
virtual MoFEMErrorCode integrate(int, EntityType, EntData &data)
virtual MoFEMErrorCode assemble(EntData &data)
virtual MoFEMErrorCode integrate(EntData &, EntData &)
OpAssembleBasic(const std::string &field_name, boost::shared_ptr< DataAtIntegrationPts > data_ptr, const char type)
virtual MoFEMErrorCode integrate(EntData &)
virtual MoFEMErrorCode assemble(int, int, EntityType, EntityType, EntData &row_data, EntData &col_data)
boost::function< double()> ScaleOff
boost::shared_ptr< DataAtIntegrationPts > dataAtPts
data at integration pts
OpAssembleBasic(const FieldSpace space)
virtual MoFEMErrorCode assemble(int, EntityType, EntData &data)
OpAssembleBasic(std::string row_field, std::string col_field, boost::shared_ptr< DataAtIntegrationPts > data_ptr, const char type, const bool assemble_symmetry, ScaleOff scale_off=[]() { return 1;})
MoFEMErrorCode doWork(int, EntityType, EntData &)
Operator for linear form, usually to calculate values on right hand side.
MoFEMErrorCode doWork(int row_side, int col_side, EntityType row_type, EntityType col_type, EntData &row_data, EntData &col_data)
Operator for bi-linear form, usually to calculate values on left hand side.
typename OP::ScaleOff ScaleOff
static std::map< std::pair< std::string, std::string >, MatrixDouble > mapMatrix
MoFEMErrorCode assemble(int row_side, int col_side, EntityType row_type, EntityType col_type, EntData &row_data, EntData &col_data)
boost::shared_ptr< AnalyticalTractionBcVec > bcData
OpBrokenAnalyticalTractionBc(const std::string row_field, boost::shared_ptr< AnalyticalTractionBcVec > bc_data, boost::shared_ptr< double > piola_scale_ptr, std::map< std::string, boost::shared_ptr< ScalingMethod > > smv)
boost::shared_ptr< double > piolaScalePtr
MoFEMErrorCode iNtegrate(EntData &data)
std::map< std::string, boost::shared_ptr< ScalingMethod > > scalingMethodsMap
MoFEMErrorCode doWork(int row_side, EntityType row_type, EntitiesFieldData::EntData &row_data)
MoFEMErrorCode doWork(int row_side, EntityType row_type, EntitiesFieldData::EntData &row_data)
MoFEMErrorCode iNtegrate(EntData &row_data, EntData &col_data)
boost::shared_ptr< MatrixDouble > hybridGradDispPtr
OpBrokenPressureBcLhsImpl_dU(std::string row_field, boost::shared_ptr< PressureBcVec > bc_data, boost::shared_ptr< MatrixDouble > hybrid_grad_disp, std::map< std::string, boost::shared_ptr< ScalingMethod > > smv)
std::map< std::string, boost::shared_ptr< ScalingMethod > > scalingMethodsMap
boost::shared_ptr< PressureBcVec > bcData
MoFEMErrorCode iNtegrate(EntData &row_data, EntData &col_data)
boost::shared_ptr< MatrixDouble > hybridGradDispPtr
boost::shared_ptr< double > piolaScalePtr
MoFEMErrorCode iNtegrate(EntData &data)
OpBrokenPressureBc(const std::string row_field, boost::shared_ptr< PressureBcVec > bc_data, boost::shared_ptr< double > piola_scale_ptr, boost::shared_ptr< MatrixDouble > hybrid_grad_disp, std::map< std::string, boost::shared_ptr< ScalingMethod > > smv)
std::map< std::string, boost::shared_ptr< ScalingMethod > > scalingMethodsMap
boost::shared_ptr< PressureBcVec > bcData
std::map< std::string, boost::shared_ptr< ScalingMethod > > scalingMethodsMap
OpBrokenTractionBc(const std::string row_field, boost::shared_ptr< TractionBcVec > bc_data, boost::shared_ptr< double > piola_scale_ptr, std::map< std::string, boost::shared_ptr< ScalingMethod > > smv)
boost::shared_ptr< double > piolaScalePtr
boost::shared_ptr< TractionBcVec > bcData
MoFEMErrorCode iNtegrate(EntData &data)
Calculate q = 3 K_ext epsilon_ext at integration points.
std::map< std::string, boost::shared_ptr< ScalingMethod > > scalingMethodsMap
MoFEMErrorCode doWork(int side, EntityType type, EntData &data) override
Operator for linear form, usually to calculate values on right hand side.
boost::shared_ptr< ExternalStrainVec > externalStrainVecPtr
boost::shared_ptr< DataAtIntegrationPts > dataAtPts
data at integration pts
MoFEMErrorCode doWork(int side, EntityType type, EntData &data)
std::array< double, 6 > & reactionVec
OpCalculateReactionForces(boost::shared_ptr< DataAtIntegrationPts > data_ptr, std::string block_name, Range block_entities, std::array< double, 6 > &reaction_vec)
MoFEMErrorCode doWork(int side, EntityType type, EntData &data)
Operator for linear form, usually to calculate values on right hand side.
OpCalculateRotationAndSpatialGradient(boost::shared_ptr< DataAtIntegrationPts > data_ptr)
boost::shared_ptr< DataAtIntegrationPts > dataAtPts
data at integration pts
MoFEMErrorCode doWork(int side, EntityType type, EntData &data)
OpCalculateTractionFromSideEle(boost::shared_ptr< DataAtIntegrationPts > data_ptr)
boost::shared_ptr< DataAtIntegrationPts > dataAtPts
data at integration pts
std::map< std::string, boost::shared_ptr< ScalingMethod > > scalingMethodsMap
OpDispBcImpl(boost::shared_ptr< std::vector< BrokenBaseSideData > > broken_base_side_data, boost::shared_ptr< BcDispVec > &bc_disp_ptr, std::map< std::string, boost::shared_ptr< ScalingMethod > > smv, boost::shared_ptr< Range > ents_ptr=nullptr)
MoFEMErrorCode iNtegrate(EntData &data)
boost::shared_ptr< BcDispVec > bcDispPtr
MoFEMErrorCode iNtegrate(EntData &data)
MoFEMErrorCode doWork(int side, EntityType type, EntData &data)
boost::shared_ptr< DataAtIntegrationPts > dataAtPts
data at integration pts
FaceElementForcesAndSourcesCore::UserDataOperator OP
OpFaceMaterialForce(boost::shared_ptr< DataAtIntegrationPts > data_ptr)
MoFEMErrorCode doWork(int side, EntityType type, EntData &data)
Caluclate face material force and normal pressure at gauss points.
OpFaceSideMaterialForce(boost::shared_ptr< DataAtIntegrationPts > data_ptr)
boost::shared_ptr< DataAtIntegrationPts > dataAtPts
data at integration pts
MoFEMErrorCode doWork(int side, EntityType type, EntData &data)
boost::shared_ptr< DataAtIntegrationPts > dataAtPts
OpGetInternalStress(boost::shared_ptr< DataAtIntegrationPts > data_ptr, std::string tag_name="")
MoFEMErrorCode iNtegrate(EntitiesFieldData::EntData &data)
boost::shared_ptr< std::vector< BrokenBaseSideData > > brokenBaseSideDataPtr
virtual MoFEMErrorCode evaluateLhs(EntData &data)=0
boost::shared_ptr< PhysicalEquations > physicsPtr
material physical equations
virtual MoFEMErrorCode evaluateRhs(EntData &data)=0
OpJacobian(FieldSpace space, UserDataOperator::OpType op_type)
boost::shared_ptr< DataAtIntegrationPts > dataAtPts
data at integration pts
OpJacobian(const bool eval_rhs, const bool eval_lhs, boost::shared_ptr< DataAtIntegrationPts > data_ptr, boost::shared_ptr< PhysicalEquations > physics_ptr)
MoFEMErrorCode doWork(int side, EntityType type, EntData &data)
boost::shared_ptr< NormalDisplacementBcVec > bcDispPtr
OpNormalDispBcLhsImpl_dP(std::string row_field, boost::shared_ptr< std::vector< BrokenBaseSideData > > broken_base_side_data, boost::shared_ptr< NormalDisplacementBcVec > &bc_disp_ptr, std::map< std::string, boost::shared_ptr< ScalingMethod > > smv, boost::shared_ptr< Range > ents_ptr=nullptr)
std::map< std::string, boost::shared_ptr< ScalingMethod > > scalingMethodsMap
MoFEMErrorCode iNtegrate(EntData &row_data, EntData &col_data)
MoFEMErrorCode iNtegrate(EntData &row_data, EntData &col_data)
std::map< std::string, boost::shared_ptr< ScalingMethod > > scalingMethodsMap
OpNormalDispBcLhsImpl_dU(std::string row_field, boost::shared_ptr< NormalDisplacementBcVec > &bc_disp_ptr, std::map< std::string, boost::shared_ptr< ScalingMethod > > smv, boost::shared_ptr< Range > ents_ptr=nullptr)
boost::shared_ptr< NormalDisplacementBcVec > bcDispPtr
boost::shared_ptr< MatrixDouble > hybridDispPtr
OpNormalDispBcRhsImpl(std::string row_field, boost::shared_ptr< MatrixDouble > hybrid_disp_ptr, boost::shared_ptr< std::vector< BrokenBaseSideData > > broken_side_data_ptr, boost::shared_ptr< NormalDisplacementBcVec > &bc_disp_ptr, std::map< std::string, boost::shared_ptr< ScalingMethod > > smv, boost::shared_ptr< Range > ents_ptr=nullptr)
std::map< std::string, boost::shared_ptr< ScalingMethod > > scalingMethodsMap
MoFEMErrorCode iNtegrate(EntData &data)
boost::shared_ptr< NormalDisplacementBcVec > bcDispPtr
boost::shared_ptr< std::vector< BrokenBaseSideData > > brokenBaseSideDataPtr
MoFEMErrorCode iNtegrate(EntData &row_data, EntData &col_data)
MoFEMErrorCode iNtegrate(EntData &row_data, EntData &col_data)
MoFEMErrorCode iNtegrate(EntData &data)
std::vector< EntityHandle > & mapGaussPts
OpPostProcDataStructure(moab::Interface &post_proc_mesh, std::vector< EntityHandle > &map_gauss_pts, boost::shared_ptr< DataAtIntegrationPts > data_ptr, int sense)
boost::shared_ptr< DataAtIntegrationPts > dataAtPts
MoFEMErrorCode doWork(int side, EntityType type, EntData &data)
VolumeElementForcesAndSourcesCoreOnSide::UserDataOperator OP
OpRotationBcImpl(boost::shared_ptr< std::vector< BrokenBaseSideData > > broken_base_side_data, boost::shared_ptr< BcRotVec > &bc_rot_ptr, std::map< std::string, boost::shared_ptr< ScalingMethod > > smv, boost::shared_ptr< Range > ents_ptr=nullptr)
MoFEMErrorCode iNtegrate(EntData &data)
std::map< std::string, boost::shared_ptr< ScalingMethod > > scalingMethodsMap
boost::shared_ptr< BcRotVec > bcRotPtr
Apply rotation boundary condition.
MoFEMErrorCode iNtegrate(EntData &data)
MoFEMErrorCode integrate(EntData &data)
OpSpatialConsistencyBubble(const std::string &field_name, boost::shared_ptr< DataAtIntegrationPts > data_ptr)
MoFEMErrorCode integrate(EntData &data)
OpSpatialConsistencyDivTerm(const std::string &field_name, boost::shared_ptr< DataAtIntegrationPts > data_ptr)
MoFEMErrorCode integrate(EntData &data)
OpSpatialConsistencyP(const std::string &field_name, boost::shared_ptr< DataAtIntegrationPts > data_ptr)
OpSpatialConsistency_dBubble_dBubble(std::string row_field, std::string col_field, boost::shared_ptr< DataAtIntegrationPts > data_ptr, const bool has_nonhomogeneous_mat_block)
MoFEMErrorCode integrate(EntData &row_data, EntData &col_data)
MoFEMErrorCode integrateImpl(EntData &row_data, EntData &col_data)
MoFEMErrorCode integrateImpl(EntData &row_data, EntData &col_data)
OpSpatialConsistency_dBubble_dP(std::string row_field, std::string col_field, boost::shared_ptr< DataAtIntegrationPts > data_ptr, const bool has_nonhomogeneous_mat_block)
MoFEMErrorCode integrate(EntData &row_data, EntData &col_data)
MoFEMErrorCode integrate(EntData &row_data, EntData &col_data)
OpSpatialConsistency_dBubble_domega(std::string row_field, std::string col_field, boost::shared_ptr< DataAtIntegrationPts > data_ptr, const bool assemble_off)
OpSpatialConsistency_dP_dP(std::string row_field, std::string col_field, boost::shared_ptr< DataAtIntegrationPts > data_ptr, const bool has_nonhomogeneous_mat_block)
MoFEMErrorCode integrate(EntData &row_data, EntData &col_data)
MoFEMErrorCode integrateImpl(EntData &row_data, EntData &col_data)
MoFEMErrorCode integrate(EntData &row_data, EntData &col_data)
OpSpatialConsistency_dP_domega(std::string row_field, std::string col_field, boost::shared_ptr< DataAtIntegrationPts > data_ptr, const bool assemble_off)
OpSpatialEquilibrium_dw_dP(std::string row_field, std::string col_field, boost::shared_ptr< DataAtIntegrationPts > data_ptr, const bool assemble_off=false)
MoFEMErrorCode integrate(EntData &row_data, EntData &col_data)
MoFEMErrorCode integrate(EntData &row_data, EntData &col_data)
OpSpatialEquilibrium_dw_dw(std::string row_field, std::string col_field, boost::shared_ptr< DataAtIntegrationPts > data_ptr, const double alpha, const double rho)
MoFEMErrorCode integrate(EntData &data)
OpSpatialEquilibrium(const std::string &field_name, boost::shared_ptr< DataAtIntegrationPts > data_ptr, const double alpha, const double rho)
MoFEMErrorCode integrate(EntData &row_data)
OpSpatialPhysicalInternalStress(const std::string &field_name, boost::shared_ptr< DataAtIntegrationPts > data_ptr, boost::shared_ptr< ScalingMethod > scaling_method_ptr)
boost::shared_ptr< ScalingMethod > scalingMethodPtr
OpSpatialPhysical_du_dBubble(std::string row_field, std::string col_field, boost::shared_ptr< DataAtIntegrationPts > data_ptr, const bool assemble_off=false)
MoFEMErrorCode integrate(EntData &row_data, EntData &col_data)
MoFEMErrorCode integrate(EntData &row_data, EntData &col_data)
OpSpatialPhysical_du_dP(std::string row_field, std::string col_field, boost::shared_ptr< DataAtIntegrationPts > data_ptr, const bool assemble_off=false)
MoFEMErrorCode integrate(EntData &row_data, EntData &col_data)
OpSpatialPhysical_du_domega(std::string row_field, std::string col_field, boost::shared_ptr< DataAtIntegrationPts > data_ptr, const bool assemble_off)
boost::shared_ptr< DataAtIntegrationPts > dataAtPts
MoFEMErrorCode iNtegrate(EntData &row_data, EntData &col_data) override
MoFEMErrorCode aSsemble(EntData &row_data, EntData &col_data, const bool) override
OpSpatialRotationPrec(const std::string &field_name, boost::shared_ptr< DataAtIntegrationPts > data_ptr, const double alpha_omega_prec)
MoFEMErrorCode integrate(EntData &row_data, EntData &col_data)
OpSpatialRotation_domega_dBubble(std::string row_field, std::string col_field, boost::shared_ptr< DataAtIntegrationPts > data_ptr, const bool assemble_off)
OpSpatialRotation_domega_dP(std::string row_field, std::string col_field, boost::shared_ptr< DataAtIntegrationPts > data_ptr, const bool assemble_off)
MoFEMErrorCode integrate(EntData &row_data, EntData &col_data)
OpSpatialRotation_domega_domega(std::string row_field, std::string col_field, boost::shared_ptr< DataAtIntegrationPts > data_ptr, double alpha_r, double alpha_omega, double alpha_viscous_r, double alpha_viscous_omega)
MoFEMErrorCode integrate(EntData &row_data, EntData &col_data)
OpSpatialRotation_domega_du(std::string row_field, std::string col_field, boost::shared_ptr< DataAtIntegrationPts > data_ptr, double alpha_omega)
MoFEMErrorCode integrate(EntData &row_data, EntData &col_data)
MoFEMErrorCode integrate(EntData &data)
OpSpatialRotation(const std::string &field_name, boost::shared_ptr< DataAtIntegrationPts > data_ptr, double alpha_r, double alpha_omega, double alpha_viscous_r, double alpha_viscous_omega)
MoFEMErrorCode iNtegrate(EntData &row_data, EntData &col_data)
boost::shared_ptr< SpringBcVec > bcSpringPtr
OpSpringLhsBc_dP(std::string row_field, boost::shared_ptr< std::vector< BrokenBaseSideData > > broken_base_side_data, boost::shared_ptr< SpringBcVec > bc_spring_ptr)
MoFEMErrorCode iNtegrate(EntData &row_data, EntData &col_data)
boost::shared_ptr< SpringBcVec > bcSpringPtr
OpSpringLhsBc_dU(std::string row_field, boost::shared_ptr< SpringBcVec > bc_spring_ptr)
boost::shared_ptr< MatrixDouble > hybridDispPtr
OpSpringRhsBc(std::string row_field, boost::shared_ptr< MatrixDouble > hybrid_disp_ptr, boost::shared_ptr< std::vector< BrokenBaseSideData > > broken_side_data_ptr, boost::shared_ptr< SpringBcVec > bc_spring_ptr)
MoFEMErrorCode iNtegrate(EntData &data)
boost::shared_ptr< SpringBcVec > bcSpringPtr
boost::shared_ptr< std::vector< BrokenBaseSideData > > brokenBaseSideDataPtr
boost::weak_ptr< MatrixDouble > fluxMatPtr
MoFEMErrorCode doWork(int row_side, EntityType row_type, EntitiesFieldData::EntData &row_data)
OpBrokenBaseImpl< OP > BASE
OpStressGram_dBubble_dP(std::string row_field, std::string col_field, boost::shared_ptr< DataAtIntegrationPts > data_ptr)
MoFEMErrorCode integrate(EntData &row_data, EntData &col_data)
MoFEMErrorCode iNtegrate(EntData &row_data, EntData &col_data)
boost::shared_ptr< BcDispVec > bcDispPtr
OpTauStabilizationDispLhsBc(boost::shared_ptr< std::vector< BrokenBaseSideData > > broken_base_side_data, boost::shared_ptr< BcDispVec > &bc_disp_ptr, ScalarFun tau_coeff, boost::shared_ptr< Range > ents_ptr=nullptr)
OpTauStabilizationDispRhsBc(boost::shared_ptr< std::vector< BrokenBaseSideData > > broken_base_side_data, boost::shared_ptr< BcDispVec > &bc_disp_ptr, std::map< std::string, boost::shared_ptr< ScalingMethod > > smv, ScalarFun tau_coeff, boost::shared_ptr< Range > ents_ptr=nullptr)
std::map< std::string, boost::shared_ptr< ScalingMethod > > scalingMethodsMap
MoFEMErrorCode iNtegrate(EntData &data)
boost::shared_ptr< BcDispVec > bcDispPtr
boost::shared_ptr< AnalyticalDisplacementBcVec > bcDispPtr
MoFEMErrorCode iNtegrate(EntData &data)
OpTauStabilizationOpAnalyticalDispBc(boost::shared_ptr< std::vector< BrokenBaseSideData > > broken_base_side_data, boost::shared_ptr< AnalyticalDisplacementBcVec > &bc_disp_ptr, std::map< std::string, boost::shared_ptr< ScalingMethod > > smv, ScalarFun tau_coeff, boost::shared_ptr< Range > ents_ptr=nullptr)
std::map< std::string, boost::shared_ptr< ScalingMethod > > scalingMethodsMap
MoFEMErrorCode iNtegrate(EntData &row_data, EntData &col_data)
boost::shared_ptr< AnalyticalDisplacementBcVec > bcDispPtr
OpTauStabilizationOpAnalyticalDispLhsBc(boost::shared_ptr< std::vector< BrokenBaseSideData > > broken_base_side_data, boost::shared_ptr< AnalyticalDisplacementBcVec > &bc_disp_ptr, ScalarFun tau_coeff, boost::shared_ptr< Range > ents_ptr=nullptr)
boost::shared_ptr< BcRotVec > bcRotPtr
OpTauStabilizationRotationLhsBc(boost::shared_ptr< std::vector< BrokenBaseSideData > > broken_base_side_data, boost::shared_ptr< BcRotVec > &bc_ptr, ScalarFun tau_coeff, boost::shared_ptr< Range > ents_ptr=nullptr)
MoFEMErrorCode iNtegrate(EntData &row_data, EntData &col_data)
std::map< std::string, boost::shared_ptr< ScalingMethod > > scalingMethodsMap
OpTauStabilizationRotationRhsBc(boost::shared_ptr< std::vector< BrokenBaseSideData > > broken_base_side_data, boost::shared_ptr< BcRotVec > &bc_ptr, std::map< std::string, boost::shared_ptr< ScalingMethod > > smv, ScalarFun tau_coeff, boost::shared_ptr< Range > ents_ptr=nullptr)
MoFEMErrorCode iNtegrate(EntData &data)
boost::shared_ptr< BcRotVec > bcRotPtr
double rho
Definition plastic.cpp:145