Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
55 changes: 4 additions & 51 deletions esmvalcore/preprocessor/_derive/gtfgco2.py
Original file line number Diff line number Diff line change
@@ -1,47 +1,9 @@
"""Derivation of variable `gtfgco2`."""
import iris
import numpy as np

from ._baseclass import DerivedVariableBase


def calculate_total_flux(fgco2_cube, cube_area):
"""
Calculate the area of unmasked cube cells.

Requires a cube with two spacial dimensions. (no depth coordinate).

Parameters
----------
cube: iris.cube.Cube
Data Cube
cube_area: iris.cube.Cube
Cell area Cube

Returns
-------
numpy.array:
An numpy array containing the total flux of CO2.

"""
data = []
times = fgco2_cube.coord('time')

fgco2_cube.data = np.ma.array(fgco2_cube.data)
for time_itr in np.arange(len(times.points)):

total_flux = fgco2_cube[time_itr].data * cube_area.data

total_flux = np.ma.masked_where(fgco2_cube[time_itr].data.mask,
total_flux)
data.append(total_flux.sum())

######
# Create a small dummy output array
data = np.array(data)
return data


class DerivedVariable(DerivedVariableBase):
"""Derivation of variable `gtfgco2`."""

Expand All @@ -62,20 +24,11 @@ def calculate(cubes):
fgco2_cube = cubes.extract_strict(
iris.Constraint(name='surface_downward_mass_flux_of_carbon_dioxide'
'_expressed_as_carbon'))
area_cube = cubes.extract_strict(iris.Constraint(name='cell_area'))

try:
cube_area = cubes.extract_strict(iris.Constraint(name='cell_area'))
except iris.exceptions.ConstraintMismatchError:
pass

total_flux = calculate_total_flux(fgco2_cube, cube_area)

# Dummy result cube
result = fgco2_cube.collapsed(
total_flux = (fgco2_cube * area_cube).collapsed(
['latitude', 'longitude'],
iris.analysis.MEAN,
iris.analysis.SUM,
)
result.units = fgco2_cube.units * cube_area.units

result.data = total_flux
return result
return total_flux