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/longitude — standard_name |
absent |
present |
🔴 CF §7.1 |
remove standard_name |
vertices_latitude/longitude — missing_value/_FillValue |
present |
absent |
⚪ NOT reported |
(optional) add to match reference |
lev_bnds |
present (lev, bnds) |
absent |
⚪ NOT reported |
add level bounds |
lev — axis |
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]) |
|
Diff: published CMIP6 Oyr file vs moppy-CMORised output (bounds & vertices)
Files compared
/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/scratch/tm70/yz9299/cmip6_fasttract/no3_Oyr_ACCESS-ESM1-5_historical_r1i1p1f1_gn_0101-0110.ncThe published file is the authoritative CMIP6 reference; the moppy output should match its
structure for
time_bnds,vertices_latitude,vertices_longitude, theverticesdimension, and
lev/lev_bnds.Each difference below is tagged with whether the WCRP compliance-checker
(
cf:1.7+wcrp_cmip6:1.0) reports it:Summary of differences
verticesint64coordinate variable[0,1,2,3]time_bndsattrs{}(none){long_name, units, calendar}vertices_latitude/longitude—standard_namestandard_namevertices_latitude/longitude—missing_value/_FillValuelev_bnds(lev, bnds)lev—axisaxis: 'Z'cartesian_axis: 'Z'instead)lev:axis = 'Z'lev— other metadataDimensions and dtypes otherwise match:
time_bnds = (time, bnds) float64;vertices_latitude/longitude = (j, i, vertices) float64.Detail
1.
verticesis a coordinate variable (should be a bare dimension) — 🔴 REPORTEDThis extra coordinate variable is exactly what triggers two CF findings the published file
does not have:
The variable vertices failed because the datatype is int64long_name or/and standard_name is highly recommended for variable vertices2.
time_bndscarries attributes (should be empty) — 🔴 REPORTEDChecker findings (CF §7.1):
3.
vertices_latitude/vertices_longitudeattributes — 🔴 (standard_name) / ⚪ (fill values)standard_name:unitstoo, but the published reference also carriesunitson thesevariables — so the actionable difference is
standard_name(removing it makes moppymatch the reference). The
unitscomplaint applies to the reference as well.missing_value/_FillValuethat the reference has; thechecker does not flag their absence on the bounds variables.
4.
lev_bndsis missing — ⚪ NOT reportedA real structural difference (no vertical-level bounds at all), but the checker raises no
"missing level bounds" finding for this file.
5.
levmetadata — 🔴 (axis) / ⚪ (rest)[ATTR001] Required variable 'lev' attribute 'axis' is missing.(moppy carries the non-CF
cartesian_axis: 'Z'instead ofaxis: 'Z'.)levdifferences (unitsmetersvsm, missingstandard_name: 'depth', model-nativelong_name, the non-CFedgesattribute, missingbounds) are not individually flagged by the checker.Which differences the checker catches
verticesint64 coordinate (CF §2.2, §3.3)vertices_*missingmissing_value/_FillValuetime_bndsattributes (CF §7.1)lev_bndsmissingvertices_*standard_name(CF §7.1)levunits/standard_name/long_name/edges/boundslevmissingaxis(WCRP [ATTR001])