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. };
auto data_ptr =
getData<VolEle>(point.data(), point.size/3);
if(auto vol_ele = data_ptr->feMethod.lock()) {
vol_ele->getOpPtrVector().push_back(
new MyOp());
"FINITE_ELEMENT_NAME",
data_ptr, m_field.get_comm_rank(),
}
VolumeElementForcesAndSourcesCoreSwitch< 0 > VolumeElementForcesAndSourcesCore
Volume finite element default.
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, MoFEMTypes bh=MF_EXIST, VERBOSITY_LEVELS verb=QUIET)
Evaluate field at artbitray position.
FieldEvaluatorInterface(const MoFEM::Core &core)
Volume finite element with switches.
117 CoreInterface &m_field =
cOre;
120 std::vector<EntityHandle> leafs_out;
121 CHKERR data_ptr->treePtr->distance_search(point, distance, leafs_out);
123 for (
auto lit : leafs_out)
124 CHKERR m_field.get_moab().get_entities_by_dimension(lit, 3, tree_ents,
128 std::cout <<
"tree entities: " << tree_ents << endl;
130 data_ptr->evalPointEntityHandle.resize(data_ptr->nbEvalPoints);
131 std::fill(data_ptr->evalPointEntityHandle.begin(),
132 data_ptr->evalPointEntityHandle.end(), 0);
134 for (
auto tet : tree_ents) {
136 const EntityHandle *conn;
138 CHKERR m_field.get_moab().get_connectivity(tet, conn, num_nodes,
true);
139 std::array<double, 12> coords;
140 CHKERR m_field.get_moab().get_coords(conn, num_nodes, coords.data());
142 for (
int n = 0;
n != data_ptr->nbEvalPoints; ++
n) {
144 std::array<double, 3> local_coords;
146 coords.data(), &data_ptr->evalPoints[3 *
n], 1, local_coords.data());
148 std::array<double, 4> shape;
149 CHKERR Tools::shapeFunMBTET<3>(shape.data(), &local_coords[0],
150 &local_coords[1], &local_coords[2], 1);
152 const double eps = data_ptr->eps;
153 if (shape[0] >= 0 -
eps && shape[0] <= 1 +
eps &&
155 shape[1] >= 0 -
eps && shape[1] <= 1 +
eps &&
157 shape[2] >= 0 -
eps && shape[2] <= 1 +
eps &&
159 shape[3] >= 0 -
eps && shape[3] <= 1 +
eps) {
161 std::copy(shape.begin(), shape.end(), &data_ptr->shapeFunctions(
n, 0));
162 std::copy(local_coords.begin(), local_coords.end(),
163 &data_ptr->localCoords(
n, 0));
164 data_ptr->evalPointEntityHandle[
n] = tet;
169 const Problem *prb_ptr;
170 CHKERR m_field.get_problem(problem, &prb_ptr);
171 boost::shared_ptr<NumeredEntFiniteElement_multiIndex> numered_fes(
175 in_tets.insert_list(data_ptr->evalPointEntityHandle.begin(),
176 data_ptr->evalPointEntityHandle.end());
177 in_tets = in_tets.subset_by_dimension(3);
180 std::cout <<
"in tets: " << in_tets << endl;
182 for (
auto peit = in_tets.pair_begin(); peit != in_tets.pair_end(); ++peit) {
184 prb_ptr->numeredFiniteElementsPtr->get<Composite_Name_And_Ent_mi_tag>()
185 .lower_bound(boost::make_tuple(finite_element, peit->first));
187 prb_ptr->numeredFiniteElementsPtr->get<Composite_Name_And_Ent_mi_tag>()
188 .upper_bound(boost::make_tuple(finite_element, peit->second));
189 numered_fes->insert(lo, hi);
192 std::cout <<
"numered elements:" << std::endl;
193 for (; lo != hi; ++lo)
195 std::cout << **lo << endl;
198 std::cout << std::endl;
200 if (
auto fe_ptr = data_ptr->feMethodPtr.lock()) {
203 CHKERR PetscSynchronizedPrintf(
204 m_field.get_comm(),
"Number elements %d to evaluate at proc %d\n",
205 numered_fes->size(), m_field.get_comm_rank());
206 PetscSynchronizedFlush(m_field.get_comm(), PETSC_STDOUT);
209 auto cache_ptr = boost::make_shared<CacheTuple>();
210 CHKERR m_field.cache_problem_entities(prb_ptr->getName(), cache_ptr);
211 CHKERR m_field.loop_finite_elements(prb_ptr, finite_element, *fe_ptr,
212 lower_rank, upper_rank, numered_fes, bh,
217 "Pointer to element does not exists");
@ MOFEM_DATA_INCONSISTENCY
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< FiniteElement_name_mi_tag >, const_mem_fun< NumeredEntFiniteElement::interface_type_FiniteElement, boost::string_ref, &NumeredEntFiniteElement::getNameRef > >, ordered_non_unique< tag< Ent_mi_tag >, const_mem_fun< NumeredEntFiniteElement::interface_type_RefEntity, EntityHandle, &NumeredEntFiniteElement::getEnt > >, ordered_non_unique< tag< Composite_Name_And_Ent_mi_tag >, composite_key< NumeredEntFiniteElement, const_mem_fun< NumeredEntFiniteElement::interface_type_FiniteElement, boost::string_ref, &NumeredEntFiniteElement::getNameRef >, 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.