Newer
Older
from earthdiagnostics import Utils, cdftools, cdo, TempFile
from earthdiagnostics.basins import Basins
from autosubmit.config.log import Log
import shutil
class Ice(object):
"""
Class containing all the diagnostics related to ice
"""
@staticmethod
def siasiesiv(thickness_file, fraction_file, output_file, basin):
"""
Compute the sea ice extent (1000km2), area (1000km2), volume (km3)
and mean thickness (m) in both hemispheres or a specified region.
Created in April 2012 Author : vguemas@ic3.cat
Modified in June 2014 Author : neven.fuckar@ic3.cat
Computation of the properties in various selected regions according to
mask.regions.${NEMOVERSION}.nc (mask_regions.nc) is based on modification
of mask.regions.ORCA1.noverticalinfo.Matt.nc from Matthieu Chevallier.
:param fraction_file:
:param thickness_file:
:param output_file: output file name
:param basin: region of interest
:return:
"""
nco = Utils.nco
input_scratch = TempFile.get()
shutil.copy(thickness_file, input_scratch)
nco.ncks(input=fraction_file, output=input_scratch, options='-A -v sic')
ntime = int(cdo.ntime(input=input_scratch)[0])
files = list()
basin = Basins.parse(basin)
if basin != Basins.Global:
shutil.move('mask.nc', 'original_mask.nc')
shutil.move('mask_regions.nc', 'mask.nc')
Utils.rename_variable('mask.nc', basin.fullname, 'tmask')
error = None
try:
for time in range(ntime):
Log.info('Running time {0}', time)
temp = TempFile.get()
nco.ncks(input=input_scratch, output=temp, options='-O -d time,{0}'.format(time))
cdftools.run('cdficediags', input=temp)
Utils.move_file('icediags.nc', temp)
files.append(temp)
except Exception as ex:
error = ex.message
finally:
if basin != Basins.Global:
Utils.rename_variable('mask.nc', 'tmask', basin.fullname)
shutil.move('mask.nc', 'mask_regions.nc')
shutil.move('original_mask.nc', 'mask.nc')
if error:
raise Exception(error)
temp = TempFile.get()
cdo.cat(input=' '.join(files), output=temp,)
nco.ncks(input=input_scratch, output=temp, options='-A -v time')
Utils.move_file(temp, output_file)