CASM  1.1.0
A Clusters Approach to Statistical Mechanics
ConfigEnumStrainInterface.cc
Go to the documentation of this file.
2 
3 #include "casm/app/APICommand.hh"
15 #include "casm/clex/PrimClex.hh"
23 
24 namespace CASM {
25 
26 // namespace adapter {
27 //
28 // Configuration const &
29 // Adapter<Configuration, ConfigEnumData<ConfigEnumStrain,
30 // ConfigEnumInput>>::operator()(
31 // ConfigEnumData<ConfigEnumStrain, ConfigEnumInput> const &adaptable) const
32 // { return adaptable.configuration;
33 // }
34 //
35 // Supercell const &
36 // Adapter<Supercell, ConfigEnumData<ConfigEnumStrain,
37 // ConfigEnumInput>>::operator()(
38 // ConfigEnumData<ConfigEnumStrain, ConfigEnumInput> const &adaptable) const
39 // { return adaptable.configuration.supercell();
40 // }
41 //
42 // }
43 
44 namespace ConfigEnumIO {
46 template <>
48  return enumerator.normal_coordinate();
49 }
50 
51 template <typename ConfigEnumDataType>
54  "subwedge_index",
55  "Subwedge index (determines axes defining normal coordinate).",
56  [](ConfigEnumDataType const &data) {
57  return data.enumerator.subwedge_index();
58  });
59 }
60 } // namespace ConfigEnumIO
61 
62 std::string ConfigEnumStrainInterface::desc() const {
63  std::string description =
64  "Generate strain perturbations of one or more initial "
65  "configurations.\n\n";
66 
67  std::string custom_options =
68  " axes: matrix or JSON object (optional) \n"
69  " Coordinate axes of the DoF grid. Default value is the identity \n"
70  " matrix of DoF space dimension Each element in an axis vector \n"
71  " correponds to an individual DoF. Each axis vector corresponds \n"
72  " to a normal mode. Use the option \n"
73  " `\"print_dof_space_and_quit\": true` to print DoF space \n"
74  " information with a glossary describing which DoF is specified \n"
75  " by which vector element. The 'axes' may be rank deficient \n"
76  " indicating enumeration should occur in a subspace of the full \n"
77  " DoF space specified by the \"dof\" value and initial \n"
78  " enumeration state. \n\n"
79 
80  " Example if matrix (row vector matix): \n"
81  " \"axes\" : [ \n"
82  " [1, 1, 1, 1, 1, 1], \n"
83  " [1,-1, 0,-1, 1, 0], \n"
84  " [1,-1, 0, 1,-1, 0] \n"
85  " ] \n\n"
86 
87  " Example if JSON object (named axis vectors): \n"
88  " \"axes\": { \n"
89  " \"q1\": [1, 1, 1, 1, 1, 1], \n"
90  " \"q2\": [1,-1, 0,-1, 1, 0], \n"
91  " \"q3\": [1,-1, 0, 1,-1, 0] \n"
92  " } \n\n"
93 
94  " Note: \n"
95  " - If some \"qi\" in the range [1, DoF space dimension] are \n"
96  " missing, then enumeration is performed in the subspace \n"
97  " specified by the axes that are provided. \n\n"
98 
99  " sym_axes: bool (optional, default=false) \n"
100  " If true, constructs symmetry-adapted grid axes as the symmetry-\n"
101  " adapted DoF order parameters of the input state in the space \n"
102  " specified by \"axes\". Run with option \n"
103  " `\"print_dof_space_and_quit\": true` to obtain the analysis \n"
104  " report including the symmetry-adapted axes before doing the \n"
105  " enumeration. If `\"sym_axes\": true`, the enumeration grid may \n"
106  " not be specified using vector-valued \"min\", \"max\", \n"
107  " \"increment\", or \"num\". \n\n"
108 
109  " print_dof_space_and_quit: boolean (optional, default=false) \n"
110  " If true, print DoF space information for each initial \n"
111  " enumeration state and quit. If `\"sym_axes\": true`, will also \n"
112  " print irreducible subspaces and symmetry-adapted axes. \n\n"
113 
114  " min: number, or array of numbers (optional) \n"
115  " Minimum, starting value of grid counter. If number, specifies \n"
116  " using a constant array of DoF space dimension with that given \n"
117  " value. \n"
118  " Ex: \"min\" : -0.1 ( --> [-0.1, -0.1, ..., -0.1]) \n"
119  " If array, dimension must be equal to the \"axes\" dimension and\n"
120  " `\"sym_axes\" must be false`. \n"
121  " Ex: \"min\" : [-0.05, -0.1, -0.1] \n\n"
122 
123  " max: number, or array of numbers (required) \n"
124  " Maximum, final value of grid counter. If number, specifies \n"
125  " using a constant array of DoF space dimension with that given \n"
126  " value. \n"
127  " Ex: \"max\" : 0.1 ( --> [0.1, 0.1, ..., 0.1]) \n"
128  " If array, dimension must be equal to the \"axes\" dimension and\n"
129  " `\"sym_axes\" must be false`. \n"
130  " Ex: \"max\" : [0.05, 0.1, 0.1] \n\n"
131 
132  " increment: number, or array of numbers (optional) \n"
133  " Amount by which to increment counter elements. If number, \n"
134  " specifies using a constant array of DoF space dimension with \n"
135  " that given value. \n"
136  " Ex: \"increment\" : 0.01 ( --> [0.01, 0.01, ..., 0.01]) \n"
137  " If array, dimension must be equal to the \"axes\" dimension and\n"
138  " `\"sym_axes\" must be false`. \n"
139  " Ex: \"increment\" : [0.005, 0.01, 0.01] \n"
140  " One of \"increment\" or \"num\" must be given. \n\n"
141 
142  " num: int, or array of int (optional) \n"
143  " Number of values to include. Must be >= 1. If \"num\" is 1, \n"
144  " only include a point at the \"min\" value along specified \n"
145  " dimensions (this is equivalent to min=min, increment=(max-min),\n"
146  " max=max-increment/10.). If \"num\" is >1, include that many \n"
147  " points, including the \"min\" and \"max\" (this is equivalent \n"
148  " to min=min, increment=(max-min)/(num-1), max=max+inc/10.). \n"
149  " Ex: \"increment\" : 11 ( --> [11, 11, ..., 11]) \n"
150  " If array, dimension must be equal to the \"axes\" dimension. \n"
151  " Ex: \"num\" : [5, 11, 11] \n"
152  " One of \"increment\" or \"num\" must be given. \n\n"
153 
154  " trim_corners: bool (optional, default=true) \n"
155  " If true, any grid points outside the largest ellipsoid \n"
156  " inscribed within the extrema of the grid will be discarded. \n\n"
157 
158  " output_dir: string (optional, default=current path) \n"
159  " Selects where output files are written. \n\n";
160 
161  std::string examples =
162  " Examples:\n"
163  " To enumerate all strain perturbations of a particular "
164  "configuration:\n"
165  " casm enum --method ConfigEnumStrain -i \n"
166  " '{ \n"
167  " \"confignames\" : [\"SCEL4_1_4_1_0_0_0/3\"],\n"
168  " \"increment\" : [0.01, 0.01, 0.01, 0., 0., 0.],\n"
169  " \"max\" : [0.05, 0.05, 0,05, 0., 0., 0.]\n"
170  " }' \n\n";
171 
172  return name() + ": \n\n" + description + custom_options +
173  standard_ConfigEnumInput_help() + examples;
174 }
175 
176 std::string ConfigEnumStrainInterface::name() const {
178 }
179 
180 namespace ConfigEnumStrainInterface_impl {
181 
183 
184 // Holds parsed input parameters and acts as functor to construct
185 // a ConfigEnumStrain enumerator for each initial state
188  ConfigEnumStrainParams const &_params,
189  AxesCounterParams const &_axes_params,
190  bool _make_symmetry_adapted_axes,
191  DoFSpaceIO::SequentialDirectoryOutput &_dof_space_output)
192  : log(CASM::log()),
193  options(_options),
194  params_template(_params),
195  axes_params(_axes_params),
196  make_symmetry_adapted_axes(_make_symmetry_adapted_axes),
197  calc_wedges(true),
198  dof_space_output(_dof_space_output) {}
199 
207 
208  // constructs a ConfigEnumStrain for each initial_state
209  ConfigEnumStrain operator()(Index index, std::string name,
210  ConfigEnumInput const &initial_state) const;
211 
212  // constructs a symmetry adapted dof space and writes it to file as a record
214  Index index, std::string name, ConfigEnumInput const &initial_state,
215  std::optional<SymRepTools_v2::VectorSpaceSymReport> &sym_report) const;
216 
217  // constructs a DataFormatter to record enumeration results
219 };
220 
221 // constructs a ConfigEnumStrain for each initial_state
223  Index index, std::string name, ConfigEnumInput const &initial_state) const {
224  std::optional<SymRepTools_v2::VectorSpaceSymReport> sym_report;
225  DoFSpace dof_space =
226  make_and_write_dof_space(index, name, initial_state, sym_report);
227 
229  if (make_symmetry_adapted_axes) { // if sym_axes==true, use wedges
230  params.wedges = sym_report->irreducible_wedge;
231  } else {
232  params.wedges.clear();
233  params.wedges.push_back(
235  }
236 
237  // set enumeration ranges
239  int dim = dof_space.subspace_dim();
240  params.min_val = Eigen::VectorXd::Constant(dim, axes_params.min_scalar);
241  params.max_val = Eigen::VectorXd::Constant(dim, axes_params.max_scalar);
242  params.inc_val = Eigen::VectorXd::Constant(dim, axes_params.inc_scalar);
243  } else {
244  params.min_val = axes_params.min_vector;
245  params.max_val = axes_params.max_vector;
246  params.inc_val = axes_params.inc_vector;
247  }
248 
249  return ConfigEnumStrain{initial_state, params};
250 }
251 
252 // constructs a symmetry adapted dof space and writes it to file as a record
254  Index index, std::string name, ConfigEnumInput const &initial_state,
255  std::optional<SymRepTools_v2::VectorSpaceSymReport> &sym_report) const {
256  DoFSpace dof_space =
259  log << "Performing DoF space analysis: " << name << std::endl;
260  auto const &sym_info = initial_state.configuration().supercell().sym_info();
261  std::vector<PermuteIterator> group = make_invariant_subgroup(initial_state);
262  dof_space_output.write_symmetry(index, name, initial_state, group);
263  dof_space = make_symmetry_adapted_dof_space_v2(dof_space, sym_info, group,
264  calc_wedges, sym_report);
265  }
266  dof_space_output.write_dof_space(index, dof_space, name, initial_state,
267  sym_report);
268  return dof_space;
269 }
270 
271 // constructs a DataFormatter to record enumeration results
274  std::string prim_strain_metric = xtal::get_strain_metric(params_template.dof);
275  formatter.push_back(ConfigEnumIO::name<ConfigEnumDataType>(),
276  ConfigEnumIO::selected<ConfigEnumDataType>(),
277  ConfigEnumIO::is_new<ConfigEnumDataType>(),
278  ConfigEnumIO::is_existing<ConfigEnumDataType>());
279  if (options.filter) {
280  formatter.push_back(
281  ConfigEnumIO::is_excluded_by_filter<ConfigEnumDataType>());
282  }
283  formatter.push_back(
284  ConfigEnumIO::initial_state_index<ConfigEnumDataType>(),
285  ConfigEnumIO::initial_state_name<ConfigEnumDataType>(),
286  ConfigEnumIO::initial_state_configname<ConfigEnumDataType>());
288  formatter.push_back(ConfigEnumIO::subwedge_index<ConfigEnumDataType>());
289  }
290  formatter.push_back(
291  ConfigEnumIO::normal_coordinate<ConfigEnumDataType>(),
292  make_datum_formatter_adapter<ConfigEnumDataType, Configuration>(
293  ConfigIO::DoFStrain(prim_strain_metric)));
294  if (prim_strain_metric != "F") { // may not be necessary
295  formatter.push_back(
296  make_datum_formatter_adapter<ConfigEnumDataType, Configuration>(
297  ConfigIO::DoFStrain("F")));
298  }
299  return formatter;
300 }
301 
302 } // namespace ConfigEnumStrainInterface_impl
303 
317  ConfigEnumInput const &initial_state, AxesCounterParams &axes_params,
318  bool sym_axes_option) {
319  parser.value = notstd::make_unique<ConfigEnumStrainParams>();
320  auto &params = *parser.value;
321 
322  Supercell const &supercell = initial_state.configuration().supercell();
323 
324  // 1) get DoF type -------------------------------------------------
325  // "dof" -> params.dof
326  try {
327  params.dof = xtal::get_strain_dof_key(supercell.prim());
328  } catch (std::exception &e) {
329  parser.error.insert(e.what());
330  return;
331  }
332 
333  Index dof_space_dimension = get_dof_space_dimension(
334  params.dof, supercell.prim(),
336  initial_state.sites());
337 
338  // 2) get axes and enumeration counter parameters -------------------
339  auto grid_parser = parser.parse_as<AxesCounterParams>(dof_space_dimension);
340  if (grid_parser->valid()) {
341  axes_params = *grid_parser->value;
342  }
343 
344  if (sym_axes_option && !axes_params.scalar_input) {
345  std::stringstream msg;
346  msg << "Error: Vector input for enumeration ranges (\"min\", \"max\", "
347  "\"increment\" or \"num\") is not allowed with `\"sym_axes\": "
348  "true`.";
349  throw std::runtime_error(msg.str());
350  }
351 
352  // 3) set auto_range option ---------------------------------------
353  if (!parser.self.contains("min") && sym_axes_option == true) {
354  params.auto_range = true;
355  } else {
356  params.auto_range = false;
357  }
358 
359  // 4) get trim_corners option -------------------------------------
360  // "trim_corners" -> params.trim_corners (bool, default true)
361  parser.optional_else(params.trim_corners, "trim_corners", true);
362 }
363 
365  PrimClex &primclex, jsonParser const &json_options,
366  jsonParser const &cli_options_as_json) const {
367  using namespace ConfigEnumStrainInterface_impl;
368 
369  Log &log = CASM::log();
370 
371  log.subsection().begin("ConfigEnumStrain");
372  ParentInputParser parser =
373  make_enum_parent_parser(log, json_options, cli_options_as_json);
374  std::runtime_error error_if_invalid{
375  "Error reading ConfigEnumStrain JSON input"};
376 
377  log.custom("Checking input");
378 
379  // 1) Parse ConfigEnumOptions ------------------
380  auto options_parser_ptr = parser.parse_as<ConfigEnumOptions>(
382  primclex.settings().query_handler<Configuration>().dict());
383  report_and_throw_if_invalid(parser, log, error_if_invalid);
384  ConfigEnumOptions const &options = *options_parser_ptr->value;
385  print_options(log, options);
386  log.set_verbosity(options.verbosity);
387 
388  // 2) Parse initial enumeration states ------------------
389  typedef std::vector<std::pair<std::string, ConfigEnumInput>>
390  NamedInitialEnumerationStates;
391  auto input_parser_ptr = parser.parse_as<NamedInitialEnumerationStates>(
392  primclex.shared_prim(), &primclex, primclex.db<Supercell>(),
393  primclex.db<Configuration>());
394  report_and_throw_if_invalid(parser, log, error_if_invalid);
395  auto const &named_initial_states = *input_parser_ptr->value;
396  print_initial_states(log, named_initial_states);
397 
398  // 3) Parse ConfigEnumStrainParams ------------------
399 
400  // 3a) check for "sym_axes" option:
401  bool sym_axes_option;
402  parser.optional_else(sym_axes_option, "sym_axes", false);
403  log.indent() << "sym_axes: " << std::boolalpha << sym_axes_option
404  << std::endl;
405 
406  // 3b) parse ConfigEnumStrainParams (except parse "axes" instead of "wedges")
407 
408  // axes: column vector matrix
409  // - user input, else default = identity matrix of initial state dof space
410  // dimension
411  // - If sym_axes==false: normal mode coordinates used directly
412  // - If sym_axes==true: subspace to be symmetrized
413  AxesCounterParams axes_params;
414  auto params_parser_ptr = parser.parse_as<ConfigEnumStrainParams>(
415  named_initial_states[0].second, axes_params, sym_axes_option);
416  report_and_throw_if_invalid(parser, log, error_if_invalid);
417  ConfigEnumStrainParams const &params = *params_parser_ptr->value;
418  log.indent() << "axes: (column vectors) \n" << axes_params.axes << std::endl;
419  if (axes_params.scalar_input) {
420  log.indent() << "min: " << axes_params.min_scalar << std::endl;
421  log.indent() << "max: " << axes_params.max_scalar << std::endl;
422  log.indent() << "increment: " << axes_params.inc_scalar << std::endl;
423  } else {
424  log.indent() << "min: " << axes_params.min_vector.transpose() << std::endl;
425  log.indent() << "max: " << axes_params.max_vector.transpose() << std::endl;
426  log.indent() << "increment: " << axes_params.inc_vector.transpose()
427  << std::endl;
428  }
429  log.indent() << "auto_range: " << std::boolalpha << params.auto_range
430  << std::endl;
431  log.indent() << "trim_corners: " << std::boolalpha << params.trim_corners
432  << std::endl;
433 
434  // 3c) check for "print_dof_space_and_quit" option:
435  bool print_dof_space_and_quit_option;
436  parser.optional_else(print_dof_space_and_quit_option,
437  "print_dof_space_and_quit", false);
438  log.indent() << "print_dof_space_and_quit: " << std::boolalpha
439  << print_dof_space_and_quit_option << std::endl;
440 
441  // 3d) parse "output_dir" (optional, default = current_path)
442  fs::path output_dir;
443  parser.optional_else(output_dir, "output_dir", fs::current_path());
444  report_and_throw_if_invalid(parser, log, error_if_invalid);
445 
446  log << std::endl;
447 
448  // 4) Enumerate configurations ------------------
449  DoFSpaceIO::SequentialDirectoryOutput dof_space_output{output_dir};
450  MakeEnumerator make_enumerator_f{options, params, axes_params,
451  sym_axes_option, dof_space_output};
452 
453  if (print_dof_space_and_quit_option) {
454  log.begin("Print DoF Space and Quit Option");
455  std::optional<SymRepTools_v2::VectorSpaceSymReport> sym_report;
456  Index i = 0;
457  for (auto const &pair : named_initial_states) {
458  std::string const &name = pair.first;
459  ConfigEnumInput const &initial_state = pair.second;
460  make_enumerator_f.make_and_write_dof_space(i, name, initial_state,
461  sym_report);
462  i++;
463  }
464  log.end_section();
465  return;
466  }
467 
468  log << std::endl;
469  log.begin("ConfigEnumStrain enumeration");
471  primclex, options, make_enumerator_f, named_initial_states.begin(),
472  named_initial_states.end(), make_enumerator_f.make_formatter());
473  log.end_section();
474 }
475 
476 } // namespace CASM
static const std::string enumerator_name
Eigen::VectorXd normal_coordinate() const
std::string name() const override
Enumeration method name (i.e. "ConfigEnumAllOccupations")
void run(PrimClex &primclex, jsonParser const &json_options, jsonParser const &cli_options_as_json) const override
The strain DoF value of the configuration.
const Supercell & supercell() const
Get the Supercell for this Configuration.
Extract data from objects of 'DataObject' class.
void push_back(const BaseDatumFormatter< DataObject > &new_formatter, const std::string &args)
Eigen::MatrixXd const & basis() const
Definition: DoFSpace.cc:227
Index subspace_dim() const
The DoF subspace dimension (equal to number of columns in basis).
Definition: DoFSpace.cc:233
void write_symmetry(Index state_index, std::string const &identifier, ConfigEnumInput const &config_enum_input, SymGroup const &lattice_point_group, SymGroup const &factor_group, SymGroup const &crystal_point_group) override
void write_dof_space(Index state_index, DoFSpace const &dof_space, std::string const &identifier, ConfigEnumInput const &config_enum_input, std::optional< SymRepTools_v2::VectorSpaceSymReport > const &sym_report) override
Write dof space analysis.
Implementation that outputs to <output_dir>/dof_space/state.<index>
A DatumFormatter that returns a value of specified type, via functions that may be specified at runti...
RequiredType optional_else(fs::path option, const RequiredType &_default, Args &&... args)
std::shared_ptr< InputParser< RequiredType > > parse_as(Args &&... args)
std::unique_ptr< T > value
Definition: InputParser.hh:234
Definition: Log.hh:48
void end_section()
End a section.
Definition: Log.hh:192
void set_verbosity(int _verbosity)
Definition: Log.cc:57
void custom(const std::string &what)
Definition: Log.hh:139
Log & subsection()
Create a subsection.
Definition: Log.hh:186
Log & indent()
Definition: Log.hh:289
void begin(const std::string &what)
Definition: Log.hh:114
PrimClex is the top-level data structure for a CASM project.
Definition: PrimClex.hh:55
Represents a supercell of the primitive parent crystal structure.
Definition: Supercell.hh:51
const Structure & prim() const
Definition: Supercell.cc:113
const SupercellSymInfo & sym_info() const
Definition: Supercell.cc:265
Eigen::Matrix3l transformation_matrix_to_super() const
long-int transformation from primitive lattice vectors to supercell lattice vectors supercell_lattice...
bool contains(const std::string &name) const
Return true if JSON object contains 'name'.
Definition: jsonParser.cc:601
std::set< Index > const & sites() const
Configuration const & configuration() const
std::vector< PermuteIterator > make_invariant_subgroup(ConfigEnumInput const &config_enum_input)
DoFKey get_strain_dof_key(BasicStructure const &structure)
std::string get_strain_metric(DoFKey strain_dof_key)
GenericDatumFormatter< Index, ConfigEnumDataType > subwedge_index()
Eigen::VectorXd get_normal_coordinate(EnumeratorType const &enumerator)
ConfigEnumData< ConfigEnumStrain, ConfigEnumInput > ConfigEnumDataType
SubWedge make_dummy_subwedge(Eigen::MatrixXd const &axes)
Makes a "dummy" SubWedge from a single "dummy" IrrepWedge with given axes.
Definition: IrrepWedge.cc:101
Main CASM namespace.
Definition: APICommand.hh:8
std::string standard_ConfigEnumInput_help()
std::string description(const SymOp &op, const xtal::Lattice &lat, SymInfoOptions opt=SymInfoOptions())
Print SymInfo to string.
void print_initial_states(Log &log, NamedInitialStatesType const &named_initial_states)
Log & log()
Definition: Log.hh:424
DoFSpace make_dof_space(DoFKey dof_key, ConfigEnumInput const &input_state, std::optional< Eigen::MatrixXd > const &basis=std::nullopt)
Definition: DoFSpace.cc:487
Index get_dof_space_dimension(DoFKey dof_key, xtal::BasicStructure const &prim, std::optional< Eigen::Matrix3l > const &transformation_matrix_to_super=std::nullopt, std::optional< std::set< Index >> const &sites=std::nullopt)
Return dimension of DoFSpace.
Definition: DoFSpace.cc:359
ParentInputParser make_enum_parent_parser(Log &log, jsonParser const &json_options, jsonParser const &cli_options_as_json)
Combine –input / –settings JSON with CLI options.
GenericDatumFormatter< std::string, DataObject > name()
void enumerate_configurations(PrimClex const &primclex, ConfigEnumOptions const &options, MakeEnumeratorFunction make_enumerator_f, InputNameValuePairIterator name_value_pairs_begin, InputNameValuePairIterator name_value_pairs_end, DataFormatter< ConfigEnumDataType > const &formatter)
Enumerate configurations.
void report_and_throw_if_invalid(KwargsParser const &parser, Log &log, ErrorType error)
void print_options(Log &log, ConfigEnumOptions const &options)
Definition: stream_io.cc:6
INDEX_TYPE Index
For long integer indexing:
Definition: definitions.hh:39
void parse(InputParser< ConfigEnumOptions > &parser, std::string method_name, PrimClex const &primclex, DataFormatterDictionary< Configuration > const &dict)
Eigen::VectorXd VectorXd
DoFSpace make_symmetry_adapted_dof_space_v2(DoFSpace const &dof_space, SupercellSymInfo const &sym_info, std::vector< PermuteIterator > const &group, bool calc_wedges, std::optional< SymRepTools_v2::VectorSpaceSymReport > &symmetry_report)
Make DoFSpace with symmetry adapated basis.
Definition: DoFSpace.cc:635
PrimClex * primclex
Definition: settings.cc:135
Data structure used for continuous DoF enumeration IO.
Definition: DoFSpace.hh:56
Eigen::MatrixXd axes
Definition: DoFSpace.hh:59
Eigen::VectorXd inc_vector
Definition: DoFSpace.hh:65
Eigen::VectorXd min_vector
Definition: DoFSpace.hh:63
Eigen::VectorXd max_vector
Definition: DoFSpace.hh:64
Options for the enumerate_configurations function.
int verbosity
Printing verbosity level.
std::function< bool(Configuration const &)> filter
If filter(configuration)==true, keep configuration, else skip.
DoFSpaceIO::SequentialDirectoryOutput & dof_space_output
DoFSpace make_and_write_dof_space(Index index, std::string name, ConfigEnumInput const &initial_state, std::optional< SymRepTools_v2::VectorSpaceSymReport > &sym_report) const
ConfigEnumStrain operator()(Index index, std::string name, ConfigEnumInput const &initial_state) const
MakeEnumerator(ConfigEnumOptions const &_options, ConfigEnumStrainParams const &_params, AxesCounterParams const &_axes_params, bool _make_symmetry_adapted_axes, DoFSpaceIO::SequentialDirectoryOutput &_dof_space_output)
DataFormatter< ConfigEnumDataType > make_formatter() const
std::vector< SymRepTools_v2::SubWedge > wedges
DoFKey dof
Type of strain.
jsonParser const & self
Definition: InputParser.hh:81
std::set< std::string > error
Definition: Validator.hh:11