Skip to content

Published CMIP6 Oyr file vs moppy-CMORised output (bounds & vertices) #464

Description

@rhaegar325

Diff: published CMIP6 Oyr file vs moppy-CMORised output (bounds & vertices)

Files compared

Role Path
Reference (published) /g/data/fs38/publications/CMIP6/CMIP/CSIRO/ACCESS-ESM1-5/historical/r1i1p1f1/Oyr/no3/gn/latest/no3_Oyr_ACCESS-ESM1-5_historical_r1i1p1f1_gn_1950-2014.nc
Produced (moppy) /scratch/tm70/yz9299/cmip6_fasttract/no3_Oyr_ACCESS-ESM1-5_historical_r1i1p1f1_gn_0101-0110.nc

The published file is the authoritative CMIP6 reference; the moppy output should match its
structure for time_bnds, vertices_latitude, vertices_longitude, the vertices
dimension, and lev/lev_bnds.

Each difference below is tagged with whether the WCRP compliance-checker
(cf:1.7 + wcrp_cmip6:1.0) reports it:

  • 🔴 REPORTED — the checker raises a finding for this difference.
  • ⚪ NOT reported — a real difference from the reference, but the checker is silent.

Summary of differences

Item Published (reference) moppy output Checker Action
vertices dimension only (no variable) int64 coordinate variable [0,1,2,3] 🔴 CF §2.2 + §3.3 drop the coordinate → pure dimension
time_bnds attrs {} (none) {long_name, units, calendar} 🔴 CF §7.1 strip all attributes
vertices_latitude/longitudestandard_name absent present 🔴 CF §7.1 remove standard_name
vertices_latitude/longitudemissing_value/_FillValue present absent ⚪ NOT reported (optional) add to match reference
lev_bnds present (lev, bnds) absent ⚪ NOT reported add level bounds
levaxis axis: 'Z' absent (cartesian_axis: 'Z' instead) 🔴 WCRP [ATTR001] set lev:axis = 'Z'
lev — other metadata CF depth metadata model-native metadata ⚪ NOT reported (optional) align

Dimensions and dtypes otherwise match: time_bnds = (time, bnds) float64;
vertices_latitude/longitude = (j, i, vertices) float64.

Detail

1. vertices is a coordinate variable (should be a bare dimension) — 🔴 REPORTED

published:  'vertices' in coords = False   (dimension only, no variable)
moppy:      'vertices' in coords = True    int64, dims=('vertices',), values [0,1,2,3]

This extra coordinate variable is exactly what triggers two CF findings the published file
does not have:

  • CF §2.2 The variable vertices failed because the datatype is int64
  • CF §3.3 long_name or/and standard_name is highly recommended for variable vertices

2. time_bnds carries attributes (should be empty) — 🔴 REPORTED

published:  time_bnds.attrs = {}
moppy:      time_bnds.attrs = {long_name: 'time bounds',
                               units: 'days since 0001-01-01 00:00:00',
                               calendar: 'proleptic_gregorian'}

Checker findings (CF §7.1):

The Boundary variables 'time_bnds' should not have the attributes: ['units', 'calendar']
'time_bnds' long_name 'time bounds' disagrees with 'time''s 'time'

3. vertices_latitude / vertices_longitude attributes — 🔴 (standard_name) / ⚪ (fill values)

published:  vertices_latitude.attrs  = {units: 'degrees_north',
                                        missing_value: 1e20, _FillValue: 1e20}
            vertices_longitude.attrs = {units: 'degrees_east', ...}
moppy:      vertices_latitude.attrs  = {standard_name: 'latitude',  units: 'degrees_north'}
            vertices_longitude.attrs = {standard_name: 'longitude', units: 'degrees_east'}
  • 🔴 REPORTED — CF §7.1 flags the bounds variables for having standard_name:
    The Boundary variables 'vertices_latitude'  should not have: ['standard_name', 'units']
    The Boundary variables 'vertices_longitude' should not have: ['standard_name', 'units']
    
    Note: §7.1 lists units too, but the published reference also carries units on these
    variables — so the actionable difference is standard_name (removing it makes moppy
    match the reference). The units complaint applies to the reference as well.
  • ⚪ NOT reported — moppy omits missing_value/_FillValue that the reference has; the
    checker does not flag their absence on the bounds variables.

4. lev_bnds is missing — ⚪ NOT reported

published:  lev.attrs['bounds'] = 'lev_bnds';  lev_bnds present, dims=(lev, bnds), attrs={}
moppy:      lev has no 'bounds' attribute;     lev_bnds absent

A real structural difference (no vertical-level bounds at all), but the checker raises no
"missing level bounds" finding for this file.

5. lev metadata — 🔴 (axis) / ⚪ (rest)

published lev.attrs: {bounds: 'lev_bnds', units: 'm', axis: 'Z', positive: 'down',
                      long_name: 'ocean depth coordinate', standard_name: 'depth'}
moppy lev.attrs:     {long_name: 'tcell zstar depth', units: 'meters',
                      cartesian_axis: 'Z', positive: 'down', edges: 'st_edges_ocean'}
  • 🔴 REPORTED — WCRP [ATTR001] Required variable 'lev' attribute 'axis' is missing.
    (moppy carries the non-CF cartesian_axis: 'Z' instead of axis: 'Z'.)
  • ⚪ NOT reported — the other lev differences (units meters vs m, missing
    standard_name: 'depth', model-native long_name, the non-CF edges attribute, missing
    bounds) are not individually flagged by the checker.

Which differences the checker catches

Reported by checker (🔴) Not reported (⚪), but still differs from reference
vertices int64 coordinate (CF §2.2, §3.3) vertices_* missing missing_value/_FillValue
time_bnds attributes (CF §7.1) lev_bnds missing
vertices_* standard_name (CF §7.1) lev units/standard_name/long_name/edges/bounds
lev missing axis (WCRP [ATTR001])

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions