/home/runner/work/amr-wind/amr-wind/amr-wind/incflo.H Source File

AMR-Wind API: /home/runner/work/amr-wind/amr-wind/amr-wind/incflo.H Source File
AMR-Wind API v0.1.0
CFD solver for wind plant simulations
Loading...
Searching...
No Matches
incflo.H
Go to the documentation of this file.
1#ifndef INCFLO_H_
2#define INCFLO_H_
3
4#include <AMReX_AmrCore.H>
5#include <AMReX_MultiFabUtil.H>
6#include <AMReX_ParmParse.H>
7#include <AMReX_iMultiFab.H>
8#include <hydro_NodalProjector.H>
9
11#include "amr-wind/CFDSim.H"
15
17class MultiBlockContainer;
18namespace amr_wind {
19namespace pde {
20class PDEBase;
21}
24} // namespace amr_wind
25
46
51class incflo : public amrex::AmrCore
52{
53public:
54 incflo();
55 ~incflo() override;
56
57 // Initialize multilevel AMR data
58 void InitData();
59
60 // Evolve solution to final time through repeated calls to Advance()
61 void Evolve();
62
63 // Tag cells for refinement
64 void
65 ErrorEst(int lev, amrex::TagBoxArray& tags, amrex::Real time, int ngrow)
66 override;
67
68 // Make a new level from scratch using provided BoxArray and
69 // DistributionMapping Only used during initialization
71 int lev,
72 amrex::Real time,
73 const amrex::BoxArray& new_grids,
74 const amrex::DistributionMapping& new_dmap) override;
75
76 // Make a new level using provided BoxArray and DistributionMapping,
77 // and fill with interpolated coarse level data
79 int lev,
80 amrex::Real time,
81 const amrex::BoxArray& ba,
82 const amrex::DistributionMapping& dm) override;
83
84 // Remake an existing level using provided BoxArray and DistributionMapping,
85 // and fill with existing fine and coarse data
86 void RemakeLevel(
87 int lev,
88 amrex::Real time,
89 const amrex::BoxArray& ba,
90 const amrex::DistributionMapping& dm) override;
91
92 // Delete level data
93 void ClearLevel(int lev) override;
94
95 void init_mesh();
98 bool regrid_and_update();
99 void pre_advance_stage1();
100 void pre_advance_stage2();
101 void prepare_time_step();
102 void do_advance(const int fixed_point_iteration);
103 void advance(const int fixed_point_iteration);
104 void prescribe_advance();
105 void post_advance_work();
106
108 const amr_wind::SimTime& time() const { return m_time; }
110 const amr_wind::FieldRepo& repo() const { return m_repo; }
111
112 amr_wind::pde::PDEBase& icns() { return m_sim.pde_manager().icns(); }
114 {
115 return m_sim.pde_manager().icns();
116 }
118 {
119 return m_sim.pde_manager().scalar_eqns();
120 }
122 {
123 return m_sim.pde_manager().scalar_eqns();
124 }
125
126 amr_wind::Field& velocity() const { return m_repo.get_field("velocity"); }
127 amr_wind::Field& density() const { return m_repo.get_field("density"); }
129 {
130 return m_repo.get_field("temperature");
131 }
132 amr_wind::Field& pressure() const { return m_repo.get_field("p"); }
133 amr_wind::Field& grad_p() const { return m_repo.get_field("gp"); }
134
135 void compute_dt();
137 void advance_time() { m_time.advance_time(); }
138
139 void ApplyPredictor(
140 const bool incremental_projection = false,
141 const int fixed_point_iteration = 0);
142 void ApplyCorrector();
143 void ApplyPrescribeStep();
144
145 void ApplyProjection(
146 amrex::Vector<amrex::MultiFab const*> density,
147 amrex::Real time,
148 amrex::Real scaling_factor,
149 bool incremental);
150
153
154 void ReadCheckpointFile();
155
156 void SetMultiBlockPointer(MultiBlockContainer* mbc) { m_sim.set_mbc(mbc); }
158 {
159 m_sim.set_read_erf(std::move(fcn));
160 }
161
162private:
163 //
164 // member variables
165 //
166
171
172 std::unique_ptr<amr_wind::RefineCriteriaManager> m_mesh_refiner;
173
174 // Be verbose?
175 int m_verbose = 0;
176
177 // Initial projection / iterations
178 bool m_do_initial_proj = true;
180
181 bool m_use_godunov = true;
182
183 // Prescribe advection velocity
184 bool m_prescribe_vel = false;
185
186 // Perform a dry run (0 steps, output plotfile)
187 bool m_dry_run = false;
188
189 // Fixed point iterations every timestep
191
193 amrex::Long m_cell_count{-1};
194
196
199
200 //
201 // end of member variables
202 //
203
204 amrex::FabFactory<amrex::FArrayBox> const& Factory(int lev) const noexcept
205 {
206 return m_repo.factory(lev);
207 }
208
209 bool need_divtau() const
210 {
212 }
213
214 //
215 // setup
216 //
218
219 void CheckAndSetUpDryRun();
220 void ReadParameters();
221 void InitialProjection();
222 void InitialIterations();
223
225 //
226 // utilities
227 //
229 void PrintMaxValues(const std::string& header);
230 void PrintMaxVelLocations(const std::string& header);
231 void PrintMaxVel(int lev) const;
232 void PrintMaxGp(int lev) const;
233 void CheckForNans(int lev) const;
234};
235
236#endif
std::function< void( const amrex::Real time, amrex::Vector< amrex::Real > &, amr_wind::InletData &, const amrex::Vector< amr_wind::Field * > &, MultiBlockContainer *)> ReadERFFunction
Definition ABLReadERFFunction.H:10
Definition CFDSim.H:54
amrex::Vector< TypePtr > TypeVector
Definition CollMgr.H:25
Definition Field.H:116
Definition FieldRepo.H:86
Definition OversetOps.H:10
Definition RefinementCriteria.H:57
Definition RefinementCriteria.H:33
Definition SimTime.H:30
Definition PDEBase.H:51
void Evolve()
Definition incflo.cpp:282
const amr_wind::pde::PDEMgr::TypeVector & scalar_eqns() const
Definition incflo.H:121
void ApplyPredictor(const bool incremental_projection=false, const int fixed_point_iteration=0)
Definition incflo_advance.cpp:179
const amr_wind::SimTime & time() const
Definition incflo.H:108
amr_wind::Field & density() const
Definition incflo.H:127
void ApplyPrescribeStep()
Definition incflo_advance.cpp:653
void pre_advance_stage1()
Definition incflo_advance.cpp:14
void ClearLevel(int lev) override
Definition incflo_regrid.cpp:38
incflo()
Definition incflo.cpp:16
void ApplyProjection(amrex::Vector< amrex::MultiFab const * > density, amrex::Real time, amrex::Real scaling_factor, bool incremental)
Definition incflo_apply_nodal_projection.cpp:152
amr_wind::Field & temperature() const
Definition incflo.H:128
std::unique_ptr< amr_wind::RefineCriteriaManager > m_mesh_refiner
Definition incflo.H:172
bool m_dry_run
Definition incflo.H:187
bool m_prescribe_vel
Definition incflo.H:184
amr_wind::Field & velocity() const
Definition incflo.H:126
void prepare_for_time_integration()
Definition incflo.cpp:136
void advance(const int fixed_point_iteration)
Definition incflo_advance.cpp:56
void post_advance_work()
Definition incflo.cpp:250
void InitialIterations()
Definition init.cpp:102
void init_amr_wind_modules()
Definition incflo.cpp:99
void ReadParameters()
Definition init.cpp:47
void RemakeLevel(int lev, amrex::Real time, const amrex::BoxArray &ba, const amrex::DistributionMapping &dm) override
Definition incflo_regrid.cpp:24
amr_wind::CFDSim m_sim
Definition incflo.H:167
void do_advance(const int fixed_point_iteration)
Definition incflo.cpp:348
int m_initial_iterations
Definition incflo.H:179
void CheckAndSetUpDryRun()
Definition init.cpp:13
int m_fixed_point_iterations
Definition incflo.H:190
void ReadCheckpointFile()
Definition io.cpp:15
bool need_divtau() const
Definition incflo.H:209
void PrintMaxGp(int lev) const
Definition diagnostics.cpp:724
void PrintMaxVelLocations(const std::string &header)
Definition diagnostics.cpp:705
amr_wind::OversetOps m_ovst_ops
Definition incflo.H:170
amr_wind::Field & grad_p() const
Definition incflo.H:133
DiffusionType m_diff_type
Definition incflo.H:195
bool m_use_godunov
Definition incflo.H:181
amr_wind::pde::PDEBase & icns()
Definition incflo.H:112
amr_wind::SimTime & m_time
Definition incflo.H:168
void advance_time()
Definition incflo.H:137
void MakeNewLevelFromScratch(int lev, amrex::Real time, const amrex::BoxArray &new_grids, const amrex::DistributionMapping &new_dmap) override
Definition incflo.cpp:371
amrex::Long m_cell_count
number of cells on all levels including covered cells
Definition incflo.H:193
void SetMultiBlockPointer(MultiBlockContainer *mbc)
Definition incflo.H:156
void compute_prescribe_dt()
Definition incflo_compute_dt.cpp:213
amr_wind::CFDSim & sim()
Definition incflo.H:107
void prepare_time_step()
Definition incflo_advance.cpp:30
void prescribe_advance()
Definition incflo_advance.cpp:644
amr_wind::FieldRepo & m_repo
Definition incflo.H:169
~incflo() override
void ErrorEst(int lev, amrex::TagBoxArray &tags, amrex::Real time, int ngrow) override
Definition incflo.cpp:455
bool m_do_initial_proj
Definition incflo.H:178
void MakeNewLevelFromCoarse(int lev, amrex::Real time, const amrex::BoxArray &ba, const amrex::DistributionMapping &dm) override
Definition incflo_regrid.cpp:8
void init_physics_and_pde()
Initialize Physics instances as well as PDEs (include turbulence models)
Definition incflo.cpp:402
void InitData()
Definition incflo.cpp:172
amr_wind::FieldRepo & repo()
Definition incflo.H:109
void set_read_erf(ReadERFFunction fcn)
Definition incflo.H:157
void InitialProjection()
Definition init.cpp:182
bool m_reconstruct_true_pressure
reconstruct true pressure
Definition incflo.H:198
bool regrid_and_update()
Definition incflo.cpp:185
void PrintMaxVel(int lev) const
Definition diagnostics.cpp:713
const amr_wind::pde::PDEBase & icns() const
Definition incflo.H:113
int m_verbose
Definition incflo.H:175
amr_wind::Field & pressure() const
Definition incflo.H:132
void pre_advance_stage2()
Definition incflo_advance.cpp:20
void CheckForNans(int lev) const
Definition diagnostics.cpp:733
void init_mesh()
Definition incflo.cpp:43
void PrintMaxValues(const std::string &header)
Definition diagnostics.cpp:662
amr_wind::pde::PDEMgr::TypeVector & scalar_eqns()
Definition incflo.H:117
void ApplyCorrector()
Definition incflo_advance.cpp:518
const amr_wind::FieldRepo & repo() const
Definition incflo.H:110
void compute_dt()
Definition incflo_compute_dt.cpp:32
amrex::FabFactory< amrex::FArrayBox > const & Factory(int lev) const noexcept
Definition incflo.H:204
DiffusionType
Definition incflo_enums.H:4
@ Implicit
Definition incflo_enums.H:4
@ Crank_Nicolson
Definition incflo_enums.H:4
Definition AdvOp_Godunov.H:18
This test case is intended as an evaluation of the momentum advection scheme.
Definition BCInterface.cpp:7