Skip to content
Snippets Groups Projects
prepare_lbc_remote.sh 4.58 KiB
#!/bin/bash -l

# This script is executed on the machine at which autosubmit is executed.
# and will be used if the initial conditions are in this same system.

# Because it can happen that the initial conditions as well and the execution happens in the local
# system we need to define these two variables:
LBC_DATA_IS_LOCAL=%SIMULATION.BOUNDARY_CONDITIONS.LOCAL%

if [ "x%HPCARCH%" == "xlocal" ]; then
  RUN_MACHINE_IS_LOCAL="True"
else
  RUN_MACHINE_IS_LOCAL="False"
fi

if [ "${LBC_DATA_IS_LOCAL}" != "True" ]; then
  # Get some variables provided by autosubmit.
  WORKDIR=%HPCROOTDIR%
  STARTDATE=%SDATE%
  HPCUSER=%HPCUSER%
  HPCHOST=%HPCHOST%
  MEMBER=%MEMBER%

  . ${WORKDIR}/proj/platforms/common/spack_utils.sh
  load_spack "%spack.init%" "%spack.root%" "%spack.url%" "%spack.branch%" "%spack.externals%" "%spack.compiler%" "%spack.disable_local_config%" "%spack.user_cache_path%" "%spack.user_config_path%" "%spack.upstreams%"

  # Load icon module
  spack load --first dwd-icon-tools

  # Set environment variable for eccodes-dwd definitions:
  source ${WORKDIR}/eccodes_defs.env


  # Define date directory, create it and go there
  COMMON_DATE_FOLDER=${WORKDIR}/${STARTDATE}/inidata
  COMMON_GRID_FOLDER=${WORKDIR}/inidata
  MEMBER_DIR=${WORKDIR}/${STARTDATE}/${MEMBER^}

  # Leave out the character part
  BOUNDARY_CONDITIONS_PARENT_FOLDER=%SIMULATION.BOUNDARY_CONDITIONS.PARENT_FOLDER%
  BOUNDARY_CONDITIONS_PATH=${BOUNDARY_CONDITIONS_PARENT_FOLDER}/${STARTDATE:0:8}00


  # Fetch tar.gz file of ICON-EU-EPS outputs necessary for the lateral boundary conditions
  FC_TAR_SOURCE=$(find ${BOUNDARY_CONDITIONS_PATH} -name "iefff.${MEMBER,}.tar.gz" | sort | tail -n 1)

  FC_TAR_FILE=$(basename "${FC_TAR_SOURCE}")


  if [ ! -f "${FC_TAR_SOURCE}" ]; then
    echo "ICON-EU FC file for date ${STARTDATE} not found!"
    exit 1
  fi

  # make a working directory for converting boundary conditions
  mkdir -p work/${MEMBER} || exit

  tar -zxvf ${FC_TAR_SOURCE} -C work

  DYNAMICS_GRID_FILENAME=%simulation.dynamics_grid_filename%
  BOUNDARY_GRID_FILE=%simulation.lateral_boundary_grid_filename%
  PARENT_GRID_FILE=%simulation.parent_grid_filename%

  # necessary for running fortran 
  ulimit -s unlimited
  OMP_NUM_THREADS=1

  # Loop through hours
  for ((tt=3; tt<=$((3 + %EXPERIMENT.CHUNKSIZE%)); tt++)) ; do
    th=$((tt % 24))
    td=$((tt / 24))
    EU_FC_TIME=$(printf "%02d" $td)$(printf "%02d" $th)

    tt2=$((tt-3))
    th=$((tt2 % 24))
    td=$((tt2 / 24))
    D2_FC_TIME=$(printf "%03d" $td)$(printf "%02d" $th)

    # Convert ICON-EU-EPS to latbc
    ${WORKDIR}/%python_environment.folder_name%/bin/python3 ${WORKDIR}/proj/templates/real-from-d2-ana/icon-remap-helper.py \
        --src-grid ${COMMON_GRID_FOLDER}/${PARENT_GRID_FILE} \
        --dst-grid ${COMMON_GRID_FOLDER}/${BOUNDARY_GRID_FILE} \
        --source   work/iefff${EU_FC_TIME}0000.${MEMBER,} \
        --dest work/${MEMBER} \
        --output-format grb

    # before 2022 wind field is only 3-hourly
    if [ ${STARTDATE} -lt 2022010100 ]; then
      if [ $((tt2 % 3)) -ne 0 ]; then
        grib_copy work/${MEMBER}/iefff${EU_FC_TIME}0000.grb work/${MEMBER}/iefff${EU_FC_TIME}0000.grb_t -w shortName!=wz
        mv work/${MEMBER}/iefff${EU_FC_TIME}0000.grb_t work/${MEMBER}/iefff${EU_FC_TIME}0000.grb
        grib_set -s stepRange=$((tt2 * 60)),dataTime=0,dataDate=${STARTDATE:0:8} ${COMMON_DATE_FOLDER}/WZ.grib  work/${MEMBER}/WZ.grib
        cat work/${MEMBER}/WZ.grib >> work/${MEMBER}/iefff${EU_FC_TIME}0000.grb
    fi
    fi

    # rename to the comfortable style for ICON
    mv work/${MEMBER}/iefff${EU_FC_TIME}0000.grb ${MEMBER_DIR}/latbc_${D2_FC_TIME}.${MEMBER^}.grib

  done

  # add HHL
  #grib_set -s stepRange=0,dataTime=2100,dataDate=${STARTDATE:0:8} ${COMMON_GRID_FOLDER}/HHL.grib 
  cat ${COMMON_DATE_FOLDER}/HHL.grib >> ${MEMBER_DIR}/latbc_00000.${MEMBER^}.grib

  # clean up the working directory
  rm -r work/${MEMBER}


  # Fetch tar.gz file of ICON-EU-EPS outputs necessary for the lateral boundary conditions
  LBC_SOURCE=$(find ${MEMBER_DIR} -name "latbc_*00.${MEMBER^}.grib" | sort -n )

  if [ -z "${LBC_SOURCE}" ]; then
    echo "Failed to make boundary conditions file for date ${STARTDATE}!"
    exit 1
  fi

  # Check if we copy the initial conditions from the local system or the remote one
  # Create member folder and go there
  mkdir -p ${COMMON_DATE_FOLDER}
  cd ${COMMON_DATE_FOLDER} || exit

  # Save filenames to be used later by other scripts.
  echo "${LBC_SOURCE}" > ${MEMBER_DIR}/lbc_file.txt

  # Copy the first-guess and analysis files.
  #cp "${LBC_SOURCE}" "${LBC_FILE}"

  # Change permissions to read only.
  #chmod 440 ${MEMBER_DIR}/latbc_*.grib


fi