RefineableBinArray Class Reference

RefineableBinArray class. More...

#include <sample_point_container.h>

+ Inheritance diagram for RefineableBinArray:

Public Member Functions

 RefineableBinArray (SamplePointContainerParameters *bin_array_parameters_pt)
 Constructor. More...
 
 RefineableBinArray (const RefineableBinArray &data)=delete
 Broken copy constructor. More...
 
void operator= (const RefineableBinArray &)=delete
 Broken assignment operator. More...
 
 ~RefineableBinArray ()
 Destructor. More...
 
RefineableBinArrayroot_bin_array_pt () const
 Root bin array. More...
 
RefineableBinbin_pt (const unsigned &i) const
 Pointer to i-th bin; can be null if bin is empty. More...
 
unsigned nbin () const
 Number of bins (not taking recursion into account) More...
 
unsigned total_number_of_sample_points_computed_recursively () const
 Compute total number of sample points recursively. More...
 
void fill_bin_array (const Vector< SamplePoint * > &sample_point_pt)
 Fill the bin array with specified SamplePoints. More...
 
void add_sample_point (SamplePoint *new_sample_point_pt, const Vector< double > &zeta)
 Add specified SamplePoint to RefineableBinArray. More...
 
void locate_zeta (const Vector< double > &zeta, GeomObject *&sub_geom_object_pt, Vector< double > &s)
 
void get_bin_boundaries (const unsigned &bin_index, Vector< std::pair< double, double >> &min_and_max_coordinates)
 
unsigned depth () const
 Depth of the hierarchical bin_array. More...
 
unsigned max_depth () const
 Max depth of the hierarchical bin_array; const version. More...
 
unsignedmax_depth ()
 Max depth of the hierarchical bin_array. More...
 
bool bin_array_is_recursive () const
 Is the BinArray recursive? More...
 
unsigned max_number_of_sample_point_per_bin () const
 
void output_bins (std::ofstream &outfile)
 Output bins. More...
 
void output_bin_vertices (std::ofstream &outfile)
 Output bin vertices (allowing display of bins as zones). More...
 
void output_neighbouring_bins (const unsigned &bin_index, const unsigned &radius, std::ofstream &outfile)
 Output neighbouring bins at given "radius" of the specified bin. More...
 
unsignedtotal_number_of_sample_points_visited_during_locate_zeta_from_top_level ()
 
unsignedfirst_sample_point_to_actually_lookup_during_locate_zeta ()
 
unsignedlast_sample_point_to_actually_lookup_during_locate_zeta ()
 
unsignedmultiplier_for_max_sample_point_to_actually_lookup_during_locate_zeta ()
 
unsignedinitial_last_sample_point_to_actually_lookup_during_locate_zeta ()
 
- Public Member Functions inherited from BinArray
 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. More...
 
 BinArray ()
 
 BinArray (const BinArray &data)=delete
 Broken copy constructor. More...
 
void operator= (const BinArray &)=delete
 Broken assignment operator. More...
 
virtual ~BinArray ()
 Virtual destructor. More...
 
void get_neighbouring_bins_helper (const unsigned &bin_index, const unsigned &radius, Vector< unsigned > &neighbouring_bin_index, const bool &use_old_version=true)
 
void profile_get_neighbouring_bins_helper ()
 
unsigned coords_to_bin_index (const Vector< double > &zeta)
 
void coords_to_vectorial_bin_index (const Vector< double > &zeta, Vector< unsigned > &bin_index)
 Get "coordinates" of bin that contains specified zeta. More...
 
unsigned max_bin_dimension () const
 Max. bin dimension (number of bins in coordinate directions) More...
 
unsigned ndim_zeta () const
 Dimension of the zeta ( = dim of local coordinate of elements) More...
 
unsigned dimension_of_bin_array (const unsigned &i) const
 Number of bins in coordinate direction i. More...
 
Vector< unsigneddimensions_of_bin_array () const
 
unsigned dimensions_of_bin_array (const unsigned &i) const
 Number of bins in specified coordinate direction. More...
 
- Public Member Functions inherited from SamplePointContainer
 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. More...
 
 SamplePointContainer ()
 
 SamplePointContainer (const SamplePointContainer &data)=delete
 Broken copy constructor. More...
 
void operator= (const SamplePointContainer &)=delete
 Broken assignment operator. More...
 
virtual ~SamplePointContainer ()
 Virtual destructor. More...
 
Mesh * mesh_pt () const
 Pointer to mesh from whose FiniteElements sample points are created. More...
 
const std::pair< double, double > & min_and_max_coordinates (const unsigned &i) const
 
const Vector< std::pair< double, double > > & min_and_max_coordinates () const
 
bool use_eulerian_coordinates_during_setup () const
 
unsignednsample_points_generated_per_element ()
 "Measure of" number of sample points generated in each element More...
 
doublemax_search_radius ()
 

Static Public Attributes

static unsigned Default_n_bin_1d = 5
 Default number of bins (in each coordinate direction) More...
 
- Static Public Attributes inherited from SamplePointContainer
static std::ofstream Visited_sample_points_file
 File to record sequence of visited sample points in. More...
 
static bool Always_fail_elemental_locate_zeta = false
 Boolean flag to make to make locate zeta fail. More...
 
static bool Use_equally_spaced_interior_sample_points = true
 
static bool Enable_timing_of_setup = false
 Time setup? More...
 
static double Percentage_offset = 5.0
 Offset of sample point container boundaries beyond max/min coords. More...
 

Private Member Functions

void fill_bin_array ()
 Fill the bin array with sample points from FiniteElements stored in mesh. More...
 
void create_sample_points_from_element (FiniteElement *const element_pt, const unsigned &n_element)
 

Private Attributes

Vector< RefineableBin * > Bin_pt
 Vector of pointers to constituent RefineableBins. More...
 
bool Bin_array_is_recursive
 
unsigned Depth
 
unsigned Max_depth
 Max depth of the hierarchical bin_array. More...
 
unsigned Max_number_of_sample_point_per_bin
 
RefineableBinArrayRoot_bin_array_pt
 Pointer to root bin array. More...
 
unsigned First_sample_point_to_actually_lookup_during_locate_zeta
 
unsigned Last_sample_point_to_actually_lookup_during_locate_zeta
 
unsigned Multiplier_for_max_sample_point_to_actually_lookup_during_locate_zeta
 
unsigned Initial_last_sample_point_to_actually_lookup_during_locate_zeta
 

Additional Inherited Members

- Protected Member Functions inherited from SamplePointContainer
void setup_min_and_max_coordinates ()
 Setup the min and max coordinates for the mesh, in each dimension. More...
 
- Protected Attributes inherited from BinArray
Vector< unsignedDimensions_of_bin_array
 Number of bins in each coordinate direction. More...
 
- Protected Attributes inherited from SamplePointContainer
Mesh * Mesh_pt
 Pointer to mesh from whose FiniteElements sample points are created. More...
 
Vector< std::pair< double, double > > Min_and_max_coordinates
 
bool Use_eulerian_coordinates_during_setup
 
unsigned Nsample_points_generated_per_element
 "Measure of" number of sample points generated in each element More...
 
unsigned Total_number_of_sample_points_visited_during_locate_zeta_from_top_level
 
double Max_search_radius
 

Detailed Description

RefineableBinArray class.

///////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////

Constructor & Destructor Documentation

◆ RefineableBinArray() [1/2]

RefineableBinArray::RefineableBinArray ( SamplePointContainerParameters *  sample_point_container_parameters_pt)

Constructor.

/////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////// RefineableBin array class /////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////

844  sample_point_container_parameters_pt->mesh_pt(),
845  sample_point_container_parameters_pt->min_and_max_coordinates(),
846  sample_point_container_parameters_pt
847  ->use_eulerian_coordinates_during_setup(),
848  sample_point_container_parameters_pt
849  ->ignore_halo_elements_during_locate_zeta_search(),
850  sample_point_container_parameters_pt
851  ->nsample_points_generated_per_element()),
852  BinArray(
853  sample_point_container_parameters_pt->mesh_pt(),
854  sample_point_container_parameters_pt->min_and_max_coordinates(),
855  dynamic_cast<BinArrayParameters*>(sample_point_container_parameters_pt)
856  ->dimensions_of_bin_array(),
857  sample_point_container_parameters_pt
858  ->use_eulerian_coordinates_during_setup(),
859  sample_point_container_parameters_pt
860  ->ignore_halo_elements_during_locate_zeta_search(),
861  sample_point_container_parameters_pt
862  ->nsample_points_generated_per_element())
863  {
864  RefineableBinArrayParameters* ref_bin_array_parameters_pt =
865  dynamic_cast<RefineableBinArrayParameters*>(
866  sample_point_container_parameters_pt);
867 
868 #ifdef PARANOID
869  if (ref_bin_array_parameters_pt == 0)
870  {
871  throw OomphLibError("Wrong sample_point_container_parameters_pt",
874  }
875 #endif
876 
878  ref_bin_array_parameters_pt->bin_array_is_recursive();
879  Depth = ref_bin_array_parameters_pt->depth();
880  Max_depth = ref_bin_array_parameters_pt->max_depth();
882  ref_bin_array_parameters_pt->max_number_of_sample_point_per_bin();
883  Root_bin_array_pt = ref_bin_array_parameters_pt->root_bin_array_pt();
884 
885  // Set default size of bin array (and spatial dimension!)
886  if (Dimensions_of_bin_array.size() == 0)
887  {
888  int dim = 0;
889  if (Mesh_pt->nelement() != 0)
890  {
891  dim = Mesh_pt->finite_element_pt(0)->dim();
892  }
893 
894  // Need to do an Allreduce to ensure that the dimension is consistent
895  // even when no elements are assigned to a certain processor
896 #ifdef OOMPH_HAS_MPI
897  // Only a problem if the mesh has been distributed
898  if (Mesh_pt->is_mesh_distributed())
899  {
900  // Need a non-null communicator
901  if (Mesh_pt->communicator_pt() != 0)
902  {
903  int n_proc = Mesh_pt->communicator_pt()->nproc();
904  if (n_proc > 1)
905  {
906  int dim_reduce;
907  MPI_Allreduce(&dim,
908  &dim_reduce,
909  1,
910  MPI_INT,
911  MPI_MAX,
912  Mesh_pt->communicator_pt()->mpi_comm());
913  dim = dim_reduce;
914  }
915  }
916  }
917 #endif
918 
920  }
921 
922  // Have we specified max/min coordinates?
923  // If not, compute them on the fly from mesh
924  if (Min_and_max_coordinates.size() == 0)
925  {
927  }
928 
929  // Get total number of bins and make space
930  unsigned dim = Dimensions_of_bin_array.size();
931  unsigned n_bin = 1;
932  for (unsigned i = 0; i < dim; i++)
933  {
934  n_bin *= Dimensions_of_bin_array[i];
935  }
936  Bin_pt.resize(n_bin, 0);
937 
938  // I'm my own root bin array
939  if (Depth == 0)
940  {
941  Root_bin_array_pt = this;
942  }
943 
944 #ifdef PARANOID
945  if (Depth > 0)
946  {
947  if (Root_bin_array_pt == 0)
948  {
949  throw OomphLibError(
950  "Must specify root_bin_array for lower-level bin arrays\n",
953  }
954  }
955 #endif
956 
957  // Initialise
962  2; // hierher tune this and create public static default
964  10; // hierher UINT MAX is temporary bypass! tune this and create public
965  // static default
966 
967  // Now fill the bastard...
968  if (Depth == 0)
969  {
970  // Time it
971  double t_start = 0.0;
973  {
974  t_start = TimingHelpers::timer();
975  }
976  fill_bin_array();
978  {
979  double t_end = TimingHelpers::timer();
981  oomph_info << "Time for setup of " << dim
982  << "-dimensional sample point container containing " << npts
983  << " sample points: " << t_end - t_start
984  << " sec (ref_bin); third party: 0 sec ( = 0 %)"
985  << std::endl;
986  }
987  }
988  }
int i
Definition: BiCGSTAB_step_by_step.cpp:9
Vector< unsigned > Dimensions_of_bin_array
Number of bins in each coordinate direction.
Definition: sample_point_container.h:508
BinArray()
Definition: sample_point_container.h:425
unsigned Multiplier_for_max_sample_point_to_actually_lookup_during_locate_zeta
Definition: sample_point_container.h:800
Vector< RefineableBin * > Bin_pt
Vector of pointers to constituent RefineableBins.
Definition: sample_point_container.h:759
unsigned Max_depth
Max depth of the hierarchical bin_array.
Definition: sample_point_container.h:771
unsigned total_number_of_sample_points_computed_recursively() const
Compute total number of sample points recursively.
Definition: sample_point_container.cc:1820
unsigned First_sample_point_to_actually_lookup_during_locate_zeta
Definition: sample_point_container.h:785
static unsigned Default_n_bin_1d
Default number of bins (in each coordinate direction)
Definition: sample_point_container.h:568
RefineableBinArray * Root_bin_array_pt
Pointer to root bin array.
Definition: sample_point_container.h:778
unsigned Depth
Definition: sample_point_container.h:768
unsigned Max_number_of_sample_point_per_bin
Definition: sample_point_container.h:775
RefineableBinArray * root_bin_array_pt() const
Root bin array.
Definition: sample_point_container.h:547
void fill_bin_array()
Fill the bin array with sample points from FiniteElements stored in mesh.
Definition: sample_point_container.cc:1882
unsigned Last_sample_point_to_actually_lookup_during_locate_zeta
Definition: sample_point_container.h:790
unsigned Initial_last_sample_point_to_actually_lookup_during_locate_zeta
Definition: sample_point_container.h:806
bool Bin_array_is_recursive
Definition: sample_point_container.h:763
Vector< std::pair< double, double > > Min_and_max_coordinates
Definition: sample_point_container.h:363
static bool Enable_timing_of_setup
Time setup?
Definition: sample_point_container.h:346
SamplePointContainer()
Definition: sample_point_container.h:233
unsigned Total_number_of_sample_points_visited_during_locate_zeta_from_top_level
Definition: sample_point_container.h:382
Mesh * Mesh_pt
Pointer to mesh from whose FiniteElements sample points are created.
Definition: sample_point_container.h:357
void setup_min_and_max_coordinates()
Setup the min and max coordinates for the mesh, in each dimension.
Definition: sample_point_container.cc:684
OomphInfo oomph_info
Definition: oomph_definitions.cc:319
#define OOMPH_EXCEPTION_LOCATION
Definition: oomph_definitions.h:61
#define OOMPH_CURRENT_FUNCTION
Definition: oomph_definitions.h:86
double timer
Definition: oomph_metis_from_parmetis_3.1.1/struct.h:210

References Bin_array_is_recursive, Bin_pt, Default_n_bin_1d, Depth, BinArray::Dimensions_of_bin_array, SamplePointContainer::Enable_timing_of_setup, fill_bin_array(), First_sample_point_to_actually_lookup_during_locate_zeta, i, Initial_last_sample_point_to_actually_lookup_during_locate_zeta, Last_sample_point_to_actually_lookup_during_locate_zeta, Max_depth, Max_number_of_sample_point_per_bin, SamplePointContainer::Mesh_pt, SamplePointContainer::Min_and_max_coordinates, Multiplier_for_max_sample_point_to_actually_lookup_during_locate_zeta, OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION, oomph::oomph_info, root_bin_array_pt(), Root_bin_array_pt, SamplePointContainer::setup_min_and_max_coordinates(), total_number_of_sample_points_computed_recursively(), and SamplePointContainer::Total_number_of_sample_points_visited_during_locate_zeta_from_top_level.

◆ RefineableBinArray() [2/2]

RefineableBinArray::RefineableBinArray ( const RefineableBinArray data)
delete

Broken copy constructor.

◆ ~RefineableBinArray()

RefineableBinArray::~RefineableBinArray ( )
inline

Destructor.

534  {
535  unsigned n = Bin_pt.size();
536  for (unsigned i = 0; i < n; i++)
537  {
538  if (Bin_pt[i] != 0)
539  {
540  delete Bin_pt[i];
541  Bin_pt[i] = 0;
542  }
543  }
544  }
const unsigned n
Definition: CG3DPackingUnitTest.cpp:11

References Bin_pt, i, and n.

Member Function Documentation

◆ add_sample_point()

void RefineableBinArray::add_sample_point ( SamplePoint new_sample_point_pt,
const Vector< double > &  zeta 
)
inline

Add specified SamplePoint to RefineableBinArray.

614  {
615  // Find the correct bin
616  unsigned bin_index = coords_to_bin_index(zeta);
617 
618  // if the bin is not yet created, create it...
619  if (Bin_pt[bin_index] == 0)
620  {
621  Bin_pt[bin_index] = new RefineableBin(this, bin_index);
622  }
623  // Then add the SamplePoint
624  Bin_pt[bin_index]->add_sample_point(new_sample_point_pt, zeta);
625  }
unsigned coords_to_bin_index(const Vector< double > &zeta)
Definition: sample_point_container.cc:1840
Definition: sample_point_container.h:107
EIGEN_STRONG_INLINE const Eigen::CwiseBinaryOp< Eigen::internal::scalar_zeta_op< typename DerivedX::Scalar >, const DerivedX, const DerivedQ > zeta(const Eigen::ArrayBase< DerivedX > &x, const Eigen::ArrayBase< DerivedQ > &q)
Definition: SpecialFunctionsArrayAPI.h:152

References Bin_pt, BinArray::coords_to_bin_index(), and Eigen::zeta().

Referenced by fill_bin_array().

◆ bin_array_is_recursive()

bool RefineableBinArray::bin_array_is_recursive ( ) const
inline

Is the BinArray recursive?

660  {
661  return Bin_array_is_recursive;
662  }

References Bin_array_is_recursive.

◆ bin_pt()

RefineableBin* RefineableBinArray::bin_pt ( const unsigned i) const
inline

Pointer to i-th bin; can be null if bin is empty.

554  {
555  return Bin_pt[i];
556  }

References Bin_pt, and i.

◆ create_sample_points_from_element()

void RefineableBinArray::create_sample_points_from_element ( FiniteElement *const  element_pt,
const unsigned n_element 
)
private

Loop over all sample points in the element specified via the pointer and create a SamplePoint for each. Also specify the index of the element in its mesh.

◆ depth()

unsigned RefineableBinArray::depth ( ) const
inline

Depth of the hierarchical bin_array.

642  {
643  return Depth;
644  }

References Depth.

◆ fill_bin_array() [1/2]

void RefineableBinArray::fill_bin_array ( )
private

Fill the bin array with sample points from FiniteElements stored in mesh.

For all the sample points we have to create ...

1883  {
1884  // Fill 'em in:
1885  unsigned nel = Mesh_pt->nelement();
1886  for (unsigned e = 0; e < nel; e++)
1887  {
1888  FiniteElement* el_pt = Mesh_pt->finite_element_pt(e);
1889 
1890  // Total number of sample point we will create
1891  unsigned nplot =
1892  el_pt->nplot_points(Nsample_points_generated_per_element);
1893 
1895  for (unsigned j = 0; j < nplot; j++)
1896  {
1897  // ... create it: Pass element index in mesh (vector
1898  // of elements and index of sample point within element
1899  SamplePoint* new_sample_point_pt = new SamplePoint(e, j);
1900 
1901  // Coordinates of this point
1902  Vector<double> zeta(ndim_zeta());
1903  Vector<double> s(ndim_zeta());
1904  bool use_equally_spaced_interior_sample_points =
1906  el_pt->get_s_plot(j,
1908  s,
1909  use_equally_spaced_interior_sample_points);
1911  {
1912  el_pt->interpolated_x(s, zeta);
1913  }
1914  else
1915  {
1916  el_pt->interpolated_zeta(s, zeta);
1917  }
1918 
1919 #ifdef PARANOID
1920 
1921  // Check if point is inside
1922  bool is_inside = true;
1923  std::ostringstream error_message;
1924  unsigned dim = ndim_zeta();
1925  for (unsigned i = 0; i < dim; i++)
1926  {
1927  if ((zeta[i] < Min_and_max_coordinates[i].first) ||
1928  (zeta[i] > Min_and_max_coordinates[i].second))
1929  {
1930  is_inside = false;
1931  error_message << "Sample point at zeta[" << i << "] = " << zeta[i]
1932  << " is outside limits of bin array: "
1933  << Min_and_max_coordinates[i].first << " and "
1934  << Min_and_max_coordinates[i].second << std::endl;
1935  }
1936  }
1937 
1938  if (!is_inside)
1939  {
1940  error_message << "Please correct the limits passed to the "
1941  << "constructor." << std::endl;
1942  throw OomphLibError(error_message.str(),
1945  }
1946 
1947 #endif
1948 
1949 
1950  // Finding the correct bin to put the sample point
1951  unsigned bin_index = coords_to_bin_index(zeta);
1952 
1953  // if the bin is not yet created, create it
1954  if (Bin_pt[bin_index] == 0)
1955  {
1956  Bin_pt[bin_index] = new RefineableBin(this, bin_index);
1957  }
1958 
1959  // ... and then fill the bin with this new sample point
1960  Bin_pt[bin_index]->add_sample_point(new_sample_point_pt, zeta);
1961  }
1962  }
1963  }
Array< double, 1, 3 > e(1./3., 0.5, 2.)
unsigned ndim_zeta() const
Dimension of the zeta ( = dim of local coordinate of elements)
Definition: sample_point_container.h:480
unsigned Nsample_points_generated_per_element
"Measure of" number of sample points generated in each element
Definition: sample_point_container.h:377
bool Use_eulerian_coordinates_during_setup
Definition: sample_point_container.h:367
static bool Use_equally_spaced_interior_sample_points
Definition: sample_point_container.h:343
Definition: sample_point_container.h:53
RealScalar s
Definition: level1_cplx_impl.h:130
std::ptrdiff_t j
Definition: tut_arithmetic_redux_minmax.cpp:2

References Bin_pt, BinArray::coords_to_bin_index(), e(), i, j, SamplePointContainer::Mesh_pt, SamplePointContainer::Min_and_max_coordinates, BinArray::ndim_zeta(), SamplePointContainer::Nsample_points_generated_per_element, OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION, s, SamplePointContainer::Use_equally_spaced_interior_sample_points, SamplePointContainer::Use_eulerian_coordinates_during_setup, and Eigen::zeta().

Referenced by RefineableBinArray().

◆ fill_bin_array() [2/2]

void RefineableBinArray::fill_bin_array ( const Vector< SamplePoint * > &  sample_point_pt)
inline

Fill the bin array with specified SamplePoints.

575  {
576  unsigned n_dim = ndim_zeta();
577 
578  unsigned n = sample_point_pt.size();
579  for (unsigned i = 0; i < n; i++)
580  {
581  // Coordinates of this point
582  Vector<double> zeta(n_dim);
583 
584  // Which element is the point in?
585  unsigned e = sample_point_pt[i]->element_index_in_mesh();
586  FiniteElement* el_pt = Mesh_pt->finite_element_pt(e);
587 
588  // Which sample point is it at?
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 =
593  el_pt->get_s_plot(j,
595  s,
596  use_equally_spaced_interior_sample_points);
598  {
599  el_pt->interpolated_x(s, zeta);
600  }
601  else
602  {
603  el_pt->interpolated_zeta(s, zeta);
604  }
605 
606  // Add it
607  add_sample_point(sample_point_pt[i], zeta);
608  }
609  }
void add_sample_point(SamplePoint *new_sample_point_pt, const Vector< double > &zeta)
Add specified SamplePoint to RefineableBinArray.
Definition: sample_point_container.h:612

References add_sample_point(), e(), i, j, SamplePointContainer::Mesh_pt, n, BinArray::ndim_zeta(), SamplePointContainer::Nsample_points_generated_per_element, s, SamplePointContainer::Use_equally_spaced_interior_sample_points, SamplePointContainer::Use_eulerian_coordinates_during_setup, and Eigen::zeta().

◆ first_sample_point_to_actually_lookup_during_locate_zeta()

unsigned& RefineableBinArray::first_sample_point_to_actually_lookup_during_locate_zeta ( )
inline

When searching through sample points recursively from the top level RefineableBinArray (in deterministic order!) only actually do the locate_zeta calls when when the counter exceeds this value.

References First_sample_point_to_actually_lookup_during_locate_zeta.

Referenced by oomph::Multi_domain_functions::aux_setup_multi_domain_interaction().

◆ get_bin_boundaries()

void RefineableBinArray::get_bin_boundaries ( const unsigned bin_index,
Vector< std::pair< double, double >> &  min_and_max_coordinates_of_bin 
)

Boundaries of specified bin in each coordinate direction. *.first = min; *.second = max.

998  {
999  unsigned bin_index_local = bin_index;
1000 
1001  // temporary storage for the eulerian dim
1002  unsigned current_dim = ndim_zeta();
1003  min_and_max_coordinates_of_bin.resize(current_dim);
1004  for (unsigned u = 0; u < current_dim; u++)
1005  {
1006  // The number of bins there are according to the u-th dimension
1007  unsigned nbin_in_dir = bin_index_local % dimension_of_bin_array(u);
1008  bin_index_local /= dimension_of_bin_array(u);
1009 
1010  // The range between the maximum and minimum u-th coordinates of a bin
1011  double range =
1012  (Min_and_max_coordinates[u].second - Min_and_max_coordinates[u].first) /
1013  double(Dimensions_of_bin_array[u]);
1014 
1015  // Now updating the minimum and maximum u-th coordinates for this bin.
1016  min_and_max_coordinates_of_bin[u].first =
1017  Min_and_max_coordinates[u].first + double(nbin_in_dir) * range;
1018  min_and_max_coordinates_of_bin[u].second =
1019  min_and_max_coordinates_of_bin[u].first + range;
1020  }
1021  }
unsigned dimension_of_bin_array(const unsigned &i) const
Number of bins in coordinate direction i.
Definition: sample_point_container.h:486

References BinArray::dimension_of_bin_array(), BinArray::Dimensions_of_bin_array, SamplePointContainer::Min_and_max_coordinates, and BinArray::ndim_zeta().

Referenced by output_neighbouring_bins().

◆ initial_last_sample_point_to_actually_lookup_during_locate_zeta()

unsigned& RefineableBinArray::initial_last_sample_point_to_actually_lookup_during_locate_zeta ( )
inline

When searching through sample points recursively from the top level RefineableBinArray (in deterministic order!) only actually do the locate_zeta calls when when the counter exceeds this value. This is the initial value when starting the spiral based search.

References Initial_last_sample_point_to_actually_lookup_during_locate_zeta.

Referenced by oomph::Multi_domain_functions::aux_setup_multi_domain_interaction().

◆ last_sample_point_to_actually_lookup_during_locate_zeta()

unsigned& RefineableBinArray::last_sample_point_to_actually_lookup_during_locate_zeta ( )
inline

When searching through sample points recursively from the top level RefineableBinArray (in deterministic order!) only actually do the locate_zeta calls when when the counter is less than this value.

References Last_sample_point_to_actually_lookup_during_locate_zeta.

Referenced by oomph::Multi_domain_functions::aux_setup_multi_domain_interaction().

◆ locate_zeta()

void RefineableBinArray::locate_zeta ( const Vector< double > &  zeta,
GeomObject *&  sub_geom_object_pt,
Vector< double > &  s 
)
virtual

Find sub-GeomObject (finite element) and the local coordinate s within it that contains point with global coordinate zeta. sub_geom_object_pt=0 if point can't be found.

Implements SamplePointContainer.

2005  {
2006  // Default: we've failed miserably
2007  sub_geom_object_pt = 0;
2008 
2009  unsigned dim = ndim_zeta();
2010 
2011  // Top level book keeping and sanity checking
2012  if (Depth == 0)
2013  {
2014  // Reset counter for number of sample points visited.
2015  // If we can't find the point we should at least make sure that
2016  // we've visited all the sample points before giving up.
2018  0;
2019 
2020  // Does the zeta coordinate lie within the current (top level!) bin
2021  // structure? Skip this test if we want to always fail because that's
2022  // usually done to trace out the spiral path
2024  {
2025  // Loop over the lagrangian dimension
2026  for (unsigned i = 0; i < dim; i++)
2027  {
2028  // If the i-th coordinate is less than the minimum
2029  if (zeta[i] < Min_and_max_coordinates[i].first)
2030  {
2031  return;
2032  }
2033  // Otherwise coordinate may be bigger than the maximum
2034  else if (zeta[i] > Min_and_max_coordinates[i].second)
2035  {
2036  return;
2037  }
2038  }
2039  }
2040  }
2041 
2042  // Finding the bin in which the point is located
2043  int bin_index = coords_to_bin_index(zeta);
2044 
2045 #ifdef PARANOID
2046  if (bin_index < 0)
2047  {
2048  throw OomphLibError("Negative bin index...",
2051  }
2052 #endif
2053 
2054  // Start at this radius (radius = 0 is the central bin)
2055  unsigned radius = 0;
2056 
2057  // "coordinates" of the bin which is most likely to contain the
2058  // point
2059  Vector<unsigned> bin_index_v(dim);
2060  coords_to_vectorial_bin_index(zeta, bin_index_v);
2061 
2062  // We loop over all the dimensions to find the maximum radius we have to
2063  // do the spiraling if we want to be sure there is no bin left at the end
2064  unsigned max_radius = 0;
2065  for (unsigned k = 0; k < dim; k++)
2066  {
2067  unsigned local =
2068  std::max((bin_index_v[k] + 1),
2069  (Dimensions_of_bin_array[k] - bin_index_v[k] - 1));
2070  if (local > max_radius)
2071  {
2072  max_radius = local;
2073  }
2074  }
2075 
2076  // Vector which will store the indices of the neighbouring bins
2077  // at the current radius
2078  Vector<unsigned> bin_index_at_current_radius;
2079  while (radius <= max_radius)
2080  {
2081  // Get the neighbouring bins
2082  bin_index_at_current_radius.clear();
2084  bin_index, radius, bin_index_at_current_radius);
2085  // How many are there
2086  unsigned nbin_at_current_radius = bin_index_at_current_radius.size();
2087  unsigned n_bin = nbin();
2088 
2089  // Keep looping over entries (stop if we found geom object)
2090  unsigned k = 0;
2091  while ((k < nbin_at_current_radius) && (sub_geom_object_pt == 0))
2092  {
2093  int neigh_bin_index = bin_index_at_current_radius[k];
2094 #ifdef PARANOID
2095  if (neigh_bin_index < 0)
2096  {
2097  throw OomphLibError("Negative neighbour bin index...",
2100  }
2101 #endif
2102  if (neigh_bin_index < int(n_bin))
2103  {
2104  // If the bin exists
2105  if (Bin_pt[neigh_bin_index] != 0)
2106  {
2107  // We call the correct method to locate_zeta in the bin
2108  Bin_pt[neigh_bin_index]->locate_zeta(zeta, sub_geom_object_pt, s);
2109  }
2110  }
2111  k++;
2112  }
2113 
2114  // Reached end of loop over bins at this radius (or found the point)
2115  // Which one?
2116  if (sub_geom_object_pt != 0)
2117  {
2118  return;
2119  }
2120  // Increment radius
2121  else
2122  {
2123  radius++;
2124  }
2125  }
2126 
2127 
2128 #ifdef PARANOID
2129 
2130  // If we still haven't found the point, check that we've at least visited
2131  // all the sample points
2132  if (Depth == 0)
2133  {
2134  if (
2137  {
2138  if (max_search_radius() == DBL_MAX)
2139  {
2140  std::ostringstream error_message;
2141  error_message
2142  << "Zeta not found after visiting "
2144  << " sample points out of "
2146  << "Where are the missing sample points???\n";
2147  throw OomphLibError(error_message.str(),
2150  }
2151  }
2152  }
2153 
2154 #endif
2155  }
void get_neighbouring_bins_helper(const unsigned &bin_index, const unsigned &radius, Vector< unsigned > &neighbouring_bin_index, const bool &use_old_version=true)
Definition: sample_point_container.cc:1350
void coords_to_vectorial_bin_index(const Vector< double > &zeta, Vector< unsigned > &bin_index)
Get "coordinates" of bin that contains specified zeta.
Definition: sample_point_container.cc:1969
unsigned nbin() const
Number of bins (not taking recursion into account)
Definition: sample_point_container.h:559
static bool Always_fail_elemental_locate_zeta
Boolean flag to make to make locate zeta fail.
Definition: sample_point_container.h:339
double & max_search_radius()
Definition: sample_point_container.h:327
#define max(a, b)
Definition: datatypes.h:23
char char char int int * k
Definition: level2_impl.h:374
radius
Definition: UniformPSDSelfTest.py:15

References SamplePointContainer::Always_fail_elemental_locate_zeta, Bin_pt, BinArray::coords_to_bin_index(), BinArray::coords_to_vectorial_bin_index(), Depth, BinArray::Dimensions_of_bin_array, BinArray::get_neighbouring_bins_helper(), i, k, max, SamplePointContainer::max_search_radius(), SamplePointContainer::Min_and_max_coordinates, nbin(), BinArray::ndim_zeta(), OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION, UniformPSDSelfTest::radius, s, total_number_of_sample_points_computed_recursively(), SamplePointContainer::Total_number_of_sample_points_visited_during_locate_zeta_from_top_level, and Eigen::zeta().

◆ max_depth() [1/2]

unsigned& RefineableBinArray::max_depth ( )
inline

Max depth of the hierarchical bin_array.

654  {
655  return Max_depth;
656  }

References Max_depth.

◆ max_depth() [2/2]

unsigned RefineableBinArray::max_depth ( ) const
inline

Max depth of the hierarchical bin_array; const version.

648  {
649  return Max_depth;
650  }

References Max_depth.

◆ max_number_of_sample_point_per_bin()

unsigned RefineableBinArray::max_number_of_sample_point_per_bin ( ) const
inline

Maximum number of sample points in bin (before its subdivided recursively)

667  {
669  }

References Max_number_of_sample_point_per_bin.

◆ multiplier_for_max_sample_point_to_actually_lookup_during_locate_zeta()

unsigned& RefineableBinArray::multiplier_for_max_sample_point_to_actually_lookup_during_locate_zeta ( )
inline

Every time we've completed a "spiral", visiting a finite number of sample points in a deterministic order, use this multiplier to increase the max. number of sample points to be visited. Using a multiplier rather than a constant increment increases the amount of (more and more unlikely to yield anything!) work done locally before doing another costly mpi round trip when we're already far from the point we're trying to find.

References Multiplier_for_max_sample_point_to_actually_lookup_during_locate_zeta.

Referenced by oomph::Multi_domain_functions::aux_setup_multi_domain_interaction().

◆ nbin()

unsigned RefineableBinArray::nbin ( ) const
inlinevirtual

Number of bins (not taking recursion into account)

Implements BinArray.

560  {
561  return Bin_pt.size();
562  }

References Bin_pt.

Referenced by locate_zeta(), and total_number_of_sample_points_computed_recursively().

◆ operator=()

void RefineableBinArray::operator= ( const RefineableBinArray )
delete

Broken assignment operator.

◆ output_bin_vertices()

void RefineableBinArray::output_bin_vertices ( std::ofstream &  outfile)
virtual

Output bin vertices (allowing display of bins as zones).

Output neighbouring bins up to given "radius" of the specified bin.

Implements BinArray.

1028  {
1029  // Loop over bins
1030  unsigned n_bin = Bin_pt.size();
1031  for (unsigned i = 0; i < n_bin; i++)
1032  {
1033  if (Bin_pt[i] != 0)
1034  {
1035  Bin_pt[i]->output_bin_vertices(outfile);
1036  }
1037  }
1038  }

References Bin_pt, and i.

◆ output_bins()

void RefineableBinArray::output_bins ( std::ofstream &  outfile)
inlinevirtual

Output bins.

Loop over bins

Implements BinArray.

673  {
675  unsigned n_bin = Bin_pt.size();
676  for (unsigned i = 0; i < n_bin; i++)
677  {
678  if (Bin_pt[i] != 0)
679  {
680  Bin_pt[i]->output(outfile);
681  }
682  }
683  }

References Bin_pt, and i.

◆ output_neighbouring_bins()

void RefineableBinArray::output_neighbouring_bins ( const unsigned bin_index,
const unsigned radius,
std::ofstream &  outfile 
)

Output neighbouring bins at given "radius" of the specified bin.

Output neighbouring bins up to given "radius" of the specified bin.

1047  {
1048  unsigned n_lagr = ndim_zeta();
1049 
1050  Vector<unsigned> neighbouring_bin_index;
1051  get_neighbouring_bins_helper(bin_index, radius, neighbouring_bin_index);
1052  unsigned nneigh = neighbouring_bin_index.size();
1053 
1054  // Outline of bin structure
1055  switch (n_lagr)
1056  {
1057  case 1:
1058  outfile << "ZONE I=2\n"
1059  << Min_and_max_coordinates[0].first << std::endl
1060  << Min_and_max_coordinates[0].second << std::endl;
1061  break;
1062 
1063  case 2:
1064 
1065  outfile << "ZONE I=2, J=2\n"
1066  << Min_and_max_coordinates[0].first << " "
1067  << Min_and_max_coordinates[1].first << " "
1068  << "\n"
1069 
1070  << Min_and_max_coordinates[0].second << " "
1071  << Min_and_max_coordinates[1].first << " "
1072  << "\n"
1073 
1074  << Min_and_max_coordinates[0].first << " "
1075  << Min_and_max_coordinates[1].second << " "
1076  << "\n"
1077 
1078  << Min_and_max_coordinates[0].second << " "
1079  << Min_and_max_coordinates[1].second << " "
1080  << "\n";
1081  break;
1082 
1083  case 3:
1084 
1085  outfile << "ZONE I=2, J=2, K=2 \n"
1086  << Min_and_max_coordinates[0].first << " "
1087  << Min_and_max_coordinates[1].first << " "
1088  << Min_and_max_coordinates[2].first << " "
1089  << "\n"
1090 
1091  << Min_and_max_coordinates[0].second << " "
1092  << Min_and_max_coordinates[1].first << " "
1093  << Min_and_max_coordinates[2].first << " "
1094  << "\n"
1095 
1096  << Min_and_max_coordinates[0].first << " "
1097  << Min_and_max_coordinates[1].second << " "
1098  << Min_and_max_coordinates[2].first << " "
1099  << "\n"
1100 
1101  << Min_and_max_coordinates[0].second << " "
1102  << Min_and_max_coordinates[1].second << " "
1103  << Min_and_max_coordinates[2].first << " "
1104  << "\n"
1105 
1106  << Min_and_max_coordinates[0].first << " "
1107  << Min_and_max_coordinates[1].first << " "
1108  << Min_and_max_coordinates[2].second << " "
1109  << "\n"
1110 
1111  << Min_and_max_coordinates[0].second << " "
1112  << Min_and_max_coordinates[1].first << " "
1113  << Min_and_max_coordinates[2].second << " "
1114  << "\n"
1115 
1116  << Min_and_max_coordinates[0].first << " "
1117  << Min_and_max_coordinates[1].second << " "
1118  << Min_and_max_coordinates[2].second << " "
1119  << "\n"
1120 
1121  << Min_and_max_coordinates[0].second << " "
1122  << Min_and_max_coordinates[1].second << " "
1123  << Min_and_max_coordinates[2].second << " "
1124  << "\n";
1125  break;
1126 
1127  default:
1128 
1129  oomph_info << "n_lagr=" << n_lagr << std::endl;
1130  throw OomphLibError(
1131  "Wrong dimension!", OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION);
1132  }
1133 
1134  // Loop over neighbours
1135  for (unsigned i = 0; i < nneigh; i++)
1136  {
1137  Vector<std::pair<double, double>> min_and_max_coordinates(n_lagr);
1138  get_bin_boundaries(neighbouring_bin_index[i], min_and_max_coordinates);
1139 
1140  switch (n_lagr)
1141  {
1142  case 1:
1143  outfile << "ZONE I=2\n"
1144  << min_and_max_coordinates[0].first << std::endl
1145  << min_and_max_coordinates[0].second << std::endl;
1146  break;
1147 
1148  case 2:
1149 
1150  outfile << "ZONE I=2, J=2\n"
1151  << min_and_max_coordinates[0].first << " "
1152  << min_and_max_coordinates[1].first << " "
1153  << "\n"
1154 
1155  << min_and_max_coordinates[0].second << " "
1156  << min_and_max_coordinates[1].first << " "
1157  << "\n"
1158 
1159  << min_and_max_coordinates[0].first << " "
1160  << min_and_max_coordinates[1].second << " "
1161  << "\n"
1162 
1163  << min_and_max_coordinates[0].second << " "
1164  << min_and_max_coordinates[1].second << " "
1165  << "\n";
1166  break;
1167 
1168  case 3:
1169 
1170  outfile << "ZONE I=2, J=2, K=2\n"
1171  << min_and_max_coordinates[0].first << " "
1172  << min_and_max_coordinates[1].first << " "
1173  << min_and_max_coordinates[2].first << " "
1174  << "\n"
1175 
1176  << min_and_max_coordinates[0].second << " "
1177  << min_and_max_coordinates[1].first << " "
1178  << min_and_max_coordinates[2].first << " "
1179  << "\n"
1180 
1181  << min_and_max_coordinates[0].first << " "
1182  << min_and_max_coordinates[1].second << " "
1183  << min_and_max_coordinates[2].first << " "
1184  << "\n"
1185 
1186  << min_and_max_coordinates[0].second << " "
1187  << min_and_max_coordinates[1].second << " "
1188  << min_and_max_coordinates[2].first << " "
1189  << "\n"
1190 
1191  << min_and_max_coordinates[0].first << " "
1192  << min_and_max_coordinates[1].first << " "
1193  << min_and_max_coordinates[2].second << " "
1194  << "\n"
1195 
1196  << min_and_max_coordinates[0].second << " "
1197  << min_and_max_coordinates[1].first << " "
1198  << min_and_max_coordinates[2].second << " "
1199  << "\n"
1200 
1201  << min_and_max_coordinates[0].first << " "
1202  << min_and_max_coordinates[1].second << " "
1203  << min_and_max_coordinates[2].second << " "
1204  << "\n"
1205 
1206  << min_and_max_coordinates[0].second << " "
1207  << min_and_max_coordinates[1].second << " "
1208  << min_and_max_coordinates[2].second << " "
1209  << "\n";
1210  break;
1211 
1212  default:
1213 
1214  oomph_info << "n_lagr=" << n_lagr << std::endl;
1215  throw OomphLibError("Wrong dimension!",
1218  }
1219  }
1220  }
void get_bin_boundaries(const unsigned &bin_index, Vector< std::pair< double, double >> &min_and_max_coordinates)
Definition: sample_point_container.cc:995
const Vector< std::pair< double, double > > & min_and_max_coordinates() const
Definition: sample_point_container.h:290

References get_bin_boundaries(), BinArray::get_neighbouring_bins_helper(), i, SamplePointContainer::min_and_max_coordinates(), SamplePointContainer::Min_and_max_coordinates, BinArray::ndim_zeta(), OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION, oomph::oomph_info, and UniformPSDSelfTest::radius.

◆ root_bin_array_pt()

RefineableBinArray* RefineableBinArray::root_bin_array_pt ( ) const
inline

Root bin array.

548  {
549  return Root_bin_array_pt;
550  }

References Root_bin_array_pt.

Referenced by RefineableBinArray().

◆ total_number_of_sample_points_computed_recursively()

unsigned RefineableBinArray::total_number_of_sample_points_computed_recursively ( ) const
virtual

Compute total number of sample points recursively.

Implements SamplePointContainer.

1821  {
1822  unsigned count = 0;
1823  unsigned n_bin = nbin();
1824  for (unsigned i = 0; i < n_bin; i++)
1825  {
1826  if (Bin_pt[i] != 0)
1827  {
1828  count +=
1829  Bin_pt[i]->total_number_of_sample_points_computed_recursively();
1830  }
1831  }
1832  return count;
1833  }

References Bin_pt, i, and nbin().

Referenced by oomph::Multi_domain_functions::aux_setup_multi_domain_interaction(), locate_zeta(), and RefineableBinArray().

◆ total_number_of_sample_points_visited_during_locate_zeta_from_top_level()

unsigned& RefineableBinArray::total_number_of_sample_points_visited_during_locate_zeta_from_top_level ( )
inlinevirtual

Counter to keep track of how many sample points we've visited during top level call to locate_zeta

Reimplemented from SamplePointContainer.

697  {
698  if (Depth == 0)
699  {
701  }
702  else
703  {
704  return Root_bin_array_pt
706  }
707  }
unsigned & total_number_of_sample_points_visited_during_locate_zeta_from_top_level()
Definition: sample_point_container.h:696

References Depth, Root_bin_array_pt, SamplePointContainer::Total_number_of_sample_points_visited_during_locate_zeta_from_top_level, and total_number_of_sample_points_visited_during_locate_zeta_from_top_level().

Referenced by total_number_of_sample_points_visited_during_locate_zeta_from_top_level().

Member Data Documentation

◆ Bin_array_is_recursive

bool RefineableBinArray::Bin_array_is_recursive
private

Variable which stores if the RefineableBinArray is recursive or not.

Referenced by bin_array_is_recursive(), and RefineableBinArray().

◆ Bin_pt

Vector<RefineableBin*> RefineableBinArray::Bin_pt
private

◆ Default_n_bin_1d

unsigned RefineableBinArray::Default_n_bin_1d = 5
static

Default number of bins (in each coordinate direction)

Default number of bins (in each coordinate direction) (Note: don't move this into a common base class because each derived class has its own value; we'll want far fewer in the refineable version!)

Referenced by RefineableBinArray().

◆ Depth

unsigned RefineableBinArray::Depth
private

Variable which stores the Depth value of the bin_array. Useful for debugging and for preventing "infinite" recursion in case if there is a problem.

Referenced by depth(), locate_zeta(), RefineableBinArray(), and total_number_of_sample_points_visited_during_locate_zeta_from_top_level().

◆ First_sample_point_to_actually_lookup_during_locate_zeta

unsigned RefineableBinArray::First_sample_point_to_actually_lookup_during_locate_zeta
private

When searching through sample points recursively from the top level RefineableBinArray (in deterministic order!) only actually do the locate_zeta calls when when the counter exceeds this value.

Referenced by first_sample_point_to_actually_lookup_during_locate_zeta(), and RefineableBinArray().

◆ Initial_last_sample_point_to_actually_lookup_during_locate_zeta

unsigned RefineableBinArray::Initial_last_sample_point_to_actually_lookup_during_locate_zeta
private

When searching through sample points recursively from the top level RefineableBinArray (in deterministic order!) only actually do the locate_zeta calls when when the counter exceeds this value. This is the initial value when starting the spiral based search.

Referenced by initial_last_sample_point_to_actually_lookup_during_locate_zeta(), and RefineableBinArray().

◆ Last_sample_point_to_actually_lookup_during_locate_zeta

unsigned RefineableBinArray::Last_sample_point_to_actually_lookup_during_locate_zeta
private

When searching through sample points recursively from the top level RefineableBinArray (in deterministic order!) only actually do the locate_zeta calls when when the counter is less than this value.

Referenced by last_sample_point_to_actually_lookup_during_locate_zeta(), and RefineableBinArray().

◆ Max_depth

unsigned RefineableBinArray::Max_depth
private

Max depth of the hierarchical bin_array.

Referenced by max_depth(), and RefineableBinArray().

◆ Max_number_of_sample_point_per_bin

unsigned RefineableBinArray::Max_number_of_sample_point_per_bin
private

Maximum number of sample points in bin (before it's subdivided recursively)

Referenced by max_number_of_sample_point_per_bin(), and RefineableBinArray().

◆ Multiplier_for_max_sample_point_to_actually_lookup_during_locate_zeta

unsigned RefineableBinArray::Multiplier_for_max_sample_point_to_actually_lookup_during_locate_zeta
private

Every time we've completed a "spiral", visiting a finite number of sample points in a deterministic order, use this multiplier to increase the max. number of sample points to be visited. Using a multiplier rather than a constant increment increases the amount of (more and more unlikely to yield anything!) work done locally before doing another costly mpi round trip when we're already far from the point we're trying to find.

Referenced by multiplier_for_max_sample_point_to_actually_lookup_during_locate_zeta(), and RefineableBinArray().

◆ Root_bin_array_pt

RefineableBinArray* RefineableBinArray::Root_bin_array_pt
private

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