from earthdiagnostics import Utils, cdftools, cdo, TempFile from earthdiagnostics.basins import Basins from autosubmit.config.log import Log import shutil class Ice(object): @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)