@@ -168,12 +168,13 @@ void ZonalAvgDiag::initialize_impl(const RunType /*run_type*/) {
168
168
const Real lat_delta = sp (180.0 ) / m_num_zonal_bins;
169
169
auto lat_view = m_lat.get_view <const Real *>();
170
170
auto ncols_per_bin_view = ncols_per_bin.get_view <Int *>();
171
+ const int num_zonal_bins = m_num_zonal_bins; // for use inside lambdas
171
172
TeamPolicy team_policy = ESU::get_default_team_policy (m_num_zonal_bins, ncols);
172
173
Kokkos::parallel_for (" count_columns_per_zonal_bin_" + field.name (),
173
174
team_policy, KOKKOS_LAMBDA (const TeamMember &tm) {
174
175
const int bin_i = tm.league_rank ();
175
176
const Real lat_lower = sp (-90.0 ) + bin_i * lat_delta;
176
- const Real lat_upper = (bin_i < m_num_zonal_bins -1 )
177
+ const Real lat_upper = (bin_i < num_zonal_bins -1 )
177
178
? lat_lower + lat_delta : sp (90.0 + 0.5 *lat_delta);
178
179
Kokkos::parallel_reduce (Kokkos::TeamVectorRange (tm, ncols),
179
180
[&](int col_i, Int &val) {
@@ -206,7 +207,7 @@ void ZonalAvgDiag::initialize_impl(const RunType /*run_type*/) {
206
207
Kokkos::parallel_for (" assign_columns_to_zonal_bins_" + field.name (),
207
208
RangePolicy (0 , m_num_zonal_bins), [&] (int bin_i) {
208
209
const Real lat_lower = sp (-90.0 ) + bin_i * lat_delta;
209
- const Real lat_upper = (bin_i < m_num_zonal_bins -1 )
210
+ const Real lat_upper = (bin_i < num_zonal_bins -1 )
210
211
? lat_lower + lat_delta : sp (90.0 + 0.5 *lat_delta);
211
212
bin_to_cols_view (bin_i, 0 ) = 0 ;
212
213
for (int col_i=0 ; col_i < ncols; col_i++)
@@ -243,7 +244,7 @@ void ZonalAvgDiag::initialize_impl(const RunType /*run_type*/) {
243
244
const int bin_i = tm.league_rank ();
244
245
Kokkos::parallel_for (
245
246
Kokkos::TeamVectorRange (tm, 1 , 1 +bin_to_cols_view (bin_i,0 )),
246
- KOKKOS_LAMBDA (int lcol_j) {
247
+ [&] (int lcol_j) {
247
248
const int col_i = bin_to_cols_view (bin_i, lcol_j);
248
249
scaled_area_view (col_i) /= zonal_area_view (bin_i);
249
250
});
0 commit comments