Skip to content

Commit 6c351f3

Browse files
committed
add temporary explicit transpose/copy method for ZM bridge
1 parent da9a439 commit 6c351f3

File tree

2 files changed

+249
-63
lines changed

2 files changed

+249
-63
lines changed

components/eamxx/src/physics/zm/eamxx_zm_process_interface.cpp

Lines changed: 86 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)