@@ -103,34 +103,35 @@ 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+
122+ zm_output.h_activity = ZMF::view_1dh<Int> (" zm_output.h_activity" , m_ncol);
123+ zm_output.h_prec = ZMF::view_1dh<Scalar>(" zm_output.h_prec" , m_ncol);
124+ zm_output.h_snow = ZMF::view_1dh<Scalar>(" zm_output.h_snow" , m_ncol);
125+ zm_output.h_cape = ZMF::view_1dh<Scalar>(" zm_output.h_cape" , m_ncol);
126+ zm_output.h_tend_t = ZMF::view_2dh<Real> (" zm_output.h_tend_t" , m_ncol, m_nlev);
127+ zm_output.h_tend_qv = ZMF::view_2dh<Real> (" zm_output.h_tend_qv" , m_ncol, m_nlev);
128+ zm_output.h_tend_u = ZMF::view_2dh<Real> (" zm_output.h_tend_u" , m_ncol, m_nlev);
129+ zm_output.h_tend_v = ZMF::view_2dh<Real> (" zm_output.h_tend_v" , m_ncol, m_nlev);
130+ zm_output.h_rain_prod = ZMF::view_2dh<Real> (" zm_output.h_rain_prod" , m_ncol, m_nlev);
131+ zm_output.h_snow_prod = ZMF::view_2dh<Real> (" zm_output.h_snow_prod" , m_ncol, m_nlev);
132+ zm_output.h_prec_flux = ZMF::view_2dh<Real> (" zm_output.h_prec_flux" , m_ncol, m_nlev+1 );
133+ zm_output.h_snow_flux = ZMF::view_2dh<Real> (" zm_output.h_snow_flux" , m_ncol, m_nlev+1 );
134+ zm_output.h_mass_flux = ZMF::view_2dh<Real> (" zm_output.h_mass_flux" , m_ncol, m_nlev+1 );
134135
135136 // ----------------------------------------------------------------------------
136137 // initialize variables on the fortran side
@@ -329,6 +330,11 @@ size_t ZMDeepConvection::requested_buffer_size_in_bytes() const
329330 zm_buffer_size+= ZMF::zm_output_tend::num_2d_midlv * sizeof (Spack) * m_ncol * nlev_mid_packs;
330331 zm_buffer_size+= ZMF::zm_output_tend::num_2d_intfc * sizeof (Spack) * m_ncol * nlev_int_packs;
331332
333+ int num_f_mid = (9 +6 );
334+ int num_f_int = (2 +3 );
335+ zm_buffer_size+= num_f_mid * sizeof (Real) * m_ncol * m_nlev;
336+ zm_buffer_size+= num_f_int * sizeof (Real) * m_ncol * (m_nlev+1 );
337+
332338 return zm_buffer_size;
333339}
334340
@@ -347,12 +353,14 @@ void ZMDeepConvection::init_buffers(const ATMBufferManager &buffer_manager)
347353 constexpr auto num_2d_midlv = ZMF::zm_input_state::num_2d_midlv + ZMF::zm_output_tend::num_2d_midlv;
348354 constexpr auto num_2d_intfc = ZMF::zm_input_state::num_2d_intfc + ZMF::zm_output_tend::num_2d_intfc;
349355
356+ int num_f_mid = (9 +6 );
357+ int num_f_int = (2 +3 );
358+
350359 // ----------------------------------------------------------------------------
351360 Int* i_mem = reinterpret_cast <Int*>(buffer_manager.get_memory ());
352361 // ----------------------------------------------------------------------------
353362 // device 1D integer variables
354- ZMF::uview_1d<Int>* ptrs_1d_intgr[num_1d_intgr] = { &zm_output.activity
355- };
363+ ZMF::uview_1d<Int>* ptrs_1d_intgr[num_1d_intgr] = { &zm_output.activity };
356364 for (int i=0 ; i<num_1d_intgr; ++i) {
357365 *ptrs_1d_intgr[i] = ZMF::uview_1d<Int>(i_mem, m_ncol);
358366 i_mem += ptrs_1d_intgr[i]->size ();
@@ -361,7 +369,7 @@ void ZMDeepConvection::init_buffers(const ATMBufferManager &buffer_manager)
361369 Scalar* scl_mem = reinterpret_cast <Scalar*>(i_mem);
362370 // ----------------------------------------------------------------------------
363371 // device 1D scalar scalars
364- ZMF::uview_1d<Scalar>* ptrs_1d_scalr[num_1d_scalr] = { &zm_input.tpert ,
372+ ZMF::uview_1d<Scalar>* ptrs_1d_scalr[num_1d_scalr] = { &zm_input.tpert ,
365373 &zm_output.prec ,
366374 &zm_output.snow ,
367375 &zm_output.cape ,
@@ -371,7 +379,52 @@ void ZMDeepConvection::init_buffers(const ATMBufferManager &buffer_manager)
371379 scl_mem += ptrs_1d_scalr[i]->size ();
372380 }
373381 // ----------------------------------------------------------------------------
374- Spack* spk_mem = reinterpret_cast <Spack*>(scl_mem);
382+
383+ // ***************************************************************************
384+ // TEMPORARY
385+ // ***************************************************************************
386+ Real* r_mem = reinterpret_cast <Real*>(scl_mem);
387+ // ----------------------------------------------------------------------------
388+ // device 2D views on mid-point levels
389+ ZMF::uview_2dl<Real>* ptrs_f_midlv[num_f_mid] = { &zm_input.f_z_mid ,
390+ &zm_input.f_p_mid ,
391+ &zm_input.f_p_del ,
392+ &zm_input.f_T_mid ,
393+ &zm_input.f_qv ,
394+ &zm_input.f_uwind ,
395+ &zm_input.f_vwind ,
396+ &zm_input.f_omega ,
397+ &zm_input.f_cldfrac ,
398+ &zm_output.f_tend_t ,
399+ &zm_output.f_tend_qv ,
400+ &zm_output.f_tend_u ,
401+ &zm_output.f_tend_v ,
402+ &zm_output.f_rain_prod ,
403+ &zm_output.f_snow_prod ,
404+ };
405+ for (int i=0 ; i<num_f_mid; ++i) {
406+ *ptrs_f_midlv[i] = ZMF::uview_2dl<Real>(r_mem, m_ncol, m_nlev);
407+ r_mem += ptrs_f_midlv[i]->size ();
408+ }
409+ // ----------------------------------------------------------------------------
410+ // device 2D views on interface levels
411+ ZMF::uview_2dl<Real>* ptrs_f_intfc[num_f_int] = { &zm_input.f_z_int ,
412+ &zm_input.f_p_int ,
413+ &zm_output.f_prec_flux ,
414+ &zm_output.f_snow_flux ,
415+ &zm_output.f_mass_flux ,
416+ };
417+ for (int i=0 ; i<num_f_int; ++i) {
418+ *ptrs_f_intfc[i] = ZMF::uview_2dl<Real>(r_mem, m_ncol, (m_nlev+1 ));
419+ r_mem += ptrs_f_intfc[i]->size ();
420+ }
421+ // ----------------------------------------------------------------------------
422+ Spack* spk_mem = reinterpret_cast <Spack*>(r_mem);
423+ // ***************************************************************************
424+ // TEMPORARY
425+ // ***************************************************************************
426+
427+ // Spack* spk_mem = reinterpret_cast<Spack*>(scl_mem);
375428 // ----------------------------------------------------------------------------
376429 // device 2D views on mid-point levels
377430 ZMF::uview_2d<Spack>* ptrs_2d_midlv[num_2d_midlv] = { &zm_input.z_mid ,
@@ -381,7 +434,7 @@ void ZMDeepConvection::init_buffers(const ATMBufferManager &buffer_manager)
381434 &zm_output.tend_u ,
382435 &zm_output.tend_v ,
383436 &zm_output.rain_prod ,
384- &zm_output.snow_prod
437+ &zm_output.snow_prod ,
385438 };
386439 for (int i=0 ; i<num_2d_midlv; ++i) {
387440 *ptrs_2d_midlv[i] = ZMF::uview_2d<Spack>(spk_mem, m_ncol, nlev_mid_packs);
@@ -392,7 +445,7 @@ void ZMDeepConvection::init_buffers(const ATMBufferManager &buffer_manager)
392445 ZMF::uview_2d<Spack>* ptrs_2d_intfc[num_2d_intfc] = { &zm_input.z_int ,
393446 &zm_output.prec_flux ,
394447 &zm_output.snow_flux ,
395- &zm_output.mass_flux
448+ &zm_output.mass_flux ,
396449 };
397450 for (int i=0 ; i<num_2d_intfc; ++i) {
398451 *ptrs_2d_intfc[i] = ZMF::uview_2d<Spack>(spk_mem, m_ncol, nlev_int_packs);
0 commit comments