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>
40#ifdef REMORA_USE_PARTICLES
44#ifdef REMORA_USE_NETCDF
58#include <AMReX_Lazy.H>
62using amrex::MPI_COMM_WORLD;
80#ifdef REMORA_USE_NETCDF
90 :
public amrex::AmrCore
150 amrex::DistributionMapping&
dm)
const;
152 amrex::DistributionMapping&
dm)
const;
154 amrex::DistributionMapping&
dm)
const;
159 const amrex::MultiFab*&
y_psi)
const;
169 const amrex::MultiFab*&
lat_psi)
const;
175 const amrex::MultiFab*&
msku,
176 const amrex::MultiFab*&
mskv)
const;
268 const amrex::DistributionMapping&
dm)
override;
275 const amrex::DistributionMapping&
dm)
override;
287 const amrex::DistributionMapping&
dm)
override;
323 const amrex::Real
dt,
const amrex::Real
time);
334 const amrex::Vector<const amrex::MultiFab*> &
mf,
335 const amrex::Vector<const amrex::MultiFab*> &
mf_nd,
336 const amrex::Vector<const amrex::MultiFab*> &
mf_u,
337 const amrex::Vector<const amrex::MultiFab*> &
mf_v,
338 const amrex::Vector<const amrex::MultiFab*> &
mf_w,
339 const amrex::Vector<const amrex::MultiFab*> &
mf_2d_rho,
340 const amrex::Vector<const amrex::MultiFab*> &
mf_2d_u,
341 const amrex::Vector<const amrex::MultiFab*> &
mf_2d_v,
346 const amrex::Vector<amrex::Geometry>&
my_geom,
349 const amrex::Vector<amrex::IntVect>&
rr,
352 const std::string &
mfPrefix =
"Cell",
353 const amrex::Vector<std::string>&
extra_dirs = amrex::Vector<std::string>())
const;
360 const amrex::Vector<amrex::BoxArray> &
bArray,
365 const amrex::Vector<amrex::Geometry>&
my_geom,
368 const amrex::Vector<amrex::IntVect>&
rr,
406 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_h;
412 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_Hz;
414 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_Huon;
416 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_Hvom;
418 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_ru;
420 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_rv;
422 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_ru2d;
424 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_rv2d;
426 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_rufrc;
428 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_rvfrc;
430 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_Akv;
432 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_Akt;
438 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_diff2;
441 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_z_r;
444 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_z_w;
446 amrex::Gpu::DeviceVector<amrex::Real>
s_r;
448 amrex::Gpu::DeviceVector<amrex::Real>
s_w;
456 amrex::Gpu::DeviceVector<amrex::Real>
Cs_r;
458 amrex::Gpu::DeviceVector<amrex::Real>
Cs_w;
467 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_sustr;
469 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_svstr;
472 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_uwind;
474 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_vwind;
476 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_Tair;
478 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_qair;
480 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_Pair;
483 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_srflx;
485 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_lrflx;
489 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_lhflx;
491 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_shflx;
494 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_stflx;
498 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_btflx;
503 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_rain;
505 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_evap;
507 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_cloud;
521 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_rdrag;
525 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_ZoBot;
528 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_bustr;
530 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_bvstr;
541 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_rubar;
543 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_rvbar;
545 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_rzeta;
547 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_ubar;
549 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_vbar;
551 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_zeta;
557 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_mskr;
559 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_msku;
561 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_mskv;
563 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_mskp;
568 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_pm;
570 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_pn;
577 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_fcor;
580 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_xr;
582 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_yr;
585 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_xu;
587 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_yu;
590 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_xv;
592 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_yv;
595 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_xp;
597 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_yp;
601 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_lonp;
604 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_latp;
607 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_dndx;
609 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_dmde;
615 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_rhoS;
617 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_rhoA;
619 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_bvf;
621 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_alpha;
623 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_beta;
632 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_tke;
634 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_gls;
638 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_Akk;
640 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_Akp;
659 amrex::MultiFab
const*
mf_rhoS,
660 amrex::MultiFab
const*
mf_rhoA,
670 std::unique_ptr<amrex::MultiFab>&
mf_rubar,
671 std::unique_ptr<amrex::MultiFab>&
mf_rvbar,
672 std::unique_ptr<amrex::MultiFab>&
mf_rzeta,
673 std::unique_ptr<amrex::MultiFab>&
mf_ubar,
674 std::unique_ptr<amrex::MultiFab>&
mf_vbar,
676 amrex::MultiFab
const*
mf_h,
677 amrex::MultiFab
const*
mf_pm,
678 amrex::MultiFab
const*
mf_pn,
679 amrex::MultiFab
const*
mf_fcor,
682 amrex::MultiFab
const*
mf_mskr,
683 amrex::MultiFab
const*
mf_msku,
684 amrex::MultiFab
const*
mf_mskv,
685 amrex::MultiFab
const*
mf_mskp,
694 amrex::MultiFab&
mf_u , amrex::MultiFab&
mf_v,
696 amrex::MultiFab*
mf_ru , amrex::MultiFab*
mf_rv,
701 std::unique_ptr<amrex::MultiFab>&
mf_ubar,
702 std::unique_ptr<amrex::MultiFab>&
mf_vbar,
703 std::unique_ptr<amrex::MultiFab>&
mf_Akv,
704 std::unique_ptr<amrex::MultiFab>&
mf_Akt,
705 std::unique_ptr<amrex::MultiFab>&
mf_Hz,
706 std::unique_ptr<amrex::MultiFab>&
mf_Huon,
707 std::unique_ptr<amrex::MultiFab>&
mf_Hvom,
708 std::unique_ptr<amrex::MultiFab>&
mf_z_w,
709 amrex::MultiFab
const*
mf_h,
710 amrex::MultiFab
const*
mf_pm,
711 amrex::MultiFab
const*
mf_pn,
712 amrex::MultiFab
const*
mf_mskr,
713 amrex::MultiFab
const*
mf_msku,
714 amrex::MultiFab
const*
mf_mskv,
716 const amrex::Real
dt_lev);
723#ifdef REMORA_USE_FENNEL_FORT
754 amrex::MultiFab&
mf_u, amrex::MultiFab&
mf_v,
755 amrex::MultiFab*
mf_ru,
756 amrex::MultiFab*
mf_rv,
757 amrex::MultiFab&
S_old,
758 amrex::MultiFab&
S_new,
759 amrex::MultiFab&
mf_W, amrex::MultiFab&
mf_DC,
761 const amrex::MultiFab*
mf_z_r,
762 const amrex::MultiFab*
mf_z_w,
763 const amrex::MultiFab*
mf_h,
764 const amrex::MultiFab*
mf_pm,
765 const amrex::MultiFab*
mf_pn,
770 const amrex::MultiFab*
mf_msku,
771 const amrex::MultiFab*
mf_mskv,
772 const int iic,
const int nfirst,
773 const int nnew,
int nstp,
int nrhs,
774 int N,
const amrex::Real
dt_lev);
778 const amrex::Box&
gbx,
779 const amrex::Array4<amrex::Real >&
tempold,
780 const amrex::Array4<amrex::Real >&
tempcache,
781 const amrex::Array4<amrex::Real >&
Hz,
782 const amrex::Array4<amrex::Real >&
Huon,
783 const amrex::Array4<amrex::Real >&
Hvom,
784 const amrex::Array4<amrex::Real >&
W,
785 const amrex::Array4<amrex::Real >&
DC,
786 const amrex::Array4<amrex::Real >&
FC,
787 const amrex::Array4<amrex::Real >&
sstore,
788 const amrex::Array4<amrex::Real const>& z_w,
789 const amrex::Array4<amrex::Real const>&
h,
790 const amrex::Array4<amrex::Real const>&
pm,
791 const amrex::Array4<amrex::Real const>&
pn,
792 const amrex::Array4<amrex::Real const>&
msku,
793 const amrex::Array4<amrex::Real const>&
mskv,
794 const amrex::Array4<int const>&
river_pos,
797 const amrex::Real
dt_lev);
801 const amrex::Box&
bx,
802 const amrex::Array4<amrex::Real >& t,
803 const amrex::Array4<amrex::Real const>&
tempstore,
804 const amrex::Array4<amrex::Real const>&
Huon,
805 const amrex::Array4<amrex::Real const>&
Hvom,
806 const amrex::Array4<amrex::Real const>&
Hz,
807 const amrex::Array4<amrex::Real const>&
pn,
808 const amrex::Array4<amrex::Real const>&
pm,
809 const amrex::Array4<amrex::Real const>&
W,
810 const amrex::Array4<amrex::Real >&
FC,
811 const amrex::Array4<amrex::Real const>&
mskr,
812 const amrex::Array4<amrex::Real const>&
msku,
813 const amrex::Array4<amrex::Real const>&
mskv,
814 const amrex::Array4<int const>&
river_pos,
816 int nrhs,
int nnew,
int N,
const amrex::Real
dt_lev);
820 const amrex::Box&
xbx,
821 const amrex::Box&
ybx,
822 const amrex::Array4<amrex::Real const>&
uold,
823 const amrex::Array4<amrex::Real const>&
vold,
824 const amrex::Array4<amrex::Real >&
ru,
825 const amrex::Array4<amrex::Real >&
rv,
826 const amrex::Array4<amrex::Real >&
rufrc,
827 const amrex::Array4<amrex::Real >&
rvfrc,
828 const amrex::Array4<amrex::Real const>& sustr,
829 const amrex::Array4<amrex::Real const>& svstr,
830 const amrex::Array4<amrex::Real const>&
bustr,
831 const amrex::Array4<amrex::Real const>&
bvstr,
832 const amrex::Array4<amrex::Real const>&
Huon,
833 const amrex::Array4<amrex::Real const>&
Hvom,
834 const amrex::Array4<amrex::Real const>&
pm,
835 const amrex::Array4<amrex::Real const>&
pn,
836 const amrex::Array4<amrex::Real const>&
W,
837 const amrex::Array4<amrex::Real >&
FC,
842 const amrex::Box&
xbx,
843 const amrex::Box&
ybx,
844 const amrex::Array4<amrex::Real const>&
uold,
845 const amrex::Array4<amrex::Real const>&
vold,
846 const amrex::Array4<amrex::Real >&
ru,
847 const amrex::Array4<amrex::Real >&
rv,
848 const amrex::Array4<amrex::Real const>&
Duon,
849 const amrex::Array4<amrex::Real const>&
Dvom,
854 const amrex::Array4<amrex::Real const>&
state,
855 const amrex::Array4<amrex::Real >&
rho,
856 const amrex::Array4<amrex::Real >&
rhoA,
857 const amrex::Array4<amrex::Real >&
rhoS,
858 const amrex::Array4<amrex::Real >&
bvf,
859 const amrex::Array4<amrex::Real >&
alpha,
860 const amrex::Array4<amrex::Real >&
beta,
861 const amrex::Array4<amrex::Real const>&
Hz,
862 const amrex::Array4<amrex::Real const>& z_w,
863 const amrex::Array4<amrex::Real const>& z_r,
864 const amrex::Array4<amrex::Real const>&
h,
865 const amrex::Array4<amrex::Real const>&
mskr,
870 const amrex::Array4<amrex::Real const>&
state,
871 const amrex::Array4<amrex::Real >&
rho,
872 const amrex::Array4<amrex::Real >&
rhoA,
873 const amrex::Array4<amrex::Real >&
rhoS,
874 const amrex::Array4<amrex::Real >&
bvf,
875 const amrex::Array4<amrex::Real const>&
Hz,
876 const amrex::Array4<amrex::Real const>& z_w,
877 const amrex::Array4<amrex::Real const>& z_r,
878 const amrex::Array4<amrex::Real const>&
h,
879 const amrex::Array4<amrex::Real const>&
mskr,
884 const amrex::Array4<amrex::Real const>&
state,
885 const amrex::Array4<amrex::Real >&
rho,
886 const amrex::Array4<amrex::Real >&
rhoA,
887 const amrex::Array4<amrex::Real >&
rhoS,
888 const amrex::Array4<amrex::Real >&
bvf,
889 const amrex::Array4<amrex::Real >&
alpha,
890 const amrex::Array4<amrex::Real >&
beta,
891 const amrex::Array4<amrex::Real const>&
Hz,
892 const amrex::Array4<amrex::Real const>& z_w,
893 const amrex::Array4<amrex::Real const>& z_r,
894 const amrex::Array4<amrex::Real const>&
h,
895 const amrex::Array4<amrex::Real const>&
mskr,
900 const amrex::Box&
gbx,
901 const amrex::Box&
utbx,
902 const amrex::Box&
vtbx,
903 const amrex::Array4<amrex::Real >&
ru,
904 const amrex::Array4<amrex::Real >&
rv,
905 const amrex::Array4<amrex::Real const>&
pn,
906 const amrex::Array4<amrex::Real const>&
pm,
907 const amrex::Array4<amrex::Real const>&
rho,
908 const amrex::Array4<amrex::Real >&
FC,
909 const amrex::Array4<amrex::Real const>&
Hz,
910 const amrex::Array4<amrex::Real const>& z_r,
911 const amrex::Array4<amrex::Real const>& z_w,
912 const amrex::Array4<amrex::Real const>&
msku,
913 const amrex::Array4<amrex::Real const>&
mskv,
914 const int nrhs,
const int N);
919 const amrex::Box&
gbx,
921 const amrex::Array4<amrex::Real >&
vel,
922 const amrex::Array4<amrex::Real const>&
vel_old,
923 const amrex::Array4<amrex::Real >&
rvel,
924 const amrex::Array4<amrex::Real const>&
Hz,
925 const amrex::Array4<amrex::Real const>&
Akv,
926 const amrex::Array4<amrex::Real >&
FC,
927 const amrex::Array4<amrex::Real const>&
sstr,
928 const amrex::Array4<amrex::Real const>&
bstr,
929 const amrex::Array4<amrex::Real const>& z_r,
930 const amrex::Array4<amrex::Real const>&
pm,
931 const amrex::Array4<amrex::Real const>&
pn,
932 const int iic,
const int ntfirst,
const int nnew,
int nstp,
int nrhs,
int N,
938 const amrex::Array4<amrex::Real >&
phi,
939 const amrex::Array4<amrex::Real const>&
Hz,
940 const amrex::Array4<amrex::Real >&
Hzk,
941 const amrex::Array4<amrex::Real >&
AK,
942 const amrex::Array4<amrex::Real const>&
Akv,
943 const amrex::Array4<amrex::Real >&
BC,
944 const amrex::Array4<amrex::Real >&
DC,
945 const amrex::Array4<amrex::Real >&
FC,
946 const amrex::Array4<amrex::Real >&
CF,
947 const int nnew,
const int N,
948 const amrex::Real
dt_lev);
953 const amrex::Array4<amrex::Real >&
phi,
954 const amrex::Array4<amrex::Real >&
phibar,
955 const amrex::Array4<amrex::Real >&
Hphi,
956 const amrex::Array4<amrex::Real const>&
Hz,
957 const amrex::Array4<amrex::Real const>&
pm_or_pn,
958 const amrex::Array4<amrex::Real const>&
Dphi1,
959 const amrex::Array4<amrex::Real const>&
Dphi2,
960 const amrex::Array4<amrex::Real >&
DC,
961 const amrex::Array4<amrex::Real >&
FC,
962 const amrex::Array4<amrex::Real const>&
msk,
968 const amrex::Array4<amrex::Real >&
phi,
969 const amrex::Array4<amrex::Real const>&
Hz,
970 const amrex::Array4<amrex::Real const>&
Dphi_avg1,
971 const amrex::Array4<amrex::Real >&
DC,
972 const amrex::Array4<amrex::Real >&
CF,
973 const amrex::Array4<amrex::Real const>&
pm_or_pn,
974 const amrex::Array4<amrex::Real const>&
msk,
975 const int nnew,
const int N);
979 const amrex::Box&
ybx,
980 const amrex::Array4<amrex::Real >& u,
981 const amrex::Array4<amrex::Real >& v,
982 const amrex::Array4<amrex::Real const>&
uold,
983 const amrex::Array4<amrex::Real const>&
vold,
984 const amrex::Array4<amrex::Real >&
rufrc,
985 const amrex::Array4<amrex::Real >&
rvfrc,
986 const amrex::Array4<amrex::Real const>&
visc2_p,
987 const amrex::Array4<amrex::Real const>&
visc2_r,
988 const amrex::Array4<amrex::Real const>&
Hz,
989 const amrex::Array4<amrex::Real const>&
pm,
990 const amrex::Array4<amrex::Real const>&
pn,
991 const amrex::Array4<amrex::Real const>&
mskp,
993 const amrex::Real
dt_lev);
997 const amrex::Array4<amrex::Real >&
state,
998 const amrex::Array4<amrex::Real >&
state_rhs,
999 const amrex::Array4<amrex::Real const>&
diff2,
1000 const amrex::Array4<amrex::Real const>&
Hz,
1001 const amrex::Array4<amrex::Real const>& z_r,
1002 const amrex::Array4<amrex::Real const>&
pm,
1003 const amrex::Array4<amrex::Real const>&
pn,
1004 const amrex::Array4<amrex::Real const>&
msku,
1005 const amrex::Array4<amrex::Real const>&
mskv,
1006 const amrex::Real
dt_lev,
1007 const int ncomp,
const int N);
1011 const amrex::Array4<amrex::Real >&
state,
1012 const amrex::Array4<amrex::Real >&
state_rhs,
1013 const amrex::Array4<amrex::Real const>&
diff2,
1014 const amrex::Array4<amrex::Real const>&
Hz,
1015 const amrex::Array4<amrex::Real const>&
pm,
1016 const amrex::Array4<amrex::Real const>&
pn,
1017 const amrex::Array4<amrex::Real const>&
msku,
1018 const amrex::Array4<amrex::Real const>&
mskv,
1023 const amrex::Array4<amrex::Real >&
state,
1024 const amrex::Array4<amrex::Real >&
state_rhs,
1025 const amrex::Array4<amrex::Real const>&
diff2,
1026 const amrex::Array4<amrex::Real const>&
Hz,
1027 const amrex::Array4<amrex::Real const>& z_r,
1028 const amrex::Array4<amrex::Real const>&
pm,
1029 const amrex::Array4<amrex::Real const>&
pn,
1030 const amrex::Array4<amrex::Real const>&
msku,
1031 const amrex::Array4<amrex::Real const>&
mskv,
1032 const amrex::Real
dt_lev,
1033 const int ncomp,
const int N);
1037 const amrex::Box&
ybx,
1038 const amrex::Array4<amrex::Real const>&
uold,
1039 const amrex::Array4<amrex::Real const>&
vold,
1040 const amrex::Array4<amrex::Real >&
ru,
1041 const amrex::Array4<amrex::Real >&
rv,
1042 const amrex::Array4<amrex::Real const>&
Hz,
1043 const amrex::Array4<amrex::Real const>&
fomn,
1048 const amrex::Box&
xbx,
1049 const amrex::Box&
ybx,
1050 const amrex::Array4<amrex::Real const>&
uold,
1051 const amrex::Array4<amrex::Real const>&
vold,
1052 const amrex::Array4<amrex::Real >&
ru,
1053 const amrex::Array4<amrex::Real >&
rv,
1054 const amrex::Array4<amrex::Real const>&
Hz,
1055 const amrex::Array4<amrex::Real const>&
dndx,
1056 const amrex::Array4<amrex::Real const>&
dmde,
1074 const amrex::Box& domain,
1080 const amrex::Array4<amrex::Real >& var,
1081 const amrex::Array4<amrex::Real const>&
var_old,
1082 const amrex::Array4<amrex::Real const>&
var_clim,
1083 const amrex::Array4<amrex::Real const>&
clim_coeff,
1084 const amrex::Array4<amrex::Real const>&
Hz,
1085 const amrex::Array4<amrex::Real const>&
pm,
1086 const amrex::Array4<amrex::Real const>&
pn,
1125 amrex::MultiFab&
mf_W,
1127 const int nstp,
const int nnew,
const int iic,
const int ntfirst,
1128 const int N,
const amrex::Real
dt_lev);
1135 const int nstp,
const int nnew,
1136 const int N,
const amrex::Real
dt_lev);
1164 amrex::Vector<amrex::MultiFab*>
const&
mfs,
1172 const amrex::Real
dt =
zero,
1173 const amrex::MultiFab&
mf_calc = amrex::MultiFab());
1178 amrex::Vector<amrex::MultiFab*>
const&
mfs,
1186 const amrex::MultiFab&
mf_mask,
1187 const amrex::Real
time,
1192 const amrex::MultiFab&
mf_calc = amrex::MultiFab(),
1193 const amrex::Real =
zero);
1201 const int icomp = 0,
1205 const amrex::Real
dt =
zero,
1206 const amrex::MultiFab&
mf_calc = amrex::MultiFab());
1213 const int icomp = 0,
1217 const amrex::Real
dt =
zero,
1218 const amrex::MultiFab&
mf_calc = amrex::MultiFab());
1226 const int icomp = 0,
1230 const amrex::Real
dt =
zero,
1231 const amrex::MultiFab&
mf_calc = amrex::MultiFab(),
1232 amrex::Interpolater*
mapper =
nullptr);
1344#ifdef REMORA_USE_NETCDF
1375 void init_stuff (
int lev,
const amrex::BoxArray&
ba,
const amrex::DistributionMapping&
dm);
1378 void init_masks (
int lev,
const amrex::BoxArray&
ba,
const amrex::DistributionMapping&
dm);
1415#ifdef REMORA_USE_NETCDF
1421 amrex::MultiFab
const*
plotMF,
1427 const std::string& name,
1432 const std::string &name,
1499#ifdef REMORA_USE_MOAB
1542 std::unique_ptr<ProblemBase>
prob =
nullptr;
1560 amrex::Vector<amrex::Real>
dt;
1566 amrex::Vector<std::unique_ptr<REMORAPhysBCFunct>>
physbcs;
1624 amrex::Real
stop_time = std::numeric_limits<amrex::Real>::max();
1709 amrex::Vector<std::string>
cons_names {
"temp",
"salt",
"tracer"};
1728#ifdef REMORA_USE_PARTICLES
1743 const amrex::Vector<std::unique_ptr<amrex::MultiFab>>& );
1748 amrex::Vector<amrex::MultiFab const*>&
flow_vel,
1749 const amrex::Vector<std::unique_ptr<amrex::MultiFab>>& );
1773 static amrex::Vector<amrex::Vector<std::string>>
nc_init_file;
1775 static amrex::Vector<amrex::Vector<std::string>>
nc_grid_file;
1841 switch (spatial_order) {
1858 amrex::Error(
"Must specify spatial order to be 2,3,4,5 or 6");
1888 int numCores = amrex::ParallelDescriptor::NProcs();
1902 if (amrex::ParallelDescriptor::IOProcessor())
1904 datalog[
i] = std::make_unique<std::fstream>();
1910 amrex::ParallelDescriptor::Barrier(
"REMORA::setRecordDataInfo");
1913 amrex::Vector<std::unique_ptr<std::fstream> >
datalog;
1926 static void print_usage(MPI_Comm , std::ostream& );
1947 using namespace amrex;
1954 std::log(Real(0.5)*(
one+
x*
x))-
1955 two*std::atan(
x)+Real(0.5)*
PI;
1968 Real
cff=std::min(Real(50.0),Real(0.35)*
ZoL);
1970 std::exp(
cff)+Real(8.525));
1979 using namespace amrex;
1984 Real
x = std::pow(
one-Real(15.0)*
ZoL,Real(0.5));
1998 Real
cff=std::min(Real(50.0),Real(0.35)*
ZoL);
2000 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_EminusP
evaporation minus precipitation [kg/m^2/s], defined at rho-points
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)
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 SetStartTime(amrex::Real time) noexcept
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.
void scale_rhs_vars()
Scale RHS momentum variables by 1/cell area, needed before FillPatch to different levels.
int zvel_bc() const noexcept
void init_full_domain_zeta_from_analytic()
Initialize high resolution initial sea surface height from analytic functions.
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.
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)
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.
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
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)
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 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 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::Real stop_time
Whether max_step was set in the inputs; the default above is not a distinguishable sentinel.
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::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.
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)
int yvel_bc() const noexcept
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_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 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
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.
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 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.
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.
static amrex::Vector< amrex::AMRErrorTag > ref_tags
Holds info for dynamically generated tagging criteria.
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.
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::Real start_time
Time of the start of the simulation, in seconds.
void init_scalars_full_domain_from_netcdf()
Full-domain high-res passive (dye) scalar initialization from NetCDF file.
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)
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.
amrex::Real bdy_time_interval
Interval between boundary data times.
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.
amrex::Real start_bdy_time
Start time in the time series of boundary data.
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
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)
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 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)
Fill a new MultiFab by copying in phi from valid region and filling ghost cells without applying boun...
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()
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.
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 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 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, amrex::Real 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 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.
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< std::unique_ptr< amrex::MultiFab > > vec_visc2_r
Harmonic viscosity defined on the rho points (centers)
void update_mskp(int lev)
Set psi-point mask to be consistent with rho-point mask.
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 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 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.
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 problem data from analytic functions.
TimeInterpolatedData GetDataAtTime(int lev, amrex::Real time)
utility to copy in data from old and/or new state into another multifab
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
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.
void WriteNCPlotFile(int istep, amrex::MultiFab const *plotMF)
Write plotfile using NetCDF (wrapper)
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
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)
RHS terms for tracer.
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.
void scale_rhs_vars_inv()
Scale RHS momentum variables by cell area, needed after FillPatch to different levels.
amrex::Vector< REMORAFillPatcher > FPr_w
Vector over levels of FillPatchers for w.
void average_down_with_grow_cells(int lev, amrex::Vector< std::unique_ptr< amrex::MultiFab > > &mf)
Average down from level lev+1 to lev in mf, including grow cells.
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.
amrex::Vector< amrex::Real > t_new
new time at each level
void init_stretch_coeffs()
initialize and calculate stretch coefficients
void init_bdry_from_netcdf(int lev)
Boundary data initialization from NetCDF file.
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.
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 ReadParameters()
read in some parameters from inputs file
static void print_tpls(std::ostream &)
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, amrex::Real 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 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 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)
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.
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 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
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())
Fill a new MultiFab by copying in phi from valid region and filling ghost cells.
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)
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
int bdy_cons(int icomp) const noexcept
Accessors for the ncons-dependent entries of BdyVars.
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 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.
AMREX_FORCE_INLINE std::ostream & DataLog(int i)
Helper function for IO stream.
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 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::string > plot_var_names_3d
Names of 3D variables to output to AMReX plotfile.
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_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 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.
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 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
int bio_comp_start() const noexcept
First cons component of the biology block. Problem setups need this to write biology initial conditio...
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.
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.
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)
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.
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