/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
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}
22class RefinementCriteria;
23class RefineCriteriaManager;
24} // namespace amr_wind
25
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 // Evolve solution in a multiblock framework by desired number of steps
64 void Evolve_MultiBlock(int multiblock_step, int max_block_step);
65
66 // Tag cells for refinement
67 void
68 ErrorEst(int lev, amrex::TagBoxArray& tags, amrex::Real time, int ngrow)
69 override;
70
71 // Make a new level from scratch using provided BoxArray and
72 // DistributionMapping Only used during initialization
74 int lev,
75 amrex::Real time,
76 const amrex::BoxArray& new_grids,
77 const amrex::DistributionMapping& new_dmap) override;
78
79 // Make a new level using provided BoxArray and DistributionMapping,
80 // and fill with interpolated coarse level data
82 int lev,
83 amrex::Real time,
84 const amrex::BoxArray& ba,
85 const amrex::DistributionMapping& dm) override;
86
87 // Remake an existing level using provided BoxArray and DistributionMapping,
88 // and fill with existing fine and coarse data
89 void RemakeLevel(
90 int lev,
91 amrex::Real time,
92 const amrex::BoxArray& ba,
93 const amrex::DistributionMapping& dm) override;
94
95 // Delete level data
96 void ClearLevel(int lev) override;
97
98 void init_mesh();
101 bool regrid_and_update();
102 void pre_advance_stage1();
103 void pre_advance_stage2();
104 void prepare_time_step();
105 void do_advance(const int fixed_point_iteration);
106 void advance(const int fixed_point_iteration);
107 void prescribe_advance();
108 void post_advance_work();
109
111 const amr_wind::SimTime& time() const { return m_time; }
113 const amr_wind::FieldRepo& repo() const { return m_repo; }
114
117 {
118 return m_sim.pde_manager().icns();
119 }
128
129 amr_wind::Field& velocity() const { return m_repo.get_field("velocity"); }
130 amr_wind::Field& density() const { return m_repo.get_field("density"); }
132 {
133 return m_repo.get_field("temperature");
134 }
135 amr_wind::Field& pressure() const { return m_repo.get_field("p"); }
136 amr_wind::Field& grad_p() const { return m_repo.get_field("gp"); }
137
138 // for cuda
139 void ComputeDt(bool explicit_diffusion);
140 void ComputePrescribeDt();
141
142 void ApplyPredictor(
143 const bool incremental_projection = false,
144 const int fixed_point_iteration = 0);
145 void ApplyCorrector();
146 void ApplyPrescribeStep();
147
148 void ApplyProjection(
149 amrex::Vector<amrex::MultiFab const*> density,
150 amrex::Real time,
151 amrex::Real scaling_factor,
152 bool incremental);
153
156
157 void ReadCheckpointFile();
158
159 void SetMultiBlockPointer(MultiBlockContainer* mbc) { m_sim.set_mbc(mbc); }
161 {
162 m_sim.set_read_erf(std::move(fcn));
163 }
164
165private:
166 //
167 // member variables
168 //
169
174
175 std::unique_ptr<amr_wind::RefineCriteriaManager> m_mesh_refiner;
176
177 // Be verbose?
178 int m_verbose = 0;
179
180 // Initial projection / iterations
181 bool m_do_initial_proj = true;
183
184 bool m_use_godunov = true;
185
186 // Prescribe advection velocity
187 bool m_prescribe_vel = false;
188
189 // Perform a dry run (0 steps, output plotfile)
190 bool m_dry_run = false;
191
192 // Fixed point iterations every timestep
194
196 amrex::Long m_cell_count{-1};
197
199
202
203 //
204 // end of member variables
205 //
206
207 amrex::FabFactory<amrex::FArrayBox> const& Factory(int lev) const noexcept
208 {
209 return m_repo.factory(lev);
210 }
211
212 bool need_divtau() const
213 {
215 }
217 //
218 // setup
219 //
221
222 void CheckAndSetUpDryRun();
223 void ReadParameters();
224 void InitialProjection();
225 void InitialIterations();
226
228 //
229 // utilities
230 //
232 void PrintMaxValues(const std::string& header);
233 void PrintMaxVelLocations(const std::string& header);
234 void PrintMaxVel(int lev) const;
235 void PrintMaxGp(int lev) const;
236 void CheckForNans(int lev) const;
237};
238
239#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
void set_read_erf(ReadERFFunction fcn)
Definition CFDSim.H:71
void set_mbc(MultiBlockContainer *mbc)
Definition CFDSim.H:68
pde::PDEMgr & pde_manager()
Definition CFDSim.H:78
amrex::Vector< TypePtr > TypeVector
Definition CollMgr.H:25
Definition Field.H:116
Definition FieldRepo.H:86
Field & get_field(const std::string &name, const FieldState fstate=FieldState::New) const
Definition FieldRepo.cpp:149
const amrex::FabFactory< amrex::FArrayBox > & factory(int lev) const noexcept
Return factory instance at a given level.
Definition FieldRepo.H:377
Definition OversetOps.H:10
Definition SimTime.H:30
Definition PDEBase.H:51
PDEBase & icns()
Return the incompressible Navier-Stokes instance.
Definition PDEBase.H:122
TypeVector & scalar_eqns()
Definition PDEBase.H:153
Definition incflo.H:52
void Evolve()
Definition incflo.cpp:285
const amr_wind::pde::PDEMgr::TypeVector & scalar_eqns() const
Definition incflo.H:124
void ApplyPredictor(const bool incremental_projection=false, const int fixed_point_iteration=0)
Definition incflo_advance.cpp:182
const amr_wind::SimTime & time() const
Definition incflo.H:111
amr_wind::Field & density() const
Definition incflo.H:130
void ApplyPrescribeStep()
Definition incflo_advance.cpp:673
void pre_advance_stage1()
Definition incflo_advance.cpp:14
void Evolve_MultiBlock(int multiblock_step, int max_block_step)
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
void ComputePrescribeDt()
Definition incflo_compute_dt.cpp:200
amr_wind::Field & temperature() const
Definition incflo.H:131
std::unique_ptr< amr_wind::RefineCriteriaManager > m_mesh_refiner
Definition incflo.H:175
bool m_dry_run
Definition incflo.H:190
bool m_prescribe_vel
Definition incflo.H:187
amr_wind::Field & velocity() const
Definition incflo.H:129
void prepare_for_time_integration()
Definition incflo.cpp:139
void advance(const int fixed_point_iteration)
Definition incflo_advance.cpp:59
void post_advance_work()
Definition incflo.cpp:253
void InitialIterations()
Definition init.cpp:102
void init_amr_wind_modules()
Definition incflo.cpp:103
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:170
void do_advance(const int fixed_point_iteration)
Definition incflo.cpp:341
int m_initial_iterations
Definition incflo.H:182
void CheckAndSetUpDryRun()
Definition init.cpp:13
int m_fixed_point_iterations
Definition incflo.H:193
void ReadCheckpointFile()
Definition io.cpp:15
bool need_divtau() const
Definition incflo.H:212
void PrintMaxGp(int lev) const
Definition diagnostics.cpp:723
void PrintMaxVelLocations(const std::string &header)
Definition diagnostics.cpp:704
amr_wind::OversetOps m_ovst_ops
Definition incflo.H:173
amr_wind::Field & grad_p() const
Definition incflo.H:136
DiffusionType m_diff_type
Definition incflo.H:198
bool m_use_godunov
Definition incflo.H:184
amr_wind::pde::PDEBase & icns()
Definition incflo.H:115
amr_wind::SimTime & m_time
Definition incflo.H:171
void MakeNewLevelFromScratch(int lev, amrex::Real time, const amrex::BoxArray &new_grids, const amrex::DistributionMapping &new_dmap) override
Definition incflo.cpp:364
amrex::Long m_cell_count
number of cells on all levels including covered cells
Definition incflo.H:196
void SetMultiBlockPointer(MultiBlockContainer *mbc)
Definition incflo.H:159
amr_wind::CFDSim & sim()
Definition incflo.H:110
void prepare_time_step()
Definition incflo_advance.cpp:33
void prescribe_advance()
Definition incflo_advance.cpp:664
amr_wind::FieldRepo & m_repo
Definition incflo.H:172
~incflo() override
void ErrorEst(int lev, amrex::TagBoxArray &tags, amrex::Real time, int ngrow) override
Definition incflo.cpp:448
bool m_do_initial_proj
Definition incflo.H:181
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:395
void InitData()
Definition incflo.cpp:175
amr_wind::FieldRepo & repo()
Definition incflo.H:112
void set_read_erf(ReadERFFunction fcn)
Definition incflo.H:160
void InitialProjection()
Definition init.cpp:183
bool m_reconstruct_true_pressure
reconstruct true pressure
Definition incflo.H:201
bool regrid_and_update()
Definition incflo.cpp:188
void PrintMaxVel(int lev) const
Definition diagnostics.cpp:712
const amr_wind::pde::PDEBase & icns() const
Definition incflo.H:116
int m_verbose
Definition incflo.H:178
amr_wind::Field & pressure() const
Definition incflo.H:135
void pre_advance_stage2()
Definition incflo_advance.cpp:23
void CheckForNans(int lev) const
Definition diagnostics.cpp:732
void ComputeDt(bool explicit_diffusion)
Definition incflo_compute_dt.cpp:35
void init_mesh()
Definition incflo.cpp:47
void PrintMaxValues(const std::string &header)
Definition diagnostics.cpp:661
amr_wind::pde::PDEMgr::TypeVector & scalar_eqns()
Definition incflo.H:120
void ApplyCorrector()
Definition incflo_advance.cpp:538
const amr_wind::FieldRepo & repo() const
Definition incflo.H:113
amrex::FabFactory< amrex::FArrayBox > const & Factory(int lev) const noexcept
Definition incflo.H:207
DiffusionType
Definition incflo_enums.H:4
Definition BCInterface.cpp:7