v0.14.0
FieldEvaluator.cpp
Go to the documentation of this file.
1 /** \file FieldEvaluator.cpp
2  * \brief Field evaluator
3  *
4  */
5 
6 namespace MoFEM {
7 
9  : cOre(const_cast<MoFEM::Core &>(core)) {
10 
11  if (!LogManager::checkIfChannelExist("FieldEvaluatorWorld")) {
12  auto core_log = logging::core::get();
13 
15  "FieldEvaluatorWorld"));
17  "FieldEvaluatorSync"));
19  "FieldEvaluatorSelf"));
20 
21  LogManager::setLog("FieldEvaluatorWorld");
22  LogManager::setLog("FieldEvaluatorSync");
23  LogManager::setLog("FieldEvaluatorSelf");
24 
25  MOFEM_LOG_TAG("FieldEvaluatorWorld", "FieldEvaluator");
26  MOFEM_LOG_TAG("FieldEvaluatorSync", "FieldEvaluator");
27  MOFEM_LOG_TAG("FieldEvaluatorSelf", "FieldEvaluator");
28  }
29 
30  MOFEM_LOG("FieldEvaluatorWorld", Sev::noisy) << "Field evaluator intreface";
31 }
32 
34  boost::typeindex::type_index type_index, UnknownInterface **iface) const {
36  *iface = const_cast<FieldEvaluatorInterface *>(this);
38 }
39 
40 template <int D>
42 FieldEvaluatorInterface::buildTreeImpl(boost::shared_ptr<SetPtsData> spd_ptr,
43  const std::string finite_element) {
44  CoreInterface &m_field = cOre;
46  EntityHandle fe_meshset;
47  fe_meshset = m_field.get_finite_element_meshset(finite_element);
48  Range entities;
49  CHKERR m_field.get_moab().get_entities_by_dimension(fe_meshset, D, entities,
50  true);
51  spd_ptr->treePtr.reset(new AdaptiveKDTree(&m_field.get_moab()));
52  CHKERR spd_ptr->treePtr->build_tree(entities, &spd_ptr->rooTreeSet);
54 }
55 
56 template <>
58 FieldEvaluatorInterface::buildTree<2>(boost::shared_ptr<SetPtsData> spd_ptr,
59  const std::string finite_element) {
60  return buildTreeImpl<2>(spd_ptr, finite_element);
61 }
62 
63 template <>
65 FieldEvaluatorInterface::buildTree<3>(boost::shared_ptr<SetPtsData> spd_ptr,
66  const std::string finite_element) {
67  return buildTreeImpl<3>(spd_ptr, finite_element);
68 }
69 
71 FieldEvaluatorInterface::buildTree3D(boost::shared_ptr<SetPtsData> spd_ptr,
72  const std::string finite_element) {
73  return buildTree<3>(spd_ptr, finite_element);
74 }
75 
77 FieldEvaluatorInterface::buildTree2D(boost::shared_ptr<SetPtsData> spd_ptr,
78  const std::string finite_element) {
79  return buildTree<2>(spd_ptr, finite_element);
80 }
81 
84  int order_row, int order_col,
85  int order_data) {
87 
88  if (auto data_ptr = dataPtr.lock()) {
89 
90  const auto nb_eval_points = data_ptr->nbEvalPoints;
91  const auto &shape_functions = data_ptr->shapeFunctions;
92  const auto &eval_pointentity_handle = data_ptr->evalPointEntityHandle;
93 
94  if (auto fe_ptr = data_ptr->feMethodPtr.lock()) {
95 
96  auto &fe = static_cast<ForcesAndSourcesCore &>(*fe_ptr);
97 
98 #ifndef NDEBUG
99  if (fe_ptr.get() != fe_raw_ptr)
100  SETERRQ(PETSC_COMM_SELF, MOFEM_DATA_INCONSISTENCY, "Wrong FE ptr");
101 #endif
102 
103  const auto fe_ent = fe.numeredEntFiniteElementPtr->getEnt();
104  const auto fe_type = type_from_handle(fe_ent);
105  const auto fe_dim = moab::CN::Dimension(fe_type);
106 
107  auto &gauss_pts = fe.gaussPts;
108  int nb_gauss_pts;
109 
110  if (fe_dim == 3) {
111  gauss_pts.resize(4, nb_eval_points, false);
113  &shape_functions(0, 0), &shape_functions(0, 1),
114  &shape_functions(0, 2), &shape_functions(0, 3)};
116  &gauss_pts(0, 0), &gauss_pts(1, 0), &gauss_pts(2, 0)};
117 
118  nb_gauss_pts = 0;
119  for (int nn = 0; nn != nb_eval_points; ++nn) {
120  if (eval_pointentity_handle[nn] == fe_ent) {
121  for (const int i : {0, 1, 2}) {
122  t_gauss_pts(i) = t_shape(i + 1);
123  }
124  gauss_pts(3, nb_gauss_pts) = nn;
125  ++t_gauss_pts;
126  ++nb_gauss_pts;
127  }
128  ++t_shape;
129  }
130  gauss_pts.resize(4, nb_gauss_pts, true);
131  } else if (fe_dim == 2) {
132  gauss_pts.resize(3, nb_eval_points, false);
134  &shape_functions(0, 0), &shape_functions(0, 1),
135  &shape_functions(0, 2)};
137  &gauss_pts(0, 0), &gauss_pts(1, 0)};
138  nb_gauss_pts = 0;
139  for (int nn = 0; nn != nb_eval_points; ++nn) {
140  if (eval_pointentity_handle[nn] == fe_ent) {
141  for (const int i : {0, 1}) {
142  t_gauss_pts(i) = t_shape(i + 1);
143  }
144  gauss_pts(2, nb_gauss_pts) = nn;
145  ++t_gauss_pts;
146  ++nb_gauss_pts;
147  }
148  ++t_shape;
149  }
150  gauss_pts.resize(3, nb_gauss_pts, true);
151  } else {
152  SETERRQ(PETSC_COMM_SELF, MOFEM_NOT_IMPLEMENTED,
153  "Dimension not implemented");
154  }
155 
156 #ifndef NDEBUG
157  MOFEM_LOG("SELF", Sev::noisy)
158  << "nbEvalOPoints / nbGau_sspt_s: " << nb_eval_points << " / "
159  << nb_gauss_pts;
160  MOFEM_LOG("SELF", Sev::noisy) << "gauss pts: " << gauss_pts;
161 #endif
162 
163  } else
164  SETERRQ(PETSC_COMM_SELF, MOFEM_DATA_INCONSISTENCY,
165  "Pointer to element does not exists");
166 
167  } else
168  SETERRQ(PETSC_COMM_SELF, MOFEM_DATA_INCONSISTENCY,
169  "Pointer to data does not exists");
170 
172 }
173 
174 template <int D>
176  const double *const point, const double distance, const std::string problem,
177  const std::string finite_element, boost::shared_ptr<SetPtsData> data_ptr,
178  int lower_rank, int upper_rank, boost::shared_ptr<CacheTuple> cache_ptr,
179  MoFEMTypes bh, VERBOSITY_LEVELS verb) {
180  CoreInterface &m_field = cOre;
182 
183  std::vector<EntityHandle> leafs_out;
184  CHKERR data_ptr->treePtr->distance_search(point, distance, leafs_out);
185  Range tree_ents;
186  for (auto lit : leafs_out)//{
187  CHKERR m_field.get_moab().get_entities_by_dimension(lit, D, tree_ents,
188  true);
189 
190  if (verb >= NOISY)
191  MOFEM_LOG("SELF", Sev::noisy) << "tree entities: " << tree_ents;
192 
193  data_ptr->evalPointEntityHandle.resize(data_ptr->nbEvalPoints);
194  std::fill(data_ptr->evalPointEntityHandle.begin(),
195  data_ptr->evalPointEntityHandle.end(), 0);
196 
197  std::vector<double> local_coords;
198  std::vector<double> shape;
199 
200  auto nb_eval_points = data_ptr->nbEvalPoints;
201 
202  for (auto tet : tree_ents) {
203  const EntityHandle *conn;
204  int num_nodes;
205  CHKERR m_field.get_moab().get_connectivity(tet, conn, num_nodes, true);
206 
207  if constexpr (D == 3) {
208 
209  local_coords.resize(3 * nb_eval_points);
210  shape.resize(4 * nb_eval_points);
211 
212  std::array<double, 12> coords;
213  CHKERR m_field.get_moab().get_coords(conn, num_nodes, coords.data());
214 
216  coords.data(), &data_ptr->evalPoints[0], nb_eval_points,
217  &local_coords[0]);
218  CHKERR Tools::shapeFunMBTET<3>(&shape[0], &local_coords[0],
219  &local_coords[1], &local_coords[2],
220  nb_eval_points);
221 
224  &shape[0], &shape[1], &shape[2], &shape[3]};
226  &data_ptr->shapeFunctions(0, 0), &data_ptr->shapeFunctions(0, 1),
227  &data_ptr->shapeFunctions(0, 2), &data_ptr->shapeFunctions(0, 3)};
228 
231  &local_coords[0], &local_coords[1], &local_coords[2]};
233  &(data_ptr->localCoords(0, 0)), &(data_ptr->localCoords(0, 1)),
234  &(data_ptr->localCoords(0, 2))};
235 
236  for (int n = 0; n != nb_eval_points; ++n) {
237 
238  const double eps = data_ptr->eps;
239  if (t_shape(0) >= 0 - eps && t_shape(0) <= 1 + eps &&
240 
241  t_shape(1) >= 0 - eps && t_shape(1) <= 1 + eps &&
242 
243  t_shape(2) >= 0 - eps && t_shape(2) <= 1 + eps &&
244 
245  t_shape(3) >= 0 - eps && t_shape(3) <= 1 + eps) {
246 
247  data_ptr->evalPointEntityHandle[n] = tet;
248  t_shape_data(i4) = t_shape(i4);
249  t_local_data(j3) = t_local(j3);
250  }
251 
252  ++t_shape;
253  ++t_shape_data;
254  ++t_local;
255  ++t_local_data;
256  }
257  }
258 
259  if constexpr (D == 2) {
260 
261  local_coords.resize(2 * nb_eval_points);
262  shape.resize(3 * nb_eval_points);
263 
264  std::array<double, 9> coords;
265  CHKERR m_field.get_moab().get_coords(conn, num_nodes, coords.data());
266 
268  coords.data(), &data_ptr->evalPoints[0], nb_eval_points,
269  &local_coords[0]);
270  CHKERR Tools::shapeFunMBTRI<2>(&shape[0], &local_coords[0],
271  &local_coords[1], nb_eval_points);
272 
275  &shape[0], &shape[1], &shape[2]};
277  &data_ptr->shapeFunctions(0, 0), &data_ptr->shapeFunctions(0, 1),
278  &data_ptr->shapeFunctions(0, 2)};
279 
282  &local_coords[0], &local_coords[1]};
283  data_ptr->localCoords.resize(nb_eval_points, 2);
285  &(data_ptr->localCoords(0, 0)), &(data_ptr->localCoords(0, 1))};
286 
287  for (int n = 0; n != nb_eval_points; ++n) {
288 
289  const double eps = data_ptr->eps;
290  if (t_shape(0) >= 0 - eps && t_shape(0) <= 1 + eps &&
291 
292  t_shape(1) >= 0 - eps && t_shape(1) <= 1 + eps &&
293 
294  t_shape(2) >= 0 - eps && t_shape(2) <= 1 + eps) {
295 
296  data_ptr->evalPointEntityHandle[n] = tet;
297  t_shape_data(i3) = t_shape(i3);
298  t_local_data(j2) = t_local(j2);
299  }
300 
301  ++t_shape;
302  ++t_shape_data;
303  ++t_local;
304  ++t_local_data;
305  }
306  }
307  }
308 
309  const Problem *prb_ptr;
310  CHKERR m_field.get_problem(problem, &prb_ptr);
311  boost::shared_ptr<NumeredEntFiniteElement_multiIndex> numered_fes(
313 
314  Range in_tets;
315  in_tets.insert_list(data_ptr->evalPointEntityHandle.begin(),
316  data_ptr->evalPointEntityHandle.end());
317  in_tets = in_tets.subset_by_dimension(D);
318 
319  if (verb >= NOISY)
320  MOFEM_LOG("SELF", Sev::noisy) << "in tets: " << in_tets << endl;
321 
322  auto fe_miit =
323  m_field.get_finite_elements()->get<FiniteElement_name_mi_tag>().find(
324  finite_element);
325  if (fe_miit !=
326  m_field.get_finite_elements()->get<FiniteElement_name_mi_tag>().end()) {
327 
328  for (auto peit = in_tets.pair_begin(); peit != in_tets.pair_end(); ++peit) {
329 
330  auto lo =
331  prb_ptr->numeredFiniteElementsPtr->get<Unique_mi_tag>().lower_bound(
333  peit->first, (*fe_miit)->getFEUId()));
334  auto hi =
335  prb_ptr->numeredFiniteElementsPtr->get<Unique_mi_tag>().upper_bound(
337  peit->second, (*fe_miit)->getFEUId()));
338  numered_fes->insert(lo, hi);
339 
340  if (verb >= VERY_NOISY)
341  std::cerr << "numered elements:" << std::endl;
342  for (; lo != hi; ++lo)
343  if (verb >= VERY_NOISY)
344  std::cerr << **lo << endl;
345  }
346  if (verb >= VERY_NOISY)
347  std::cerr << std::endl;
348 
349  if (auto fe_ptr = data_ptr->feMethodPtr.lock()) {
350 
351  MOFEM_LOG_C("FieldEvaluatorSync", Sev::verbose,
352  "Number elements %d to evaluate at proc %d",
353  numered_fes->size(), m_field.get_comm_rank());
354  MOFEM_LOG_SYNCHRONISE(m_field.get_comm());
355 
356  if (!cache_ptr) {
357  cache_ptr = boost::make_shared<CacheTuple>();
358  CHKERR m_field.cache_problem_entities(prb_ptr->getName(), cache_ptr);
359 
360  MOFEM_LOG("FieldEvaluatorSync", Sev::noisy)
361  << "If you call that function many times in the loop consider to "
362  "set "
363  "cache_ptr outside of the loop. Otherwise code can be slow.";
364  }
365 
366  CHKERR m_field.loop_finite_elements(prb_ptr, finite_element, *fe_ptr,
367  lower_rank, upper_rank, numered_fes,
368  bh, cache_ptr, verb);
369 
370  } else
371  SETERRQ(PETSC_COMM_SELF, MOFEM_DATA_INCONSISTENCY,
372  "Pointer to element does not exists");
373  }
374 
376 }
377 
378 template <>
379 MoFEMErrorCode FieldEvaluatorInterface::evalFEAtThePoint<2>(
380  const double *const point, const double distance, const std::string problem,
381  const std::string finite_element, boost::shared_ptr<SetPtsData> data_ptr,
382  int lower_rank, int upper_rank, boost::shared_ptr<CacheTuple> cache_ptr,
383  MoFEMTypes bh, VERBOSITY_LEVELS verb) {
384  return evalFEAtThePointImpl<2>(point, distance, problem, finite_element,
385  data_ptr, lower_rank, upper_rank, cache_ptr,
386  bh, verb);
387 }
388 
389 template <>
390 MoFEMErrorCode FieldEvaluatorInterface::evalFEAtThePoint<3>(
391  const double *const point, const double distance, const std::string problem,
392  const std::string finite_element, boost::shared_ptr<SetPtsData> data_ptr,
393  int lower_rank, int upper_rank, boost::shared_ptr<CacheTuple> cache_ptr,
394  MoFEMTypes bh, VERBOSITY_LEVELS verb) {
395  return evalFEAtThePointImpl<3>(point, distance, problem, finite_element,
396  data_ptr, lower_rank, upper_rank, cache_ptr,
397  bh, verb);
398 }
399 
401  const double *const point, const double distance, const std::string problem,
402  const std::string finite_element, boost::shared_ptr<SetPtsData> data_ptr,
403  int lower_rank, int upper_rank, boost::shared_ptr<CacheTuple> cache_ptr,
404  MoFEMTypes bh, VERBOSITY_LEVELS verb) {
405  return evalFEAtThePoint<3>(point, distance, problem, finite_element, data_ptr,
406  lower_rank, upper_rank, cache_ptr, bh, verb);
407 }
408 
410  const double *const point, const double distance, const std::string problem,
411  const std::string finite_element, boost::shared_ptr<SetPtsData> data_ptr,
412  int lower_rank, int upper_rank, boost::shared_ptr<CacheTuple> cache_ptr,
413  MoFEMTypes bh, VERBOSITY_LEVELS verb) {
414  return evalFEAtThePoint<2>(point, distance, problem, finite_element, data_ptr,
415  lower_rank, upper_rank, cache_ptr, bh, verb);
416 }
417 
418 } // namespace MoFEM
MoFEMFunctionReturnHot
#define MoFEMFunctionReturnHot(a)
Last executable line of each PETSc function used for error handling. Replaces return()
Definition: definitions.h:460
MoFEM::LogManager::checkIfChannelExist
static bool checkIfChannelExist(const std::string channel)
Check if channel exist.
Definition: LogManager.cpp:404
MoFEM::CoreInterface::loop_finite_elements
virtual MoFEMErrorCode loop_finite_elements(const std::string problem_name, const std::string &fe_name, FEMethod &method, boost::shared_ptr< NumeredEntFiniteElement_multiIndex > fe_ptr=nullptr, MoFEMTypes bh=MF_EXIST, CacheTupleWeakPtr cache_ptr=CacheTupleSharedPtr(), int verb=DEFAULT_VERBOSITY)=0
Make a loop over finite elements.
MoFEM::CoreInterface::get_finite_element_meshset
virtual EntityHandle get_finite_element_meshset(const std::string name) const =0
MoFEM::CoreTmp< 0 >
Core (interface) class.
Definition: Core.hpp:82
FTensor::Tensor1
Definition: Tensor1_value.hpp:8
MoFEM::FieldEvaluatorInterface::query_interface
MoFEMErrorCode query_interface(boost::typeindex::type_index type_index, UnknownInterface **iface) const
Definition: FieldEvaluator.cpp:33
EntityHandle
NOISY
@ NOISY
Definition: definitions.h:224
MoFEM::CoreInterface::get_comm
virtual MPI_Comm & get_comm() const =0
MoFEM::FieldEvaluatorInterface::SetPts::operator()
MoFEMErrorCode operator()(ForcesAndSourcesCore *fe_raw_ptr, int order_row, int order_col, int order_data)
Definition: FieldEvaluator.cpp:83
MoFEM::Exceptions::MoFEMErrorCode
PetscErrorCode MoFEMErrorCode
MoFEM/PETSc error code.
Definition: Exceptions.hpp:56
MoFEM::CoreInterface::get_comm_rank
virtual int get_comm_rank() const =0
VERY_NOISY
@ VERY_NOISY
Definition: definitions.h:225
MoFEM::FieldEvaluatorInterface::FieldEvaluatorInterface
FieldEvaluatorInterface(const MoFEM::Core &core)
Definition: FieldEvaluator.cpp:8
MoFEM::CoreInterface::get_problem
virtual const Problem * get_problem(const std::string problem_name) const =0
Get the problem object.
MoFEM::CoreInterface::get_finite_elements
virtual const FiniteElement_multiIndex * get_finite_elements() const =0
Get the finite elements object.
MoFEM::LogManager::createSink
static boost::shared_ptr< SinkType > createSink(boost::shared_ptr< std::ostream > stream_ptr, std::string comm_filter)
Create a sink object.
Definition: LogManager.cpp:298
MoFEM::FieldEvaluatorInterface::buildTreeImpl
MoFEMErrorCode buildTreeImpl(boost::shared_ptr< SetPtsData > spd_ptr, const std::string finite_element)
Definition: FieldEvaluator.cpp:42
MoFEM::FieldEvaluatorInterface::SetPts::dataPtr
boost::weak_ptr< SetPtsData > dataPtr
Definition: FieldEvaluator.hpp:83
MoFEM::FieldEvaluatorInterface::buildTree3D
DEPRECATED MoFEMErrorCode buildTree3D(boost::shared_ptr< SetPtsData > spd_ptr, const std::string finite_element)
Definition: FieldEvaluator.cpp:71
MoFEM::Tools::getLocalCoordinatesOnReferenceThreeNodeTri
static MoFEMErrorCode getLocalCoordinatesOnReferenceThreeNodeTri(const double *elem_coords, const double *glob_coords, const int nb_nodes, double *local_coords)
Get the local coordinates on reference three node tri object.
Definition: Tools.cpp:188
CHKERR
#define CHKERR
Inline error check.
Definition: definitions.h:548
MoFEM::CoreInterface::get_moab
virtual moab::Interface & get_moab()=0
MoFEM
implementation of Data Operators for Forces and Sources
Definition: Common.hpp:10
VERBOSITY_LEVELS
VERBOSITY_LEVELS
Verbosity levels.
Definition: definitions.h:219
MoFEM::FieldEvaluatorInterface::buildTree2D
DEPRECATED MoFEMErrorCode buildTree2D(boost::shared_ptr< SetPtsData > spd_ptr, const std::string finite_element)
Definition: FieldEvaluator.cpp:77
MOFEM_LOG_C
#define MOFEM_LOG_C(channel, severity, format,...)
Definition: LogManager.hpp:311
MoFEM::FieldEvaluatorInterface
Field evaluator interface.
Definition: FieldEvaluator.hpp:21
MoFEM::EntFiniteElement::getLocalUniqueIdCalculate
UId getLocalUniqueIdCalculate() const
Generate UId for finite element entity.
Definition: FEMultiIndices.hpp:528
MOFEM_LOG_SYNCHRONISE
#define MOFEM_LOG_SYNCHRONISE(comm)
Synchronise "SYNC" channel.
Definition: LogManager.hpp:345
MoFEM::LogManager::getStrmSync
static boost::shared_ptr< std::ostream > getStrmSync()
Get the strm sync object.
Definition: LogManager.cpp:348
MoFEM::FieldEvaluatorInterface::cOre
MoFEM::Core & cOre
Definition: FieldEvaluator.hpp:26
MoFEM::FieldEvaluatorInterface::evalFEAtThePoint3D
DEPRECATED MoFEMErrorCode evalFEAtThePoint3D(const double *const point, const double distance, const std::string problem, const std::string finite_element, boost::shared_ptr< SetPtsData > data_ptr, int lower_rank, int upper_rank, boost::shared_ptr< CacheTuple > cache_ptr, MoFEMTypes bh=MF_EXIST, VERBOSITY_LEVELS verb=QUIET)
Definition: FieldEvaluator.cpp:400
MoFEM::LogManager::getStrmWorld
static boost::shared_ptr< std::ostream > getStrmWorld()
Get the strm world object.
Definition: LogManager.cpp:344
MoFEM::CoreInterface::cache_problem_entities
virtual MoFEMErrorCode cache_problem_entities(const std::string prb_name, CacheTupleWeakPtr cache_ptr)=0
Cache variables.
MoFEM::LogManager::getStrmSelf
static boost::shared_ptr< std::ostream > getStrmSelf()
Get the strm self object.
Definition: LogManager.cpp:340
MoFEM::type_from_handle
auto type_from_handle(const EntityHandle h)
get type from entity handle
Definition: Templates.hpp:1898
MoFEM::Tools::getLocalCoordinatesOnReferenceFourNodeTet
static MoFEMErrorCode getLocalCoordinatesOnReferenceFourNodeTet(const double *elem_coords, const double *glob_coords, const int nb_nodes, double *local_coords)
Get the local coordinates on reference four node tet object.
Definition: Tools.cpp:88
MOFEM_LOG_TAG
#define MOFEM_LOG_TAG(channel, tag)
Tag channel.
Definition: LogManager.hpp:339
i
FTensor::Index< 'i', SPACE_DIM > i
Definition: hcurl_divergence_operator_2d.cpp:27
MoFEM::Problem::numeredFiniteElementsPtr
boost::shared_ptr< NumeredEntFiniteElement_multiIndex > numeredFiniteElementsPtr
store finite elements
Definition: ProblemsMultiIndices.hpp:77
NumeredEntFiniteElement_multiIndex
multi_index_container< boost::shared_ptr< NumeredEntFiniteElement >, indexed_by< ordered_unique< tag< Unique_mi_tag >, const_mem_fun< NumeredEntFiniteElement::interface_type_EntFiniteElement, UId, &NumeredEntFiniteElement::getLocalUniqueId > >, ordered_non_unique< tag< Part_mi_tag >, member< NumeredEntFiniteElement, unsigned int, &NumeredEntFiniteElement::part > >, ordered_non_unique< tag< Ent_mi_tag >, const_mem_fun< NumeredEntFiniteElement::interface_type_RefEntity, EntityHandle, &NumeredEntFiniteElement::getEnt > >, ordered_non_unique< tag< Composite_Name_And_Part_mi_tag >, composite_key< NumeredEntFiniteElement, const_mem_fun< NumeredEntFiniteElement::interface_type_FiniteElement, boost::string_ref, &NumeredEntFiniteElement::getNameRef >, member< NumeredEntFiniteElement, unsigned int, &NumeredEntFiniteElement::part > >> >> NumeredEntFiniteElement_multiIndex
MultiIndex for entities for NumeredEntFiniteElement.
Definition: FEMultiIndices.hpp:830
FTensor::Index
Definition: Index.hpp:23
convert.n
n
Definition: convert.py:82
MoFEM::UnknownInterface
base class for all interface classes
Definition: UnknownInterface.hpp:34
MoFEM::ForcesAndSourcesCore
structure to get information form mofem into EntitiesFieldData
Definition: ForcesAndSourcesCore.hpp:22
MoFEM::FieldEvaluatorInterface::evalFEAtThePointImpl
MoFEMErrorCode evalFEAtThePointImpl(const double *const point, const double distance, const std::string problem, const std::string finite_element, boost::shared_ptr< SetPtsData > data_ptr, int lower_rank, int upper_rank, boost::shared_ptr< CacheTuple > cache_ptr, MoFEMTypes bh=MF_EXIST, VERBOSITY_LEVELS verb=QUIET)
Definition: FieldEvaluator.cpp:175
Range
MOFEM_LOG
#define MOFEM_LOG(channel, severity)
Log.
Definition: LogManager.hpp:308
MoFEM::FiniteElement_name_mi_tag
Definition: TagMultiIndices.hpp:26
eps
static const double eps
Definition: check_base_functions_derivatives_on_tet.cpp:11
MOFEM_DATA_INCONSISTENCY
@ MOFEM_DATA_INCONSISTENCY
Definition: definitions.h:31
MoFEMTypes
MoFEMTypes
Those types control how functions respond on arguments, f.e. error handling.
Definition: definitions.h:110
ReactionDiffusionEquation::D
const double D
diffusivity
Definition: reaction_diffusion.cpp:20
MoFEMFunctionBeginHot
#define MoFEMFunctionBeginHot
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
Definition: definitions.h:453
MoFEM::Unique_mi_tag
Definition: TagMultiIndices.hpp:18
MoFEM::Problem
keeps basic data about problem
Definition: ProblemsMultiIndices.hpp:54
MoFEM::FieldEvaluatorInterface::evalFEAtThePoint2D
DEPRECATED MoFEMErrorCode evalFEAtThePoint2D(const double *const point, const double distance, const std::string problem, const std::string finite_element, boost::shared_ptr< SetPtsData > data_ptr, int lower_rank, int upper_rank, boost::shared_ptr< CacheTuple > cache_ptr, MoFEMTypes bh=MF_EXIST, VERBOSITY_LEVELS verb=QUIET)
Definition: FieldEvaluator.cpp:409
MoFEM::CoreInterface
Interface.
Definition: Interface.hpp:27
MoFEM::LogManager::setLog
static LoggerType & setLog(const std::string channel)
Set ans resset chanel logger.
Definition: LogManager.cpp:389
MoFEM::Problem::getName
auto getName() const
Definition: ProblemsMultiIndices.hpp:372
MoFEMFunctionReturn
#define MoFEMFunctionReturn(a)
Last executable line of each PETSc function used for error handling. Replaces return()
Definition: definitions.h:429
MOFEM_NOT_IMPLEMENTED
@ MOFEM_NOT_IMPLEMENTED
Definition: definitions.h:32
MoFEMFunctionBegin
#define MoFEMFunctionBegin
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
Definition: definitions.h:359