38 template <
typename TDomain>
47 UG_THROW(
"SideFluxErrEstData::alloc_err_est_data:"
48 " The error estimator can work only with grid functions of the SURFACE type.");
57 pMG->template attach_to_dv<side_type,ANumber>(m_aFluxJumpOverSide, 0);
58 m_aaFluxJump.access(*pMG, m_aFluxJumpOverSide);
62 template <
typename TDomain>
67 const MultiGrid * pMG = m_spSV->subset_handler()->multi_grid();
73 rim_side_iter != end_rim_side_iter; ++rim_side_iter)
77 if (pMG->template num_children<side_type>(c_rim_side) != 1)
78 UG_THROW (
"SideFluxErrEstData::summarize_error_estimator:"
79 " The error estimator does not accept hanging nodes");
80 side_type * f_rim_side = pMG->template get_child<side_type> (c_rim_side, 0);
83 number & c_rim_flux = m_aaFluxJump[c_rim_side];
84 number & f_rim_flux = m_aaFluxJump[f_rim_side];
85 number flux_jump = f_rim_flux + c_rim_flux;
86 c_rim_flux = f_rim_flux = flux_jump;
91 template <
typename TDomain>
97 m_aaFluxJump.invalidate ();
98 pMG->template detach_from<side_type> (m_aFluxJumpOverSide);
110 for (
size_t i = 0; i <
s.size(); i++)
114 if (
s.size() == 1 &&
s[0].empty())
s.clear();
117 for (
size_t i = 0; i <
s.size(); i++)
121 UG_THROW(
"Error while setting subsets in SideAndElemErrEstData: Passed subset string lacks a "
122 "subset specification at position " << i <<
"(of " <<
s.size()-1 <<
")");
128 UG_LOG(
"Warning: SideAndElemErrEstData is constructed without definition of subsets. This is likely not to work.\n"
129 "Please specify a subset of the same dimension as your domain that the error estimator is supposed to work on.\n");
134 template <
typename TDomain>
142 sideOrder(_sideOrder), elemOrder(_elemOrder),
147 m_type(H1_ERROR_TYPE)
155 template <
typename TDomain>
160 std::vector<std::string> subsets
163 sideOrder(_sideOrder), elemOrder(_elemOrder),
168 m_type(H1_ERROR_TYPE)
175 template <
typename TDomain>
179 boost::mpl::for_each<typename domain_traits<dim>::ManifoldElemList>(
GetQuadRules<
dim-1>(&quadRuleSide[0], sideOrder));
180 boost::mpl::for_each<typename domain_traits<dim>::DimElemList>(
GetQuadRules<dim>(&quadRuleElem[0], elemOrder));
189 if (ref_dim !=
dim)
continue;
195 m_SideIPcoords[roid].clear();
198 for (
size_t side = 0; side < ref_elem.
num(ref_dim-1); side++)
204 if (!quadRuleSide[side_roid])
205 UG_THROW(
"Requesting side IPs for roid " << roid <<
", but no quadrature rule has been created for it.");
206 size_t nIPs = quadRuleSide[side_roid]->size();
209 if (side == 0) m_sideIPsStartIndex[roid][side] = 0;
210 else m_sideIPsStartIndex[roid][side] = m_sideIPsStartIndex[roid][side-1] + nIPs;
213 const MathVector<
dim-1>* sideloc_IPs = quadRuleSide[side_roid]->points();
216 size_t nCo = ref_elem.
num(
dim-1, side, 0);
217 std::vector<MathVector<dim> > side_corners(nCo);
218 for (
size_t co = 0; co < ref_elem.
num(
dim-1, side, 0); co++)
220 size_t co_id = ref_elem.
id(
dim-1, side, 0, co);
221 side_corners[co] = ref_elem.
corner(co_id);
228 for (
size_t ip = 0; ip < nIPs; ip++)
231 ref_map.local_to_global(m_SideIPcoords[roid].back(), sideloc_IPs[ip]);
239 template <
typename TDomain>
244 return m_aaSide[pSide].at(ip);
246 catch (
const std::out_of_range& oor)
248 UG_THROW(
"Requested attachment for side integration point " << ip <<
249 ", which does not appear to be allocated.");
252 UG_CATCH_THROW(
"Could not access error estimator side attachment for IP " << ip <<
".");
255 UG_THROW(
"Reached unreachable! This should be impossible. Check out why it is not!");
256 return m_aaSide[pSide].at(ip);
259 template <
typename TDomain>
264 return m_aaElem[pElem].at(ip);
266 catch (
const std::out_of_range& oor)
268 UG_THROW(
"Requested attachment for elem integration point " << ip <<
269 ", which does not appear to be allocated.");
272 UG_CATCH_THROW(
"Could not access error estimator elem attachment for IP " << ip <<
".");
275 UG_THROW(
"Reached unreachable! This should be impossible. Check out why it is not!");
276 return m_aaElem[pElem].at(ip);
280 template <
typename TDomain>
281 template <
int refDim>
288 if (m_SideIPcoords[roid].size() == 0)
289 UG_THROW(
"No side IP series available for roid " << roid <<
".");
299 if (!quadRuleSide[roid])
300 UG_THROW(
"Requesting side IPs for roid " << roid <<
", but no quadrature rule has been created for it.");
305 UG_THROW(
"Local IPs requested with the wrong dimension refDim." << std::endl
306 <<
"Either call with refDim == TDomain::dim and a TDomain::dim-dimensional roid "
307 "for the local side IPs of all of its sides" << std::endl
308 <<
"or with refDim == TDomain::dim-1 and a (TDomain::dim-1)-dimensional roid"
309 "for the local side IPs for a side of this roid.");
314 template <
typename TDomain>
315 template <
int refDim>
322 UG_COND_THROW(!quadRuleElem[roid],
"Requesting side IPs for roid " << roid <<
", but no quadrature rule has been created for it.");
324 UG_COND_THROW(quadRuleElem[roid]->size() == 0,
"No elem IP series available for roid " << roid <<
".");
331 template <
typename TDomain>
343 ReferenceMappingProvider::get<dim,dim>(roid, &vCornerCoords[0]);
348 m_sideGlobalIPcoords.resize(num_all_side_ips(roid));
349 ref_map.
local_to_global(&m_sideGlobalIPcoords[0], &m_SideIPcoords[roid][0], m_SideIPcoords[roid].size());
351 catch (std::exception& e)
353 UG_THROW(
"Encountered exception while trying to fill array of global IPs: "
354 << std::endl <<
"'" << e.what() <<
"'");
357 return &m_sideGlobalIPcoords[0];
360 template <
typename TDomain>
377 m_singleSideGlobalIPcoords.resize(quadRuleSide[roid]->size());
378 ref_map.local_to_global(&m_singleSideGlobalIPcoords[0], quadRuleSide[roid]->points(), quadRuleSide[roid]->size());
380 catch (std::exception& e)
382 UG_THROW(
"Encountered exception while trying to fill array of global IPs: "
383 << std::endl <<
"'" << e.what() <<
"'");
386 return &m_singleSideGlobalIPcoords[0];
389 template <
typename TDomain>
401 ReferenceMappingProvider::get<dim,dim>(roid, &vCornerCoords[0]);
406 m_elemGlobalIPcoords.resize(num_elem_ips(roid));
407 ref_map.
local_to_global(&m_elemGlobalIPcoords[0], quadRuleElem[roid]->points(), quadRuleElem[roid]->size());
409 catch (std::exception& e)
411 UG_THROW(
"Encountered exception while trying to fill array of global IPs: "
412 << std::endl <<
"'" << e.what() <<
"'");
415 return &m_elemGlobalIPcoords[0];
418 template <
typename TDomain>
421 return m_aaSide[pSide].size();
424 template <
typename TDomain>
429 "Requesting number of side IPs for roid " << roid <<
", but no quadrature rule has been created for it.");
431 return quadRuleSide[roid]->size();
434 template <
typename TDomain>
437 return m_sideIPsStartIndex[roid][side];
441 template <
typename TDomain>
444 return m_SideIPcoords[roid].size();
447 template <
typename TDomain>
451 UG_COND_THROW(!quadRuleElem[roid],
"Requesting elem IPs for roid " << roid <<
", but no quadrature rule has been created for it.");
453 return quadRuleElem[roid]->size();
456 template <
typename TDomain>
464 return m_sideIPsStartIndex[roid][side];
469 template <
typename TDomain>
478 " The error estimator can work only with grid functions of the SURFACE type.");
491 pMG->template attach_to_dv<side_type, attachment_type >(m_aSide, std::vector<number>(0));
492 m_aaSide.access(*pMG, m_aSide);
495 pMG->template attach_to_dv<elem_type, attachment_type >(m_aElem, std::vector<number>(0));
496 m_aaElem.access(*pMG, m_aElem);
499 m_ssg.set_subset_handler(ssh);
500 if (m_vSs.size() == 0) m_ssg.add_all();
501 else m_ssg.add(m_vSs);
506 for (
size_t si = 0; si < m_ssg.size(); si++)
509 if (dim_si > ssDimMax) ssDimMax = dim_si;
510 if (dim_si < ssDimMin) ssDimMin = dim_si;
514 "Subsets passed to an instance of SideAndElemErrEstData have varying or inadmissable dimension.\n"
515 "(NOTE: Only sets of subsets of the same dimension as the domain are allowed.)");
519 for (
size_t si = 0; si < m_ssg.size(); si++)
522 elem_iterator_type elem_iter_end = m_spSV->template end<elem_type>(m_ssg[si], m_errEstGL,
SurfaceView::ALL);
523 for (elem_iterator_type elem_iter = m_spSV->template begin<elem_type>(m_ssg[si], m_errEstGL,
SurfaceView::ALL);
524 elem_iter != elem_iter_end; ++elem_iter)
526 elem_type* elem = *elem_iter;
532 size_t size = quadRuleElem[roid]->size();
535 m_aaElem[elem].resize(size, 0.0);
541 for (
size_t side = 0; side < side_list.size(); side++)
543 side_type* pSide = side_list[side];
549 size_t size = quadRuleSide[roid]->size();
552 if (m_aaSide[pSide].size() != size)
553 m_aaSide[pSide].resize(size, 0.0);
569 ComPol_AttachmentReduce<layout_type, attachment_type> compolSumSideErr(*pMG, m_aSide,
PCL_RO_SUM);
582 side_iter_type end_side = pMG->template end<side_type>();
583 for (side_iter_type side_iter = pMG->template begin<side_type>(); side_iter != end_side; ++side_iter)
586 side_type* c_rim_side = *side_iter;
592 bool resize_parent =
false;
593 const size_t num_children = pMG->template num_children<side_type>(c_rim_side);
594 for (
size_t ch = 0; ch < num_children; ch++)
596 side_type* child_side = pMG->template get_child<side_type>(c_rim_side, ch);
602 size_t child_size = quadRuleSide[child_roid]->size();
605 if (m_aaSide[child_side].size() != child_size && num_side_ips(c_rim_side) > 0)
606 m_aaSide[child_side].resize(child_size, 0.0);
607 else if (m_aaSide[child_side].size() == child_size && num_side_ips(c_rim_side) == 0)
608 resize_parent =
true;
617 size_t size = quadRuleSide[roid]->size();
620 m_aaSide[c_rim_side].resize(size, 0.0);
635 template <
typename TDomain>
638 MultiGrid* pMG = spDomain->subset_handler()->multi_grid();
680 side_iter_type end_side = pMG->template end<side_type>();
681 for (side_iter_type side_iter = pMG->template begin<side_type>(); side_iter != end_side; ++side_iter)
690 if (num_side_ips(c_rim_side) == 0)
continue;
693 const size_t num_children = pMG->template num_children<side_type>(c_rim_side);
696 if (num_children == 1)
698 side_type* f_rim_side = pMG->template get_child<side_type>(c_rim_side, 0);
701 for (
size_t i = 0; i < m_aaSide[c_rim_side].size(); i++)
703 number& c_rim_flux = m_aaSide[c_rim_side][i];
704 number& f_rim_flux = m_aaSide[f_rim_side][i];
705 number flux_jump = f_rim_flux + c_rim_flux;
706 c_rim_flux = f_rim_flux = flux_jump;
724 std::vector<MathVector<dim> > c_coCo;
729 for (
size_t ch = 0; ch < num_children; ch++)
732 side_type* f_rim_side = pMG->template get_child<side_type>(c_rim_side, ch);
735 std::vector<MathVector<dim> > f_coCo;
740 for (
size_t fip = 0; fip < m_aaSide[f_rim_side].size(); fip++)
742 if (m_aaSide[c_rim_side].size() < 1)
743 {
UG_THROW(
"No IP defined for coarse side.");}
751 for (
size_t cip = 1; cip < m_aaSide[c_rim_side].size(); cip++)
760 m_aaSide[f_rim_side][fip] += m_aaSide[c_rim_side][nearest];
765 for (
size_t cip = 0; cip < m_aaSide[c_rim_side].size(); cip++)
768 number dist = std::numeric_limits<number>::infinity();
772 for (
size_t ch = 0; ch < pMG->template num_children<side_type>(c_rim_side); ch++)
775 side_type* f_rim_side = pMG->template get_child<side_type>(c_rim_side, ch);
778 std::vector<MathVector<dim> > f_coCo;
783 for (
size_t fip = 1; fip < m_aaSide[f_rim_side].size(); fip++)
789 val = m_aaSide[f_rim_side][fip];
795 m_aaSide[c_rim_side][cip] = val;
812 template <
typename TDomain>
825 int ssi = surface_view()->subset_handler()->get_subset_index(pElem);
826 if (!m_ssg.contains(ssi))
return 0.0;
829 size_t nIPs = quadRuleElem[roid]->size();
830 std::vector<number>& integrand = m_aaElem[
dynamic_cast<elem_type*
>(pElem)];
831 if (nIPs != integrand.size())
832 UG_THROW(
"Element attachment vector does not have the required size for integration!");
836 mapping.
update(&vCornerCoords[0]);
839 std::vector<number> det(nIPs);
840 mapping.
sqrt_gram_det(&det[0], quadRuleElem[roid]->points(), nIPs);
844 for (
size_t ip = 0; ip < nIPs; ip++)
845 sum += quadRuleElem[roid]->weight(ip) * std::pow(integrand[ip], 2.0) * det[ip];
850 number diamSq = std::pow(ElementSize<dim>(roid, &vCornerCoords[0]), 2.0/
dim);
853 etaSq += diamSq * sum;
857 MultiGrid* pErrEstGrid = (
MultiGrid*) (surface_view()->subset_handler()->multi_grid());
862 for (
size_t side = 0; side < side_list.size(); side++)
870 size_t nsIPs = quadRuleSide[side_roid]->size();
872 "Side attachment vector does not have the required size for integration!");
875 std::vector<MathVector<dim> > vSideCornerCoords(0);
876 size_t nsCo = refElem.
num(
dim-1, side, 0);
877 for (
size_t co = 0; co < nsCo; co++)
878 vSideCornerCoords.push_back(vCornerCoords[refElem.
id(
dim-1, side, 0, co)]);
882 mapping.update(&vSideCornerCoords[0]);
886 mapping.sqrt_gram_det(&det[0], quadRuleSide[side_roid]->points(), nsIPs);
890 for (
size_t ip = 0; ip < nsIPs; ip++)
891 sum += quadRuleSide[side_roid]->weight(ip) * std::pow(m_aaSide[pSide][ip], 2.0) * det[ip];
897 if (
dim==1) { diamE = 1.0; }
898 else if (
dim==2) { diamE = ElementSize<dim>(side_roid, &vSideCornerCoords[0]); }
899 else if (
dim==3) { diamE = std::sqrt(ElementSize<dim>(side_roid, &vSideCornerCoords[0])); }
900 else {
UG_THROW(
"Unknown dimension: "<<
dim <<
"."); }
903 etaSq += diamE * sum;
911 template <
typename TDomain>
917 m_aaSide.invalidate();
918 pMG->template detach_from<side_type>(m_aSide);
920 m_aaElem.invalidate();
921 pMG->template detach_from<elem_type>(m_aElem);
929 template <
typename TDomain,
typename TErrEstData>
934 for (
size_t eed = 0; eed < num(); eed++)
935 m_vEed[eed]->alloc_err_est_data(spSV, gl);
938 template <
typename TDomain,
typename TErrEstData>
943 for (
size_t eed = 0; eed < num(); eed++)
944 m_vEed[eed]->summarize_err_est_data(spDomain);
947 template <
typename TDomain,
typename TErrEstData>
953 for (
size_t eed = 0; eed < num(); eed++)
954 sum += m_vEed[eed]->get_elem_error_indicator(elem, vCornerCoords);
959 template <
typename TDomain,
typename TErrEstData>
964 for (
size_t eed = 0; eed < num(); eed++)
965 m_vEed[eed]->release_err_est_data();
972 template <
typename TDomain>
980 template <
typename TDomain>
983 check_equal_side_order();
984 check_equal_elem_order();
987 template <
typename TDomain>
990 m_bEqSideOrder =
false;
992 if (this->m_vEed.size() == 0)
994 m_bEqSideOrder =
true;
998 size_t side_order = this->m_vEed[0]->side_order();
1000 for (
size_t ee = 1; ee < this->m_vEed.size(); ee++)
1001 if (this->m_vEed[ee]->side_order() != side_order)
return;
1003 m_bEqSideOrder =
true;
1006 template <
typename TDomain>
1009 m_bEqElemOrder =
false;
1011 if (this->m_vEed.size() == 0)
1013 m_bEqElemOrder =
true;
1017 size_t elem_order = this->m_vEed[0]->elem_order();
1019 for (
size_t ee = 1; ee < this->m_vEed.size(); ee++)
1020 if (this->m_vEed[ee]->elem_order() != elem_order)
return;
1022 m_bEqElemOrder =
true;
Definition: smart_pointer.h:296
Performs communication between interfaces on different processes.
Definition: pcl_interface_communicator.h:68
bool communicate(int tag=749345)
sends and receives the collected data.
Definition: pcl_interface_communicator_impl.hpp:409
void exchange_data(const TLayoutMap &layoutMap, const typename TLayoutMap::Key &keyFrom, const typename TLayoutMap::Key &keyTo, ICommunicationPolicy< TLayout > &commPol)
internally calls send_data and receive_data with the specified layouts.
Definition: pcl_interface_communicator_impl.hpp:213
the standard multi-level-layout implementation
Definition: pcl_communication_structs.h:615
Used to access data that has been attached to an attachment pipe.
Definition: attachment_pipe.h:510
Performs reduce operations on the specified attachment.
Definition: compol_attachment_reduce.h:274
copies values from a specified attachment to a stream and back.
Definition: compol_copy_attachment.h:54
void extract_on_constrained_elems_only(bool enable)
Definition: compol_copy_attachment.h:168
const MathVector< dim > & corner(size_t i) const
coordinates of reference corner (i = 0 ... num(0))
Definition: reference_element.h:192
virtual base class for reference mappings
Definition: reference_mapping_provider.h:53
virtual number sqrt_gram_det(const MathVector< dim > &locPos) const =0
returns the determinate of the jacobian
virtual void local_to_global(MathVector< worldDim > &globPos, const MathVector< dim > &locPos) const =0
map local coordinate to global coordinate
virtual void update(const MathVector< worldDim > *vCornerCoord)=0
refresh mapping for new set of corners
manages the layouts and interfaces which are associated with a distributed grid.
Definition: distributed_grid.h:88
GridLayoutMap & grid_layout_map()
Definition: distributed_grid.h:103
DistributedGridManager * distributed_grid_manager()
returns a pointer to the associated distributed grid manager.
Definition: grid_impl.hpp:53
void associated_elements(traits< Vertex >::secure_container &elemsOut, TElem *e)
Puts all elements of type TAss which are contained in 'e' or which contain 'e' into elemsOut.
Definition: grid_impl.hpp:466
lets you access layouts by type and key
Definition: parallel_grid_layout.h:152
Definition: grid_level.h:42
ViewType type() const
returns the type
Definition: grid_level.h:77
@ SURFACE
Definition: grid_level.h:48
The base class for all geometric objects, such as vertices, edges, faces, volumes,...
Definition: grid_base_objects.h:157
virtual ReferenceObjectID reference_object_id() const =0
Base class for error estimator data.
Definition: err_est_data.h:71
a mathematical Vector with N entries.
Definition: math_vector.h:97
Definition: multi_grid.h:72
Error estimator data class for discretizations with more than one unknown.
Definition: err_est_data.h:423
virtual number get_elem_error_indicator(GridObject *elem, const MathVector< dim > vCornerCoords[])
calculate L2 integrals
Definition: err_est_data_impl.h:949
virtual void alloc_err_est_data(ConstSmartPtr< SurfaceView > spSV, const GridLevel &gl)
virtual function to allocate data structures for the error estimator
Definition: err_est_data_impl.h:931
virtual void release_err_est_data()
virtual function to release data structures for the error estimator
Definition: err_est_data_impl.h:961
virtual void summarize_err_est_data(SmartPtr< TDomain > spDomain)
virtual function called after the computation of the error estimator data in all the elements
Definition: err_est_data_impl.h:940
void check_equal_order()
Definition: err_est_data_impl.h:981
void check_equal_elem_order()
Definition: err_est_data_impl.h:1007
void check_equal_side_order()
Definition: err_est_data_impl.h:988
virtual void add(SmartPtr< SideAndElemErrEstData< TDomain > > spEed, const char *fct)
Definition: err_est_data_impl.h:974
base class for reference elements
Definition: reference_element.h:70
size_t num(int dim) const
returns the number of geometric objects of dim
Definition: reference_element.h:95
ReferenceObjectID roid() const
returns the reference object id
Definition: reference_element.h:76
int id(int dim_i, size_t i, int dim_j, size_t j) const
id of object j in dimension dim_j of obj i in dimension dim_i
Definition: reference_element.h:127
int dimension() const
returns the dimension where reference element lives
Definition: reference_element.h:80
static const DimReferenceElement< dim > & get(ReferenceObjectID roid)
returns a dimension dependent Reference Element
Definition: reference_element.h:280
static DimReferenceMapping< TDim, TWorldDim > & get(ReferenceObjectID roid)
returns a reference to a DimReferenceMapping
Definition: reference_mapping_provider.h:225
Error estimator data class storing a number vector per side and per element.
Definition: err_est_data.h:221
virtual void summarize_err_est_data(SmartPtr< TDomain > spDomain)
virtual function called after the computation of the error estimator data in all the elements
Definition: err_est_data_impl.h:636
virtual void release_err_est_data()
virtual function to release data structures of the error estimator
Definition: err_est_data_impl.h:912
size_t num_all_side_ips(const ReferenceObjectID roid)
get number of side IPs
Definition: err_est_data_impl.h:442
void init_quadrature()
initialization of quadrature (to be called during construction)
Definition: err_est_data_impl.h:176
std::vector< std::string > m_vSs
the subsets this error estimator will produce values for
Definition: err_est_data.h:353
domain_traits< dim >::side_type side_type
type of the sides (face, edge) and the elems (volume, face)
Definition: err_est_data.h:230
MathVector< TDomain::dim > * all_side_global_ips(GridObject *elem, const MathVector< dim > vCornerCoords[])
get all global side integration points
Definition: err_est_data_impl.h:333
const MathVector< refDim > * elem_local_ips(const ReferenceObjectID roid)
get the local elem integration points for a specific roid
Definition: err_est_data_impl.h:316
virtual void alloc_err_est_data(ConstSmartPtr< SurfaceView > spSV, const GridLevel &gl)
virtual function to allocate data structures for the error estimator
Definition: err_est_data_impl.h:471
SideAndElemErrEstData(size_t _sideOrder, size_t _elemOrder, const char *subsets)
constructors
Definition: err_est_data_impl.h:136
MathVector< TDomain::dim > * elem_global_ips(GridObject *elem, const MathVector< dim > vCornerCoords[])
get the global elem integration points for a specific roid
Definition: err_est_data_impl.h:391
number & operator()(side_type *pSide, size_t ip)
get the data reference for a given side and ip
Definition: err_est_data_impl.h:240
const MathVector< refDim > * side_local_ips(const ReferenceObjectID roid)
get the local side integration points for a specific roid
Definition: err_est_data_impl.h:282
size_t side_ip_index(const ReferenceObjectID roid, const size_t side, const size_t ip)
get index of specific side IP in sideIP array returned by side_local_ips
Definition: err_est_data_impl.h:458
domain_traits< dim >::element_type elem_type
Definition: err_est_data.h:231
size_t first_side_ips(const ReferenceObjectID roid, const size_t side)
get number of first IP belonging to a specific side
Definition: err_est_data_impl.h:435
size_t num_side_ips(const side_type *pSide)
get number of side IPs of a specific side
Definition: err_est_data_impl.h:419
MathVector< TDomain::dim > * side_global_ips(GridObject *elem, const MathVector< dim > vCornerCoords[])
get the global side integration points for a specific side roid
Definition: err_est_data_impl.h:362
virtual number get_elem_error_indicator(GridObject *elem, const MathVector< dim > vCornerCoords[])
calculate L2 integrals
Definition: err_est_data_impl.h:813
size_t num_elem_ips(const ReferenceObjectID roid)
get number of elem IPs
Definition: err_est_data_impl.h:448
virtual void release_err_est_data()
virtual function to release data structures of the error estimator
Definition: err_est_data_impl.h:92
virtual void alloc_err_est_data(ConstSmartPtr< SurfaceView > spSV, const GridLevel &gl)
virtual function to allocate data structures for the error estimator
Definition: err_est_data_impl.h:40
virtual void summarize_err_est_data(SmartPtr< TDomain > spDomain)
virtual function called after the computation of the error estimator data in all the elements
Definition: err_est_data_impl.h:63
domain_traits< dim >::side_type side_type
type of the sides (face, edge) and the elems (volume, face)
Definition: err_est_data.h:147
Const iterator to traverse the surface of a multi-grid hierarchy.
Definition: surface_view.h:237
@ SHADOW_RIM
Definition: surface_view.h:98
@ ALL
Definition: surface_view.h:102
void CollectCornerCoordinates(std::vector< typename TAAPos::ValueType > &vCornerCoordsOut, const TElem &elem, const TAAPos &aaPos, bool clearContainer=true)
returns the corner coordinates of a geometric object
Definition: domain_util_impl.h:75
#define PCL_RO_SUM
Definition: pcl_methods.h:63
void RemoveWhitespaceFromString(std::string &str)
removes all white space from a string, also within the string
Definition: string_util.cpp:50
const NullSmartPtr SPNULL
The equivalent to NULL for smart pointers.
Definition: smart_pointer.h:90
#define UG_CATCH_THROW(msg)
Definition: error.h:64
#define UG_THROW(msg)
Definition: error.h:57
#define UG_LOG(msg)
Definition: log.h:367
#define UG_COND_THROW(cond, msg)
UG_COND_THROW(cond, msg) : performs a UG_THROW(msg) if cond == true.
Definition: error.h:61
double number
Definition: types.h:124
void VecSubtract(vector_t &vOut, const vector_t &v1, const vector_t &v2)
subtracts v2 from v1 and stores the result in a vOut
Definition: math_vector_functions_common_impl.hpp:226
vector_t::value_type VecLengthSq(const vector_t &v)
returns the squared length of v. Faster than VecLength.
Definition: math_vector_functions_common_impl.hpp:324
ReferenceObjectID
these ids are used to identify the shape of a geometric object.
Definition: grid_base_objects.h:74
@ NUM_REFERENCE_OBJECTS
Definition: grid_base_objects.h:85
@ ROID_VERTEX
Definition: grid_base_objects.h:76
void TokenizeString(const string &str, vector< string > &vToken, const char delimiter)
Definition: string_util.cpp:56
void check_subset_strings(std::vector< std::string > s)
Definition: err_est_data_impl.h:107
@ INT_V_MASTER
vertical master node
Definition: parallel_grid_layout.h:106
@ INT_H_MASTER
horizontal master node
Definition: parallel_grid_layout.h:104
@ INT_H_SLAVE
horizontal slave node
Definition: parallel_grid_layout.h:105
@ INT_V_SLAVE
vertical slave node
Definition: parallel_grid_layout.h:107
int DimensionOfSubset(const ISubsetHandler &sh, int si)
returns the current dimension of the subset
Definition: subset_dim_util.cpp:89
The traits class holds some important types for each element-type.
Definition: grid.h:136
geometry_traits< TElem >::const_iterator const_iterator
Definition: grid.h:144
pcl::MultiLevelLayout< Interface > Layout
Definition: parallel_grid_layout.h:161
helper struct for getting quadrature rules by use of mpl::lists
Definition: err_est_data.h:334
Definition: domain_traits.h:53