v0.14.0
Loading...
Searching...
No Matches
Classes | Public Member Functions | Public Attributes | Private Member Functions | List of all members
MoFEM::FieldEvaluatorInterface Struct Reference

Field evaluator interface. More...

#include <src/interfaces/FieldEvaluator.hpp>

Inheritance diagram for MoFEM::FieldEvaluatorInterface:
[legend]
Collaboration diagram for MoFEM::FieldEvaluatorInterface:
[legend]

Classes

struct  SetPts
 Default evaluator for setting integration points. More...
 
struct  SetPtsData
 

Public Member Functions

MoFEMErrorCode query_interface (boost::typeindex::type_index type_index, UnknownInterface **iface) const
 
 FieldEvaluatorInterface (const MoFEM::Core &core)
 
template<typename VE , typename SPD = SetPtsData, typename SP = SetPts>
boost::shared_ptr< SPD > getData (const double *ptr=nullptr, const int nb_eval_points=0, const double eps=1e-12, VERBOSITY_LEVELS verb=QUIET)
 Get the Data object. More...
 
MoFEMErrorCode buildTree3D (boost::shared_ptr< SetPtsData > spd_ptr, const std::string finite_element)
 Build spatial tree. More...
 
MoFEMErrorCode buildTree2D (boost::shared_ptr< SetPtsData > spd_ptr, const std::string finite_element)
 Build spatial tree. More...
 
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)
 Evaluate field at artbitray position. More...
 
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)
 Evaluate field at artbitray position. More...
 
- Public Member Functions inherited from MoFEM::UnknownInterface
virtual MoFEMErrorCode query_interface (boost::typeindex::type_index type_index, UnknownInterface **iface) const =0
 
template<class IFACE >
MoFEMErrorCode registerInterface (bool error_if_registration_failed=true)
 Register interface. More...
 
template<class IFACE >
MoFEMErrorCode getInterface (IFACE *&iface) const
 Get interface refernce to pointer of interface. More...
 
template<class IFACE >
MoFEMErrorCode getInterface (IFACE **const iface) const
 Get interface pointer to pointer of interface. More...
 
template<class IFACE , typename boost::enable_if< boost::is_pointer< IFACE >, int >::type = 0>
IFACE getInterface () const
 Get interface pointer to pointer of interface. More...
 
template<class IFACE , typename boost::enable_if< boost::is_reference< IFACE >, int >::type = 0>
IFACE getInterface () const
 Get reference to interface. More...
 
template<class IFACE >
IFACE * getInterface () const
 Function returning pointer to interface. More...
 
virtual ~UnknownInterface ()=default
 

Public Attributes

MoFEM::CorecOre
 

Private Member Functions

template<int D>
MoFEMErrorCode buildTree (boost::shared_ptr< SetPtsData > spd_ptr, const std::string finite_element)
 Build spatial tree. More...
 
template<int D>
MoFEMErrorCode evalFEAtThePoint (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)
 Evaluate field at artbitray position. More...
 

Additional Inherited Members

- Static Public Member Functions inherited from MoFEM::UnknownInterface
static MoFEMErrorCode getLibVersion (Version &version)
 Get library version. More...
 
static MoFEMErrorCode getFileVersion (moab::Interface &moab, Version &version)
 Get database major version. More...
 
static MoFEMErrorCode setFileVersion (moab::Interface &moab, Version version=Version(MoFEM_VERSION_MAJOR, MoFEM_VERSION_MINOR, MoFEM_VERSION_BUILD))
 Get database major version. More...
 
static MoFEMErrorCode getInterfaceVersion (Version &version)
 Get database major version. More...
 

Detailed Description

Field evaluator interface.

Examples
dynamic_first_order_con_law.cpp, elasticity.cpp, field_evaluator.cpp, lorentz_force.cpp, and thermo_elastic.cpp.

Definition at line 21 of file FieldEvaluator.hpp.

Constructor & Destructor Documentation

◆ FieldEvaluatorInterface()

MoFEM::FieldEvaluatorInterface::FieldEvaluatorInterface ( const MoFEM::Core core)

Definition at line 8 of file FieldEvaluator.cpp.

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}
static LoggerType & setLog(const std::string channel)
Set ans resset chanel logger.
Definition: LogManager.cpp:389
#define MOFEM_LOG(channel, severity)
Log.
Definition: LogManager.hpp:308
#define MOFEM_LOG_TAG(channel, tag)
Tag channel.
Definition: LogManager.hpp:339
Core (interface) class.
Definition: Core.hpp:82
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
static boost::shared_ptr< std::ostream > getStrmWorld()
Get the strm world object.
Definition: LogManager.cpp:344
static boost::shared_ptr< std::ostream > getStrmSync()
Get the strm sync object.
Definition: LogManager.cpp:348
static bool checkIfChannelExist(const std::string channel)
Check if channel exist.
Definition: LogManager.cpp:399
static boost::shared_ptr< std::ostream > getStrmSelf()
Get the strm self object.
Definition: LogManager.cpp:340

Member Function Documentation

◆ buildTree()

template<int D>
MoFEMErrorCode MoFEM::FieldEvaluatorInterface::buildTree ( boost::shared_ptr< SetPtsData spd_ptr,
const std::string  finite_element 
)
private

Build spatial tree.

Parameters
finite_elementfinite element name
Returns
MoFEMErrorCode

Definition at line 42 of file FieldEvaluator.cpp.

43 {
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}
#define MoFEMFunctionBegin
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
Definition: definitions.h:346
#define MoFEMFunctionReturn(a)
Last executable line of each PETSc function used for error handling. Replaces return()
Definition: definitions.h:416
#define CHKERR
Inline error check.
Definition: definitions.h:535
double D

◆ buildTree2D()

MoFEMErrorCode MoFEM::FieldEvaluatorInterface::buildTree2D ( boost::shared_ptr< SetPtsData spd_ptr,
const std::string  finite_element 
)

Build spatial tree.

Parameters
finite_elementfinite element name
Returns
MoFEMErrorCode
Examples
field_evaluator.cpp.

Definition at line 63 of file FieldEvaluator.cpp.

64 {
65 return buildTree<2>(spd_ptr, finite_element);
66}

◆ buildTree3D()

MoFEMErrorCode MoFEM::FieldEvaluatorInterface::buildTree3D ( boost::shared_ptr< SetPtsData spd_ptr,
const std::string  finite_element 
)

Build spatial tree.

Parameters
finite_elementfinite element name
Returns
MoFEMErrorCode
Examples
field_evaluator.cpp, and lorentz_force.cpp.

Definition at line 57 of file FieldEvaluator.cpp.

58 {
59 return buildTree<3>(spd_ptr, finite_element);
60}

◆ evalFEAtThePoint()

template<int D>
MoFEMErrorCode MoFEM::FieldEvaluatorInterface::evalFEAtThePoint ( 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 
)
private

Evaluate field at artbitray position.

std::array<double, 3> point = {0, 0, 0};
const double dist = 0.3;
std::array<double, 6> eval_points = {-1., -1., -1., 1., 1., 1. };
using VolEle = VolumeElementForcesAndSourcesCore;
auto data_ptr =
m_field.getInterface<FieldEvaluatorInterface>()->
getData<VolEle>(point.data(), point.size/3);
if(auto vol_ele = data_ptr->feMethod.lock()) {
// push operators to finite element instance, e.g.
vol_ele->getOpPtrVector().push_back(new MyOp());
// iterate over elemnts with evaluated points
auto cache_ptr = boost::make_shared<CacheTuple>();
CHKERR m_field.cache_problem_entities(prb_ptr->getName(), cache_ptr);
CHKERR m_field.getInterface<FieldEvaluatorInterface>()
->evalFEAtThePoint3D(point.data(), dist, prb_ptr->getName(),
"FINITE_ELEMENT_NAME",
data_ptr, m_field.get_comm_rank(),
m_field.get_comm_rank(), cache_ptr);
}
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)
Evaluate field at artbitray position.
MoFEMErrorCode getInterface(IFACE *&iface) const
Get interface refernce to pointer of interface.
Operator used to check consistency between local coordinates and global cooridnates for integrated po...
Parameters
pointpoint used to find tetrahedrons
distancedistance from the point where tetrahedrons are searched
problemproblem name
finite_elementfinite element name
data_ptrpointer to data abut gauss points
lower_ranklower processor
upper_rankupper process
cache_ptrcache or problem entities
bhcontrol looping over entities, e.g. throwing error if element not found
verbverbosity level
Returns
MoFEMErrorCode

Definition at line 161 of file FieldEvaluator.cpp.

165 {
166 CoreInterface &m_field = cOre;
168
169 std::vector<EntityHandle> leafs_out;
170 CHKERR data_ptr->treePtr->distance_search(point, distance, leafs_out);
171 Range tree_ents;
172 for (auto lit : leafs_out)//{
173 CHKERR m_field.get_moab().get_entities_by_dimension(lit, D, tree_ents,
174 true);
175
176 if (verb >= NOISY)
177 MOFEM_LOG("SELF", Sev::noisy) << "tree entities: " << tree_ents;
178
179 data_ptr->evalPointEntityHandle.resize(data_ptr->nbEvalPoints);
180 std::fill(data_ptr->evalPointEntityHandle.begin(),
181 data_ptr->evalPointEntityHandle.end(), 0);
182
183 std::vector<double> local_coords;
184 std::vector<double> shape;
185
186 auto nb_eval_points = data_ptr->nbEvalPoints;
187
188 for (auto tet : tree_ents) {
189 const EntityHandle *conn;
190 int num_nodes;
191 CHKERR m_field.get_moab().get_connectivity(tet, conn, num_nodes, true);
192
193 if constexpr (D == 3) {
194
195 local_coords.resize(3 * nb_eval_points);
196 shape.resize(4 * nb_eval_points);
197
198 std::array<double, 12> coords;
199 CHKERR m_field.get_moab().get_coords(conn, num_nodes, coords.data());
200
202 coords.data(), &data_ptr->evalPoints[0], nb_eval_points,
203 &local_coords[0]);
204 CHKERR Tools::shapeFunMBTET<3>(&shape[0], &local_coords[0],
205 &local_coords[1], &local_coords[2],
206 nb_eval_points);
207
210 &shape[0], &shape[1], &shape[2], &shape[3]};
212 &data_ptr->shapeFunctions(0, 0), &data_ptr->shapeFunctions(0, 1),
213 &data_ptr->shapeFunctions(0, 2), &data_ptr->shapeFunctions(0, 3)};
214
217 &local_coords[0], &local_coords[1], &local_coords[2]};
219 &(data_ptr->localCoords(0, 0)), &(data_ptr->localCoords(0, 1)),
220 &(data_ptr->localCoords(0, 2))};
221
222 for (int n = 0; n != nb_eval_points; ++n) {
223
224 const double eps = data_ptr->eps;
225 if (t_shape(0) >= 0 - eps && t_shape(0) <= 1 + eps &&
226
227 t_shape(1) >= 0 - eps && t_shape(1) <= 1 + eps &&
228
229 t_shape(2) >= 0 - eps && t_shape(2) <= 1 + eps &&
230
231 t_shape(3) >= 0 - eps && t_shape(3) <= 1 + eps) {
232
233 data_ptr->evalPointEntityHandle[n] = tet;
234 t_shape_data(i4) = t_shape(i4);
235 t_local_data(j3) = t_local(j3);
236 }
237
238 ++t_shape;
239 ++t_shape_data;
240 ++t_local;
241 ++t_local_data;
242 }
243 }
244
245 if constexpr (D == 2) {
246
247 local_coords.resize(2 * nb_eval_points);
248 shape.resize(3 * nb_eval_points);
249
250 std::array<double, 9> coords;
251 CHKERR m_field.get_moab().get_coords(conn, num_nodes, coords.data());
252
254 coords.data(), &data_ptr->evalPoints[0], nb_eval_points,
255 &local_coords[0]);
256 CHKERR Tools::shapeFunMBTRI<2>(&shape[0], &local_coords[0],
257 &local_coords[1], nb_eval_points);
258
261 &shape[0], &shape[1], &shape[2]};
263 &data_ptr->shapeFunctions(0, 0), &data_ptr->shapeFunctions(0, 1),
264 &data_ptr->shapeFunctions(0, 2)};
265
268 &local_coords[0], &local_coords[1]};
269 data_ptr->localCoords.resize(nb_eval_points, 2);
271 &(data_ptr->localCoords(0, 0)), &(data_ptr->localCoords(0, 1))};
272
273 for (int n = 0; n != nb_eval_points; ++n) {
274
275 const double eps = data_ptr->eps;
276 if (t_shape(0) >= 0 - eps && t_shape(0) <= 1 + eps &&
277
278 t_shape(1) >= 0 - eps && t_shape(1) <= 1 + eps &&
279
280 t_shape(2) >= 0 - eps && t_shape(2) <= 1 + eps) {
281
282 data_ptr->evalPointEntityHandle[n] = tet;
283 t_shape_data(i3) = t_shape(i3);
284 t_local_data(j2) = t_local(j2);
285 }
286
287 ++t_shape;
288 ++t_shape_data;
289 ++t_local;
290 ++t_local_data;
291 }
292 }
293 }
294
295 const Problem *prb_ptr;
296 CHKERR m_field.get_problem(problem, &prb_ptr);
297 boost::shared_ptr<NumeredEntFiniteElement_multiIndex> numered_fes(
299
300 Range in_tets;
301 in_tets.insert_list(data_ptr->evalPointEntityHandle.begin(),
302 data_ptr->evalPointEntityHandle.end());
303 in_tets = in_tets.subset_by_dimension(D);
304
305 if (verb >= NOISY)
306 MOFEM_LOG("SELF", Sev::noisy) << "in tets: " << in_tets << endl;
307
308 auto fe_miit =
309 m_field.get_finite_elements()->get<FiniteElement_name_mi_tag>().find(
310 finite_element);
311 if (fe_miit !=
312 m_field.get_finite_elements()->get<FiniteElement_name_mi_tag>().end()) {
313
314 for (auto peit = in_tets.pair_begin(); peit != in_tets.pair_end(); ++peit) {
315
316 auto lo =
317 prb_ptr->numeredFiniteElementsPtr->get<Unique_mi_tag>().lower_bound(
319 peit->first, (*fe_miit)->getFEUId()));
320 auto hi =
321 prb_ptr->numeredFiniteElementsPtr->get<Unique_mi_tag>().upper_bound(
323 peit->second, (*fe_miit)->getFEUId()));
324 numered_fes->insert(lo, hi);
325
326 if (verb >= VERY_NOISY)
327 std::cerr << "numered elements:" << std::endl;
328 for (; lo != hi; ++lo)
329 if (verb >= VERY_NOISY)
330 std::cerr << **lo << endl;
331 }
332 if (verb >= VERY_NOISY)
333 std::cerr << std::endl;
334
335 if (auto fe_ptr = data_ptr->feMethodPtr.lock()) {
336
337 MOFEM_LOG_C("FieldEvaluatorSync", Sev::verbose,
338 "Number elements %d to evaluate at proc %d",
339 numered_fes->size(), m_field.get_comm_rank());
340 MOFEM_LOG_SYNCHRONISE(m_field.get_comm());
341
342 if (!cache_ptr) {
343 cache_ptr = boost::make_shared<CacheTuple>();
344 CHKERR m_field.cache_problem_entities(prb_ptr->getName(), cache_ptr);
345
346 MOFEM_LOG("FieldEvaluatorSync", Sev::noisy)
347 << "If you call that function many times in the loop consider to "
348 "set "
349 "cache_ptr outside of the loop. Otherwise code can be slow.";
350 }
351
352 CHKERR m_field.loop_finite_elements(prb_ptr, finite_element, *fe_ptr,
353 lower_rank, upper_rank, numered_fes,
354 bh, cache_ptr, verb);
355
356 } else
357 SETERRQ(PETSC_COMM_SELF, MOFEM_DATA_INCONSISTENCY,
358 "Pointer to element does not exists");
359 }
360
362}
#define MOFEM_LOG_SYNCHRONISE(comm)
Synchronise "SYNC" channel.
Definition: LogManager.hpp:345
#define MOFEM_LOG_C(channel, severity, format,...)
Definition: LogManager.hpp:311
static const double eps
@ NOISY
Definition: definitions.h:211
@ VERY_NOISY
Definition: definitions.h:212
@ MOFEM_DATA_INCONSISTENCY
Definition: definitions.h:31
FTensor::Index< 'n', SPACE_DIM > n
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.
UId getLocalUniqueIdCalculate() const
Generate UId for finite element entity.
static MoFEMErrorCode getLocalCoordinatesOnReferenceTriNodeTri(const T *elem_coords, const T *glob_coords, const int nb_nodes, T *local_coords)
Get the local coordinates on reference three node tri object.
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

◆ evalFEAtThePoint2D()

MoFEMErrorCode MoFEM::FieldEvaluatorInterface::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 
)

Evaluate field at artbitray position.

std::array<double, 3> point = {0, 0, 0};
const double dist = 0.3;
std::array<double, 6> eval_points = {-1., -1., -1., 1., 1., 1. };
using VolEle = VolumeElementForcesAndSourcesCore;
auto data_ptr =
m_field.getInterface<FieldEvaluatorInterface>()->
getData<VolEle>(point.data(), point.size/3);
if(auto vol_ele = data_ptr->feMethod.lock()) {
// push operators to finite element instance, e.g.
vol_ele->getOpPtrVector().push_back(new MyOp());
// iterate over elemnts with evaluated points
auto cache_ptr = boost::make_shared<CacheTuple>();
CHKERR m_field.cache_problem_entities(prb_ptr->getName(), cache_ptr);
CHKERR m_field.getInterface<FieldEvaluatorInterface>()
->evalFEAtThePoint3D(point.data(), dist, prb_ptr->getName(),
"FINITE_ELEMENT_NAME",
data_ptr, m_field.get_comm_rank(),
m_field.get_comm_rank(), cache_ptr);
}
Parameters
pointpoint used to find tetrahedrons
distancedistance from the point where tetrahedrons are searched
problemproblem name
finite_elementfinite element name
data_ptrpointer to data abut gauss points
lower_ranklower processor
upper_rankupper process
cache_ptrcache or problem entities
bhcontrol looping over entities, e.g. throwing error if element not found
verbverbosity level
Returns
MoFEMErrorCode
Examples
field_evaluator.cpp.

Definition at line 373 of file FieldEvaluator.cpp.

377 {
378 return evalFEAtThePoint<2>(point, distance, problem, finite_element, data_ptr,
379 lower_rank, upper_rank, cache_ptr, bh, verb);
380}

◆ evalFEAtThePoint3D()

MoFEMErrorCode MoFEM::FieldEvaluatorInterface::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 
)

Evaluate field at artbitray position.

std::array<double, 3> point = {0, 0, 0};
const double dist = 0.3;
std::array<double, 6> eval_points = {-1., -1., -1., 1., 1., 1. };
using VolEle = VolumeElementForcesAndSourcesCore;
auto data_ptr =
m_field.getInterface<FieldEvaluatorInterface>()->
getData<VolEle>(point.data(), point.size/3);
if(auto vol_ele = data_ptr->feMethod.lock()) {
// push operators to finite element instance, e.g.
vol_ele->getOpPtrVector().push_back(new MyOp());
// iterate over elemnts with evaluated points
auto cache_ptr = boost::make_shared<CacheTuple>();
CHKERR m_field.cache_problem_entities(prb_ptr->getName(), cache_ptr);
CHKERR m_field.getInterface<FieldEvaluatorInterface>()
->evalFEAtThePoint3D(point.data(), dist, prb_ptr->getName(),
"FINITE_ELEMENT_NAME",
data_ptr, m_field.get_comm_rank(),
m_field.get_comm_rank(), cache_ptr);
}
Parameters
pointpoint used to find tetrahedrons
distancedistance from the point where tetrahedrons are searched
problemproblem name
finite_elementfinite element name
data_ptrpointer to data abut gauss points
lower_ranklower processor
upper_rankupper process
cache_ptrcache or problem entities
bhcontrol looping over entities, e.g. throwing error if element not found
verbverbosity level
Returns
MoFEMErrorCode
Examples
field_evaluator.cpp, and lorentz_force.cpp.

Definition at line 364 of file FieldEvaluator.cpp.

368 {
369 return evalFEAtThePoint<3>(point, distance, problem, finite_element, data_ptr,
370 lower_rank, upper_rank, cache_ptr, bh, verb);
371}

◆ getData()

template<typename VE , typename SPD = SetPtsData, typename SP = SetPts>
boost::shared_ptr< SPD > MoFEM::FieldEvaluatorInterface::getData ( const double ptr = nullptr,
const int  nb_eval_points = 0,
const double  eps = 1e-12,
VERBOSITY_LEVELS  verb = QUIET 
)
inline

Get the Data object.

Pack pointers with data structures for field evaluator and finite element. Function return shared pointer if returned shared pointer is reset; all data are destroyed. The idea is to pack all data in one structure, create shared pointer to it and return aliased shared pointer to one of the elements of the data structure. It is a bit complicated, but has great flexibility.

Template Parameters
VE
SetPtsData
SetPts
Parameters
ptr
nb_eval_points
eps
verb
Returns
boost::shared_ptr<SPD>
Examples
field_evaluator.cpp, and lorentz_force.cpp.

Definition at line 107 of file FieldEvaluator.hpp.

108 {
109 struct PackData {
110 boost::scoped_ptr<VE> elePtr;
111 boost::scoped_ptr<SPD> setPtsDataPtr;
112 boost::scoped_ptr<SP> setPtsPtr;
113 };
114 boost::shared_ptr<PackData> pack_data(new PackData());
115 MoFEM::Interface &m_field = cOre;
116 pack_data->elePtr.reset(new VE(m_field));
117
118 pack_data->setPtsDataPtr.reset(
119 new SPD(boost::shared_ptr<VE>(pack_data, pack_data->elePtr.get()), ptr,
120 nb_eval_points, eps, verb));
121 pack_data->setPtsPtr.reset(new SP(
122 boost::shared_ptr<SPD>(pack_data, pack_data->setPtsDataPtr.get())));
123 pack_data->elePtr->setRuleHook = boost::ref(*pack_data->setPtsPtr);
124 boost::shared_ptr<SPD> data(pack_data, pack_data->setPtsDataPtr.get());
125 return data;
126 }
Deprecated interface functions.

◆ query_interface()

MoFEMErrorCode MoFEM::FieldEvaluatorInterface::query_interface ( boost::typeindex::type_index  type_index,
UnknownInterface **  iface 
) const
virtual

Implements MoFEM::UnknownInterface.

Definition at line 33 of file FieldEvaluator.cpp.

34 {
36 *iface = const_cast<FieldEvaluatorInterface *>(this);
38}
#define MoFEMFunctionReturnHot(a)
Last executable line of each PETSc function used for error handling. Replaces return()
Definition: definitions.h:447
#define MoFEMFunctionBeginHot
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
Definition: definitions.h:440
FieldEvaluatorInterface(const MoFEM::Core &core)

Member Data Documentation

◆ cOre

MoFEM::Core& MoFEM::FieldEvaluatorInterface::cOre

Definition at line 26 of file FieldEvaluator.hpp.


The documentation for this struct was generated from the following files: