Skip to content
Snippets Groups Projects
Commit 0da810eb authored by Oriol Tintó's avatar Oriol Tintó
Browse files

Adapt workflow

parent a4f60162
No related branches found
No related tags found
1 merge request!3Refactor folder structure. Putting configuration files and namelists inside...
...@@ -75,16 +75,29 @@ JOBS: ...@@ -75,16 +75,29 @@ JOBS:
FILE: templates/real-from-ideal/prepare_experiment.sh FILE: templates/real-from-ideal/prepare_experiment.sh
DEPENDENCIES: BUILD_ICON DEPENDENCIES: BUILD_ICON
RUNNING: once RUNNING: once
WALLCLOCK: 01:00 WALLCLOCK: 00:10
PREPARE_IDEAL_DIRECTORY:
FILE: templates/real-from-ideal/prepare_ideal_directory.sh
DEPENDENCIES: PREPARE_EXPERIMENT
RUNNING: date
WALLCLOCK: 00:10
PREPARE_DATE: PREPARE_IDEAL_NAMELIST:
FILE: templates/real-from-ideal/prepare_date.sh FILE: templates/real-from-ideal/prepare_ideal_namelist.sh
DEPENDENCIES: PREPARE_IDEAL_DIRECTORY
RUNNING: date
WALLCLOCK: 00:10
RUN_IDEAL:
FILE: templates/real-from-ideal/run_ideal.sh
DEPENDENCIES: PREPARE_IDEAL_NAMELIST
RUNNING: date RUNNING: date
WALLCLOCK: 01:00 WALLCLOCK: 01:00
PREPARE_MEMBER: PREPARE_MEMBER:
FILE: templates/real-from-ideal/prepare_member.sh FILE: templates/real-from-ideal/prepare_member.sh
DEPENDENCIES: PREPARE_EXPERIMENT PREPARE_DATE DEPENDENCIES: RUN_IDEAL
RUNNING: member RUNNING: member
WALLCLOCK: 01:00 WALLCLOCK: 01:00
...@@ -96,7 +109,6 @@ JOBS: ...@@ -96,7 +109,6 @@ JOBS:
TYPE: python TYPE: python
EXECUTABLE: "%HPCROOTDIR%/%python_environment.folder_name%/bin/python3" EXECUTABLE: "%HPCROOTDIR%/%python_environment.folder_name%/bin/python3"
RUN_ICON: RUN_ICON:
FILE: templates/run_icon.sh FILE: templates/run_icon.sh
DEPENDENCIES: PREPARE_CHUNK DEPENDENCIES: PREPARE_CHUNK
......
#!/bin/bash -l
# Get some variables provided by autosubmit.
WORKDIR=%HPCROOTDIR%
STARTDATE=%SDATE%
# Define date directory, create it and go there
COMMON_DATE_FOLDER=${WORKDIR}/${STARTDATE}/inidata
# Create member folder and go there
mkdir -p ${COMMON_DATE_FOLDER}
cd ${COMMON_DATE_FOLDER} || exit
# some settings
AN_MEMBER=$(printf "%03d" %initial_conditions.member%)
INITIAL_CONDITIONS_PARENT_FOLDER=%initial_conditions.parent_folder%
INITIAL_CONDITIONS_PATH=${INITIAL_CONDITIONS_PARENT_FOLDER}/${STARTDATE:0:6}/${STARTDATE:0:8}T00
AN_SOURCE=$(find ${INITIAL_CONDITIONS_PATH} -name "igaf*00.m${AN_MEMBER}.grb" | sort | tail -n 1)
FG_SOURCE=$(find ${INITIAL_CONDITIONS_PATH} -name "igfff00030000.m${AN_MEMBER}.grb" | sort | tail -n 1)
if [ ! -f "${AN_SOURCE}" ]; then
echo "Analysis file for date ${STARTDATE} not found!"
exit 1
fi
if [ ! -f "${FG_SOURCE}" ]; then
echo "FG file for date ${STARTDATE} not found!"
exit 1
fi
AN_FILE=$(basename "${AN_SOURCE}")
FG_FILE=$(basename "${FG_SOURCE}")
# Save filenames to be used later by other scripts.
echo "${AN_FILE}" > an_file.txt
echo "${FG_FILE}" > fg_file.txt
# Copy the first-guess and analysis files.
cp "${FG_SOURCE}" "${FG_FILE}"
cp "${AN_SOURCE}" "${AN_FILE}"
# Change permissions to read only.
chmod 440 ./*
...@@ -4,8 +4,6 @@ ...@@ -4,8 +4,6 @@
WORKDIR=%HPCROOTDIR% WORKDIR=%HPCROOTDIR%
DYNAMICS_GRID_FILENAME=%simulation.dynamics_grid_filename% DYNAMICS_GRID_FILENAME=%simulation.dynamics_grid_filename%
RADIATION_GRID_FILE=%simulation.radiation_grid_filename% RADIATION_GRID_FILE=%simulation.radiation_grid_filename%
EXTERNAL_PARAMETERS_FILE=%simulation.external_parameters_filename%
# Activate spack # Activate spack
SPACK_ENV=${WORKDIR}/spack/share/spack/setup-env.sh SPACK_ENV=${WORKDIR}/spack/share/spack/setup-env.sh
...@@ -33,13 +31,10 @@ function download_file() { ...@@ -33,13 +31,10 @@ function download_file() {
BASEURL=http://icon-downloads.mpimet.mpg.de/grids/public/edzw BASEURL=http://icon-downloads.mpimet.mpg.de/grids/public/edzw
download_file $BASEURL/${DYNAMICS_GRID_FILENAME} download_file $BASEURL/${DYNAMICS_GRID_FILENAME}
download_file $BASEURL/${RADIATION_GRID_FILE} download_file $BASEURL/${RADIATION_GRID_FILE}
download_file $BASEURL/${EXTERNAL_PARAMETERS_FILE}
# Link input for radiation # Link input for radiation
ln -sf "${ICON_DATA_PATH}/rrtmg_lw.nc" . ln -sf "${ICON_DATA_PATH}/rrtmg_lw.nc" .
ln -sf "${ICON_DATA_PATH}/ECHAM6_CldOptProps.nc" . ln -sf "${ICON_DATA_PATH}/ECHAM6_CldOptProps.nc" .
ln -sf "${ICON_BASE_PATH}/run/ana_varnames_map_file.txt" .
# Change permissions to read only. # Change permissions to read only.
chmod 440 ./* chmod 440 ./*
\ No newline at end of file
#!/bin/bash -l
# Get some variables provided by autosubmit.
WORKDIR=%HPCROOTDIR%
STARTDATE=%SDATE%
# Common folder with data needed for all simulations
COMMON_INIDATA_FOLDER=${WORKDIR}/inidata
# Ideal folder
IDEAL_DIR=${WORKDIR}/${STARTDATE}/ideal
# Create member folder and go there
mkdir -p ${IDEAL_DIR}
cd ${IDEAL_DIR} || exit
# Link all files from the common inidata folder and the common date folder
ln -sf ${COMMON_INIDATA_FOLDER}/* .
import logging
import re
from datetime import datetime, timedelta
from pathlib import Path
import f90nml
logger = logging.getLogger("prepare_chunk")
logger.setLevel(logging.INFO)
# Get some autosubmit variables
WORKDIR = "%HPCROOTDIR%"
STARTDATE = "%SDATE%"
# Example of date format "2018-06-01T00:00:00Z"
date_format = "%simulation.date_format%"
START_YEAR = "%Chunk_START_YEAR%"
START_MONTH = "%Chunk_START_MONTH%"
START_DAY = "%Chunk_START_DAY%"
START_HOUR = "%Chunk_START_HOUR%"
END_YEAR = "%Chunk_END_YEAR%"
END_MONTH = "%Chunk_END_MONTH%"
END_DAY = "%Chunk_END_DAY%"
END_HOUR = "%Chunk_END_HOUR%"
Chunk_START_DATE = datetime(year=int(START_YEAR), month=int(START_MONTH), day=int(START_DAY), hour=int(START_HOUR))
Chunk_END_DATE = datetime(year=int(END_YEAR), month=int(END_MONTH), day=int(END_DAY), hour=int(END_HOUR))
# Compute difference in seconds
checkpoint_time = int((Chunk_END_DATE - Chunk_START_DATE).total_seconds())
# TODO: Is that really necessary?
# Add 10 minutes to allow the model to write the restarts
Chunk_END_DATE = Chunk_END_DATE + timedelta(minutes=10)
# Get run directory
RUNDIR = Path(f"{WORKDIR}/{STARTDATE}/ideal")
# Get some variable replacements from the proj.yml file through autosubmit
variable_replacements = {
"dynamics_grid_filename": "%simulation.dynamics_grid_filename%",
"radiation_grid_filename": "%simulation.radiation_grid_filename%",
"external_parameters_filename": "%simulation.external_parameters_filename%",
"Chunk_START_DATE": Chunk_START_DATE.strftime(date_format),
"Chunk_END_DATE": Chunk_END_DATE.strftime(date_format),
"is_restart": False if "%CHUNK%" == "1" else True,
"checkpoint_time": checkpoint_time,
}
def adapt_namelist(input_namelist: str, output_namelist: str):
input_namelist = Path(input_namelist)
output_namelist = Path(output_namelist)
namelist = f90nml.read(input_namelist.as_posix())
group_keys = [gk for gk in namelist]
for group in group_keys:
variable_keys = [vk for vk in namelist[group]]
for variable in variable_keys:
value = namelist[group][variable]
m = re.match(r"%(.*)%", str(value))
if m:
key = m.group(1)
if key not in variable_replacements:
raise AssertionError(f"The namelist {input_namelist.as_posix()!r} contains the variable {key!r} "
f"which is not in the list of provided replacements:\n"
f"{[v for v in variable_replacements]}")
logger.info(f"Replacing {group}>{variable}:{key} with {variable_replacements[key]!r}")
namelist[group][variable] = variable_replacements[key]
f90nml.write(nml=namelist, nml_path=output_namelist.as_posix(), force=True)
if __name__ == '__main__':
atmosphere_namelist_path = "%simulation.namelist_paths.ideal.atmosphere%"
master_namelist_path = "%simulation.namelist_paths.master%"
# Adapt atmosphere namelist
adapt_namelist(input_namelist=atmosphere_namelist_path,
output_namelist=(RUNDIR / "icon_atmosphere.namelist").as_posix())
# Adapt master namelist
adapt_namelist(input_namelist=master_namelist_path,
output_namelist=(RUNDIR / "icon_master.namelist").as_posix())
...@@ -7,8 +7,6 @@ MEMBER=%MEMBER% ...@@ -7,8 +7,6 @@ MEMBER=%MEMBER%
# Common folder with data needed for all simulations # Common folder with data needed for all simulations
COMMON_INIDATA_FOLDER=${WORKDIR}/inidata COMMON_INIDATA_FOLDER=${WORKDIR}/inidata
# Common folder for the same start date
COMMON_DATE_FOLDER=${WORKDIR}/${STARTDATE}/inidata
# Member folder # Member folder
MEMBER_DIR=${WORKDIR}/${STARTDATE}/${MEMBER} MEMBER_DIR=${WORKDIR}/${STARTDATE}/${MEMBER}
...@@ -21,4 +19,3 @@ cd ${MEMBER_DIR} || exit ...@@ -21,4 +19,3 @@ cd ${MEMBER_DIR} || exit
# Link all files from the common inidata folder and the common date folder # Link all files from the common inidata folder and the common date folder
ln -sf ${COMMON_INIDATA_FOLDER}/* . ln -sf ${COMMON_INIDATA_FOLDER}/* .
ln -sf ${COMMON_DATE_FOLDER}/* .
# Get some variables provided by autosubmit.
WORKDIR=%HPCROOTDIR%
ICON_VERSION=%ICON_VERSION%
STARTDATE=%SDATE%
# Define rundir
RUNDIR=${WORKDIR}/${STARTDATE}/ideal
# Go to the ideal rundir
cd ${RUNDIR}
# Activate spack
SPACK_ENV=${WORKDIR}/spack/share/spack/setup-env.sh
source ${SPACK_ENV}
# Load icon module
spack load icon-nwp@%ICON_VERSION%
# Set environment variable for eccodes-dwd definitions:
source ${WORKDIR}/eccodes_defs.env
# Run icon
srun icon
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment