26 #ifndef OOMPH_SAMPLE_POINT_CONTAINER_HEADER
27 #define OOMPH_SAMPLE_POINT_CONTAINER_HEADER
31 #include <CGAL/Cartesian_d.h>
32 #include <CGAL/Search_traits_d.h>
33 #include <CGAL/Search_traits_adapter.h>
34 #include <boost/iterator/zip_iterator.hpp>
35 #include <CGAL/Orthogonal_k_neighbor_search.h>
113 const unsigned& bin_index_in_bin_array)
136 const Vector<double>& zeta_coordinates);
142 GeomObject*& sub_geom_object_pt,
146 void output(std::ofstream& outfile,
const bool& don_t_recurse =
false);
189 const Vector<std::pair<double, double>>& min_and_max_coordinates);
194 Vector<std::pair<double, double>>& min_and_max_coordinates);
236 throw OomphLibError(
"Broken default constructor. Don't call this!",
237 OOMPH_CURRENT_FUNCTION,
238 OOMPH_EXCEPTION_LOCATION);
254 GeomObject*& sub_geom_object_pt,
255 Vector<double>&
s) = 0;
283 const unsigned&
i)
const
428 throw OomphLibError(
"Broken default constructor. Don't call this!",
429 OOMPH_CURRENT_FUNCTION,
430 OOMPH_EXCEPTION_LOCATION);
448 const unsigned& radius,
449 Vector<unsigned>& neighbouring_bin_index,
450 const bool& use_old_version =
true);
464 Vector<unsigned>& bin_index);
474 virtual unsigned nbin()
const = 0;
535 unsigned n =
Bin_pt.size();
536 for (
unsigned i = 0;
i < n;
i++)
578 unsigned n = sample_point_pt.size();
579 for (
unsigned i = 0;
i < n;
i++)
582 Vector<double> zeta(n_dim);
585 unsigned e = sample_point_pt[
i]->element_index_in_mesh();
586 FiniteElement* el_pt =
Mesh_pt->finite_element_pt(
e);
589 unsigned j = sample_point_pt[
i]->sample_point_index_in_element();
590 Vector<double>
s(n_dim);
591 bool use_equally_spaced_interior_sample_points =
596 use_equally_spaced_interior_sample_points);
599 el_pt->interpolated_x(
s, zeta);
603 el_pt->interpolated_zeta(
s, zeta);
613 const Vector<double>& zeta)
619 if (
Bin_pt[bin_index] == 0)
624 Bin_pt[bin_index]->add_sample_point(new_sample_point_pt, zeta);
631 GeomObject*& sub_geom_object_pt,
637 const unsigned& bin_index,
675 unsigned n_bin =
Bin_pt.size();
676 for (
unsigned i = 0;
i < n_bin;
i++)
690 const unsigned& radius,
691 std::ofstream& outfile);
755 const unsigned& n_element);
823 SamplePointContainerParameters* bin_array_parameters_pt);
841 GeomObject*& sub_geom_object_pt,
847 const unsigned n_lagrangian =
ndim_zeta();
849 for (
unsigned i = 1;
i < n_lagrangian;
i++)
898 unsigned& max_n_entry,
899 unsigned& min_n_entry,
900 unsigned& tot_n_entry,
901 unsigned& n_empty)
const;
905 double min_distance(
const unsigned& i_bin,
const Vector<double>& zeta);
914 Vector<Vector<double>>& bin_vertex);
919 void get_bin(
const Vector<double>& zeta,
int& bin_number);
925 const Vector<double>& zeta,
927 Vector<std::pair<FiniteElement*, Vector<double>>>& sample_point_pairs);
930 Vector<Vector<std::pair<FiniteElement*, Vector<double>>>>
bin_content()
const
932 Vector<Vector<std::pair<FiniteElement*, Vector<double>>>> all_vals;
957 std::ofstream outfile;
958 outfile.open(filename.c_str());
1011 SparseVector<Vector<std::pair<FiniteElement*, Vector<double>>>>
1033 #ifdef OOMPH_HAS_CGAL
1044 SamplePointContainerParameters* sample_point_container_parameters_pt);
1056 for (
unsigned i = 0;
i < n;
i++)
1105 GeomObject*& sub_geom_object_pt,
1114 const Vector<double>& zeta,
1115 const unsigned& max_sample_points_for_newton_based_search,
1116 GeomObject*& sub_geom_object_pt,
1141 typedef CGAL::Search_traits_adapter<
1143 CGAL::Nth_of_tuple_property_map<0, Point_d_and_pointer>,
///////////////////////////////////////////////////////////////////// ///////////////////////////////...
unsigned dimension_of_bin_array(const unsigned &i) const
Number of bins in coordinate direction i.
unsigned max_bin_dimension() const
Max. bin dimension (number of bins in coordinate directions)
Vector< unsigned > dimensions_of_bin_array() const
Number of bins in coordinate directions. Const vector-based version.
virtual void output_bins(std::ofstream &outfile)=0
Output bins (boundaries and number of sample points in them)
void get_neighbouring_bins_helper(const unsigned &bin_index, const unsigned &radius, Vector< unsigned > &neighbouring_bin_index, const bool &use_old_version=true)
Helper function for computing the bin indices of neighbouring bins at a given "radius" of the specifi...
unsigned dimensions_of_bin_array(const unsigned &i) const
Number of bins in specified coordinate direction.
unsigned ndim_zeta() const
Dimension of the zeta ( = dim of local coordinate of elements)
Vector< unsigned > Dimensions_of_bin_array
Number of bins in each coordinate direction.
virtual unsigned nbin() const =0
Number of bins (not taking recursion into account for refineable versions)
virtual ~BinArray()
Virtual destructor.
BinArray(const BinArray &data)=delete
Broken copy constructor.
BinArray()
Broken default constructor; needed for broken copy constructors. Don't call. It will die.
unsigned coords_to_bin_index(const Vector< double > &zeta)
Get (linearly enumerated) bin index of bin that contains specified zeta.
void profile_get_neighbouring_bins_helper()
Profiling function to compare performance of two different versions of the get_neighbouring_bins_help...
BinArray(Mesh *mesh_pt, const Vector< std::pair< double, double >> &min_and_max_coordinates, const Vector< unsigned > &dimensions_of_bin_array, const bool &use_eulerian_coordinates_during_setup, const bool &ignore_halo_elements_during_locate_zeta_search, const unsigned &nsample_points_generated_per_element)
Constructor.
void operator=(const BinArray &)=delete
Broken assignment operator.
void coords_to_vectorial_bin_index(const Vector< double > &zeta, Vector< unsigned > &bin_index)
Get "coordinates" of bin that contains specified zeta.
virtual void output_bin_vertices(std::ofstream &outfile)=0
Output bin vertices (allowing display of bin boundaries as zones).
///////////////////////////////////////////////////////////////////// ///////////////////////////////...
void locate_zeta(const Vector< double > &zeta, GeomObject *&sub_geom_object_pt, Vector< double > &s)
Find sub-GeomObject (finite element) and the local coordinate s within it that contains point with gl...
unsigned ndim_zeta() const
Dimension of the zeta ( = dim of local coordinate of elements)
CGALSamplePointContainer(const CGALSamplePointContainer &data)=delete
Broken copy constructor.
CGAL::Orthogonal_k_neighbor_search< Traits_d > K_neighbor_search_d
CGALSamplePointContainer(SamplePointContainerParameters *sample_point_container_parameters_pt)
Constructor.
unsigned & multiplier_for_max_sample_point_to_actually_lookup_during_locate_zeta()
Every time we've completed a "spiral", visiting a finite number of sample points in a deterministic o...
unsigned & last_sample_point_to_actually_lookup_during_locate_zeta()
When searching through sample points only actually do the locate_zeta calls when when the counter is ...
void limited_locate_zeta(const Vector< double > &zeta, const unsigned &max_sample_points_for_newton_based_search, GeomObject *&sub_geom_object_pt, Vector< double > &s)
Find the sub geometric object and local coordinate therein that corresponds to the intrinsic coordina...
Kernel_d::Point_d Point_d
unsigned Multiplier_for_max_sample_point_to_actually_lookup_during_locate_zeta
Every time we've completed a "spiral", visiting a finite number of sample points in a deterministic o...
unsigned & initial_last_sample_point_to_actually_lookup_during_locate_zeta()
When searching through sample points only actually do the locate_zeta calls when when the counter exc...
unsigned Last_sample_point_to_actually_lookup_during_locate_zeta
When searching through sample points only actually do the locate_zeta calls when when the counter is ...
Vector< SamplePoint * > Sample_point_pt
Vector storing pointers to sample point objects (which represent sample point in terms of number of e...
virtual ~CGALSamplePointContainer()
Virtual destructor.
double get_sample_points()
Get the sample points; return time for setup of CGAL tree.
unsigned Initial_last_sample_point_to_actually_lookup_during_locate_zeta
When searching through sample points only actually do the locate_zeta calls when when the counter exc...
CGAL::Cartesian_d< double > Kernel_d
typedefs for cgal stuff
unsigned First_sample_point_to_actually_lookup_during_locate_zeta
When searching through sample points only actually do the locate_zeta calls when when the counter exc...
Vector< Point_d > CGAL_sample_point_zeta_d
Vector containing sample point coordinates.
K_neighbor_search_d::Tree * CGAL_tree_d_pt
Pointer to tree-based representation of sample points.
unsigned Ndim_zeta
Dimension of the zeta ( = dim of local coordinate of elements)
unsigned & first_sample_point_to_actually_lookup_during_locate_zeta()
When searching through sample points only actually do the locate_zeta calls when when the counter exc...
boost::tuple< Point_d, SamplePoint * > Point_d_and_pointer
CGAL::Search_traits_d< Kernel_d > Traits_base_d
unsigned total_number_of_sample_points_computed_recursively() const
Compute total number of sample points in sample point container.
void operator=(const CGALSamplePointContainer &)=delete
Broken assignment operator.
CGAL::Search_traits_adapter< Point_d_and_pointer, CGAL::Nth_of_tuple_property_map< 0, Point_d_and_pointer >, Traits_base_d > Traits_d
///////////////////////////////////////////////////////////////////////////// ///////////////////////...
static bool Already_warned_about_small_number_of_bin_cells
Boolean flag to make sure that warning about small number of bin cells only gets triggered once.
void get_bin(const Vector< double > &zeta, int &bin_number)
Get the number of the bin containing the specified coordinate. Bin number is negative if the coordina...
void get_bin(const Vector< double > &zeta, int &bin_number, Vector< std::pair< FiniteElement *, Vector< double >>> &sample_point_pairs)
Get the number of the bin containing the specified coordinate; also return the contents of that bin....
static bool Suppress_warning_about_large_total_number_of_bins
Boolean to supppress warnings about large number of bins.
void fill_bin_array()
Fill the bin array with sample points from FiniteElements stored in mesh.
void create_bins_of_objects()
Initialise and populate the "bin" structure for locating coordinates and increment counter for total ...
unsigned n_spiral_chunk() const
Number of spirals to be searched in one go const version.
const std::map< unsigned, Vector< std::pair< FiniteElement *, Vector< double > > > > * get_all_bins_content() const
Get the contents of all bins in vector.
unsigned Nspiral_chunk
Number of spirals to be searched in one go.
unsigned Max_spiral_level
Max. spiralling level (for efficiency; effect similar to max_search_radius)
static unsigned long Total_nbin_cells_counter
Counter for overall number of bins allocated – used to issue warning if this exceeds a threshhold....
void operator=(const NonRefineableBinArray &)=delete
Broken assignment operator.
void locate_zeta(const Vector< double > &zeta, GeomObject *&sub_geom_object_pt, Vector< double > &s)
Find sub-GeomObject (finite element) and the local coordinate s within it that contains point with gl...
static unsigned Threshold_for_elements_per_bin_warning
Fraction of elements/bin that triggers warning. Too many elements per bin can lead to very slow compu...
unsigned Current_min_spiral_level
Current min. spiralling level.
void get_bin_vertices(const unsigned &i_bin, Vector< Vector< double >> &bin_vertex)
Get vector of vectors containing the coordinates of the vertices of the i_bin-th bin: bin_vertex[j][i...
unsigned Current_max_spiral_level
Current max. spiralling level.
static bool Suppress_warning_about_small_number_of_bins
Boolean to supppress warnings about small number of bins.
void fill_bin_by_diffusion(const unsigned &bin_diffusion_radius=1)
Fill bin by diffusion, populating each empty bin with the same content as the first non-empty bin fou...
void output_bins(std::string &filename)
Output bins.
unsigned total_number_of_sample_points_computed_recursively() const
Compute total number of sample points recursively.
NonRefineableBinArray(const NonRefineableBinArray &data)=delete
Broken copy constructor.
void output_bin_vertices(std::ofstream &outfile)
Output bin vertices (allowing display of bins as zones).
static bool Already_warned_about_large_number_of_bin_cells
Boolean flag to make sure that warning about large number of bin cells only gets triggered once.
SparseVector< Vector< std::pair< FiniteElement *, Vector< double > > > > Bin_object_coord_pairs
Storage for paired objects and coords in each bin.
void output_bins(std::ofstream &outfile)
Output bins.
Vector< Vector< std::pair< FiniteElement *, Vector< double > > > > bin_content() const
Get the contents of all bins in vector.
static unsigned Default_n_bin_1d
Default number of bins (in each coordinate direction). (Note: don't move this into a common base clas...
unsigned & max_spiral_level()
Access function to max. spiral level during straight locate_zeta search (for efficiency; similar to m...
unsigned & current_max_spiral_level()
Access function to current max. spiral level.
unsigned & n_spiral_chunk()
Number of spirals to be searched in one go.
void get_fill_stats(unsigned &n_bin, unsigned &max_n_entry, unsigned &min_n_entry, unsigned &tot_n_entry, unsigned &n_empty) const
Provide some stats on the fill level of the associated bin.
void flush_bins_of_objects()
Flush the storage for the binning method (and decrement counter for total number of bins in active us...
static unsigned long Threshold_for_total_bin_cell_number_warning
Total number of bins above which warning is issued. (Default assignment of 100^DIM bins per MeshAsGeo...
NonRefineableBinArray(SamplePointContainerParameters *bin_array_parameters_pt)
Constructor.
unsigned & current_min_spiral_level()
Access function to current min. spiral level.
double min_distance(const unsigned &i_bin, const Vector< double > &zeta)
Compute the minimum distance of any vertex in the specified bin from the specified Lagrangian coordin...
unsigned nbin() const
Total number of bins (empty or not)
~NonRefineableBinArray()
Destructor:
///////////////////////////////////////////////////////////////////// ///////////////////////////////...
unsigned Multiplier_for_max_sample_point_to_actually_lookup_during_locate_zeta
Every time we've completed a "spiral", visiting a finite number of sample points in a deterministic o...
unsigned depth() const
Depth of the hierarchical bin_array.
unsigned & max_depth()
Max depth of the hierarchical bin_array.
~RefineableBinArray()
Destructor.
Vector< RefineableBin * > Bin_pt
Vector of pointers to constituent RefineableBins.
unsigned max_depth() const
Max depth of the hierarchical bin_array; const version.
unsigned Max_depth
Max depth of the hierarchical bin_array.
unsigned total_number_of_sample_points_computed_recursively() const
Compute total number of sample points recursively.
unsigned First_sample_point_to_actually_lookup_during_locate_zeta
When searching through sample points recursively from the top level RefineableBinArray (in determinis...
void fill_bin_array(const Vector< SamplePoint * > &sample_point_pt)
Fill the bin array with specified SamplePoints.
bool bin_array_is_recursive() const
Is the BinArray recursive?
static unsigned Default_n_bin_1d
Default number of bins (in each coordinate direction) (Note: don't move this into a common base class...
void operator=(const RefineableBinArray &)=delete
Broken assignment operator.
void add_sample_point(SamplePoint *new_sample_point_pt, const Vector< double > &zeta)
Add specified SamplePoint to RefineableBinArray.
void locate_zeta(const Vector< double > &zeta, GeomObject *&sub_geom_object_pt, Vector< double > &s)
Find sub-GeomObject (finite element) and the local coordinate s within it that contains point with gl...
unsigned & initial_last_sample_point_to_actually_lookup_during_locate_zeta()
When searching through sample points recursively from the top level RefineableBinArray (in determinis...
unsigned & total_number_of_sample_points_visited_during_locate_zeta_from_top_level()
Counter to keep track of how many sample points we've visited during top level call to locate_zeta.
unsigned nbin() const
Number of bins (not taking recursion into account)
RefineableBinArray * Root_bin_array_pt
Pointer to root bin array.
unsigned Depth
Variable which stores the Depth value of the bin_array. Useful for debugging and for preventing "infi...
unsigned Max_number_of_sample_point_per_bin
Maximum number of sample points in bin (before it's subdivided recursively)
RefineableBinArray * root_bin_array_pt() const
Root bin array.
void fill_bin_array()
Fill the bin array with sample points from FiniteElements stored in mesh.
void output_bin_vertices(std::ofstream &outfile)
Output bin vertices (allowing display of bins as zones).
void output_neighbouring_bins(const unsigned &bin_index, const unsigned &radius, std::ofstream &outfile)
Output neighbouring bins at given "radius" of the specified bin.
unsigned Last_sample_point_to_actually_lookup_during_locate_zeta
When searching through sample points recursively from the top level RefineableBinArray (in determinis...
unsigned & first_sample_point_to_actually_lookup_during_locate_zeta()
When searching through sample points recursively from the top level RefineableBinArray (in determinis...
void output_bins(std::ofstream &outfile)
Output bins.
void get_bin_boundaries(const unsigned &bin_index, Vector< std::pair< double, double >> &min_and_max_coordinates)
Boundaries of specified bin in each coordinate direction. *.first = min; *.second = max.
void create_sample_points_from_element(FiniteElement *const element_pt, const unsigned &n_element)
Loop over all sample points in the element specified via the pointer and create a SamplePoint for eac...
unsigned Initial_last_sample_point_to_actually_lookup_during_locate_zeta
When searching through sample points recursively from the top level RefineableBinArray (in determinis...
RefineableBin * bin_pt(const unsigned &i) const
Pointer to i-th bin; can be null if bin is empty.
unsigned & last_sample_point_to_actually_lookup_during_locate_zeta()
When searching through sample points recursively from the top level RefineableBinArray (in determinis...
unsigned & multiplier_for_max_sample_point_to_actually_lookup_during_locate_zeta()
Every time we've completed a "spiral", visiting a finite number of sample points in a deterministic o...
RefineableBinArray(SamplePointContainerParameters *bin_array_parameters_pt)
Constructor.
unsigned max_number_of_sample_point_per_bin() const
Maximum number of sample points in bin (before its subdivided recursively)
RefineableBinArray(const RefineableBinArray &data)=delete
Broken copy constructor.
bool Bin_array_is_recursive
Variable which stores if the RefineableBinArray is recursive or not.
RefineableBin class. Contains sample points and is embedded in a RefineableBinArray....
void output_bins(std::ofstream &outfile)
Output bin vertices (allowing display of bins as zones).
unsigned nsample_points_in_bin()
Number of sample points stored in bin.
void output(std::ofstream &outfile, const bool &don_t_recurse=false)
Output bin; x,[y,[z]],n_sample_points.
void add_sample_point(SamplePoint *new_sample_point_pt, const Vector< double > &zeta_coordinates)
Add a new sample point to RefineableBin.
void get_bin_boundaries(Vector< std::pair< double, double >> &min_and_max_coordinates)
Boundaries of bin in each coordinate direction. *.first = min; *.second = max.
RefineableBinArray * Sub_bin_array_pt
Pointer to a possible sub-BinArray. Null by default.
void output_bin_vertices(std::ofstream &outfile)
Output bin vertices (allowing display of bins as zones).
unsigned total_number_of_sample_points_computed_recursively() const
Compute total number of sample points recursively.
unsigned Bin_index_in_bin_array
Index of bin in its bin array.
~RefineableBin()
Destructor.
void locate_zeta(const Vector< double > &zeta, GeomObject *&sub_geom_object_pt, Vector< double > &s)
Find sub-GeomObject (finite element) and the local coordinate s within it that contains point with gl...
Vector< SamplePoint * > * Sample_point_pt
Container of SamplePoints. Pointer to vector because it's shorter than an empty vector!...
void operator=(const RefineableBin &)=delete
Broken assignment operator.
RefineableBin(RefineableBinArray *bin_array_pt, const unsigned &bin_index_in_bin_array)
Constructor. Pass pointer to bin array that contains this bin and the index of the newly created bin ...
void make_sub_bin_array(const Vector< std::pair< double, double >> &min_and_max_coordinates)
Method for building a new subbin_array (called when the Bin size is greater than the Max_number_of_sa...
RefineableBinArray * Bin_array_pt
Pointer to the bin array which "owns" this RefineableBin.
RefineableBin(const RefineableBin &data)=delete
Broken copy constructor.
///////////////////////////////////////////////////////////////////// ///////////////////////////////...
static bool Always_fail_elemental_locate_zeta
Boolean flag to make to make locate zeta fail. Used for debugging/ illustration of search procedures.
static double Percentage_offset
Offset of sample point container boundaries beyond max/min coords.
Vector< std::pair< double, double > > Min_and_max_coordinates
Vector of pairs of doubles for min and maximum coordinates. Call: Min_and_max_coordinates[j] gives me...
static bool Enable_timing_of_setup
Time setup?
bool ignore_halo_elements_during_locate_zeta_search() const
Ignore halo elements?
unsigned & nsample_points_generated_per_element()
"Measure of" number of sample points generated in each element
bool Ignore_halo_elements_during_locate_zeta_search
Ignore halo elements?
const std::pair< double, double > & min_and_max_coordinates(const unsigned &i) const
Pair of doubles for min and maximum coordinates in i-th direction: min (first) and max....
SamplePointContainer()
Broken default constructor; needed for broken copy constructors. Don't call. It will die.
const Vector< std::pair< double, double > > & min_and_max_coordinates() const
Vector of pair of doubles for min and maximum coordinates. min (first) and max. (second) coordinates.
bool use_eulerian_coordinates_during_setup() const
Use Eulerian coordinates (i.e. interpolated_x) rather than zeta itself (i.e. interpolated_zeta) to id...
SamplePointContainer(const SamplePointContainer &data)=delete
Broken copy constructor.
virtual ~SamplePointContainer()
Virtual destructor.
unsigned Nsample_points_generated_per_element
"Measure of" number of sample points generated in each element
unsigned Total_number_of_sample_points_visited_during_locate_zeta_from_top_level
Counter to keep track of how many sample points we've visited during top level call to locate_zeta.
bool Use_eulerian_coordinates_during_setup
Use Eulerian coordinates (i.e. interpolated_x) rather than zeta itself (i.e. interpolated_zeta) to id...
Mesh * Mesh_pt
Pointer to mesh from whose FiniteElements sample points are created.
double Max_search_radius
Max radius beyond which we stop searching the bin. Initialised to DBL_MAX so keep going until the poi...
SamplePointContainer(Mesh *mesh_pt, const Vector< std::pair< double, double >> &min_and_max_coordinates, const bool &use_eulerian_coordinates_during_setup, const bool &ignore_halo_elements_during_locate_zeta_search, const unsigned &nsample_points_generated_per_element)
Constructor.
virtual unsigned total_number_of_sample_points_computed_recursively() const =0
Total number of sample points in sample point container, possibly computed recursively.
virtual void locate_zeta(const Vector< double > &zeta, GeomObject *&sub_geom_object_pt, Vector< double > &s)=0
Find sub-GeomObject (finite element) and the local coordinate s within it that contains point with gl...
static std::ofstream Visited_sample_points_file
File to record sequence of visited sample points in. Used for debugging/ illustration of search proce...
double & max_search_radius()
Set maximum search radius for locate zeta. This is initialised do DBL_MAX so we brutally search throu...
Mesh * mesh_pt() const
Pointer to mesh from whose FiniteElements sample points are created.
void operator=(const SamplePointContainer &)=delete
Broken assignment operator.
virtual unsigned & total_number_of_sample_points_visited_during_locate_zeta_from_top_level()
Counter to keep track of how many sample points we've visited during top level call to locate_zeta....
virtual unsigned ndim_zeta() const =0
Dimension of the zeta ( = dim of local coordinate of elements)
void setup_min_and_max_coordinates()
Helper function to compute the min and max coordinates for the mesh, in each dimension.
static bool Use_equally_spaced_interior_sample_points
Use equally spaced sample points? (otherwise vertices are sampled repeatedly.
///////////////////////////////////////////////////////////////// ///////////////////////////////////...
SamplePoint(const unsigned &element_index_in_mesh, const unsigned &sample_point_index_in_element)
Construct SamplePoint object from number of finite element in its mesh, and index of sample point wit...
void operator=(const SamplePoint &)=delete
Broken assignment operator.
SamplePoint(const SamplePoint &data)=delete
Broken copy constructor.
unsigned element_index_in_mesh() const
Access function to the index of finite element in its mesh.
unsigned Sample_point_index_in_element
Index of the sample point within element.
unsigned Element_index_in_mesh
Index of finite element in its mesh.
unsigned sample_point_index_in_element() const
Index of sample point within element.
std::string string(const unsigned &i)
Return the i-th string or "" if the relevant string hasn't been defined.