1 #ifndef ERF_IB_FACE_SET_H
2 #define ERF_IB_FACE_SET_H
4 #include <AMReX_MultiFab.H>
5 #include <AMReX_BoxArray.H>
6 #include <AMReX_DistributionMapping.H>
7 #include <AMReX_Geometry.H>
8 #include <AMReX_GpuContainers.H>
93 void build (
const amrex::MultiFab& blanking,
const amrex::Geometry& geom);
222 const amrex::MultiFab* olen_ground =
nullptr,
223 const amrex::MultiFab* pblh_ground =
nullptr,
254 void scatter_field (
const amrex::Gpu::DeviceVector<amrex::Real>& v, amrex::MultiFab& out)
const;
261 void dump_faces (
const std::string& prefix)
const;
289 void save_state (amrex::MultiFab& state)
const;
297 void load_state (
const amrex::MultiFab& state);
321 amrex::Gpu::DeviceVector<int>
d_dir;
324 amrex::Gpu::DeviceVector<int>
d_bid;
325 amrex::Gpu::DeviceVector<int>
d_mat;
328 amrex::Gpu::DeviceVector<amrex::Real>
d_area;
338 amrex::Gpu::DeviceVector<amrex::Real>
d_Q_ext;
345 amrex::Gpu::DeviceVector<amrex::Real>
d_T_air;
348 amrex::Gpu::DeviceVector<amrex::Real>
d_rho;
349 amrex::Gpu::DeviceVector<amrex::Real>
d_U_tan;
350 amrex::Gpu::DeviceVector<amrex::Real>
d_ustar;
353 amrex::Gpu::DeviceVector<amrex::Real>
d_hbld;
355 amrex::Gpu::DeviceVector<amrex::Real>
d_olen;
356 amrex::Gpu::DeviceVector<amrex::Real>
d_z_i;
359 amrex::Gpu::DeviceVector<amrex::Real>
d_resid;
Material library of the building faces.
Inputs of the immersed-boundary surface energy balance (erf.ibseb.*).
const Real rdOcp
Definition: ERF_InitCustomPert_ABL.H:72
amrex::Real Real
Definition: ERF_ShocInterface.H:19
Definition: ERF_IBFaceSet.H:69
int m_lev
AMR level, for reports.
Definition: ERF_IBFaceSet.H:412
void save_state(amrex::MultiFab &state) const
Definition: ERF_IBFaceSet.cpp:1085
amrex::Gpu::DeviceVector< amrex::Real > d_resid
|balance| after the solve [W/m2]
Definition: ERF_IBFaceSet.H:359
amrex::Gpu::DeviceVector< amrex::Real > d_theta_air
Potential temperature of the fluid cell [K].
Definition: ERF_IBFaceSet.H:347
void dump_faces(const std::string &prefix) const
Definition: ERF_IBFaceSet.cpp:953
std::vector< int > m_bld_jhi
Definition: ERF_IBFaceSet.H:425
amrex::Gpu::DeviceVector< amrex::Real > d_hbld
Height of the face's building column [m].
Definition: ERF_IBFaceSet.H:353
int state_ncomp() const
Definition: ERF_IBFaceSet.H:119
int m_nslots
Slots per cell of the checkpoint field (largest face count on a cell)
Definition: ERF_IBFaceSet.H:414
int m_ny
Columns of the domain.
Definition: ERF_IBFaceSet.H:428
amrex::Gpu::DeviceVector< amrex::Real > d_shadow
1 when the ray to the sun hits a building, else 0
Definition: ERF_IBFaceSet.H:340
double m_cost_s
Wall-clock seconds spent in the per-step update on this rank.
Definition: ERF_IBFaceSet.H:436
amrex::Gpu::DeviceVector< amrex::Real > d_yf
Definition: ERF_IBFaceSet.H:329
std::vector< int > m_xfer_src
Definition: ERF_IBFaceSet.H:378
amrex::Gpu::DeviceVector< int > d_col_top
Definition: ERF_IBFaceSet.H:368
amrex::Gpu::DeviceVector< amrex::Real > d_thick
Slab conductivity [W/m/K], heat capacity [J/m3/K], thickness [m].
Definition: ERF_IBFaceSet.H:327
amrex::Gpu::DeviceVector< int > d_k
Fluid cell of the face.
Definition: ERF_IBFaceSet.H:320
amrex::Real m_max_path
Ray path cap [m].
Definition: ERF_IBFaceSet.H:434
void compute_shortwave(amrex::Real time)
Definition: ERF_IBFaceSet.cpp:850
amrex::Gpu::DeviceVector< amrex::Real > d_H
Definition: ERF_IBFaceSet.H:337
bool has_state() const
Definition: ERF_IBFaceSet.H:136
std::vector< amrex::Long > m_bld_ncol
Definition: ERF_IBFaceSet.H:424
amrex::Gpu::DeviceVector< amrex::Real > d_albedo
Definition: ERF_IBFaceSet.H:326
amrex::Gpu::DeviceVector< amrex::Real > d_SW_abs
Definition: ERF_IBFaceSet.H:337
const std::vector< int > & fab_start() const
Definition: ERF_IBFaceSet.H:408
amrex::Real m_col_top_max
Tallest column [m].
Definition: ERF_IBFaceSet.H:432
amrex::DistributionMapping m_xfer_dm
Definition: ERF_IBFaceSet.H:377
amrex::Gpu::DeviceVector< int > d_mat
Material id (0 = uniform inputs)
Definition: ERF_IBFaceSet.H:325
void print_debug_summary() const
Definition: ERF_IBFaceSet.cpp:1011
void compute_view_fractions()
Definition: ERF_IBFaceSet.cpp:441
amrex::Gpu::DeviceVector< amrex::Real > d_LW_ext
Incoming longwave from sky and ground only [W/m2].
Definition: ERF_IBFaceSet.H:358
int m_col_i0
Definition: ERF_IBFaceSet.H:369
const SunState & sun() const
Definition: ERF_IBFaceSet.H:388
IBFaceSet(const IBSEBParams ¶ms, int lev)
Definition: ERF_IBFaceSet.H:76
void compute_sensible(const amrex::MultiFab &cons, const amrex::MultiFab &xvel, const amrex::MultiFab &yvel, const amrex::MultiFab &zvel, amrex::Real c_p, const amrex::MultiFab *olen_ground=nullptr, const amrex::MultiFab *pblh_ground=nullptr, amrex::Real z_i_bulk=0.0)
Definition: ERF_IBFaceSet.cpp:687
bool m_per_x
Definition: ERF_IBFaceSet.H:431
amrex::Long m_nface_dir[3]
Faces per direction.
Definition: ERF_IBFaceSet.H:421
std::vector< int > m_bld_jlo
Definition: ERF_IBFaceSet.H:425
amrex::Gpu::DeviceVector< amrex::Real > d_w_star
Convective velocity scale of the step [m/s].
Definition: ERF_IBFaceSet.H:354
amrex::Gpu::DeviceVector< amrex::Real > d_area
Face area [m2].
Definition: ERF_IBFaceSet.H:328
void compute_longwave(const amrex::MultiFab &cons)
Definition: ERF_IBFaceSet.cpp:491
amrex::Gpu::DeviceVector< amrex::Real > d_rho
Density of the fluid cell [kg/m3].
Definition: ERF_IBFaceSet.H:348
amrex::Gpu::DeviceVector< amrex::Real > d_T_skin
Skin temperature [K].
Definition: ERF_IBFaceSet.H:331
amrex::Gpu::DeviceVector< amrex::Real > d_LW_net
Definition: ERF_IBFaceSet.H:337
amrex::Gpu::DeviceVector< amrex::Real > d_emis
Optical properties of the face.
Definition: ERF_IBFaceSet.H:326
amrex::Gpu::DeviceVector< amrex::Real > d_z_i
Depth in w* [m]: mixed layer above a roof, building height for a wall.
Definition: ERF_IBFaceSet.H:356
void add_heat_flux_to_source(amrex::MultiFab &source, const amrex::MultiFab &cons, const amrex::Geometry &geom, amrex::Real c_p, amrex::Real rdOcp) const
Definition: ERF_IBFaceSet.cpp:809
amrex::BoxArray m_xfer_ba
Definition: ERF_IBFaceSet.H:376
void compute_ground(amrex::Real dt)
Definition: ERF_IBFaceSet.cpp:580
void solve_balance(amrex::Real dt)
Definition: ERF_IBFaceSet.cpp:606
amrex::Gpu::DeviceVector< int > d_side
Solid neighbour at -1 (low) or +1 (high) side.
Definition: ERF_IBFaceSet.H:322
SunState m_sun
Definition: ERF_IBFaceSet.H:435
std::vector< amrex::Real > m_bld_area
Face area per building [m2].
Definition: ERF_IBFaceSet.H:420
void build(const amrex::MultiFab &blanking, const amrex::Geometry &geom)
Definition: ERF_IBFaceSet.cpp:88
amrex::Gpu::DeviceVector< int > d_niter
Newton iterations of the last solve.
Definition: ERF_IBFaceSet.H:360
amrex::Gpu::DeviceVector< amrex::Real > d_SW_diffuse_in
Sky and ground-reflected diffuse incident.
Definition: ERF_IBFaceSet.H:342
amrex::Gpu::DeviceVector< amrex::Real > d_f_sky
Definition: ERF_IBFaceSet.H:334
amrex::Gpu::DeviceVector< amrex::Real > d_olen
Obukhov length used [m] (1e30 when neutral)
Definition: ERF_IBFaceSet.H:355
amrex::Real m_z_ground
Ground height [m] (flat, the domain bottom)
Definition: ERF_IBFaceSet.H:433
amrex::Gpu::DeviceVector< int > d_dir
Face direction: 0 x, 1 y, 2 z.
Definition: ERF_IBFaceSet.H:321
amrex::Gpu::DeviceVector< amrex::Real > d_f_bldg
View fractions, sum to 1.
Definition: ERF_IBFaceSet.H:334
double m_init_cost_s
Wall-clock seconds of build() and compute_view_fractions()
Definition: ERF_IBFaceSet.H:438
std::vector< int > m_bld_ilo
Definition: ERF_IBFaceSet.H:425
amrex::Gpu::DeviceVector< int > d_slot
Slot of the face within its cell's checkpoint record.
Definition: ERF_IBFaceSet.H:323
amrex::Long m_cost_n
Number of per-step updates timed.
Definition: ERF_IBFaceSet.H:437
const amrex::BoxArray & state_boxarray() const
Definition: ERF_IBFaceSet.H:134
amrex::Gpu::DeviceVector< amrex::Real > d_T_slab
Slab layers [K], face-major: [face * n_layers + layer].
Definition: ERF_IBFaceSet.H:332
int m_col_ny
Definition: ERF_IBFaceSet.H:369
int n_layers() const
Definition: ERF_IBFaceSet.H:100
void scatter_diagnostics(amrex::MultiFab &nfaces, amrex::MultiFab &tskin) const
Definition: ERF_IBFaceSet.cpp:1046
amrex::Real m_y_lo
Domain origin [m].
Definition: ERF_IBFaceSet.H:429
amrex::Gpu::DeviceVector< amrex::Real > d_SW_direct_in
Direct beam incident on the face.
Definition: ERF_IBFaceSet.H:341
int n_slots() const
Definition: ERF_IBFaceSet.H:122
void add_cost(double seconds)
Definition: ERF_IBFaceSet.H:399
int n_buildings() const
Definition: ERF_IBFaceSet.H:98
amrex::BoxArray m_state_ba
Definition: ERF_IBFaceSet.H:375
amrex::Long m_domain_cells
Cells of the level, for the debug summary of the field.
Definition: ERF_IBFaceSet.H:379
amrex::Gpu::DeviceVector< amrex::Real > d_G
Definition: ERF_IBFaceSet.H:337
void scatter_field(const amrex::Gpu::DeviceVector< amrex::Real > &v, amrex::MultiFab &out) const
Definition: ERF_IBFaceSet.cpp:924
amrex::Gpu::DeviceVector< amrex::Real > d_T_air
Air temperature of the fluid cell.
Definition: ERF_IBFaceSet.H:345
int m_nface
Faces owned by this rank.
Definition: ERF_IBFaceSet.H:413
amrex::Gpu::DeviceVector< amrex::Real > d_Q_ext
External incident flux [W/m2], e.g. fire radiation.
Definition: ERF_IBFaceSet.H:338
amrex::MultiFab make_state() const
Definition: ERF_IBFaceSet.cpp:1078
amrex::Real m_area_total
Total face area [m2].
Definition: ERF_IBFaceSet.H:422
int n_faces() const
Definition: ERF_IBFaceSet.H:96
bool m_per_y
Periodicity in x and y.
Definition: ERF_IBFaceSet.H:431
amrex::Gpu::DeviceVector< amrex::Real > d_f_ground
Definition: ERF_IBFaceSet.H:334
amrex::Gpu::DeviceVector< int > d_j
Definition: ERF_IBFaceSet.H:320
void set_init_cost(double seconds)
Definition: ERF_IBFaceSet.H:401
int m_nx
Definition: ERF_IBFaceSet.H:428
void report(amrex::Real time, int step, bool write_csv) const
Definition: ERF_IBFaceSet.cpp:1170
amrex::Gpu::DeviceVector< int > d_bid
Building id (1-based)
Definition: ERF_IBFaceSet.H:324
amrex::Gpu::DeviceVector< amrex::Real > d_LE
Definition: ERF_IBFaceSet.H:337
void load_state(const amrex::MultiFab &state)
Definition: ERF_IBFaceSet.cpp:1125
std::vector< int > m_fab_start
See fab_start()
Definition: ERF_IBFaceSet.H:416
amrex::Gpu::DeviceVector< amrex::Real > d_H_coeff
H = H_coeff (theta_skin - theta_air) [W/m2/K].
Definition: ERF_IBFaceSet.H:351
int m_nbld
Buildings of the level (global)
Definition: ERF_IBFaceSet.H:415
amrex::Real m_dx[3]
Cell sizes [m].
Definition: ERF_IBFaceSet.H:430
void assign_materials()
Definition: ERF_IBFaceSet.cpp:532
amrex::Gpu::DeviceVector< amrex::Real > d_xf
Definition: ERF_IBFaceSet.H:329
amrex::Gpu::DeviceVector< amrex::Real > d_zf
Face centre [m].
Definition: ERF_IBFaceSet.H:329
IBSEBParams m_params
Copy of the inputs.
Definition: ERF_IBFaceSet.H:411
std::vector< amrex::Long > m_bld_nface
Faces per building.
Definition: ERF_IBFaceSet.H:419
amrex::Gpu::DeviceVector< amrex::Real > d_LW_down_in
Incoming longwave on the face (sky, ground and walls)
Definition: ERF_IBFaceSet.H:344
int m_col_j0
Definition: ERF_IBFaceSet.H:369
std::vector< int > m_bld_ihi
Definition: ERF_IBFaceSet.H:425
amrex::Real m_x_lo
Definition: ERF_IBFaceSet.H:429
amrex::Gpu::DeviceVector< amrex::Real > d_rhocp
Definition: ERF_IBFaceSet.H:327
int m_col_nx
Definition: ERF_IBFaceSet.H:369
amrex::Gpu::DeviceVector< int > d_i
Definition: ERF_IBFaceSet.H:320
amrex::Gpu::DeviceVector< amrex::Real > d_ustar
Friction velocity of the wall function [m/s].
Definition: ERF_IBFaceSet.H:350
amrex::Gpu::DeviceVector< amrex::Real > d_kth
Definition: ERF_IBFaceSet.H:327
amrex::Gpu::DeviceVector< amrex::Real > d_U_tan
Tangential wind speed at the fluid cell [m/s].
Definition: ERF_IBFaceSet.H:349
@ xvel
Definition: ERF_IndexDefines.H:215
@ cons
Definition: ERF_IndexDefines.H:214
@ zvel
Definition: ERF_IndexDefines.H:217
@ yvel
Definition: ERF_IndexDefines.H:216
Sun and irradiances of the last compute_shortwave() call, for reports.
Definition: ERF_IBFaceSet.H:382
amrex::Real diffuse_h
Diffuse on a horizontal surface [W/m2].
Definition: ERF_IBFaceSet.H:386
amrex::Real dni
Direct-normal irradiance [W/m2].
Definition: ERF_IBFaceSet.H:385
amrex::Real zenith
Definition: ERF_IBFaceSet.H:383
amrex::Real sy
Definition: ERF_IBFaceSet.H:384
amrex::Real sx
Definition: ERF_IBFaceSet.H:384
amrex::Real azimuth
[rad]
Definition: ERF_IBFaceSet.H:383
amrex::Real sz
Unit vector toward the sun.
Definition: ERF_IBFaceSet.H:384
Definition: ERF_IBSEBParams.H:25
int n_slab_layers
Conduction layers per face.
Definition: ERF_IBSEBParams.H:27