ERF
Energy Research and Forecasting: An Atmospheric Modeling Code
ERF_Morrison_Advance_F.H
Go to the documentation of this file.
1  double dummy_reflectivity = Real(0);
3 
4  // If using Fortran version, update the Fortran module variable as well
6 
7  const int ilom = grown_box.loVect()[0];
8  const int ihim = grown_box.hiVect()[0];
9  const int jlom = grown_box.loVect()[1];
10  const int jhim = grown_box.hiVect()[1];
11  const int klom = grown_box.loVect()[2];
12  const int khim = grown_box.hiVect()[2];
13 
14 #if defined(ERF_USE_MORR_FORT) && defined(AMREX_USE_GPU)
15  Arena* Arena_Used = The_Pinned_Arena();
16 #else
17  Arena* Arena_Used = The_Arena();
18 #endif
19 
20  // Create dummy arrays for cumulus tendencies (if needed)
21  FArrayBox qrcuten_fab(grown_box, 1, Arena_Used);
22  FArrayBox qscuten_fab(grown_box, 1, Arena_Used);
23  FArrayBox qicuten_fab(grown_box, 1, Arena_Used);
24  auto const& qrcuten_arr = qrcuten_fab.array();
25  auto const& qscuten_arr = qscuten_fab.array();
26  auto const& qicuten_arr = qicuten_fab.array();
27 
28  // Initialize tendencies to Real(0) (no cumulus parameterization in this example)
29  ParallelFor(grown_box, [=] AMREX_GPU_DEVICE (int i, int j, int k) {
30  qrcuten_arr(i,j,k) = Real(0);
31  qscuten_arr(i,j,k) = Real(0);
32  qicuten_arr(i,j,k) = Real(0);
33  });
34 
35  // WRF-Chem related variables (optional)
36  bool flag_qndrop = false; // Flag to indicate droplet number prediction
37 
38  // Now create arrays for other optional variables
39  FArrayBox rainprod_fab(grown_box, 1, Arena_Used);
40  FArrayBox evapprod_fab(grown_box, 1, Arena_Used);
41  FArrayBox qlsink_fab(grown_box, 1, Arena_Used);
42  FArrayBox precr_fab(grown_box, 1, Arena_Used);
43  FArrayBox preci_fab(grown_box, 1, Arena_Used);
44  FArrayBox precs_fab(grown_box, 1, Arena_Used);
45  FArrayBox precg_fab(grown_box, 1, Arena_Used);
46 
47  auto const& rainprod_arr = rainprod_fab.array();
48  auto const& evapprod_arr = evapprod_fab.array();
49  auto const& qlsink_arr = qlsink_fab.array();
50  auto const& precr_arr = precr_fab.array();
51  auto const& preci_arr = preci_fab.array();
52  auto const& precs_arr = precs_fab.array();
53  auto const& precg_arr = precg_fab.array();
54 
55  // Initialize WRF-Chem arrays to Real(0)
56  ParallelFor(grown_box, [=] AMREX_GPU_DEVICE (int i, int j, int k) {
57  rainprod_arr(i,j,k) = Real(0);
58  evapprod_arr(i,j,k) = Real(0);
59  qlsink_arr(i,j,k) = Real(0);
60  precr_arr(i,j,k) = Real(0);
61  preci_arr(i,j,k) = Real(0);
62  precs_arr(i,j,k) = Real(0);
63  precg_arr(i,j,k) = Real(0);
64  });
65 
67  (
68  1, // ITIMESTEP - Use 1 for simplicity
69 
70  // 3D arrays in Fortran expected order (assume column-major for Fortran)
71  theta_arr.dataPtr(), // TH
72  qv_arr.dataPtr(), // QV
73  qcl_arr.dataPtr(), // QC
74  qpr_arr.dataPtr(), // QR
75  qci_arr.dataPtr(), // QI
76  qps_arr.dataPtr(), // QS
77  qpg_arr.dataPtr(), // QG
78  ni_arr.dataPtr(), // NI
79  ns_arr.dataPtr(), // NS
80  nr_arr.dataPtr(), // NR
81  ng_arr.dataPtr(), // NG
82 
83  rho_arr.dataPtr(), // RHO
84  pii_arr.dataPtr(), // PII (Exner function)
85  pres_arr.dataPtr(), // P (in hPa, convert if needed)
86  dt, // DT_IN
87  dz_arr.dataPtr(), // DZ
88  w_arr.dataPtr(), // W (vertical velocity)
89 
90  // 2D arrays for precipitation accounting
91  rain_accum_arr.dataPtr(), // RAINNC
92  rainncv_arr.dataPtr(), // RAINNCV
93  sr_arr.dataPtr(), // SR
94  snow_accum_arr.dataPtr(), // SNOWNC
95  snowncv_arr.dataPtr(), // SNOWNCV
96  graup_accum_arr.dataPtr(),// GRAUPELNC
97  graupelncv_arr.dataPtr(), // GRAUPELNCV
98 
99  // Radar reflectivity
100  dummy_reflectivity_ptr, // refl_10cm
101  true, // diagflag
102  0, // do_radar_ref
103 
104  // Cumulus tendencies
105  qrcuten_arr.dataPtr(), // qrcuten
106  qscuten_arr.dataPtr(), // qscuten
107  qicuten_arr.dataPtr(), // qicuten
108 
109  // WRF-Chem flags
110  flag_qndrop, // F_QNDROP
111  nullptr, // qndrop (not used here)
112  // ht_arr.dataPtr(), // HT (terrain height - not used)
113 
114  // Domain dimensions
115  ilo, ihi, jlo, jhi, klo, khi, // IDS,IDE,JDS,JDE,KDS,KDE
116  ilom, ihim, jlom, jhim, klom, khim, // IMS,IME,JMS,JME,KMS,KME
117  ilo, ihi, jlo, jhi, klo, khi, // ITS,ITE,JTS,JTE,KTS,KTE
118 
119  // Optional WRF-Chem outputs
120  false, // wetscav_on
121  rainprod_arr.dataPtr(), // rainprod
122  evapprod_arr.dataPtr(), // evapprod
123  qlsink_arr.dataPtr(), // QLSINK
124  precr_arr.dataPtr(), // PRECR
125  preci_arr.dataPtr(), // PRECI
126  precs_arr.dataPtr(), // PRECS
127  precg_arr.dataPtr() // PRECG
128  );
const int khi
Definition: ERF_InitCustomPert_Bubble.H:21
auto qv_arr
Definition: ERF_InitCustomPert_MultiSpeciesBubble.H:210
FArrayBox qicuten_fab(grown_box, 1, Arena_Used)
FArrayBox preci_fab(grown_box, 1, Arena_Used)
const int jhim
Definition: ERF_Morrison_Advance_F.H:10
const int ilom
Definition: ERF_Morrison_Advance_F.H:7
const int khim
Definition: ERF_Morrison_Advance_F.H:12
FArrayBox precg_fab(grown_box, 1, Arena_Used)
double * dummy_reflectivity_ptr
Definition: ERF_Morrison_Advance_F.H:2
FArrayBox qlsink_fab(grown_box, 1, Arena_Used)
FArrayBox precr_fab(grown_box, 1, Arena_Used)
auto const & rainprod_arr
Definition: ERF_Morrison_Advance_F.H:47
auto const & evapprod_arr
Definition: ERF_Morrison_Advance_F.H:48
Arena * Arena_Used
Definition: ERF_Morrison_Advance_F.H:17
const int jlom
Definition: ERF_Morrison_Advance_F.H:9
auto const & qlsink_arr
Definition: ERF_Morrison_Advance_F.H:49
FArrayBox rainprod_fab(grown_box, 1, Arena_Used)
const int ihim
Definition: ERF_Morrison_Advance_F.H:8
FArrayBox qscuten_fab(grown_box, 1, Arena_Used)
FArrayBox qrcuten_fab(grown_box, 1, Arena_Used)
FArrayBox evapprod_fab(grown_box, 1, Arena_Used)
ParallelFor(grown_box, [=] AMREX_GPU_DEVICE(int i, int j, int k) { qrcuten_arr(i, j, k)=Real(0);qscuten_arr(i, j, k)=Real(0);qicuten_arr(i, j, k)=Real(0);})
const int klom
Definition: ERF_Morrison_Advance_F.H:11
set_morrison_ndcnst_c(m_ndcnst)
FArrayBox precs_fab(grown_box, 1, Arena_Used)
auto const & qicuten_arr
Definition: ERF_Morrison_Advance_F.H:26
auto const & qrcuten_arr
Definition: ERF_Morrison_Advance_F.H:24
auto const & qscuten_arr
Definition: ERF_Morrison_Advance_F.H:25
auto const & precs_arr
Definition: ERF_Morrison_Advance_F.H:52
auto const & preci_arr
Definition: ERF_Morrison_Advance_F.H:51
double dummy_reflectivity
Definition: ERF_Morrison_Advance_F.H:1
auto const & precg_arr
Definition: ERF_Morrison_Advance_F.H:53
bool flag_qndrop
Definition: ERF_Morrison_Advance_F.H:36
auto const & precr_arr
Definition: ERF_Morrison_Advance_F.H:50
mp_morr_two_moment_c(1, theta_arr.dataPtr(), qv_arr.dataPtr(), qcl_arr.dataPtr(), qpr_arr.dataPtr(), qci_arr.dataPtr(), qps_arr.dataPtr(), qpg_arr.dataPtr(), ni_arr.dataPtr(), ns_arr.dataPtr(), nr_arr.dataPtr(), ng_arr.dataPtr(), rho_arr.dataPtr(), pii_arr.dataPtr(), pres_arr.dataPtr(), dt, dz_arr.dataPtr(), w_arr.dataPtr(), rain_accum_arr.dataPtr(), rainncv_arr.dataPtr(), sr_arr.dataPtr(), snow_accum_arr.dataPtr(), snowncv_arr.dataPtr(), graup_accum_arr.dataPtr(), graupelncv_arr.dataPtr(), dummy_reflectivity_ptr, true, 0, qrcuten_arr.dataPtr(), qscuten_arr.dataPtr(), qicuten_arr.dataPtr(), flag_qndrop, nullptr, ilo, ihi, jlo, jhi, klo, khi, ilom, ihim, jlom, jhim, klom, khim, ilo, ihi, jlo, jhi, klo, khi, false, rainprod_arr.dataPtr(), evapprod_arr.dataPtr(), qlsink_arr.dataPtr(), precr_arr.dataPtr(), preci_arr.dataPtr(), precs_arr.dataPtr(), precg_arr.dataPtr())
amrex::Real Real
Definition: ERF_ShocInterface.H:19
auto rho_arr
Definition: ERF_UpdateWSubsidence_SineMassFlux.H:3