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
LowMachEquationSystem.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 LowMachEquationSystem_h
10 #define LowMachEquationSystem_h
11 
12 #include <EquationSystem.h>
13 #include <FieldTypeDef.h>
14 #include <NaluParsing.h>
15 
16 namespace stk{
17 struct topology;
18 }
19 
20 namespace sierra{
21 namespace nalu{
22 
23 class AlgorithmDriver;
24 class Realm;
25 class AssembleNodalGradAlgorithmDriver;
26 class AssembleNodalGradUAlgorithmDriver;
27 class MomentumEquationSystem;
28 class ContinuityEquationSystem;
29 class ComputeMdotAlgorithmDriver;
30 class LinearSystem;
31 class ProjectedNodalGradientEquationSystem;
32 class SurfaceForceAndMomentAlgorithmDriver;
33 
35 
36 public:
37 
39  EquationSystems& equationSystems,
40  const bool elementContinuityEqs);
41  virtual ~LowMachEquationSystem();
42 
43  virtual void initialize();
44 
45  virtual void register_nodal_fields(
46  stk::mesh::Part *part);
47 
48  virtual void register_edge_fields(
49  stk::mesh::Part *part);
50 
51  virtual void register_element_fields(
52  stk::mesh::Part *part,
53  const stk::topology &theTopo);
54 
55  virtual void register_interior_algorithm(
56  stk::mesh::Part *part);
57 
58  virtual void register_open_bc(
59  stk::mesh::Part *part,
60  const stk::topology &theTopo,
61  const OpenBoundaryConditionData &openBCData);
62 
63  virtual void register_surface_pp_algorithm(
64  const PostProcessingData &theData,
65  stk::mesh::PartVector &partVector);
66 
67  virtual void register_initial_condition_fcn(
68  stk::mesh::Part *part,
69  const std::map<std::string, std::string> &theNames,
70  const std::map<std::string, std::vector<double> > &theParams);
71 
72  virtual void pre_iter_work();
73  virtual void solve_and_update();
74  virtual void post_adapt_work();
75 
76  virtual void predict_state();
77 
78  void project_nodal_velocity();
79 
80  void post_converged_work();
81 
82  const bool elementContinuityEqs_; /* allow for mixed element/edge for continuity */
85 
90 
92 
93  bool isInit_;
94 
95 };
96 
98 
99 public:
100 
102  EquationSystems& equationSystems);
103  virtual ~MomentumEquationSystem();
104 
105  virtual void initial_work();
106 
107  virtual void register_nodal_fields(
108  stk::mesh::Part *part);
109 
110  virtual void register_edge_fields(
111  stk::mesh::Part *part);
112 
113  virtual void register_element_fields(
114  stk::mesh::Part *part,
115  const stk::topology &theTopo);
116 
117  virtual void register_interior_algorithm(
118  stk::mesh::Part *part);
119 
120  virtual void register_inflow_bc(
121  stk::mesh::Part *part,
122  const stk::topology &theTopo,
123  const InflowBoundaryConditionData &inflowBCData);
124 
125  virtual void register_open_bc(
126  stk::mesh::Part *part,
127  const stk::topology &theTopo,
128  const OpenBoundaryConditionData &openBCData);
129 
130  virtual void register_wall_bc(
131  stk::mesh::Part *part,
132  const stk::topology &theTopo,
133  const WallBoundaryConditionData &wallBCData);
134 
135  virtual void register_symmetry_bc(
136  stk::mesh::Part *part,
137  const stk::topology &theTopo,
138  const SymmetryBoundaryConditionData &symmetryBCData);
139 
140  virtual void register_non_conformal_bc(
141  stk::mesh::Part *part,
142  const stk::topology &theTopo);
143 
144  virtual void register_overset_bc();
145 
146  virtual void initialize();
147  virtual void reinitialize_linear_system();
148 
149  virtual void predict_state();
150 
151  void compute_wall_function_params();
152 
153  virtual void manage_projected_nodal_gradient(
154  EquationSystems& eqSystems);
155  virtual void compute_projected_nodal_gradient();
156 
157  const bool managePNG_;
158 
161 
164 
168 
174 
176 
178 
179  // saved of mesh parts that are not to be projected
180  std::vector<stk::mesh::Part *> notProjectedPart_;
181 };
182 
184 
185 public:
186 
188  EquationSystems& equationSystems,
189  const bool elementContinuityEqs);
190  virtual ~ContinuityEquationSystem();
191 
192  virtual void register_nodal_fields(
193  stk::mesh::Part *part);
194 
195  virtual void register_edge_fields(
196  stk::mesh::Part *part);
197 
198  virtual void register_element_fields(
199  stk::mesh::Part *part,
200  const stk::topology &theTopo);
201 
202  virtual void register_interior_algorithm(
203  stk::mesh::Part *part);
204 
205  virtual void register_inflow_bc(
206  stk::mesh::Part *part,
207  const stk::topology &theTopo,
208  const InflowBoundaryConditionData &inflowBCData);
209 
210  virtual void register_open_bc(
211  stk::mesh::Part *part,
212  const stk::topology &theTopo,
213  const OpenBoundaryConditionData &openBCData);
214 
215  virtual void register_wall_bc(
216  stk::mesh::Part *part,
217  const stk::topology &theTopo,
218  const WallBoundaryConditionData &wallBCData);
219 
220  virtual void register_symmetry_bc(
221  stk::mesh::Part *part,
222  const stk::topology &theTopo,
223  const SymmetryBoundaryConditionData &symmetryBCData);
224 
225  virtual void register_non_conformal_bc(
226  stk::mesh::Part *part,
227  const stk::topology &theTopo);
228 
229  virtual void register_overset_bc();
230 
231  virtual void initialize();
232  virtual void reinitialize_linear_system();
233 
234  virtual void register_initial_condition_fcn(
235  stk::mesh::Part *part,
236  const std::map<std::string, std::string> &theNames,
237  const std::map<std::string, std::vector<double> > &theParams);
238 
239  virtual void manage_projected_nodal_gradient(
240  EquationSystems& eqSystems);
241  virtual void compute_projected_nodal_gradient();
242 
244  const bool managePNG_;
249 
251 
255 };
256 
257 } // namespace nalu
258 } // namespace Sierra
259 
260 #endif
VectorFieldType * coordinates_
Definition: LowMachEquationSystem.h:248
ScalarFieldType * massFlowRate_
Definition: LowMachEquationSystem.h:247
std::vector< Part * > PartVector
Definition: Algorithm.h:16
VectorFieldType * coordinates_
Definition: LowMachEquationSystem.h:162
ContinuityEquationSystem * continuityEqSys_
Definition: LowMachEquationSystem.h:84
Definition: ABLForcingAlgorithm.C:26
Definition: LowMachEquationSystem.h:97
void initialize(int N, aligned_vector &x, aligned_vector &y)
Definition: UnitTestSimdBasic.C:37
Definition: ComputeMdotAlgorithmDriver.h:21
Definition: LowMachEquationSystem.h:34
ScalarFieldType * density_
Definition: LowMachEquationSystem.h:86
AssembleNodalGradUAlgorithmDriver * assembleNodalGradAlgDriver_
Definition: LowMachEquationSystem.h:169
stk::mesh::Field< double, stk::mesh::SimpleArrayTag > GenericFieldType
Definition: FieldTypeDef.h:27
VectorFieldType * velocity_
Definition: LowMachEquationSystem.h:159
Definition: AssembleNodalGradAlgorithmDriver.h:20
ScalarFieldType * visc_
Definition: LowMachEquationSystem.h:165
AlgorithmDriver * cflReyAlgDriver_
Definition: LowMachEquationSystem.h:172
const bool managePNG_
Definition: LowMachEquationSystem.h:157
AlgorithmDriver * wallFunctionParamsAlgDriver_
Definition: LowMachEquationSystem.h:173
AssembleNodalGradAlgorithmDriver * assembleNodalGradAlgDriver_
Definition: LowMachEquationSystem.h:252
double firstPNGResidual_
Definition: LowMachEquationSystem.h:177
Definition: Algorithm.h:14
stk::mesh::Field< double, stk::mesh::Cartesian > VectorFieldType
Definition: FieldTypeDef.h:24
A collection of Equations to be solved on a Realm.
Definition: EquationSystems.h:56
Definition: NaluParsing.h:325
Definition: ProjectedNodalGradientEquationSystem.h:32
const bool elementContinuityEqs_
Definition: LowMachEquationSystem.h:243
Definition: NaluParsing.h:305
VectorFieldType * edgeAreaVec_
Definition: LowMachEquationSystem.h:89
Base class representation of a PDE.
Definition: EquationSystem.h:46
const bool elementContinuityEqs_
Definition: LowMachEquationSystem.h:82
ComputeMdotAlgorithmDriver * computeMdotAlgDriver_
Definition: LowMachEquationSystem.h:253
stk::mesh::Field< double > ScalarFieldType
Definition: FieldTypeDef.h:19
ScalarFieldType * viscosity_
Definition: LowMachEquationSystem.h:87
Definition: SurfaceForceAndMomentAlgorithmDriver.h:21
MomentumEquationSystem * momentumEqSys_
Definition: LowMachEquationSystem.h:83
Definition: AssembleNodalGradUAlgorithmDriver.h:19
ProjectedNodalGradientEquationSystem * projectedNodalGradEqs_
Definition: LowMachEquationSystem.h:175
ScalarFieldType * tvisc_
Definition: LowMachEquationSystem.h:166
ProjectedNodalGradientEquationSystem * projectedNodalGradEqs_
Definition: LowMachEquationSystem.h:254
bool isInit_
Definition: LowMachEquationSystem.h:93
Definition: NaluParsing.h:310
AlgorithmDriver * diffFluxCoeffAlgDriver_
Definition: LowMachEquationSystem.h:170
Definition: LowMachEquationSystem.h:183
Definition: NaluParsing.h:315
Definition: AlgorithmDriver.h:22
ScalarFieldType * dualNodalVolume_
Definition: LowMachEquationSystem.h:88
AlgorithmDriver * tviscAlgDriver_
Definition: LowMachEquationSystem.h:171
Definition: PostProcessingData.h:18
const bool managePNG_
Definition: LowMachEquationSystem.h:244
std::vector< stk::mesh::Part * > notProjectedPart_
Definition: LowMachEquationSystem.h:180
GenericFieldType * dudx_
Definition: LowMachEquationSystem.h:160
ScalarFieldType * pTmp_
Definition: LowMachEquationSystem.h:250
ScalarFieldType * evisc_
Definition: LowMachEquationSystem.h:167
SurfaceForceAndMomentAlgorithmDriver * surfaceForceAndMomentAlgDriver_
Definition: LowMachEquationSystem.h:91
ScalarFieldType * pressure_
Definition: LowMachEquationSystem.h:245
VectorFieldType * dpdx_
Definition: LowMachEquationSystem.h:246
VectorFieldType * uTmp_
Definition: LowMachEquationSystem.h:163