@@ -103,34 +103,34 @@ void ZMDeepConvection::initialize_impl (const RunType)
103103 // ----------------------------------------------------------------------------
104104 // allocate host mirror variables
105105
106- zm_input.h_phis = ZMF::view_1dh<Scalar>(" zm_input_h_phis" , m_ncol);
107- zm_input.h_pblh = ZMF::view_1dh<Scalar>(" zm_input_h_pblh" , m_ncol);
108- zm_input.h_tpert = ZMF::view_1dh<Scalar>(" zm_input_h_tpert" , m_ncol);
109- zm_input.h_landfrac = ZMF::view_1dh<Scalar>(" zm_input_h_landfrac" , m_ncol);
110- zm_input.h_z_mid = ZMF::view_2dh<Real> (" zm_input_h_z_mid" , m_ncol, m_nlev);
111- zm_input.h_p_mid = ZMF::view_2dh<Real> (" zm_input_h_p_mid" , m_ncol, m_nlev);
112- zm_input.h_p_del = ZMF::view_2dh<Real> (" zm_input_h_p_del" , m_ncol, m_nlev);
113- zm_input.h_T_mid = ZMF::view_2dh<Real> (" zm_input_h_T_mid" , m_ncol, m_nlev);
114- zm_input.h_qv = ZMF::view_2dh<Real> (" zm_input_h_qv" , m_ncol, m_nlev);
115- zm_input.h_uwind = ZMF::view_2dh<Real> (" zm_input_h_uwind" , m_ncol, m_nlev);
116- zm_input.h_vwind = ZMF::view_2dh<Real> (" zm_input_h_vwind" , m_ncol, m_nlev);
117- zm_input.h_omega = ZMF::view_2dh<Real> (" zm_input_h_omega" , m_ncol, m_nlev);
118- zm_input.h_cldfrac = ZMF::view_2dh<Real> (" zm_input_h_cldfrac" , m_ncol, m_nlev);
119- zm_input.h_z_int = ZMF::view_2dh<Real> (" zm_input_h_z_int" , m_ncol, m_nlev+1 );
120- zm_input.h_p_int = ZMF::view_2dh<Real> (" zm_input_h_p_int" , m_ncol, m_nlev+1 );
121- zm_output.h_activity = ZMF::view_1dh<Int> (" zm_output_h_activity" , m_ncol);
122- zm_output.h_prec = ZMF::view_1dh<Scalar>(" zm_output_h_prec" , m_ncol);
123- zm_output.h_snow = ZMF::view_1dh<Scalar>(" zm_output_h_snow" , m_ncol);
124- zm_output.h_cape = ZMF::view_1dh<Scalar>(" zm_output_h_cape" , m_ncol);
125- zm_output.h_tend_t = ZMF::view_2dh<Real> (" zm_output_h_tend_t" , m_ncol, m_nlev);
126- zm_output.h_tend_qv = ZMF::view_2dh<Real> (" zm_output_h_tend_qv" , m_ncol, m_nlev);
127- zm_output.h_tend_u = ZMF::view_2dh<Real> (" zm_output_h_tend_u" , m_ncol, m_nlev);
128- zm_output.h_tend_v = ZMF::view_2dh<Real> (" zm_output_h_tend_v" , m_ncol, m_nlev);
129- zm_output.h_rain_prod = ZMF::view_2dh<Real> (" zm_output_h_rain_prod" , m_ncol, m_nlev);
130- zm_output.h_snow_prod = ZMF::view_2dh<Real> (" zm_output_h_snow_prod" , m_ncol, m_nlev);
131- zm_output.h_prec_flux = ZMF::view_2dh<Real> (" zm_output_h_prec_flux" , m_ncol, m_nlev+1 );
132- zm_output.h_snow_flux = ZMF::view_2dh<Real> (" zm_output_h_snow_flux" , m_ncol, m_nlev+1 );
133- zm_output.h_mass_flux = ZMF::view_2dh<Real> (" zm_output_h_mass_flux" , m_ncol, m_nlev+1 );
106+ zm_input.h_phis = ZMF::view_1dh<Scalar>(" zm_input_h_phis" , m_ncol);
107+ zm_input.h_pblh = ZMF::view_1dh<Scalar>(" zm_input_h_pblh" , m_ncol);
108+ zm_input.h_tpert = ZMF::view_1dh<Scalar>(" zm_input_h_tpert" , m_ncol);
109+ zm_input.h_landfrac = ZMF::view_1dh<Scalar>(" zm_input_h_landfrac" , m_ncol);
110+ zm_input.h_z_mid = ZMF::view_2dh<Real> (" zm_input_h_z_mid" , m_ncol, m_nlev);
111+ zm_input.h_p_mid = ZMF::view_2dh<Real> (" zm_input_h_p_mid" , m_ncol, m_nlev);
112+ zm_input.h_p_del = ZMF::view_2dh<Real> (" zm_input_h_p_del" , m_ncol, m_nlev);
113+ zm_input.h_T_mid = ZMF::view_2dh<Real> (" zm_input_h_T_mid" , m_ncol, m_nlev);
114+ zm_input.h_qv = ZMF::view_2dh<Real> (" zm_input_h_qv" , m_ncol, m_nlev);
115+ zm_input.h_uwind = ZMF::view_2dh<Real> (" zm_input_h_uwind" , m_ncol, m_nlev);
116+ zm_input.h_vwind = ZMF::view_2dh<Real> (" zm_input_h_vwind" , m_ncol, m_nlev);
117+ zm_input.h_omega = ZMF::view_2dh<Real> (" zm_input_h_omega" , m_ncol, m_nlev);
118+ zm_input.h_cldfrac = ZMF::view_2dh<Real> (" zm_input_h_cldfrac" , m_ncol, m_nlev);
119+ zm_input.h_z_int = ZMF::view_2dh<Real> (" zm_input_h_z_int" , m_ncol, m_nlev+1 );
120+ zm_input.h_p_int = ZMF::view_2dh<Real> (" zm_input_h_p_int" , m_ncol, m_nlev+1 );
121+ zm_output.h_activity = ZMF::view_1dh<Int> (" zm_output_h_activity" , m_ncol);
122+ zm_output.h_prec = ZMF::view_1dh<Scalar>(" zm_output_h_prec" , m_ncol);
123+ zm_output.h_snow = ZMF::view_1dh<Scalar>(" zm_output_h_snow" , m_ncol);
124+ zm_output.h_cape = ZMF::view_1dh<Scalar>(" zm_output_h_cape" , m_ncol);
125+ zm_output.h_tend_t = ZMF::view_2dh<Real> (" zm_output_h_tend_t" , m_ncol, m_nlev);
126+ zm_output.h_tend_qv = ZMF::view_2dh<Real> (" zm_output_h_tend_qv" , m_ncol, m_nlev);
127+ zm_output.h_tend_u = ZMF::view_2dh<Real> (" zm_output_h_tend_u" , m_ncol, m_nlev);
128+ zm_output.h_tend_v = ZMF::view_2dh<Real> (" zm_output_h_tend_v" , m_ncol, m_nlev);
129+ zm_output.h_rain_prod = ZMF::view_2dh<Real> (" zm_output_h_rain_prod" , m_ncol, m_nlev);
130+ zm_output.h_snow_prod = ZMF::view_2dh<Real> (" zm_output_h_snow_prod" , m_ncol, m_nlev);
131+ zm_output.h_prec_flux = ZMF::view_2dh<Real> (" zm_output_h_prec_flux" , m_ncol, m_nlev+1 );
132+ zm_output.h_snow_flux = ZMF::view_2dh<Real> (" zm_output_h_snow_flux" , m_ncol, m_nlev+1 );
133+ zm_output.h_mass_flux = ZMF::view_2dh<Real> (" zm_output_h_mass_flux" , m_ncol, m_nlev+1 );
134134
135135 // ----------------------------------------------------------------------------
136136 // initialize variables on the fortran side
@@ -329,6 +329,11 @@ size_t ZMDeepConvection::requested_buffer_size_in_bytes() const
329329 zm_buffer_size+= ZMF::zm_output_tend::num_2d_midlv * sizeof (Spack) * m_ncol * nlev_mid_packs;
330330 zm_buffer_size+= ZMF::zm_output_tend::num_2d_intfc * sizeof (Spack) * m_ncol * nlev_int_packs;
331331
332+ int num_f_mid = (9 +6 );
333+ int num_f_int = (2 +3 );
334+ zm_buffer_size+= num_f_mid * sizeof (Real) * m_ncol * m_nlev;
335+ zm_buffer_size+= num_f_int * sizeof (Real) * m_ncol * (m_nlev+1 );
336+
332337 return zm_buffer_size;
333338}
334339
@@ -347,12 +352,14 @@ void ZMDeepConvection::init_buffers(const ATMBufferManager &buffer_manager)
347352 constexpr auto num_2d_midlv = ZMF::zm_input_state::num_2d_midlv + ZMF::zm_output_tend::num_2d_midlv;
348353 constexpr auto num_2d_intfc = ZMF::zm_input_state::num_2d_intfc + ZMF::zm_output_tend::num_2d_intfc;
349354
355+ int num_f_mid = (9 +6 );
356+ int num_f_int = (2 +3 );
357+
350358 // ----------------------------------------------------------------------------
351359 Int* i_mem = reinterpret_cast <Int*>(buffer_manager.get_memory ());
352360 // ----------------------------------------------------------------------------
353361 // device 1D integer variables
354- ZMF::uview_1d<Int>* ptrs_1d_intgr[num_1d_intgr] = { &zm_output.activity
355- };
362+ ZMF::uview_1d<Int>* ptrs_1d_intgr[num_1d_intgr] = { &zm_output.activity };
356363 for (int i=0 ; i<num_1d_intgr; ++i) {
357364 *ptrs_1d_intgr[i] = ZMF::uview_1d<Int>(i_mem, m_ncol);
358365 i_mem += ptrs_1d_intgr[i]->size ();
@@ -361,7 +368,7 @@ void ZMDeepConvection::init_buffers(const ATMBufferManager &buffer_manager)
361368 Scalar* scl_mem = reinterpret_cast <Scalar*>(i_mem);
362369 // ----------------------------------------------------------------------------
363370 // device 1D scalar scalars
364- ZMF::uview_1d<Scalar>* ptrs_1d_scalr[num_1d_scalr] = { &zm_input.tpert ,
371+ ZMF::uview_1d<Scalar>* ptrs_1d_scalr[num_1d_scalr] = { &zm_input.tpert ,
365372 &zm_output.prec ,
366373 &zm_output.snow ,
367374 &zm_output.cape ,
@@ -371,7 +378,52 @@ void ZMDeepConvection::init_buffers(const ATMBufferManager &buffer_manager)
371378 scl_mem += ptrs_1d_scalr[i]->size ();
372379 }
373380 // ----------------------------------------------------------------------------
374- Spack* spk_mem = reinterpret_cast <Spack*>(scl_mem);
381+
382+ // ***************************************************************************
383+ // TEMPORARY
384+ // ***************************************************************************
385+ Real* r_mem = reinterpret_cast <Real*>(scl_mem);
386+ // ----------------------------------------------------------------------------
387+ // device 2D views on mid-point levels
388+ ZMF::uview_2dl<Real>* ptrs_f_midlv[num_f_mid] = { &zm_input.f_z_mid ,
389+ &zm_input.f_p_mid ,
390+ &zm_input.f_p_del ,
391+ &zm_input.f_T_mid ,
392+ &zm_input.f_qv ,
393+ &zm_input.f_uwind ,
394+ &zm_input.f_vwind ,
395+ &zm_input.f_omega ,
396+ &zm_input.f_cldfrac ,
397+ &zm_output.f_tend_t ,
398+ &zm_output.f_tend_qv ,
399+ &zm_output.f_tend_u ,
400+ &zm_output.f_tend_v ,
401+ &zm_output.f_rain_prod ,
402+ &zm_output.f_snow_prod ,
403+ };
404+ for (int i=0 ; i<num_f_mid; ++i) {
405+ *ptrs_f_midlv[i] = ZMF::uview_2dl<Real>(r_mem, m_ncol, m_nlev);
406+ r_mem += ptrs_f_midlv[i]->size ();
407+ }
408+ // ----------------------------------------------------------------------------
409+ // device 2D views on interface levels
410+ ZMF::uview_2dl<Real>* ptrs_f_intfc[num_f_int] = { &zm_input.f_z_int ,
411+ &zm_input.f_p_int ,
412+ &zm_output.f_prec_flux ,
413+ &zm_output.f_snow_flux ,
414+ &zm_output.f_mass_flux ,
415+ };
416+ for (int i=0 ; i<num_f_int; ++i) {
417+ *ptrs_f_intfc[i] = ZMF::uview_2dl<Real>(r_mem, m_ncol, (m_nlev+1 ));
418+ r_mem += ptrs_f_intfc[i]->size ();
419+ }
420+ // ----------------------------------------------------------------------------
421+ Spack* spk_mem = reinterpret_cast <Spack*>(r_mem);
422+ // ***************************************************************************
423+ // TEMPORARY
424+ // ***************************************************************************
425+
426+ // Spack* spk_mem = reinterpret_cast<Spack*>(scl_mem);
375427 // ----------------------------------------------------------------------------
376428 // device 2D views on mid-point levels
377429 ZMF::uview_2d<Spack>* ptrs_2d_midlv[num_2d_midlv] = { &zm_input.z_mid ,
@@ -381,7 +433,7 @@ void ZMDeepConvection::init_buffers(const ATMBufferManager &buffer_manager)
381433 &zm_output.tend_u ,
382434 &zm_output.tend_v ,
383435 &zm_output.rain_prod ,
384- &zm_output.snow_prod
436+ &zm_output.snow_prod ,
385437 };
386438 for (int i=0 ; i<num_2d_midlv; ++i) {
387439 *ptrs_2d_midlv[i] = ZMF::uview_2d<Spack>(spk_mem, m_ncol, nlev_mid_packs);
@@ -392,7 +444,7 @@ void ZMDeepConvection::init_buffers(const ATMBufferManager &buffer_manager)
392444 ZMF::uview_2d<Spack>* ptrs_2d_intfc[num_2d_intfc] = { &zm_input.z_int ,
393445 &zm_output.prec_flux ,
394446 &zm_output.snow_flux ,
395- &zm_output.mass_flux
447+ &zm_output.mass_flux ,
396448 };
397449 for (int i=0 ; i<num_2d_intfc; ++i) {
398450 *ptrs_2d_intfc[i] = ZMF::uview_2d<Spack>(spk_mem, m_ncol, nlev_int_packs);
0 commit comments