v0.14.0
EssentialDisplacementCubitBcData.hpp
Go to the documentation of this file.
1 /**
2  * @file EssentialDisplacementCubitBcData.hpp
3  * @brief Implementations specialisation for DisplacementCubitBcData
4  * @version 0.13.2
5  * @date 2022-09-18
6  *
7  * @copyright Copyright (c) 2022
8  *
9  */
10 
11 #ifndef _ESSENTIAL_DISPLACEMENTCUBITBCDATA_HPP__
12 #define _ESSENTIAL_DISPLACEMENTCUBITBCDATA_HPP__
13 
14 namespace MoFEM {
15 
16 /**
17  * @brief A specialized version of DisplacementCubitBcData that includes an
18  * additional rotation offset.
19  *
20  * DisplacementCubitBcDataWithRotation extends the DisplacementCubitBcData
21  * structure with a rotation offset and a method to calculate the rotated
22  * displacement given the rotation angles and coordinates.
23  */
25 
26  std::array<double, 3> rotOffset;
28 
29  /**
30  * @brief Calculates the rotated displacement given the rotation angles,
31  * coordinates, and an optional offset.
32  *
33  * @param angles A FTensor::Tensor1 containing the rotation angles.
34  * @param coordinates A FTensor::Tensor1 containing the coordinates.
35  * @param offset An optional FTensor::Tensor1 containing the offset
36  * (default is {0., 0., 0.}).
37  * @return FTensor::Tensor1<double, 3> representing the rotated displacement.
38  */
41  FTensor::Tensor1<double, 3> coordinates,
43  0., 0., 0.}) {
44 
48 
49  FTensor::Tensor1<double, 3> rotated_displacement;
50  rotated_displacement(i) = 0;
51 
52  auto get_rotation = [&](auto &omega) {
53  FTensor::Tensor2<double, 3, 3> rotation_matrix;
54 
56  rotation_matrix(i, j) = kronecker_delta(i, j);
57 
58  const double angle = sqrt(omega(i) * omega(i));
59  if (std::abs(angle) < std::numeric_limits<double>::epsilon())
60  return rotation_matrix;
61 
63  t_omega(i, j) = FTensor::levi_civita<double>(i, j, k) * omega(k);
64  const double a = sin(angle) / angle;
65  const double sin_squared = sin(angle / 2.) * sin(angle / 2.);
66  const double b = 2. * sin_squared / (angle * angle);
67  rotation_matrix(i, j) += a * t_omega(i, j);
68  rotation_matrix(i, j) += b * t_omega(i, k) * t_omega(k, j);
69 
70  return rotation_matrix;
71  };
72 
73  auto rotation = get_rotation(angles);
74  FTensor::Tensor1<double, 3> coordinate_distance;
75  coordinate_distance(i) = offset(i) - coordinates(i);
76  rotated_displacement(i) =
77  coordinate_distance(i) - rotation(j, i) * coordinate_distance(j);
78 
79  return rotated_displacement;
80  }
81 };
82 
83 /**
84  * @brief Specialization for DisplacementCubitBcData
85  *
86  * Specialization to enforce blocksets which DisplacementCubitBcData ptr. That
87  * is to enforce displacement constraints. set
88  *
89  * @tparam
90  */
93  boost::shared_ptr<FEMethod> fe_ptr,
94  std::vector<boost::shared_ptr<ScalingMethod>> smv,
95  bool get_coords = false);
96 
97  MoFEMErrorCode operator()();
98 
99 protected:
101  boost::weak_ptr<FEMethod> fePtr;
103  bool getCoords;
104 };
105 
106 /**
107  * @brief Specialization for DisplacementCubitBcData
108  *
109  * @tparam
110  */
113  boost::shared_ptr<FEMethod> fe_ptr, double diag,
114  SmartPetscObj<Vec> rhs = nullptr);
115 
116  MoFEMErrorCode operator()();
117 
118 protected:
120  boost::weak_ptr<FEMethod> fePtr;
121  double vDiag;
123 };
124 
125 /**
126  * @brief Specialization for DisplacementCubitBcData
127  *
128  * @tparam
129  */
132  boost::shared_ptr<FEMethod> fe_ptr, double diag,
133  SmartPetscObj<Mat> lhs = nullptr,
134  SmartPetscObj<AO> ao = nullptr);
135 
136  MoFEMErrorCode operator()();
137 
138 protected:
140  boost::weak_ptr<FEMethod> fePtr;
141  double vDiag;
144 };
145 
146 /**
147  * @brief Specialization for DisplacementCubitBcData
148  *
149  * @tparam
150  */
153  boost::shared_ptr<FEMethod> fe_ptr,
154  SmartPetscObj<Vec> rhs = nullptr,
155  LogManager::SeverityLevel sev = Sev::inform);
156 
157  MoFEMErrorCode operator()();
158 
159 protected:
161  boost::weak_ptr<FEMethod> fePtr;
164  PetscBool printBlockName; //< print block name when printing reaction
165 };
166 
167 template <int FIELD_DIM, AssemblyType A, IntegrationType I, typename OpBase>
169  : FormsIntegrators<OpBase>::template Assembly<A>::template LinearForm<
170  I>::template OpSource<1, FIELD_DIM> {
171 
172  using OpSource = typename FormsIntegrators<OpBase>::template Assembly<
173  A>::template LinearForm<I>::template OpSource<1, FIELD_DIM>;
174 
175  OpEssentialRhsImpl(const std::string field_name,
176  boost::shared_ptr<DisplacementCubitBcData> bc_data,
177  boost::shared_ptr<Range> ents_ptr,
178  std::vector<boost::shared_ptr<ScalingMethod>> smv);
179 
180 private:
185 
187  double z) {
190  tAngles, FTensor::Tensor1<double, 3>{x, y, z}, tOffset);
192  t_ret(i) = tVal(i) + rot(i);
193  return t_ret;
194  };
195 
197  initDispFunction(boost::shared_ptr<DisplacementCubitBcData> bc_data) {
198  if (bc_data->data.flag4 || bc_data->data.flag5 || bc_data->data.flag6) {
199  return [this](double x, double y, double z) {
200  return this->rotFunction(x, y, z);
201  };
202  }
203  return [this](double x, double y, double z) { return tVal; };
204  }
205 };
206 
207 template <int FIELD_DIM, AssemblyType A, IntegrationType I, typename OpBase>
208 OpEssentialRhsImpl<DisplacementCubitBcData, 1, FIELD_DIM, A, I, OpBase>::
209  OpEssentialRhsImpl(const std::string field_name,
210  boost::shared_ptr<DisplacementCubitBcData> bc_data,
211  boost::shared_ptr<Range> ents_ptr,
212  std::vector<boost::shared_ptr<ScalingMethod>> smv)
213  : OpSource(field_name, initDispFunction(bc_data), ents_ptr),
214  vecOfTimeScalingMethods(smv) {
215  static_assert(FIELD_DIM > 1, "Is not implemented for scalar field");
216 
218  tVal(i) = 0;
219  tAngles(i) = 0;
220  tOffset(i) = 0;
221 
222  if (bc_data->data.flag1 == 1)
223  tVal(0) = -bc_data->data.value1;
224  if (bc_data->data.flag2 == 1 && FIELD_DIM > 1)
225  tVal(1) = -bc_data->data.value2;
226  if (bc_data->data.flag3 == 1 && FIELD_DIM > 2)
227  tVal(2) = -bc_data->data.value3;
228  if (bc_data->data.flag4 == 1 && FIELD_DIM > 2)
229  tAngles(0) = -bc_data->data.value4;
230  if (bc_data->data.flag5 == 1 && FIELD_DIM > 2)
231  tAngles(1) = -bc_data->data.value5;
232  if (bc_data->data.flag6 == 1 && FIELD_DIM > 1)
233  tAngles(2) = -bc_data->data.value6;
234 
235  if (auto ext_bc_data =
236  dynamic_cast<DisplacementCubitBcDataWithRotation const *>(
237  bc_data.get())) {
238  for (int a = 0; a != 3; ++a)
239  tOffset(a) = ext_bc_data->rotOffset[a];
240  }
241 
242  this->timeScalingFun = [this](const double t) {
243  double s = 1;
244  for (auto &o : vecOfTimeScalingMethods) {
245  s *= o->getScale(t);
246  }
247  return s;
248  };
249 }
250 
251 template <int BASE_DIM, int FIELD_DIM, AssemblyType A, IntegrationType I,
252  typename OpBase>
254  OpBase>
255  : FormsIntegrators<OpBase>::template Assembly<A>::template BiLinearForm<
256  I>::template OpMass<BASE_DIM, FIELD_DIM> {
257 
258  using OpMass = typename FormsIntegrators<OpBase>::template Assembly<
260 
261  OpEssentialLhsImpl(const std::string field_name,
262  boost::shared_ptr<Range> ents_ptr);
263 };
264 
265 template <int BASE_DIM, int FIELD_DIM, AssemblyType A, IntegrationType I,
266  typename OpBase>
269  boost::shared_ptr<Range>
270  ents_ptr)
271  : OpMass(
273 
274  [](double, double, double) constexpr { return 1; },
275 
276  ents_ptr) {}
277 
278 template <int BASE_DIM, int FIELD_DIM, AssemblyType A, IntegrationType I,
279  typename OpBase>
281 
283  OpBase>,
284  A, I, OpBase
285 
286  > {
287 
289 
291 
292  MoFEM::Interface &m_field,
293  boost::ptr_deque<ForcesAndSourcesCore::UserDataOperator> &pipeline,
294  const std::string problem_name, std::string field_name,
295  boost::shared_ptr<MatrixDouble> field_mat_ptr,
296  std::vector<boost::shared_ptr<ScalingMethod>> smv
297 
298  ) {
300 
301  using OP =
302  typename EssentialBC<OpBase>::template Assembly<A>::template LinearForm<
303  I>::template OpEssentialRhs<DisplacementCubitBcData, BASE_DIM,
304  FIELD_DIM>;
305  using OpInternal = typename FormsIntegrators<OpBase>::template Assembly<
306  A>::template LinearForm<I>::template OpBaseTimesVector<BASE_DIM,
307  FIELD_DIM, 1>;
308 
309  auto add_op = [&](auto &bcs) {
311  for (auto &m : bcs) {
312  if (auto bc = m.second->dispBcPtr) {
313  auto &bc_id = m.first;
314  auto regex_str =
315  (boost::format("%s_%s_(.*)") % problem_name % field_name).str();
316  if (std::regex_match(bc_id, std::regex(regex_str))) {
317  MOFEM_TAG_AND_LOG("SELF", Sev::noisy, "OpEssentialRhs") << *bc;
318  pipeline.push_back(
319  new OpSetBc(field_name, false, m.second->getBcMarkersPtr()));
320  pipeline.push_back(
321  new OP(field_name, bc, m.second->getBcEntsPtr(), smv));
322  pipeline.push_back(new OpInternal(
323  field_name, field_mat_ptr,
324  [](double, double, double) constexpr { return 1.; },
325  m.second->getBcEntsPtr()));
326  pipeline.push_back(new OpUnSetBc(field_name));
327  }
328  }
329  }
330  MOFEM_LOG_CHANNEL("SELF");
332  };
333 
334  CHKERR add_op(m_field.getInterface<BcManager>()->getBcMapByBlockName());
335 
337  }
338 };
339 
340 template <int BASE_DIM, int FIELD_DIM, AssemblyType A, IntegrationType I,
341  typename OpBase>
343 
345  OpBase>,
346  A, I, OpBase
347 
348  > {
349 
351 
353 
354  MoFEM::Interface &m_field,
355  boost::ptr_deque<ForcesAndSourcesCore::UserDataOperator> &pipeline,
356  const std::string problem_name, std::string field_name
357 
358  ) {
360 
361  using OP = typename EssentialBC<OpBase>::template Assembly<A>::
362  template BiLinearForm<I>::template OpEssentialLhs<
364 
365  auto add_op = [&](auto &bcs) {
367  for (auto &m : bcs) {
368  if (auto bc = m.second->dispBcPtr) {
369  auto &bc_id = m.first;
370  auto regex_str =
371  (boost::format("%s_%s_(.*)") % problem_name % field_name).str();
372  if (std::regex_match(bc_id, std::regex(regex_str))) {
373  MOFEM_TAG_AND_LOG("SELF", Sev::noisy, "OpEssentialLhs") << *bc;
374  pipeline.push_back(
375  new OpSetBc(field_name, false, m.second->getBcMarkersPtr()));
376  pipeline.push_back(new OP(field_name, m.second->getBcEntsPtr()));
377  pipeline.push_back(new OpUnSetBc(field_name));
378  }
379  }
380  }
381  MOFEM_LOG_CHANNEL("SELF");
383  };
384 
385  CHKERR add_op(m_field.getInterface<BcManager>()->getBcMapByBlockName());
386 
388  }
389 };
390 
391 } // namespace MoFEM
392 
393 #endif // _ESSENTIAL_DISPLACEMENTCUBITBCDATA_HPP__
MoFEMFunctionReturnHot
#define MoFEMFunctionReturnHot(a)
Last executable line of each PETSc function used for error handling. Replaces return()
Definition: definitions.h:447
MoFEM::UnknownInterface::getInterface
MoFEMErrorCode getInterface(IFACE *&iface) const
Get interface refernce to pointer of interface.
Definition: UnknownInterface.hpp:93
omega
constexpr double omega
Save field DOFS on vertices/tags.
Definition: dynamic_first_order_con_law.cpp:93
MoFEM::DisplacementCubitBcDataWithRotation::DisplacementCubitBcDataWithRotation
DisplacementCubitBcDataWithRotation()
Definition: EssentialDisplacementCubitBcData.hpp:27
MoFEM::OpEssentialRhsImpl< DisplacementCubitBcData, 1, FIELD_DIM, A, I, OpBase >::rotFunction
FTensor::Tensor1< double, FIELD_DIM > rotFunction(double x, double y, double z)
Definition: EssentialDisplacementCubitBcData.hpp:186
FTensor::Tensor1< double, 3 >
MOFEM_LOG_CHANNEL
#define MOFEM_LOG_CHANNEL(channel)
Set and reset channel.
Definition: LogManager.hpp:284
MoFEM::OpEssentialRhsImpl< DisplacementCubitBcData, 1, FIELD_DIM, A, I, OpBase >::tVal
FTensor::Tensor1< double, FIELD_DIM > tVal
Definition: EssentialDisplacementCubitBcData.hpp:181
MoFEM::EssentialPreProc< DisplacementCubitBcData >::vecOfTimeScalingMethods
VecOfTimeScalingMethods vecOfTimeScalingMethods
Definition: EssentialDisplacementCubitBcData.hpp:102
MoFEM::OpEssentialRhsImpl< DisplacementCubitBcData, 1, FIELD_DIM, A, I, OpBase >::tAngles
FTensor::Tensor1< double, 3 > tAngles
Definition: EssentialDisplacementCubitBcData.hpp:182
MoFEM::OpEssentialRhsImpl< DisplacementCubitBcData, 1, FIELD_DIM, A, I, OpBase >::vecOfTimeScalingMethods
VecOfTimeScalingMethods vecOfTimeScalingMethods
Definition: EssentialDisplacementCubitBcData.hpp:184
MoFEM::DisplacementCubitBcDataWithRotation::rotOffset
std::array< double, 3 > rotOffset
Definition: EssentialDisplacementCubitBcData.hpp:26
MoFEM::EssentialBC
Essential boundary conditions.
Definition: Essential.hpp:111
MoFEM::Exceptions::MoFEMErrorCode
PetscErrorCode MoFEMErrorCode
MoFEM/PETSc error code.
Definition: Exceptions.hpp:56
MoFEM::EssentialPreProcReaction< DisplacementCubitBcData >::vRhs
SmartPetscObj< Vec > vRhs
Definition: EssentialDisplacementCubitBcData.hpp:162
FTensor::Kronecker_Delta
Kronecker Delta class.
Definition: Kronecker_Delta.hpp:15
A
constexpr AssemblyType A
Definition: operators_tests.cpp:30
MoFEM::DisplacementCubitBcData
Definition of the displacement bc data structure.
Definition: BCData.hpp:76
MoFEM::OpEssentialRhsImpl< DisplacementCubitBcData, 1, FIELD_DIM, A, I, OpBase >::OpSource
typename FormsIntegrators< OpBase >::template Assembly< A >::template LinearForm< I >::template OpSource< 1, FIELD_DIM > OpSource
Definition: EssentialDisplacementCubitBcData.hpp:173
MoFEM::EssentialPostProcLhs< DisplacementCubitBcData >::fePtr
boost::weak_ptr< FEMethod > fePtr
Definition: EssentialDisplacementCubitBcData.hpp:140
BASE_DIM
constexpr int BASE_DIM
Definition: dg_projection.cpp:15
MoFEM::EssentialPostProcLhs< DisplacementCubitBcData >::mField
MoFEM::Interface & mField
Definition: EssentialDisplacementCubitBcData.hpp:139
FTensor::Tensor2< double, 3, 3 >
MoFEM::DeprecatedCoreInterface
Deprecated interface functions.
Definition: DeprecatedCoreInterface.hpp:16
FIELD_DIM
constexpr int FIELD_DIM
Definition: child_and_parent.cpp:15
I
constexpr IntegrationType I
Definition: operators_tests.cpp:31
MoFEM::EssentialPostProcLhs< DisplacementCubitBcData >::vDiag
double vDiag
Definition: EssentialDisplacementCubitBcData.hpp:141
MoFEM::OpBaseImpl
Definition: FormsIntegrators.hpp:170
CHKERR
#define CHKERR
Inline error check.
Definition: definitions.h:535
MoFEM
implementation of Data Operators for Forces and Sources
Definition: Common.hpp:10
MoFEM::VectorFun
boost::function< FTensor::Tensor1< double, DIM >(const double, const double, const double)> VectorFun
Vector function type.
Definition: FormsIntegrators.hpp:168
a
constexpr double a
Definition: approx_sphere.cpp:30
MoFEM::BcManager
Simple interface for fast problem set-up.
Definition: BcManager.hpp:25
MoFEM::EssentialPreProcReaction< DisplacementCubitBcData >::fePtr
boost::weak_ptr< FEMethod > fePtr
Definition: EssentialDisplacementCubitBcData.hpp:161
MoFEM::EssentialPostProcLhs< DisplacementCubitBcData >::vLhs
SmartPetscObj< Mat > vLhs
Definition: EssentialDisplacementCubitBcData.hpp:142
MoFEM::EssentialPreProc< DisplacementCubitBcData >::mField
MoFEM::Interface & mField
Definition: EssentialDisplacementCubitBcData.hpp:100
double
MoFEM::OpEssentialLhsImpl
Enforce essential constrains on lhs.
Definition: Essential.hpp:81
MoFEM::BcManager::getBcMapByBlockName
BcMapByBlockName & getBcMapByBlockName()
Get the bc map.
Definition: BcManager.hpp:207
MoFEM::AddEssentialToRhsPipelineImpl
Function (factory) for setting operators for rhs pipeline.
Definition: Essential.hpp:92
MoFEM::EssentialPostProcLhs
Class (Function) to enforce essential constrains on the left hand side diagonal.
Definition: Essential.hpp:33
MoFEM::AddEssentialToLhsPipelineImpl< OpEssentialLhsImpl< DisplacementCubitBcData, BASE_DIM, FIELD_DIM, A, I, OpBase >, A, I, OpBase >::add
static MoFEMErrorCode add(MoFEM::Interface &m_field, boost::ptr_deque< ForcesAndSourcesCore::UserDataOperator > &pipeline, const std::string problem_name, std::string field_name)
Definition: EssentialDisplacementCubitBcData.hpp:352
MoFEM::AddEssentialToLhsPipelineImpl
Function (factory) for setting operators for lhs pipeline.
Definition: Essential.hpp:103
MoFEM::EssentialPreProcReaction< DisplacementCubitBcData >::mField
MoFEM::Interface & mField
Definition: EssentialDisplacementCubitBcData.hpp:160
MoFEM::EssentialPreProc< DisplacementCubitBcData >::getCoords
bool getCoords
Definition: EssentialDisplacementCubitBcData.hpp:103
MoFEM::EssentialPostProcRhs< DisplacementCubitBcData >::fePtr
boost::weak_ptr< FEMethod > fePtr
Definition: EssentialDisplacementCubitBcData.hpp:120
MoFEM::DisplacementCubitBcDataWithRotation::GetRotDisp
static FTensor::Tensor1< double, 3 > GetRotDisp(const FTensor::Tensor1< double, 3 > &angles, FTensor::Tensor1< double, 3 > coordinates, FTensor::Tensor1< double, 3 > offset=FTensor::Tensor1< double, 3 >{ 0., 0., 0.})
Calculates the rotated displacement given the rotation angles, coordinates, and an optional offset.
Definition: EssentialDisplacementCubitBcData.hpp:40
MoFEM::LogManager::SeverityLevel
SeverityLevel
Severity levels.
Definition: LogManager.hpp:33
MoFEM::EssentialPostProcRhs< DisplacementCubitBcData >::vRhs
SmartPetscObj< Vec > vRhs
Definition: EssentialDisplacementCubitBcData.hpp:122
t
constexpr double t
plate stiffness
Definition: plate.cpp:59
i
FTensor::Index< 'i', SPACE_DIM > i
Definition: hcurl_divergence_operator_2d.cpp:27
MoFEM::EssentialPreProcReaction
Class (Function) to calculate residual side diagonal.
Definition: Essential.hpp:49
BiLinearForm
MoFEM::AddEssentialToRhsPipelineImpl< OpEssentialRhsImpl< DisplacementCubitBcData, BASE_DIM, FIELD_DIM, A, I, OpBase >, A, I, OpBase >::add
static MoFEMErrorCode add(MoFEM::Interface &m_field, boost::ptr_deque< ForcesAndSourcesCore::UserDataOperator > &pipeline, const std::string problem_name, std::string field_name, boost::shared_ptr< MatrixDouble > field_mat_ptr, std::vector< boost::shared_ptr< ScalingMethod >> smv)
Definition: EssentialDisplacementCubitBcData.hpp:290
MoFEM::EssentialPostProcRhs
Class (Function) to enforce essential constrains on the right hand side diagonal.
Definition: Essential.hpp:41
field_name
constexpr auto field_name
Definition: poisson_2d_homogeneous.cpp:13
FTensor::Index< 'i', 3 >
MoFEM::IntegrationType
IntegrationType
Form integrator integration types.
Definition: FormsIntegrators.hpp:128
MoFEM::EssentialPostProcRhs< DisplacementCubitBcData >::vDiag
double vDiag
Definition: EssentialDisplacementCubitBcData.hpp:121
MoFEM::OpEssentialRhsImpl< DisplacementCubitBcData, 1, FIELD_DIM, A, I, OpBase >::initDispFunction
VectorFun< FIELD_DIM > initDispFunction(boost::shared_ptr< DisplacementCubitBcData > bc_data)
Definition: EssentialDisplacementCubitBcData.hpp:197
MoFEM::OpUnSetBc
Definition: FormsIntegrators.hpp:49
MoFEM::OpEssentialLhsImpl< DisplacementCubitBcData, BASE_DIM, FIELD_DIM, A, I, OpBase >::OpMass
typename FormsIntegrators< OpBase >::template Assembly< A >::template BiLinearForm< I >::template OpMass< BASE_DIM, FIELD_DIM > OpMass
Definition: EssentialDisplacementCubitBcData.hpp:259
MOFEM_TAG_AND_LOG
#define MOFEM_TAG_AND_LOG(channel, severity, tag)
Tag and log in channel.
Definition: LogManager.hpp:362
MoFEM::OpEssentialRhsImpl
Enforce essential constrains on rhs.
Definition: Essential.hpp:65
MoFEM::AssemblyType
AssemblyType
[Storage and set boundary conditions]
Definition: FormsIntegrators.hpp:104
FTensor::kronecker_delta
Tensor2_Expr< Kronecker_Delta< T >, T, Dim0, Dim1, i, j > kronecker_delta(const Index< i, Dim0 > &, const Index< j, Dim1 > &)
Rank 2.
Definition: Kronecker_Delta.hpp:81
j
FTensor::Index< 'j', 3 > j
Definition: matrix_function.cpp:19
MoFEM::EssentialPreProcReaction< DisplacementCubitBcData >::sevLevel
LogManager::SeverityLevel sevLevel
Definition: EssentialDisplacementCubitBcData.hpp:163
MoFEM::VecOfTimeScalingMethods
std::vector< boost::shared_ptr< ScalingMethod > > VecOfTimeScalingMethods
Vector of time scaling methods.
Definition: Natural.hpp:20
MoFEM::OpSetBc
Set indices on entities on finite element.
Definition: FormsIntegrators.hpp:38
MoFEM::EssentialPreProcReaction< DisplacementCubitBcData >::printBlockName
PetscBool printBlockName
Definition: EssentialDisplacementCubitBcData.hpp:164
MoFEM::FormsIntegrators
Integrator forms.
Definition: FormsIntegrators.hpp:291
MoFEM::OpEssentialRhsImpl< DisplacementCubitBcData, 1, FIELD_DIM, A, I, OpBase >::tOffset
FTensor::Tensor1< double, 3 > tOffset
Definition: EssentialDisplacementCubitBcData.hpp:183
m
FTensor::Index< 'm', 3 > m
Definition: shallow_wave.cpp:80
MoFEMFunctionBeginHot
#define MoFEMFunctionBeginHot
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
Definition: definitions.h:440
MoFEM::DisplacementCubitBcDataWithRotation
A specialized version of DisplacementCubitBcData that includes an additional rotation offset.
Definition: EssentialDisplacementCubitBcData.hpp:24
MoFEM::EssentialPreProc
Class (Function) to enforce essential constrains.
Definition: Essential.hpp:25
MoFEM::SmartPetscObj< Vec >
k
FTensor::Index< 'k', 3 > k
Definition: matrix_function.cpp:20
OP
MoFEMFunctionReturn
#define MoFEMFunctionReturn(a)
Last executable line of each PETSc function used for error handling. Replaces return()
Definition: definitions.h:416
MoFEMFunctionBegin
#define MoFEMFunctionBegin
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
Definition: definitions.h:346
MoFEM::EssentialPreProc< DisplacementCubitBcData >::fePtr
boost::weak_ptr< FEMethod > fePtr
Definition: EssentialDisplacementCubitBcData.hpp:101
MoFEM::EssentialPostProcRhs< DisplacementCubitBcData >::mField
MoFEM::Interface & mField
Definition: EssentialDisplacementCubitBcData.hpp:119
MoFEM::EssentialPostProcLhs< DisplacementCubitBcData >::vAO
SmartPetscObj< AO > vAO
Definition: EssentialDisplacementCubitBcData.hpp:143