Nalu
Nalu: a generalized unstructured massively parallel low Mach flow code designed to support a variety of energy applications of interest (most notably Wind ECP) built on the Sierra Toolkit and Trilinos solver Tpetra/Epetra stack. The open source BSD, clause 3 license model has been chosen for the code base. See LICENSE for more information. http://NaluCFD.org
EquationSystem.h
Go to the documentation of this file.
1 /*------------------------------------------------------------------------*/
2 /* Copyright 2014 Sandia Corporation. */
3 /* This software is released under the license detailed */
4 /* in the file, LICENSE, which is located in the top-level Nalu */
5 /* directory structure */
6 /*------------------------------------------------------------------------*/
7 
8 
9 #ifndef EquationSystem_h
10 #define EquationSystem_h
11 
12 #include<NaluParsing.h>
13 
14 namespace stk{
15 struct topology;
16 namespace mesh{
17 class FieldBase;
18 class Part;
19 typedef std::vector<Part*> PartVector;
20 }
21 }
22 
23 namespace sierra{
24 namespace nalu{
25 
26 class Algorithm;
27 class AlgorithmDriver;
28 class AuxFunctionAlgorithm;
29 class PecletFunction;
30 class Realm;
31 class SolverAlgorithmDriver;
32 class InitialCondition;
33 class EquationSystems;
34 class LinearSystem;
35 class PostProcessingData;
36 
47 {
48 public:
49 
51  EquationSystems& eqSystems,
52  const std::string name = "no_name",
53  const std::string eqnTypeName = "no_eqn_type_name");
54  virtual ~EquationSystem();
55 
56  void set_nodal_gradient(
57  const std::string &dofName);
58 
59  virtual void initial_work();
60 
61  virtual void populate_derived_quantities() {}
62 
63  // base class with desired default no-op
64  virtual void register_nodal_fields(
65  stk::mesh::Part *part) {}
66 
67  virtual void register_edge_fields(
68  stk::mesh::Part *part) {}
69 
71  stk::mesh::Part *part,
72  const stk::topology &theTopo) {}
73 
74  // since Equation systems hold other equations systems
75  // defaults are provided for all methods below
76 
77  virtual void initialize() {}
78 
98  virtual void solve_and_update() {}
99 
118  virtual void pre_iter_work();
119 
138  virtual void post_iter_work();
139 
146  virtual void post_iter_work_dep() {}
147  virtual void assemble_and_solve(
148  stk::mesh::FieldBase *deltaSolution);
149  virtual void predict_state() {}
151  stk::mesh::Part *part) {}
152  virtual void provide_output() {}
153  virtual void pre_timestep_work();
154  virtual void reinitialize_linear_system() {}
155  virtual void post_adapt_work() {}
156  virtual void dump_eq_time();
157  virtual double provide_scaled_norm();
158  virtual double provide_norm();
159  virtual double provide_norm_increment();
160  virtual bool system_is_converged();
161 
162  virtual void register_wall_bc(
163  stk::mesh::Part *part,
164  const stk::topology &theTopo,
165  const WallBoundaryConditionData &wallBCData) {}
166 
167  virtual void register_inflow_bc(
168  stk::mesh::Part *part,
169  const stk::topology &theTopo,
170  const InflowBoundaryConditionData &inflowBCData) {}
171 
172  virtual void register_open_bc(
173  stk::mesh::Part *part,
174  const stk::topology &theTopo,
175  const OpenBoundaryConditionData &openBCData) {}
176 
177  virtual void register_symmetry_bc(
178  stk::mesh::Part *part,
179  const stk::topology &theTopo,
180  const SymmetryBoundaryConditionData &symmetryBCData) {}
181 
182  virtual void register_periodic_bc(
183  stk::mesh::Part *partMaster,
184  stk::mesh::Part *partSlave,
185  const stk::topology &theTopoMaster,
186  const stk::topology &theTopoSlave,
187  const PeriodicBoundaryConditionData &periodicBCData) {}
188 
190  stk::mesh::Part *part,
191  const stk::topology &theTopo) {}
192 
193  virtual void register_overset_bc() {}
194 
195  virtual void create_constraint_algorithm(
196  stk::mesh::FieldBase *theField);
197 
199  const PostProcessingData &theData,
200  stk::mesh::PartVector &partVector) {}
201 
203  stk::mesh::Part *part,
204  const std::map<std::string, std::string> &theNames,
205  const std::map<std::string, std::vector<double> > &theParams) {}
206 
207  // rip through the propertyAlg_
208  virtual void evaluate_properties();
209 
210  // provide helper function for Peclet function
211  PecletFunction * create_peclet_function( const std::string dofName);
212 
213  virtual void load(const YAML::Node & node)
214  {
215  get_required(node, "name", userSuppliedName_);
216  get_required(node, "max_iterations", maxIterations_);
217  get_required(node, "convergence_tolerance", convergenceTolerance_);
218  }
219 
220  Simulation *root();
221  EquationSystems *parent();
222 
223  void report_invalid_supp_alg_names();
224  void report_built_supp_alg_names();
225  bool supp_alg_is_requested(std::string name);
226  bool supp_alg_is_requested(std::vector<std::string>);
227 
228  bool nodal_src_is_requested();
229 
232  std::string name_;
233  std::string userSuppliedName_;
234  const std::string eqnTypeName_;
237 
238  // driver that holds all solver algorithms
240 
243  double timerSolve_;
244  double timerMisc_;
245  double timerInit_;
254 
255  void update_iteration_statistics(
256  const int & iters);
257 
258  bool bc_data_specified(
259  const UserData&, std::string &name);
260 
262  get_bc_data_type(
263  const UserData&, std::string &name);
264 
265  std::string
266  get_bc_function_name(
267  const UserData&, std::string &name);
268 
269  std::vector<double>
270  get_bc_function_params(
271  const UserData&, std::string &name);
272 
273  std::vector<std::string>
274  get_bc_function_string_params(
275  const UserData&, std::string &name);
276 
277  virtual void post_converged_work() {}
278 
279  std::vector<AuxFunctionAlgorithm *> bcDataAlg_;
280  std::vector<Algorithm *> bcDataMapAlg_;
281  std::vector<Algorithm *> copyStateAlg_;
282 
284 
286 
287  // vector of property algorithms
288  std::vector<Algorithm *> propertyAlg_;
289 
291  std::vector<AlgorithmDriver *> preIterAlgDriver_;
292 
294  std::vector<AlgorithmDriver*> postIterAlgDriver_;
295 
296  // owner equation system
297  /*EquationSystem *ownerEqs_;*/
298 
299 };
300 
301 } // namespace nalu
302 } // namespace Sierra
303 
304 #endif
Definition: SolverAlgorithmDriver.h:23
std::vector< Part * > PartVector
Definition: Algorithm.h:16
bool firstTimeStepSolve_
Definition: EquationSystem.h:252
Definition: Simulation.h:28
double timerPrecond_
Definition: EquationSystem.h:246
virtual void register_element_fields(stk::mesh::Part *part, const stk::topology &theTopo)
Definition: EquationSystem.h:70
double timerInit_
Definition: EquationSystem.h:245
Definition: ABLForcingAlgorithm.C:26
virtual void initialize()
Definition: EquationSystem.h:77
virtual void register_periodic_bc(stk::mesh::Part *partMaster, stk::mesh::Part *partSlave, const stk::topology &theTopoMaster, const stk::topology &theTopoSlave, const PeriodicBoundaryConditionData &periodicBCData)
Definition: EquationSystem.h:182
double avgLinearIterations_
Definition: EquationSystem.h:247
virtual void register_overset_bc()
Definition: EquationSystem.h:193
bool edgeNodalGradient_
Definition: EquationSystem.h:253
size_t num_graph_entries_
Definition: EquationSystem.h:285
UserDataType
Definition: Enums.h:94
virtual void provide_output()
Definition: EquationSystem.h:152
virtual void predict_state()
Definition: EquationSystem.h:149
std::vector< Algorithm * > bcDataMapAlg_
Definition: EquationSystem.h:280
EquationSystems & equationSystems_
Definition: EquationSystem.h:230
bool reportLinearIterations_
Definition: EquationSystem.h:251
double convergenceTolerance_
Definition: EquationSystem.h:236
double timerMisc_
Definition: EquationSystem.h:244
Definition: Algorithm.h:14
virtual void register_surface_pp_algorithm(const PostProcessingData &theData, stk::mesh::PartVector &partVector)
Definition: EquationSystem.h:198
virtual void register_inflow_bc(stk::mesh::Part *part, const stk::topology &theTopo, const InflowBoundaryConditionData &inflowBCData)
Definition: EquationSystem.h:167
LinearSystem * linsys_
Definition: EquationSystem.h:283
virtual void populate_derived_quantities()
Definition: EquationSystem.h:61
int maxIterations_
Definition: EquationSystem.h:235
A collection of Equations to be solved on a Realm.
Definition: EquationSystems.h:56
double timerSolve_
Definition: EquationSystem.h:243
Definition: NaluParsing.h:325
std::vector< Algorithm * > propertyAlg_
Definition: EquationSystem.h:288
virtual void register_wall_bc(stk::mesh::Part *part, const stk::topology &theTopo, const WallBoundaryConditionData &wallBCData)
Definition: EquationSystem.h:162
std::vector< AlgorithmDriver * > postIterAlgDriver_
List of tasks to be performed after each solve_and_update of this equation system.
Definition: EquationSystem.h:294
Definition: NaluParsing.h:305
SolverAlgorithmDriver * solverAlgDriver_
Definition: EquationSystem.h:239
void get_required(const YAML::Node &node, const std::string &key, T &result)
this version requires the
Definition: NaluParsing.h:396
Base class representation of a PDE.
Definition: EquationSystem.h:46
double timerAssemble_
Definition: EquationSystem.h:241
virtual void solve_and_update()
Assemble the LHS and RHS and perform linear solve for prescribed number of iterations.
Definition: EquationSystem.h:98
virtual void register_open_bc(stk::mesh::Part *part, const stk::topology &theTopo, const OpenBoundaryConditionData &openBCData)
Definition: EquationSystem.h:172
virtual void register_symmetry_bc(stk::mesh::Part *part, const stk::topology &theTopo, const SymmetryBoundaryConditionData &symmetryBCData)
Definition: EquationSystem.h:177
std::vector< AuxFunctionAlgorithm * > bcDataAlg_
Definition: EquationSystem.h:279
virtual void register_initial_condition_fcn(stk::mesh::Part *part, const std::map< std::string, std::string > &theNames, const std::map< std::string, std::vector< double > > &theParams)
Definition: EquationSystem.h:202
Realm & realm_
Definition: EquationSystem.h:231
double timerLoadComplete_
Definition: EquationSystem.h:242
virtual void post_adapt_work()
Definition: EquationSystem.h:155
std::vector< Algorithm * > copyStateAlg_
Definition: EquationSystem.h:281
Definition: NaluParsing.h:330
const std::string eqnTypeName_
Definition: EquationSystem.h:234
virtual void register_interior_algorithm(stk::mesh::Part *part)
Definition: EquationSystem.h:150
Definition: NaluParsing.h:310
std::string userSuppliedName_
Definition: EquationSystem.h:233
Definition: NaluParsing.h:315
int nonLinearIterationCount_
Definition: EquationSystem.h:250
virtual void reinitialize_linear_system()
Definition: EquationSystem.h:154
virtual void register_nodal_fields(stk::mesh::Part *part)
Definition: EquationSystem.h:64
virtual void load(const YAML::Node &node)
Definition: EquationSystem.h:213
double minLinearIterations_
Definition: EquationSystem.h:249
Definition: PostProcessingData.h:18
Tpetra::Map< LocalOrdinal, GlobalOrdinal >::node_type Node
Definition: LinearSolver.h:32
virtual void register_edge_fields(stk::mesh::Part *part)
Definition: EquationSystem.h:67
virtual void post_converged_work()
Definition: EquationSystem.h:277
Definition: NaluParsing.h:136
Definition: Realm.h:82
Definition: PecletFunction.h:15
std::vector< AlgorithmDriver * > preIterAlgDriver_
List of tasks to be performed before each solve_and_update of this equation system.
Definition: EquationSystem.h:291
virtual void register_non_conformal_bc(stk::mesh::Part *part, const stk::topology &theTopo)
Definition: EquationSystem.h:189
virtual void post_iter_work_dep()
Deprecated post iteration work logic.
Definition: EquationSystem.h:146
Definition: LinearSystem.h:40
double maxLinearIterations_
Definition: EquationSystem.h:248
std::string name_
Definition: EquationSystem.h:232