12#ifdef REMORA_USE_NETCDF
17 FArrayBox& NC_temp_fab, FArrayBox& NC_salt_fab,
18 FArrayBox& NC_xvel_fab, FArrayBox& NC_yvel_fab,
19 FArrayBox& NC_ubar_fab, FArrayBox& NC_vbar_fab);
24 FArrayBox& NC_mskr_fab, FArrayBox& NC_msku_fab,
25 FArrayBox& NC_mskv_fab);
30 Vector<Vector<FArrayBox>>& bdy_data_xlo,
31 Vector<Vector<FArrayBox>>& bdy_data_xhi,
32 Vector<Vector<FArrayBox>>& bdy_data_ylo,
33 Vector<Vector<FArrayBox>>& bdy_data_yhi,
34 int& width, amrex::Real& start_bdy_time,
35 std::string bdry_time_varname,
41 FArrayBox& temp_fab, FArrayBox& salt_fab,
42 FArrayBox& x_vel_fab, FArrayBox& y_vel_fab,
43 FArrayBox& ubar_fab, FArrayBox& vbar_fab,
44 const Vector<FArrayBox>& NC_temp_fab,
45 const Vector<FArrayBox>& NC_salt_fab,
46 const Vector<FArrayBox>& NC_xvel_fab,
47 const Vector<FArrayBox>& NC_yvel_fab,
48 const Vector<FArrayBox>& NC_ubar_fab,
49 const Vector<FArrayBox>& NC_vbar_fab);
55 FArrayBox& NC_pm_fab, FArrayBox& NC_pn_fab,
56 FArrayBox& NC_xr_fab, FArrayBox& NC_yr_fab,
57 FArrayBox& NC_xu_fab, FArrayBox& NC_yu_fab,
58 FArrayBox& NC_xv_fab, FArrayBox& NC_yv_fab,
59 FArrayBox& NC_xp_fab, FArrayBox& NC_yp_fab);
68 FArrayBox& NC_zeta_fab);
75 bool do_temp_clim_nudg,
76 bool do_salt_clim_nudg,
77 FArrayBox& NC_M2NC_fab,
78 FArrayBox& NC_M3NC_fab,
79 FArrayBox& NC_TempNC_fab,
80 FArrayBox& NC_SaltNC_fab);
84void read_vec_from_netcdf (
int lev,
const std::string& fname,
const std::string& field_name, amrex::Vector<int>& vec_dat);
103 NC_temp_fab[idx], NC_salt_fab[idx],
104 NC_xvel_fab[idx], NC_yvel_fab[idx],
105 NC_ubar_fab[idx], NC_vbar_fab[idx]);
113#pragma omp parallel if (amrex::Gpu::notInLaunchRegion())
117 for ( MFIter mfi(*
cons_new[lev],
false); mfi.isValid(); ++mfi )
120 FArrayBox &temp_fab = mf_temp[mfi];
121 FArrayBox &salt_fab = mf_salt[mfi];
122 FArrayBox &xvel_fab = (*
xvel_new[lev])[mfi];
123 FArrayBox &yvel_fab = (*
yvel_new[lev])[mfi];
124 FArrayBox &ubar_fab = (*
vec_ubar[lev])[mfi];
125 FArrayBox &vbar_fab = (*
vec_vbar[lev])[mfi];
130 NC_temp_fab, NC_salt_fab,
131 NC_xvel_fab, NC_yvel_fab,
132 NC_ubar_fab, NC_vbar_fab);
152#pragma omp parallel if (amrex::Gpu::notInLaunchRegion())
156 for ( MFIter mfi(*
cons_new[lev],
false); mfi.isValid(); ++mfi )
158 FArrayBox &zeta_fab = (*
vec_zeta[lev])[mfi];
165 zeta_fab.template copy<RunOn::Device>(NC_zeta_fab[idx],0,0,1);
169 vec_zeta[lev]->FillBoundary(geom[lev].periodicity());
174 Real told =
t_new[lev];
203 NC_pm_fab[idx], NC_pn_fab[idx],
204 NC_xr_fab[idx], NC_yr_fab[idx],
205 NC_xu_fab[idx], NC_yu_fab[idx],
206 NC_xv_fab[idx], NC_yv_fab[idx],
207 NC_xp_fab[idx], NC_yp_fab[idx]);
210#pragma omp parallel if (amrex::Gpu::notInLaunchRegion())
214 for ( MFIter mfi(*
cons_new[lev],
false); mfi.isValid(); ++mfi )
217 FArrayBox &pm_fab = (*
vec_pm[lev])[mfi];
218 FArrayBox &pn_fab = (*
vec_pn[lev])[mfi];
219 FArrayBox &xr_fab = (*
vec_xr[lev])[mfi];
220 FArrayBox &yr_fab = (*
vec_yr[lev])[mfi];
221 FArrayBox &xu_fab = (*
vec_xu[lev])[mfi];
222 FArrayBox &yu_fab = (*
vec_yu[lev])[mfi];
223 FArrayBox &xv_fab = (*
vec_xv[lev])[mfi];
224 FArrayBox &yv_fab = (*
vec_yv[lev])[mfi];
225 FArrayBox &xp_fab = (*
vec_xp[lev])[mfi];
226 FArrayBox &yp_fab = (*
vec_yp[lev])[mfi];
234 h_fab.template copy<RunOn::Device>(NC_h_fab[idx],0,0,1);
235 h_fab.template copy<RunOn::Device>(NC_h_fab[idx],0,1,1);
237 pm_fab.template copy<RunOn::Device>(NC_pm_fab[idx]);
238 pn_fab.template copy<RunOn::Device>(NC_pn_fab[idx]);
240 xr_fab.template copy<RunOn::Device>(NC_xr_fab[idx]);
241 yr_fab.template copy<RunOn::Device>(NC_yr_fab[idx]);
242 xu_fab.template copy<RunOn::Device>(NC_xu_fab[idx]);
243 yu_fab.template copy<RunOn::Device>(NC_yu_fab[idx]);
244 xv_fab.template copy<RunOn::Device>(NC_xv_fab[idx]);
245 yv_fab.template copy<RunOn::Device>(NC_yv_fab[idx]);
246 xp_fab.template copy<RunOn::Device>(NC_xp_fab[idx]);
247 yp_fab.template copy<RunOn::Device>(NC_yp_fab[idx]);
252 const double dummy_time = 0.0_rt;
262 int ng =
vec_pm[lev]->nGrow();
264 const auto& dom_lo = amrex::lbound(geom[lev].Domain());
265 const auto& dom_hi = amrex::ubound(geom[lev].Domain());
274 vec_pm[lev]->FillBoundary(geom[lev].periodicity());
275 vec_pn[lev]->FillBoundary(geom[lev].periodicity());
277 vec_xr[lev]->FillBoundary(geom[lev].periodicity());
278 vec_yr[lev]->FillBoundary(geom[lev].periodicity());
279 vec_xu[lev]->FillBoundary(geom[lev].periodicity());
280 vec_yu[lev]->FillBoundary(geom[lev].periodicity());
281 vec_xv[lev]->FillBoundary(geom[lev].periodicity());
282 vec_yv[lev]->FillBoundary(geom[lev].periodicity());
283 vec_xp[lev]->FillBoundary(geom[lev].periodicity());
284 vec_yp[lev]->FillBoundary(geom[lev].periodicity());
286 for ( MFIter mfi(*
vec_pm[lev]); mfi.isValid(); ++mfi )
288 Box bx = mfi.tilebox();
290 auto pm_fab =
vec_pm[lev]->array(mfi);
291 auto pn_fab =
vec_pn[lev]->array(mfi);
293 Box gbx_lox = adjCellLo(bx,0,ng); gbx_lox.grow(1,ng); gbx_lox.setBig (0,dom_lo.x-2);
294 Box gbx_hix = adjCellHi(bx,0,ng); gbx_hix.grow(1,ng); gbx_hix.setSmall(0,dom_hi.x+2);
295 Box gbx_loy = adjCellLo(bx,1,ng); gbx_loy.grow(0,ng); gbx_loy.setBig (1,dom_lo.y-2);
296 Box gbx_hiy = adjCellHi(bx,1,ng); gbx_hiy.grow(0,ng); gbx_hiy.setSmall(1,dom_hi.y+2);
304 ParallelFor(gbx_lox, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k)
306 pm_fab(i,j,k,0) = pm_fab(dom_lo.x-1,j,k,0);
307 pn_fab(i,j,k,0) = pn_fab(dom_lo.x-1,j,k,0);
311 ParallelFor(gbx_hix, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k)
313 pm_fab(i,j,k,0) = pm_fab(dom_hi.x+1,j,k,0);
314 pn_fab(i,j,k,0) = pn_fab(dom_hi.x+1,j,k,0);
318 ParallelFor(gbx_loy, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k)
320 pm_fab(i,j,k,0) = pm_fab(i,dom_lo.y-1,k,0);
321 pn_fab(i,j,k,0) = pn_fab(i,dom_lo.y-1,k,0);
325 ParallelFor(gbx_hiy, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k)
327 pm_fab(i,j,k,0) = pm_fab(i,dom_hi.y+1,k,0);
328 pn_fab(i,j,k,0) = pn_fab(i,dom_hi.y+1,k,0);
351#pragma omp parallel if (amrex::Gpu::notInLaunchRegion())
355 for ( MFIter mfi(*
cons_new[lev],
false); mfi.isValid(); ++mfi )
357 FArrayBox &fcor_fab = (*
vec_fcor[lev])[mfi];
364 fcor_fab.template copy<RunOn::Device>(NC_fcor_fab[idx]);
368 vec_fcor[lev]->FillBoundary(geom[lev].periodicity());
385 NC_mskr_fab[idx],NC_msku_fab[idx],
389#pragma omp parallel if (amrex::Gpu::notInLaunchRegion())
393 for ( MFIter mfi(*
cons_new[lev],
false); mfi.isValid(); ++mfi )
395 FArrayBox &mskr_fab = (*
vec_mskr[lev])[mfi];
396 FArrayBox &msku_fab = (*
vec_msku[lev])[mfi];
397 FArrayBox &mskv_fab = (*
vec_mskv[lev])[mfi];
404 mskr_fab.template copy<RunOn::Device>(NC_mskr_fab[idx]);
405 msku_fab.template copy<RunOn::Device>(NC_msku_fab[idx]);
406 mskv_fab.template copy<RunOn::Device>(NC_mskv_fab[idx]);
412 vec_mskr[lev]->FillBoundary(geom[lev].periodicity());
413 vec_msku[lev]->FillBoundary(geom[lev].periodicity());
414 vec_mskv[lev]->FillBoundary(geom[lev].periodicity());
415 vec_mskp[lev]->FillBoundary(geom[lev].periodicity());
425 amrex::Error(
"NetCDF boundary file name must be provided via input");
429 for (
int ifile = 0; ifile <
nc_bdry_file.size(); ifile++) {
442 amrex::Print() <<
"Read in boundary data with width " << width;
467 FArrayBox& temp_fab, FArrayBox& salt_fab,
468 FArrayBox& x_vel_fab, FArrayBox& y_vel_fab,
469 FArrayBox& ubar_fab, FArrayBox& vbar_fab,
470 const Vector<FArrayBox>& NC_temp_fab,
471 const Vector<FArrayBox>& NC_salt_fab,
472 const Vector<FArrayBox>& NC_xvel_fab,
473 const Vector<FArrayBox>& NC_yvel_fab,
474 const Vector<FArrayBox>& NC_ubar_fab,
475 const Vector<FArrayBox>& NC_vbar_fab)
477 int nboxes = NC_xvel_fab.size();
478 for (
int idx = 0; idx < nboxes; idx++)
484 temp_fab.template copy<RunOn::Device>(NC_temp_fab[idx]);
485 salt_fab.template copy<RunOn::Device>(NC_salt_fab[idx]);
486 x_vel_fab.template copy<RunOn::Device>(NC_xvel_fab[idx]);
487 y_vel_fab.template copy<RunOn::Device>(NC_yvel_fab[idx]);
488 ubar_fab.template copy<RunOn::Device>(NC_ubar_fab[idx],0,0,1);
489 vbar_fab.template copy<RunOn::Device>(NC_vbar_fab[idx],0,0,1);
512 NC_M2NC_fab[idx],NC_M3NC_fab[idx],
513 NC_TempNC_fab[idx],NC_SaltNC_fab[idx]);
516#pragma omp parallel if (amrex::Gpu::notInLaunchRegion())
520 for ( MFIter mfi(*
cons_new[lev],
false); mfi.isValid(); ++mfi )
524 ubarNC_fab.template copy<RunOn::Device>(NC_M2NC_fab[idx]);
526 vbarNC_fab.template copy<RunOn::Device>(NC_M2NC_fab[idx]);
530 uNC_fab.template copy<RunOn::Device>(NC_M3NC_fab[idx]);
532 vNC_fab.template copy<RunOn::Device>(NC_M3NC_fab[idx]);
536 TempNC_fab.template copy<RunOn::Device>(NC_TempNC_fab[idx]);
540 SaltNC_fab.template copy<RunOn::Device>(NC_SaltNC_fab[idx]);
575 amrex::Vector<int> river_pos_x;
576 amrex::Vector<int> river_pos_y;
577 amrex::Vector<int> river_direction_tmp;
579 std::string river_x_name =
"river_Xposition";
580 std::string river_y_name =
"river_Eposition";
581 std::string river_dir_name =
"river_direction";
587 int nriv = river_pos_x.size();
588 amrex::Gpu::DeviceVector<int> xpos_d(nriv);
589 amrex::Gpu::DeviceVector<int> ypos_d(nriv);
592 Gpu::htod_memcpy(xpos_d.data(), river_pos_x.data(),
sizeof(
int)*nriv);
593 Gpu::htod_memcpy(ypos_d.data(), river_pos_y.data(),
sizeof(
int)*nriv);
594 Gpu::htod_memcpy(
river_direction.data(), river_direction_tmp.data(),
sizeof(
int)*nriv);
596 std::memcpy(xpos_d.data(), river_pos_x.data(),
sizeof(
int)*nriv);
597 std::memcpy(ypos_d.data(), river_pos_y.data(),
sizeof(
int)*nriv);
598 std::memcpy(
river_direction.data(), river_direction_tmp.data(),
sizeof(
int)*nriv);
600 const int* xpos_ptr = xpos_d.data();
601 const int* ypos_ptr = ypos_d.data();
603 for (amrex::MFIter mfi(*(
vec_river_position[lev]).get(),
true); mfi.isValid(); ++mfi) {
604 amrex::Box bx = mfi.growntilebox(amrex::IntVect(
NGROW,
NGROW,0));
606 ParallelFor(bx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int ) {
607 for (
int iriv=0; iriv < nriv; iriv++) {
608 int xriv = xpos_ptr[iriv]-1;
609 int yriv = ypos_ptr[iriv]-1;
610 if (i==xriv && j==yriv) {
611 river_pos(i,j,0) = iriv;
623 Real inv_days_to_inv_s = 1.0_rt / (3600._rt * 24._rt);
625 for ( MFIter mfi(*mf, TilingIfNotGPU()); mfi.isValid(); ++mfi )
627 Array4<Real>
const& arr = mf->array(mfi);
628 Box bx = mfi.growntilebox(IntVect(
NGROW,
NGROW,0));
629 ParallelFor(bx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) {
630 arr(i,j,k) *= inv_days_to_inv_s;
void init_state_from_netcdf(int lev, FArrayBox &temp_fab, FArrayBox &salt_fab, FArrayBox &x_vel_fab, FArrayBox &y_vel_fab, FArrayBox &ubar_fab, FArrayBox &vbar_fab, const Vector< FArrayBox > &NC_temp_fab, const Vector< FArrayBox > &NC_salt_fab, const Vector< FArrayBox > &NC_xvel_fab, const Vector< FArrayBox > &NC_yvel_fab, const Vector< FArrayBox > &NC_ubar_fab, const Vector< FArrayBox > &NC_vbar_fab)
helper function to initialize state from netcdf
void read_coriolis_from_netcdf(int lev, const Box &domain, const std::string &fname, FArrayBox &NC_fcor_fab)
helper function to read coriolis factor from netcdf
void read_vec_from_netcdf(int lev, const std::string &fname, const std::string &field_name, amrex::Vector< int > &vec_dat)
helper function to read in vector of data from netcdf
void read_data_from_netcdf(int, const Box &domain, const std::string &fname, FArrayBox &NC_temp_fab, FArrayBox &NC_salt_fab, FArrayBox &NC_xvel_fab, FArrayBox &NC_yvel_fab, FArrayBox &NC_ubar_fab, FArrayBox &NC_vbar_fab)
helper function for reading in initial state data from netcdf
void read_zeta_from_netcdf(int lev, const Box &domain, const std::string &fname, FArrayBox &NC_zeta_fab)
helper function to read sea surface height from netcdf
Real read_bdry_from_netcdf(const Box &domain, const std::string &fname, Vector< Vector< FArrayBox > > &bdy_data_xlo, Vector< Vector< FArrayBox > > &bdy_data_xhi, Vector< Vector< FArrayBox > > &bdy_data_ylo, Vector< Vector< FArrayBox > > &bdy_data_yhi, int &width, amrex::Real &start_bdy_time, std::string bdry_time_varname, amrex::GpuArray< amrex::GpuArray< bool, AMREX_SPACEDIM *2 >, BdyVars::NumTypes+1 > &)
helper function for reading boundary data from netcdf
void read_masks_from_netcdf(int, const Box &domain, const std::string &fname, FArrayBox &NC_mskr_fab, FArrayBox &NC_msku_fab, FArrayBox &NC_mskv_fab)
helper function for reading in land-sea masks from netcdf
void read_bathymetry_from_netcdf(int lev, const Box &domain, const std::string &fname, FArrayBox &NC_h_fab, FArrayBox &NC_pm_fab, FArrayBox &NC_pn_fab, FArrayBox &NC_xr_fab, FArrayBox &NC_yr_fab, FArrayBox &NC_xu_fab, FArrayBox &NC_yu_fab, FArrayBox &NC_xv_fab, FArrayBox &NC_yv_fab, FArrayBox &NC_xp_fab, FArrayBox &NC_yp_fab)
helper function to read bathymetry from netcdf
void read_clim_nudg_coeff_from_netcdf(int lev, const Box &domain, const std::string &fname, bool do_m2_clim_nudg, bool do_m3_clim_nudg, bool do_temp_clim_nudg, bool do_salt_clim_nudg, FArrayBox &NC_M2NC_fab, FArrayBox &NC_M3NC_fab, FArrayBox &NC_TempNC_fab, FArrayBox &NC_SaltNC_fab)
helper function to read climatology nudging from netcdf
void init_bathymetry_from_netcdf(int lev)
Bathymetry data initialization from NetCDF file.
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_fcor
coriolis factor (2D)
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_hOfTheConfusingName
Bathymetry data (2D, positive valued, h in ROMS)
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_pm
horizontal scaling factor: 1 / dx (2D)
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_yv
y_grid on v-points (2D)
amrex::Vector< amrex::MultiFab * > cons_new
multilevel data container for current step's scalar data: temperature, salinity, passive scalar
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_mskr
land/sea mask at cell centers (2D)
std::string bdry_time_varname
Name of time field for boundary data.
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_yp
y_grid on psi-points (2D)
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_xr
x_grid on rho points (2D)
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_xv
x_grid on v-points (2D)
amrex::Vector< amrex::Vector< amrex::Box > > boxes_at_level
the boxes specified at each level by tagging criteria
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_msku
land/sea mask at x-faces (2D)
amrex::Vector< amrex::Vector< amrex::FArrayBox > > bdy_data_yhi
Vectors (over time) of Vector (over variables) of FArrayBoxs for holding Northern boundary data from ...
void init_data_from_netcdf(int lev)
Problem initialization from NetCDF file.
void init_masks_from_netcdf(int lev)
Mask data initialization from NetCDF file.
amrex::Vector< amrex::MultiFab * > yvel_new
multilevel data container for current step's y velocities (v in ROMS)
amrex::Real bdy_time_interval
Interval between boundary data times.
void init_bdry_from_netcdf()
Boundary data initialization from NetCDF file.
amrex::Real start_bdy_time
Start time in the time series of boundary data.
amrex::Vector< int > num_boxes_at_level
how many boxes specified at each level by tagging criteria
amrex::Vector< amrex::MultiFab * > xvel_new
multilevel data container for current step's x velocities (u in ROMS)
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_mskp
land/sea mask at cell corners (2D)
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_mskv
land/sea mask at y-faces (2D)
amrex::Vector< std::unique_ptr< REMORAPhysBCFunct > > physbcs
Vector (over level) of functors to apply physical boundary conditions.
void FillPatch(int lev, amrex::Real time, amrex::MultiFab &mf_to_be_filled, amrex::Vector< amrex::MultiFab * > const &mfs, const int bccomp, const int bdy_var_type=BdyVars::null, const int icomp=0, const bool fill_all=true, const bool fill_set=true, const int n_not_fill=0, const int icomp_calc=0, const amrex::Real dt=amrex::Real(0.0), const amrex::MultiFab &mf_calc=amrex::MultiFab())
Fill a new MultiFab by copying in phi from valid region and filling ghost cells.
amrex::Vector< amrex::Vector< amrex::FArrayBox > > bdy_data_ylo
Vectors (over time) of Vector (over variables) of FArrayBoxs for holding Southern boundary data from ...
std::string nc_clim_coeff_file
NetCDF climatology coefficient file.
void fill_from_bdyfiles(amrex::MultiFab &mf_to_fill, const amrex::MultiFab &mf_mask, const amrex::Real time, const int bccomp, const int bdy_var_type, const int icomp_to_fill, const int icomp_calc=0, const amrex::MultiFab &mf_calc=amrex::MultiFab(), const amrex::Real=amrex::Real(0.0))
Fill boundary data from netcdf file.
void init_riv_pos_from_netcdf(int lev)
static amrex::Vector< std::string > nc_bdry_file
NetCDF boundary data.
void update_mskp(int lev)
Set psi-point mask to be consistent with rho-point mask.
void init_zeta_from_netcdf(int lev)
Sea-surface height data initialization from NetCDF file.
void init_coriolis_from_netcdf(int lev)
Coriolis parameter data initialization from NetCDF file.
amrex::Vector< amrex::Real > t_new
new time at each level
static SolverChoice solverChoice
Container for algorithmic choices.
amrex::Vector< std::unique_ptr< amrex::iMultiFab > > vec_river_position
iMultiFab for river positions; contents are indices of rivers
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_xp
x_grid on psi-points (2D)
amrex::Vector< amrex::Vector< amrex::FArrayBox > > bdy_data_xhi
Vectors (over time) of Vector (over variables) of FArrayBoxs for holding Eastern boundary data from f...
static amrex::Vector< amrex::Vector< std::string > > nc_grid_file
NetCDF grid file.
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_zeta
free surface height (2D)
amrex::Gpu::DeviceVector< int > river_direction
Vector over rivers of river direction: 0: u-face; 1: v-face; 2: w-face.
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_vbar
barotropic y velocity (2D)
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_ubar
barotropic x velocity (2D)
void init_clim_nudg_coeff_from_netcdf(int lev)
Climatology nudging coefficient initialization from NetCDF file.
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_yu
y_grid on u-points (2D)
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_xu
x_grid on u-points (2D)
amrex::GpuArray< amrex::GpuArray< bool, AMREX_SPACEDIM *2 >, BdyVars::NumTypes+1 > phys_bc_need_data
These are flags that indicate whether we need to read in boundary data from file.
amrex::Vector< amrex::Vector< std::unique_ptr< amrex::MultiFab > > > vec_nudg_coeff
Climatology nudging coefficients.
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_pn
horizontal scaling factor: 1 / dy (2D)
amrex::Vector< amrex::Vector< amrex::FArrayBox > > bdy_data_xlo
Vectors (over time) of Vector (over variables) of FArrayBoxs for holding Western boundary data from f...
static amrex::Vector< amrex::Vector< std::string > > nc_init_file
NetCDF initialization file.
void convert_inv_days_to_inv_s(amrex::MultiFab *)
Convert data in a multifab from inverse days to inverse seconds.
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_yr
y_grid on rho points (2D)