diff --git a/components/eamxx/src/diagnostics/zonal_avg.cpp b/components/eamxx/src/diagnostics/zonal_avg.cpp index ba5a3211f5d7..71056613ff59 100644 --- a/components/eamxx/src/diagnostics/zonal_avg.cpp +++ b/components/eamxx/src/diagnostics/zonal_avg.cpp @@ -2,6 +2,8 @@ #include "share/field/field_utils.hpp" +#include + namespace scream { void ZonalAvgDiag::compute_zonal_sum(const Field &result, const Field &field, const Field &weight, @@ -170,13 +172,14 @@ void ZonalAvgDiag::initialize_impl(const RunType /*run_type*/) { using RangePolicy = Kokkos::RangePolicy; const Real lat_delta = sp(180.0) / m_num_zonal_bins; const int ncols = field_layout.dim(0); + const int nbins = m_num_zonal_bins; auto lat_view = m_lat.get_view(); auto zonal_area_view = zonal_area.get_view(); auto scaled_area_view = m_scaled_area.get_view(); Kokkos::parallel_for( "scale_area_by_zonal_area_" + field.name(), RangePolicy(0, ncols), KOKKOS_LAMBDA(const int &i) { - const int lat_i = (lat_view(i) + sp(90.0)) / lat_delta; + const int lat_i = ekat::impl::min(static_cast((lat_view(i) + sp(90.0)) / lat_delta),nbins-1); scaled_area_view(i) /= zonal_area_view(lat_i); }); } diff --git a/components/eamxx/src/share/grid/abstract_grid.cpp b/components/eamxx/src/share/grid/abstract_grid.cpp index 2eedc097d12d..9368f1ef0624 100644 --- a/components/eamxx/src/share/grid/abstract_grid.cpp +++ b/components/eamxx/src/share/grid/abstract_grid.cpp @@ -81,7 +81,7 @@ get_vertical_layout (const bool midpoints, { using namespace ShortFieldTagsNames; auto l = get_vertical_layout(midpoints); - l.append_dim(CMP,vector_dim,vec_dim_name); + l.prepend_dim(CMP,vector_dim,vec_dim_name); return l; } @@ -257,9 +257,10 @@ is_valid_layout (const FieldLayout& layout) const case LayoutType::Tensor0D: // 0d quantities are always ok return true; - case LayoutType::Scalar1D: [[fallthrough]]; - case LayoutType::Vector1D: + case LayoutType::Scalar1D: return layout.congruent(get_vertical_layout(midpoints)); + case LayoutType::Vector1D: + return layout.congruent(get_vertical_layout(midpoints,layout.get_vector_dim())); case LayoutType::Scalar2D: return layout.congruent(get_2d_scalar_layout()); case LayoutType::Vector2D: diff --git a/components/eamxx/src/share/io/scorpio_output.cpp b/components/eamxx/src/share/io/scorpio_output.cpp index e1df325e9f8f..e6661044cd69 100644 --- a/components/eamxx/src/share/io/scorpio_output.cpp +++ b/components/eamxx/src/share/io/scorpio_output.cpp @@ -946,7 +946,7 @@ get_var_dimnames (const FieldLayout& layout) const auto tag_name = m_io_grid->has_special_tag_name(t) ? m_io_grid->get_special_tag_name(t) : layout.names()[i]; - if (tag_name=="dim") { + if (tag_name=="dim" or tag_name=="bin") { tag_name += std::to_string(layout.dim(i)); } dims.push_back(tag_name); // Add dimensions string to vector of dims.