13#include <AMReX_AmrCore.H>
14#include <AMReX_BCRec.H>
15#include <AMReX_InterpFaceRegister.H>
17#include <AMReX_ParallelDescriptor.H>
18#include <AMReX_ParmParse.H>
19#include <AMReX_MultiFabUtil.H>
20#include <AMReX_FillPatchUtil.H>
21#include <AMReX_VisMF.H>
22#include <AMReX_PhysBCFunct.H>
23#include <AMReX_YAFluxRegister.H>
24#include <AMReX_ErrorList.H>
26#ifdef AMREX_MEM_PROFILING
27#include <AMReX_MemProfiler.H>
42#ifdef REMORA_USE_PARTICLES
46#ifdef REMORA_USE_NETCDF
60#include <AMReX_Lazy.H>
64using amrex::MPI_COMM_WORLD;
82#ifdef REMORA_USE_NETCDF
92 :
public amrex::AmrCore
153 amrex::DistributionMapping&
dm)
const;
155 amrex::DistributionMapping&
dm)
const;
157 amrex::DistributionMapping&
dm)
const;
162 const amrex::MultiFab*&
y_psi)
const;
172 const amrex::MultiFab*&
lat_psi)
const;
178 const amrex::MultiFab*&
msku,
179 const amrex::MultiFab*&
mskv)
const;
278 const amrex::DistributionMapping&
dm)
override;
285 const amrex::DistributionMapping&
dm)
override;
297 const amrex::DistributionMapping&
dm)
override;
330 const amrex::Real
dt,
const amrex::Real
time);
341 const amrex::Vector<const amrex::MultiFab*> &
mf,
342 const amrex::Vector<const amrex::MultiFab*> &
mf_nd,
343 const amrex::Vector<const amrex::MultiFab*> &
mf_u,
344 const amrex::Vector<const amrex::MultiFab*> &
mf_v,
345 const amrex::Vector<const amrex::MultiFab*> &
mf_w,
346 const amrex::Vector<const amrex::MultiFab*> &
mf_2d_rho,
347 const amrex::Vector<const amrex::MultiFab*> &
mf_2d_u,
348 const amrex::Vector<const amrex::MultiFab*> &
mf_2d_v,
353 const amrex::Vector<amrex::Geometry>&
my_geom,
356 const amrex::Vector<amrex::IntVect>&
rr,
359 const std::string &
mfPrefix =
"Cell",
360 const amrex::Vector<std::string>&
extra_dirs = amrex::Vector<std::string>())
const;
367 const amrex::Vector<amrex::BoxArray> &
bArray,
372 const amrex::Vector<amrex::Geometry>&
my_geom,
375 const amrex::Vector<amrex::IntVect>&
rr,
413 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_h;
424 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_Hz;
426 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_Huon;
428 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_Hvom;
430 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_ru;
432 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_rv;
434 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_ru2d;
436 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_rv2d;
438 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_rufrc;
440 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_rvfrc;
442 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_Akv;
444 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_Akt;
450 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_diff2;
453 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_z_r;
456 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_z_w;
458 amrex::Gpu::DeviceVector<amrex::Real>
s_r;
460 amrex::Gpu::DeviceVector<amrex::Real>
s_w;
468 amrex::Gpu::DeviceVector<amrex::Real>
Cs_r;
470 amrex::Gpu::DeviceVector<amrex::Real>
Cs_w;
479 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_sustr;
481 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_svstr;
484 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_uwind;
486 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_vwind;
488 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_Tair;
490 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_qair;
492 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_Pair;
495 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_srflx;
497 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_lrflx;
501 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_lhflx;
503 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_shflx;
506 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_stflx;
510 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_btflx;
515 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_rain;
517 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_evap;
519 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_cloud;
533 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_rdrag;
537 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_ZoBot;
540 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_bustr;
542 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_bvstr;
568 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_rubar;
570 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_rvbar;
572 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_rzeta;
574 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_ubar;
576 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_vbar;
578 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_zeta;
584 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_mskr;
586 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_msku;
588 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_mskv;
590 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_mskp;
603 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_pm;
605 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_pn;
612 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_fcor;
615 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_xr;
617 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_yr;
620 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_xu;
622 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_yu;
625 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_xv;
627 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_yv;
630 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_xp;
632 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_yp;
636 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_lonp;
639 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_latp;
642 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_dndx;
644 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_dmde;
650 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_rhoS;
652 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_rhoA;
654 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_bvf;
656 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_alpha;
658 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_beta;
667 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_tke;
669 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_gls;
673 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_Akk;
675 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_Akp;
689 amrex::Vector<std::unique_ptr<amrex::MultiFab>>&
new_v,
690 int lev,
const amrex::MultiFab&
src,
const amrex::MultiFab&
like);
719 amrex::MultiFab
const*
mf_rhoS,
720 amrex::MultiFab
const*
mf_rhoA,
730 std::unique_ptr<amrex::MultiFab>&
mf_rubar,
731 std::unique_ptr<amrex::MultiFab>&
mf_rvbar,
732 std::unique_ptr<amrex::MultiFab>&
mf_rzeta,
733 std::unique_ptr<amrex::MultiFab>&
mf_ubar,
734 std::unique_ptr<amrex::MultiFab>&
mf_vbar,
736 amrex::MultiFab
const*
mf_h,
737 amrex::MultiFab
const*
mf_pm,
738 amrex::MultiFab
const*
mf_pn,
739 amrex::MultiFab
const*
mf_fcor,
742 amrex::MultiFab
const*
mf_mskr,
743 amrex::MultiFab
const*
mf_msku,
744 amrex::MultiFab
const*
mf_mskv,
745 amrex::MultiFab
const*
mf_mskp,
754 amrex::MultiFab&
mf_u , amrex::MultiFab&
mf_v,
756 amrex::MultiFab*
mf_ru , amrex::MultiFab*
mf_rv,
761 std::unique_ptr<amrex::MultiFab>&
mf_ubar,
762 std::unique_ptr<amrex::MultiFab>&
mf_vbar,
763 std::unique_ptr<amrex::MultiFab>&
mf_Akv,
764 std::unique_ptr<amrex::MultiFab>&
mf_Akt,
765 std::unique_ptr<amrex::MultiFab>&
mf_Hz,
766 std::unique_ptr<amrex::MultiFab>&
mf_Huon,
767 std::unique_ptr<amrex::MultiFab>&
mf_Hvom,
768 std::unique_ptr<amrex::MultiFab>&
mf_z_w,
769 amrex::MultiFab
const*
mf_h,
770 amrex::MultiFab
const*
mf_pm,
771 amrex::MultiFab
const*
mf_pn,
772 amrex::MultiFab
const*
mf_mskr,
773 amrex::MultiFab
const*
mf_msku,
774 amrex::MultiFab
const*
mf_mskv,
776 const amrex::Real
dt_lev);
783#ifdef REMORA_USE_FENNEL_FORT
814 amrex::MultiFab&
mf_u, amrex::MultiFab&
mf_v,
815 amrex::MultiFab*
mf_ru,
816 amrex::MultiFab*
mf_rv,
817 amrex::MultiFab&
S_old,
818 amrex::MultiFab&
S_new,
819 amrex::MultiFab&
mf_W, amrex::MultiFab&
mf_DC,
821 const amrex::MultiFab*
mf_z_r,
822 const amrex::MultiFab*
mf_z_w,
823 const amrex::MultiFab*
mf_h,
824 const amrex::MultiFab*
mf_pm,
825 const amrex::MultiFab*
mf_pn,
830 const amrex::MultiFab*
mf_msku,
831 const amrex::MultiFab*
mf_mskv,
832 const int iic,
const int nfirst,
833 const int nnew,
int nstp,
int nrhs,
834 int N,
const amrex::Real
dt_lev);
838 const amrex::Box&
gbx,
839 const amrex::Array4<amrex::Real >&
tempold,
840 const amrex::Array4<amrex::Real >&
tempcache,
841 const amrex::Array4<amrex::Real >&
Hz,
842 const amrex::Array4<amrex::Real >&
Huon,
843 const amrex::Array4<amrex::Real >&
Hvom,
844 const amrex::Array4<amrex::Real >&
W,
845 const amrex::Array4<amrex::Real >&
DC,
846 const amrex::Array4<amrex::Real >&
FC,
847 const amrex::Array4<amrex::Real >&
sstore,
848 const amrex::Array4<amrex::Real const>& z_w,
849 const amrex::Array4<amrex::Real const>&
h,
850 const amrex::Array4<amrex::Real const>&
pm,
851 const amrex::Array4<amrex::Real const>&
pn,
852 const amrex::Array4<amrex::Real const>&
msku,
853 const amrex::Array4<amrex::Real const>&
mskv,
854 const amrex::Array4<int const>&
river_pos,
857 const amrex::Real
dt_lev);
861 const amrex::Box&
bx,
862 const amrex::Array4<amrex::Real >& t,
863 const amrex::Array4<amrex::Real const>&
tempstore,
864 const amrex::Array4<amrex::Real const>&
Huon,
865 const amrex::Array4<amrex::Real const>&
Hvom,
866 const amrex::Array4<amrex::Real const>&
Hz,
867 const amrex::Array4<amrex::Real const>&
pn,
868 const amrex::Array4<amrex::Real const>&
pm,
869 const amrex::Array4<amrex::Real const>&
W,
870 const amrex::Array4<amrex::Real >&
FC,
871 const amrex::Array4<amrex::Real const>&
mskr,
872 const amrex::Array4<amrex::Real const>&
msku,
873 const amrex::Array4<amrex::Real const>&
mskv,
874 const amrex::Array4<int const>&
river_pos,
876 int nrhs,
int nnew,
int N,
const amrex::Real
dt_lev,
877 const amrex::Array4<amrex::Real>&
fx_reg = amrex::Array4<amrex::Real>(),
878 const amrex::Array4<amrex::Real>&
fy_reg = amrex::Array4<amrex::Real>());
882 const amrex::Box&
xbx,
883 const amrex::Box&
ybx,
884 const amrex::Array4<amrex::Real const>&
uold,
885 const amrex::Array4<amrex::Real const>&
vold,
886 const amrex::Array4<amrex::Real >&
ru,
887 const amrex::Array4<amrex::Real >&
rv,
888 const amrex::Array4<amrex::Real >&
rufrc,
889 const amrex::Array4<amrex::Real >&
rvfrc,
890 const amrex::Array4<amrex::Real const>& sustr,
891 const amrex::Array4<amrex::Real const>& svstr,
892 const amrex::Array4<amrex::Real const>&
bustr,
893 const amrex::Array4<amrex::Real const>&
bvstr,
894 const amrex::Array4<amrex::Real const>&
Huon,
895 const amrex::Array4<amrex::Real const>&
Hvom,
896 const amrex::Array4<amrex::Real const>&
pm,
897 const amrex::Array4<amrex::Real const>&
pn,
898 const amrex::Array4<amrex::Real const>&
W,
899 const amrex::Array4<amrex::Real >&
FC,
904 const amrex::Box&
xbx,
905 const amrex::Box&
ybx,
906 const amrex::Array4<amrex::Real const>&
uold,
907 const amrex::Array4<amrex::Real const>&
vold,
908 const amrex::Array4<amrex::Real >&
ru,
909 const amrex::Array4<amrex::Real >&
rv,
910 const amrex::Array4<amrex::Real const>&
Duon,
911 const amrex::Array4<amrex::Real const>&
Dvom,
916 const amrex::Array4<amrex::Real const>&
state,
917 const amrex::Array4<amrex::Real >&
rho,
918 const amrex::Array4<amrex::Real >&
rhoA,
919 const amrex::Array4<amrex::Real >&
rhoS,
920 const amrex::Array4<amrex::Real >&
bvf,
921 const amrex::Array4<amrex::Real >&
alpha,
922 const amrex::Array4<amrex::Real >&
beta,
923 const amrex::Array4<amrex::Real const>&
Hz,
924 const amrex::Array4<amrex::Real const>& z_w,
925 const amrex::Array4<amrex::Real const>& z_r,
926 const amrex::Array4<amrex::Real const>&
h,
927 const amrex::Array4<amrex::Real const>&
mskr,
932 const amrex::Array4<amrex::Real const>&
state,
933 const amrex::Array4<amrex::Real >&
rho,
934 const amrex::Array4<amrex::Real >&
rhoA,
935 const amrex::Array4<amrex::Real >&
rhoS,
936 const amrex::Array4<amrex::Real >&
bvf,
937 const amrex::Array4<amrex::Real const>&
Hz,
938 const amrex::Array4<amrex::Real const>& z_w,
939 const amrex::Array4<amrex::Real const>& z_r,
940 const amrex::Array4<amrex::Real const>&
h,
941 const amrex::Array4<amrex::Real const>&
mskr,
946 const amrex::Array4<amrex::Real const>&
state,
947 const amrex::Array4<amrex::Real >&
rho,
948 const amrex::Array4<amrex::Real >&
rhoA,
949 const amrex::Array4<amrex::Real >&
rhoS,
950 const amrex::Array4<amrex::Real >&
bvf,
951 const amrex::Array4<amrex::Real >&
alpha,
952 const amrex::Array4<amrex::Real >&
beta,
953 const amrex::Array4<amrex::Real const>&
Hz,
954 const amrex::Array4<amrex::Real const>& z_w,
955 const amrex::Array4<amrex::Real const>& z_r,
956 const amrex::Array4<amrex::Real const>&
h,
957 const amrex::Array4<amrex::Real const>&
mskr,
962 const amrex::Box&
gbx,
963 const amrex::Box&
utbx,
964 const amrex::Box&
vtbx,
965 const amrex::Array4<amrex::Real >&
ru,
966 const amrex::Array4<amrex::Real >&
rv,
967 const amrex::Array4<amrex::Real const>&
pn,
968 const amrex::Array4<amrex::Real const>&
pm,
969 const amrex::Array4<amrex::Real const>&
rho,
970 const amrex::Array4<amrex::Real >&
FC,
971 const amrex::Array4<amrex::Real const>&
Hz,
972 const amrex::Array4<amrex::Real const>& z_r,
973 const amrex::Array4<amrex::Real const>& z_w,
974 const amrex::Array4<amrex::Real const>&
msku,
975 const amrex::Array4<amrex::Real const>&
mskv,
976 const int nrhs,
const int N);
981 const amrex::Box&
gbx,
983 const amrex::Array4<amrex::Real >&
vel,
984 const amrex::Array4<amrex::Real const>&
vel_old,
985 const amrex::Array4<amrex::Real >&
rvel,
986 const amrex::Array4<amrex::Real const>&
Hz,
987 const amrex::Array4<amrex::Real const>&
Akv,
988 const amrex::Array4<amrex::Real >&
FC,
989 const amrex::Array4<amrex::Real const>&
sstr,
990 const amrex::Array4<amrex::Real const>&
bstr,
991 const amrex::Array4<amrex::Real const>& z_r,
992 const amrex::Array4<amrex::Real const>&
pm,
993 const amrex::Array4<amrex::Real const>&
pn,
994 const int iic,
const int ntfirst,
const int nnew,
int nstp,
int nrhs,
int N,
1000 const amrex::Array4<amrex::Real >&
phi,
1001 const amrex::Array4<amrex::Real const>&
Hz,
1002 const amrex::Array4<amrex::Real >&
Hzk,
1003 const amrex::Array4<amrex::Real >&
AK,
1004 const amrex::Array4<amrex::Real const>&
Akv,
1005 const amrex::Array4<amrex::Real >&
BC,
1006 const amrex::Array4<amrex::Real >&
DC,
1007 const amrex::Array4<amrex::Real >&
FC,
1008 const amrex::Array4<amrex::Real >&
CF,
1009 const int nnew,
const int N,
1010 const amrex::Real
dt_lev);
1015 const amrex::Array4<amrex::Real >&
phi,
1016 const amrex::Array4<amrex::Real >&
phibar,
1017 const amrex::Array4<amrex::Real >&
Hphi,
1018 const amrex::Array4<amrex::Real const>&
Hz,
1019 const amrex::Array4<amrex::Real const>&
pm_or_pn,
1020 const amrex::Array4<amrex::Real const>&
Dphi1,
1021 const amrex::Array4<amrex::Real const>&
Dphi2,
1022 const amrex::Array4<amrex::Real >&
DC,
1023 const amrex::Array4<amrex::Real >&
FC,
1024 const amrex::Array4<amrex::Real const>&
msk,
1030 const amrex::Array4<amrex::Real >&
phi,
1031 const amrex::Array4<amrex::Real const>&
Hz,
1032 const amrex::Array4<amrex::Real const>&
Dphi_avg1,
1033 const amrex::Array4<amrex::Real >&
DC,
1034 const amrex::Array4<amrex::Real >&
CF,
1035 const amrex::Array4<amrex::Real const>&
pm_or_pn,
1036 const amrex::Array4<amrex::Real const>&
msk,
1037 const int nnew,
const int N);
1041 const amrex::Box&
ybx,
1042 const amrex::Array4<amrex::Real >& u,
1043 const amrex::Array4<amrex::Real >& v,
1044 const amrex::Array4<amrex::Real const>&
uold,
1045 const amrex::Array4<amrex::Real const>&
vold,
1046 const amrex::Array4<amrex::Real >&
rufrc,
1047 const amrex::Array4<amrex::Real >&
rvfrc,
1048 const amrex::Array4<amrex::Real const>&
visc2_p,
1049 const amrex::Array4<amrex::Real const>&
visc2_r,
1050 const amrex::Array4<amrex::Real const>&
Hz,
1051 const amrex::Array4<amrex::Real const>&
pm,
1052 const amrex::Array4<amrex::Real const>&
pn,
1053 const amrex::Array4<amrex::Real const>&
mskp,
1055 const amrex::Real
dt_lev);
1059 const amrex::Array4<amrex::Real >&
state,
1060 const amrex::Array4<amrex::Real >&
state_rhs,
1061 const amrex::Array4<amrex::Real const>&
diff2,
1062 const amrex::Array4<amrex::Real const>&
Hz,
1063 const amrex::Array4<amrex::Real const>& z_r,
1064 const amrex::Array4<amrex::Real const>&
pm,
1065 const amrex::Array4<amrex::Real const>&
pn,
1066 const amrex::Array4<amrex::Real const>&
msku,
1067 const amrex::Array4<amrex::Real const>&
mskv,
1068 const amrex::Real
dt_lev,
1069 const int ncomp,
const int N);
1073 const amrex::Array4<amrex::Real >&
state,
1074 const amrex::Array4<amrex::Real >&
state_rhs,
1075 const amrex::Array4<amrex::Real const>&
diff2,
1076 const amrex::Array4<amrex::Real const>&
Hz,
1077 const amrex::Array4<amrex::Real const>&
pm,
1078 const amrex::Array4<amrex::Real const>&
pn,
1079 const amrex::Array4<amrex::Real const>&
msku,
1080 const amrex::Array4<amrex::Real const>&
mskv,
1085 const amrex::Array4<amrex::Real >&
state,
1086 const amrex::Array4<amrex::Real >&
state_rhs,
1087 const amrex::Array4<amrex::Real const>&
diff2,
1088 const amrex::Array4<amrex::Real const>&
Hz,
1089 const amrex::Array4<amrex::Real const>& z_r,
1090 const amrex::Array4<amrex::Real const>&
pm,
1091 const amrex::Array4<amrex::Real const>&
pn,
1092 const amrex::Array4<amrex::Real const>&
msku,
1093 const amrex::Array4<amrex::Real const>&
mskv,
1094 const amrex::Real
dt_lev,
1095 const int ncomp,
const int N);
1099 const amrex::Box&
ybx,
1100 const amrex::Array4<amrex::Real const>&
uold,
1101 const amrex::Array4<amrex::Real const>&
vold,
1102 const amrex::Array4<amrex::Real >&
ru,
1103 const amrex::Array4<amrex::Real >&
rv,
1104 const amrex::Array4<amrex::Real const>&
Hz,
1105 const amrex::Array4<amrex::Real const>&
fomn,
1110 const amrex::Box&
xbx,
1111 const amrex::Box&
ybx,
1112 const amrex::Array4<amrex::Real const>&
uold,
1113 const amrex::Array4<amrex::Real const>&
vold,
1114 const amrex::Array4<amrex::Real >&
ru,
1115 const amrex::Array4<amrex::Real >&
rv,
1116 const amrex::Array4<amrex::Real const>&
Hz,
1117 const amrex::Array4<amrex::Real const>&
dndx,
1118 const amrex::Array4<amrex::Real const>&
dmde,
1136 const amrex::Box& domain,
1142 const amrex::Array4<amrex::Real >& var,
1143 const amrex::Array4<amrex::Real const>&
var_old,
1144 const amrex::Array4<amrex::Real const>&
var_clim,
1145 const amrex::Array4<amrex::Real const>&
clim_coeff,
1146 const amrex::Array4<amrex::Real const>&
Hz,
1147 const amrex::Array4<amrex::Real const>&
pm,
1148 const amrex::Array4<amrex::Real const>&
pn,
1214 const amrex::MultiFab&
mf_zeta,
1225 amrex::MultiFab&
mf_W,
1227 const int nstp,
const int nnew,
const int iic,
const int ntfirst,
1228 const int N,
const amrex::Real
dt_lev);
1235 const int nstp,
const int nnew,
1236 const int N,
const amrex::Real
dt_lev);
1264 amrex::Vector<amrex::MultiFab*>
const&
mfs,
1272 const amrex::Real
dt =
zero,
1273 const amrex::MultiFab&
mf_calc = amrex::MultiFab(),
1274 amrex::Vector<amrex::MultiFab*>
const&
mfs_crse_old = {},
1275 amrex::Vector<amrex::MultiFab*>
const&
mfs_crse_new = {});
1280 amrex::Vector<amrex::MultiFab*>
const&
mfs,
1285 amrex::Vector<amrex::MultiFab*>
const&
mfs_crse_old = {},
1286 amrex::Vector<amrex::MultiFab*>
const&
mfs_crse_new = {});
1290 const amrex::MultiFab&
mf_mask,
1291 const amrex::Real
time,
1296 const amrex::MultiFab&
mf_calc = amrex::MultiFab(),
1297 const amrex::Real =
zero);
1305 const int icomp = 0,
1309 const amrex::Real
dt =
zero,
1310 const amrex::MultiFab&
mf_calc = amrex::MultiFab());
1317 const int icomp = 0,
1321 const amrex::Real
dt =
zero,
1322 const amrex::MultiFab&
mf_calc = amrex::MultiFab());
1330 const int icomp = 0,
1334 const amrex::Real
dt =
zero,
1335 const amrex::MultiFab&
mf_calc = amrex::MultiFab(),
1336 amrex::Interpolater*
mapper =
nullptr);
1479#ifdef REMORA_USE_NETCDF
1507 void init_stuff (
int lev,
const amrex::BoxArray&
ba,
const amrex::DistributionMapping&
dm);
1510 void init_masks (
int lev,
const amrex::BoxArray&
ba,
const amrex::DistributionMapping&
dm);
1553#ifdef REMORA_USE_NETCDF
1559 amrex::MultiFab
const*
plotMF,
1565 const std::string& name,
1570 const std::string &name,
1632#ifdef REMORA_USE_MOAB
1679 std::unique_ptr<ProblemBase>
prob =
nullptr;
1704 amrex::Vector<amrex::Real>
dt;
1710 amrex::Vector<std::unique_ptr<REMORAPhysBCFunct>>
physbcs;
1941 amrex::Vector<std::string>
cons_names {
"temp",
"salt",
"tracer"};
1960#ifdef REMORA_USE_PARTICLES
1975 const amrex::Vector<std::unique_ptr<amrex::MultiFab>>& );
1980 amrex::Vector<amrex::MultiFab const*>&
flow_vel,
1981 const amrex::Vector<std::unique_ptr<amrex::MultiFab>>& );
2005 static amrex::Vector<amrex::Vector<std::string>>
nc_init_file;
2007 static amrex::Vector<amrex::Vector<std::string>>
nc_grid_file;
2076 switch (spatial_order) {
2093 amrex::Error(
"Must specify spatial order to be 2,3,4,5 or 6");
2123 int numCores = amrex::ParallelDescriptor::NProcs();
2137 if (amrex::ParallelDescriptor::IOProcessor())
2139 datalog[
i] = std::make_unique<std::fstream>();
2145 amrex::ParallelDescriptor::Barrier(
"REMORA::setRecordDataInfo");
2148 amrex::Vector<std::unique_ptr<std::fstream> >
datalog;
2161 static void print_usage(MPI_Comm , std::ostream& );
2194 using namespace amrex;
2201 std::log(Real(0.5)*(
one+
x*
x))-
2202 two*std::atan(
x)+Real(0.5)*
PI;
2215 Real
cff=std::min(Real(50.0),Real(0.35)*
ZoL);
2217 std::exp(
cff)+Real(8.525));
2226 using namespace amrex;
2231 Real
x = std::pow(
one-Real(15.0)*
ZoL,Real(0.5));
2245 Real
cff=std::min(Real(50.0),Real(0.35)*
ZoL);
2247 Real(0.6667)*(
ZoL-Real(14.28))/std::exp(
cff)+Real(8.525));
constexpr amrex::Real three
constexpr amrex::Real two
constexpr amrex::Real one
constexpr amrex::Real fourth
constexpr amrex::Real zero
constexpr amrex::Real third
PlotfileType
plotfile format
mf_h setVal(geomdata.ProbHi(2))
A class to hold and interpolate time series data read from a NetCDF file.
A class to hold and interpolate time series data read from a NetCDF file.
Class that stores all relevant simulation state data with methods for time stepping.
static PlotfileType plotfile_type
Native or NetCDF plotfile output.
std::string nc_grid_file_hires
Grid file for high resolution bathymetry.
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_mskr_full_domain
Land/sea mask at cell centers on the whole domain at each potential level. Specified at hires_grid_le...
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_EminusP
evaporation minus precipitation [kg/m^2/s], defined at rho-points
ProbCoords prob_coords(int lev) const
Coordinate arrays of level lev, for the prob functions.
amrex::Vector< std::string > nc_riv_file
NetCDF river file(s)
void set_grid_vars_averaged_down(int lev)
Set pm/pn by averaging down from higher-resolution grid.
std::string riv_time_varname
Name of time field for river time.
int foextrap_periodic_bc() const noexcept
static void GotoNextLine(std::istream &is)
utility to skip to next line in Header
void ConfigureDriverAtmosToOceanCoupling(bool use_coupling_driver, bool use_two_way_coupling, DriverAtmosForcingMode active_mode)
int nfast
Number of fast steps to take.
amrex::Vector< std::string > nc_clim_his_file
NetCDF climatology history file(s)
int ncons
Number of conserved scalars in the state (temperature + salt + passive scalars + biology tracers)
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_mskr_crse_on_fine
the level's rho-, u- and v-masks copied onto the layout of the level above it coarsened,...
double stop_time
Whether max_step was set in the inputs; the default above is not a distinguishable sentinel.
void WriteNCMultiFab(const amrex::FabArray< amrex::FArrayBox > &fab, const std::string &name, bool set_ghost=false) const
Write MultiFab in NetCDF format.
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_zeta_full_domain
high resolution initial free surface height (2D)
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_rv2d
v velocity RHS (2D, includes horizontal and vertical advection)
std::string nc_init_file_hires
Init file for high resolution.
void prsgrd(const amrex::Box &bx, const amrex::Box &gbx, const amrex::Box &utbx, const amrex::Box &vtbx, const amrex::Array4< amrex::Real > &ru, const amrex::Array4< amrex::Real > &rv, const amrex::Array4< amrex::Real const > &pn, const amrex::Array4< amrex::Real const > &pm, const amrex::Array4< amrex::Real const > &rho, const amrex::Array4< amrex::Real > &FC, const amrex::Array4< amrex::Real const > &Hz, const amrex::Array4< amrex::Real const > &z_r, const amrex::Array4< amrex::Real const > &z_w, const amrex::Array4< amrex::Real const > &msku, const amrex::Array4< amrex::Real const > &mskv, const int nrhs, const int N)
Calculate pressure gradient.
int biology_debug_i
Target column i index for biology_debug = 1.
static amrex::Real fixed_dt
User specified fixed baroclinic time step.
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_evap
evaporation rate [kg/m^2/s]
amrex::Real last_plot_file_time
Simulation time when we last output a plotfile.
void update_massflux_3d(int lev, const amrex::Box &bx, const int ioff, const int joff, const amrex::Array4< amrex::Real > &phi, const amrex::Array4< amrex::Real > &phibar, const amrex::Array4< amrex::Real > &Hphi, const amrex::Array4< amrex::Real const > &Hz, const amrex::Array4< amrex::Real const > &pm_or_pn, const amrex::Array4< amrex::Real const > &Dphi1, const amrex::Array4< amrex::Real const > &Dphi2, const amrex::Array4< amrex::Real > &DC, const amrex::Array4< amrex::Real > &FC, const amrex::Array4< amrex::Real const > &msk, const int nnew)
Correct mass flux.
int zvel_bc() const noexcept
static bool plot_staggered_vels
Whether to write the staggered velocities (not averaged to cell centers)
void init_bathymetry_from_netcdf(int lev)
Bathymetry data initialization from NetCDF file.
void init_bcs()
Read in boundary parameters from input file and set up data structures.
int xvel_bc() const noexcept
amrex::Vector< amrex::BCRec > domain_bcs_type
vector (over BCVars) of BCRecs
bool set_bcs_by_var
whether to set boundary conditions by variable rather than just by side
void set_zeta_averaged_down(int lev)
Copy over zeta data that has been averaged down from high res.
void calculate_nodal_masks(int lev)
Calculate u-, v-, and psi-point masks based on rho-point masks after analytic initialization.
amrex::Long m_warned_surface_temp_nan
std::unique_ptr< NCTimeSeries > qair_data_from_file
Data container for specific humidity read from file.
static amrex::Real previousCPUTimeUsed
Accumulator variable for CPU time used thusfar.
amrex::Vector< std::string > cons_names
Names of scalars for plotfile output.
bool running_with_coupling_driver
True once REMORA has received forcing through the coupling driver.
amrex::Vector< std::unique_ptr< amrex::YAFluxRegister > > advflux_reg
array of flux registers for refluxing in multilevel
std::unique_ptr< NCTimeSeries > sustr_data_from_file
Data container for u-component surface momentum flux read from file.
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_fcor
coriolis factor (2D)
int cf_print_iface
print the imposed coarse-fine interface velocity at this baroclinic step (-1 = off)....
void allocate_init_full_domain()
Allocate multifabs for storing full-domain high resolution initial data.
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_btflux
Bottom tracer flux; input arrays.
void init_gls_vmix(int lev, SolverChoice solver_choice)
Initialize GLS variables.
bool time_interp_flux
interpolate the parent's barotropic mass flux in time at the coarse-fine interface,...
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_rubar
barotropic x velocity for the RHS (2D)
void init_biology_from_netcdf(int lev)
Biology initialization from NetCDF file.
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_xvel_full_domain
multilevel data container for high res initial x velocities (u in ROMS)
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_h
multilevel data container for current step's z velocities (largely unused; W stored separately)
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_pm
horizontal scaling factor: 1 / dx (2D)
amrex::MultiFab fine_mask
Mask that zeroes out values on a coarse level underlying grids on the next finest level.
void set2DPlotVariables(const std::string &pp_plot_var_names_2d)
void FillCoarsePatchMap(int lev, amrex::Real time, amrex::MultiFab *mf_fine, amrex::MultiFab *mf_crse, const int bccomp, const int bdy_var_type=BdyVars::null, const int icomp=0, const bool fill_all=true, const int n_not_fill=0, const int icomp_calc=0, const amrex::Real dt=zero, const amrex::MultiFab &mf_calc=amrex::MultiFab(), amrex::Interpolater *mapper=nullptr)
fill an entire multifab by interpolating from the coarser level, explicitly specifying interpolator t...
void GetLandSeaMasks(const amrex::MultiFab *&mskr, const amrex::MultiFab *&msku, const amrex::MultiFab *&mskv) const
amrex::Vector< REMORAFillPatcher > FPr_v
Vector over levels of FillPatchers for v (3D)
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_ZoBot
Bottom roughness length [m], defined at rho points.
void init_biology_ic(int lev)
Initialize biology tracers from whichever source remora.biology_ic_type selects. Call after the physi...
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_DU_avg2
correct time average of barotropic x velocity flux for coupling (2D)
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_lrflx
longwave radiation
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_zeta_crse_new
see vec_zeta_crse_old (2D)
void init_zeta_full_domain_from_netcdf()
Full-domain high res sea-surface height data initialization from NetCDF file.
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_yv
y_grid on v-points (2D)
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_zeta_crse_old
free surface at the start and end of this level's step, every leapfrog component holding the same val...
static void print_error(MPI_Comm, const std::string &msg)
amrex::Vector< amrex::MultiFab * > cons_new
multilevel data container for current step's scalar data: temperature, salinity, passive tracer
static bool write_history_file
Whether to output NetCDF files as a single history file with several time steps.
void init_biology_ic_full_domain()
Full-domain counterpart of init_biology_ic, for the hires_init_level average-down path.
virtual void MakeNewLevelFromCoarse(int lev, amrex::Real time, const amrex::BoxArray &ba, const amrex::DistributionMapping &dm) override
Make a new level using provided BoxArray and DistributionMapping and fill with interpolated coarse le...
int tke_bc() const noexcept
void stretch_transform(int lev)
Calculate vertical stretched coordinates.
std::unique_ptr< NCTimeSeries > rain_data_from_file
Data container for precipitation rate read from file.
void define_flux_register(int lev)
build or rebuild the flux register between lev and lev-1
void init_masks_full_domain_from_netcdf()
Full domain high-res mask data initialization from NetCDF file.
void set_curvilinear_terms_from_grid_scale(int lev)
Set curvilinear derivative terms on level lev based on pm and pn.
amrex::Gpu::DeviceVector< amrex::Real > s_w
Scaled vertical coordinate (range [0,1]) that transforms to z, defined at w-points (cell faces)
REMORABiology::BiologyModel biology_model
Active biology package.
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_vwind
Wind in the v direction, defined at rho-points.
std::unique_ptr< ProblemBase > prob
Pointer to container of analytical functions for problem definition.
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_mskr
land/sea mask at cell centers (2D)
void check_mask_consistency()
Check every level pair's masks against each other, and every level's mask values, reporting according...
void Construct_REMORAFillPatchers(int lev)
Construct FillPatchers.
void advance_3d(int lev, amrex::MultiFab &mf_cons, amrex::MultiFab &mf_u, amrex::MultiFab &mf_v, amrex::MultiFab *mf_sstore, amrex::MultiFab *mf_ru, amrex::MultiFab *mf_rv, std::unique_ptr< amrex::MultiFab > &mf_DU_avg1, std::unique_ptr< amrex::MultiFab > &mf_DU_avg2, std::unique_ptr< amrex::MultiFab > &mf_DV_avg1, std::unique_ptr< amrex::MultiFab > &mf_DV_avg2, std::unique_ptr< amrex::MultiFab > &mf_ubar, std::unique_ptr< amrex::MultiFab > &mf_vbar, std::unique_ptr< amrex::MultiFab > &mf_Akv, std::unique_ptr< amrex::MultiFab > &mf_Akt, std::unique_ptr< amrex::MultiFab > &mf_Hz, std::unique_ptr< amrex::MultiFab > &mf_Huon, std::unique_ptr< amrex::MultiFab > &mf_Hvom, std::unique_ptr< amrex::MultiFab > &mf_z_w, amrex::MultiFab const *mf_h, amrex::MultiFab const *mf_pm, amrex::MultiFab const *mf_pn, amrex::MultiFab const *mf_mskr, amrex::MultiFab const *mf_msku, amrex::MultiFab const *mf_mskv, const int N, const amrex::Real dt_lev)
Advance the 3D variables.
void init_grid_vars_from_netcdf(int lev)
Grid variable initialization from NetCDF file.
static int sum_interval
Diagnostic sum output interval in number of steps.
int history_count
Counter for which time index we are writing to in the netcdf history file.
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_rain
precipitation rate [kg/m^2/s]
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_tke
Turbulent kinetic energy.
void rho_eos(const amrex::Box &bx, const amrex::Array4< amrex::Real const > &state, const amrex::Array4< amrex::Real > &rho, const amrex::Array4< amrex::Real > &rhoA, const amrex::Array4< amrex::Real > &rhoS, const amrex::Array4< amrex::Real > &bvf, const amrex::Array4< amrex::Real > &alpha, const amrex::Array4< amrex::Real > &beta, const amrex::Array4< amrex::Real const > &Hz, const amrex::Array4< amrex::Real const > &z_w, const amrex::Array4< amrex::Real const > &z_r, const amrex::Array4< amrex::Real const > &h, const amrex::Array4< amrex::Real const > &mskr, const int N)
Wrapper around equation of state calculation.
static void print_summary(std::ostream &)
int do_substep
Whether to substep fine levels in time.
amrex::Real m_warned_surface_temp_min
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_stflx
Surface tracer flux; working arrays.
void Evolve()
Advance solution to final time.
void t3dmix2(const amrex::Box &bx, const amrex::Array4< amrex::Real > &state, const amrex::Array4< amrex::Real > &state_rhs, const amrex::Array4< amrex::Real const > &diff2, const amrex::Array4< amrex::Real const > &Hz, const amrex::Array4< amrex::Real const > &z_r, const amrex::Array4< amrex::Real const > &pm, const amrex::Array4< amrex::Real const > &pn, const amrex::Array4< amrex::Real const > &msku, const amrex::Array4< amrex::Real const > &mskv, const amrex::Real dt_lev, const int ncomp, const int N)
Wrapper for harmonic diffusivity for tracers.
void update_nodal_masks(int lev)
Rebuild the u-, v- and psi-point masks from vec_mskr and fill their ghosts.
std::string bdry_time_varname
Default name of time field for boundary data.
amrex::Real plotfile_fill_value
fill value for masked arrays in amrex plotfiles
int num_passive_scalars() const noexcept
Number of passive (dye) scalars in the state, not counting biology tracers.
void ReadCheckpointFile()
read checkpoint file from disk
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_gls
Turbulent generic length scale.
void GetAtmosToOceanPsiLonLat(const amrex::MultiFab *&lon_psi, const amrex::MultiFab *&lat_psi) const
int biology_debug
Biology diagnostic verbosity: 0 off, 1 target column, 2 all columns. See Source/Biology/Fortran/tag_m...
bool chunk_history_file
Whether to split the netcdf history file into fixed-length chunks.
void writeJobInfo(const std::string &dir) const
Write job info to stdout.
int num_bc_vars() const noexcept
void ApplyAtmosphericFluxes(const amrex::Vector< amrex::MultiFab * > &states, amrex::Real time)
Receives atmospheric flux lanes from the driver and assembles REMORA flux inputs.
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_sustr
Surface stress in the u direction.
amrex::Real get_t_old(int lev) const
Accessor method for t_old to expose to outside classes.
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)
void rhs_t_3d(int lev, const amrex::Box &bx, const amrex::Array4< amrex::Real > &t, const amrex::Array4< amrex::Real const > &tempstore, const amrex::Array4< amrex::Real const > &Huon, const amrex::Array4< amrex::Real const > &Hvom, const amrex::Array4< amrex::Real const > &Hz, const amrex::Array4< amrex::Real const > &pn, const amrex::Array4< amrex::Real const > &pm, const amrex::Array4< amrex::Real const > &W, const amrex::Array4< amrex::Real > &FC, const amrex::Array4< amrex::Real const > &mskr, const amrex::Array4< amrex::Real const > &msku, const amrex::Array4< amrex::Real const > &mskv, const amrex::Array4< int const > &river_pos, const amrex::Array4< amrex::Real const > &river_source, int nrhs, int nnew, int N, const amrex::Real dt_lev, const amrex::Array4< amrex::Real > &fx_reg=amrex::Array4< amrex::Real >(), const amrex::Array4< amrex::Real > &fy_reg=amrex::Array4< amrex::Real >())
RHS terms for tracer.
int yvel_bc() const noexcept
void build_covered_mask(int crse_lev, amrex::MultiFab &covered)
Average one field down a level, weighted by the land/sea mask.
std::unique_ptr< NCTimeSeries > longwave_down_data_from_file
Data container for downward longwave radiation flux read from file.
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_Dvbar_new
see vec_Dvbar_old (2D)
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_ru2d
u velocity RHS (2D, includes horizontal and vertical advection)
virtual void ClearLevel(int lev) override
Delete level data Overrides the pure virtual function in AmrCore.
void init_biology_full_domain_from_netcdf()
Full-domain high-res biology initialization from NetCDF file.
amrex::Vector< std::string > datalogname
void GetAtmosToOceanVFaceLayout(amrex::BoxArray &ba, amrex::DistributionMapping &dm) const
amrex::Vector< amrex::MultiFab * > zvel_new
multilevel data container for current step's z velocities (largely unused; W stored separately)
void reflux_to(int lev)
apply the lev/lev+1 tracer flux correction onto lev
void set_surface_state(int lev)
Initialize or calculate wind speed and other surface state vars from file or analytic.
void GetAtmosToOceanRhoLayout(amrex::BoxArray &ba, amrex::DistributionMapping &dm) const
void check_cf_metrics(int crse_lev)
check that fine cell edges sum to the coarse edge across an interface
int num_scalar() const noexcept
Number of passive (dye) scalars carried in the state.
AMREX_FORCE_INLINE int ComputeGhostCells(const int &spatial_order)
Helper function to determine number of ghost cells.
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_sstore
additional scratch space for calculations on temp, salt, etc
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_xv
x_grid on v-points (2D)
void WriteAtIntermediateTime(int step, amrex::Real cur_time)
Write checkpoint and plotfiles at intermediate point of simulation, if needed.
double start_time
Time of the start of the simulation, in seconds on the model clock.
void init_only(int lev, amrex::Real time)
Init (NOT restart or regrid)
void init_set_vmix(int lev)
Initialize vertical mixing coefficients from file or analytic.
void set_2d_cf_bcs(int lev, amrex::Real time, int know, int knew)
set this level's barotropic contact points from its parent, mass-conservingly
void fill_from_bdyfiles(int lev, 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=zero)
Fill boundary data from netcdf file.
amrex::Real EvolveOneStep(amrex::Real time, amrex::Real dt_request)
std::unique_ptr< NCTimeSeries > v_clim_data_from_file
Data container for v-velocity climatology data read from file.
std::string clim_u_time_varname
Name of time field for u climatology data.
void rhs_uv_3d(int lev, const amrex::Box &xbx, const amrex::Box &ybx, const amrex::Array4< amrex::Real const > &uold, const amrex::Array4< amrex::Real const > &vold, const amrex::Array4< amrex::Real > &ru, const amrex::Array4< amrex::Real > &rv, const amrex::Array4< amrex::Real > &rufrc, const amrex::Array4< amrex::Real > &rvfrc, const amrex::Array4< amrex::Real const > &sustr, const amrex::Array4< amrex::Real const > &svstr, const amrex::Array4< amrex::Real const > &bustr, const amrex::Array4< amrex::Real const > &bvstr, const amrex::Array4< amrex::Real const > &Huon, const amrex::Array4< amrex::Real const > &Hvom, const amrex::Array4< amrex::Real const > &pm, const amrex::Array4< amrex::Real const > &pn, const amrex::Array4< amrex::Real const > &W, const amrex::Array4< amrex::Real > &FC, int nrhs, int N)
RHS terms for 3D momentum.
void set_grid_scale(int lev)
Set pm and pn arrays and x/y coords on level lev.
void set_coriolis(int lev)
Initialize Coriolis factor from file or analytic.
int foextrap_bc() const noexcept
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_Lscale
Vertical mixing turbulent length scale.
amrex::Vector< REMORAFillPatcher > FPr_u
Vector over levels of FillPatchers for u (3D)
static amrex::Box clim_nudg_momentum_box(const amrex::Box &nodal_bx, int dir, const amrex::Box &domain, bool is_periodic)
Shrink an x- or y-nodal momentum tilebox to the faces ROMS nudges.
void set_masks_averaged_down(int lev)
Copy this level's land-sea mask out of the full-domain mask that was coarsened down from hires_grid_l...
amrex::Vector< amrex::Vector< amrex::Box > > boxes_at_level
the boxes specified at each level by tagging criteria
void prestep_diffusion(const amrex::Box &bx, const amrex::Box &gbx, const int ioff, const int joff, const amrex::Array4< amrex::Real > &vel, const amrex::Array4< amrex::Real const > &vel_old, const amrex::Array4< amrex::Real > &rvel, const amrex::Array4< amrex::Real const > &Hz, const amrex::Array4< amrex::Real const > &Akv, const amrex::Array4< amrex::Real > &FC, const amrex::Array4< amrex::Real const > &sstr, const amrex::Array4< amrex::Real const > &bstr, const amrex::Array4< amrex::Real const > &z_r, const amrex::Array4< amrex::Real const > &pm, const amrex::Array4< amrex::Real const > &pn, const int iic, const int ntfirst, const int nnew, int nstp, int nrhs, int N, const amrex::Real lambda, const amrex::Real dt_lev)
Update velocities or tracers with diffusion/viscosity as the last part of the prestep.
void vert_mean_3d(const amrex::Box &bx, const int ioff, const int joff, const amrex::Array4< amrex::Real > &phi, const amrex::Array4< amrex::Real const > &Hz, const amrex::Array4< amrex::Real const > &Dphi_avg1, const amrex::Array4< amrex::Real > &DC, const amrex::Array4< amrex::Real > &CF, const amrex::Array4< amrex::Real const > &pm_or_pn, const amrex::Array4< amrex::Real const > &msk, const int nnew, const int N)
Adjust 3D momentum variables based on vertical mean momentum.
amrex::DistributionMapping dm_full_domain
the DistributionMapping every full-domain multifab is built on. Each of those covers the domain in a ...
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_Hz
Width of cells in the vertical (z-) direction (3D, Hz in ROMS)
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_Akt
Vertical diffusion coefficient (3D)
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_msku
land/sea mask at x-faces (2D)
std::unique_ptr< NCTimeSeriesRiver > river_source_transportbar
Data container for vertically integrated momentum transport in rivers.
std::array< bool, AtmosState::NumTypes > driver_atmos_state_from_driver
provenance flags for driver-supplied atmospheric forcing lanes
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_rvfrc
v velocity RHS, integrated, including advection and bottom/surface stresses (2D)
int v2d_simple_bc() const noexcept
void extrapolate_metric_to_physical_boundaries(amrex::MultiFab &mf, const amrex::Geometry &geom)
Extrapolate grid metrics to edge of MultiFab.
void GetAtmosToOceanPsiCoordinates(const amrex::MultiFab *&x_psi, const amrex::MultiFab *&y_psi) const
std::string clim_ubar_time_varname
Name of time field for ubar climatology data.
std::unique_ptr< NCTimeSeries > u_clim_data_from_file
Data container for u-velocity climatology data read from file.
std::string check_file
Checkpoint file prefix.
static amrex::Real startCPUTime
Variable for CPU timing.
int cf_flux_pc
distribute the parent's interface mass flux piecewise-constantly over the fine faces under each paren...
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_pm_full_domain
horizontal scaling factor: 1 / dx (2D) on whole domain
amrex::Vector< amrex::MultiFab * > xvel_old
multilevel data container for last step's x velocities (u in ROMS)
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_Dubar_old
DU_avg2 per unit cell edge length, at the start and end of this level's step. What a subcycled finer ...
void register_coarse_data(int lev, amrex::Real time, amrex::Real dt_lev)
register this level's completed step as the coarse bracket the next finer level interpolates within
void init_scalars_full_domain_from_netcdf()
Full-domain high-res passive (dye) scalar initialization from NetCDF file.
int cf_avgdown_perimeter
exclude the coarse-fine perimeter's normal-velocity faces from the fine-to-coarse average,...
void ensure_full_domain_masks(int top_lev)
Make sure the full-domain rho-mask exists on levels 0 through top_lev.
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::Vector< std::unique_ptr< amrex::MultiFab > > vec_uwind
Wind in the u direction, defined at rho-points.
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_rufrc
u velocity RHS, integrated, including advection and bottom/surface stresses (2D)
void refine_masks_with_grow_cells(int fine_lev)
Inject the full-domain rho-mask from fine_lev-1 onto fine_lev, piecewise constant,...
static bool plot_nodal_data
Whether to write nodal data (Nu_nd) to plotfiles.
int regrid_int
how often each level regrids the higher levels of refinement (after a level advances that many time s...
amrex::Real check_int_time
Checkpoint output interval in seconds.
amrex::Box nc_hires_init_box
Box for the full domain at nc_hires_init_level.
DriverAtmosForcingMode driver_atmos_forcing_mode
Active atmosphere-to-ocean forcing contract on the most recent driver apply.
void gls_prestep(int lev, amrex::MultiFab *mf_gls, amrex::MultiFab *mf_tke, amrex::MultiFab &mf_W, amrex::MultiFab *mf_msku, amrex::MultiFab *mf_mskv, const int nstp, const int nnew, const int iic, const int ntfirst, const int N, const amrex::Real dt_lev)
Prestep for GLS calculation.
void init_scalar_metadata()
Build runtime scalar names after nscalar is known.
int zeta_bc() const noexcept
amrex::Vector< amrex::GpuArray< REMORA_BC, AMREX_SPACEDIM *2 > > phys_bc_type
Array holding the "physical" boundary condition types (e.g. "inflow")
amrex::Vector< amrex::Real > vec_weight2
Weights for calculating avg2 in 2D advance.
amrex::Vector< int > bdy_index
Container to connect boundary data being read in boundary condition containers.
amrex::Gpu::DeviceVector< amrex::Real > s_r
Scaled vertical coordinate (range [0,1]) that transforms to z, defined at rho points (cell centers)
void Define_REMORAFillPatchers(int lev)
Define FillPatchers.
int num_bdy_vars() const noexcept
amrex::Vector< amrex::IntVect > cum_ref_ratios
Cumulative refinement ratio between level 0 and level i.
const amrex::Vector< std::string > derived_names_3d
Names of derived fields for 3d plotfile fields.
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_shflx
sensible heat flux
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_visc2_p
Harmonic viscosity defined on the psi points (corners of horizontal grid cells)
void set_drag(int lev)
Initialize or calculate bottom drag.
amrex::MultiFab & build_fine_mask(int lev)
Make mask to zero out covered cells (for mesh refinement)
amrex::Real plot_int_time
Plotfile output interval in seconds.
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_dmde
d(1/m)/d(eta)
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_rvbar
barotropic y velocity for the RHS (2D)
amrex::Vector< int > num_files_at_level
how many netcdf input files specified at each level
void advance_2d_onestep(int lev, amrex::Real dt_lev, amrex::Real dtfast_lev, int my_iif, int nfast_counter)
2D advance, one predictor/corrector step
amrex::Vector< REMORAFillPatcher > FPr_vbar
Vector over levels of FillPatchers for vbar (2D)
void AverageDownTo(int crse_lev)
more flexible version of AverageDown() that lets you average down across multiple levels
int steps_per_history_file
Time steps per netcdf history file. Must be > 0 if chunk_history_file.
void post_timestep(int nstep, amrex::Real time, amrex::Real dt_lev)
Called after every level 0 timestep.
int max_step
maximum number of steps
void stretch_transform_full_domain(int lev, const amrex::MultiFab &mf_h, const amrex::MultiFab &mf_zeta, amrex::MultiFab &mf_z_r, amrex::MultiFab &mf_z_w)
Calculate z_r and z_w on full-domain arrays at a level not yet created.
amrex::Vector< amrex::MultiFab * > zvel_old
multilevel data container for last step's z velocities (largely unused; W stored separately)
std::unique_ptr< NCTimeSeries > svstr_data_from_file
Data container for v-component surface momentum flux read from file.
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_z_r
z coordinates at rho points (cell centers)
void coarsen_bathymetry_with_grow_cells(int crse_lev)
Coarsen the full-domain bathymetry from crse_lev+1 onto crse_lev, grow cells included,...
amrex::Vector< std::string > nc_frc_file
NetCDF forcing file(s)
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_lhflx
latent heat flux
void refinement_criteria_setup()
Set refinement criteria.
int u2d_simple_bc() const noexcept
void init_scalars_from_netcdf(int lev)
Passive (dye) scalar initialization from NetCDF file. Called from init_data_from_netcdf: dye follows ...
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_mskp
land/sea mask at cell corners (2D)
void remora_advance(int level, amrex::MultiFab &cons_old, amrex::MultiFab &cons_new, amrex::MultiFab &xvel_old, amrex::MultiFab &yvel_old, amrex::MultiFab &zvel_old, amrex::MultiFab &xvel_new, amrex::MultiFab &yvel_new, amrex::MultiFab &zvel_new, amrex::MultiFab &source, const amrex::Geometry fine_geom, const amrex::Real dt, const amrex::Real time)
Interface for advancing the data at one level by one "slow" timestep.
int Bio_comp
First cons component of the biology block, i.e. Tracer_comp + nscalar. The state is laid out as temp,...
int last_check_file_step
Step when we last output a checkpoint file.
int bdy_zeta() const noexcept
void prestep(int lev, amrex::MultiFab &mf_uold, amrex::MultiFab &mf_vold, amrex::MultiFab &mf_u, amrex::MultiFab &mf_v, amrex::MultiFab *mf_ru, amrex::MultiFab *mf_rv, amrex::MultiFab &S_old, amrex::MultiFab &S_new, amrex::MultiFab &mf_W, amrex::MultiFab &mf_DC, const amrex::MultiFab *mf_z_r, const amrex::MultiFab *mf_z_w, const amrex::MultiFab *mf_h, const amrex::MultiFab *mf_pm, const amrex::MultiFab *mf_pn, const amrex::MultiFab *mf_sustr, const amrex::MultiFab *mf_svstr, const amrex::MultiFab *mf_bustr, const amrex::MultiFab *mf_bvstr, const amrex::MultiFab *mf_msku, const amrex::MultiFab *mf_mskv, const int iic, const int nfirst, const int nnew, int nstp, int nrhs, int N, const amrex::Real dt_lev)
Wrapper function for prestep.
void init_beta_plane_coriolis(int lev)
Calculate Coriolis parameters from beta plane parametrization.
std::string clim_vbar_time_varname
Name of time field for vbar climatology data.
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_bvf
Brunt-Vaisala frequency (3D)
virtual void RemakeLevel(int lev, amrex::Real time, const amrex::BoxArray &ba, const amrex::DistributionMapping &dm) override
Remake an existing level using provided BoxArray and DistributionMapping and fill with existing fine ...
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_lonp
longitude on psi-points (2D, degrees east); only filled when the grid NetCDF file carries lon_psi
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_mskv
land/sea mask at y-faces (2D)
void init_masks(int lev, const amrex::BoxArray &ba, const amrex::DistributionMapping &dm)
Allocate MultiFabs for masks.
amrex::Vector< int > nsubsteps
How many substeps on each level?
amrex::Vector< std::unique_ptr< REMORAPhysBCFunct > > physbcs
Vector (over level) of functors to apply physical boundary conditions.
void ComputeDt()
a wrapper for estTimeStep()
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_msku_crse_on_fine
void fill_3d_masks(int lev)
Copy maskr to all z levels.
static void writeBuildInfo(std::ostream &os)
Write build info to os.
std::unique_ptr< NCTimeSeries > EminusP_data_from_file
Data container for evaporation minus precipitation read from file.
void FillCoarsePatch(int lev, amrex::Real time, amrex::MultiFab *mf_fine, amrex::MultiFab *mf_crse, const int bccomp, const int bdy_var_type=BdyVars::null, const int icomp=0, const bool fill_all=true, const int n_not_fill=0, const int icomp_calc=0, const amrex::Real dt=zero, const amrex::MultiFab &mf_calc=amrex::MultiFab())
fill an entire multifab by interpolating from the coarser level
virtual void ErrorEst(int lev, amrex::TagBoxArray &tags, amrex::Real time, int ngrow) override
Tag cells for refinement.
int plot_int
Plotfile output interval in iterations.
std::unique_ptr< NCTimeSeries > cloud_data_from_file
Data container for cloud cover fraction read from file.
amrex::Real getCPUTime() const
Get CPU time used.
void WriteNCPlotFile(int istep, amrex::MultiFab const *plotMF, int lev=0)
Write plotfile using NetCDF (wrapper)
amrex::YAFluxRegister * getAdvFluxReg(int lev)
flux register between lev and lev-1
int nbio
Number of biology tracers, set by the active biology model. Zero when no biology model is active.
void WriteAtFinalTime()
Write checkpoint and plotfiles at end of simulation.
void InitData()
Initialize multilevel data.
void update_avgdown_masks(int crse_lev)
Make sure the coarse masks the average-down kernels read sit on the coarsened layout of level crse_le...
void set3DPlotVariables(const std::string &pp_plot_var_names_3d)
amrex::Vector< int > istep
which step?
void uv3dmix(const amrex::Box &xbx, const amrex::Box &ybx, const amrex::Array4< amrex::Real > &u, const amrex::Array4< amrex::Real > &v, const amrex::Array4< amrex::Real const > &uold, const amrex::Array4< amrex::Real const > &vold, const amrex::Array4< amrex::Real > &rufrc, const amrex::Array4< amrex::Real > &rvfrc, const amrex::Array4< amrex::Real const > &visc2_p, const amrex::Array4< amrex::Real const > &visc2_r, const amrex::Array4< amrex::Real const > &Hz, const amrex::Array4< amrex::Real const > &pm, const amrex::Array4< amrex::Real const > &pn, const amrex::Array4< amrex::Real const > &mskp, int nrhs, int nnew, const amrex::Real dt_lev)
Harmonic viscosity.
void WriteCheckpointFile()
write checkpoint file to disk
std::string nc_clim_coeff_file
NetCDF climatology coefficient file.
void lin_eos(const amrex::Box &bx, const amrex::Array4< amrex::Real const > &state, const amrex::Array4< amrex::Real > &rho, const amrex::Array4< amrex::Real > &rhoA, const amrex::Array4< amrex::Real > &rhoS, const amrex::Array4< amrex::Real > &bvf, const amrex::Array4< amrex::Real const > &Hz, const amrex::Array4< amrex::Real const > &z_w, const amrex::Array4< amrex::Real const > &z_r, const amrex::Array4< amrex::Real const > &h, const amrex::Array4< amrex::Real const > &mskr, const int N)
Calculate density and related quantities from linear equation of state.
void setRecordDataInfo(int i, const std::string &filename)
void advance_3d_ml(int lev, amrex::Real dt_lev)
3D advance on a single level
const std::string DataLogName(int i) const noexcept
The filename of the ith datalog file.
void set_analytic_vmix(int lev)
Set vertical mixing coefficients from analytic.
void mask_arrays_for_write(int lev, amrex::Real fill_value, amrex::Real fill_where)
Mask data arrays before writing output.
void coarsen_masks_with_grow_cells(int crse_lev)
Coarsen the full-domain rho-mask from crse_lev+1 onto crse_lev, grow cells included,...
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_rhoS
density perturbation
amrex::Vector< std::string > bdry_time_name_byvar
Name of time fields for boundary data.
void rhs_uv_2d(int lev, const amrex::Box &xbx, const amrex::Box &ybx, const amrex::Array4< amrex::Real const > &uold, const amrex::Array4< amrex::Real const > &vold, const amrex::Array4< amrex::Real > &ru, const amrex::Array4< amrex::Real > &rv, const amrex::Array4< amrex::Real const > &Duon, const amrex::Array4< amrex::Real const > &Dvom, const int nrhs)
RHS terms for 2D momentum.
static int file_min_digits
Minimum number of digits in plotfile name or chunked history file.
void init_riv_pos_from_netcdf(int lev)
static amrex::Vector< std::string > nc_bdry_file
NetCDF boundary data.
amrex::Vector< REMORAFillPatcher > FPr_Dubar
Vector over levels of FillPatchers for Dubar (2D)
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_visc2_r
Harmonic viscosity defined on the rho points (centers)
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_yvel_full_domain
multilevel data container for high res initial y velocities (v in ROMS)
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_svstr
Surface stress in the v direction.
std::unique_ptr< NCTimeSeries > srflx_data_from_file
Data container for shortwave radiation flux read from file.
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_Huon
u-volume flux (3D)
void store_2d_flux(int lev)
store this level's barotropic mass flux per unit cell edge length
void FillBdyCCVels(int lev, amrex::MultiFab &mf_cc_vel)
Fill the physical boundary conditions for cell-centered velocity (diagnostic only)
void set_zeta(int lev)
Initialize zeta from file or analytic.
static amrex::Real change_max
Fraction maximum change in subsequent time steps.
void calc_stretch_coeffs()
calculate vertical stretch coefficients
int check_cf_metrics_flag
measure whether fine cell edges tile the coarse ones at a coarse-fine interface, which is what makes ...
int num_bio() const noexcept
Number of biology tracers carried in the state.
void init_zeta_from_netcdf(int lev)
Sea-surface height data initialization from NetCDF file.
void set_zeta_average(int lev)
Set Zt_avg1 to zeta.
void init_coriolis_from_netcdf(int lev)
Coriolis parameter data initialization from NetCDF file.
amrex::Vector< REMORAFillPatcher > FPr_Dvbar
Vector over levels of FillPatchers for Dvbar (2D)
static void print_usage(MPI_Comm, std::ostream &)
std::string pp_prefix
default prefix for input file parameters
void GetDeckConfiguredAtmosStateLanes(std::array< bool, AtmosState::NumTypes > &deck_configured) const
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_h_full_domain
Bathymetry data on the whole domain at each potential level.
void set_bathymetry(int lev)
Initialize bathymetry from file or analytic.
amrex::Vector< amrex::MultiFab * > yvel_old
multilevel data container for last step's y velocities (v in ROMS)
std::unique_ptr< NCTimeSeries > ubar_clim_data_from_file
Data container for ubar climatology data read from file.
void init_stuff(int lev, const amrex::BoxArray &ba, const amrex::DistributionMapping &dm)
Allocate MultiFabs for state and evolution variables.
void init_full_domain_from_analytic()
Initialize high-resolution initial data, zeta included, from analytic functions.
TimeInterpolatedData GetDataAtTime(int lev, amrex::Real time)
utility to copy in data from old and/or new state into another multifab
amrex::Real m_warned_surface_temp_max
void Advance(int lev, amrex::Real time, amrex::Real dt_lev, int iteration, int ncycle)
advance a single level for a single time step
void init_data_full_domain_from_netcdf()
High resolution roblem initialization from NetCDF file.
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_rhoA
vertically-averaged density
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_DV_avg1
time average of barotropic y velocity flux
void init_ref_ratios()
Reject vertical refinement and accumulate the refinement ratios.
amrex::Vector< REMORAFillPatcher > FPr_c
Vector over levels of FillPatchers for scalars.
int hires_init_level
Which level the high resolution initialization data is at.
amrex::Vector< std::string > clim_cons_time_varname
Vector over cons components of the name of the time field for that tracer's climatology data.
std::unique_ptr< NCTimeSeries > Tair_data_from_file
Data container for air temperature read from file.
int bdy_vbar() const noexcept
AMREX_GPU_HOST_DEVICE static AMREX_FORCE_INLINE amrex::Real bulk_psiu(amrex::Real ZoL)
Evaluate stability function psi for wind speed.
void apply_clim_nudg(const amrex::Box &bx, int ioff, int joff, const amrex::Array4< amrex::Real > &var, const amrex::Array4< amrex::Real const > &var_old, const amrex::Array4< amrex::Real const > &var_clim, const amrex::Array4< amrex::Real const > &clim_coeff, const amrex::Array4< amrex::Real const > &Hz, const amrex::Array4< amrex::Real const > &pm, const amrex::Array4< amrex::Real const > &pn, const amrex::Real dt_lev=zero)
Apply climatology nudging.
static void print_banner(MPI_Comm, std::ostream &)
int nscalar
Number of passive (dye) scalars carried in the state, beyond temperature and salinity....
std::string clim_v_time_varname
Name of time field for v climatology data.
amrex::Vector< REMORAFillPatcher > FPr_w
Vector over levels of FillPatchers for w.
amrex::Gpu::DeviceVector< amrex::Real > Cs_r
Stretching coefficients at rho points.
std::unique_ptr< NCTimeSeries > Uwind_data_from_file
Data container for u-direction wind read from file.
std::unique_ptr< NCTimeSeries > Pair_data_from_file
Data container for air pressure read from file.
int cf_fill_vel_after
re-fill the child's 3D velocity from the parent after the step, so the coarse-fine boundary carries t...
amrex::Vector< amrex::Real > t_new
new time at each level, in seconds since start_time
void SetStartTime(double time) noexcept
Set remora.start_time. Call before InitData, which starts the clock from it.
void init_stretch_coeffs()
initialize and calculate stretch coefficients
void init_bdry_from_netcdf(int lev)
Boundary data initialization from NetCDF file.
void scale_rhs_vars_inv(int lev)
Scale RHS momentum variables by cell area, needed after FillPatch to different levels.
static SolverChoice solverChoice
Container for algorithmic choices.
void ApplyAtmosphericStates(const amrex::Vector< amrex::MultiFab * > &states, amrex::Real time)
Receives atmospheric states from the driver and applies unit conversions.
void set_grid_coords_from_grid_scale(int lev)
Set x/y coords on level lev based on pm and pn.
void resize_stuff(int lev)
Resize variable containers to accommodate data on levels 0 to max_lev.
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_Akk
Turbulent kinetic energy vertical diffusion coefficient.
void set_masks(int lev)
Initialize land-sea masks from file or analytic.
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_rdrag2
Quadratic drag coefficient [unitless], defined at rho points.
void set_zeta_to_Ztavg(int lev, bool apply_eminusp=true)
Set zeta components to be equal to time-averaged Zt_avg1.
bool m_reported_atm_flux_validation
Latch so the flux validation block prints once per run unless remora.v >= 1.
void SetLongwaveFromDriver()
bool driver_uses_two_way_coupling
Driver-level direction flag copied in before InitData.
amrex::Vector< amrex::Vector< std::unique_ptr< NCTimeSeriesBoundary > > > boundary_series
Vector over BdyVars of boundary series data containers.
int cf_set_width
Width for fixing values at coarse-fine interface.
int biology_debug_j
Target column j index for biology_debug = 1.
void WriteGenericPlotfileHeaderWithBathymetry(std::ostream &HeaderFile, int nlevels, const amrex::Vector< amrex::BoxArray > &bArray, const amrex::Vector< std::string > &varnames_3d, const amrex::Vector< std::string > &varnames_2d_rho, const amrex::Vector< std::string > &varnames_2d_u, const amrex::Vector< std::string > &varnames_2d_v, const amrex::Vector< amrex::Geometry > &my_geom, double time, const amrex::Vector< int > &level_steps, const amrex::Vector< amrex::IntVect > &rr, const std::string &versionName, const std::string &levelPrefix, const std::string &mfPrefix) const
write out header data for an AMReX plotfile
void ReadParameters()
read in some parameters from inputs file
static void print_tpls(std::ostream &)
int do_reflux
correct the coarse tracer with the finer level's accumulated advective flux at their interface....
void vert_visc_3d(const amrex::Box &bx, const int ioff, const int joff, const amrex::Array4< amrex::Real > &phi, const amrex::Array4< amrex::Real const > &Hz, const amrex::Array4< amrex::Real > &Hzk, const amrex::Array4< amrex::Real > &AK, const amrex::Array4< amrex::Real const > &Akv, const amrex::Array4< amrex::Real > &BC, const amrex::Array4< amrex::Real > &DC, const amrex::Array4< amrex::Real > &FC, const amrex::Array4< amrex::Real > &CF, const int nnew, const int N, const amrex::Real dt_lev)
Calculate effects of vertical viscosity or diffusivity.
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_ru
u velocity RHS (3D, includes horizontal and vertical advection)
void clear_avgdown_masks(int lev)
Drop the cached average-down masks of every level pair that involves lev.
void sum_integrated_quantities(amrex::Real time)
Integrate conserved quantities for diagnostics.
static int total_nc_plot_file_step
amrex::Vector< amrex::Real > vec_weight1
Weights for calculating avg1 in 2D advance.
int bdy_ubar() const noexcept
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_xp
x_grid on psi-points (2D)
int cf_impose_flux
impose the parent's barotropic mass flux on DUon/DVom at the coarse-fine interface,...
void advance_biology(int lev, amrex::MultiFab const &mf_cons_old, amrex::MultiFab &mf_cons_new, int N, amrex::Real dt_lev)
Apply biological tracer source/sink terms.
void FillPatchNoBC(int lev, amrex::Real time, amrex::MultiFab &mf_to_be_filled, amrex::Vector< amrex::MultiFab * > const &mfs, const int bdy_var_type=BdyVars::null, const int icomp=0, const bool fill_all=true, const bool fill_set=false, amrex::Vector< amrex::MultiFab * > const &mfs_crse_old={}, amrex::Vector< amrex::MultiFab * > const &mfs_crse_new={})
Fill a new MultiFab by copying in phi from valid region and filling ghost cells without applying boun...
static amrex::Vector< amrex::Vector< std::string > > nc_grid_file
NetCDF grid file.
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_longwave_down
Downward longwave radiation.
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_zeta
free surface height (2D)
int ubar_bc() const noexcept
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)
void GetAtmosToOceanUFaceLayout(amrex::BoxArray &ba, amrex::DistributionMapping &dm) const
void ReadNCMultiFab(amrex::FabArray< amrex::FArrayBox > &fab, const std::string &name, int coordinatorProc=amrex::ParallelDescriptor::IOProcessorNumber(), int allow_empty_mf=0)
Read MultiFab in NetCDF format.
amrex::Box nc_hires_grid_box
Box for the full domain at nc_hires_grid_level.
void FillCoarsePatchPC(int lev, amrex::Real time, amrex::MultiFab *mf_fine, amrex::MultiFab *mf_crse, const int bccomp, const int bdy_var_type=BdyVars::null, const int icomp=0, const bool fill_all=true, const int n_not_fill=0, const int icomp_calc=0, const amrex::Real dt=zero, const amrex::MultiFab &mf_calc=amrex::MultiFab())
fill an entire multifab by interpolating from the coarser level using the piecewise constant interpol...
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_DU_avg1
time average of barotropic x velocity flux (2D)
amrex::Gpu::DeviceVector< amrex::Real > Cs_w
Stretching coefficients at w points.
bool expand_plotvars_to_unif_rr
whether plotfile variables should be expanded to a uniform refinement ratio
void advance_2d(int lev, amrex::MultiFab const *mf_rhoS, amrex::MultiFab const *mf_rhoA, amrex::MultiFab *mf_ru2d, amrex::MultiFab *mf_rv2d, amrex::MultiFab *mf_rufrc, amrex::MultiFab *mf_rvfrc, amrex::MultiFab *mf_Zt_avg1, std::unique_ptr< amrex::MultiFab > &mf_DU_avg1, std::unique_ptr< amrex::MultiFab > &mf_DU_avg2, std::unique_ptr< amrex::MultiFab > &mf_DV_avg1, std::unique_ptr< amrex::MultiFab > &mf_DV_avg2, std::unique_ptr< amrex::MultiFab > &mf_rubar, std::unique_ptr< amrex::MultiFab > &mf_rvbar, std::unique_ptr< amrex::MultiFab > &mf_rzeta, std::unique_ptr< amrex::MultiFab > &mf_ubar, std::unique_ptr< amrex::MultiFab > &mf_vbar, amrex::MultiFab *mf_zeta, amrex::MultiFab const *mf_h, amrex::MultiFab const *mf_pm, amrex::MultiFab const *mf_pn, amrex::MultiFab const *mf_fcor, amrex::MultiFab const *mf_visc2_p, amrex::MultiFab const *mf_visc2_r, amrex::MultiFab const *mf_mskr, amrex::MultiFab const *mf_msku, amrex::MultiFab const *mf_mskv, amrex::MultiFab const *mf_mskp, amrex::Real dtfast_lev, bool predictor_2d_step, bool first_2d_step, int my_iif, int &next_indx1)
Perform a 2D predictor (predictor_2d_step=True) or corrector (predictor_2d_step=False) step.
int plot_file_on_restart
Whether to output a plotfile on restart from checkpoint.
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_alpha
Thermal expansion coefficient (3D)
void set_2darrays(int lev)
Set 2D momentum arrays from 3D momentum.
void SetDriverAtmosToOceanForcingMode(DriverAtmosForcingMode mode)
void init_analytic(int lev)
Initialize initial problem data from analytic functions.
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_ubar
barotropic x velocity (2D)
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=false, const int n_not_fill=0, const int icomp_calc=0, const amrex::Real dt=zero, const amrex::MultiFab &mf_calc=amrex::MultiFab(), amrex::Vector< amrex::MultiFab * > const &mfs_crse_old={}, amrex::Vector< amrex::MultiFab * > const &mfs_crse_new={})
Fill a new MultiFab by copying in phi from valid region and filling ghost cells.
void restore_perimeter_faces(const amrex::MultiFab &saved, amrex::MultiFab &mf, const amrex::MultiFab &covered, int dir, int ncomp)
put back the coarse normal-velocity faces on the fine patch's perimeter
void InitializeLevelFromData(int lev, const amrex::MultiFab &initial_data)
Initialize the new-time data at a level from the initial_data MultiFab.
amrex::Vector< amrex::MultiFab * > cons_old
multilevel data container for last step's scalar data: temperature, salinity, passive tracer
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_bustr
Bottom stress in the u direction.
AMREX_FORCE_INLINE int NumDataLogs() noexcept
amrex::Real volWgtSumMF(int lev, const amrex::MultiFab &mf, int comp, bool local, bool finemask)
Perform the volume-weighted sum.
std::string frc_time_varname
Name of time field for forcing data.
void init_clim_nudg_coeff_from_netcdf(int lev)
Climatology nudging coefficient initialization from NetCDF file.
amrex::Vector< REMORAFillPatcher > FPr_ubar
Vector over levels of FillPatchers for ubar (2D)
bool is_it_time_for_action(int nstep, amrex::Real time, amrex::Real dt, int action_interval, amrex::Real action_per)
Decide if it is time to take an action.
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_cons_full_domain
multilevel data container for high res initial data: temperature, salinity, passive tracer
int vbar_bc() const noexcept
std::unique_ptr< NCTimeSeries > Vwind_data_from_file
Data container for v-direction wind read from file.
static constexpr bool DriverUsesStateForcing(DriverAtmosForcingMode mode) noexcept
static int ndtfast
User specified, number of barotropic steps per baroclinic step.
std::string PlotFileName(int lev) const
get plotfile name
void init_bathymetry_full_domain_from_netcdf()
Full domain high-res bathymetry data initialization from NetCDF file.
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_DV_avg2
correct time average of barotropic y velocity flux for coupling (2D)
amrex::Vector< std::unique_ptr< NCTimeSeries > > cons_clim_data_from_file
Vector over cons components of climatology data read from file.
void set_hmixcoef(int lev)
Initialize horizontal mixing coefficients.
amrex::Array< std::string, 2 *AMREX_SPACEDIM > domain_bc_type
Array of strings describing domain boundary conditions.
amrex::Vector< std::unique_ptr< NCTimeSeriesRiver > > river_source_cons
Vector of data containers for scalar data in rivers.
amrex::Real estTimeStep(int lev) const
compute dt from CFL considerations
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_yu
y_grid on u-points (2D)
void WriteNCPlotFile_which(int lev, int which_subdomain, amrex::MultiFab const *plotMF, bool write_header, ncutils::NCFile &ncf, bool is_history)
Write a particular NetCDF plotfile.
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_dndx
d(1/n)/d(xi)
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_bvstr
Bottom stress in the v direction.
void timeStep(int lev, amrex::Real time, int iteration)
advance a level by dt, includes a recursive call for finer levels
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_rzeta
free surface height for the RHS (2D)
std::unique_ptr< NCTimeSeriesRiver > river_source_transport
Data container for momentum transport in rivers.
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_z_phys_nd
z coordinates at psi points (cell nodes)
int cf_time_interp_zeta
interpolate the parent in time onto the child's own sub-time, as put_refine2d does,...
void init_grid_vars_full_domain_from_netcdf()
Full domain high-res grid variable initialization from NetCDF file.
void AverageDown()
set covered coarse cells to be the average of overlying fine cells
amrex::Real netcdf_fill_value
fill value for masked arrays in netcdf output
void set_nsubsteps(int nlevs_max)
size nsubsteps and set how many steps each level takes per parent step
int bdy_cons(int icomp) const noexcept
Accessors for the ncons-dependent entries of BdyVars.
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_Dvbar_old
DV_avg2 per unit cell edge length, see vec_Dubar_old (2D)
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_xu
x_grid on u-points (2D)
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_pn_full_domain
horizontal scaling factor: 1 / dy (2D) on whole domain
void timeStepML(amrex::Real time, int iteration)
advance all levels by dt, loops over finer levels
amrex::Vector< amrex::Vector< std::unique_ptr< amrex::MultiFab > > > vec_nudg_coeff
Climatology nudging coefficients.
void print_timestep_hierarchy() const
report the per-level slow/fast timestep hierarchy; call after ComputeDt
void set_weights(int lev)
Set weights for averaging 3D variables to 2D.
void prestep_t_advection(int lev, const amrex::Box &tbx, const amrex::Box &gbx, const amrex::Array4< amrex::Real > &tempold, const amrex::Array4< amrex::Real > &tempcache, const amrex::Array4< amrex::Real > &Hz, const amrex::Array4< amrex::Real > &Huon, const amrex::Array4< amrex::Real > &Hvom, const amrex::Array4< amrex::Real > &W, const amrex::Array4< amrex::Real > &DC, const amrex::Array4< amrex::Real > &FC, const amrex::Array4< amrex::Real > &sstore, const amrex::Array4< amrex::Real const > &z_w, const amrex::Array4< amrex::Real const > &h, const amrex::Array4< amrex::Real const > &pm, const amrex::Array4< amrex::Real const > &pn, const amrex::Array4< amrex::Real const > &msku, const amrex::Array4< amrex::Real const > &mskv, const amrex::Array4< int const > &river_pos, const amrex::Array4< amrex::Real const > &river_source, int iic, int ntfirst, int nrhs, int N, const amrex::Real dt_lev)
Prestep advection calculations for the tracers.
const amrex::DistributionMapping & full_domain_dmap()
The shared full-domain DistributionMapping, built on first use.
int cf_avgdown_stencil
average the fine velocity onto the coarse over ROMS's nine-point stencil (fine2coarse2d,...
AMREX_FORCE_INLINE std::ostream & DataLog(int i)
Helper function for IO stream.
int cf_set_2d_bcs
0 = never impose the 2D coarse-fine interface condition, 1 = every fast step, 2 = only the first fast...
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_pn
horizontal scaling factor: 1 / dy (2D)
void curvilinear(const amrex::Box &bx, const amrex::Box &xbx, const amrex::Box &ybx, const amrex::Array4< amrex::Real const > &uold, const amrex::Array4< amrex::Real const > &vold, const amrex::Array4< amrex::Real > &ru, const amrex::Array4< amrex::Real > &rv, const amrex::Array4< amrex::Real const > &Hz, const amrex::Array4< amrex::Real const > &dndx, const amrex::Array4< amrex::Real const > &dmde, int nrhs, int nr)
Calculate curvilinear advection terms.
amrex::Vector< std::unique_ptr< std::fstream > > datalog
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_Akv
Vertical viscosity coefficient (3D)
static amrex::Real cfl
CFL condition.
amrex::Vector< amrex::GpuArray< bool, AMREX_SPACEDIM *2 > > phys_bc_need_data
These are flags that indicate whether we need to read in boundary data from file.
void init_masks_full_domain_from_analytic()
Full domain land-sea mask initialization from analytic.
void append3DPlotVariables(const std::string &pp_plot_var_names_3d)
REMORABiology::FennelParameters fennel_params
Runtime parameters for the Fennel biology package.
void allocate_bathymetry_grid_vars_full_domain()
Allocate multifabs for storing full-domain bathymetry and grid vars data.
virtual void MakeNewLevelFromScratch(int lev, amrex::Real time, const amrex::BoxArray &ba, const amrex::DistributionMapping &dm) override
Make a new level from scratch using provided BoxArray and DistributionMapping. Only used during initi...
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_mskv_crse_on_fine
amrex::Vector< std::string > plot_var_names_3d
Names of 3D variables to output to AMReX plotfile.
amrex::Real elapsed_time(double time) const noexcept
Elapsed time since start_time of a time on the model clock.
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_stflux
Surface tracer flux; input arrays.
void set_init_data_averaged_down(int lev)
Problem initialization from averaged-down high resolution data.
static int verbose
Verbosity level of output.
void setup_step(int lev, amrex::Real time, amrex::Real dt_lev)
Set everything up for a step on a level.
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_Dubar_new
see vec_Dubar_old (2D)
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_rdrag
Linear drag coefficient [m/s], defined at rho points.
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_cloud
cloud cover fraction [0-1], defined at rho-points
void WriteMultiLevelPlotfileWithBathymetry(const std::string &plotfilename, int nlevels, const amrex::Vector< const amrex::MultiFab * > &mf, const amrex::Vector< const amrex::MultiFab * > &mf_nd, const amrex::Vector< const amrex::MultiFab * > &mf_u, const amrex::Vector< const amrex::MultiFab * > &mf_v, const amrex::Vector< const amrex::MultiFab * > &mf_w, const amrex::Vector< const amrex::MultiFab * > &mf_2d_rho, const amrex::Vector< const amrex::MultiFab * > &mf_2d_u, const amrex::Vector< const amrex::MultiFab * > &mf_2d_v, const amrex::Vector< std::string > &varnames_3d, const amrex::Vector< std::string > &varnames_2d_rho, const amrex::Vector< std::string > &varnames_2d_u, const amrex::Vector< std::string > &varnames_2d_v, const amrex::Vector< amrex::Geometry > &my_geom, double time, const amrex::Vector< int > &level_steps, const amrex::Vector< amrex::IntVect > &rr, const std::string &versionName="HyperCLaw-V1.1", const std::string &levelPrefix="Level_", const std::string &mfPrefix="Cell", const amrex::Vector< std::string > &extra_dirs=amrex::Vector< std::string >()) const
write out particular data to an AMReX plotfile
void nonlin_eos(const amrex::Box &bx, const amrex::Array4< amrex::Real const > &state, const amrex::Array4< amrex::Real > &rho, const amrex::Array4< amrex::Real > &rhoA, const amrex::Array4< amrex::Real > &rhoS, const amrex::Array4< amrex::Real > &bvf, const amrex::Array4< amrex::Real > &alpha, const amrex::Array4< amrex::Real > &beta, const amrex::Array4< amrex::Real const > &Hz, const amrex::Array4< amrex::Real const > &z_w, const amrex::Array4< amrex::Real const > &z_r, const amrex::Array4< amrex::Real const > &h, const amrex::Array4< amrex::Real const > &mskr, const int N)
Calculate density and related quantities from nonlinear equation of state.
void t3dmix2_geo(const amrex::Box &bx, const amrex::Array4< amrex::Real > &state, const amrex::Array4< amrex::Real > &state_rhs, const amrex::Array4< amrex::Real const > &diff2, const amrex::Array4< amrex::Real const > &Hz, const amrex::Array4< amrex::Real const > &z_r, const amrex::Array4< amrex::Real const > &pm, const amrex::Array4< amrex::Real const > &pn, const amrex::Array4< amrex::Real const > &msku, const amrex::Array4< amrex::Real const > &mskv, const amrex::Real dt_lev, const int ncomp, const int N)
Harmonic diffusivity for tracers along geopotential surfaces.
std::string plot_file_name
Plotfile prefix.
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_Zt_avg1
Average of the free surface, zeta (2D)
int check_int
Checkpoint output interval in iterations.
amrex::Real check_cf_tol
tolerance for the above
void set_smflux(int lev)
Initialize or calculate surface momentum flux from file or analytic.
void WritePlotFile(int istep)
main driver for writing AMReX plotfiles
std::string restart_chkfile
If set, restart from this checkpoint file.
void average_down_with_grow_cells(int lev, amrex::Vector< std::unique_ptr< amrex::MultiFab > > &mf, bool use_mask=false)
Average down from level lev+1 to lev in mf, including grow cells.
void init_clim_nudg_coeff(int lev)
Wrapper to initialize climatology nudging coefficient.
void init_bathymetry_full_domain_from_analytic()
Full domain bathymetry data initialization from analytic.
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_rv
v velocity RHS (3D, includes horizontal and vertical advection)
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_btflx
Bottom tracer flux; working arrays.
int cf_width
Nudging width at coarse-fine interface.
AMREX_GPU_HOST_DEVICE static AMREX_FORCE_INLINE amrex::Real bulk_psit(amrex::Real ZoL)
Evaluate stability function psi for moisture and heat.
static amrex::Vector< amrex::Vector< std::string > > nc_init_file
NetCDF initialization file.
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_beta
Saline contraction coefficient (3D)
int last_plot_file_step
Step when we last output a plotfile.
amrex::Vector< std::string > plot_var_names_2d
Names of 2D variables to output to AMReX plotfile.
int use_biology_cpp_answer
Select the native C++ biology kernel (1) or the ROMS Fortran bridge oracle (0). Only meaningful when ...
void bulk_fluxes(int lev, amrex::MultiFab *mf_cons, amrex::MultiFab *mf_uwind, amrex::MultiFab *mf_vwind, amrex::MultiFab *mf_Tair, amrex::MultiFab *mf_qair, amrex::MultiFab *mf_Pair, amrex::MultiFab *mf_srflx, amrex::MultiFab *mf_longwave_down, amrex::MultiFab *mf_evap, amrex::MultiFab *mf_sustr, amrex::MultiFab *mf_svstr, amrex::MultiFab *mf_stflux, amrex::MultiFab *mf_lrflx, amrex::MultiFab *mf_lhflx, amrex::MultiFab *mf_shflx, const int N)
Calculate bulk temperature, salinity, wind fluxes.
void t3dmix2_s(const amrex::Box &bx, const amrex::Array4< amrex::Real > &state, const amrex::Array4< amrex::Real > &state_rhs, const amrex::Array4< amrex::Real const > &diff2, const amrex::Array4< amrex::Real const > &Hz, const amrex::Array4< amrex::Real const > &pm, const amrex::Array4< amrex::Real const > &pn, const amrex::Array4< amrex::Real const > &msku, const amrex::Array4< amrex::Real const > &mskv, const amrex::Real dt_lev, const int ncomp)
Harmonic diffusivity for tracers along S-coordinate level surfaces.
amrex::Vector< amrex::Real > t_old
old time at each level, in seconds since start_time
double model_time(amrex::Real elapsed) const noexcept
Time on the model clock, in seconds, of an elapsed time such as t_new.
void scale_rhs_vars(int lev)
Scale RHS momentum variables by 1/cell area, needed before FillPatch to different levels.
int bio_comp_start() const noexcept
First cons component of the biology block. Problem setups need this to write biology initial conditio...
int cf_fill_all_kcomp
write every leapfrog record of the coarse-fine ghost band, as put_refine2d does when it sets zeta(:,...
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_mskr3d
land/sea mask at cell centers, copied to all z levels (3D)
amrex::Vector< amrex::GpuArray< amrex::Real, AMREX_SPACEDIM *2 > > m_bc_extdir_vals
Array holding the Dirichlet values at walls which need them.
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_srflx
Shortwave radiation flux [W/m²], defined at rho-points.
amrex::Real last_check_file_time
Simulation time when we last output a checkpoint file.
static amrex::Vector< REMORAErrorTag > ref_tags
Holds info for dynamically generated tagging criteria.
void append2DPlotVariables(const std::string &pp_plot_var_names_2d)
void set_bathymetry_averaged_down(int lev)
Copy over bathymetry data that has been averaged down from high resolution input netcdf file.
amrex::Vector< amrex::Real > dt
time step at each level
void PackSurfaceState(amrex::Vector< amrex::MultiFab * > &state, amrex::Real time, const amrex::MultiFab *weight_o2a_mf, const amrex::iMultiFab *index_o2a_mf, int max_stencil_size, const amrex::iMultiFab *dst_land_mask=nullptr)
Extracts SST from the 3D conservative state for the atmospheric driver.
static amrex::Real sum_per
Diagnostic sum output interval in time.
void roll_2d_snapshot(amrex::Vector< std::unique_ptr< amrex::MultiFab > > &old_v, amrex::Vector< std::unique_ptr< amrex::MultiFab > > &new_v, int lev, const amrex::MultiFab &src, const amrex::MultiFab &like)
roll a two-snapshot history of a level's end-of-step 2D state
void set_2d_cf_flux(int lev, amrex::Real time, amrex::MultiFab &mf_DUon, amrex::MultiFab &mf_DVom)
impose the parent's barotropic mass flux on the coarse-fine interface faces
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_Pair
Air pressure [mb], defined at rho-points.
void InitializeFromFile()
Read the file passed to remora.restart and use it as an initial condition for the current simulation.
void coriolis(const amrex::Box &xbx, const amrex::Box &ybx, const amrex::Array4< amrex::Real const > &uold, const amrex::Array4< amrex::Real const > &vold, const amrex::Array4< amrex::Real > &ru, const amrex::Array4< amrex::Real > &rv, const amrex::Array4< amrex::Real const > &Hz, const amrex::Array4< amrex::Real const > &fomn, int nrhs, int nr)
Calculate Coriolis terms.
amrex::Gpu::DeviceVector< amrex::BCRec > domain_bcs_type_d
GPU vector (over BCVars) of BCRecs.
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_qair
Specific humidity [kg/kg], defined at rho-points.
int hires_grid_level
Which level the high resolution bathymetry is at.
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_z_w
z coordinates at w points (faces between z-cells)
int reflux_clamp
stop that correction driving a tracer negative, as ROMS does. On by default to match ROMS; costs exac...
std::unique_ptr< NCTimeSeries > vbar_clim_data_from_file
Data container for vbar climatology data read from file.
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_Tair
Air temperature [°C], defined at rho-points.
void convert_inv_days_to_inv_s(amrex::MultiFab *)
Convert data in a multifab from inverse days to inverse seconds.
const amrex::Vector< std::string > derived_names_2d
Names of derived fields for 2d plotfile fields.
void average_down_masked(int crse_lev, const amrex::MultiFab &S_fine, amrex::MultiFab &S_crse, const amrex::MultiFab &msk_fine, const amrex::MultiFab &cmsk, int ncomp, int face_dir)
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_yr
y_grid on rho points (2D)
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_Hvom
v-volume flux (3D)
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_Akp
Turbulent length scale vertical diffusion coefficient.
void gls_corrector(int lev, amrex::MultiFab *mf_gls, amrex::MultiFab *mf_tke, amrex::MultiFab &mf_W, amrex::MultiFab *mf_Akv, amrex::MultiFab *mf_Akt, amrex::MultiFab *mf_Akk, amrex::MultiFab *mf_Akp, amrex::MultiFab *mf_mskr, amrex::MultiFab *mf_msku, amrex::MultiFab *mf_mskv, const int nstp, const int nnew, const int N, const amrex::Real dt_lev)
Corrector step for GLS calculation.
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_diff2
Harmonic diffusivity for temperature / salinity.
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_latp
latitude on psi-points (2D, degrees north); only filled when the grid NetCDF file carries lat_psi
REMORABiology::BiologyICType biology_ic_type
Source of the biology tracer initial condition, independent of remora.ic_type. Default follows ic_typ...
int NumTypes(int ncons) noexcept
int xvel_bc(int ncons) noexcept
int zvel_bc(int ncons) noexcept
int yvel_bc(int ncons) noexcept
int vbar_bc(int ncons) noexcept
int foextrap_bc(int ncons) noexcept
int v2d_simple_bc(int ncons) noexcept
int u2d_simple_bc(int ncons) noexcept
int zeta_bc(int ncons) noexcept
int ubar_bc(int ncons) noexcept
int tke_bc(int ncons) noexcept
int foextrap_periodic_bc(int ncons) noexcept
int NumTypes(int ncons) noexcept
int vbar(int ncons) noexcept
int cons(int icomp) noexcept
static constexpr int null
int zeta(int ncons) noexcept
int ubar(int ncons) noexcept
@ CellConservativeQuartic
@ CellConservativeProtected
@ follow_ic_type
default: NetCDF when ic_type is netcdf, else analytic
Coordinates a prob function reads, on the BoxArray and DistributionMapping of the MultiFab it fills.