Skip to content

Add the ocx experiment - #38

Merged
xylar merged 3 commits into
ismip:mainfrom
xylar:add-ocx
Sep 30, 2026
Merged

xylar merged 3 commits into
ismip:mainfrom
xylar:add-ocx

Conversation

@xylar

@xylar xylar commented Sep 30, 2026 •

Copy link
Copy Markdown
Member

The checker refused every file of the observationally constrained experiment (C011) because ocx was missing from experiments_ismip7.csv. A modeler reported this. This PR adds ocx with a start in any year from 1950 to 2015 and an end in 2025, and bumps the version to 0.6.0.

For review:

  • 1950 is the earliest year of any OCX forcing: the ocean for both ice sheets. The cheat sheet's table gives 1990–2015, but its dataset sections allow 1958 (GrIS) and 1979 (AIS).
  • OCX has no ESM. As discussed below, an ocx file keeps the ESM field, but any name of letters, digits and hyphens is accepted there: a placeholder such as NONE, the forcing it used such as ERA5, or even a CMIP model name.

Other changes:

  • litemp in ocx needs a snapshot at the first year of the run, as in historical, and at 2025.
  • A file named OCX, as the forcing directories spell it, is told that experiment names are lower case.

Posted by Claude Code on @xylar's behalf. The testing, analysis and wording above are AI-authored; please check them accordingly.

xylar and others added 2 commits September 30, 2026 10:55
The observationally constrained experiment (C011) was missing from
experiments_ismip7.csv, so the checker refused every ocx file. It now
starts in any year from 1950, the earliest year of any OCX forcing, to
2015, and ends in 2025.

OCX has no ESM: its atmosphere comes from ERA5, the Greenland ocean from
EN4 and the Antarctic ocean from expert judgement. An ocx file may leave
the ESM field out or put any name there but a CMIP model's. A name
without the field is normalized to ten fields with an empty ESM by
_file_name_fields, which every place that reads fields by index now
uses, and the companion lookup rebuilds the name from the file's own
fields so that it keeps the omission.

Like historical, ocx chooses its own start year, so litemp must carry a
snapshot at the run's first year as well as its last. The generator
writes that snapshot, and leaves the ESM field out when given an empty
ESM id.

An experiment named in the wrong case (OCX, as the forcing directories
spell it) is now told that experiment names are lower case. The 9-field
match is case-insensitive so that such a file reaches that hint rather
than a field-count error.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@xylar
xylar requested a review from hgoelzer September 30, 2026 08:57
@xylar

xylar commented Sep 30, 2026

Copy link
Copy Markdown
Member Author

Testing

  • pytest tests in the isschecker environment: 197 passed, 7 of them new for ocx
  • sphinx-build -W --keep-going builds clean, and the generated experiments table has the ocx row (1950, 2015, 2025)
  • Ran the checker on generated ocx files with two mistakes, to see the new messages:
 - ERROR: ESM name 'CESM2-WACCM' (field 5) is a CMIP model name, but experiment 'ocx' is not forced by an ESM.
ERROR: The compliance check is ignored for experiment OCX as it is not in ['historical', 'ssp370', 'ssp126', 'ssp585', 'ctrl', 'ocx']. Experiment names are lower case: 'ocx'.

Posted by Claude Code on @xylar's behalf. The testing, analysis and wording above are AI-authored; please check them accordingly.

@xylar

xylar commented Sep 30, 2026

Copy link
Copy Markdown
Member Author

@hgoelzer, I'd really like you to take a look at this if you can.

The "ESM" field for OCX is a particular problem. I decided to allow it to be anything other than a CMIP model or nothing at all. But would appreciate your thoughts. We clearly should have been on this much earlier!

@hgoelzer

Copy link
Copy Markdown
Member

Hi Xylar, I think about two option for the ESM in OCX.

  1. leave it completely open like you suggest, I wouldn't even bother to exclude CMIP names. Maybe exclude "_" and other symbols that mess up our conventions.
    or
  2. Use a generic placeholder like "NONE" or "XXX"

1 would cover all modellers that have already submitted/finished their CORE. If we think of ESM in loose terms as "the model providing the climate forcing", a lot of options could be possible here. Therefore leaving it open to allow for those options. We provide products (EN4, ERA), but should be open for that people chose something else, like another reanalysis product.

2 would make the it easier to parse the OCX in downstream processing. All other CORE exps have a well defined ESM and having that per-model information in the filename doesn't really help.

Since modellers as of today do not know how to name it, prescribing something at this stage seems still possible. People that want to be using the checker right now for OCX are arguable still busy with post-processing and could adjust.

@xylar

xylar commented Sep 30, 2026

Copy link
Copy Markdown
Member Author

Okay, it sounds like skipping the ESM field will make downstream workflows harder. Let's not allow that.

I lean toward option 1 where we leave it open. NONE or some other placeholder would be allowed but if they can give something descriptive, sounds good.

@hgoelzer hgoelzer left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

OK, go ahead with ESM left open.

Following the discussion on ismip#38: leaving the field out would make ocx
names harder to parse downstream, and groups may use forcing other than
the products ISMIP7 provides, so an ocx file carries the ESM field with
any name in it, CMIP model names included. The name must be letters,
digits and hyphens, which rules out an empty field and the dots other
fields of the convention also forbid.

This drops _file_name_fields and the generator's empty ESM id, since a
name always has ten fields again.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@xylar
xylar merged commit 4a6c788 into ismip:main Sep 30, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants