def prepare_smb(dry=False):
    logger.info("processing variable SMB")
    SMB_files = [
        "DMI-HIRHAM5_GL2_ERAI_2001_2010_gld_DM.nc.gz",
        "DMI-HIRHAM5_GL2_ERAI_2011_2014_gld_DM.nc.gz"
    ]
    smb_files = []
    for smb_file in SMB_files:
        logger.info("extracting {}".format(smb_file))
        cmd = ["gunzip", smb_file]
        sub.call(cmd)
        smb_files.append(smb_file[:-3])

    smb_merged_file_daily_mean = "DMI-HIRHAM5_GL2_ERAI_2001_2014_SMB_{}.nc".format(
        daily_mean)
    smb_merged_file_time_mean = "DMI-HIRHAM5_GL2_ERAI_2001_2014_SMB_{}.nc".format(
        time_mean)

    if dry == False:

        logger.info("merge files {} to {}".format(smb_files,
                                                  smb_merged_file_daily_mean))
        cdo.mergetime(input=" ".join(smb_files),
                      output=smb_merged_file_daily_mean)

        # Convert mm to m and then to kg m-2
        logger.info("calculate time mean")
        cdo.ydaymean(
            input="-mulc," + str(ice_density / 1000) + " -del29feb " +
            smb_merged_file_daily_mean,
            output=smb_merged_file_time_mean,
        )

        logger.info("adjusting time axis")
        adjust_time_axis(smb_merged_file_time_mean)

        logger.info("renaming variable")
        rDict = {"gld": "climatic_mass_balance"}
        nco.ncrename(input=smb_merged_file_time_mean,
                     options=[c.Rename("variable", rDict)])
        opt = [
            c.Atted(mode="o",
                    att_name="units",
                    var_name="climatic_mass_balance",
                    value="kg m-2 day-1"),
            c.Atted(
                mode="o",
                att_name="standard_name",
                var_name="climatic_mass_balance",
                value="land_ice_surface_specific_mass_balance_flux",
            ),
        ]
        nco.ncatted(input=smb_merged_file_time_mean, options=opt)

    return smb_merged_file_time_mean
def prepare_pr(dry=False):
    logger.info("processing variable PR")
    PR_files = [
        "DMI-HIRHAM5_GL2_ERAI_2001_2010_PR_DM.nc.gz",
        "DMI-HIRHAM5_GL2_ERAI_2011_2014_PR_DM.nc.gz"
    ]
    pr_files = []
    for pr_file in PR_files:
        logger.info("extracting {}".format(pr_file))
        cmd = ["gunzip", pr_file]
        sub.call(cmd)
        pr_files.append(pr_file[:-3])

    pr_merged_file_daily_mean = "DMI-HIRHAM5_GL2_ERAI_2001_2014_PR_{}.nc".format(
        daily_mean)
    pr_merged_file_time_mean = "DMI-HIRHAM5_GL2_ERAI_2001_2014_PR_{}.nc".format(
        time_mean)

    if dry == False:
        logger.info("merge files {} to {}".format(pr_files,
                                                  pr_merged_file_daily_mean))
        cdo.mergetime(input=" ".join(pr_files),
                      output=pr_merged_file_daily_mean)

        logger.info("calculate time mean")
        tmpfile = cdo.ydaymean(input="-del29feb " + pr_merged_file_daily_mean)

        logger.info("removing height dimension")
        nco.ncwa(input=tmpfile,
                 output=pr_merged_file_time_mean,
                 average="height")

        logger.info("adjusting time axis")
        adjust_time_axis(pr_merged_file_time_mean)

        logger.info("renaming variable")
        rDict = {"pr": "precipitation"}
        nco.ncrename(input=pr_merged_file_time_mean,
                     options=[c.Rename("variable", rDict)])
        opt = [
            c.Atted(mode="o",
                    att_name="units",
                    var_name="precipitation",
                    value="kg m-2 day-1"),
            c.Atted(mode="o",
                    att_name="standard_name",
                    var_name="precipitation",
                    value="precipitation_flux"),
        ]
        nco.ncatted(input=pr_merged_file_time_mean, options=opt)

    return pr_merged_file_time_mean
Beispiel #3
0
version = 'v1'
gdal_nc_options = gdal.TranslateOptions(format='netCDF')

ifile = '.'.join(['_'.join([basename, version]), 'tif'])
ofile_merged = '.'.join(['_'.join([basename, version]), 'nc'])
ifile_wp = os.path.join(basedir, ifile)
ofile_merged_wp = os.path.join(basedir, ofile_merged)
logger.info('Converting {} to {}'.format(ifile_wp, ofile_merged_wp))
gdal.Translate(ofile_merged_wp, ifile_wp, options=gdal_nc_options)
rDict = {'Band1': 'velsurf_mag'}
opt = [c.Rename('variable', rDict)]
nco.ncrename(input=ofile_merged_wp, options=opt)
opt = [
    c.Atted(mode="o",
            att_name="proj4",
            var_name='global',
            value="+init=epsg:3413",
            stype='c'),
    c.Atted(mode="o",
            att_name="units",
            var_name='velsurf_mag',
            value="m year-1")
]
nco.ncatted(input=ofile_merged_wp, options=opt)
for mvar in ('vx', 'vy', 'ex', 'ey'):
    ifile = '.'.join(['_'.join([basename, mvar, version]), 'tif'])
    ofile = '.'.join(['_'.join([basename, mvar, version]), 'nc'])
    ofile_wp = os.path.join(basedir, ofile)
    ifile_wp = os.path.join(basedir, ifile)
    gdal.Translate(ofile_wp, ifile_wp, options=gdal_nc_options)
    rDict = {'Band1': var_dict[mvar]}
def prepare_tas(dry=False):
    logger.info("processing variable TAS")
    TAS_files = [
        "DMI-HIRHAM5_GL2_ERAI_2001_2010_TAS_DM.nc.gz",
        "DMI-HIRHAM5_GL2_ERAI_2011_2014_TAS_DM.nc.gz"
    ]
    tas_files = []
    for tas_file in TAS_files:
        logger.info("extracting {}".format(tas_file))
        cmd = ["gunzip", tas_file]
        # sub.call(cmd)
        tas_files.append(tas_file[:-3])

    tas_merged_file_daily_mean = "DMI-HIRHAM5_GL2_ERAI_2001_2014_TAS_{}.nc".format(
        daily_mean)
    tas_merged_file_time_mean = "DMI-HIRHAM5_GL2_ERAI_2001_2014_TAS_{}.nc".format(
        time_mean)

    if dry == False:

        logger.info("merge files {} to {}".format(tas_files,
                                                  tas_merged_file_daily_mean))
        tmpfile = cdo.mergetime(input=" ".join(tas_files))

        logger.info("removing height dimension")
        nco.ncwa(input=tmpfile,
                 output=tas_merged_file_daily_mean,
                 average="height")

        logger.info("adjusting time axis")
        adjust_time_axis(tas_merged_file_daily_mean, "2001-1-1", "2015-1-1",
                         "days", "1980-1-1", "daily")

        opt = [
            c.Atted(mode="o",
                    att_name="units",
                    var_name="time",
                    value="days since 1980-01-01 03:00:00")
        ]
        nco.ncatted(input=tas_merged_file_daily_mean, options=opt)

        logger.info("calculate time mean")
        cdo.timmean(input=tas_merged_file_daily_mean,
                    output=tas_merged_file_time_mean)

        logger.info("renaming variable")
        rDict = {"tas": "air_temp"}
        nco.ncrename(input=tas_merged_file_time_mean,
                     options=[c.Rename("variable", rDict)])

        logger.info("calculate time mean")
        tmpfile = cdo.timmean(input=tas_merged_file_daily_mean)

        logger.info("renaming variable")
        rDict = {"tas": "air_temp_mean_annual"}
        nco.ncrename(input=tmpfile, options=[c.Rename("variable", rDict)])
        nco.ncks(input=tmpfile, output=tas_merged_file_time_mean, append=True)

        logger.info("calculate standard deviation")
        tmpfile = cdo.timstd(input=tas_merged_file_daily_mean)
        logger.info("renaming variable")
        rDict = {"tas": "air_temp_sd"}
        nco.ncrename(input=tmpfile, options=[c.Rename("variable", rDict)])
        nco.ncks(input=tmpfile, output=tas_merged_file_time_mean, append=True)

        logger.info("calculate mean July temp")
        tmpfile = cdo.timmean(input="-selmonth,7 " +
                              tas_merged_file_daily_mean)
        logger.info("renaming variable")
        rDict = {"tas": "air_temp_mean_july"}
        nco.ncrename(input=tmpfile, options=[c.Rename("variable", rDict)])
        nco.ncks(input=tmpfile, output=tas_merged_file_time_mean, append=True)

        opt = [
            c.Atted(mode="d",
                    att_name="standard_name",
                    var_name="air_temp_mean_annual"),
            c.Atted(mode="d",
                    att_name="standard_name",
                    var_name="air_temp_mean_july"),
            c.Atted(mode="d", att_name="standard_name",
                    var_name="air_temp_sd"),
        ]
        nco.ncatted(input=tas_merged_file_time_mean, options=opt)

    return tas_merged_file_time_mean
nco.ncwa(input=topo_file_tmp_1, output=topo_file_tmp_2, average="time")
logger.info("renaming variables and dimensions")
rDict = {"var6": "usurf"}
dDict = {"x": "rlon", "y": "rlat"}
nco.ncrename(
    input=topo_file_tmp_2,
    options=[c.Rename("variable", rDict),
             c.Rename("dimension", dDict)])

logger.info("add topo file {} to {}".format(topo_file, merged_file_time_mean))
nco.ncks(input=topo_file_tmp_2,
         output=merged_file_time_mean,
         append=True,
         variable="usurf")
opt = [
    c.Atted(mode="o", att_name="units", var_name="usurf", value="m"),
    c.Atted(mode="o",
            att_name="standard_name",
            var_name="usurf",
            value="surface_altitude"),
]
nco.ncatted(input=merged_file_time_mean, options=opt)

for grid_spacing in (18000, 9000, 4500, 3600, 3000, 2400, 1800, 1500, 1200,
                     900, 600):
    grid_file = "epsg3413_griddes_{}m.nc".format(grid_spacing)
    logger.info("generating grid description {}".format(grid_file))
    create_epsg3413_grid(grid_file, grid_spacing)
    epsg3413_merged_file_time_mean = "DMI-HIRHAM5_GL2_ERAI_2001_2014_{}_EPSG3413_{}m.nc".format(
        time_mean, grid_spacing)
    logger.info("remapping {} to {}".format(merged_file_time_mean,
    pr_files.append(pr_file[:-3])

daily_mean = "DM"
time_mean = "TM"
pr_merged_file_daily_mean = "DMI-HIRHAM5_GL2_ERAI_1980_2014_PR_{}.nc".format(daily_mean)

# logger.info('merge files')
# tmpfile = cdo.merge(input=' '.join(pr_files))

# logger.info('removing height dimension')
# nco.ncwa(input=tmpfile, output=pr_merged_file_daily_mean, average='height')

# logger.info('adjusting time axis')
# adjust_time_axis(pr_merged_file_daily_mean, '1980-1-1', '2015-1-1', 'days', '1980-1-1', 'daily')

opt = [c.Atted(mode="o", att_name="units", var_name="time", value="days since 1980-01-01 03:00:00")]
nco.ncatted(input=pr_merged_file_daily_mean, options=opt)
pr_merged_file_time_mean = "DMI-HIRHAM5_GL2_ERAI_1980_2014_PR_{}.nc".format(time_mean)
logger.info("calculate time mean")
cdo.timmean(input=pr_merged_file_daily_mean, output=pr_merged_file_time_mean)
# # add topo file
# logger.info('add topo file {} to {}'.format(topo_file, pr_merged_file_time_mean))
# nco.ncks(input=topo_file, output=pr_merged_file_time_mean, append=True)

for grid_spacing in (18000, 9000, 4500, 3600, 3000, 2400, 1800, 1500, 1200, 900, 600, 450, 300):
    grid_file = "epsg3413_griddes_{}m.nc".format(grid_spacing)
    logger.info("generating grid description {}".format(grid_file))
    create_epsg3413_grid(grid_file, grid_spacing)
    epsg3414_pr_merged_file_time_mean = "DMI-HIRHAM5_GL2_ERAI_1980_2014_PR_{}_EPSG3413_{}m.nc".format(
        time_mean, grid_spacing
    )
Beispiel #7
0
 exp_io_wd = os.path.join(idir, dir_io, exp_basename + '.shp')
 cmd = [
     'extract_interface.py', '-t', 'ice_ocean', '-o', exp_io_wd, exp_file
 ]
 #sub.call(cmd)
 logger.info('masking variables where ice thickness < 10m')
 nco.ncks(input=exp_file,
          output=exp_nc_wd,
          variable=','.join([x for x in pvars]),
          overwrite=True)
 nco.ncap2(input='-6 -s "{}" {}'.format(ncap2_str, exp_nc_wd),
           output=exp_nc_wd,
           overwrite=True)
 opt = [
     c.Atted(mode="o",
             att_name="_FillValue",
             var_name=myvar,
             value=fill_value) for myvar in ppvars
 ]
 nco.ncatted(input=exp_nc_wd, options=opt)
 for mvar in pvars:
     m_exp_nc_wd = 'NETCDF:{}:{}'.format(exp_nc_wd, mvar)
     m_exp_gtiff_wd = os.path.join(idir, dir_gtiff,
                                   mvar + '_' + exp_basename + '.tif')
     logger.info('Converting variable {} to GTiff and save as {}'.format(
         mvar, m_exp_gtiff_wd))
     gdal.Translate(m_exp_gtiff_wd, m_exp_nc_wd, options=gdal_gtiff_options)
     if mvar == 'usurf':
         m_exp_hs_wd = os.path.join(idir, dir_hs,
                                    mvar + '_' + exp_basename + '_hs.tif')
         logger.info('Generating hillshade {}'.format(m_exp_hs_wd))
         gdal.DEMProcessing(m_exp_hs_wd,
def prepare_tas(dry=False):
    logger.info("processing variable TAS")
    TAS_files = [
        "DMI-HIRHAM5_GL2_ERAI_2001_2010_TAS_DM.nc.gz",
        "DMI-HIRHAM5_GL2_ERAI_2011_2014_TAS_DM.nc.gz"
    ]
    tas_files = []
    for tas_file in TAS_files:
        logger.info("extracting {}".format(tas_file))
        cmd = ["gunzip", tas_file]
        sub.call(cmd)
        tas_files.append(tas_file[:-3])

    tas_merged_file_daily_mean = "DMI-HIRHAM5_GL2_ERAI_2001_2014_TAS_{}.nc".format(
        daily_mean)
    tas_merged_file_time_mean = "DMI-HIRHAM5_GL2_ERAI_2001_2014_TAS_{}.nc".format(
        time_mean)

    if dry == False:

        logger.info("merge files {} to {}".format(tas_files,
                                                  tas_merged_file_daily_mean))
        cdo.mergetime(input=" ".join(tas_files),
                      output=tas_merged_file_daily_mean)

        logger.info("calculate time mean")
        tmpfile = cdo.ydaymean(input="-del29feb " + tas_merged_file_daily_mean)

        logger.info("removing height dimension")
        nco.ncwa(input=tmpfile,
                 output=tas_merged_file_time_mean,
                 average="height")

        logger.info("adjusting time axis")
        adjust_time_axis(tas_merged_file_time_mean)

        logger.info("renaming variable")
        rDict = {"tas": "air_temp"}
        nco.ncrename(input=tas_merged_file_time_mean,
                     options=[c.Rename("variable", rDict)])

        logger.info("calculate standard deviation")
        tmpfile = cdo.ydaystd(input="-del29feb " + tas_merged_file_daily_mean)

        logger.info("removing height dimension")
        tasstdfile = "tmp_tasstd.nc"
        nco.ncwa(input=tmpfile, output=tasstdfile, average="height")

        logger.info("adjusting time axis")
        adjust_time_axis(tasstdfile)

        logger.info("renaming variable")
        rDict = {"tas": "air_temp_sd"}
        nco.ncrename(input=tasstdfile, options=[c.Rename("variable", rDict)])
        nco.ncks(input=tasstdfile,
                 output=tas_merged_file_time_mean,
                 append=True)

        opt = [
            c.Atted(mode="d", att_name="standard_name", var_name="air_temp_sd")
        ]
        nco.ncatted(input=tas_merged_file_time_mean, options=opt)

    return tas_merged_file_time_mean