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>
9 #include <AMReX_iMultiFab.H>
120 void build (
const amrex::MultiFab& blanking,
const amrex::Geometry& geom);
155 m_ts_sun = {
true, declination, hour_angle, latitude_deg, toa_irradiance};
293 const amrex::MultiFab* olen_ground =
nullptr,
294 const amrex::MultiFab* pblh_ground =
nullptr,
360 void scatter_field (
const amrex::Gpu::DeviceVector<amrex::Real>& v, amrex::MultiFab& out)
const;
367 void dump_faces (
const std::string& prefix)
const;
456 amrex::Gpu::DeviceVector<int>
d_dir;
458 amrex::Gpu::DeviceVector<int>
d_bid;
459 amrex::Gpu::DeviceVector<int>
d_mat;
462 amrex::Gpu::DeviceVector<amrex::Real>
d_area;
472 amrex::Gpu::DeviceVector<amrex::Real>
d_Q_ext;
479 amrex::Gpu::DeviceVector<amrex::Real>
d_T_air;
482 amrex::Gpu::DeviceVector<amrex::Real>
d_rho;
483 amrex::Gpu::DeviceVector<amrex::Real>
d_U_tan;
484 amrex::Gpu::DeviceVector<amrex::Real>
d_ustar;
487 amrex::Gpu::DeviceVector<amrex::Real>
d_hbld;
489 amrex::Gpu::DeviceVector<amrex::Real>
d_olen;
490 amrex::Gpu::DeviceVector<amrex::Real>
d_z_i;
493 amrex::Gpu::DeviceVector<amrex::Real>
d_resid;
509 amrex::IntVect
m_halo{AMREX_D_DECL(0, 0, 0)};
564 void build_ray_map (
const std::vector<const IBFaceSet*>& below);
Material library of the building faces.
Inputs of the immersed-boundary surface energy balance (erf.ibseb.*).
Sun position, clear-sky shortwave, and the ray cast that decides whether a building face is in shadow...
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:88
int m_lev
AMR level, for reports.
Definition: ERF_IBFaceSet.H:568
ibseb::RayMap ray_map() const
Definition: ERF_IBFaceSet.cpp:768
amrex::Gpu::DeviceVector< amrex::Real > d_resid
|balance| after the solve [W/m2]
Definition: ERF_IBFaceSet.H:493
amrex::Gpu::DeviceVector< amrex::Real > d_theta_air
Potential temperature of the fluid cell [K].
Definition: ERF_IBFaceSet.H:481
void dump_faces(const std::string &prefix) const
Definition: ERF_IBFaceSet.cpp:1630
void release_labels()
Definition: ERF_IBFaceSet.H:183
IBFaceSet(const IBSEBParams ¶ms, int lev, int qv_comp=-1)
Definition: ERF_IBFaceSet.H:100
std::vector< int > m_bld_jhi
Definition: ERF_IBFaceSet.H:582
amrex::Gpu::DeviceVector< amrex::Real > d_hbld
Height of the face's building column [m].
Definition: ERF_IBFaceSet.H:487
amrex::iMultiFab m_ray_patch
Definition: ERF_IBFaceSet.H:507
int m_ny
Definition: ERF_IBFaceSet.H:592
amrex::Gpu::DeviceVector< amrex::Real > d_shadow
1 when the ray to the sun hits a building, else 0
Definition: ERF_IBFaceSet.H:474
double m_cost_s
Wall-clock seconds spent in the per-step update on this rank.
Definition: ERF_IBFaceSet.H:603
amrex::Gpu::DeviceVector< amrex::Real > d_yf
Definition: ERF_IBFaceSet.H:463
amrex::Gpu::DeviceVector< amrex::Real > d_thick
Slab conductivity [W/m/K], heat capacity [J/m3/K], thickness [m].
Definition: ERF_IBFaceSet.H:461
amrex::iMultiFab m_lab
Definition: ERF_IBFaceSet.H:588
amrex::Gpu::DeviceVector< int > d_k
Fluid cell of the face.
Definition: ERF_IBFaceSet.H:455
amrex::Gpu::DeviceVector< amrex::Real > d_H
Definition: ERF_IBFaceSet.H:471
std::vector< amrex::Long > m_bld_ncol
Definition: ERF_IBFaceSet.H:581
amrex::Gpu::DeviceVector< amrex::Real > d_albedo
Definition: ERF_IBFaceSet.H:460
amrex::Gpu::DeviceVector< amrex::Real > d_SW_abs
Definition: ERF_IBFaceSet.H:471
const std::vector< int > & fab_start() const
Definition: ERF_IBFaceSet.H:541
int building_level0(int b) const
Definition: ERF_IBFaceSet.H:180
amrex::Real m_col_top_max
Tallest column the ray map holds [m] (the levels below included after add_outside_occluders())
Definition: ERF_IBFaceSet.H:597
void compute_longwave_two_stream(const amrex::MultiFab &cons, const TwoStreamCanopyView &canopy)
Definition: ERF_IBFaceSet.cpp:988
amrex::Gpu::DeviceVector< int > d_mat
Material id (0 = uniform inputs)
Definition: ERF_IBFaceSet.H:459
void print_debug_summary() const
Definition: ERF_IBFaceSet.cpp:1688
void compute_view_fractions()
Definition: ERF_IBFaceSet.cpp:886
amrex::Gpu::DeviceVector< amrex::Real > d_LW_ext
Incoming longwave from sky and ground only [W/m2].
Definition: ERF_IBFaceSet.H:492
const SunState & sun() const
Definition: ERF_IBFaceSet.H:521
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:1234
bool m_per_x
Definition: ERF_IBFaceSet.H:596
amrex::Long m_nface_dir[3]
Faces per direction.
Definition: ERF_IBFaceSet.H:578
std::vector< int > m_bld_jlo
Definition: ERF_IBFaceSet.H:582
int m_nz
Cells of the domain in x, y and z.
Definition: ERF_IBFaceSet.H:592
std::vector< int > m_to_lev0
Definition: ERF_IBFaceSet.H:587
amrex::Box m_patch_box
This rank's patch (empty without boxes)
Definition: ERF_IBFaceSet.H:508
amrex::IntVect m_halo
Halo of the patch in cells.
Definition: ERF_IBFaceSet.H:509
amrex::Gpu::DeviceVector< amrex::Real > d_w_star
Convective velocity scale of the step [m/s].
Definition: ERF_IBFaceSet.H:488
amrex::Gpu::DeviceVector< amrex::Real > d_area
Face area [m2].
Definition: ERF_IBFaceSet.H:462
void compute_shortwave_two_stream(const TwoStreamCanopyView &canopy)
Definition: ERF_IBFaceSet.cpp:1508
amrex::Gpu::DeviceVector< amrex::Real > d_rho
Density of the fluid cell [kg/m3].
Definition: ERF_IBFaceSet.H:482
void read_state(const std::string &file)
Definition: ERF_IBFaceSet.cpp:1909
void build_ray_map(const std::vector< const IBFaceSet * > &below)
Definition: ERF_IBFaceSet.cpp:624
amrex::Gpu::DeviceVector< amrex::Real > d_T_skin
Skin temperature [K].
Definition: ERF_IBFaceSet.H:465
amrex::Gpu::DeviceVector< amrex::Real > d_LW_net
Definition: ERF_IBFaceSet.H:471
amrex::Gpu::DeviceVector< amrex::Real > d_emis
Optical properties of the face.
Definition: ERF_IBFaceSet.H:460
void add_outside_occluders(const std::vector< const IBFaceSet * > &below)
Definition: ERF_IBFaceSet.cpp:791
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:490
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:1357
void compute_ground(amrex::Real dt)
Definition: ERF_IBFaceSet.cpp:1123
void solve_balance(amrex::Real dt)
Definition: ERF_IBFaceSet.cpp:1151
amrex::Gpu::DeviceVector< int > d_side
Solid neighbour at -1 (low) or +1 (high) side.
Definition: ERF_IBFaceSet.H:457
SunState m_sun
Definition: ERF_IBFaceSet.H:599
int m_top_sample
Highest interface a face samples, over all ranks (-1: no faces)
Definition: ERF_IBFaceSet.H:571
std::vector< amrex::Real > m_bld_area
Face area per building [m2].
Definition: ERF_IBFaceSet.H:577
void build(const amrex::MultiFab &blanking, const amrex::Geometry &geom)
Definition: ERF_IBFaceSet.cpp:178
amrex::Gpu::DeviceVector< int > d_niter
Newton iterations of the last solve.
Definition: ERF_IBFaceSet.H:494
amrex::Gpu::DeviceVector< amrex::Real > d_SW_diffuse_in
Sky and ground-reflected diffuse incident.
Definition: ERF_IBFaceSet.H:476
amrex::Gpu::DeviceVector< amrex::Real > d_f_sky
Definition: ERF_IBFaceSet.H:468
amrex::iMultiFab m_col_valid
Definition: ERF_IBFaceSet.H:501
amrex::Gpu::DeviceVector< amrex::Real > d_olen
Obukhov length used [m] (1e30 when neutral)
Definition: ERF_IBFaceSet.H:489
amrex::Real m_z_ground
Ground height [m] (flat, the domain bottom)
Definition: ERF_IBFaceSet.H:598
amrex::Gpu::DeviceVector< int > d_dir
Face direction: 0 x, 1 y, 2 z.
Definition: ERF_IBFaceSet.H:456
int m_qv_comp
State component of rho qv, -1 without a moisture model.
Definition: ERF_IBFaceSet.H:569
amrex::Gpu::DeviceVector< amrex::Real > d_f_bldg
View fractions, sum to 1.
Definition: ERF_IBFaceSet.H:468
int m_max_steps
Columns a walk is followed for: the halo's reach in x plus y, before the domain cap.
Definition: ERF_IBFaceSet.H:512
void warn_fixed_sun_below_floor() const
Definition: ERF_IBFaceSet.cpp:754
void check_canopy_layout(const amrex::MultiFab &cons, const TwoStreamCanopyView &canopy) const
Definition: ERF_IBFaceSet.cpp:1039
double m_init_cost_s
Wall-clock seconds of build() and compute_view_fractions()
Definition: ERF_IBFaceSet.H:605
bool has_faces() const
Definition: ERF_IBFaceSet.H:340
bool m_wrap_y
The patch spans the periodic domain in x / y.
Definition: ERF_IBFaceSet.H:510
std::vector< int > m_bld_ilo
Definition: ERF_IBFaceSet.H:582
amrex::Long m_cost_n
Number of per-step updates timed.
Definition: ERF_IBFaceSet.H:604
TwoStreamSun m_ts_sun
Definition: ERF_IBFaceSet.H:602
void map_buildings_to_level0(const IBFaceSet &coarser, const amrex::IntVect &ratio)
Definition: ERF_IBFaceSet.cpp:814
amrex::Gpu::DeviceVector< amrex::Real > d_T_slab
Slab layers [K], face-major: [face * n_layers + layer].
Definition: ERF_IBFaceSet.H:466
amrex::IntVect ray_halo() const
Definition: ERF_IBFaceSet.H:193
int n_layers() const
Definition: ERF_IBFaceSet.H:203
void scatter_diagnostics(amrex::MultiFab &nfaces, amrex::MultiFab &tskin) const
Definition: ERF_IBFaceSet.cpp:1730
amrex::Real m_y_lo
Domain origin [m].
Definition: ERF_IBFaceSet.H:594
amrex::Gpu::DeviceVector< amrex::Real > d_SW_direct_in
Direct beam incident on the face.
Definition: ERF_IBFaceSet.H:475
void compute_longwave(const amrex::MultiFab &cons, const TwoStreamCanopyView &canopy=TwoStreamCanopyView{})
Definition: ERF_IBFaceSet.cpp:935
void add_cost(double seconds)
Definition: ERF_IBFaceSet.H:532
bool m_map_spans_domain
Every rank's patch spans the domain.
Definition: ERF_IBFaceSet.H:511
int n_buildings() const
Definition: ERF_IBFaceSet.H:201
amrex::Gpu::DeviceVector< amrex::Real > d_G
Definition: ERF_IBFaceSet.H:471
void scatter_field(const amrex::Gpu::DeviceVector< amrex::Real > &v, amrex::MultiFab &out) const
Definition: ERF_IBFaceSet.cpp:1601
amrex::Gpu::DeviceVector< amrex::Real > d_T_air
Air temperature of the fluid cell.
Definition: ERF_IBFaceSet.H:479
int m_nface
Faces owned by this rank.
Definition: ERF_IBFaceSet.H:570
int top_sample_interface() const
Definition: ERF_IBFaceSet.H:337
amrex::Gpu::DeviceVector< amrex::Real > d_Q_ext
External incident flux [W/m2], e.g. fire radiation.
Definition: ERF_IBFaceSet.H:472
amrex::Real m_area_total
Total face area [m2].
Definition: ERF_IBFaceSet.H:579
int n_faces() const
Definition: ERF_IBFaceSet.H:199
bool m_per_y
Periodicity in x and y.
Definition: ERF_IBFaceSet.H:596
amrex::Gpu::DeviceVector< amrex::Real > d_f_ground
Definition: ERF_IBFaceSet.H:468
amrex::Gpu::DeviceVector< int > d_j
Definition: ERF_IBFaceSet.H:455
void set_init_cost(double seconds)
Definition: ERF_IBFaceSet.H:534
int m_nx
Definition: ERF_IBFaceSet.H:592
void report(amrex::Real time, int step, bool write_csv) const
Definition: ERF_IBFaceSet.cpp:2066
amrex::Gpu::DeviceVector< int > d_bid
Building id (1-based)
Definition: ERF_IBFaceSet.H:458
amrex::Gpu::DeviceVector< amrex::Real > d_LE
Definition: ERF_IBFaceSet.H:471
std::vector< int > m_fab_start
See fab_start()
Definition: ERF_IBFaceSet.H:573
amrex::Gpu::DeviceVector< amrex::Real > d_H_coeff
H = H_coeff (theta_skin - theta_air) [W/m2/K].
Definition: ERF_IBFaceSet.H:485
int m_nbld
Buildings of the level (global)
Definition: ERF_IBFaceSet.H:572
amrex::Real m_dx[3]
Cell sizes [m].
Definition: ERF_IBFaceSet.H:595
void assign_materials()
Definition: ERF_IBFaceSet.cpp:1073
amrex::Gpu::DeviceVector< amrex::Real > d_xf
Definition: ERF_IBFaceSet.H:463
void set_two_stream_sun(amrex::Real declination, amrex::Real hour_angle, amrex::Real latitude_deg, amrex::Real toa_irradiance)
Definition: ERF_IBFaceSet.H:152
bool m_wrap_x
Definition: ERF_IBFaceSet.H:510
amrex::Gpu::DeviceVector< amrex::Real > d_zf
Face centre [m].
Definition: ERF_IBFaceSet.H:463
IBSEBParams m_params
Copy of the inputs.
Definition: ERF_IBFaceSet.H:567
void write_state(const std::string &file) const
Definition: ERF_IBFaceSet.cpp:1818
amrex::Geometry m_geom
Geometry of the level.
Definition: ERF_IBFaceSet.H:591
void compute_shortwave(amrex::Real time, const TwoStreamCanopyView &canopy=TwoStreamCanopyView{})
Definition: ERF_IBFaceSet.cpp:1402
std::vector< amrex::Long > m_bld_nface
Faces per building.
Definition: ERF_IBFaceSet.H:576
amrex::Gpu::DeviceVector< amrex::Real > d_LW_down_in
Incoming longwave on the face (sky, ground and walls)
Definition: ERF_IBFaceSet.H:478
amrex::IntVect m_dom_lo
Low corner of the level's domain.
Definition: ERF_IBFaceSet.H:593
std::vector< int > m_bld_ihi
Definition: ERF_IBFaceSet.H:582
amrex::Real m_x_lo
Definition: ERF_IBFaceSet.H:594
amrex::Gpu::DeviceVector< amrex::Real > d_rhocp
Definition: ERF_IBFaceSet.H:461
bool ray_map_spans_domain() const
Definition: ERF_IBFaceSet.H:196
amrex::Gpu::DeviceVector< int > d_i
Definition: ERF_IBFaceSet.H:455
amrex::Gpu::DeviceVector< amrex::Real > d_ustar
Friction velocity of the wall function [m/s].
Definition: ERF_IBFaceSet.H:484
amrex::Gpu::DeviceVector< amrex::Real > d_kth
Definition: ERF_IBFaceSet.H:461
amrex::Gpu::DeviceVector< amrex::Real > d_U_tan
Tangential wind speed at the fluid cell [m/s].
Definition: ERF_IBFaceSet.H:483
@ xvel
Definition: ERF_IndexDefines.H:255
@ cons
Definition: ERF_IndexDefines.H:254
@ zvel
Definition: ERF_IndexDefines.H:257
@ yvel
Definition: ERF_IndexDefines.H:256
Sun and irradiances of the last compute_shortwave() call, for reports.
Definition: ERF_IBFaceSet.H:515
amrex::Real diffuse_h
Diffuse on a horizontal surface [W/m2].
Definition: ERF_IBFaceSet.H:519
amrex::Real dni
Direct-normal irradiance [W/m2].
Definition: ERF_IBFaceSet.H:518
amrex::Real zenith
Definition: ERF_IBFaceSet.H:516
amrex::Real sy
Definition: ERF_IBFaceSet.H:517
amrex::Real sx
Definition: ERF_IBFaceSet.H:517
amrex::Real azimuth
[rad]
Definition: ERF_IBFaceSet.H:516
amrex::Real sz
Unit vector toward the sun.
Definition: ERF_IBFaceSet.H:517
The two-stream sun of the next compute_shortwave() (sun_mode = two_stream).
Definition: ERF_IBFaceSet.H:601
amrex::Real lat_deg
Definition: ERF_IBFaceSet.H:601
amrex::Real S0
Definition: ERF_IBFaceSet.H:601
amrex::Real decl
Definition: ERF_IBFaceSet.H:601
amrex::Real hour_angle
Definition: ERF_IBFaceSet.H:601
bool set
Definition: ERF_IBFaceSet.H:601
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
Definition: ERF_IBSEBSolar.H:219