@@ -14,6 +14,10 @@ using namespace mam4;
1414using namespace haero ;
1515void setinv_test_nlev (Ensemble *ensemble) {
1616 ensemble->process ([=](const Input &input, Output &output) {
17+ using View1D = DeviceType::view_1d<Real>;
18+ using View2D = DeviceType::view_2d<Real>;
19+ using View2DHost = typename HostType::view_2d<Real>;
20+ using View1DHost = typename HostType::view_1d<Real>;
1721 // Ensemble parameters
1822 // Declare array of strings for input names
1923 std::string input_arrays[] = {
@@ -33,71 +37,58 @@ void setinv_test_nlev(Ensemble *ensemble) {
3337
3438 const Real tfld_in = input.get_array (" tfld" )[0 ];
3539 const Real h2ovmr_in = input.get_array (" h2ovmr" )[0 ];
36- // NOTE: vmr turns out to be unused, but still in the fxn signature for now
37- auto vmr_in = input.get_array (" vmr" );
3840 const Real pmid_in = input.get_array (" pmid" )[0 ];
3941 auto c_off_in = input.get_array (" cnst_offline_yaml" );
4042
4143 const int nlev = mam4::nlev;
42- const int nspec = AeroConfig::num_gas_phase_species ();
4344 const int nfs = mam4::mo_setinv::nfs;
4445 const int num_tracer_cnst = mam4::mo_setinv::num_tracer_cnst;
4546
4647 ColumnView tfld = haero::testing::create_column_view (nlev);
47- auto tfld_h = Kokkos::create_mirror_view (tfld);
48- ColumnView h2ovmr = haero::testing::create_column_view (nlev);
49- auto h2ovmr_h = Kokkos::create_mirror_view (h2ovmr);
48+ ColumnView qv = haero::testing::create_column_view (nlev);
5049 ColumnView pmid = haero::testing::create_column_view (nlev);
51- auto pmid_h = Kokkos::create_mirror_view (pmid);
5250
53- using View1DHost = typename HostType::view_1d<Real>;
54- ColumnView invariants[nfs];
55- View1DHost invariants_h[nfs];
56- for (int i = 0 ; i < nfs; ++i) {
57- invariants[i] = haero::testing::create_column_view (nlev);
58- invariants_h[i] = Kokkos::create_mirror_view (invariants[i]);
59- }
51+ View2D invariants (" invariants" , nlev, nfs);
52+ auto invariants_h = Kokkos::create_mirror_view (invariants);
6053
61- using View2D = DeviceType::view_2d<Real>;
62- using View2DHost = typename HostType::view_2d<Real>;
63- View2D vmr (" vmr" , nlev, nspec);
64- View2DHost vmr_h (" vmr_h" , nlev, nspec);
65- View2D c_off (" c_off" , nlev, num_tracer_cnst);
66- View2DHost c_off_h (" c_off_h" , nlev, num_tracer_cnst);
54+ View1D c_off[num_tracer_cnst];
55+ for (int i = 0 ; i < num_tracer_cnst; ++i) {
56+ c_off[i] = View1D (" c_off" , nlev);
57+ } //
58+
59+ View2DHost c_off_h (" c_off_h" , num_tracer_cnst, nlev);
60+
61+ constexpr Real mwh2o = Constants::molec_weight_h2o;
62+ Real qv_k_in = conversions::mmr_from_vmr (h2ovmr_in, mwh2o);
6763
6864 for (int k = 0 ; k < nlev; ++k) {
69- tfld_h (k) = tfld_in;
70- h2ovmr_h (k) = h2ovmr_in;
71- pmid_h (k) = pmid_in;
72- for (int i = 0 ; i < nspec; ++i) {
73- vmr_h (k, i) = vmr_in[i];
74- }
7565 for (int i = 0 ; i < num_tracer_cnst; ++i) {
76- c_off_h (k, i ) = c_off_in[i];
66+ c_off_h (i, k ) = c_off_in[i];
7767 }
7868 }
7969
80- Kokkos::deep_copy (tfld, tfld_h);
81- Kokkos::deep_copy (h2ovmr, h2ovmr_h);
82- Kokkos::deep_copy (pmid, pmid_h);
83- Kokkos::deep_copy (vmr, vmr_h);
84- Kokkos::deep_copy (c_off, c_off_h);
70+ Kokkos::deep_copy (tfld, tfld_in);
71+ Kokkos::deep_copy (qv, qv_k_in);
72+ Kokkos::deep_copy (pmid, pmid_in);
73+ for (int i = 0 ; i < num_tracer_cnst; ++i) {
74+ const auto c_off_h_at_i = ekat::subview (c_off_h, i);
75+ Kokkos::deep_copy (c_off[i], c_off_h_at_i);
76+ }
8577
8678 // Single-column dispatch.
8779 auto team_policy = ThreadTeamPolicy (1u , Kokkos::AUTO);
8880 Kokkos::parallel_for (
8981 team_policy, KOKKOS_LAMBDA (const ThreadTeam &team) {
90- mam4::mo_setinv::setinv (team, invariants, tfld, h2ovmr, vmr, c_off,
91- pmid);
82+ mam4::mo_setinv::setinv (team, invariants, tfld, qv, c_off, pmid);
9283 });
9384
9485 std::vector<Real> invariants_out (nfs);
9586 for (int i = 0 ; i < nfs; ++i) {
96- Kokkos::deep_copy (invariants_h[i] , invariants[i] );
97- invariants_out[i] = invariants_h[i]( 0 );
87+ Kokkos::deep_copy (invariants_h, invariants);
88+ invariants_out[i] = invariants_h ( 0 , i );
9889 for (int k = 0 ; k < nlev; ++k) {
9990 // make sure every level got the same answer
100- EKAT_ASSERT (invariants_h[i]( 0 ) == invariants_h[i](k ));
91+ EKAT_ASSERT (invariants_h ( 0 , i ) == invariants_h (k, i ));
10192 }
10293 }
10394
0 commit comments