QMCPACK
SpaceGridInput Class Reference
+ Collaboration diagram for SpaceGridInput:

Classes

class  SpaceGridAxisInput
 
class  SpaceGridInputSection
 
class  SpaceGridOriginInput
 

Public Types

enum  CoordForm { CARTESIAN = 0, CYLINDRICAL, SPHERICAL }
 
using Consumer = SpaceGrid
 
using Real = double
 
using LabelSet = std::vector< std::string_view >
 

Public Member Functions

 SpaceGridInput (xmlNodePtr cur)
 
 SpaceGridInput (const SpaceGridInput &sgi)=default
 
CoordForm get_coord_form () const
 
bool isPeriodic () const
 
const std::array< std::string, OHMMS_DIM > & get_axis_p1s () const
 
const std::array< std::string, OHMMS_DIM > & get_axis_p2s () const
 
const std::array< Real, OHMMS_DIM > & get_axis_scales () const
 
const std::array< std::string, OHMMS_DIM > & get_axis_labels () const
 
const std::array< AxisGrid< Real >, OHMMS_DIM > & get_axis_grids () const
 
const std::string & get_origin_p1 () const
 
const std::string & get_origin_p2 () const
 
Real get_origin_fraction () const
 
const LabelSetget_axes_label_set () const
 axes_label_set accessor, avoids a bunch of switch statements at must be used because std::unordered_map::operator[] can't return a const reference More...
 

Static Public Attributes

static const std::unordered_map< std::string, std::any > lookup_input_enum_value
 
static const LabelSet ax_cartesian {"x", "y", "z"}
 
static const LabelSet ax_cylindrical {"r", "phi", "z"}
 
static const LabelSet ax_spherical {"r", "phi", "theta"}
 
static const std::unordered_map< CoordForm, LabelSetaxes_label_sets
 

Private Member Functions

void checkAxes (std::vector< std::any > &axes)
 
void checkGrids ()
 

Private Attributes

SpaceGridInputSection input_section_
 
CoordForm coord_form_
 
std::string origin_p1_ {"zero"}
 
std::string origin_p2_ {""}
 
Real origin_fraction_ {0.0}
 
std::array< std::string, OHMMS_DIMaxis_labels_
 
std::array< std::string, OHMMS_DIMaxis_p1s_
 
std::array< std::string, OHMMS_DIMaxis_p2s_
 
std::array< Real, OHMMS_DIMaxis_scales_
 
std::array< AxisGrid< Real >, OHMMS_DIMaxis_grids_
 

Detailed Description

Definition at line 33 of file SpaceGridInput.h.

Member Typedef Documentation

◆ Consumer

Definition at line 36 of file SpaceGridInput.h.

◆ LabelSet

using LabelSet = std::vector<std::string_view>

Definition at line 53 of file SpaceGridInput.h.

◆ Real

using Real = double

Definition at line 37 of file SpaceGridInput.h.

Member Enumeration Documentation

◆ CoordForm

enum CoordForm
strong
Enumerator
CARTESIAN 
CYLINDRICAL 
SPHERICAL 

Definition at line 39 of file SpaceGridInput.h.

40  {
41  CARTESIAN = 0,
42  CYLINDRICAL,
43  SPHERICAL
44  };

Constructor & Destructor Documentation

◆ SpaceGridInput() [1/2]

SpaceGridInput ( xmlNodePtr  cur)

Definition at line 69 of file SpaceGridInput.cpp.

References SpaceGridInput::axis_grids_, SpaceGridInput::axis_labels_, SpaceGridInput::axis_p1s_, SpaceGridInput::axis_p2s_, SpaceGridInput::axis_scales_, SpaceGridInput::checkAxes(), SpaceGridInput::checkGrids(), SpaceGridInput::coord_form_, InputSection::get(), InputSection::has(), SpaceGridInput::input_section_, LAMBDA_setIfInInput, OHMMS_DIM, SpaceGridInput::origin_fraction_, SpaceGridInput::origin_p1_, SpaceGridInput::origin_p2_, and InputSection::readXML().

70 {
72  auto setIfInInput = LAMBDA_setIfInInput;
73  setIfInInput(coord_form_, "coord");
74  // rip open the axes inputs we're guarateed they have the proper dimensionality already
75 
76  auto axes = input_section_.get<std::vector<std::any>>("axis");
77  checkAxes(axes);
78  for (int d = 0; d < OHMMS_DIM; d++)
79  {
80  auto* axis_input = std::any_cast<SpaceGridAxisInput>(&axes[d]);
81  axis_labels_[d] = axis_input->get_label();
82  axis_p1s_[d] = axis_input->get_p1();
83  axis_p2s_[d] = axis_input->get_p2();
84  axis_grids_[d] = axis_input->get_grid();
85  axis_scales_[d] = axis_input->get_scale();
86  }
87  checkGrids();
88  if (input_section_.has("origin"))
89  {
90  auto space_grid_origin = input_section_.get<SpaceGridOriginInput>("origin");
91  origin_p1_ = space_grid_origin.get_p1();
92  origin_p2_ = space_grid_origin.get_p2();
93  origin_fraction_ = space_grid_origin.get_fraction();
94  }
95 }
std::array< std::string, OHMMS_DIM > axis_labels_
void checkAxes(std::vector< std::any > &axes)
SpaceGridInputSection input_section_
std::array< std::string, OHMMS_DIM > axis_p1s_
#define OHMMS_DIM
Definition: config.h:64
std::array< AxisGrid< Real >, OHMMS_DIM > axis_grids_
#define LAMBDA_setIfInInput
If tag is present in input_secution set its variable.
void readXML(xmlNodePtr cur)
Read variable values (initialize) from XML input, call checkValid.
std::array< std::string, OHMMS_DIM > axis_p2s_
std::array< Real, OHMMS_DIM > axis_scales_
T get(const std::string &name) const
Definition: InputSection.h:92
bool has(const std::string &name) const
Definition: InputSection.h:87

◆ SpaceGridInput() [2/2]

SpaceGridInput ( const SpaceGridInput sgi)
default

Member Function Documentation

◆ checkAxes()

void checkAxes ( std::vector< std::any > &  axes)
private

Definition at line 97 of file SpaceGridInput.cpp.

References SpaceGridInput::axes_label_sets, SpaceGridInput::coord_form_, InputSection::get(), SpaceGridInput::SpaceGridAxisInput::get_input(), and SpaceGridInput::input_section_.

Referenced by SpaceGridInput::SpaceGridInput().

98 {
99  auto& ax_labels = axes_label_sets.at(coord_form_);
100  for (auto& axis : axes)
101  {
102  auto* axis_input = std::any_cast<SpaceGridAxisInput>(&axis);
103  std::string axis_label = axis_input->get_input().template get<std::string>("label");
104  auto result = std::find(std::begin(ax_labels), std::end(ax_labels), axis_label);
105  if (result == std::end(ax_labels))
106  throw UniformCommunicateError(axis_label + " is not a valid label for coord form " +
107  input_section_.get<std::string>("coord"));
108  }
109 }
SpaceGridInputSection input_section_
static const std::unordered_map< CoordForm, LabelSet > axes_label_sets
T get(const std::string &name) const
Definition: InputSection.h:92

◆ checkGrids()

void checkGrids ( )
private

Definition at line 111 of file SpaceGridInput.cpp.

References SpaceGridInput::axis_grids_, SpaceGridInput::axis_labels_, error(), and OHMMS_DIM.

Referenced by SpaceGridInput::SpaceGridInput().

112 {
113  //check that all axis grid values fall in the allowed intervals for the coord label
114  for (int d = 0; d < OHMMS_DIM; d++)
115  {
116  if (axis_labels_[d] == "r" || axis_labels_[d] == "phi" || axis_labels_[d] == "theta")
117  {
118  if (axis_grids_[d].umin < 0.0 || axis_grids_[d].umax > 1.0)
119  {
120  std::ostringstream error;
121  error << " grid values for " << axis_labels_[d] << " must fall in [0,1]" << std::endl;
122  error << " interval provided: [" << axis_grids_[d].umin << "," << axis_grids_[d].umax << "]" << std::endl;
123  throw UniformCommunicateError(error.str());
124  }
125  }
126  // all other legal labels {"x","y","z"} can be over -1.0 to 1.0
127  else if (axis_grids_[d].umin < -1.0 || axis_grids_[d].umax > 1.0)
128  {
129  std::ostringstream error;
130  error << " grid values for " << axis_labels_[d] << " must fall in [-1,1]" << std::endl;
131  error << " interval provided: [" << axis_grids_[d].umin << "," << axis_grids_[d].umax << "]" << std::endl;
132  throw UniformCommunicateError(error.str());
133  }
134  }
135 }
std::array< std::string, OHMMS_DIM > axis_labels_
#define OHMMS_DIM
Definition: config.h:64
void error(char const *m)
Definition: Standard.h:204
std::array< AxisGrid< Real >, OHMMS_DIM > axis_grids_

◆ get_axes_label_set()

const LabelSet& get_axes_label_set ( ) const
inline

axes_label_set accessor, avoids a bunch of switch statements at must be used because std::unordered_map::operator[] can't return a const reference

Definition at line 178 of file SpaceGridInput.h.

References SpaceGridInput::axes_label_sets, and SpaceGridInput::coord_form_.

178 { return axes_label_sets.at(coord_form_); }
static const std::unordered_map< CoordForm, LabelSet > axes_label_sets

◆ get_axis_grids()

const std::array<AxisGrid<Real>, OHMMS_DIM>& get_axis_grids ( ) const
inline

Definition at line 171 of file SpaceGridInput.h.

References SpaceGridInput::axis_grids_.

Referenced by qmcplusplus::TEST_CASE().

171 { return axis_grids_; }
std::array< AxisGrid< Real >, OHMMS_DIM > axis_grids_

◆ get_axis_labels()

const std::array<std::string, OHMMS_DIM>& get_axis_labels ( ) const
inline

Definition at line 170 of file SpaceGridInput.h.

References SpaceGridInput::axis_labels_.

Referenced by qmcplusplus::TEST_CASE().

170 { return axis_labels_; }
std::array< std::string, OHMMS_DIM > axis_labels_

◆ get_axis_p1s()

const std::array<std::string, OHMMS_DIM>& get_axis_p1s ( ) const
inline

Definition at line 166 of file SpaceGridInput.h.

References SpaceGridInput::axis_p1s_.

Referenced by qmcplusplus::TEST_CASE().

166 { return axis_p1s_; }
std::array< std::string, OHMMS_DIM > axis_p1s_

◆ get_axis_p2s()

const std::array<std::string, OHMMS_DIM>& get_axis_p2s ( ) const
inline

Definition at line 167 of file SpaceGridInput.h.

References SpaceGridInput::axis_p2s_.

167 { return axis_p2s_; }
std::array< std::string, OHMMS_DIM > axis_p2s_

◆ get_axis_scales()

const std::array<Real, OHMMS_DIM>& get_axis_scales ( ) const
inline

Definition at line 169 of file SpaceGridInput.h.

References SpaceGridInput::axis_scales_.

Referenced by qmcplusplus::TEST_CASE().

169 { return axis_scales_; }
std::array< Real, OHMMS_DIM > axis_scales_

◆ get_coord_form()

CoordForm get_coord_form ( ) const
inline

Definition at line 164 of file SpaceGridInput.h.

References SpaceGridInput::coord_form_.

164 { return coord_form_; }

◆ get_origin_fraction()

Real get_origin_fraction ( ) const
inline

Definition at line 174 of file SpaceGridInput.h.

References SpaceGridInput::origin_fraction_.

Referenced by qmcplusplus::TEST_CASE().

◆ get_origin_p1()

const std::string& get_origin_p1 ( ) const
inline

Definition at line 172 of file SpaceGridInput.h.

References SpaceGridInput::origin_p1_.

Referenced by qmcplusplus::TEST_CASE().

172 { return origin_p1_; }

◆ get_origin_p2()

const std::string& get_origin_p2 ( ) const
inline

Definition at line 173 of file SpaceGridInput.h.

References SpaceGridInput::origin_p2_.

Referenced by qmcplusplus::TEST_CASE().

173 { return origin_p2_; }

◆ isPeriodic()

Member Data Documentation

◆ ax_cartesian

const LabelSet ax_cartesian {"x", "y", "z"}
inlinestatic

Definition at line 55 of file SpaceGridInput.h.

◆ ax_cylindrical

const LabelSet ax_cylindrical {"r", "phi", "z"}
inlinestatic

Definition at line 56 of file SpaceGridInput.h.

◆ ax_spherical

const LabelSet ax_spherical {"r", "phi", "theta"}
inlinestatic

Definition at line 57 of file SpaceGridInput.h.

◆ axes_label_sets

const std::unordered_map<CoordForm, LabelSet> axes_label_sets
inlinestatic

◆ axis_grids_

std::array<AxisGrid<Real>, OHMMS_DIM> axis_grids_
private

◆ axis_labels_

std::array<std::string, OHMMS_DIM> axis_labels_
private

◆ axis_p1s_

std::array<std::string, OHMMS_DIM> axis_p1s_
private

◆ axis_p2s_

std::array<std::string, OHMMS_DIM> axis_p2s_
private

◆ axis_scales_

std::array<Real, OHMMS_DIM> axis_scales_
private

◆ coord_form_

◆ input_section_

◆ lookup_input_enum_value

const std::unordered_map<std::string, std::any> lookup_input_enum_value
inlinestatic
Initial value:
{{"coord-cartesian",
{"coord-cylindrical",
{"coord-spherical",

Definition at line 46 of file SpaceGridInput.h.

Referenced by SpaceGridInput::SpaceGridInputSection::assignAnyEnum().

◆ origin_fraction_

Real origin_fraction_ {0.0}
private

◆ origin_p1_

std::string origin_p1_ {"zero"}
private

◆ origin_p2_

std::string origin_p2_ {""}
private

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