ESMValGroup / ESMValCore

ESMValCore: A community tool for pre-processing data from Earth system models in CMIP and running analysis scripts.
https://www.esmvaltool.org
Apache License 2.0
42 stars 38 forks source link

Regridding to reference dataset fails sometimes #56

Closed schlunma closed 1 year ago

schlunma commented 6 years ago

Not an urgent issue, but something I noticed:

Regridding to a reference dataset, e.g.

regrid_to_ref:
  regrid:
    target_grid: GFDL-CM3
    scheme: linear

invokes a simple iris.load_cube

https://github.com/ESMValGroup/ESMValTool/blob/43598ee48a327fc3ef2a6e53768324d02ad61863/esmvaltool/preprocessor/_regrid.py#L169

on the raw nc file, which may fail in rare cases if the file contains multiple variables (e.g rsdt of GFDL-CM3), which leads to errors like this:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "~/anaconda3/envs/esmvaltool/lib/python3.6/site-packages/iris/__init__.py", line 376, in load_cube
    raise iris.exceptions.ConstraintMismatchError(str(e))
iris.exceptions.ConstraintMismatchError: failed to merge into a single cube.
  cube.long_name differs: 'Length of average period' != 'End time for average period'
  cube.var_name differs: 'average_DT' != 'average_T2'
  cube.units differs: Unit('days') != Unit('days since 1860-01-01 00:00:00', calendar='gregorian')

I think we need an advanced loading function here.

bouweandela commented 5 years ago

Yes, if the dataset needs cmorization before the grid can be read it doesn't work. This should probably be fixed similar to how it is done for vertical levels in the function esmvaltool.preprocessor._regrid.get_reference_levels.

valeriupredoi commented 5 years ago

this needs just the MxN grid dimensionality so a single iris.load(file, constraints=constraint) where constraint is on the var_name:

    constraint = iris.Constraint(
        cube_func=(lambda c: c.var_name == VARIABLE))

should do fine, no need to CMORize twice the same file

bouweandela commented 5 years ago

That would work for this particular case but not in general.

valeriupredoi commented 5 years ago

what sort of general case you thinking about @bouweandela

bouweandela commented 5 years ago

Where the cmorization error is different from containing multiple variables in a single file.