|
| 1 | +#!/bin/bash |
| 2 | + |
| 3 | +cd {cfg.icon_input_icbc} |
| 4 | + |
| 5 | +# --------------------------------- |
| 6 | +# -- Pre-processing |
| 7 | +# --------------------------------- |
| 8 | + |
| 9 | +rm -f {cfg.icon_input_icbc}/{cfg.meteo_prefix}{cfg.startdate_sim_yyyymmddhh}_ic{cfg.inidata_filename_suffix} |
| 10 | + |
| 11 | +# -- Convert the GRIB files to NetCDF |
| 12 | +cdo -t ecmwf -f nc copy {cfg.meteo_dir}/{cfg.meteo_prefix}{cfg.startdate_sim_yyyymmddhh}{cfg.meteo_suffix} era5_ori.nc |
| 13 | + |
| 14 | +# -- Change variable and coordinates names to be consistent with ICON nomenclature |
| 15 | +cdo setpartabn,partab_meteo,convert era5_ori.nc tmp.nc |
| 16 | + |
| 17 | +# -- Order the variables alphabetically |
| 18 | +ncks tmp.nc data_in.nc |
| 19 | +rm tmp.nc era5_ori.nc |
| 20 | + |
| 21 | +# --------------------------------- |
| 22 | +# -- Re-mapping |
| 23 | +# --------------------------------- |
| 24 | + |
| 25 | +# -- Retrieve the triangular grid |
| 26 | +cdo -s selgrid,2 {cfg.input_files_scratch_dynamics_grid_filename} triangular-grid.nc |
| 27 | + |
| 28 | +# -- Create the weights for remapping era5 latlon grid onto the triangular grid |
| 29 | +cdo gendis,triangular-grid.nc data_in.nc weights.nc |
| 30 | + |
| 31 | +# -- Extract the land-sea mask variable |
| 32 | +cdo selname,LSM data_in.nc LSM_in.nc |
| 33 | +ncrename -h -v LSM,FR_LAND LSM_in.nc |
| 34 | +cdo selname,FR_LAND {cfg.input_files_scratch_extpar_filename} LSM_out_tmp.nc |
| 35 | + |
| 36 | +# -- Add time dimension to LSM_out.nc |
| 37 | +ncecat -O -u time LSM_out_tmp.nc LSM_out_tmp.nc |
| 38 | +ncks -h -A -v time LSM_in.nc LSM_out_tmp.nc |
| 39 | + |
| 40 | +# -- Create two different files for land- and sea-mask |
| 41 | +# -------------------------------------------------- |
| 42 | +# -- Comments: |
| 43 | +# -- setctomoss,0. = setting missing values to 0. |
| 44 | +# -- gtc = greater than constant (o(t,x) = 1 if i(t,x) > const, o(t,x) = 0 else) |
| 45 | +# -- ltc = lower than constant (o(t,x) = 1 if i(t,x) < const, o(t,x) = 0 else) |
| 46 | +# -------------------------------------------------- |
| 47 | +cdo -L setctomiss,0. -ltc,0.5 LSM_in.nc oceanmask_in.nc |
| 48 | +cdo -L setctomiss,0. -gec,0.5 LSM_in.nc landmask_in.nc |
| 49 | +cdo -L setctomiss,0. -ltc,0.5 LSM_out_tmp.nc oceanmask_out.nc |
| 50 | +cdo -L setctomiss,0. -gec,0.5 LSM_out_tmp.nc landmask_out.nc |
| 51 | +cdo setrtoc2,0.5,1.0,1,0 LSM_out_tmp.nc LSM_out.nc |
| 52 | +rm LSM_in.nc LSM_out_tmp.nc |
| 53 | + |
| 54 | +# -- Select surface sea variables defined only on sea |
| 55 | +ncks -h -v SST,CI data_in.nc datasea_in.nc |
| 56 | + |
| 57 | +# -- Select surface variables defined on both that must be remapped differently on sea and on land |
| 58 | +ncks -h -v SKT,STL1,STL2,STL3,STL4,ALB_SNOW,W_SNOW,T_SNOW data_in.nc dataland_in.nc |
| 59 | + |
| 60 | +# ----------------------------------------------------------------------------- |
| 61 | +# -- Remap land and ocean area differently for variables |
| 62 | +# ----------------------------------------------------------------------------- |
| 63 | + |
| 64 | +# -- Ocean part |
| 65 | +# ----------------- |
| 66 | + |
| 67 | +# -- Apply the ocean mask (by dividing) |
| 68 | +cdo div dataland_in.nc oceanmask_in.nc tmp1_land.nc |
| 69 | +cdo div datasea_in.nc oceanmask_in.nc tmp1_sea.nc |
| 70 | + |
| 71 | +# -- Set missing values to a distance-weighted average |
| 72 | +cdo setmisstodis tmp1_land.nc tmp2_land.nc |
| 73 | +cdo setmisstodis tmp1_sea.nc tmp2_sea.nc |
| 74 | + |
| 75 | +# -- Remap |
| 76 | +cdo remap,triangular-grid.nc,weights.nc tmp2_land.nc tmp3_land.nc |
| 77 | +cdo remap,triangular-grid.nc,weights.nc tmp2_sea.nc tmp3_sea.nc |
| 78 | + |
| 79 | + |
| 80 | +# -- Apply the ocean mask to remapped variables (by dividing) |
| 81 | +cdo div tmp3_land.nc oceanmask_out.nc dataland_ocean_out.nc |
| 82 | +cdo div tmp3_sea.nc oceanmask_out.nc datasea_ocean_out.nc |
| 83 | + |
| 84 | +# -- Clean the repository |
| 85 | +rm tmp*.nc oceanmask*.nc |
| 86 | + |
| 87 | +# -- Land part |
| 88 | +# ----------------- |
| 89 | + |
| 90 | +cdo div dataland_in.nc landmask_in.nc tmp1.nc |
| 91 | +cdo setmisstodis tmp1.nc tmp2.nc |
| 92 | +cdo remap,triangular-grid.nc,weights.nc tmp2.nc tmp3.nc |
| 93 | +cdo div tmp3.nc landmask_out.nc dataland_land_out.nc |
| 94 | +rm tmp*.nc landmask*.nc dataland_in.nc datasea_in.nc |
| 95 | + |
| 96 | +# -- merge remapped land and ocean part |
| 97 | +# -------------------------------------- |
| 98 | + |
| 99 | +cdo ifthenelse LSM_out.nc dataland_land_out.nc dataland_ocean_out.nc dataland_out.nc |
| 100 | +rm dataland_ocean_out.nc dataland_land_out.nc |
| 101 | + |
| 102 | +# remap the rest and merge all files |
| 103 | +# -------------------------------------- |
| 104 | + |
| 105 | +# -- Select all variables apart from these ones |
| 106 | +ncks -h -x -v SKT,STL1,STL2,STL3,STL4,ALB_SNOW,W_SNOW,T_SNOW,SST,CI,LSM data_in.nc datarest_in.nc |
| 107 | +# -- Remap |
| 108 | +cdo -s remap,triangular-grid.nc,weights.nc datarest_in.nc era5_final.nc |
| 109 | +rm datarest_in.nc data_in.nc |
| 110 | + |
| 111 | +# -- Fill NaN values for SST and CI |
| 112 | +cdo setmisstodis -selname,SST,CI datasea_ocean_out.nc dataland_ocean_out_filled.nc |
| 113 | +rm datasea_ocean_out.nc |
| 114 | + |
| 115 | +# -- Merge remapped files plus land-sea mask from EXTPAR |
| 116 | +ncks -h -A dataland_out.nc era5_final.nc |
| 117 | +ncks -h -A dataland_ocean_out_filled.nc era5_final.nc |
| 118 | +ncks -h -A -v FR_LAND LSM_out.nc era5_final.nc |
| 119 | +ncrename -h -v FR_LAND,LSM era5_final.nc |
| 120 | +rm LSM_out.nc dataland_out.nc dataland_ocean_out_filled.nc |
| 121 | + |
| 122 | +# --------------------------------- |
| 123 | +# -- Post-processing |
| 124 | +# --------------------------------- |
| 125 | + |
| 126 | +ncrename -h -d cell,ncells era5_final.nc |
| 127 | +ncrename -h -d nv,vertices era5_final.nc |
| 128 | +ncks era5_final.nc {cfg.icon_input_icbc}/{cfg.meteo_prefix}{cfg.startdate_sim_yyyymmddhh}_ic{cfg.inidata_filename_suffix} |
| 129 | +rm era5_final.nc |
| 130 | + |
| 131 | +# -- Clean up |
| 132 | +rm triangular-grid.nc weights.nc |
0 commit comments