Skip to content

Commit e1be8dd

Browse files
committed
add temporary explicit transpose/copy method for ZM bridge
variable rename
1 parent f1af2f4 commit e1be8dd

File tree

2 files changed

+250
-63
lines changed

2 files changed

+250
-63
lines changed

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

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

Comments
 (0)