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>
97 void build (
const amrex::MultiFab& blanking,
const amrex::Geometry& geom);
121 const amrex::BoxArray& grids_crse);
135 m_ts_sun = {
true, declination, hour_angle, latitude_deg, toa_irradiance};
297 const amrex::MultiFab* olen_ground =
nullptr,
298 const amrex::MultiFab* pblh_ground =
nullptr,
364 void scatter_field (
const amrex::Gpu::DeviceVector<amrex::Real>& v, amrex::MultiFab& out)
const;
371 void dump_faces (
const std::string& prefix)
const;
399 void save_state (amrex::MultiFab& state)
const;
407 void load_state (
const amrex::MultiFab& state);
437 amrex::Gpu::DeviceVector<int>
d_dir;
440 amrex::Gpu::DeviceVector<int>
d_bid;
441 amrex::Gpu::DeviceVector<int>
d_mat;
444 amrex::Gpu::DeviceVector<amrex::Real>
d_area;
454 amrex::Gpu::DeviceVector<amrex::Real>
d_Q_ext;
461 amrex::Gpu::DeviceVector<amrex::Real>
d_T_air;
464 amrex::Gpu::DeviceVector<amrex::Real>
d_rho;
465 amrex::Gpu::DeviceVector<amrex::Real>
d_U_tan;
466 amrex::Gpu::DeviceVector<amrex::Real>
d_ustar;
469 amrex::Gpu::DeviceVector<amrex::Real>
d_hbld;
471 amrex::Gpu::DeviceVector<amrex::Real>
d_olen;
472 amrex::Gpu::DeviceVector<amrex::Real>
d_z_i;
475 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
What the two-stream sweep hands the building faces of the immersed-boundary surface energy balance (e...
Definition: ERF_IBFaceSet.H:71
int m_lev
AMR level, for reports.
Definition: ERF_IBFaceSet.H:528
void save_state(amrex::MultiFab &state) const
Definition: ERF_IBFaceSet.cpp:1546
amrex::Gpu::DeviceVector< amrex::Real > d_resid
|balance| after the solve [W/m2]
Definition: ERF_IBFaceSet.H:475
amrex::Gpu::DeviceVector< amrex::Real > d_theta_air
Potential temperature of the fluid cell [K].
Definition: ERF_IBFaceSet.H:463
void dump_faces(const std::string &prefix) const
Definition: ERF_IBFaceSet.cpp:1414
void release_labels()
Definition: ERF_IBFaceSet.H:163
std::vector< int > m_bld_jhi
Definition: ERF_IBFaceSet.H:542
amrex::Gpu::DeviceVector< amrex::Real > d_hbld
Height of the face's building column [m].
Definition: ERF_IBFaceSet.H:469
int state_ncomp() const
Definition: ERF_IBFaceSet.H:189
int m_nslots
Slots per cell of the checkpoint field (largest face count on a cell)
Definition: ERF_IBFaceSet.H:530
int m_ny
Columns of the domain.
Definition: ERF_IBFaceSet.H:552
amrex::Gpu::DeviceVector< amrex::Real > d_shadow
1 when the ray to the sun hits a building, else 0
Definition: ERF_IBFaceSet.H:456
double m_cost_s
Wall-clock seconds spent in the per-step update on this rank.
Definition: ERF_IBFaceSet.H:564
amrex::Gpu::DeviceVector< amrex::Real > d_yf
Definition: ERF_IBFaceSet.H:445
std::vector< int > m_xfer_src
Definition: ERF_IBFaceSet.H:494
amrex::Gpu::DeviceVector< int > d_col_top
Definition: ERF_IBFaceSet.H:484
amrex::Gpu::DeviceVector< amrex::Real > d_thick
Slab conductivity [W/m/K], heat capacity [J/m3/K], thickness [m].
Definition: ERF_IBFaceSet.H:443
amrex::Gpu::DeviceVector< int > d_k
Fluid cell of the face.
Definition: ERF_IBFaceSet.H:436
amrex::Real m_max_path
Ray path cap [m].
Definition: ERF_IBFaceSet.H:559
amrex::Gpu::DeviceVector< amrex::Real > d_H
Definition: ERF_IBFaceSet.H:453
bool has_state() const
Definition: ERF_IBFaceSet.H:206
std::vector< amrex::Long > m_bld_ncol
Definition: ERF_IBFaceSet.H:541
amrex::Gpu::DeviceVector< amrex::Real > d_albedo
Definition: ERF_IBFaceSet.H:442
amrex::Gpu::DeviceVector< amrex::Real > d_SW_abs
Definition: ERF_IBFaceSet.H:453
const std::vector< int > & fab_start() const
Definition: ERF_IBFaceSet.H:524
int building_level0(int b) const
Definition: ERF_IBFaceSet.H:160
amrex::Real m_col_top_max
Tallest column [m].
Definition: ERF_IBFaceSet.H:557
amrex::DistributionMapping m_xfer_dm
Definition: ERF_IBFaceSet.H:493
void compute_longwave_two_stream(const amrex::MultiFab &cons, const TwoStreamCanopyView &canopy)
Definition: ERF_IBFaceSet.cpp:766
amrex::Gpu::DeviceVector< int > d_mat
Material id (0 = uniform inputs)
Definition: ERF_IBFaceSet.H:441
void print_debug_summary() const
Definition: ERF_IBFaceSet.cpp:1472
void compute_view_fractions()
Definition: ERF_IBFaceSet.cpp:661
amrex::Gpu::DeviceVector< amrex::Real > d_LW_ext
Incoming longwave from sky and ground only [W/m2].
Definition: ERF_IBFaceSet.H:474
int m_col_i0
Definition: ERF_IBFaceSet.H:485
const SunState & sun() const
Definition: ERF_IBFaceSet.H:504
IBFaceSet(const IBSEBParams ¶ms, int lev)
Definition: ERF_IBFaceSet.H:78
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:1010
bool m_per_x
Definition: ERF_IBFaceSet.H:556
amrex::Long m_nface_dir[3]
Faces per direction.
Definition: ERF_IBFaceSet.H:538
std::vector< int > m_bld_jlo
Definition: ERF_IBFaceSet.H:542
std::vector< int > m_to_lev0
Definition: ERF_IBFaceSet.H:547
amrex::Gpu::DeviceVector< amrex::Real > d_w_star
Convective velocity scale of the step [m/s].
Definition: ERF_IBFaceSet.H:470
amrex::Gpu::DeviceVector< amrex::Real > d_area
Face area [m2].
Definition: ERF_IBFaceSet.H:444
void compute_shortwave_two_stream(const TwoStreamCanopyView &canopy)
Definition: ERF_IBFaceSet.cpp:1286
amrex::Gpu::DeviceVector< amrex::Real > d_rho
Density of the fluid cell [kg/m3].
Definition: ERF_IBFaceSet.H:464
amrex::Gpu::DeviceVector< amrex::Real > d_T_skin
Skin temperature [K].
Definition: ERF_IBFaceSet.H:447
amrex::Gpu::DeviceVector< amrex::Real > d_LW_net
Definition: ERF_IBFaceSet.H:453
amrex::Gpu::DeviceVector< amrex::Real > d_emis
Optical properties of the face.
Definition: ERF_IBFaceSet.H:442
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:472
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:1132
amrex::BoxArray m_xfer_ba
Definition: ERF_IBFaceSet.H:492
void compute_ground(amrex::Real dt)
Definition: ERF_IBFaceSet.cpp:899
void solve_balance(amrex::Real dt)
Definition: ERF_IBFaceSet.cpp:927
amrex::Gpu::DeviceVector< int > d_side
Solid neighbour at -1 (low) or +1 (high) side.
Definition: ERF_IBFaceSet.H:438
SunState m_sun
Definition: ERF_IBFaceSet.H:560
int m_top_sample
Highest interface a face samples, over all ranks (-1: no faces)
Definition: ERF_IBFaceSet.H:531
std::vector< amrex::Real > m_bld_area
Face area per building [m2].
Definition: ERF_IBFaceSet.H:537
void build(const amrex::MultiFab &blanking, const amrex::Geometry &geom)
Definition: ERF_IBFaceSet.cpp:94
amrex::Gpu::DeviceVector< int > d_niter
Newton iterations of the last solve.
Definition: ERF_IBFaceSet.H:476
amrex::Gpu::DeviceVector< amrex::Real > d_SW_diffuse_in
Sky and ground-reflected diffuse incident.
Definition: ERF_IBFaceSet.H:458
amrex::Gpu::DeviceVector< amrex::Real > d_f_sky
Definition: ERF_IBFaceSet.H:450
amrex::Gpu::DeviceVector< amrex::Real > d_olen
Obukhov length used [m] (1e30 when neutral)
Definition: ERF_IBFaceSet.H:471
amrex::Real m_z_ground
Ground height [m] (flat, the domain bottom)
Definition: ERF_IBFaceSet.H:558
amrex::Gpu::DeviceVector< int > d_dir
Face direction: 0 x, 1 y, 2 z.
Definition: ERF_IBFaceSet.H:437
amrex::Gpu::DeviceVector< amrex::Real > d_f_bldg
View fractions, sum to 1.
Definition: ERF_IBFaceSet.H:450
void check_canopy_layout(const amrex::MultiFab &cons, const TwoStreamCanopyView &canopy) const
Definition: ERF_IBFaceSet.cpp:815
double m_init_cost_s
Wall-clock seconds of build() and compute_view_fractions()
Definition: ERF_IBFaceSet.H:566
bool has_faces() const
Definition: ERF_IBFaceSet.H:344
std::vector< int > m_lab
Definition: ERF_IBFaceSet.H:548
std::vector< int > m_bld_ilo
Definition: ERF_IBFaceSet.H:542
amrex::Gpu::DeviceVector< int > d_slot
Slot of the face within its cell's checkpoint record.
Definition: ERF_IBFaceSet.H:439
amrex::Long m_cost_n
Number of per-step updates timed.
Definition: ERF_IBFaceSet.H:565
TwoStreamSun m_ts_sun
Definition: ERF_IBFaceSet.H:563
void map_buildings_to_level0(const IBFaceSet &coarser, const amrex::IntVect &ratio)
Definition: ERF_IBFaceSet.cpp:607
const amrex::BoxArray & state_boxarray() const
Definition: ERF_IBFaceSet.H:204
amrex::Gpu::DeviceVector< amrex::Real > d_T_slab
Slab layers [K], face-major: [face * n_layers + layer].
Definition: ERF_IBFaceSet.H:448
int m_col_ny
Definition: ERF_IBFaceSet.H:485
int n_layers() const
Definition: ERF_IBFaceSet.H:170
void scatter_diagnostics(amrex::MultiFab &nfaces, amrex::MultiFab &tskin) const
Definition: ERF_IBFaceSet.cpp:1507
amrex::Real m_y_lo
Domain origin [m].
Definition: ERF_IBFaceSet.H:554
amrex::Gpu::DeviceVector< amrex::Real > d_SW_direct_in
Direct beam incident on the face.
Definition: ERF_IBFaceSet.H:457
int n_slots() const
Definition: ERF_IBFaceSet.H:192
void compute_longwave(const amrex::MultiFab &cons, const TwoStreamCanopyView &canopy=TwoStreamCanopyView{})
Definition: ERF_IBFaceSet.cpp:715
void add_cost(double seconds)
Definition: ERF_IBFaceSet.H:515
int n_buildings() const
Definition: ERF_IBFaceSet.H:168
amrex::BoxArray m_state_ba
Definition: ERF_IBFaceSet.H:491
int m_lab_ny
Definition: ERF_IBFaceSet.H:549
void add_outside_occluders(const IBFaceSet &coarser, const amrex::IntVect &ratio, const amrex::BoxArray &grids_crse)
Definition: ERF_IBFaceSet.cpp:525
amrex::Long m_domain_cells
Cells of the level, for the debug summary of the field.
Definition: ERF_IBFaceSet.H:495
amrex::Gpu::DeviceVector< amrex::Real > d_G
Definition: ERF_IBFaceSet.H:453
void scatter_field(const amrex::Gpu::DeviceVector< amrex::Real > &v, amrex::MultiFab &out) const
Definition: ERF_IBFaceSet.cpp:1385
amrex::Gpu::DeviceVector< amrex::Real > d_T_air
Air temperature of the fluid cell.
Definition: ERF_IBFaceSet.H:461
int m_nface
Faces owned by this rank.
Definition: ERF_IBFaceSet.H:529
int top_sample_interface() const
Definition: ERF_IBFaceSet.H:341
amrex::Gpu::DeviceVector< amrex::Real > d_Q_ext
External incident flux [W/m2], e.g. fire radiation.
Definition: ERF_IBFaceSet.H:454
amrex::MultiFab make_state() const
Definition: ERF_IBFaceSet.cpp:1539
amrex::Real m_area_total
Total face area [m2].
Definition: ERF_IBFaceSet.H:539
int n_faces() const
Definition: ERF_IBFaceSet.H:166
int m_lab_nx
Definition: ERF_IBFaceSet.H:549
bool m_per_y
Periodicity in x and y.
Definition: ERF_IBFaceSet.H:556
amrex::Gpu::DeviceVector< amrex::Real > d_f_ground
Definition: ERF_IBFaceSet.H:450
amrex::Gpu::DeviceVector< int > d_j
Definition: ERF_IBFaceSet.H:436
void set_init_cost(double seconds)
Definition: ERF_IBFaceSet.H:517
int m_nx
Definition: ERF_IBFaceSet.H:552
void report(amrex::Real time, int step, bool write_csv) const
Definition: ERF_IBFaceSet.cpp:1631
amrex::Gpu::DeviceVector< int > d_bid
Building id (1-based)
Definition: ERF_IBFaceSet.H:440
amrex::Gpu::DeviceVector< amrex::Real > d_LE
Definition: ERF_IBFaceSet.H:453
void load_state(const amrex::MultiFab &state)
Definition: ERF_IBFaceSet.cpp:1586
std::vector< int > m_fab_start
See fab_start()
Definition: ERF_IBFaceSet.H:533
int m_lab_j0
Definition: ERF_IBFaceSet.H:549
amrex::Gpu::DeviceVector< amrex::Real > d_H_coeff
H = H_coeff (theta_skin - theta_air) [W/m2/K].
Definition: ERF_IBFaceSet.H:467
int m_nbld
Buildings of the level (global)
Definition: ERF_IBFaceSet.H:532
amrex::Real m_dx[3]
Cell sizes [m].
Definition: ERF_IBFaceSet.H:555
void assign_materials()
Definition: ERF_IBFaceSet.cpp:849
amrex::Gpu::DeviceVector< amrex::Real > d_xf
Definition: ERF_IBFaceSet.H:445
void set_two_stream_sun(amrex::Real declination, amrex::Real hour_angle, amrex::Real latitude_deg, amrex::Real toa_irradiance)
Definition: ERF_IBFaceSet.H:132
amrex::Gpu::DeviceVector< amrex::Real > d_zf
Face centre [m].
Definition: ERF_IBFaceSet.H:445
IBSEBParams m_params
Copy of the inputs.
Definition: ERF_IBFaceSet.H:527
void compute_shortwave(amrex::Real time, const TwoStreamCanopyView &canopy=TwoStreamCanopyView{})
Definition: ERF_IBFaceSet.cpp:1176
std::vector< amrex::Long > m_bld_nface
Faces per building.
Definition: ERF_IBFaceSet.H:536
amrex::Gpu::DeviceVector< amrex::Real > d_LW_down_in
Incoming longwave on the face (sky, ground and walls)
Definition: ERF_IBFaceSet.H:460
int m_col_j0
Definition: ERF_IBFaceSet.H:485
amrex::IntVect m_dom_lo
Low corner of the level's domain.
Definition: ERF_IBFaceSet.H:553
std::vector< int > m_bld_ihi
Definition: ERF_IBFaceSet.H:542
amrex::Real m_x_lo
Definition: ERF_IBFaceSet.H:554
amrex::Gpu::DeviceVector< amrex::Real > d_rhocp
Definition: ERF_IBFaceSet.H:443
int m_col_nx
Definition: ERF_IBFaceSet.H:485
amrex::Gpu::DeviceVector< int > d_i
Definition: ERF_IBFaceSet.H:436
amrex::Gpu::DeviceVector< amrex::Real > d_ustar
Friction velocity of the wall function [m/s].
Definition: ERF_IBFaceSet.H:466
amrex::Gpu::DeviceVector< amrex::Real > d_kth
Definition: ERF_IBFaceSet.H:443
amrex::Gpu::DeviceVector< amrex::Real > d_U_tan
Tangential wind speed at the fluid cell [m/s].
Definition: ERF_IBFaceSet.H:465
int m_lab_i0
Definition: ERF_IBFaceSet.H:549
@ xvel
Definition: ERF_IndexDefines.H:218
@ cons
Definition: ERF_IndexDefines.H:217
@ zvel
Definition: ERF_IndexDefines.H:220
@ yvel
Definition: ERF_IndexDefines.H:219
Sun and irradiances of the last compute_shortwave() call, for reports.
Definition: ERF_IBFaceSet.H:498
amrex::Real diffuse_h
Diffuse on a horizontal surface [W/m2].
Definition: ERF_IBFaceSet.H:502
amrex::Real dni
Direct-normal irradiance [W/m2].
Definition: ERF_IBFaceSet.H:501
amrex::Real zenith
Definition: ERF_IBFaceSet.H:499
amrex::Real sy
Definition: ERF_IBFaceSet.H:500
amrex::Real sx
Definition: ERF_IBFaceSet.H:500
amrex::Real azimuth
[rad]
Definition: ERF_IBFaceSet.H:499
amrex::Real sz
Unit vector toward the sun.
Definition: ERF_IBFaceSet.H:500
The two-stream sun of the next compute_shortwave() (sun_mode = two_stream).
Definition: ERF_IBFaceSet.H:562
amrex::Real lat_deg
Definition: ERF_IBFaceSet.H:562
amrex::Real S0
Definition: ERF_IBFaceSet.H:562
amrex::Real decl
Definition: ERF_IBFaceSet.H:562
amrex::Real hour_angle
Definition: ERF_IBFaceSet.H:562
bool set
Definition: ERF_IBFaceSet.H:562
Definition: ERF_IBSEBParams.H:25
int n_slab_layers
Conduction layers per face.
Definition: ERF_IBSEBParams.H:27
The fields a level's faces read for one step: the beam and the cosine of the zenith the sweep of that...
Definition: ERF_TwoStreamCanopyForcing.H:45