Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added various fixes for hybrid height coordinates #562

Merged
merged 9 commits into from
Apr 1, 2020
38 changes: 32 additions & 6 deletions esmvalcore/cmor/_fixes/cmip5/access1_0.py
Original file line number Diff line number Diff line change
@@ -1,27 +1,28 @@
"""Fixes for the ACCESS1-0 model."""

from cf_units import Unit
import iris
from cf_units import Unit

from ..common import ClFixHybridHeightCoord
from ..fix import Fix


# noinspection PyPep8
class AllVars(Fix):
"""Common fixes to all vars."""

def fix_metadata(self, cubes):
"""
Fix metadata.

Fixes wrong calendar 'gregorian' instead of 'proleptic_gregorian'
Fixes wrong calendar 'gregorian' instead of 'proleptic_gregorian'.

Parameters
----------
cube: iris.cube.Cube
cubes : iris.cube.CubeList
Input cubes which need to be fixed.

Returns
-------
iris.cube.Cube
iris.cube.CubeList

"""
for cube in cubes:
Expand All @@ -32,3 +33,28 @@ def fix_metadata(self, cubes):
else:
time.units = Unit(time.units.name, 'gregorian')
return cubes


class Cl(ClFixHybridHeightCoord):
"""Fixes for ``cl``."""

def fix_metadata(self, cubes):
"""Remove attributes from ``vertical coordinate formula term: b(k)``.

Additionally add pressure level coordiante.

Parameters
----------
cubes : iris.cube.CubeList
Input cubes which need to be fixed.

Returns
-------
iris.cube.CubeList

"""
cubes = super().fix_metadata(cubes)
cube = self.get_cube_from_list(cubes)
coord = cube.coord(long_name='vertical coordinate formula term: b(k)')
coord.attributes = {}
return cubes
16 changes: 10 additions & 6 deletions esmvalcore/cmor/_fixes/cmip5/access1_3.py
Original file line number Diff line number Diff line change
@@ -1,26 +1,30 @@
"""Fixes for ACCESS1-3 model."""

from cf_units import Unit
import iris
from cf_units import Unit

from ..fix import Fix
from .access1_0 import Cl as BaseCl


Cl = BaseCl


class AllVars(Fix):
"""Common fixes to all vars."""

def fix_metadata(self, cubes):
"""
Fix metadata.
"""Fix metadata.

Fixes wrong calendar 'gregorian' instead of 'proleptic_gregorian'

Parameters
----------
cube: iris.cube.Cube
cubes : iris.cube.CubeList
Input cubes which need to be fixed.

Returns
-------
iris.cube.Cube
iris.cube.CubeList

"""
for cube in cubes:
Expand Down
5 changes: 2 additions & 3 deletions esmvalcore/cmor/_fixes/cmip5/bcc_csm1_1_m.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
"""Fixes for bcc-csm1-1-m."""
from .bcc_csm1_1 import Tos as BaseTos
from ..common import ClFixHybridPressureCoord
from .bcc_csm1_1 import Tos as BaseTos


Cl = ClFixHybridPressureCoord


class Tos(BaseTos):
"""Fixes for tos."""
Tos = BaseTos
42 changes: 27 additions & 15 deletions esmvalcore/cmor/_fixes/cmip5/bnu_esm.py
Original file line number Diff line number Diff line change
@@ -1,27 +1,31 @@

"""Fixes for BNU ESM model."""
"""Fixes for BNU-ESM model."""
from cf_units import Unit
from dask import array as da

from ..common import ClFixHybridPressureCoord
from ..fix import Fix


Cl = ClFixHybridPressureCoord


class FgCo2(Fix):
"""Fixes for fgco2."""

def fix_metadata(self, cubes):
"""
Fix metadata.

Fixes cube units
Fixes cube units.

Parameters
----------
cube: iris.cube.CubeList
cubes : iris.cube.CubeList
Input cubes to fix.

Returns
-------
iris.cube.Cube
iris.cube.CubeList

"""
self.get_cube_from_list(cubes).units = Unit('kg m-2 s-1')
Expand All @@ -31,11 +35,12 @@ def fix_data(self, cube):
"""
Fix data.

Fixes cube units
Fixes cube units.

Parameters
----------
cube: iris.cube.Cube
Input cube to fix.

Returns
-------
Expand All @@ -55,11 +60,12 @@ def fix_metadata(self, cubes):
"""
Fix metadata.

Fixes cube units
Fixes cube units.

Parameters
----------
cubes: iris.cube.CubeList
cubes : iris.cube.CubeList
Input cubes to fix.

Returns
-------
Expand All @@ -73,11 +79,13 @@ def fix_data(self, cube):
"""
Fix metadata.

Fixes cube units
Fixes cube units.

Parameters
----------
cube: iris.cube.Cube
Input cube to fix.


Returns
-------
Expand All @@ -97,11 +105,12 @@ def fix_metadata(self, cubes):
"""
Fix metadata.

Fixes cube units
Fixes cube units.

Parameters
----------
cubes: iris.cube.CubeList
cubes : iris.cube.CubeList
Input cubes to fix.

Returns
-------
Expand All @@ -115,11 +124,12 @@ def fix_data(self, cube):
"""
Fix data.

Fixes cube units
Fixes cube units.

Parameters
----------
cube: iris.cube.Cube
Input cube to fix.

Returns
-------
Expand All @@ -139,11 +149,12 @@ def fix_data(self, cube):
"""
Fix data.

Fixes cube units
Fixes cube units.

Parameters
----------
cube: iris.cube.Cube
cube : iris.cube.Cube
Input cube to fix.

Returns
-------
Expand All @@ -167,7 +178,8 @@ def fix_data(self, cube):

Parameters
----------
cube: iris.cube.Cube
cube : iris.cube.Cube
Input cube to fix.

Returns
-------
Expand Down
4 changes: 2 additions & 2 deletions esmvalcore/cmor/_fixes/cmip5/ccsm4.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,12 @@ def fix_data(self, cube):

Parameters
----------
cubes : iris.cube.Cube
cube : iris.cube.Cube
Input cube.

Returns
-------
iris.cube.CubeList
iris.cube.Cube
"""
cube.data = da.ma.masked_equal(cube.core_data(), 1.e33)
return cube
Expand Down
17 changes: 10 additions & 7 deletions esmvalcore/cmor/_fixes/cmip5/hadgem2_es.py
Original file line number Diff line number Diff line change
@@ -1,20 +1,20 @@

"""Fix HadGEM2_ES."""
import numpy as np

from ..common import ClFixHybridHeightCoord
from ..fix import Fix


class AllVars(Fix):
"""Fix errors common to all vars."""

def fix_metadata(self, cubes):
"""
Fix latitude.
"""Fix latitude.

Parameters
----------
cube: iris.cube.CubeList
cubes : iris.cube.CubeList
Input cubes which need to be fixed.

Returns
-------
Expand All @@ -33,16 +33,19 @@ def fix_metadata(self, cubes):
return cubes


Cl = ClFixHybridHeightCoord


class O2(Fix):
"""Fix o2."""

def fix_metadata(self, cubes):
"""
Fix standard and long name.
"""Fix standard and long name.

Parameters
----------
cube: iris.cube.CubeList
cubes : iris.cube.CubeList
Input cubes which need to be fixed.

Returns
-------
Expand Down
11 changes: 11 additions & 0 deletions esmvalcore/cmor/_fixes/cmip6/access_cm2.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
"""Fixes for ACCESS-CM2."""
from ..common import ClFixHybridHeightCoord


Cl = ClFixHybridHeightCoord


Cli = ClFixHybridHeightCoord


Clw = ClFixHybridHeightCoord
11 changes: 11 additions & 0 deletions esmvalcore/cmor/_fixes/cmip6/access_esm1_5.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
"""Fixes for ACCESS-ESM1-5."""
from ..common import ClFixHybridHeightCoord


Cl = ClFixHybridHeightCoord


Cli = ClFixHybridHeightCoord


Clw = ClFixHybridHeightCoord
5 changes: 2 additions & 3 deletions esmvalcore/cmor/_fixes/cmip6/bcc_esm1.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
"""Fixes for BCC-ESM1 model."""
from .bcc_csm2_mr import Tos as BaseTos
from ..common import ClFixHybridPressureCoord
from .bcc_csm2_mr import Tos as BaseTos


Cl = ClFixHybridPressureCoord
Expand All @@ -12,5 +12,4 @@
Clw = ClFixHybridPressureCoord


class Tos(BaseTos):
"""Fixes for tos."""
Tos = BaseTos
6 changes: 2 additions & 4 deletions esmvalcore/cmor/_fixes/cmip6/cesm2.py
Original file line number Diff line number Diff line change
Expand Up @@ -56,12 +56,10 @@ def fix_file(self, filepath, output_dir):
return new_path


class Cli(Cl):
"""Fixes for ``cli``."""
Cli = Cl


class Clw(Cl):
"""Fixes for ``clw``."""
Clw = Cl


class Fgco2(Fix):
Expand Down
12 changes: 4 additions & 8 deletions esmvalcore/cmor/_fixes/cmip6/cesm2_fv2.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,13 @@
from .cesm2 import Tas as BaseTas


class Cl(BaseCl):
"""Fixes for ``cl``."""
Cl = BaseCl


class Clw(Cl):
"""Fixes for ``clw``."""
Cli = Cl


class Cli(Cl):
"""Fixes for ``cli``."""
Clw = Cl


class Tas(BaseTas):
"""Fixes for ``tas``."""
Tas = BaseTas
Loading