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
104 REMORA (
const amrex::RealBox& rb,
int max_level_in,
const amrex::Vector<int>& n_cell_in,
int coord,
const amrex::Vector<amrex::IntVect>& ref_ratio,
const amrex::Array<int,AMREX_SPACEDIM>& is_per, std::string prefix);
117 virtual void ErrorEst (
int lev, amrex::TagBoxArray& tags, amrex::Real
time,
int ngrow)
override;
125 bool use_two_way_coupling,
132 amrex::DistributionMapping& dm)
const;
134 amrex::DistributionMapping& dm)
const;
136 amrex::DistributionMapping& dm)
const;
141 const amrex::MultiFab*& y_psi)
const;
151 const amrex::MultiFab*& lat_psi)
const;
157 const amrex::MultiFab*& msku,
158 const amrex::MultiFab*& mskv)
const;
189 const amrex::MultiFab* weight_o2a_mf,
190 const amrex::iMultiFab* index_o2a_mf,
191 int max_stencil_size,
192 const amrex::iMultiFab* dst_land_mask =
nullptr);
239 const amrex::MultiFab& mf,
int comp,
bool local,
bool finemask);
243 int action_interval, amrex::Real action_per);
250 const amrex::DistributionMapping& dm)
override;
256 virtual void RemakeLevel (
int lev, amrex::Real
time,
const amrex::BoxArray& ba,
257 const amrex::DistributionMapping& dm)
override;
269 const amrex::DistributionMapping& dm)
override;
303 amrex::MultiFab& source,
304 const amrex::Geometry fine_geom,
305 const amrex::Real
dt,
const amrex::Real
time);
316 const amrex::Vector<const amrex::MultiFab*> &mf,
317 const amrex::Vector<const amrex::MultiFab*> &mf_nd,
318 const amrex::Vector<const amrex::MultiFab*> &mf_u,
319 const amrex::Vector<const amrex::MultiFab*> &mf_v,
320 const amrex::Vector<const amrex::MultiFab*> &mf_w,
321 const amrex::Vector<const amrex::MultiFab*> &mf_2d_rho,
322 const amrex::Vector<const amrex::MultiFab*> &mf_2d_u,
323 const amrex::Vector<const amrex::MultiFab*> &mf_2d_v,
324 const amrex::Vector<std::string> &varnames_3d,
325 const amrex::Vector<std::string> &varnames_2d_rho,
326 const amrex::Vector<std::string> &varnames_2d_u,
327 const amrex::Vector<std::string> &varnames_2d_v,
328 const amrex::Vector<amrex::Geometry>& my_geom,
330 const amrex::Vector<int> &level_steps,
331 const amrex::Vector<amrex::IntVect>& rr,
332 const std::string &versionName =
"HyperCLaw-V1.1",
333 const std::string &levelPrefix =
"Level_",
334 const std::string &mfPrefix =
"Cell",
335 const amrex::Vector<std::string>& extra_dirs = amrex::Vector<std::string>())
const;
342 const amrex::Vector<amrex::BoxArray> &bArray,
343 const amrex::Vector<std::string> &varnames_3d,
344 const amrex::Vector<std::string> &varnames_2d_rho,
345 const amrex::Vector<std::string> &varnames_2d_u,
346 const amrex::Vector<std::string> &varnames_2d_v,
347 const amrex::Vector<amrex::Geometry>& my_geom,
349 const amrex::Vector<int> &level_steps,
350 const amrex::Vector<amrex::IntVect>& rr,
351 const std::string &versionName,
352 const std::string &levelPrefix,
353 const std::string &mfPrefix)
const;
388 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_h;
394 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_Hz;
396 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_Huon;
398 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_Hvom;
400 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_ru;
402 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_rv;
404 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_ru2d;
406 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_rv2d;
408 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_rufrc;
410 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_rvfrc;
412 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_Akv;
414 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_Akt;
420 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_diff2;
423 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_z_r;
426 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_z_w;
428 amrex::Gpu::DeviceVector<amrex::Real>
s_r;
430 amrex::Gpu::DeviceVector<amrex::Real>
s_w;
438 amrex::Gpu::DeviceVector<amrex::Real>
Cs_r;
440 amrex::Gpu::DeviceVector<amrex::Real>
Cs_w;
449 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_sustr;
451 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_svstr;
454 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_uwind;
456 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_vwind;
458 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_Tair;
460 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_qair;
462 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_Pair;
465 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_srflx;
467 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_lrflx;
471 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_lhflx;
473 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_shflx;
476 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_stflx;
480 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_btflx;
485 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_rain;
487 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_evap;
489 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_cloud;
503 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_rdrag;
507 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_ZoBot;
510 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_bustr;
512 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_bvstr;
523 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_rubar;
525 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_rvbar;
527 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_rzeta;
529 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_ubar;
531 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_vbar;
533 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_zeta;
539 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_mskr;
541 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_msku;
543 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_mskv;
545 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_mskp;
550 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_pm;
552 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_pn;
559 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_fcor;
562 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_xr;
564 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_yr;
567 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_xu;
569 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_yu;
572 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_xv;
574 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_yv;
577 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_xp;
579 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_yp;
583 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_lonp;
586 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_latp;
589 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_dndx;
591 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_dmde;
597 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_rhoS;
599 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_rhoA;
601 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_bvf;
603 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_alpha;
605 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_beta;
614 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_tke;
616 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_gls;
620 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_Akk;
622 amrex::Vector<std::unique_ptr<amrex::MultiFab>>
vec_Akp;
628 void Advance (
int lev, amrex::Real
time, amrex::Real dt_lev,
int iteration,
int ncycle);
637 void advance_2d_onestep (
int lev, amrex::Real dt_lev, amrex::Real dtfast_lev,
int my_iif,
int nfast_counter);
641 amrex::MultiFab
const* mf_rhoS,
642 amrex::MultiFab
const* mf_rhoA,
643 amrex::MultiFab * mf_ru2d,
644 amrex::MultiFab * mf_rv2d,
645 amrex::MultiFab * mf_rufrc,
646 amrex::MultiFab * mf_rvfrc,
647 amrex::MultiFab * mf_Zt_avg1,
648 std::unique_ptr<amrex::MultiFab>& mf_DU_avg1,
649 std::unique_ptr<amrex::MultiFab>& mf_DU_avg2,
650 std::unique_ptr<amrex::MultiFab>& mf_DV_avg1,
651 std::unique_ptr<amrex::MultiFab>& mf_DV_avg2,
652 std::unique_ptr<amrex::MultiFab>& mf_rubar,
653 std::unique_ptr<amrex::MultiFab>& mf_rvbar,
654 std::unique_ptr<amrex::MultiFab>& mf_rzeta,
655 std::unique_ptr<amrex::MultiFab>& mf_ubar,
656 std::unique_ptr<amrex::MultiFab>& mf_vbar,
657 amrex::MultiFab * mf_zeta,
658 amrex::MultiFab
const* mf_h,
659 amrex::MultiFab
const* mf_pm,
660 amrex::MultiFab
const* mf_pn,
661 amrex::MultiFab
const*
mf_fcor,
662 amrex::MultiFab
const* mf_visc2_p,
663 amrex::MultiFab
const* mf_visc2_r,
664 amrex::MultiFab
const* mf_mskr,
665 amrex::MultiFab
const* mf_msku,
666 amrex::MultiFab
const* mf_mskv,
667 amrex::MultiFab
const* mf_mskp,
668 amrex::Real dtfast_lev,
669 bool predictor_2d_step,
670 bool first_2d_step,
int my_iif,
675 amrex::MultiFab& mf_cons,
676 amrex::MultiFab& mf_u , amrex::MultiFab& mf_v,
677 amrex::MultiFab* mf_sstore,
678 amrex::MultiFab* mf_ru , amrex::MultiFab* mf_rv,
679 std::unique_ptr<amrex::MultiFab>& mf_DU_avg1,
680 std::unique_ptr<amrex::MultiFab>& mf_DU_avg2,
681 std::unique_ptr<amrex::MultiFab>& mf_DV_avg1,
682 std::unique_ptr<amrex::MultiFab>& mf_DV_avg2,
683 std::unique_ptr<amrex::MultiFab>& mf_ubar,
684 std::unique_ptr<amrex::MultiFab>& mf_vbar,
685 std::unique_ptr<amrex::MultiFab>& mf_Akv,
686 std::unique_ptr<amrex::MultiFab>& mf_Akt,
687 std::unique_ptr<amrex::MultiFab>& mf_Hz,
688 std::unique_ptr<amrex::MultiFab>& mf_Huon,
689 std::unique_ptr<amrex::MultiFab>& mf_Hvom,
690 std::unique_ptr<amrex::MultiFab>& mf_z_w,
691 amrex::MultiFab
const* mf_h,
692 amrex::MultiFab
const* mf_pm,
693 amrex::MultiFab
const* mf_pn,
694 amrex::MultiFab
const* mf_mskr,
695 amrex::MultiFab
const* mf_msku,
696 amrex::MultiFab
const* mf_mskv,
698 const amrex::Real dt_lev);
702 amrex::MultiFab* mf_cons,
703 amrex::MultiFab* mf_uwind,
704 amrex::MultiFab* mf_vwind,
705 amrex::MultiFab* mf_Tair,
706 amrex::MultiFab* mf_qair,
707 amrex::MultiFab* mf_Pair,
708 amrex::MultiFab* mf_srflx,
709 amrex::MultiFab* mf_longwave_down,
710 amrex::MultiFab* mf_evap,
711 amrex::MultiFab* mf_sustr,
712 amrex::MultiFab* mf_svstr,
713 amrex::MultiFab* mf_stflux,
714 amrex::MultiFab* mf_lrflx,
715 amrex::MultiFab* mf_lhflx,
716 amrex::MultiFab* mf_shflx,
721 amrex::MultiFab& mf_uold, amrex::MultiFab& mf_vold,
722 amrex::MultiFab& mf_u, amrex::MultiFab& mf_v,
723 amrex::MultiFab* mf_ru,
724 amrex::MultiFab* mf_rv,
725 amrex::MultiFab& S_old,
726 amrex::MultiFab& S_new,
727 amrex::MultiFab& mf_W, amrex::MultiFab& mf_DC,
729 const amrex::MultiFab* mf_z_r,
730 const amrex::MultiFab* mf_z_w,
731 const amrex::MultiFab* mf_h,
732 const amrex::MultiFab* mf_pm,
733 const amrex::MultiFab* mf_pn,
734 const amrex::MultiFab* mf_sustr,
735 const amrex::MultiFab* mf_svstr,
736 const amrex::MultiFab* mf_bustr,
737 const amrex::MultiFab* mf_bvstr,
738 const amrex::MultiFab* mf_msku,
739 const amrex::MultiFab* mf_mskv,
740 const int iic,
const int nfirst,
741 const int nnew,
int nstp,
int nrhs,
742 int N,
const amrex::Real dt_lev);
746 const amrex::Box& gbx,
747 const amrex::Array4<amrex::Real >& tempold,
748 const amrex::Array4<amrex::Real >& tempcache,
749 const amrex::Array4<amrex::Real >& Hz,
750 const amrex::Array4<amrex::Real >& Huon,
751 const amrex::Array4<amrex::Real >& Hvom,
752 const amrex::Array4<amrex::Real >& W,
753 const amrex::Array4<amrex::Real >& DC,
754 const amrex::Array4<amrex::Real >& FC,
755 const amrex::Array4<amrex::Real >& sstore,
756 const amrex::Array4<amrex::Real const>& z_w,
757 const amrex::Array4<amrex::Real const>& h,
758 const amrex::Array4<amrex::Real const>& pm,
759 const amrex::Array4<amrex::Real const>& pn,
760 const amrex::Array4<amrex::Real const>& msku,
761 const amrex::Array4<amrex::Real const>& mskv,
762 const amrex::Array4<int const>& river_pos,
763 const amrex::Array4<amrex::Real const>& river_source,
764 int iic,
int ntfirst,
int nrhs,
int N,
765 const amrex::Real dt_lev);
769 const amrex::Box& bx,
770 const amrex::Array4<amrex::Real >& t,
771 const amrex::Array4<amrex::Real const>& tempstore,
772 const amrex::Array4<amrex::Real const>& Huon,
773 const amrex::Array4<amrex::Real const>& Hvom,
774 const amrex::Array4<amrex::Real const>& Hz,
775 const amrex::Array4<amrex::Real const>& pn,
776 const amrex::Array4<amrex::Real const>& pm,
777 const amrex::Array4<amrex::Real const>& W,
778 const amrex::Array4<amrex::Real >& FC,
779 const amrex::Array4<amrex::Real const>& mskr,
780 const amrex::Array4<amrex::Real const>& msku,
781 const amrex::Array4<amrex::Real const>& mskv,
782 const amrex::Array4<int const>& river_pos,
783 const amrex::Array4<amrex::Real const>& river_source,
784 int nrhs,
int nnew,
int N,
const amrex::Real dt_lev);
788 const amrex::Box& xbx,
789 const amrex::Box& ybx,
790 const amrex::Array4<amrex::Real const>& uold,
791 const amrex::Array4<amrex::Real const>& vold,
792 const amrex::Array4<amrex::Real >& ru,
793 const amrex::Array4<amrex::Real >& rv,
794 const amrex::Array4<amrex::Real >& rufrc,
795 const amrex::Array4<amrex::Real >& rvfrc,
796 const amrex::Array4<amrex::Real const>& sustr,
797 const amrex::Array4<amrex::Real const>& svstr,
798 const amrex::Array4<amrex::Real const>& bustr,
799 const amrex::Array4<amrex::Real const>& bvstr,
800 const amrex::Array4<amrex::Real const>& Huon,
801 const amrex::Array4<amrex::Real const>& Hvom,
802 const amrex::Array4<amrex::Real const>& pm,
803 const amrex::Array4<amrex::Real const>& pn,
804 const amrex::Array4<amrex::Real const>& W,
805 const amrex::Array4<amrex::Real >& FC,
810 const amrex::Box& xbx,
811 const amrex::Box& ybx,
812 const amrex::Array4<amrex::Real const>& uold,
813 const amrex::Array4<amrex::Real const>& vold,
814 const amrex::Array4<amrex::Real >& ru,
815 const amrex::Array4<amrex::Real >& rv,
816 const amrex::Array4<amrex::Real const>& Duon,
817 const amrex::Array4<amrex::Real const>& Dvom,
821 void rho_eos (
const amrex::Box& bx,
822 const amrex::Array4<amrex::Real const>& state,
823 const amrex::Array4<amrex::Real >& rho,
824 const amrex::Array4<amrex::Real >& rhoA,
825 const amrex::Array4<amrex::Real >& rhoS,
826 const amrex::Array4<amrex::Real >& bvf,
827 const amrex::Array4<amrex::Real >& alpha,
828 const amrex::Array4<amrex::Real >& beta,
829 const amrex::Array4<amrex::Real const>& Hz,
830 const amrex::Array4<amrex::Real const>& z_w,
831 const amrex::Array4<amrex::Real const>& z_r,
832 const amrex::Array4<amrex::Real const>& h,
833 const amrex::Array4<amrex::Real const>& mskr,
837 void lin_eos (
const amrex::Box& bx,
838 const amrex::Array4<amrex::Real const>& state,
839 const amrex::Array4<amrex::Real >& rho,
840 const amrex::Array4<amrex::Real >& rhoA,
841 const amrex::Array4<amrex::Real >& rhoS,
842 const amrex::Array4<amrex::Real >& bvf,
843 const amrex::Array4<amrex::Real const>& Hz,
844 const amrex::Array4<amrex::Real const>& z_w,
845 const amrex::Array4<amrex::Real const>& z_r,
846 const amrex::Array4<amrex::Real const>& h,
847 const amrex::Array4<amrex::Real const>& mskr,
852 const amrex::Array4<amrex::Real const>& state,
853 const amrex::Array4<amrex::Real >& rho,
854 const amrex::Array4<amrex::Real >& rhoA,
855 const amrex::Array4<amrex::Real >& rhoS,
856 const amrex::Array4<amrex::Real >& bvf,
857 const amrex::Array4<amrex::Real >& alpha,
858 const amrex::Array4<amrex::Real >& beta,
859 const amrex::Array4<amrex::Real const>& Hz,
860 const amrex::Array4<amrex::Real const>& z_w,
861 const amrex::Array4<amrex::Real const>& z_r,
862 const amrex::Array4<amrex::Real const>& h,
863 const amrex::Array4<amrex::Real const>& mskr,
867 void prsgrd (
const amrex::Box& bx,
868 const amrex::Box& gbx,
869 const amrex::Box& utbx,
870 const amrex::Box& vtbx,
871 const amrex::Array4<amrex::Real >& ru,
872 const amrex::Array4<amrex::Real >& rv,
873 const amrex::Array4<amrex::Real const>& pn,
874 const amrex::Array4<amrex::Real const>& pm,
875 const amrex::Array4<amrex::Real const>& rho,
876 const amrex::Array4<amrex::Real >& FC,
877 const amrex::Array4<amrex::Real const>& Hz,
878 const amrex::Array4<amrex::Real const>& z_r,
879 const amrex::Array4<amrex::Real const>& z_w,
880 const amrex::Array4<amrex::Real const>& msku,
881 const amrex::Array4<amrex::Real const>& mskv,
882 const int nrhs,
const int N);
887 const amrex::Box& gbx,
888 const int ioff,
const int joff,
889 const amrex::Array4<amrex::Real >& vel,
890 const amrex::Array4<amrex::Real const>& vel_old,
891 const amrex::Array4<amrex::Real >& rvel,
892 const amrex::Array4<amrex::Real const>& Hz,
893 const amrex::Array4<amrex::Real const>& Akv,
894 const amrex::Array4<amrex::Real >& FC,
895 const amrex::Array4<amrex::Real const>& sstr,
896 const amrex::Array4<amrex::Real const>& bstr,
897 const amrex::Array4<amrex::Real const>& z_r,
898 const amrex::Array4<amrex::Real const>& pm,
899 const amrex::Array4<amrex::Real const>& pn,
900 const int iic,
const int ntfirst,
const int nnew,
int nstp,
int nrhs,
int N,
901 const amrex::Real lambda,
const amrex::Real dt_lev);
905 const int ioff,
const int joff,
906 const amrex::Array4<amrex::Real >& phi,
907 const amrex::Array4<amrex::Real const>& Hz,
908 const amrex::Array4<amrex::Real >& Hzk,
909 const amrex::Array4<amrex::Real >& AK,
910 const amrex::Array4<amrex::Real const>& Akv,
911 const amrex::Array4<amrex::Real >& BC,
912 const amrex::Array4<amrex::Real >& DC,
913 const amrex::Array4<amrex::Real >& FC,
914 const amrex::Array4<amrex::Real >& CF,
915 const int nnew,
const int N,
916 const amrex::Real dt_lev);
920 const int ioff,
const int joff,
921 const amrex::Array4<amrex::Real >& phi,
922 const amrex::Array4<amrex::Real >& phibar,
923 const amrex::Array4<amrex::Real >& Hphi,
924 const amrex::Array4<amrex::Real const>& Hz,
925 const amrex::Array4<amrex::Real const>& pm_or_pn,
926 const amrex::Array4<amrex::Real const>& Dphi1,
927 const amrex::Array4<amrex::Real const>& Dphi2,
928 const amrex::Array4<amrex::Real >& DC,
929 const amrex::Array4<amrex::Real >& FC,
930 const amrex::Array4<amrex::Real const>& msk,
935 const int ioff,
const int joff,
936 const amrex::Array4<amrex::Real >& phi,
937 const amrex::Array4<amrex::Real const>& Hz,
938 const amrex::Array4<amrex::Real const>& Dphi_avg1,
939 const amrex::Array4<amrex::Real >& DC,
940 const amrex::Array4<amrex::Real >& CF,
941 const amrex::Array4<amrex::Real const>& pm_or_pn,
942 const amrex::Array4<amrex::Real const>& msk,
943 const int nnew,
const int N);
946 void uv3dmix (
const amrex::Box& xbx,
947 const amrex::Box& ybx,
948 const amrex::Array4<amrex::Real >& u,
949 const amrex::Array4<amrex::Real >& v,
950 const amrex::Array4<amrex::Real const>& uold,
951 const amrex::Array4<amrex::Real const>& vold,
952 const amrex::Array4<amrex::Real >& rufrc,
953 const amrex::Array4<amrex::Real >& rvfrc,
954 const amrex::Array4<amrex::Real const>& visc2_p,
955 const amrex::Array4<amrex::Real const>& visc2_r,
956 const amrex::Array4<amrex::Real const>& Hz,
957 const amrex::Array4<amrex::Real const>& pm,
958 const amrex::Array4<amrex::Real const>& pn,
959 const amrex::Array4<amrex::Real const>& mskp,
961 const amrex::Real dt_lev);
964 void t3dmix2 (
const amrex::Box& bx,
965 const amrex::Array4<amrex::Real >& state,
966 const amrex::Array4<amrex::Real >& state_rhs,
967 const amrex::Array4<amrex::Real const>& diff2,
968 const amrex::Array4<amrex::Real const>& Hz,
969 const amrex::Array4<amrex::Real const>& z_r,
970 const amrex::Array4<amrex::Real const>& pm,
971 const amrex::Array4<amrex::Real const>& pn,
972 const amrex::Array4<amrex::Real const>& msku,
973 const amrex::Array4<amrex::Real const>& mskv,
974 const amrex::Real dt_lev,
975 const int ncomp,
const int N);
979 const amrex::Array4<amrex::Real >& state,
980 const amrex::Array4<amrex::Real >& state_rhs,
981 const amrex::Array4<amrex::Real const>& diff2,
982 const amrex::Array4<amrex::Real const>& Hz,
983 const amrex::Array4<amrex::Real const>& pm,
984 const amrex::Array4<amrex::Real const>& pn,
985 const amrex::Array4<amrex::Real const>& msku,
986 const amrex::Array4<amrex::Real const>& mskv,
987 const amrex::Real dt_lev,
const int ncomp);
991 const amrex::Array4<amrex::Real >& state,
992 const amrex::Array4<amrex::Real >& state_rhs,
993 const amrex::Array4<amrex::Real const>& diff2,
994 const amrex::Array4<amrex::Real const>& Hz,
995 const amrex::Array4<amrex::Real const>& z_r,
996 const amrex::Array4<amrex::Real const>& pm,
997 const amrex::Array4<amrex::Real const>& pn,
998 const amrex::Array4<amrex::Real const>& msku,
999 const amrex::Array4<amrex::Real const>& mskv,
1000 const amrex::Real dt_lev,
1001 const int ncomp,
const int N);
1004 void coriolis (
const amrex::Box& xbx,
1005 const amrex::Box& ybx,
1006 const amrex::Array4<amrex::Real const>& uold,
1007 const amrex::Array4<amrex::Real const>& vold,
1008 const amrex::Array4<amrex::Real >& ru,
1009 const amrex::Array4<amrex::Real >& rv,
1010 const amrex::Array4<amrex::Real const>& Hz,
1011 const amrex::Array4<amrex::Real const>& fomn,
1016 const amrex::Box& xbx,
1017 const amrex::Box& ybx,
1018 const amrex::Array4<amrex::Real const>& uold,
1019 const amrex::Array4<amrex::Real const>& vold,
1020 const amrex::Array4<amrex::Real >& ru,
1021 const amrex::Array4<amrex::Real >& rv,
1022 const amrex::Array4<amrex::Real const>& Hz,
1023 const amrex::Array4<amrex::Real const>& dndx,
1024 const amrex::Array4<amrex::Real const>& dmde,
1030 const amrex::Array4<amrex::Real >& var,
1031 const amrex::Array4<amrex::Real const>& var_old,
1032 const amrex::Array4<amrex::Real const>& var_clim,
1033 const amrex::Array4<amrex::Real const>& clim_coeff,
1034 const amrex::Array4<amrex::Real const>& Hz,
1035 const amrex::Array4<amrex::Real const>& pm,
1036 const amrex::Array4<amrex::Real const>& pn,
1037 const amrex::Real dt_lev =
zero);
1074 void gls_prestep (
int lev, amrex::MultiFab* mf_gls, amrex::MultiFab* mf_tke,
1075 amrex::MultiFab& mf_W,
1076 amrex::MultiFab* mf_msku, amrex::MultiFab* mf_mskv,
1077 const int nstp,
const int nnew,
const int iic,
const int ntfirst,
1078 const int N,
const amrex::Real dt_lev);
1080 void gls_corrector (
int lev, amrex::MultiFab* mf_gls, amrex::MultiFab* mf_tke,
1081 amrex::MultiFab& mf_W, amrex::MultiFab* mf_Akv, amrex::MultiFab* mf_Akt,
1082 amrex::MultiFab* mf_Akk, amrex::MultiFab* mf_Akp,
1083 amrex::MultiFab* mf_mskr,
1084 amrex::MultiFab* mf_msku, amrex::MultiFab* mf_mskv,
1085 const int nstp,
const int nnew,
1086 const int N,
const amrex::Real dt_lev);
1116 amrex::MultiFab& mf_to_be_filled,
1117 amrex::Vector<amrex::MultiFab*>
const& mfs,
1121 const bool fill_all=
true,
1122 const bool fill_set=
false,
1123 const int n_not_fill=0,
1124 const int icomp_calc=0,
1125 const amrex::Real
dt =
zero,
1126 const amrex::MultiFab& mf_calc = amrex::MultiFab());
1130 amrex::MultiFab& mf_to_be_filled,
1131 amrex::Vector<amrex::MultiFab*>
const& mfs,
1134 const bool fill_all=
true,
1135 const bool fill_set=
false);
1138 amrex::MultiFab& mf_to_fill,
1139 const amrex::MultiFab& mf_mask,
1140 const amrex::Real
time,
1142 const int bdy_var_type,
1143 const int icomp_to_fill,
1144 const int icomp_calc = 0,
1145 const amrex::MultiFab& mf_calc = amrex::MultiFab(),
1146 const amrex::Real =
zero);
1151 amrex::MultiFab* mf_crse,
1154 const int icomp = 0,
1155 const bool fill_all =
true,
1156 const int n_not_fill=0,
1157 const int icomp_calc=0,
1158 const amrex::Real
dt =
zero,
1159 const amrex::MultiFab& mf_calc = amrex::MultiFab());
1163 amrex::MultiFab* mf_crse,
1166 const int icomp = 0,
1167 const bool fill_all =
true,
1168 const int n_not_fill=0,
1169 const int icomp_calc=0,
1170 const amrex::Real
dt =
zero,
1171 const amrex::MultiFab& mf_calc = amrex::MultiFab());
1176 amrex::MultiFab* mf_crse,
1179 const int icomp = 0,
1180 const bool fill_all =
true,
1181 const int n_not_fill=0,
1182 const int icomp_calc=0,
1183 const amrex::Real
dt =
zero,
1184 const amrex::MultiFab& mf_calc = amrex::MultiFab(),
1185 amrex::Interpolater* mapper =
nullptr);
1261#ifdef REMORA_USE_NETCDF
1292 void init_stuff (
int lev,
const amrex::BoxArray& ba,
const amrex::DistributionMapping& dm);
1295 void init_masks (
int lev,
const amrex::BoxArray& ba,
const amrex::DistributionMapping& dm);
1313 void timeStep (
int lev, amrex::Real
time,
int iteration);
1332#ifdef REMORA_USE_NETCDF
1338 amrex::MultiFab
const* plotMF,
1344 const std::string& name,
1345 bool set_ghost =
false)
const;
1349 const std::string &name,
1350 int coordinatorProc = amrex::ParallelDescriptor::IOProcessorNumber(),
1351 int allow_empty_mf = 0);
1416#ifdef REMORA_USE_MOAB
1418 void InitMOABMesh();
1459 std::unique_ptr<ProblemBase>
prob =
nullptr;
1477 amrex::Vector<amrex::Real>
dt;
1483 amrex::Vector<std::unique_ptr<REMORAPhysBCFunct>>
physbcs;
1535 amrex::Real
stop_time = std::numeric_limits<amrex::Real>::max();
1597 amrex::Vector<std::string>
cons_names {
"temp",
"salt",
"tracer"};
1614#ifdef REMORA_USE_PARTICLES
1616 ParticleData particleData;
1620 bool m_use_tracer_particles;
1622 bool m_use_hydro_particles;
1625 void readTracersParams();
1628 void initializeTracers ( amrex::ParGDBBase*,
1629 const amrex::Vector<std::unique_ptr<amrex::MultiFab>>& );
1632 void evolveTracers(
int lev,
1634 amrex::Vector<amrex::MultiFab const*>& flow_vel,
1635 const amrex::Vector<std::unique_ptr<amrex::MultiFab>>& );
1659 static amrex::Vector<amrex::Vector<std::string>>
nc_init_file;
1661 static amrex::Vector<amrex::Vector<std::string>>
nc_grid_file;
1727 int nGhostCells = 0;
1728 switch (spatial_order) {
1745 amrex::Error(
"Must specify spatial order to be 2,3,4,5 or 6");
1775 int numCores = amrex::ParallelDescriptor::NProcs();
1777 numCores = numCores * omp_get_max_threads();
1781 numCores * (amrex::Real(amrex::ParallelDescriptor::second()) -
startCPUTime) +
1789 if (amrex::ParallelDescriptor::IOProcessor())
1791 datalog[i] = std::make_unique<std::fstream>();
1792 datalog[i]->open(filename.c_str(),std::ios::out|std::ios::app);
1794 amrex::FileOpenFailed(filename);
1797 amrex::ParallelDescriptor::Barrier(
"REMORA::setRecordDataInfo");
1800 amrex::Vector<std::unique_ptr<std::fstream> >
datalog;
1813 static void print_usage(MPI_Comm , std::ostream& );
1814 static void print_error(MPI_Comm ,
const std::string& msg);
1822 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
1825 using namespace amrex;
1830 Real
x = std::pow(
one-Real(15.0)*ZoL,
fourth);
1831 Real psik =
two*std::log(Real(0.5)*(
one+
x))+
1832 std::log(Real(0.5)*(
one+
x*
x))-
1833 two*std::atan(
x)+Real(0.5)*
PI;
1835 Real sqrt3 = std::sqrt(
three);
1836 Real
y = std::pow(
one-Real(10.15)*ZoL,
third);
1838 sqrt3*std::atan((
one+
two*
y)/sqrt3)+
PI/sqrt3;
1840 Real Zol2 = ZoL*ZoL;
1841 Real Fw = Zol2/(
one+Zol2);
1843 psiu = (
one-Fw)*psik+Fw*psic;
1846 Real cff=std::min(Real(50.0),Real(0.35)*ZoL);
1847 psiu = -((
one+ZoL)+Real(0.6667)*(ZoL-Real(14.28))/
1848 std::exp(cff)+Real(8.525));
1854 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
1857 using namespace amrex;
1862 Real
x = std::pow(
one-Real(15.0)*ZoL,Real(0.5));
1863 Real psik =
two*std::log(Real(0.5)*(
one+
x));
1865 Real sqrt3=std::sqrt(
three);
1868 sqrt3*std::atan((
one+
two*
y)/sqrt3)+
PI/sqrt3;
1872 Real Fw=ZoL2/(
one+ZoL2);
1873 psit = (
one-Fw)*psik+Fw*psic;
1876 Real cff=std::min(Real(50.0),Real(0.35)*ZoL);
1877 psit=-(std::pow(
one+
two*ZoL,Real(1.5))+
1878 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
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)
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.
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)
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.
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.
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)
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
Time to stop.
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
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
bool chunk_history_file
Whether to chunk netcdf history file.
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.
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
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)
std::string clim_temp_time_varname
Name of time field for temperature climatology data.
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_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.
static amrex::Real fixed_fast_dt
User specified fixed barotropic time step.
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.
amrex::Vector< amrex::IntVect > cum_ref_ratios
Cumulative refinement ratio between level 0 and level i.
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
Number of time steps per netcdf 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...
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 last_check_file_step
Step when we last output a checkpoint file.
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.
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.
void init_flat_bathymetry(int lev)
Initialize flat bathymetry to value from problo.
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_rhoS
density perturbation
std::unique_ptr< NCTimeSeries > temp_clim_data_from_file
Data container for temperature climatology data read from file.
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
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
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)
std::unique_ptr< NCTimeSeries > Tair_data_from_file
Data container for air temperature read from file.
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 scalars carried in the state.
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.
std::string clim_salt_time_varname
Name of time field for salinity climatology data.
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.
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.
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.
amrex::Vector< std::unique_ptr< amrex::MultiFab > > vec_xp
x_grid on psi-points (2D)
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.
void set_zeta_to_Ztavg(int lev)
Set zeta components to be equal to time-averaged Zt_avg1.
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
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)
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
static int fixed_ndtfast_ratio
User specified, number of barotropic steps per baroclinic step.
amrex::Real netcdf_fill_value
fill value for masked arrays in netcdf output
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::GpuArray< amrex::GpuArray< bool, AMREX_SPACEDIM *2 >, BdyVars::NumTypes+1 > phys_bc_need_data
These are flags that indicate whether we need to read in boundary data from file.
amrex::Vector< amrex::Vector< std::unique_ptr< amrex::MultiFab > > > vec_nudg_coeff
Climatology nudging coefficients.
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.
void append3DPlotVariables(const std::string &pp_plot_var_names_3d)
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)
std::unique_ptr< NCTimeSeries > salt_clim_data_from_file
Data container for salinity climatology data read from file.
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.
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.
const amrex::Vector< std::string > derived_names
Names of derived fields for plotfiles.
amrex::Vector< amrex::Real > t_old
old time at each level
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.
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
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
@ CellConservativeQuartic
@ CellConservativeProtected