diff --git a/.github/ISSUE_TEMPLATE/support_request.md b/.github/ISSUE_TEMPLATE/support_request.md index aee27a860..1de09b98e 100644 --- a/.github/ISSUE_TEMPLATE/support_request.md +++ b/.github/ISSUE_TEMPLATE/support_request.md @@ -21,7 +21,7 @@ If applicable, add screenshots to help explain your problem. **System (please complete the following information):** - Supercomputer: [which machine you are on] - - Version [Please run `esm_versions check`] + - Version [Please run `esm_tools --version`] **Additional context** diff --git a/.github/workflows/approve_esm_tests_changes.yml b/.github/workflows/approve_esm_tests_changes.yml index 17f512a4f..bf58b8b52 100644 --- a/.github/workflows/approve_esm_tests_changes.yml +++ b/.github/workflows/approve_esm_tests_changes.yml @@ -24,6 +24,8 @@ jobs: computer: ollie1 update_esm_tests_info: true test_flags: -cngu -s True + secrets: + ESM_TOOLS_BOT: ${{ secrets.ESM_TOOLS_BOT }} levante: # Run this workflow ONLY if the `issue_comment` is in a pull-request and the comment text contains `#approve-changes` if: ${{ github.event.issue.pull_request && contains(github.event.comment.body, '#approve-changes') }} @@ -32,6 +34,8 @@ jobs: computer: levante1 update_esm_tests_info: true test_flags: -cngu -s True + secrets: + ESM_TOOLS_BOT: ${{ secrets.ESM_TOOLS_BOT }} juwels: # Run this workflow ONLY if the `issue_comment` is in a pull-request and the comment text contains `#approve-changes` if: ${{ github.event.issue.pull_request && contains(github.event.comment.body, '#approve-changes') }} @@ -40,6 +44,8 @@ jobs: computer: jwlogin01.juwels update_esm_tests_info: true test_flags: -cngu -s True + secrets: + ESM_TOOLS_BOT: ${{ secrets.ESM_TOOLS_BOT }} aleph: # Run this workflow ONLY if the `issue_comment` is in a pull-request and the comment text contains `#approve-changes` if: ${{ github.event.issue.pull_request && contains(github.event.comment.body, '#approve-changes') }} @@ -48,6 +54,8 @@ jobs: computer: elogin1 update_esm_tests_info: true test_flags: -cngu -s True + secrets: + ESM_TOOLS_BOT: ${{ secrets.ESM_TOOLS_BOT }} blogin: # Run this workflow ONLY if the `issue_comment` is in a pull-request and the comment text contains `#approve-changes` if: ${{ github.event.issue.pull_request && contains(github.event.comment.body, '#approve-changes') }} @@ -56,3 +64,5 @@ jobs: computer: blogin1 update_esm_tests_info: true test_flags: -cngu -s True + secrets: + ESM_TOOLS_BOT: ${{ secrets.ESM_TOOLS_BOT }} diff --git a/.github/workflows/esm_tests.yml b/.github/workflows/esm_tests.yml index e4a8603b6..8c650f577 100644 --- a/.github/workflows/esm_tests.yml +++ b/.github/workflows/esm_tests.yml @@ -27,3 +27,7 @@ jobs: uses: ./.github/workflows/esm_tests_computer_workflow.yml with: computer: blogin1 + albedo: + uses: ./.github/workflows/esm_tests_computer_workflow.yml + with: + computer: albedo1 diff --git a/.github/workflows/esm_tests_computer_workflow.yml b/.github/workflows/esm_tests_computer_workflow.yml index 7971a24e3..20f51b7c9 100644 --- a/.github/workflows/esm_tests_computer_workflow.yml +++ b/.github/workflows/esm_tests_computer_workflow.yml @@ -16,6 +16,9 @@ on: test_flags: type: string default: "-cngeu -s False" + secrets: + ESM_TOOLS_BOT: + required: false jobs: computer: @@ -29,21 +32,32 @@ jobs: container: image: koldunovn/esm_test:latest options: --hostname ${{ inputs.computer }} + + steps: + # Checkout PR-branch (I could not find an easier way to do this and it seems + # many people are struggling with the same problem when your event is triggered + # by `issue_comment`) + - name: PR branch + run: | + apt install -y jq; + PR_URL="${{ github.event.issue.pull_request.url }}"; + BRANCH=$(wget -qO - ${PR_URL} | jq .head.ref | xargs); + echo "::set-output name=this_branch::${BRANCH}" + id: this_branch + + - name: deleteme + run: | + echo ${THIS_BRANCH} + env: + THIS_BRANCH: ${{ steps.this_branch.outputs.this_branch }} # Service containers to run with `gfortran_ubuntu` - steps: - uses: actions/checkout@v3 with: submodules: true fetch-depth: 0 token: ${{ secrets.GITHUB_TOKEN }} - -# - name: checkout esm_tests_info -# uses: actions/checkout@v3 -# with: -# repository: esm-tools/esm_tests_info -# path: src/esm_tests/resources -# token: ${{ secrets.GITHUB_TOKEN }} + ref: ${{ steps.this_branch.outputs.this_branch }} - name: add to the path run: | @@ -53,16 +67,48 @@ jobs: ./install.sh - name: run esm_tests run: | + git status; yes Y | esm_tests ${{ inputs.test_flags }} + +# - name: store last tested in a different directory +# if: ${{ inputs.update_esm_tests_info }} +# run: | +# cp -r src/esm_tests/resources /__w/esm_tests_info; +# ls /__w/esm_tests_info; +# - name: checkout esm_tests_info +# if: ${{ inputs.update_esm_tests_info }} +# uses: actions/checkout@v3 +# with: +# repository: esm-tools/esm_tests_info +# token: ${{ secrets.GITHUB_TOKEN }} - name: update esm_tests info if: ${{ inputs.update_esm_tests_info }} + env: + ESM_TOOLS_BOT: ${{ secrets.ESM_TOOLS_BOT }} run: | cd src/esm_tests/resources; - git config --global user.name "${GITHUB_ACTOR}"; - git config --global user.email "${GITHUB_ACTOR}@users.noreply.github.com"; + git config --unset-all "http.https://github.com/.extraheader"; + git config user.name esmtools-bot; + git config user.email esmtools-bot@users.noreply.github.com; + echo "USER:"; + git config user.name + echo "CURRENT:"; + ls; rm -rf automatic_testing; # cleanup the resources directory from tests + echo "PWD:"; + pwd; + git status; + git diff; + git stash; + git pull; + git stash pop; git add .; git commit -m "approved changes from GitHub actions for ${{ inputs.computer }}"; - git status; - git push; - + git push https://esmtools-bot:${ESM_TOOLS_BOT}@github.com/esm-tools/esm_tests_info.git; +# - name: Push changes +# if: ${{ inputs.update_esm_tests_info }} +# uses: ad-m/github-push-action@master +# with: +# github_token: ${{ secrets.GITHUB_TOKEN }} +# branch: release +# repository: esm-tools/esm_tests_info diff --git a/.github/workflows/esm_tools_actions_novm.yml b/.github/workflows/esm_tools_actions_novm.yml index 84c25614a..60b338f8c 100644 --- a/.github/workflows/esm_tools_actions_novm.yml +++ b/.github/workflows/esm_tools_actions_novm.yml @@ -13,11 +13,11 @@ jobs: LANG: en_US.UTF-8 strategy: matrix: - python-version: [ '3.6', '3.7', '3.8', '3.9'] + python-version: ['3.7', '3.8', '3.9', '3.10'] name: Python ${{ matrix.python-version }} sample steps: - uses: actions/checkout@v2 - - uses: actions/setup-python@v1 + - uses: actions/setup-python@v4 with: python-version: ${{ matrix.python-version }} architecture: x64 diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml new file mode 100644 index 000000000..eabfa154e --- /dev/null +++ b/.github/workflows/stale.yml @@ -0,0 +1,31 @@ +# This workflow warns and then closes issues and PRs that have had no activity for a specified amount of time. +# +# You can adjust the behavior by modifying this file. +# For more information, see: +# https://github.com/actions/stale +name: Mark stale issues and pull requests + +on: + schedule: + - cron: '00 14 * * *' + +jobs: + stale: + + runs-on: ubuntu-latest + permissions: + issues: write + pull-requests: write + + steps: + - uses: actions/stale@v5 + with: + repo-token: ${{ secrets.GITHUB_TOKEN }} + days-before-stale: 365 + stale-before-pr-stale: -1 + days-before-close: 30 + days-before-pr-close: -1 + stale-issue-message: 'This issue has been inactive for the last 365 days. It will now be marked as stale and closed after 30 days of further inactivity. Please add a comment to reset this automatic closing of this issue or close it if solved.' + stale-pr-message: 'This pull request has been incative for the last days.' + stale-issue-label: 'Stale' + stale-pr-label: 'no-pr-activity' diff --git a/.gitignore b/.gitignore index 02ccdb228..39fb371c5 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ +# Mac finder files +.DS_Store # Direnv stuff .envrc .direnv/ diff --git a/.readthedocs.yml b/.readthedocs.yml index a8dc6c005..40800b3d9 100644 --- a/.readthedocs.yml +++ b/.readthedocs.yml @@ -8,6 +8,7 @@ version: 2 # Build documentation in the docs/ directory with Sphinx sphinx: configuration: docs/conf.py + fail_on_warning: false # Build documentation with MkDocs #mkdocs: diff --git a/README.rst b/README.rst index edcf98fba..86acae11c 100644 --- a/README.rst +++ b/README.rst @@ -29,8 +29,9 @@ glogin.hlrn.de / blogin.hlrn.de:: juwels.fz-juelich.de:: + $ module load Stages/2022 $ module load git - $ module load Python-3.6.8 + $ module load Python/3.9.6 aleph:: diff --git a/configs/components/debm/debm.yaml b/configs/components/debm/debm.yaml index d737141dc..0965befdf 100644 --- a/configs/components/debm/debm.yaml +++ b/configs/components/debm/debm.yaml @@ -22,6 +22,7 @@ clean_command: cd Fortran-v1.0; rm -rf build CMakeCache.txt comp_command: cd Fortran-v1.0; mkdir -p build; cd build; cmake ..; make -j `nproc --all` git-repository: https://github.com/ukrebska/dEBM install_bins: Fortran-v1.0/bin/debm +contact: ukrebska(at)awi.de metadata: Institute: AWI diff --git a/configs/components/echam/echam.datasets.yaml b/configs/components/echam/echam.datasets.yaml index 1d309e8b3..197ba2ced 100644 --- a/configs/components/echam/echam.datasets.yaml +++ b/configs/components/echam/echam.datasets.yaml @@ -81,10 +81,10 @@ forcing_sources: "${forcing_dir}/volcano_aerosols/strat_aerosol_sw_${resolution}_1950.nc" # greenhouse - # TODO: currently only r0008 contains the greenhouse_ssp* files + # currently only r0008 contains the greenhouse_ssp* files "histgreenh": "${greenhouse_dir}/greenhouse_historical.nc" "greenhouse_hist_scenario": - "${greenhouse_dir}/greenhouse_historical.nc": + "${greenhouse_dir}/${greenhouse_hist_name}.nc": to: 2014 "${greenhouse_dir}/greenhouse_${scenario}.nc": from: 2015 @@ -118,6 +118,9 @@ forcing_sources: # scenario: ssp126, ssp119, ssp245, ssp370, ssp585 "${forcing_dir}/ozone/${resolution}_ozone_${scenario}_@YEAR@.nc": from: 2015 + to: 2099 + "${forcing_dir}/ozone/${resolution}_ozone_${scenario}_2099.nc": + from: 2100 "1850ozone": "${forcing_dir}/ozone/${resolution}_ozone_historical_1850.nc" "1950ozone": "${forcing_dir}/ozone/${resolution}_ozone_historical_1950.nc" @@ -129,7 +132,14 @@ forcing_sources: "MAC-SP": "${input_dir}/MAC-SP.nc" "MAC-SP_hist_scenario": - "${input_dir}/MAC-SP.nc": + "${input_dir}/${MAC-SP_hist_name}.nc": to: 2014 "${input_dir}/MAC-SP_${scenario}.nc": from: 2015 + +greenhouse_hist_name: "greenhouse_historical" +MAC-SP_hist_name: "MAC-SP" +choose_echam.dataset: + r0008: + greenhouse_hist_name: "greenhouse_ssp245" + MAC-SP_hist_name: "MAC-SP_ssp245" diff --git a/configs/components/echam/echam.yaml b/configs/components/echam/echam.yaml index 94891e407..a3b0a5626 100644 --- a/configs/components/echam/echam.yaml +++ b/configs/components/echam/echam.yaml @@ -8,6 +8,7 @@ compile_infos: available_versions: - 6.3.05p2 - 6.3.05p2-foci + - 6.3.05p2-foci_autotools - 6.3.05p2-foci_oasismct4 - 6.3.02p4 - 6.3.04p1-esm_interface @@ -71,6 +72,14 @@ compile_infos: 6.3.05p2-foci: branch: esm-tools git-repository: https://git.geomar.de/foci/src/echam.git + 6.3.05p2-foci_autotools: + clean_command: rm -rf src/echam/bin; rm -rf bin; make clean; make distclean + comp_command: mkdir -p src/.deps yaxt/src/.deps yaxt/tests/.deps; + ./configure --prefix=$(pwd)/../ --with-coupler=oasis3-mct-nemo --disable-mh-file --enable-cdi-pio --disable-shared CFLAGS="-O2 -DgFortran -std=gnu99" FCFLAGS="-DQBO -I. -O3 -traceback -fp-model source -fast-transcendentals -no-prec-sqrt -no-prec-div -xHost" FFLAGS="-I. -traceback -O3 -xHost -DTREAT_OVERLAY -Duse_netCDF -Duse_comm_MPI1" LAPACK_LIB='-mkl=sequential' OASIS3MCTROOT=$(pwd)/../ SUPPORTROOT=$(pwd)/../ SUPPORT_LIB='-L$(SUPPORTROOT)/lib -lsupport' SRCDIRS="support" ; + make -j `nproc --all`; make install -j `nproc --all`; + install_bins: '' + branch: esm-tools + git-repository: https://git.geomar.de/foci/src/echam.git 6.3.05p2-foci_oasismct4: branch: esm-tools-oasis3mct4 git-repository: https://git.geomar.de/foci/src/echam.git @@ -84,6 +93,7 @@ compile_infos: comp_command: ${defaults.comp_command} git-repository: https://gitlab.dkrz.de/modular_esm/echam6.git install_bins: src/echam/bin/echam6 + contact: "miguel.andres-martinez(at)awi.de, paul.gierz(at)awi.de" metadata: Institute: MPI-Met @@ -94,9 +104,11 @@ metadata: 'Atmosphericcomponent of the MPI-M earth system model: ECHAM6 ' License: Please make sure you have a license to use ECHAM. Otherwise downloading ECHAM will already fail. - To use the repository on gitlab.dkrz.de/modular_esm/echam.git, register for the MPI-ESM user forum at - https://mpimet.mpg.de/en/science/modeling-with-icon/code-availability/mpi-esm-users-forum and send a screenshot - to either dirk.barbi@awi.de, deniz.ural@awi.de or miguel.andres-martinez@awi.de + To use the repository on either gitlab.dkrz.de/modular_esm/echam6.git or gitlab.awi.de/paleodyn/models/echam6.git, + please register for the MPI-ESM user forum at https://code.mpimet.mpg.de/projects/mpi-esm-license + and send a screenshot of yourself logged in to the forum to either paul.gierz@awi.de, miguel.andres-martinez@awi.de, + or nadine.wieters@awi.de. Note also that you can otherwise ignore the instructions on that page, just the registration + and login screen shot is the relevant part for obtaining the license. standalone_model: True @@ -115,7 +127,7 @@ transient_advance_forcing: false ocean_resolution: 'GR15' disturbance: "1.000001" lresume: false -dataset: "r0007" + ini_parent_date: 22941231 ini_parent_exp_id: khw0030 @@ -202,10 +214,12 @@ choose_version: wiso_code: true concurrent_radiation_code: true repo_tag: not_applicable - dataset: r0007 + dataset: r0008 6.3.04p1: repo_tag: 6.3.04p1 dataset: r0007 + 6.3.04p1-recom-awicm: + dataset: r0007 6.3.04p1-paleodyn: repo_tag: 6.3.04p1 dataset: r0007 @@ -215,7 +229,7 @@ choose_version: dataset: r0007 6.3.05p2: repo_tag: 6.3.05p2 - dataset: r0007 + dataset: r0008 nprocrad: "remove_from_namelist" lrad_async: "remove_from_namelist" 6.3.05p2-foci: @@ -232,7 +246,7 @@ choose_version: 6.3.05p2-concurrent_radiation-paleodyn: concurrent_radiation_code: true repo_tag: not_applicable - dataset: r0007 + dataset: r0008 add_namelist_changes: namelist.echam: runctl: @@ -241,17 +255,19 @@ choose_version: lrestart_from_old: "${lrestart_from_old}" 6.3.05p2-wiso: + dataset: r0008 wiso_code: true concurrent_radiation_code: true + default_output: True add_namelist_changes: namelist.echam: runctl: - default_output: True + default_output: "${default_output}" 6.3.05p2-concurrent_radiation: concurrent_radiation_code: true repo_tag: not_applicable - dataset: r0007 + dataset: r0008 add_namelist_changes: namelist.echam: runctl: @@ -271,18 +287,21 @@ choose_version: # lrestart_from_old: false +compiletime_environment_changes: + choose_computer.name: + albedo: + add_export_vars: + configure_opts: "'--without-regard-for-quality'" + FFLAGS: "'-fallow-argument-mismatch -w'" + FCFLAGS: "'-fallow-argument-mismatch -w'" + # Unset FFLAGS, they are set in mh-linux in echam (booo this is horrible) + add_unset_vars: + - FFLAGS + - FCFLAGS + + choose_concurrent_radiation_code: True: - choose_computer.name: - mistral: - compiletime_environment_changes: - add_export_vars: - NETCDFROOT: "/sw/rhel6-x64/netcdf/netcdf_c-4.3.2-gcc48" - LD_LIBRARY_PATH: "/sw/rhel6-x64/netcdf/parallel_netcdf-1.6.1-impi-intel14/lib/:$LD_LIBRARY_PATH" - runtime_environment_changes: - add_export_vars: - NETCDFROOT: "/sw/rhel6-x64/netcdf/netcdf_c-4.3.2-gcc48" - LD_LIBRARY_PATH: "/sw/rhel6-x64/netcdf/parallel_netcdf-1.6.1-impi-intel14/lib/:$LD_LIBRARY_PATH" add_namelist_changes: namelist.echam: parctl: @@ -375,32 +394,51 @@ choose_scenario: aerofin_1850: piaerofin aerofin_1851: piaerofin ozone: ozone_hist_scenario - greenhouse: histgreenh + greenhouse: greenhouse_hist_scenario volcir: histvolcir volcsw: histvolcsw swflux: histswflux - MAC-SP: MAC-SP - - # Shared Socioeconomic Pathways (SSPs) scenarios. Forcing data are given - # under the choose_scenario_type block - ssp585: - scenario_type: cmip6 - - ssp370: - scenario_type: cmip6 - - ssp126: - scenario_type: cmip6 - - ssp245: - scenario_type: cmip6 - - ssp534os: - scenario_type: cmip6 + MAC-SP: MAC-SP_hist_scenario cmip6hist: scenario_type: cmip6 +# Shared Socioeconomic Pathways (SSPs) scenarios. Forcing data are given +# under the choose_scenario_type block +scenario_is_ssp: "$(( 'ssp' in '${echam.scenario}' ))" +allow_hist2ssp_transition: False +choose_scenario_is_ssp: + True: + scenario_type: cmip6 + after_2014: "$(( ${start_date!year} > 2014 ))" + initial_date_non_ssp: "$(( + ${initial_date!year} < 2015 and not ${allow_hist2ssp_transition} + ))" + choose_initial_date_non_ssp: + True: + add_error: + "Initial date out of the ssp period": + message: " + You are trying to run a ``ssp`` scenario (``${scenario}``) + with an initial date that does not correspond to a ssp + period (``${initial_date}``). Consider running a historical + scenario until the end of 2014, and then branch off a new + experiment for the ssp period. Alternatively, you can set + ``echam.allow_hist2ssp_transition`` to ``True`` (we advice + against that!)." + # Automatic switching of iaero if simulations are allowed to run from + # historical to ssp periods + False: + choose_after_2014: + True: + iaero: 9 + False: + iaero: 8 + add_namelist_changes: + namelist.echam: + radctl: + iaero: "${iaero}" + choose_scenario_type: cmip6: greenhouse_dir: "${input_dir}" diff --git a/configs/components/esm_interface/esm_interface.yaml b/configs/components/esm_interface/esm_interface.yaml index b542d1aea..86715549c 100644 --- a/configs/components/esm_interface/esm_interface.yaml +++ b/configs/components/esm_interface/esm_interface.yaml @@ -16,6 +16,7 @@ git-repository: https://gitlab.dkrz.de/modular_esm/esm-interface.git namelist_dir: "${esm_namelist_dir}/esm-interface/" namelists: - namelist.esmcouple +contact: nadine.wieters(at)awi.de config_files: config: config diff --git a/configs/components/fesom/fesom-2.0.yaml b/configs/components/fesom/fesom-2.0.yaml index a6a1266f6..212bcc386 100644 --- a/configs/components/fesom/fesom-2.0.yaml +++ b/configs/components/fesom/fesom-2.0.yaml @@ -24,7 +24,7 @@ choose_version: - https://github.com/FESOM/fesom2.git install_bins: bin/fesom.x 2.0-master: - branch: master + branch: refactoring destination: fesom-2.0 git-repository: - https://github.com/FESOM/fesom2.git @@ -67,15 +67,7 @@ install_bins: bin/fesom.x git-repository: - https://github.com/FESOM/fesom2.git - https://gitlab.dkrz.de/FESOM/fesom2.git - - -choose_computer.name: - mistral: - add_compiletime_environment_changes: - add_module_actions: - - "unload gcc" - - "load gcc/4.8.2" - +contact: "dmitry.sidorenko(at)awi.de, nikolay.koldunov(at)awi.de, miguel.andres-martinez(at)awi.de, paul.gierz(at)awi.de" restart_rate: "12" restart_unit: "m" @@ -151,8 +143,14 @@ choose_resolution: nx: 912469 DART: nx: 3160340 + ROS2: + nx: 26306560 HR: nx: 1306775 + jane: + nx: 33348172 + SO3: + nx: 11087062 mesh_dir: "${pool_dir}/${resolution}/" @@ -169,13 +167,19 @@ restart_in_in_work: par_ice_restart: fesom.${parent_date!syear}.ice.restart/*.nc fesom_raw_restart_info: fesom_raw_restart/*.info fesom_raw_restart: fesom_raw_restart/np${nproc}/*.dump + fesom_bin_restart_info: fesom_bin_restart/*.info + fesom_bin_restart: fesom_bin_restart/np${nproc}/* restart_in_sources: - oce_restart: fesom.${parent_date!syear}.oce.restart.nc - ice_restart: fesom.${parent_date!syear}.ice.restart.nc + # TODO: When cleaning up the FESOM yamls, remove the wildcard and make this file + # be dependent on the corresponding namelist option + oce_restart: fesom.${parent_date!syear}.o*e.restart.nc + ice_restart: fesom.${parent_date!syear}.i*e.restart.nc par_oce_restart: fesom.${parent_date!syear}.oce.restart/*.nc par_ice_restart: fesom.${parent_date!syear}.ice.restart/*.nc fesom_raw_restart_info: fesom_raw_restart/*.info fesom_raw_restart: fesom_raw_restart/np${nproc}/*.dump + fesom_bin_restart_info: fesom_bin_restart/*.info + fesom_bin_restart: fesom_bin_restart/np${nproc}/* restart_out_files: oce_restart: oce_restart @@ -184,6 +188,8 @@ restart_out_files: par_ice_restart: par_ice_restart fesom_raw_restart_info: fesom_raw_restart_info fesom_raw_restart: fesom_raw_restart + fesom_bin_restart_info: fesom_bin_restart_info + fesom_bin_restart: fesom_bin_restart restart_out_in_work: oce_restart: fesom.${end_date!syear}.oce.restart.nc @@ -192,6 +198,8 @@ restart_out_in_work: par_ice_restart: fesom.${end_date!syear}.ice.restart/*.nc fesom_raw_restart_info: fesom_raw_restart/*.info fesom_raw_restart: fesom_raw_restart/np${nproc}/*.dump + fesom_bin_restart_info: fesom_bin_restart/*.info + fesom_bin_restart: fesom_bin_restart/np${nproc}/* restart_out_sources: oce_restart: fesom.${end_date!syear}.oce.restart.nc @@ -200,6 +208,8 @@ restart_out_sources: par_ice_restart: fesom.${end_date!syear}.ice.restart/*.nc fesom_raw_restart_info: fesom_raw_restart/*.info fesom_raw_restart: fesom_raw_restart/np${nproc}/*.dump + fesom_bin_restart_info: fesom_bin_restart/*.info + fesom_bin_restart: fesom_bin_restart/np${nproc}/* outdata_sources: @@ -228,6 +238,14 @@ file_movements: all_directions: move fesom_raw_restart_info_out: all_directions: move + fesom_bin_restart_in: + all_directions: move + fesom_bin_restart_out: + all_directions: move + fesom_bin_restart_info_in: + all_directions: move + fesom_bin_restart_info_out: + all_directions: move # Is it a branchoff experiment? branchoff: "$(( ${lresume} and ${general.run_number}==1 ))" @@ -243,6 +261,8 @@ choose_branchoff: add_restart_in_files: fesom_raw_restart_info: fesom_raw_restart_info fesom_raw_restart: fesom_raw_restart + fesom_bin_restart_info: fesom_bin_restart_info + fesom_bin_restart: fesom_bin_restart @@ -329,15 +349,6 @@ config_sources: io: "${namelist_dir}/namelist.io" diag: "${namelist_dir}/namelist.diag" -compiletime_environment_changes: - add_export_vars: - taken2from: fesom2_compile - -runtime_environment_changes: - add_export_vars: - takenfrom: fesom2_run - taken2from: fesom2_ru - config_in_work: config: "namelist.config" forcing: "namelist.forcing" diff --git a/configs/components/fesom/fesom-2.1.yaml b/configs/components/fesom/fesom-2.1.yaml index 99ac50cdc..9ecf12945 100644 --- a/configs/components/fesom/fesom-2.1.yaml +++ b/configs/components/fesom/fesom-2.1.yaml @@ -33,64 +33,20 @@ choose_version: 2.1-wiso: branch: wiso wiso_code: true - 2.1-recom: - branch: awiesm2-recom-wiso-mass # MA: We will need a new branch for Martin Butzin changes - wiso_code: true - git-repository: - - https://gitlab.dkrz.de/FESOM/fesom2.git - 2.1-recom-par_tracers: # MA: for Kai testing ESM-Tools in Levante - branch: feature/par_tracers + 2.1-recom: # kh 13.04.22 for testing FESOM-REcoM MPI based tracer loop parallelization with ESM-Tools in Levante + branch: awiesm2-recom-mpi # YY: merged with awiesm2-recom-wiso-mass git-repository: - https://gitlab.dkrz.de/FESOM/fesom2.git - destination: fesom-2.1-recom-par_tracers - - 2.1-recom-par_tracers_mpi: # kh 13.04.22 for testing FESOM-REcoM MPI based tracer loop parallelization with ESM-Tools in Levante - branch: awiesm2-recom-parallel - git-repository: - - https://gitlab.dkrz.de/FESOM/fesom2.git - destination: fesom-2.1-recom-par_tracers_mpi -# kh 08.03.22 todo: merge conflict (if enabled) -# include_models: -# - recom -# YY: 29.04.22 to compile wiso code wiso_code: true - -# MA: changes specific to PAR-TRACERS go here so they don't destroy other working versions of FESOM-2.1) -# TODO: remove this block when PAR-TRACERS is generalized! -par_tracers: "$(( 'par_tracers' in '${fesom.version}' ))" -choose_fesom.par_tracers: - True: - namelist_dir: "${model_dir}/config/" - # kh 21.02.22 use uppercase here - forcing_data_dir: "${pool_dir}/FORCING/" - # kh 21.02.22 - asforcing: CORE2 - # kh 21.02.22 temporary disabled to get fesom-2.1-recom-par_tracers running on levante - remove_fesom.namelists: [namelist.cvmix, namelist.icepack] - # kh 14.04.22 last used for core2 resolution on levante - # kh 19.04.22 disable for haralds's tests - nproc: 1024 - # kh 19.04.22 temporary disabled to get fesom-2.1-recom-par_tracers_mpi running on levante - remove_fesom.namelist_changes.namelist.forcing.nam_sbc: [ - nm_xwind_file, nm_ywind_file, nm_humi_file, nm_qsr_file, nm_qlw_file, - nm_tair_file, nm_prec_file, nm_snow_file, nm_mslp_file, nm_runoff_file, - nm_sss_data_file] - # kh 21.02.22 temporary disabled to get fesom-2.1-recom-par_tracers running on levante - remove_fesom.config_files: [cvmix, icepack] - # kh 21.02.22 these entries are required in combination with the corresponding entries in "config_sources:" to copy/use the defaults like namelist.recom, ... - add_config_files: - recom: recom - io.recom.ciso: io.recom.ciso - # kh 21.02.22 these entries are required in combination with the corresponding entriesin "config_files:" to copy/use the defaults like namelist.recom, ... - add_config_sources: - recom: "${namelist_dir}/namelist.recom" - io.recom.ciso: "${namelist_dir}/namelist.io.recom.ciso" -#-----------END OF the SPECIAL CHANGES FOR FESOM-PAR-TRACERS + namelist_dir: "${model_dir}/config/" + asforcing: CORE2 + nproc: 1024 destination: "fesom-2.1" install_bins: bin/fesom.x git-repository: - https://github.com/FESOM/fesom2.git +contact: "dmitry.sidorenko(at)awi.de, nikolay.koldunov(at)awi.de, miguel.andres-martinez(at)awi.de, paul.gierz(at)awi.de" restart_rate: "12" @@ -128,6 +84,9 @@ choose_computer.name: climate_data_dir: "${pool_dir}/FESOM2/INITIAL/phc3.0/" forcing_data_dir: "${pool_dir}/FESOM2/FORCING/" mesh_base_dir: "${pool_dir}/FESOM2/MESHES_FESOM2.1/" + albedo: + climate_data_dir: "${pool_dir}/FESOM/hydrography/" + mesh_base_dir: "${pool_dir}/FESOM/meshes_default/" setup_dir: "${model_dir}" bin_dir: "${setup_dir}/bin" @@ -164,19 +123,39 @@ choose_resolution: nx: 3140 mesh_dir: "${fesom.mesh_base_dir}/pi/" nproc: 4 +# YY: add LGM with glac1d_m1 resolution + LGM: + nx: 95239 + mesh_dir: "/home/a/a270064/bb1029/inputs/mesh_glac1d_m1_512/" + nproc: 1024 restart_in_files: oce_restart: oce_restart ice_restart: ice_restart -restart_in_in_workdir: + par_oce_restart: par_oce_restart + par_ice_restart: par_ice_restart + +restart_in_in_work: oce_restart: fesom.${parent_date!syear}.oce.restart.nc ice_restart: fesom.${parent_date!syear}.ice.restart.nc + par_oce_restart: fesom.${parent_date!syear}.oce.restart/*.nc + par_ice_restart: fesom.${parent_date!syear}.ice.restart/*.nc + fesom_raw_restart_info: fesom_raw_restart/*.info + fesom_raw_restart: fesom_raw_restart/np${nproc}/*.dump + fesom_bin_restart_info: fesom_bin_restart/*.info + fesom_bin_restart: fesom_bin_restart/np${nproc}/* wiso_restart: fesom.${parent_date!syear}.wiso.restart.nc icb_restart: iceberg.restart #.${parent_date!syear!month} icb_restart_ISM: iceberg.restart.ISM restart_in_sources: oce_restart: fesom.${parent_date!syear}.oce.restart.nc ice_restart: fesom.${parent_date!syear}.ice.restart.nc + par_oce_restart: fesom.${parent_date!syear}.oce.restart/*.nc + par_ice_restart: fesom.${parent_date!syear}.ice.restart/*.nc + fesom_raw_restart_info: fesom_raw_restart/*.info + fesom_raw_restart: fesom_raw_restart/np${nproc}/*.dump + fesom_bin_restart_info: fesom_bin_restart/*.info + fesom_bin_restart: fesom_bin_restart/np${nproc}/* wiso_restart: fesom.${parent_date!syear}.wiso.restart.nc icb_restart: iceberg.restart #.${parent_date!syear!month} icb_restart_ISM: iceberg.restart.ISM @@ -184,15 +163,34 @@ restart_in_sources: restart_out_files: oce_restart: oce_restart ice_restart: ice_restart -restart_out_in_workdir: + par_oce_restart: par_oce_restart + par_ice_restart: par_ice_restart + fesom_raw_restart_info: fesom_raw_restart_info + fesom_raw_restart: fesom_raw_restart + fesom_bin_restart_info: fesom_bin_restart_info + fesom_bin_restart: fesom_bin_restart + +restart_out_in_work: oce_restart: fesom.${end_date!syear}.oce.restart.nc ice_restart: fesom.${end_date!syear}.ice.restart.nc + par_oce_restart: fesom.${end_date!syear}.oce.restart/*.nc + par_ice_restart: fesom.${end_date!syear}.ice.restart/*.nc + fesom_raw_restart_info: fesom_raw_restart/*.info + fesom_raw_restart: fesom_raw_restart/np${nproc}/*.dump + fesom_bin_restart_info: fesom_bin_restart/*.info + fesom_bin_restart: fesom_bin_restart/np${nproc}/* wiso_restart: fesom.${end_date!syear}.wiso.restart.nc icb_restart: iceberg.restart #.${parent_date!syear} icb_restart_ISM: iceberg.restart.ISM restart_out_sources: oce_restart: fesom.${end_date!syear}.oce.restart.nc ice_restart: fesom.${end_date!syear}.ice.restart.nc + par_oce_restart: fesom.${end_date!syear}.oce.restart/*.nc + par_ice_restart: fesom.${end_date!syear}.ice.restart/*.nc + fesom_raw_restart_info: fesom_raw_restart/*.info + fesom_raw_restart: fesom_raw_restart/np${nproc}/*.dump + fesom_bin_restart_info: fesom_bin_restart/*.info + fesom_bin_restart: fesom_bin_restart/np${nproc}/* wiso_restart: fesom.${end_date!syear}.wiso.restart.nc icb_restart: iceberg.restart #.${parent_date!syear} icb_restart_ISM: iceberg.restart.ISM @@ -283,6 +281,23 @@ log_sources: clock: fesom.clock mesh_diag: fesom.mesh.diag.nc +file_movements: + fesom_raw_restart_in: + all_directions: move + fesom_raw_restart_out: + all_directions: move + fesom_raw_restart_info_in: + all_directions: move + fesom_raw_restart_info_out: + all_directions: move + fesom_bin_restart_in: + all_directions: move + fesom_bin_restart_out: + all_directions: move + fesom_bin_restart_info_in: + all_directions: move + fesom_bin_restart_info_out: + all_directions: move # Is it a branchoff experiment? branchoff: "$(( ${lresume} and ${general.run_number}==1 ))" @@ -295,6 +310,12 @@ choose_branchoff: false: daynew: "${initial_date!sdoy}" yearnew: "${initial_date!syear}" + add_restart_in_files: + fesom_raw_restart_info: fesom_raw_restart_info + fesom_raw_restart: fesom_raw_restart + fesom_bin_restart_info: fesom_bin_restart_info + fesom_bin_restart: fesom_bin_restart + namelist_changes: @@ -443,9 +464,6 @@ compiletime_environment_changes: - "load netCDF-Fortran/4.4.5" runtime_environment_changes: - add_export_vars: - takenfrom: fesom2_run - taken2from: fesom2_ru choose_computer.name: juwels: add_module_actions: diff --git a/configs/components/fesom/fesom.yaml b/configs/components/fesom/fesom.yaml index 8c8f12d63..30148d4c7 100644 --- a/configs/components/fesom/fesom.yaml +++ b/configs/components/fesom/fesom.yaml @@ -61,6 +61,7 @@ git-repository: https://gitlab.dkrz.de/modular_esm/fesom-1.4.git install_bins: bin/fesom clean_command: ${defaults.clean_command} comp_command: mkdir -p build; cd build; cmake ..; make install +contact: "dmitry.sidorenko(at)awi.de, nikolay.koldunov(at)awi.de, miguel.andres-martinez(at)awi.de, paul.gierz(at)awi.de" metadata: Institute: Alfred Wegener Institute for Polar and Marine Research (AWI) @@ -126,11 +127,11 @@ executable: fesom choose_resolution: CORE2: nx: 126859 - mesh_dir: "${pool_dir}/meshes_default/core/" + mesh_dir: "${fesom.mesh_base_dir}/core/" nproc: 288 GLOB: nx: 830305 - mesh_dir: "${pool_dir}/meshes_default/glob/" + mesh_dir: "${fesom.mesh_base_dir}/glob/" GLOB_rmstep: nx: 830305 mesh_dir: "/work/ba1150/a270147/meshes/" @@ -142,12 +143,12 @@ choose_resolution: mesh_dir: "${pool_dir}/meshes/mesh_ref/" BOLD: nx: 1306775 - mesh_dir: "${pool_dir}/meshes_default/bold/" + mesh_dir: "${fesom.mesh_base_dir}/bold/" fArc: nx: 638387 PI-GRID: nx: 3140 - mesh_dir: "${pool_dir}/meshes_default/pi-grid/" + mesh_dir: "${fesom.mesh_base_dir}/pi-grid/" CAVCORE2: nx: 72411 @@ -445,29 +446,33 @@ ignore_sources: gf: goodfile chloro: Chl_Sweeney.dat -compiletime_environment_changes: - add_export_vars: - takenfrom: fesom1 choose_computer.name: - mistral: - add_compiletime_environment_changes: - add_module_actions: - - "unload gcc" - - "load gcc/4.8.2" + ollie: + pool_dir: "${computer.pool_directories.pool}/FESOM/" + mesh_base_dir: "${pool_dir}/meshes_default/" blogin: - add_compiletime_environment_changes: - add_export_vars: - - "NETCDF_DIR=/sw/dataformats/netcdf/intel.18/4.7.3/skl/" - - "LD_LIBRARY_PATH=$NETCDF_DIR/lib/:$LD_LIBRARY_PATH" - - "NETCDF_CXX_INCLUDE_DIRECTORIES=$NETCDF_DIR/include" - - "NETCDF_CXX_LIBRARIES=$NETCDF_DIR/lib" + mesh_base_dir: "${pool_dir}/FESOM1/MESHES/" + glogin: + mesh_base_dir: "${pool_dir}/FESOM1/MESHES/" levante: + pool_dir: "${computer.pool_directories.pool}/AWICM/FESOM1/" + mesh_base_dir: "${pool_dir}/MESHES/" add_compiletime_environment_changes: add_export_vars: NETCDF_DIR: ${computer.netcdf_cxx_root} NETCDF_CXX_INCLUDE_DIRECTORIES: ${computer.netcdf_cxx_root}/include NETCDF_CXX_LIBRARIES: ${computer.netcdf_cxx_root}/lib LD_LIBRARY_PATH[(10)]: $NETCDF_DIR/lib/:$LD_LIBRARY_PATH + albedo: + pool_dir: "${computer.pool_directories.pool}/FESOM/" + mesh_base_dir: "${pool_dir}/meshes_default/" + +environment_changes: + choose_computer.name: + blogin: + iolibraries: system_libs + glogin: + iolibraries: system_libs coupling_fields: sst_feom: diff --git a/configs/components/fesom_mesh_part/fesom_mesh_part-1.4.yaml b/configs/components/fesom_mesh_part/fesom_mesh_part-1.4.yaml index 6fbf964a1..99bdda9eb 100644 --- a/configs/components/fesom_mesh_part/fesom_mesh_part-1.4.yaml +++ b/configs/components/fesom_mesh_part/fesom_mesh_part-1.4.yaml @@ -11,6 +11,7 @@ git-repository: https://gitlab.dkrz.de/modular_esm/fesom-1.4.git install_bins: fesom_mesh_partitioning/build/fesom_ini comp_command: cd fesom_mesh_partitioning; mkdir build -p; cd build; cmake ..; make -j `nproc --all` clean_command: rm -rf bin/fesom_ini fesom_mesh_partitioning/build mesh_part/CMakeCache.txt +contact: "dmitry.sidorenko(at)awi.de, nikolay.koldunov(at)awi.de, miguel.andres-martinez(at)awi.de, paul.gierz(at)awi.de" diff --git a/configs/components/fesom_mesh_part/fesom_mesh_part-2.0.yaml b/configs/components/fesom_mesh_part/fesom_mesh_part-2.0.yaml index 625845041..f550306c7 100644 --- a/configs/components/fesom_mesh_part/fesom_mesh_part-2.0.yaml +++ b/configs/components/fesom_mesh_part/fesom_mesh_part-2.0.yaml @@ -14,6 +14,7 @@ git-repository: install_bins: mesh_part/build/fesom_ini comp_command: cd mesh_part; mkdir build -p; cd build; cmake ..; make -j `nproc --all` clean_command: rm -rf bin/fesom.x.ini mesh_part/build mesh_part/CMakeCache.txt +contact: "dmitry.sidorenko(at)awi.de, nikolay.koldunov(at)awi.de, miguel.andres-martinez(at)awi.de, paul.gierz(at)awi.de" climate_data_dir: "${pool_dir}/hydrography/" diff --git a/configs/components/fesom_mesh_part/fesom_mesh_part-2.1.yaml b/configs/components/fesom_mesh_part/fesom_mesh_part-2.1.yaml index 4143c78d8..b8313928f 100644 --- a/configs/components/fesom_mesh_part/fesom_mesh_part-2.1.yaml +++ b/configs/components/fesom_mesh_part/fesom_mesh_part-2.1.yaml @@ -13,6 +13,7 @@ git-repository: install_bins: mesh_part/build/fesom_ini comp_command: cd mesh_part; mkdir build -p; cd build; cmake ..; make -j `nproc --all` clean_command: rm -rf bin/fesom.x.ini mesh_part/build mesh_part/CMakeCache.txt +contact: "dmitry.sidorenko(at)awi.de, nikolay.koldunov(at)awi.de, miguel.andres-martinez(at)awi.de, paul.gierz(at)awi.de" climate_data_dir: "${pool_dir}/hydrography/" diff --git a/configs/components/icon/icon.yaml b/configs/components/icon/icon.yaml index d006d7aed..31be3afc0 100644 --- a/configs/components/icon/icon.yaml +++ b/configs/components/icon/icon.yaml @@ -6,6 +6,7 @@ standalone_model: True repository: https://gitlab.dkrz.de/modular_esm/ICON-ATM.git # git-repository: ${repository} git-repository: https://gitlab.dkrz.de/modular_esm/ICON-ATM.git +contact: "miguel.andres-martinez(at)awi.de, paul.gierz(at)awi.de" #description: | # The ICON atmosphere model, major version 2 diff --git a/configs/components/jsbach/jsbach.datasets.yaml b/configs/components/jsbach/jsbach.datasets.yaml index 62289888b..19dc13ba3 100644 --- a/configs/components/jsbach/jsbach.datasets.yaml +++ b/configs/components/jsbach/jsbach.datasets.yaml @@ -48,10 +48,10 @@ forcing_sources: Ndepo_ssp: # These files are 12-monthly; see README.md in Ndepo/ directory # NOTE: ssp370 might be missing in this directory - "${input_dir_awi}/${echam.resolution}/Ndepo/${echam.scenario}/${echam.resolution}_ndepo.input4MIPs_surfaceFluxes_ScenarioMIP-NCAR-CCMI-${echam.scenario}_@YEAR@.nc": + "${input_dir_couple}/${Ndepo_path}@YEAR@.nc": from: 1850 to: 2099 - "${input_dir_awi}/${echam.resolution}/Ndepo/${echam.scenario}/${echam.resolution}_ndepo.input4MIPs_surfaceFluxes_ScenarioMIP-NCAR-CCMI-${echam.scenario}_2099.nc": + "${input_dir_couple}/${Ndepo_path}2099.nc": from: 2100 to: 2101 @@ -84,7 +84,7 @@ choose_dataset: "popdens": "${input_dir}/${echam.resolution}/spitfire/population_density_HYDE_${echam.resolution}.nc" # ndecades # Files used by AWI-CM1 and AWI-CM1-REcoM in Levante for ssp scenarios "popdens_ssp": - "${input_dir_awi}/${echam.resolution}/spitfire/population_density_${ssp_num}_${echam.resolution}.nc": # see README.md in this dir + "${input_dir_couple}/${echam.resolution}/spitfire/population_density_${ssp_num}_${echam.resolution}.nc": # see README.md in this dir from: 1850 to: 2100 "cover_fract_HIST": @@ -123,7 +123,7 @@ choose_dataset: "Ndepo_hist_scenario": # TODO: pool on Levante seems to be broken currently. - # There are no yearly Ndepo files. ${input_dir_awi} + # There are no yearly Ndepo files. ${input_dir_couple} # contains the yearly files "${input_dir}/${echam.resolution}/ndepo/Ndepo.1850.nc": to: 1850 diff --git a/configs/components/jsbach/jsbach.yaml b/configs/components/jsbach/jsbach.yaml index 72cd38e03..fb09fd099 100644 --- a/configs/components/jsbach/jsbach.yaml +++ b/configs/components/jsbach/jsbach.yaml @@ -18,14 +18,15 @@ input_dir: "${pool_dir}/input/${dataset}" adj_input_dir: "${input_dir}/${echam.resolution}" cover_fract_dir: "${input_dir}/${echam.resolution}/land_use_maps/" -pool_dir_awi: "${computer.pool_directories.pool}/AWICM/JSBACH" -input_dir_awi: "${pool_dir_awi}/input/${dataset}" +pool_dir_couple: "${computer.pool_directories.pool}/AWICM/JSBACH" +input_dir_couple: "${pool_dir_couple}/input/${dataset}" dynamic_vegetations: False version: "3.20" dataset: r0009 -scenario_type: ${echam.scenario} +scenario: ${echam.scenario} +scenario_type: ${scenario} config_sources: 'namelist.jsbach': "${namelist_dir}/namelist.jsbach" @@ -87,23 +88,6 @@ choose_version: lightning: lightning popdens: popdens - # SSP scenarios share common paths. They are grouped under cmip6 and - # further options are given under `choose_scenario_type` section - ssp585: - scenario_type: cmip6 - - ssp370: - scenario_type: cmip6 - - ssp126: - scenario_type: cmip6 - - ssp245: - scenario_type: cmip6 - - ssp534os: - scenario_type: cmip6 - cmip6hist: scenario_type: cmip6 @@ -112,13 +96,13 @@ choose_version: dataset: r0010 choose_dynamic_vegetations: true: - namelist_dir: "${general.esm_namelist_dir}/jsbach/${version}/${echam.scenario}/dynveg" + namelist_dir: "${general.esm_namelist_dir}/jsbach/${version}/${echam.scenario_type}/dynveg" dynveg: "_dynveg" jsbachnc_file_ending: "${dynveg_file_ending}" false: - namelist_dir: "${general.esm_namelist_dir}/jsbach/${version}/${echam.scenario}/no_dynveg" + namelist_dir: "${general.esm_namelist_dir}/jsbach/${version}/${echam.scenario_type}/no_dynveg" jsbachnc_file_ending: "${no_dynveg_file_ending}" - dynveg: "_no_dynveg" + dynveg: "_no-dynveg" choose_echam.scenario: PI-CTRL: add_input_files: @@ -199,23 +183,6 @@ choose_version: #lightning: lightning #popdens: popdens - # SSP scenarios share common paths. They are grouped under cmip6 and - # further options are given under `choose_scenario_type` section - ssp126: - scenario_type: cmip6 - - ssp245: - scenario_type: cmip6 - - ssp370: - scenario_type: cmip6 - - ssp534os: - scenario_type: cmip6 - - ssp585: - scenario_type: cmip6 - cmip6hist: scenario_type: cmip6 @@ -299,25 +266,42 @@ choose_version: LU_trans: LU_trans_none # common options for scenarios, eg. CMIP6 +Ndepo_cmip6: Ndepo_hist_scenario +Ndepo_path: "" +popdens_cmip6: popdens +cover_fract_cmip6: cover_fract.@YEAR@.nc + choose_scenario_type: cmip6: + Ndepo_path: "${echam.resolution}/Ndepo/${echam.scenario}/${echam.resolution}_ndepo.input4MIPs_surfaceFluxes_ScenarioMIP-NCAR-CCMI-${echam.scenario}_" add_input_files: jsbach: jsbach_1850 forcing_files: LU: LU_hist_scenario LU_trans: LU_trans_hist_scenario - Ndepo: Ndepo_hist_scenario + Ndepo: ${Ndepo_cmip6} a_nd_file: a_nd_file lightning: lightning - popdens: popdens + popdens: ${popdens_cmip6} + cover_fract: ${cover_fract_cmip6} + # For ssp scenarios find the pathway first 4 characters -scenario_is_ssp: "$(( 'ssp' in '${scenario}' ))" +scenario_is_ssp: "$(( 'ssp' in '${echam.scenario}' ))" choose_scenario_is_ssp: True: ssp_num: "$(( '${scenario}'[:4] ))" + # SSP scenarios share common paths. They are grouped under cmip6 and + # further options are given under `choose_scenario_type` section + scenario_type: cmip6 + Ndepo_cmip6: Ndepo_ssp + popdens_cmip6: popdens_ssp + cover_fract_cmip6: cover_fract_ssp + Ndepo_sufix: "_${echam.scenario}" + False: ssp_num: null + Ndepo_sufix: "" choose_echam.with_wiso: True: diff --git a/configs/components/mpiom/mpiom.yaml b/configs/components/mpiom/mpiom.yaml index 6f77bc1be..49b66a8f4 100644 --- a/configs/components/mpiom/mpiom.yaml +++ b/configs/components/mpiom/mpiom.yaml @@ -19,6 +19,7 @@ clean_command: make clean comp_command: make -j `nproc --all` conf_command: ./configure --prefix=${model_dir} --disable-mh-file --enable-HAMOCC --with-mpi=intelmpi git-repository: https://gitlab.dkrz.de/modular_esm/mpiom.git +contact: "miguel.andres-martinez(at)awi.de, paul.gierz(at)awi.de" metadata: Institute: MPI-Met diff --git a/configs/components/nemo/nemo.yaml b/configs/components/nemo/nemo.yaml index 200867daa..b3364ad33 100644 --- a/configs/components/nemo/nemo.yaml +++ b/configs/components/nemo/nemo.yaml @@ -6,20 +6,60 @@ model: nemo generation: "3.6" executable: oceanx version: GYRE_XIOS +reference_expid: EXP00 include_models: - xios +# compilation settings +# +clean_command: cp cfg.inc ../cfg.txt; cd ../ + ./makenemo -n ${nemo.version} -m ${archfile} clean; + cd .. + +comp_command: export NEMO_TOPLEVEL=${model_dir}/../../ ; cp cfg.inc ../cfg.txt ; cd ../ ; + ./makenemo -n ${version} -m ${archfile} -j 24; cp -p ${version}/BLD/bin/nemo.exe + ${version}/BLD/bin/oceanx ; + cd .. + +archfile: ESMTOOLS_generic_oasis_intel + +destination: ${version} +install_bins: BLD/bin/oceanx + +contact: "swahl(at)geomar.de" + +############################################################# +# file handling settings +file_movements: + default: + all_directions: copy + config: + init_to_exp: copy + exp_to_run: link + run_to_work: link + forcing: + all_directions: link + log: + all_directions: copy + input: + all_directions: link + outdata: + all_directions: move + runoff_method: "old" available_versions: - ORCA05_LIM2_KCM_AOW +- ORCA05_LIM2_KCM_AOW_autotools - ORCA05_LIM2_KCM_AOW_FS - ORCA05_LIM2_FOCI_AGRIF_AOW - ORCA05_LIM2_KCM_AGRIF_OASISMCT4 - ORCA05_LIM2_KCM_AOW_FS_OASISMCT4 +- ORCA12_LIM2_KCM_AOW_FS_OASISMCT4 - ORCA05_LIM2_NEMO_JRA55_test - GYRE_XIOS - GYRE_PISCES +- 'ORCA05.z75.ICE.JRA' choose_version: @@ -27,13 +67,39 @@ choose_version: requires: - xios-2.5_r1910_ogcm - nemobasemodel-3.6ogcm_test + archfile: ESMTOOLS_generic_intel resolution: R4 GYRE_PISCES: + # this should work but it does not if you run + # the setting below are ignored + # if set on the root level of this file, and infinite loop + # occurs if esm_master comp-foci-default/nemo is executed + # the enviornment_changes thing seems to be a mess, + # see also comment in foci.yaml section echam: + # manually set compiler_mpi in glogin.yaml / blogin.yaml for now + #environment_changes: +# choose_computer.name: +# glogin: +# compiler_mpi: intel2019_impi2019_nemo4 +# iolibraries: geomar_libs +# blogin: +# compiler_mpi: intel2019_impi2019_nemo4 +# iolibraries: geomar_libs requires: - xios-trunk - nemobasemodel-4.2.x + + # TODO: include arch repo as separate component + comp_command: export NEMO_TOPLEVEL=${model_dir} ; export XIOS_TOPLEVEL=${model_dir}/../xios; + test -d arch/GEOMAR || git clone https://git.geomar.de/foci/src/nemo_arch.git arch/GEOMAR; + ./makenemo -n ${version} -m ${archfile} -r ${version} -j 24 ; cp -p cfgs/${version}/BLD/bin/nemo.exe cfgs/${nemo.version}/BLD/bin/oceanx + clean_command: ./makenemo -n ${nemo.version} -m ${archfile} -r ${nemo.version} clean + archfile: ESMTOOLS_generic_intel + destination: nemo-${nemo.version} + install_bins: cfgs/${nemo.version}/BLD/bin/oceanx + namelist_dir: ${nemo.model_dir}/cfgs/${nemo.version}/EXPREF/ use_tracer: true @@ -44,12 +110,192 @@ choose_version: namelist_pisces_ref: ${nemo.model_dir}/cfgs/SHARED/namelist_pisces_ref namelist_pisces_cfg: ${nemo.model_dir}/cfgs/${nemo.version}/EXPREF/namelist_pisces_cfg add_input_files: + namelist_ref: namelist_ref namelist_top_ref: namelist_top_ref namelist_pisces_ref: namelist_pisces_ref namelist_pisces_cfg: namelist_pisces_cfg generation: "4.2" resolution: "R4" + + 'ORCA05.z75.ICE.JRA': + # uncoupled test setup from Markus + # will be renamed once the name of the config is available + # from Markus Scheinert + # version: 'ORCA05.z75.ICE.JRA-KMST001' + + # this should work but it does not if you run + # the setting below are ignored + # if set on the root level of this file, and infinite loop + # occurs if esm_master comp-foci-default/nemo is executed + # the enviornment_changes thing seems to be a mess, + # see also comment in foci.yaml section echam: + # manually set compiler_mpi in glogin.yaml / blogin.yaml for now + #environment_changes: +# choose_computer.name: +# glogin: +# compiler_mpi: intel2019_impi2019_nemo4 +# iolibraries: geomar_libs +# blogin: +# compiler_mpi: intel2019_impi2019_nemo4 +# iolibraries: geomar_libs + # TODO: add NEMO config once available from Markus + requires: + - xios-trunk + - nemobasemodel-4.2.0 + + branch: esm-tools_v4.2.0 + reference_expid: KSWT001 + clone_destination: nemo-${nemo.version}/cfgs/${nemo.version} + git-repository: https://git.geomar.de/mscheinert/${nemo.version}-KMST001.git + + # TODO: include arch repo as separate component + comp_command: export NEMO_TOPLEVEL=${model_dir} ; export XIOS_TOPLEVEL=${model_dir}/../xios; + test -d arch/GEOMAR || git clone https://git.geomar.de/foci/src/nemo_arch.git arch/GEOMAR; + cp cfgs/${nemo.version}/work_cfgs.inc cfgs/ref_cfgs.txt; + ./makenemo -n ${version} -m ${archfile} -r ${version} -j 24 ; + cp -p cfgs/${version}/BLD/bin/nemo.exe cfgs/${version}/BLD/bin/oceanx + clean_command: ./makenemo -n ${nemo.version} -m ${archfile} -r ${nemo.version} clean + archfile: ESMTOOLS_generic_intel + destination: nemo-${nemo.version} + install_bins: cfgs/${nemo.version}/BLD/bin/oceanx + + namelist_dir: ${nemo.model_dir}/cfgs/${nemo.version}/${reference_expid}/ + + generation: "4.2" + resolution: ORCA05 + use_tracer: false + nn_leapy: 0 + free_surface: nonlinear + input_dir: ${pool_dir}/NEMO4_${resolution}/input + + # override hardcoded path to runoff forcing + add_namelist_changes: + namelist_cfg: + namsbc_blk: + cn_dir: "./" + + add_input_sources: + namelist_ref: ${nemo.model_dir}/cfgs/SHARED/namelist_ref + namelist_ice_ref: ${nemo.model_dir}/cfgs/SHARED/namelist_ice_ref + add_input_files: + namelist_ref: namelist_ref + namelist_ice_ref: namelist_ice_ref + + # NEMO ORCA05 4.2.x input files + bathy_meter_orca05_nemo4: bathy_meter_orca05_nemo4 + coordinates_orca05_nemo4: bathy_meter_orca05_nemo4 + bfr_coef_orca05_nemo4: bfr_coef_orca05_nemo4 + subbasins_orca05_nemo4: subbasins_orca05_nemo4 + domain_cfg_orca05_nemo4: domain_cfg_orca05_nemo4 + + reshape_jra_orca05_nemo4_bicub: reshape_jra_orca05_nemo4_bicub + reshape_jra_orca05_nemo4_bilin: reshape_jra_orca05_nemo4_bilin + + # inital data + data_tem_orca05_nemo4: data_tem_orca05_nemo4 + data_sal_orca05_nemo4: data_sal_orca05_nemo4 + sss_orca05_nemo4: sss_orca05_nemo4 + runoff_orca05_nemo4: runoff_orca05_nemo4 + + # NEMO eORCA025 4.2.x input files + #bfr_coef: bfr_coef + #domain_cfg_ExclClosedSeas: domain_cfg_ExclClosedSeas + #domain_cfg_InclClosedSeas: + # TODO: this file still needs to be generated by Markus + #domain_cfg_CaspianSea: domain_cfg_CaspianSea + # we probably never need this one + #domain_cfg_UKmasks: domain_cfg_UKmasks + #ghflux_v2.0: ghflux_v2.0 + #reshape_ghflux2: reshape_ghflux2 + #reshape_jra55do_bicub: reshape_jra55do_bicub + #reshape_jra55do_bilin: reshape_jra55do_bilin + #subbasins_eORCA025: subbasins_eORCA025 + #sn_tem_woa13_omip_eORCA025: sn_tem_woa13_omip_eORCA025 + #sn_sal_woa13_omip_eORCA025: sn_sal_woa13_omip_eORCA025 + + # TODO: add correct links in work dir if required + input_in_work: + # NEMO ORCA05 4.2.x input files + bathy_meter_orca05_nemo4: bathy_meter.nc + coordinates_orca05_nemo4: coordinates.nc + coef-G70: bfr_coef.nc + bfr_coef_orca05_nemo4: bfr_coef.nc + subbasins_orca05_nemo4: subbasins.nc + #domain_cfg_orca05_nemo4: domain_cfg__ORCA05_zps_noclo.nc + + #reshape_jra_orca05_nemo4_bicub: + #reshape_jra_orca05_nemo4_bilin: + + # inital data + data_tem_orca05_nemo4: data_tem.nc + data_sal_orca05_nemo4: data_sal.nc + sss_orca05_nemo4: SSS.nc + runoff_orca05_nemo4: RUNOFF.nc + + # surface forcing for uncoupled NEMO4 + forcing_files: + # forcing data + sn_wndi: sn_wndi + sn_wndj: sn_wndj + sn_qsr: sn_qsr + sn_qlw: sn_qlw + sn_tair: sn_tair + sn_humi: sn_humi + sn_prec: sn_prec + sn_snow: sn_snow + #sn_rnf: sn_rnf + + forcing_in_work: + sn_wndi: "uas-drowned_JRA55do-1.5.0_y@YEAR@.nc" + sn_wndj: "vas-drowned_JRA55do-1.5.0_y@YEAR@.nc" + sn_qsr: "rsds-drowned_JRA55do-1.5.0_y@YEAR@.nc" + sn_qlw: "rlds-drowned_JRA55do-1.5.0_y@YEAR@.nc" + sn_tair: "tas-drowned_JRA55do-1.5.0_y@YEAR@.nc" + sn_humi: "huss-drowned_JRA55do-1.5.0_y@YEAR@.nc" + sn_prec: "prra_JRA55do-1.5.0_y@YEAR@.nc" + sn_snow: "prsn_JRA55do-1.5.0_y@YEAR@.nc" + #sn_rnf: "sorunoff_JRA55-do-1-4-0_gr_orca05_y@YEAR@.nc" + + forcing_sources: + # JRA55-do drowned forcing + sn_wndi: + "${jra55_forcing_dir}/uas-drowned_JRA55do-1.5.0_y@YEAR@.nc": + from: 1980 + to: 1984 + sn_wndj: + "${jra55_forcing_dir}/vas-drowned_JRA55do-1.5.0_y@YEAR@.nc": + from: 1980 + to: 1984 + sn_qsr: + "${jra55_forcing_dir}/rsds-drowned_JRA55do-1.5.0_y@YEAR@.nc": + from: 1980 + to: 1984 + sn_qlw: + "${jra55_forcing_dir}/rlds-drowned_JRA55do-1.5.0_y@YEAR@.nc": + from: 1980 + to: 1984 + sn_tair: + "${jra55_forcing_dir}/tas-drowned_JRA55do-1.5.0_y@YEAR@.nc": + from: 1980 + to: 1984 + sn_humi: + "${jra55_forcing_dir}/huss-drowned_JRA55do-1.5.0_y@YEAR@.nc": + from: 1980 + to: 1984 + sn_prec: + "${jra55_forcing_dir}/prra_JRA55do-1.5.0_y@YEAR@.nc": + from: 1980 + to: 1984 + sn_snow: + "${jra55_forcing_dir}/prsn_JRA55do-1.5.0_y@YEAR@.nc": + from: 1980 + to: 1984 + #sn_rnf: + # "${jra55_runoff_dir}/sorunoff_JRA55-do-1-4-0_gr_orca05_y@YEAR@.nc": + # from: 1980 + # to: 1984 + ORCA05_LIM2_FOCI_AGRIF_AOW: requires: @@ -70,6 +316,12 @@ choose_version: free_surface: linear add_input_files: + # reference namelists + namelist_ref: namelist_ref + namelist_ice_ref: namelist_ice_ref + # grids and coefficients + coordinates: coordinates + subbasins: subbasins # init and (if used) damping data sn_tem: sn_tem_levitus sn_sal: sn_sal_levitus @@ -104,12 +356,6 @@ choose_version: 1_namelist_ice_cfg: 1_namelist_ice_cfg 1_namelist_top_cfg: 1_namelist_top_cfg - add_restart_in_sources: - restart_in_nest: 1_${parent_expid}_${prevstep_formatted_nest}_restart*_${parent_date!syear!smonth!sday}_*.nc - - add_restart_out_sources: - restart_out_nest: 1_${expid}_${newstep_formatted_nest}_restart*_${end_date_m1!syear!smonth!sday}_*.nc - add_namelist_changes: 1_namelist_cfg: namrun: @@ -118,9 +364,9 @@ choose_version: nn_itend: ${newstep_nest} nn_date0: ${initial_date!syear!smonth!sday} # ${ini_date} cn_ocerst_in: ${parent_expid}_${prevstep_formatted_nest}_restart_${parent_date!syear!smonth!sday}${global_tag} - cn_ocerst_indir: '${work_dir}/' + cn_ocerst_indir: '${parent_restart_dir}/' cn_ocerst_out: restart_${end_date_m1!syear!smonth!sday} - cn_ocerst_outdir: '${work_dir}/' + cn_ocerst_outdir: '${experiment_restart_out_dir}/' nn_stock: ${newstep_nest} nn_leapy: ${nn_leapy} nn_rstctl: ${nn_rstctl} @@ -182,6 +428,12 @@ choose_version: free_surface: linear add_input_files: + # reference namelists + namelist_ref: namelist_ref + namelist_ice_ref: namelist_ice_ref + # grids and coefficients + coordinates: coordinates + subbasins: subbasins # init and (if used) damping data sn_tem: sn_tem_levitus sn_sal: sn_sal_levitus @@ -215,12 +467,6 @@ choose_version: 1_namelist_ice_cfg: 1_namelist_ice_cfg 1_namelist_top_cfg: 1_namelist_top_cfg - add_restart_in_sources: - restart_in_nest: 1_${parent_expid}_${prevstep_formatted_nest}_restart*_${parent_date!syear!smonth!sday}_*.nc - - add_restart_out_sources: - restart_out_nest: 1_${expid}_${newstep_formatted_nest}_restart*_${end_date_m1!syear!smonth!sday}_*.nc - add_namelist_changes: 1_namelist_cfg: namrun: @@ -229,9 +475,9 @@ choose_version: nn_itend: ${newstep_nest} nn_date0: ${initial_date!syear!smonth!sday} # ${ini_date} cn_ocerst_in: ${parent_expid}_${prevstep_formatted_nest}_restart_${parent_date!syear!smonth!sday}${global_tag} - cn_ocerst_indir: '${work_dir}/' + cn_ocerst_indir: '${parent_restart_dir}/' cn_ocerst_out: restart_${end_date_m1!syear!smonth!sday} - cn_ocerst_outdir: '${work_dir}/' + cn_ocerst_outdir: '${experiment_restart_out_dir}/' nn_stock: ${newstep_nest} nn_leapy: ${nn_leapy} nn_rstctl: ${nn_rstctl} @@ -301,6 +547,8 @@ choose_version: grid: agr1 "[[agr1_r_fields-->FIELD]]": grid: agr1r + "[[agr1_rc_fields-->FIELD]]": + grid: agr1 "[[agr2_t_fields-->FIELD]]": grid: agr2 @@ -313,11 +561,43 @@ choose_version: git-repository: https://git.geomar.de/foci/src/nemo_config/${nemo.version}.git add_input_files: + # reference namelists + namelist_ref: namelist_ref + namelist_ice_ref: namelist_ice_ref + # grids and coefficients + cn_batmeter: bathy_meter + coordinates: coordinates + subbasins: subbasins + coef-G70: coef-G70 # init and (if used) damping data sn_tem: sn_tem_levitus sn_sal: sn_sal_levitus ice_init: ice_init_kkg36f13h + + input_in_work: + ice_init: Ice_initialization.nc + namelist_ice_ref: namelist_ice_ref + + ORCA05_LIM2_KCM_AOW_autotools: + requires: + - nemobasemodel-3.6foci_autotools + branch: master_autotools + destination: nemo-${nemo.version}/CONFIG/${nemo.version} + git-repository: https://git.geomar.de/foci/src/nemo_config/ORCA05_LIM2_KCM_AOW.git + + add_input_files: + # reference namelists + namelist_ref: namelist_ref + namelist_ice_ref: namelist_ice_ref + # grids and coefficients cn_batmeter: bathy_meter + coordinates: coordinates + subbasins: subbasins + coef-G70: coef-G70 + # init and (if used) damping data + sn_tem: sn_tem_levitus + sn_sal: sn_sal_levitus + ice_init: ice_init_kkg36f13h input_in_work: ice_init: Ice_initialization.nc @@ -334,11 +614,18 @@ choose_version: free_surface: nonlinear add_input_files: + # reference namelists + namelist_ref: namelist_ref + namelist_ice_ref: namelist_ice_ref + # grids and coefficients + cn_batmeter: bathy_meter + coordinates: coordinates + subbasins: subbasins + coef-G70: coef-G70 # init and (if used) damping data sn_tem: sn_tem_levitus sn_sal: sn_sal_levitus ice_init: ice_init_kkg36f13h - cn_batmeter: bathy_meter input_in_work: ice_init: Ice_initialization.nc @@ -353,11 +640,18 @@ choose_version: git-repository: https://git.geomar.de/foci/src/nemo_config/ORCA05_LIM2_KCM_AOW.git add_input_files: + # reference namelists + namelist_ref: namelist_ref + namelist_ice_ref: namelist_ice_ref + # grids and coefficients + cn_batmeter: bathy_meter + coordinates: coordinates + subbasins: subbasins + coef-G70: coef-G70 # init and (if used) damping data sn_tem: sn_tem_levitus sn_sal: sn_sal_levitus ice_init: ice_init_kkg36f13h - cn_batmeter: bathy_meter input_in_work: ice_init: Ice_initialization.nc @@ -365,9 +659,6 @@ choose_version: ORCA05_LIM2_KCM_AOW_FS_OASISMCT4: requires: - # seb-wahl: workaround if used with OIFS which also uses XIOS which causes XIOS - # to be cloned and compiled twice, need to file an issue - #- xios-2.5_r1910 - nemobasemodel-3.6foci branch: esm-tools destination: nemo-${nemo.version}/CONFIG/${nemo.version} @@ -376,11 +667,18 @@ choose_version: free_surface: nonlinear add_input_files: + # reference namelists + namelist_ref: namelist_ref + namelist_ice_ref: namelist_ice_ref + # grids and coefficients + cn_batmeter: bathy_meter + coordinates: coordinates + subbasins: subbasins + coef-G70: coef-G70 # init and (if used) damping data sn_tem: sn_tem_levitus sn_sal: sn_sal_levitus ice_init: ice_init_kkg36f13h - cn_batmeter: bathy_meter input_in_work: ice_init: Ice_initialization.nc @@ -397,13 +695,71 @@ choose_version: # namelist_ref: ${nemo.model_dir}/cfgs/SHARED/namelist_ref # generation: "4.2" + ORCA12_LIM2_KCM_AOW_FS_OASISMCT4: + requires: + - nemobasemodel-3.6foci + branch: esm-tools + destination: nemo-${nemo.version}/CONFIG/${nemo.version} + git-repository: https://git.geomar.de/foci/src/nemo_config/${nemo.version}.git + + free_surface: nonlinear + + levels: L75 + + add_input_files: + # reference namelists + namelist_ref: namelist_ref + namelist_ice_ref: namelist_ice_ref + # grids and coefficients + cn_batmeter: bathy_meter + coordinates: coordinates + subbasins: subbasins + # init and (if used) damping data + sn_tem: sn_tem_EN4_ORCA12 + sn_sal: sn_sal_EN4_ORCA12 + ice_init: ice_init_orca12 + + input_in_work: + ice_init: Ice_initialization.nc + namelist_ice_ref: namelist_ice_ref + + add_namelist_changes: + namelist_cfg: + namcfg: + jperio: 4 # T-fold instead of F-fold + namtra_adv: + ln_traadv_tvd: '.false.' + ln_traadv_tvd_zts: '.true.' + namtra_ldf: + ln_traldf_grif: '.true.' + rn_aht_0: 125. + rn_aht_m: 125. + namdyn_adv: + ln_dynzad_zts: '.true.' + #namdyn_ldf: + # rn_ahm_0_blp: -2.4e10 + # rn_ahm_m_blp: -8.e9 + namsbc_rnf: + sn_cnf: ['rnf_cal_msk', 0, 'rnfmsk', .false., .true., 'yearly', '', '', ''] + cn_dir: './' + ln_rnf_mouth: '.true.' + rn_hrnf: 15. + rn_avt_rnf: 1e-3 + rn_rfact: 1.0 + + namelist_ice_cfg: + namicedyn: + ahi0: 200 # reduce horizontal eddy diffusivity coefficient for sea-ice [m2/s] + telast: 120 # timescale for elastic EVP waves + # NEMO standalone setup ORCA05_LIM2_NEMO_JRA55_test: requires: - xios-2.5_r1910_ogcm - nemobasemodel-3.6ogcm_test branch: master - destination: nemo-${nemo.version} + archfile: ESMTOOLS_generic_intel + #destination: nemo-${nemo.version} # clone destination is a workaround implemented into esm_master for the fact that # "destination" is used as both the target directory for a "git clone ... destination" # and the top level direcotory. @@ -414,6 +770,15 @@ choose_version: #git-repository: https://git.geomar.de/cmip6-omip/GEOMAR05.CORE-cycle6.git git-repository: https://git.geomar.de/foci/src/nemo_config/${nemo.version}.git + comp_command: export NEMO_TOPLEVEL=${model_dir} ; + if ! test -f ARCH/arch-${archfile}.fcm ; then cp CONFIG/${version}/EXP00/arch-${archfile}.fcm ARCH/; fi; + cd CONFIG ; + cp ${version}/cfg.inc cfg.txt; + ./makenemo -n ${version} -m ${archfile} -j 24 ; + cp -p ${version}/BLD/bin/nemo.exe ${version}/BLD/bin/oceanx ; cd ../ ; + + clean_command: cd CONFIG ; ./makenemo -n ${nemo.version} -m ${archfile} -r ${nemo.version} clean ; cd ../ + # override hardcoded path to runoff forcing add_namelist_changes: namelist_cfg: @@ -422,16 +787,13 @@ choose_version: add_input_files: # reference namelists - #namelist_ref: namelist_ref - #namelist_ice_ref: namelist_ice_ref - # TODO: do we need top namelist - #namelist_top_ref: namelist_top_ref - + namelist_ref: namelist_ref + namelist_ice_ref: namelist_ice_ref # grids and coefficients cn_batmeter: bathy_meter - #coordinates: coordinates - #subbasins: subbasins - #coef-G70: coef-G70 + coordinates: coordinates + subbasins: subbasins + coef-G70: coef-G70 reshape_jra_orca05_bicub: reshape_jra_orca05_bicub reshape_jra_orca05_bilin: reshape_jra_orca05_bilin @@ -521,10 +883,6 @@ choose_version: from: 1958 to: 1960 - -clean_command: echo Cleaning is handled by nemobasemodel.yaml; cd ../../ -comp_command: echo Compilation is handled by nemobasemodel.yaml - metadata: Organization: Nucleus for European Modelling of the Ocean Institute: IPSL @@ -541,6 +899,7 @@ metadata: unsure, please contact redmine... resolution: ORCA05 +levels: L46 time_step: 1800 jpni: 0 jpnj: 0 @@ -561,13 +920,14 @@ use_tracer_agrif: false use_lim2_agrif: false # calendar: -leapyear: True -nn_leapy: 1 +leapyear: False # Restart or initial run settings # values below will be set to false if lresume = true ln_tsd_init: true ln_limini: true +# in NEMO4.x limini is called ln_iceini +ln_iceini: ${ln_limini} ln_limini_agrif: false nn_msh: 1 ln_meshmask: true @@ -592,7 +952,7 @@ bin_dir: ${setup_dir}/bin agrif_dir: ${pool_dir}/AGRIF/agrif_${nest1} # forcing for uncoupled setups -jra55_forcing_dir: ${pool_dir}/NEMO_JRA55-do_drowned_test +jra55_forcing_dir: ${pool_dir}/JRA55-do/v1.5 jra55_runoff_dir: ${pool_dir}/NEMO_ORCA05_JRA_runoff_forcing # start_date_m1: $((${start_date} - ${time_step}seconds)) @@ -640,10 +1000,10 @@ namelist_changes: nn_it000: ${thisstep} nn_itend: ${newstep} nn_date0: ${initial_date!syear!smonth!sday} # ${ini_date} - cn_ocerst_in: ${parent_expid}_${prevstep_formatted}_restart_${parent_date!syear!smonth!sday}${global_tag} #${restart_in} - cn_ocerst_indir: '${work_dir}/' + cn_ocerst_in: ${parent_expid}_${prevstep_formatted}_restart_${parent_date!syear!smonth!sday}${global_tag} + cn_ocerst_indir: '${parent_restart_dir}/' cn_ocerst_out: restart_${end_date_m1!syear!smonth!sday} - cn_ocerst_outdir: '${work_dir}/' + cn_ocerst_outdir: '${experiment_restart_out_dir}/' nn_stock: ${newstep} nn_leapy: ${nn_leapy} nn_rstctl: ${nn_rstctl} @@ -668,6 +1028,13 @@ choose_generation: ln_closea: '.false.' namtsd: ln_tsd_dmp: ${ln_tsd_tradmp} + choose_free_surface: + # for linear we use the default (false), so no settings required + nonlinear: + add_namelist_changes: + namelist_cfg: + namdyn_hpg: + ln_hpg_sco: '.true.' "3.6": add_namelist_changes: namelist_cfg: @@ -679,28 +1046,28 @@ choose_generation: jpnij: ${nproc} namtsd: ln_tsd_tradmp: ${ln_tsd_tradmp} + choose_free_surface: + linear: + add_namelist_changes: + namelist_cfg: + namdyn_hpg: + ln_hpg_zps: '.true.' + ln_hpg_sco: '.false.' + ln_dynhpg_imp: '.true.' + nonlinear: + add_namelist_changes: + namelist_cfg: + namdyn_hpg: + ln_hpg_zps: '.false.' + ln_hpg_sco: '.true.' + ln_dynhpg_imp: '.false.' - choose_leapyear: False: + nn_leapy: 0 + True: nn_leapy: 1 -choose_free_surface: - linear: - add_namelist_changes: - namelist_cfg: - namdyn_hpg: - ln_hpg_zps: '.true.' - ln_hpg_sco: '.false.' - ln_dynhpg_imp: '.true.' - nonlinear: - add_namelist_changes: - namelist_cfg: - namdyn_hpg: - ln_hpg_zps: '.false.' - ln_hpg_sco: '.true.' - ln_dynhpg_imp: '.false.' - choose_hosing: true: add_namelist_changes: @@ -738,18 +1105,20 @@ choose_resolution: _ny: 511 time_step: 1800 - # default input files currently used in all COUPLED setups - # developed in FB1-ME - # standalone setups use slightly different files + ORCA12: + _nx: 4322 + _ny: 3059 + time_step: 300 + input_files: - # reference namelists namelist_ref: namelist_ref namelist_ice_ref: namelist_ice_ref - namelist_top_ref: namelist_top_ref - # grids and coefficients coordinates: coordinates subbasins: subbasins - coef-G70: coef-G70 + rnfmask: rnfmask + add_input_sources: + subbasins: ${input_dir}/ORCA0083_basinmsk_fullarctic.nc + rnfmask: ${input_dir}/rnf_cal_msk.nc R4: free_surface: no_option @@ -811,20 +1180,55 @@ choose_nest1: _ny_nest1: 944 nest_refinement: 5 +choose_levels: + L75: + add_namelist_changes: + namelist_cfg: + namdom: + # very important to set hmin to -10 or lower + rn_hmin: -10 + rn_e3zps_min: 25.0 + rn_e3zps_rat: 0.2 + ppsur: -3958.951371276829 + ppa0: 103.9530096000000 + ppa1: 2.415951269000000 + ppkth: 15.35101370000000 + ppacr: 7.0 + ppdzmin: 999999.0 + ldbletanh: '.true.' + ppa2: 100.760928500000 + ppkth2: 48.029893720000 + ppacr2: 13.000000000000 + + choose_use_lim2: true: add_config_files: namelist_ice_cfg: namelist_ice_cfg - add_namelist_changes: - namelist_ice_cfg: - namicerun: - cn_icerst_in: ${parent_expid}_${prevstep_formatted}_restart_ice_${parent_date!syear!smonth!sday}${global_tag} - cn_icerst_indir: '${work_dir}' - cn_icerst_out: restart_ice_${end_date_m1!syear!smonth!sday} - cn_icerst_outdir: '${work_dir}' - namiceini: - ln_limini: ${ln_limini} + choose_generation: + "3.6": + add_namelist_changes: + namelist_ice_cfg: + namicerun: + cn_icerst_in: ${parent_expid}_${prevstep_formatted}_restart_ice_${parent_date!syear!smonth!sday}${global_tag} + cn_icerst_indir: '${parent_restart_dir}/' + cn_icerst_out: restart_ice_${end_date_m1!syear!smonth!sday} + cn_icerst_outdir: '${experiment_restart_out_dir}/' + namiceini: + ln_limini: ${ln_limini} + "4.2": + add_namelist_changes: + namelist_ice_cfg: + nampar: + cn_icerst_in: ${parent_expid}_${prevstep_formatted}_restart_ice_${parent_date!syear!smonth!sday}${global_tag} + cn_icerst_indir: '${parent_restart_dir}/' + cn_icerst_out: restart_ice_${end_date_m1!syear!smonth!sday} + cn_icerst_outdir: '${experiment_restart_out_dir}/' + namini: + ln_iceini: ${ln_iceini} + # initialize sea ice based on SSTs + nn_iceini_file: 0 choose_use_lim2_agrif: true: @@ -834,23 +1238,25 @@ choose_use_lim2: 1_namelist_ice_cfg: namicerun: cn_icerst_in: ${parent_expid}_${prevstep_formatted_nest}_restart_ice_${parent_date!syear!smonth!sday}${global_tag} - cn_icerst_indir: '${work_dir}' + cn_icerst_indir: '${parent_restart_dir}/' cn_icerst_out: restart_ice_${end_date_m1!syear!smonth!sday} - cn_icerst_outdir: '${work_dir}' + cn_icerst_outdir: '${experiment_restart_out_dir}/' namiceini: ln_limini: ${ln_limini_agrif} choose_use_tracer: true: + add_input_files: + namelist_top_ref: namelist_top_ref add_config_files: namelist_top_cfg: namelist_top_cfg add_namelist_changes: namelist_top_cfg: namtrc_run: cn_trcrst_in: ${parent_expid}_${prevstep_formatted}_restart_trc_${parent_date!syear!smonth!sday}${global_tag} #${restart_in} - cn_trcrst_indir: '${work_dir}' + cn_trcrst_indir: '${parent_restart_dir}/' cn_trcrst_out: restart_trc_${end_date_m1!syear!smonth!sday} - cn_trcrst_outdir: '${work_dir}' + cn_trcrst_outdir: '${experiment_restart_out_dir}/' ln_rsttr: ${ln_rsttr} nn_rsttr : ${nn_rsttr} namtrc: @@ -866,9 +1272,9 @@ choose_use_tracer: 1_namelist_top_cfg: namtrc_run: cn_trcrst_in: ${parent_expid}_${prevstep_formatted_nest}_restart_trc_${parent_date!syear!smonth!sday}${global_tag} #${restart_in} - cn_trcrst_indir: '${work_dir}' + cn_trcrst_indir: '${parent_restart_dir}/' cn_trcrst_out: restart_trc_${end_date_m1!syear!smonth!sday} - cn_trcrst_outdir: '${work_dir}' + cn_trcrst_outdir: '${experiment_restart_out_dir}/' ln_rsttr: ${ln_rsttr} nn_rsttr : ${nn_rsttr} namtrc: @@ -889,18 +1295,23 @@ input_sources: # grids and coefficients bathy_meter: ${input_dir}/bathy_meter.nc coordinates: ${input_dir}/coordinates.nc - subbasins: ${input_dir}/orca05_subbasins_3.6.nc + #subbasins: ${input_dir}/orca05_subbasins_3.6.nc coef-G70: ${input_dir}/orca05_bfr_coef-G70.nc + subbasins: ${input_dir}/orca05_subbasins_3.6.nc + reshape_jra_orca05_bicub: ${input_dir}/reshape_jra_bicub__3.6.0_ORCA05_Kv1.0.0.nc reshape_jra_orca05_bilin: ${input_dir}/reshape_jra_bilin__3.6.0_ORCA05_Kv1.0.0.nc # inital data sn_tem_levitus: ${input_dir}/Levitus_p2.1_1m_01_12_Tpot_ORCA_R05.nc sn_tem_woa13_omip: ${input_dir}/woa13_decav_ptemp_OMIPinit__3.6.0_ORCA05.L46_Kv1.0.0.nc + sn_tem_EN4_ORCA12: ${input_dir}/votemper_EN4_gridded_195001-ORCA12_DROWN.nc sn_sal_levitus: ${input_dir}/Levitus_p2.1_1m_01_12_S_correc_ORCA_R05.nc sn_sal_woa13_omip: ${input_dir}/woa13_decav_salt_OMIPinit__3.6.0_ORCA05.L46_Kv1.0.0.nc + sn_sal_EN4_ORCA12: ${input_dir}/vosaline_EN4_gridded_195001-ORCA12_DROWN.nc ice_init_kkg36f13h: ${input_dir}/Ice_initialization_KKG36F13H-R.nc ice_init_orca05: ${input_dir}/Ice_initialization__3.6.0_ORCA05_Kv1.0.0.nc + ice_init_orca12: ${input_dir}/Ice_initialization_ORCA12.nc # restoring data / mask sn_sss_phc21_woa98: ${input_dir}/Levitus_p2.1_1m_01_12_S_correc_ORCA_R05_SSS_EB.nc @@ -935,6 +1346,40 @@ input_sources: 1_namelist_ice_ref: ${nemo.model_dir}/CONFIG/SHARED/namelist_ice_lim2_ref 1_namelist_top_ref: ${nemo.model_dir}/CONFIG/SHARED/namelist_top_ref + # NEMO 4.2.x eORCA025 input files + bfr_coef: ${input_dir}/bfr_coef_eORCA025_r4.2.0.nc + # coordinates_eORCA025_r4.2.0__v1.0.nc + domain_cfg_ExclClosedSeas: ${input_dir}/domain_cfg_eORCA025_r4.2.0__ExclClosedSeas.nc + domain_cfg_InclClosedSeas: ${input_dir}/domain_cfg_eORCA025_r4.2.0__InclClosedSeas.nc + # TODO: this file still needs to be generated by Markus + domain_cfg_CaspianSea: ${input_dir}/domain_cfg_eORCA025_r4.2.0__CaspianSea.nc + # we probably never need this one + domain_cfg_UKmasks: ${input_dir}/domain_cfg_eORCA025_r4.2.0__UKmasks.nc + ghflux_v2.0: ${input_dir}/ghflux_v2.0.nc + reshape_ghflux2: ${input_dir}/reshape_ghflux2_eORCA025_r4.2.0_bilin.nc + reshape_jra55do_bicub: ${input_dir}/reshape_jra55do_eORCA025_r4.2.0_bicub.nc + reshape_jra55do_bilin: ${input_dir}/reshape_jra55do_eORCA025_r4.2.0_bilin.nc + subbasins_eORCA025: ${input_dir}/subbasins_eORCA025_r4.2.0.nc + sn_tem_woa13_omip_eORCA025: ${input_dir}/woa13_decav_ptemp_OMIPinit_eORCA025.L75_4.2.0_Kv1.0.0.nc + sn_sal_woa13_omip_eORCA025: ${input_dir}/woa13_decav_salt_OMIPinit_eORCA025.L75_4.2.0_Kv1.0.0.nc + + # NEMO 4.2.x ORCA05 input files + # grids and coefficients + bathy_meter_orca05_nemo4: ${input_dir}/bathy_meter__4.2.0_ORCA05.L46.nc + coordinates_orca05_nemo4: ${input_dir}/bathy_meter__4.2.0_ORCA05.L46.nc + bfr_coef_orca05_nemo4: ${input_dir}/bfr_coef__4.2.0_ORCA05.nc + subbasins_orca05_nemo4: ${input_dir}/subbasins__4.2.0_ORCA05.nc + domain_cfg_orca05_nemo4: ${input_dir}/domain_cfg__ORCA05_zps_noclo.nc + + reshape_jra_orca05_nemo4_bicub: ${input_dir}/reshape_jra_bicub__4.2.0_ORCA05_v1.0.0.nc + reshape_jra_orca05_nemo4_bilin: ${input_dir}/reshape_jra_bilin__4.2.0_ORCA05_v1.0.0.nc + + # inital data + data_tem_orca05_nemo4: ${input_dir}/Tpot_PHC2.1_WOA98__4.2.0_ORCA05.L46_Kv1.0.0.nc + data_sal_orca05_nemo4: ${input_dir}/Salt_PHC2.1_WOA98__4.2.0_ORCA05.L46_Kv1.0.0.nc + sss_orca05_nemo4: ${input_dir}/SSS_PHC2.1_WOA98__4.2.0_ORCA05.L46_Kv1.0.0.nc + runoff_orca05_nemo4: ${input_dir}/runoff_12month__4.2.0_ORCA05_Kv1.0.0.nc + #forcing_files: ############## config files / namelist files: @@ -967,16 +1412,13 @@ namelists: - 1_namelist_ice_cfg ############## restart files: -# -restart_in_sources: - restart_in: ${parent_expid}_${prevstep_formatted}_restart*_${parent_date!syear!smonth!sday}_*.nc - -restart_out_sources: - restart_out: ${expid}_${newstep_formatted}_restart*_${end_date_m1!syear!smonth!sday}_*.nc +# restart files are handled by namelist_cfg and written to / read from the +# permanent restart directory directly ############## output files: outdata_sources: + 1h: "*${expid}_1h_${start_date!syear!smonth!sday}_${end_date_m1!syear!smonth!sday}_*.nc" 3h: "*${expid}_3h_${start_date!syear!smonth!sday}_${end_date_m1!syear!smonth!sday}_*.nc" 6h: "*${expid}_6h_${start_date!syear!smonth!sday}_${end_date_m1!syear!smonth!sday}_*.nc" 1d: "*${expid}_1d_${start_date!syear!smonth!sday}_${end_date_m1!syear!smonth!sday}_*.nc" @@ -1000,7 +1442,7 @@ opac_fields: [O_QsrIce, O_QsrMix, O_QnsIce, O_QnsMix, OTotRain, OTotSnow, OIceEv agr1_t_fields: [1_OIceFrac, 1_O_SSTSST, 1_O_TepIce, 1_O_IceTck, 1_O_SnwTck, 1_O_OCurx1, 1_O_OCury1, 1_O_OTaux1, 1_O_OTauy1, 1_O_ITaux1, 1_O_ITauy1] -agr1_c_fields: [1_O_QsrIce, 1_O_QsrMix, 1_O_QnsIce, 1_O_QnsMix, 1_OTotRain, 1_OTotSnow, 1_OIceEvap, 1_O_dQnsdT] +agr1_c_fields: [1_O_QsrIce, 1_O_QsrMix, 1_O_QnsIce, 1_O_QnsMix, 1_OTotRain, 1_OTotSnow, 1_OTotEvap, 1_OIceEvap, 1_O_dQnsdT] agr2_t_fields: [1_O_AgrSpg] coupling_fields: @@ -1010,20 +1452,27 @@ coupling_fields: grid: opac choose_runoff_method: + # EM21 developed by Eric Maisonnave in 2021 + # Runoff is split to river and calving. + # Also remapped from runoff mapper grid (rnfm) + # to the opac grid (for NEMO) and agr1 (for AGRIF) "EM21": ornf_fields: [O_Runoff] ocal_fields: [OCalving] agr1_r_fields: [1_O_Runoff] - agr1_c_fields: [1_OCalving] + agr1_rc_fields: [1_OCalving] add_coupling_fields: "[[ornf_fields-->FIELD]]": grid: opac "[[ocal_fields-->FIELD]]": grid: opaa "[[agr1_r_fields-->FIELD]]": - grid: agr1r - "[[agr1_c_fields-->FIELD]]": - grid: agr1c + grid: agr1 + "[[agr1_rc_fields-->FIELD]]": + grid: agr1 + + # Old method based on remapping runoff to a pre-made + # runoff mask on the ORCA05 grid (rnfo) or AGRIF (agr1r) "*": ornf_fields: [O_Runoff] agr1_r_fields: [1_O_Runoff] diff --git a/configs/components/nemobasemodel/nemobasemodel.yaml b/configs/components/nemobasemodel/nemobasemodel.yaml index 4f173272f..d85de365e 100644 --- a/configs/components/nemobasemodel/nemobasemodel.yaml +++ b/configs/components/nemobasemodel/nemobasemodel.yaml @@ -2,52 +2,37 @@ available_versions: - 3.6.3.x - 3.6ogcm_test - 3.6foci +- 3.6foci_autotools - 4.2.x choose_version: 4.2.x: - archfile: ESMTOOLS_generic_intel branch: branch_4.2 git-repository: https://forge.nemo-ocean.eu/nemo/nemo.git - # TODO: include arch repo as separate component - comp_command: export NEMO_TOPLEVEL=${model_dir}; export XIOS_TOPLEVEL=${model_dir}/../xios; - test -d arch/GEOMAR || git clone https://git.geomar.de/foci/src/nemo_arch.git arch/GEOMAR; - ./makenemo -n ${nemo.version} -m ${archfile} -r ${nemo.version} -j 24 ; cp -p cfgs/${nemo.version}/BLD/bin/nemo.exe cfgs/${nemo.version}/BLD/bin/oceanx - clean_command: ./makenemo -n ${nemo.version} -m ${archfile} -r ${nemo.version} clean - install_bins: cfgs/${nemo.version}/BLD/bin/oceanx - destination: nemo-${nemo.version} + + 4.2.0: + # 4.2.0 is actually a tag and not a branch, but we agreed + # to use tag 4.2.0 as a basis for all our developments + branch: 4.2.0 + git-repository: https://forge.nemo-ocean.eu/nemo/nemo.git 3.6.3.x: - # TODO: the archfile ESMTOOLS_generic_intel is not yet available in - # NEMOGCM.git, hence it won't work at the moment - archfile: ESMTOOLS_generic_intel branch: release-3.6.3.x git-repository: https://git.geomar.de/NEMO/NEMOGCM.git 3.6foci: - archfile: ESMTOOLS_generic_oasis_intel branch: esm-tools git-repository: https://git.geomar.de/foci/src/nemo.git + 3.6foci_autotools: + branch: esm-tools-autotools + git-repository: https://git.geomar.de/foci/src/nemo.git 3.6foci_agrif: - archfile: ESMTOOLS_generic_oasis_intel_agrif branch: esm-tools git-repository: https://git.geomar.de/foci/src/nemo.git # Test using Jan-Klaus Rieck's OMIP configuration 3.6ogcm_test: - archfile: ESMTOOLS_generic_intel branch: release-3.6.3.x-berlin-omip git-repository: https://git.geomar.de/jan-klaus-rieck/NEMOGCM.git - comp_command: export NEMO_TOPLEVEL=${model_dir}; - if [[ ! -f ARCH/arch-${archfile}.fcm ]]; then cp CONFIG/${nemo.version}/EXP00/arch-${archfile}.fcm ARCH/; fi; - cd CONFIG; cp ${nemo.version}/cfg.inc cfg.txt; - ./makenemo -n ${nemo.version} -m ${archfile} -j 24; - cp -p ${nemo.version}/BLD/bin/nemo.exe ${nemo.version}/BLD/bin/oceanx -clean_command: cd CONFIG; - cp ${nemo.version}/cfg.inc cfg.txt; - ./makenemo -n ${nemo.version} -m ${archfile} clean; - cd .. -comp_command: export NEMO_TOPLEVEL=${model_dir}; cd CONFIG; cp ${nemo.version}/cfg.inc - cfg.txt; ./makenemo -n ${nemo.version} -m ${archfile} -j 24; cp -p ${nemo.version}/BLD/bin/nemo.exe - ${nemo.version}/BLD/bin/oceanx + destination: nemo-${nemo.version} -install_bins: CONFIG/${nemo.version}/BLD/bin/oceanx +contact: "swahl(at)geomar.de" diff --git a/configs/components/oasis3mct/oasis3mct.env.yaml b/configs/components/oasis3mct/oasis3mct.env.yaml index 0068a198c..ba742858b 100644 --- a/configs/components/oasis3mct/oasis3mct.env.yaml +++ b/configs/components/oasis3mct/oasis3mct.env.yaml @@ -7,3 +7,12 @@ add_compiletime_environment_changes: levante: add_export_vars: OASIS_FFLAGS: '"-march=core-avx2 -mtune=core-avx2"' + albedo: + choose_computer.compiler_suite: + gcc: + add_export_vars: + FFLAGS: "'-fallow-argument-mismatch -w'" + FCFLAGS: "'-fallow-argument-mismatch -w'" + intel-oneapi: + add_export_vars: + OASIS_FFLAGS: '"-march=core-avx2"' diff --git a/configs/components/oasis3mct/oasis3mct.yaml b/configs/components/oasis3mct/oasis3mct.yaml index 6ff497abd..ccbe5e3e8 100644 --- a/configs/components/oasis3mct/oasis3mct.yaml +++ b/configs/components/oasis3mct/oasis3mct.yaml @@ -6,6 +6,7 @@ norestart: F use_lucia: False mct_version: "2.8" # TODO: set mct_version = version (can't do at the moment as version is a string) git-repository: https://gitlab.dkrz.de/modular_esm/oasis3-mct.git +contact: "miguel.andres-martinez(at)awi.de, paul.gierz(at)awi.de" config_files: cf: cf @@ -20,6 +21,7 @@ version: '2.8' available_versions: - foci +- foci_autotools - fociagrif - ec-earth - '2.8' @@ -30,10 +32,17 @@ available_versions: - '4.0-awicm-frontiers' - '4.0-awicm-3.0' - '4.0-awicm-3.1' +- '5.0-smhi' choose_version: '2.8-paleodyn': branch: '2.8mct-awiesm-2.1' git-repository: https://gitlab.awi.de/paleodyn/Models/oasis3-mct.git + +# kh 09.06.22 + '2.8-paleodyn-multi-group-support': + branch: 'feat/multi-group-support' + git-repository: https://gitlab.awi.de/paleodyn/Models/oasis3-mct.git + '2.8': branch: 'v2.8' '3.0': @@ -43,20 +52,36 @@ choose_version: 4.0-geomar: git-repository: https://git.geomar.de/foci/src/oasis3-mct4.git branch: '4.0' + contact: "swahl(at)geomar.de" 4.0-awicm-3.0: branch: awicm3-frontiers-freeze-candidate-1 4.0-awicm-3.1: branch: awicm-3.1 4.0-awicm-frontiers: branch: awicm-3-frontiers + 5.0-smhi: + branch: main_dkrz + git-repository: https://gitlab.dkrz.de/ec-earth/oasis3mct5-ece ec-earth: branch: ec-earth-version foci: branch: oasis3mct2.8-foci git-repository: https://git.geomar.de/foci/src/oasis3mct.git + contact: "swahl(at)geomar.de" + foci_autotools: + git-repository: https://git.geomar.de/foci/src/oasis3mct.git + branch: master + clean_command: make clean + contact: "swahl(at)geomar.de" + comp_command: ./configure --prefix=$(pwd)/../ CFLAGS="-O2 -DgFortran -std=gnu99" FCFLAGS="-I. -traceback -O3 -xHost -DTREAT_OVERLAY -Duse_netCDF -Duse_comm_MPI1" FFLAGS="-I. -traceback -O3 -xHost -DTREAT_OVERLAY -Duse_netCDF -Duse_comm_MPI1" ; + make -j `nproc --all`; make install -j `nproc --all`; + install_libs: '' fociagrif: branch: fociagrif git-repository: https://git.geomar.de/foci/src/oasis3-mct4.git + EM21: + branch: runoff + clean_command: 'rm -rf build CMakeCache.txt include lib/libpsmile.a lib/libscrip.a lib/libmct.a lib/libmpeu.a' comp_command: 'mkdir -p build; cd build; cmake ..; make -j 1; mkdir -p ../include/; cp lib/psmile/libpsmile.a lib/psmile/mct/libmct.a lib/psmile/mct/mpeu/libmpeu.a lib/psmile/scrip/libscrip.a ../lib; cp lib/psmile/mod_oasis*mod ../include ' @@ -72,6 +97,14 @@ install_libs: # this could be _19900101-19901231 for example oasis_date_stamp: "" +# +# some default settings for remapping +# GAUSWGT with 9 neighbours and weight 2.0 +# is fine when resolutions are similar +# +nb_of_neighbours_a2o: 9 +weight_a2o: 2.0 + log_files: nout: nout debug_r1: debug_r1 diff --git a/configs/components/oifs/append_icmcl_file.sh b/configs/components/oifs/append_icmcl_file.sh new file mode 100755 index 000000000..ee0f3cdcb --- /dev/null +++ b/configs/components/oifs/append_icmcl_file.sh @@ -0,0 +1,77 @@ +#!/bin/bash + +## +## Usage: ./oifs_change_dataDate_initfiles.sh MACHINE INDIR EXPID YYYY-MM-DDTHH:MM:SS YYYY-MM-DDTHH:MM:SS OUTDIR +## where EXPID is the 4-character experiment ID, e.g. gu5a if the filename is ICMGGgu5aINIT etc. +## YYYYMMDD is the new date you want to set in the grib files +## DIR is the location of the original data. +## + +indir=$1 +icmcl_file=$2 +outexpid=$3 +startdate=$4 +enddate=$5 +outdir=$6 + +source $indir/../../scripts/env.sh + +echo " OpenIFS preprocessing " +echo " ===================== " +echo " " +echo " Machine: $(hostname) " +echo " grib_set: $(which grib_set) " +echo " cdo -V: " +cdo -V +echo " " +echo " Input dir: $indir " +echo " Output dir: $outdir " +echo " Exp ID: $expid " +echo " Start date: $startdate " +echo " End date: $enddate " + +startyear=$(date -u -d "${startdate}" +%Y) +endyear=$(date -u -d "${enddate}" +%Y) + +echo " Start year: $startyear " +echo " End year: $endyear " +echo " " + +echo " * Cut orinal ICMCL file into months" +for ((m = 1 ; m < 13 ; m++)); do + cdo seltimestep,$m ${icmcl_file} $outdir/ICMCL_$m & +done +wait + +echo " *Create ICMCL files for all months & years needed for run" +for ((y = $startyear ; y < $(($endyear+1)) ; y++)); do + for ((m = 1 ; m < 13 ; m++)); do + grib_set -s dataDate=$y$(printf "%02g" $m)15 $outdir/ICMCL_$m $outdir/ICMCL_${y}_$m & + done +done +wait + +echo " *Clean up monthly ICMCL files with original year" +for ((m = 1 ; m < 13 ; m++)); do + rm $outdir/ICMCL_$m & +done +wait + +echo " *Write list of all ICMCL files" +filelist=" " +for ((y = $startyear ; y < $(($endyear+1)) ; y++)); do + for ((m = 1 ; m < 13 ; m++)); do + export filelist="$filelist $outdir/ICMCL_${y}_$m" + done +done + +echo " *Merge monthly ICMCL files into single file" +rm -f ${outdir}/ICMCL${outexpid}INIT +cdo mergetime $filelist ${outdir}/ICMCL${outexpid}INIT + +echo " *Cleanup monthly ICMCL files" +rm $filelist + + + + diff --git a/configs/components/oifs/oifs.env.yaml b/configs/components/oifs/oifs.env.yaml index 0de04e9af..9e64a6b0f 100644 --- a/configs/components/oifs/oifs.env.yaml +++ b/configs/components/oifs/oifs.env.yaml @@ -130,6 +130,11 @@ runtime_environment_changes: - 'GRIB_SAMPLES_PATH="$ECCODESROOT/share/eccodes/ifs_samples/grib1_mlgrib2/"' - 'DR_HOOK_IGNORE_SIGNALS=${dr_hook_ignore_signals}' + albedo: + add_export_vars: + - 'GRIB_SAMPLES_PATH="$ECCODESROOT/share/eccodes/ifs_samples/grib1_mlgrib2/"' + - 'DR_HOOK_IGNORE_SIGNALS=${dr_hook_ignore_signals}' + compiletime_environment_changes: choose_computer.name: @@ -162,12 +167,12 @@ compiletime_environment_changes: - 'OIFS_NETCDFF_LIB="-L$NETCDFFROOT/lib -lnetcdff"' # compilers and compile switches - 'OIFS_FC=$FC' - - 'OIFS_FFLAGS="-r8 -fp-model precise -align array32byte -O1 -xCORE_AVX2 -g -traceback -convert big_endian -fpe0"' + - 'OIFS_FFLAGS="-qopenmp -r8 -fp-model precise -align array32byte -O1 -xCORE_AVX2 -g -traceback -convert big_endian -fpe0"' - 'OIFS_FFIXED=""' - 'OIFS_FCDEFS="BLAS LITTLE LINUX INTEGER_IS_INT"' - - 'OIFS_LFLAGS=$OIFS_MPI_LIB' + - 'OIFS_LFLAGS="$OIFS_MPI_LIB -qopenmp"' - 'OIFS_CC=$CC' - - 'OIFS_CFLAGS="-fp-model precise -O1 -xCORE_AVX2 -g -traceback -qopt-report=0 -fpe0"' + - 'OIFS_CFLAGS="-qopenmp -fp-model precise -O1 -xCORE_AVX2 -g -traceback -qopt-report=0 -fpe0"' - 'OIFS_CCDEFS="LINUX LITTLE INTEGER_IS_INT _ABI64 BLAS"' glogin: @@ -200,12 +205,12 @@ compiletime_environment_changes: - 'OIFS_NETCDFF_LIB="-L$NETCDFFROOT/lib -lnetcdff"' # compilers and compile switches - 'OIFS_FC=$FC' - - 'OIFS_FFLAGS="-r8 -fp-model precise -align array32byte -O1 -xCORE_AVX2 -g -traceback -convert big_endian -fpe0"' + - 'OIFS_FFLAGS="-qopenmp -r8 -fp-model precise -align array32byte -O1 -xCORE_AVX2 -g -traceback -convert big_endian -fpe0"' - 'OIFS_FFIXED=""' - 'OIFS_FCDEFS="BLAS LITTLE LINUX INTEGER_IS_INT"' - - 'OIFS_LFLAGS=$OIFS_MPI_LIB' + - 'OIFS_LFLAGS="$OIFS_MPI_LIB -qopenmp"' - 'OIFS_CC=$CC' - - 'OIFS_CFLAGS="-fp-model precise -O1 -xCORE_AVX2 -g -traceback -qopt-report=0 -fpe0"' + - 'OIFS_CFLAGS="-qopenmp -fp-model precise -O1 -xCORE_AVX2 -g -traceback -qopt-report=0 -fpe0"' - 'OIFS_CCDEFS="LINUX LITTLE INTEGER_IS_INT _ABI64 BLAS"' juwels: @@ -326,6 +331,47 @@ compiletime_environment_changes: # compilers and compile switches OIFS_FC: '$FC' OIFS_FFLAGS: '"-r8 -fp-model precise -align array32byte -O3 -qopenmp -g -traceback -convert big_endian -march=core-avx2 -mtune=core-avx2"' # -qoverride-limits -fast-transcendentals -m64 -fma -pc64"' + #OIFS_FFLAGS: '"-r8 -fp-model precise -align array32byte -O0 -check all,noarg_temp_created,bounds,uninit -ftrapuv -qopenmp -g -traceback -convert big_endian -march=core-avx2 -mtune=core-avx2"' + OIFS_FFIXED: '""' + OIFS_FCDEFS: '"BLAS LITTLE LINUX INTEGER_IS_INT"' + OIFS_MPI_LIB: '"$MPI_LIB"' + OIFS_LFLAGS: '"$OIFS_MPI_LIB -qopenmp"' + OIFS_CC: '$CC' + OIFS_CFLAGS: '"-fp-model precise -O3 -g -traceback -qopt-report=0 -fpe0 -qopenmp -march=core-avx2 -mtune=core-avx2"' # -qoverride-limits -fast-transcendentals -m64 -fma -pc64"' + OIFS_CCDEFS: '"LINUX LITTLE INTEGER_IS_INT _ABI64 BLAS _OPENMP"' + + albedo: + add_export_vars: + + HDF5_ROOT: $HDF5ROOT + + HDF5_C_INCLUDE_DIRECTORIES: $HDF5_ROOT/include + NETCDF_Fortran_INCLUDE_DIRECTORIES: $NETCDFFROOT/include + NETCDF_C_INCLUDE_DIRECTORIES: $NETCDFROOT/include + OASIS3MCT_FC_LIB: '"-L$NETCDFFROOT/lib -lnetcdff"' + # TODO: figure out whether those two are still needed + ESM_NETCDF_C_DIR: "$NETCDFROOT" + ESM_NETCDF_F_DIR: "$NETCDFFROOT" + # grib api / eccodes + OIFS_GRIB_API_INCLUDE: '"-I$ECCODESROOT/include"' + OIFS_GRIB_API_LIB: '"-L$ECCODESROOT/lib64 -leccodes_f90 -leccodes"' + OIFS_GRIB_INCLUDE: '"$OIFS_GRIB_API_INCLUDE"' + OIFS_GRIB_LIB: '"$OIFS_GRIB_API_LIB"' + OIFS_GRIB_API_BIN: '"$ECCODESROOT/bin"' + LAPACK_LIB_DEFAULT: '"-L$MKLROOT/lib/intel64 -lmkl_intel_lp64 -lmkl_core -lmkl_sequential"' + # oasis + OIFS_OASIS_BASE: '$(pwd)/oasis' + OIFS_OASIS_INCLUDE: '"-I$OIFS_OASIS_BASE/build/lib/psmile -I$OIFS_OASIS_BASE/build/lib/psmile/scrip -I$OIFS_OASIS_BASE/build/lib/psmile/mct -I$OIFS_OASIS_BASE/build/lib/psmile/mct/mpeu"' + OIFS_OASIS_LIB: '"-L$OIFS_OASIS_BASE/build/lib/psmile -L$OIFS_OASIS_BASE/build/lib/psmile/scrip -L$OIFS_OASIS_BASE/build/lib/psmile/mct -L$OIFS_OASIS_BASE/build/lib/psmile/mct/mpeu -lpsmile -lmct -lmpeu -lscrip"' + # netcdf + OIFS_NETCDF_INCLUDE: '"-I$NETCDFROOT/include"' + OIFS_NETCDF_LIB: '"-L$NETCDFROOT/lib -lnetcdf"' + OIFS_NETCDFF_INCLUDE: '"-I$NETCDFFROOT/include"' + OIFS_NETCDFF_LIB: '"-L$NETCDFFROOT/lib -lnetcdff"' + # compilers and compile switches + OIFS_FC: '$FC' + OIFS_FFLAGS: '"-r8 -fp-model precise -align array32byte -O3 -qopenmp -g -traceback -convert big_endian -march=core-avx2 -mtune=core-avx2"' # -qoverride-limits -fast-transcendentals -m64 -fma -pc64"' + #OIFS_FFLAGS: '"-r8 -fp-model precise -align array32byte -O0 -check all,noarg_temp_created,bounds,uninit -ftrapuv -qopenmp -g -traceback -convert big_endian -march=core-avx2 -mtune=core-avx2"' OIFS_FFIXED: '""' OIFS_FCDEFS: '"BLAS LITTLE LINUX INTEGER_IS_INT"' OIFS_MPI_LIB: '"$MPI_LIB"' diff --git a/configs/components/oifs/oifs.yaml b/configs/components/oifs/oifs.yaml index eb9273340..e9f80b42a 100644 --- a/configs/components/oifs/oifs.yaml +++ b/configs/components/oifs/oifs.yaml @@ -6,6 +6,7 @@ model: oifs executable: oifs execution_command: ${executable} -e ${oifs.input_expid} version: 43r3 +source_code_permissions: 700 type: atmosphere with_xios: false # TODO: Change to true when the run bug is fixed (compile bug was fixed) with_nest1: false @@ -82,6 +83,7 @@ metadata: unsure, please contact redmine... compile_infos: + contact: "jan.streffing(at)awi.de, miguel.andres-martinez(at)awi.de" # this require currently causes esm_master install-... to not work properly # workaround esm_master get-... ; esm_master comp-... requires: @@ -91,7 +93,8 @@ compile_infos: - 43r3-master - 43r3-awicm-3.0 - 43r3-awicm-3.1 - - 43r3-awicm-frontiers + - 43r3-awicm-3.1.1 + - 43r3-awicm-3.1.2 - 43r3-awicm-frontiers-xios - 43r3 - 40r1-foci @@ -103,27 +106,28 @@ compile_infos: branch: foci_conserv "40r1-agcm": compile_command: export OIFS_COMP=agcm; cd make; ../fcm/bin/fcm make -v -j8 -f - oifs-agcm.cfg + oifs-agcm.cfg; chmod -R ${source_code_permissions} . 40r1-foci: branch: foci_conserv - comp_command: cd make; ../fcm/bin/fcm make -v -j24 -f oifs.cfg + comp_command: cd make; ../fcm/bin/fcm make -v -j24 -f oifs.cfg ; chmod -R ${source_code_permissions} . destination: 40r1 + contact: "swahl(at)geomar.de" 43r3-master: requires: - - oasis3mct-4.0-awicm-frontiers - branch: master - comp_command: export OIFS_TOPLEVEL_DIR=${model_dir}; cd make; ../fcm/bin/fcm make - -v -j8 -f oifs.cfg ; mv esm/oifs/bin/master.exe esm/oifs/bin/oifs - git-repository: https://gitlab.dkrz.de/ec-earth/oifs-43r3.git - install_bins: make/esm/oifs/bin/oifs + - oasis3mct-5.0-smhi + branch: main_dkrz + executable: OpenIFS + comp_command: "export OIFS_CPLNG_LIB=$OIFS_OASIS_LIB; export OIFS_CPLNG_INCLUDE=$OIFS_OASIS_INCLUDE ;export OIFS_COMP=esm; export OIFS_BUILD=opt; export OIFS_TOPLEVEL_DIR=${model_dir}; export OIFS_XIOS=enable; export OIFS_CPLNG=enable; export OIFS_XIOS_DIR=${model_dir}/../xios ; export OIFS_XIOS_INCLUDE=-I/${model_dir}/../xios/inc/; cd make; ../fcm/bin/fcm make -v -j10 -f oifs_esm.fcm ; chmod -R ${source_code_permissions} . ; mv esm/oifs/bin/master.exe esm/oifs/bin/OpenIFS" + git-repository: https://gitlab.dkrz.de/ec-earth/oifs-43r3-ece + install_bins: make/esm/oifs/bin/OpenIFS destination: oifs-43r3 - with_xios: false # for now, later the default will be with_xios: true + with_xios: true 43r3-awicm-3.0: requires: - oasis3mct-4.0-awicm-3.0 branch: awicm3-frontiers-freeze-candidate-1 comp_command: export OIFS_TOPLEVEL_DIR=${model_dir}; cd make; ../fcm/bin/fcm make - -v -j8 -f oifs.cfg ; mv esm/oifs/bin/master.exe esm/oifs/bin/oifs + -v -j8 -f oifs.cfg ; chmod -R ${source_code_permissions} . ; mv esm/oifs/bin/master.exe esm/oifs/bin/oifs git-repository: https://gitlab.dkrz.de/ec-earth/oifs-43r3.git install_bins: make/esm/oifs/bin/oifs destination: oifs-43r3 @@ -132,26 +136,34 @@ compile_infos: requires: - oasis3mct-4.0-awicm-3.1 branch: awicm-3.1 - comp_command: "export OIFS_TOPLEVEL_DIR=${model_dir}; export OIFS_XIOS=enable ; export OIFS_XIOS_DIR=${model_dir}/../xios ; export OIFS_XIOS_INCLUDE=-I/${model_dir}/../xios/inc/; cd make; ../fcm/bin/fcm make -v -j8 -f oifs.fcm ; mv esm/oifs/bin/master.exe esm/oifs/bin/oifs" + comp_command: "export OIFS_TOPLEVEL_DIR=${model_dir}; export OIFS_XIOS=enable ; export OIFS_XIOS_DIR=${model_dir}/../xios ; export OIFS_XIOS_INCLUDE=-I/${model_dir}/../xios/inc/; cd make; ../fcm/bin/fcm make -v -j8 -f oifs.fcm ; chmod -R ${source_code_permissions} .; mv esm/oifs/bin/master.exe esm/oifs/bin/oifs" git-repository: https://gitlab.dkrz.de/ec-earth/oifs-43r3.git install_bins: make/esm/oifs/bin/oifs destination: oifs-43r3 with_xios: true - 43r3-awicm-frontiers: + 43r3-awicm-3.1.1: requires: - - oasis3mct-4.0-awicm-frontiers - branch: awicm-3-frontiers - comp_command: export OIFS_TOPLEVEL_DIR=${model_dir}; cd make; ../fcm/bin/fcm make - -v -j8 -f oifs.cfg ; mv esm/oifs/bin/master.exe esm/oifs/bin/oifs + - oasis3mct-4.0-awicm-3.1 + branch: awicm-3.1.1 + comp_command: "export OIFS_TOPLEVEL_DIR=${model_dir}; export OIFS_XIOS=enable ; export OIFS_XIOS_DIR=${model_dir}/../xios ; export OIFS_XIOS_INCLUDE=-I/${model_dir}/../xios/inc/; cd make; ../fcm/bin/fcm make -v -j8 -f oifs.fcm ; chmod -R ${source_code_permissions} .; mv esm/oifs/bin/master.exe esm/oifs/bin/oifs" git-repository: https://gitlab.dkrz.de/ec-earth/oifs-43r3.git install_bins: make/esm/oifs/bin/oifs destination: oifs-43r3 - with_xios: false # for now, later the default will be with_xios: true + with_xios: true + 43r3-awicm-3.1.2: + requires: + - oasis3mct-4.0-awicm-3.1 + branch: awicm-3.1.2 + comp_command: "export OIFS_TOPLEVEL_DIR=${model_dir}; export OIFS_XIOS=enable ; export OIFS_XIOS_DIR=${model_dir}/../xios ; export OIFS_XIOS_INCLUDE=-I/${model_dir}/../xios/inc/; cd make; ../fcm/bin/fcm make -v -j8 -f oifs.fcm ; chmod -R ${source_code_permissions} .; mv esm/oifs/bin/master.exe esm/oifs/bin/oifs" + git-repository: https://gitlab.dkrz.de/ec-earth/oifs-43r3.git + install_bins: make/esm/oifs/bin/oifs + destination: oifs-43r3 + with_xios: true 43r3-awicm-frontiers-xios: requires: - oasis3mct-4.0-awicm-frontiers branch: awicm-3-frontiers-xios - comp_command: "export OIFS_TOPLEVEL_DIR=${model_dir}; export OIFS_XIOS=enable ; export OIFS_XIOS_DIR=${model_dir}/../xios ; export OIFS_XIOS_INCLUDE=-I/${model_dir}/../xios/inc/; cd make; ../fcm/bin/fcm make -v -j8 -f oifs.fcm ; mv esm/oifs/bin/master.exe esm/oifs/bin/oifs" + comp_command: "export OIFS_TOPLEVEL_DIR=${model_dir}; export OIFS_XIOS=enable ; export OIFS_XIOS_DIR=${model_dir}/../xios ; export OIFS_XIOS_INCLUDE=-I/${model_dir}/../xios/inc/; cd make; ../fcm/bin/fcm make -v -j8 -f oifs.fcm ; chmod -R ${source_code_permissions} . ; mv esm/oifs/bin/master.exe esm/oifs/bin/oifs" git-repository: https://gitlab.dkrz.de/ec-earth/oifs-43r3.git install_bins: make/esm/oifs/bin/oifs destination: oifs-43r3 @@ -159,22 +171,49 @@ compile_infos: 43r3: branch: oifs-deck comp_command: export OIFS_TOPLEVEL_DIR=${model_dir}; cd make; ../fcm/bin/fcm make - -v -j8 -f oifs.cfg ; mv esm/oifs/bin/master.exe esm/oifs/bin/oifs + -v -j8 -f oifs.cfg ; chmod -R ${source_code_permissions} . ; mv esm/oifs/bin/master.exe esm/oifs/bin/oifs git-repository: https://gitlab.dkrz.de/ec-earth/oifs-43r3.git install_bins: make/esm/oifs/bin/oifs with_xios: false 43r3-foci: - branch: master + branch: 43r3v1-foci git-repository: https://gitlab.dkrz.de/ec-earth/oifs-43r3.git - comp_command: "export OIFS_TOPLEVEL_DIR=${model_dir}; export OIFS_XIOS=enable ; export OIFS_XIOS_DIR=${model_dir}/../xios ; export OIFS_XIOS_INCLUDE=-I/${model_dir}/../xios/inc/ ; cd make; ../fcm/bin/fcm make -v -j8 -f oifs.fcm ; mv esm/oifs/bin/master.exe esm/oifs/bin/oifs" + comp_command: "export OIFS_TOPLEVEL_DIR=${model_dir}; export OIFS_XIOS=enable ; export OIFS_XIOS_DIR=${model_dir}/../xios ; export OIFS_XIOS_INCLUDE=-I/${model_dir}/../xios/inc/ ; cd make; ../fcm/bin/fcm make -v -j8 -f oifs.fcm ; chmod -R ${source_code_permissions} . ; mv esm/oifs/bin/master.exe esm/oifs/bin/oifs" install_bins: make/esm/oifs/bin/oifs requires: - oasis3mct-4.0 - xios-2.5_r1910 + contact: "swahl(at)geomar.de" + 43r3-foci21: + branch: master + git-repository: https://gitlab.dkrz.de/ec-earth/oifs-43r3.git + comp_command: "export OIFS_TOPLEVEL_DIR=${model_dir}; export OIFS_XIOS=enable ; export OIFS_XIOS_DIR=${model_dir}/../xios ; export OIFS_XIOS_INCLUDE=-I/${model_dir}/../xios/inc/ ; cd make; ../fcm/bin/fcm make -v -j8 -f oifs.fcm ; chmod -R ${source_code_permissions} . ; mv esm/oifs/bin/master.exe esm/oifs/bin/oifs" + install_bins: make/esm/oifs/bin/oifs + requires: + - oasis3mct-EM21 + - xios-2.5_r1910 + contact: "swahl(at)geomar.de" + 43r3-foci211: + branch: foci211 + git-repository: https://gitlab.dkrz.de/ec-earth/oifs-43r3.git + comp_command: "export OIFS_TOPLEVEL_DIR=${model_dir}; export OIFS_XIOS=enable ; export OIFS_XIOS_DIR=${model_dir}/../xios ; export OIFS_XIOS_INCLUDE=-I/${model_dir}/../xios/inc/ ; cd make; ../fcm/bin/fcm make -v -j8 -f oifs.fcm ; chmod -R ${source_code_permissions} . ; mv esm/oifs/bin/master.exe esm/oifs/bin/oifs" + install_bins: make/esm/oifs/bin/oifs + requires: + - oasis3mct-EM21 + - xios-2.5_r1910 + contact: "swahl(at)geomar.de" 43r3-v1: + branch: 43r3v1-foci + git-repository: https://gitlab.dkrz.de/ec-earth/oifs-43r3.git + comp_command: "export OIFS_TOPLEVEL_DIR=${model_dir}; export OIFS_XIOS=enable ; export OIFS_XIOS_DIR=${model_dir}/../xios ; export OIFS_XIOS_INCLUDE=-I/${model_dir}/../xios/inc/ ; cd make; ../fcm/bin/fcm make -v -j8 -f oifs.fcm ; chmod -R ${source_code_permissions} .; mv esm/oifs/bin/master.exe esm/oifs/bin/oifs" + install_bins: make/esm/oifs/bin/oifs + requires: + - oasis3mct-4.0 + - xios-2.5_r1910_oifs + 43r3-v2: branch: master git-repository: https://gitlab.dkrz.de/ec-earth/oifs-43r3.git - comp_command: "export OIFS_TOPLEVEL_DIR=${model_dir}; export OIFS_XIOS=enable ; export OIFS_XIOS_DIR=${model_dir}/../xios ; export OIFS_XIOS_INCLUDE=-I/${model_dir}/../xios/inc/ ; cd make; ../fcm/bin/fcm make -v -j8 -f oifs.fcm ; mv esm/oifs/bin/master.exe esm/oifs/bin/oifs" + comp_command: "export OIFS_TOPLEVEL_DIR=${model_dir}; export OIFS_XIOS=enable ; export OIFS_XIOS_DIR=${model_dir}/../xios ; export OIFS_XIOS_INCLUDE=-I/${model_dir}/../xios/inc/ ; cd make; ../fcm/bin/fcm make -v -j8 -f oifs.fcm ; chmod -R ${source_code_permissions} .; mv esm/oifs/bin/master.exe esm/oifs/bin/oifs" install_bins: make/esm/oifs/bin/oifs requires: - oasis3mct-4.0 @@ -205,6 +244,7 @@ nlev: ${levels_number} prepifs_expid: gu5a prepifs_startdate: 19820101 mip: "cmip5" +o3_scheme: "default" scenario: "amip-prepifs" output: "default" @@ -215,6 +255,7 @@ read_icmcl: 0 generate_namelist: 1 ensemble: 0 post_processing: 0 +solarspectrum: False pextra: 0 dr_hook_ignore_signals: -1 @@ -318,6 +359,14 @@ choose_resolution: res_number: 639 res_number_tl: "639_4" truncation: "TCO" + TCO1279: + nx: 6599680 + ny: 1 + time_step: 300 + oasis_grid_name: 128 + res_number: 1279 + res_number_tl: "1279_4" + truncation: "TCO" TL511: nx: 348528 ny: 1 @@ -352,6 +401,9 @@ choose_computer.partitions.compute.cores_per_node: nproc: 96 96: nproc: 96 + 128: + nproc: 128 + #====================================================================================== # MAIN CHANGES TO fort.4 NAMELIST @@ -385,8 +437,6 @@ namelist_changes: NAERAD: CRTABLEDIR: "${rtables_dir}" LECOMPGRID: "${lecompgrid}" - NAMCLDP: - SCLCT_SWITCH: "${sclct_switch}" NAMFPG: NFPLEV: "${nlev}" NFPMAX: "${res_number}" @@ -409,6 +459,7 @@ namelist_changes: ORBMODE: "${orb_mode}" ORBIY: "${orb_iyear}" + lresume: false restart_rate: 1 restart_unit: "months" @@ -429,6 +480,7 @@ file_movements: # TODO: expand comment massfixer: 2 +cloudfixer: 1 nfrmasscon: 1 oasis_grid_name_a: "A${oasis_grid_name}" @@ -534,6 +586,7 @@ choose_copy_forcing: add_forcing_files: # Add CO2 etc for all scenarios and years CMIP6DATA: CMIP6DATA + false: forcing_files: {} @@ -645,7 +698,7 @@ outdata_in_work: MPP: MPP* # XIOS output oifsnc: ${input_expid}_*_${start_date!syear!smonth!sday}_*.nc - atm: atm* + atm: atm_* outdata_sources: # old grib based output @@ -655,7 +708,7 @@ outdata_sources: MPP: ${out_date_folder}/MPP* # XIOS output oifsnc: ${input_expid}_*_${start_date!syear!smonth!sday}_*.nc - atm: atm* + atm: atm_* #====================================================================================== @@ -814,6 +867,14 @@ choose_massfixer: YL_NL%LMASSFIX: ".true." YQ_NL%LMASSFIX: ".true." + +choose_cloudfixer: + 1: + add_namelist_changes: + fort.4: + NAMCLDP: + SCLCT_SWITCH: "${sclct_switch}" + ## ## specifics for 40r1 and 43r3 ## @@ -868,6 +929,61 @@ choose_version: add_outdata_files: ICMUA: ICMUA + +# If 1, use Coddington spectrum which reduced stratospheric warm bias +# Only available in 43r3-v2 +choose_solarspectrum: + True: + add_namelist_changes: + fort.4: + NAERAD: + NSOLARSPECTRUM: 1 + +# There are two different O3 concentrations in OpenIFS: +# One is used for output, and one that is used by radiation scheme +# By default, the two are NOT the same. +# By default, prognostic O3 from the Cariolle scheme is written to output +# but climatology is used by radiation scheme +# +# Here the scheme can be changed in two ways: +# cmip6: Use O3 from CMIP6 (input4MIP) for picontrol, historical or scenarios +# cariolle: Use the prognostic O3 from Cariolle in radiation +choose_o3_scheme: + default: + add_namelist_changes: + fort.4: + NAERAD: + NGHGRAD: 21 + cmip6: + # For CMIP6 O3 we set + # LCMIP6O3 to true + # LEO3VAR to true + # LEPO3RA to false (otherwise prognostic O3 is used) + add_namelist_changes: + fort.4: + NAMGFL: + YO3_NL%LGP: '.true.' # O3 is a tracer + NAEPHY: + LEO3CH: '.true.' # turn on O3 scheme + NAERAD: + LEPO3RA: '.false.' # dont use progn O3 in radiation + LCMIP6O3: '.true.' # use CMIP6 O3 + LEO3VAR: '.true.' # allow time-varying O3 (not climatology) + NGHGRAD: 21 # dont overwrite by progn O3 + + cariolle: + # For Cariolle + add_namelist_changes: + fort.4: + NAMGFL: + YO3_NL%LGP: '.true.' + NAEPHY: + LEO3CH: '.true.' + NAERAD: + LEPO3RA: '.true.' # use progn O3 in radiation + LCMIP6O3: '.true.' + NGHGRAD: 20 # overwrite O3 by progn O3 + choose_restart_type: eternal: nfrres: 1 @@ -917,7 +1033,6 @@ choose_mip: NAERAD: SSPNAME: "SSP5-8.5" - #choose_o3_scheme: # "prescribed": # choose_mip: @@ -997,7 +1112,6 @@ input_in_work: o3_data: ${res_number_tl}/o3chem_l${nlev}/* forcing_in_work: - ICMCL_INIT: ICMCL${oifs.input_expid}INIT PRE2005_MIDYR_CONC: PRE2005_MIDYR_CONC.txt RCP3PD_MIDYR_CONC: RCP3PD_MIDYR_CONC.txt RCP45_MIDYR_CONC: RCP45_MIDYR_CONC.txt @@ -1007,6 +1121,7 @@ forcing_in_work: O3PI: cmip6_data/o3_pi/* O3HIST: cmip6_data/o3_histo/* O3SCEN: cmip6_data/o3_scenarios/* + ICMCL_INIT: ICMCL${oifs.input_expid}INIT #====================================================================================== @@ -1050,6 +1165,13 @@ choose_output: NAMCT0: NFRPOS: 12 NFRHIS: 12 + + "1hr": + add_namelist_changes: + fort.4: + NAMCT0: + NFRPOS: "$(( 3600 / ${time_step} * 1 ))" + NFRHIS: "$(( 3600 / ${time_step} * 1 ))" #====================================================================================== # PREPROCESS: eternal runs #====================================================================================== @@ -1085,12 +1207,14 @@ choose_eternal_run_number: ${oifs.nx} ${oifs.ensemble_id}; ${slice_icml} + ${append_icmcl} echo 'Run number for internal OpenIFS timekeeping: ${eternal_run_number}'" 2: pseudo_initial_date: "${prev_run.general.start_date}" start_ndays_source: "${start_ndays}" preprocess_method: "${general.esm_function_dir}/components/oifs/skip.sh; ${slice_icml} + ${append_icmcl} echo 'Run number for internal OpenIFS timekeeping: ${eternal_run_number}'" "*": pseudo_initial_date: "${prev_run.general.start_date}" @@ -1114,12 +1238,14 @@ choose_eternal_run_number: ${oifs.start_ndays} ${oifs.wam}; ${slice_icml} + ${append_icmcl} echo 'Long OpenIFS run. Number for internal OpenIFS timekeeping: ${eternal_run_number}'" # If this is run 1 or 2 of an experiment, lable it as branchoff choose_eternal_run_number: 0: branchoff: true + choose_general.standalone: True: slice_icml: " @@ -1133,6 +1259,8 @@ choose_general.standalone: False: slice_icml: "" +append_icmcl: "" + preprocess: preprocess_shell: method: "${preprocess_method}" @@ -1171,8 +1299,9 @@ prepcompute_recipe: - "modify_files" - "copy_files_to_work" - "report_missing_files" - - "add_vcs_info" - - "check_vcs_info_against_last_run" + # see https://github.com/esm-tools/esm_tools/discussions/774 + # - "add_vcs_info" + #- "check_vcs_info_against_last_run" - "database_entry" # this does not work as expected, solution is work in progress # - "postprocess" diff --git a/configs/components/oifs/oifs_grib_output_to_restart.sh b/configs/components/oifs/oifs_grib_output_to_restart.sh new file mode 100755 index 000000000..ddd5a09dc --- /dev/null +++ b/configs/components/oifs/oifs_grib_output_to_restart.sh @@ -0,0 +1,143 @@ +#!/bin/bash +# +# This script can be used to produce restart conditions from an OpenIFS output file +# +# Author/Contact: Joakim Kjellsson, GEOMAR, jkjellsson@geomar.de +# No support will be provided by the ESM-Tools development team w.r.t this script +# Please contact the author Joakim Kjellsson if you need help using this tool +# +# How to create restart files from OpenIFS output +# Step 1: Restart the model but only run one day and set LXIOS=false in fort.4 +# Step 2: Set indir to the workdir where the GRIB output now is +# Step 3: Set the correct EXPID etc below +# Step 4: Run this script +# Step 5: You can now use the produced ICM* files as initial conditions for +# OpenIFS to restart the model. +# Note: This does not produce a true restart, but its pretty darn close... +# +# This script needs ecCodes or grib_api installed +# This works on blogin, but not glogin +# On glogin you can find grib binaries in +# /sw/dataformats/eccodes/2.25.0/skl/gcc.8.3.0/bin/ +module load eccodes + +# Where is the output +indir="/scratch/projects/shk00018/focioifs_restarts/FOCI_GJK006/restart/oifs/4000010100/" +# What is the EXPID, i.e. ICMGGINIT +expid="ECE3" +# this is the date in the file name, e.g. ICMGGECE3+197901 for Jan 1979 +indate="400001" +# this is the date you take from the output file +# to use as initial condition for the next run +# e.g. 19790102 +# NOTE: There must only be one time step for this date +indate_cut="40000102" + +# Where do you want the resulting files to end up +targetdir="/scratch/projects/shk00018/focioifs_restarts/FOCI_GJK006/restart/oifs/4000010100/" +mkdir -vp $targetdir +# What should be the EXPID of the resulting files, e.g. ICMGGINIT +expid_tgt="ECE3" + +# These files will be used +# Note: The ICMUA file is new in 43r3. Did not exist in 40r1 +icmgg_in="${indir}/ICMGG${expid}+${indate}" +icmsh_in="${indir}/ICMSH${expid}+${indate}" +icmua_in="${indir}/ICMUA${expid}+${indate}" + +# Create a tmp dir +tmpdir="tmp" +rm -rf ${tmpdir} +mkdir -vp ${tmpdir} + +# Create a rules file for grib_filter +# This tells grib_filter to split the GRIB file +# into separate files for each variable (shortName) +# and level +cat > ${tmpdir}/gf1 < ${tmpdir}/gf2 < ${tmpdir}/gf3 <> ${tmpdir}/shinit.tmp + done +done + +# End with orography +cat ${tmpdir}/shinit.z.hybrid.1 >> ${tmpdir}/shinit.tmp + +# Now surface physics (grid point) +for var in stl1 stl2 stl3 stl4 swvl1 swvl2 swvl3 swvl4 sd src skt ci \ + lmlt lmld lblt ltlt lshf lict licd tsn asn \ + rsn sst istl1 istl2 istl3 istl4 chnk lsm sr al aluvp alnip aluvd alnid \ + lai_lv lai_hv sdfor slt sdor isor anor slor lsrh cvh cvl tvh tvl cl dl +do + cat ${tmpdir}/gginit.$var >> ${tmpdir}/gginit.tmp +done + +# Now q and o3 +for lev in {1..91} +do + for var in q o3 + do + cat ${tmpdir}/gginiua.$var.hybrid.$lev >> ${tmpdir}/gginiua.tmp + done +done + +# Then cloud variables +for lev in {1..91} +do + for var in crwc cswc clwc ciwc cc + do + cat ${tmpdir}/gginiua.$var.hybrid.$lev >> ${tmpdir}/gginiua.tmp + done +done + +# +# Move files +# +mv ${tmpdir}/gginit.tmp ${targetdir}/ICMGG${expid_tgt}INIT +mv ${tmpdir}/gginiua.tmp ${targetdir}/ICMGG${expid_tgt}INIUA +mv ${tmpdir}/shinit.tmp ${targetdir}/ICMSH${expid_tgt}INIT diff --git a/configs/components/pism/pism.recipes.yaml b/configs/components/pism/pism.recipes.yaml index 0d6218b90..b0c6b8f4f 100644 --- a/configs/components/pism/pism.recipes.yaml +++ b/configs/components/pism/pism.recipes.yaml @@ -30,7 +30,7 @@ prepcompute_recipe: - "copy_files_to_work" #- "write_simple_runscript" - "report_missing_files" - - "add_vcs_info" - - "check_vcs_info_against_last_run" + #- "add_vcs_info" + #- "check_vcs_info_against_last_run" - "database_entry" # - "submit" diff --git a/configs/components/pism/pism.yaml b/configs/components/pism/pism.yaml index 9e6e84af2..a639b3abb 100644 --- a/configs/components/pism/pism.yaml +++ b/configs/components/pism/pism.yaml @@ -62,6 +62,7 @@ comp_command: "mkdir -p build; cd build; export PISM_INSTALL_PREFIX=$(readlink - \ -DPism_USE_PARALLEL_NETCDF4:BOOL=OFF \\\n -DPism_USE_PARALLEL_HDF5:BOOL=OFF\ \ \\\n -DPism_USE_PROJ4:BOOL=YES \\\n -DPism_BUILD_EXTRA_EXECS:BOOL=ON\ \ \\\n ..; make -j4; make install;\n" +contact: "paul.gierz(at)awi.de" executable: pismr diff --git a/configs/components/recom/recom.yaml b/configs/components/recom/recom.yaml index 5ab8b3e67..3452a3c86 100644 --- a/configs/components/recom/recom.yaml +++ b/configs/components/recom/recom.yaml @@ -88,6 +88,7 @@ clean_command: ${defaults.clean_command} comp_command: mkdir -p build; cd build; cmake ..; make -j `nproc --all` install_libs: - build/librecom.a +contact: "miguel.andres-martinez(at)awi.de, ozgur.gurses(at)awi.de" model_dir: "NONE" setup_dir: "${model_dir}" @@ -98,6 +99,19 @@ scenario: "PI-CTRL" time_step: 1800 +use_ciso: false + +choose_use_ciso: + true: + recom_namelist: "namelist.recom.ciso" + add_namelist_changes: + namelist.recom: + pavariables: + ciso: true + false: + recom_namelist: "namelist.recom" + + choose_scenario: PI-CTRL: constant_CO2: true @@ -123,6 +137,9 @@ choose_scenario: lastyearoffesomcycle: "${l_year_fesom_cycle}" numofCO2cycles: "${num_CO2_cycles}" currentCO2cycle: "${current_CO2_cycle}" +#4.7.22 Ying: to use a different namelist.recom for LGM + lgm: + namelist_sce: ".lgm" "*": constant_CO2: "" REcoM_PI: "" @@ -143,6 +160,7 @@ choose_scenario: \n- numofCO2cycles\n- currentCO2cycle" ask_user_to_continue: True +namelist_sce: "" namelist_dir: "${general.model_dir}/recom/" namelists: @@ -167,8 +185,10 @@ config_files: recom: recom config_sources: - recom: "${namelist_dir}/namelist.recom" -# io.recom.ciso: "${namelist_dir}/namelist.io.recom.ciso" + recom: "${namelist_dir}/${recom_namelist}${namelist_sce}" + +config_in_work: + recom: "namelist.recom" restart_name: "" diff --git a/configs/components/rnfmap/rnfmap.yaml b/configs/components/rnfmap/rnfmap.yaml index 98f6749af..44fa92811 100644 --- a/configs/components/rnfmap/rnfmap.yaml +++ b/configs/components/rnfmap/rnfmap.yaml @@ -20,8 +20,11 @@ available_versions: - awicm-3.0 - awicm-3.1 - awicm-frontiers +- smhi - focioifs - focioifs1 +- focioifs21 +- foci211 runoff_file: '${input_dir}/runoff_maps${runoff_maps_name}.nc' @@ -42,9 +45,17 @@ choose_version: branch: esm-tools-focioifs focioifs1: branch: esm-tools-focioifs + smhi: + branch: smhi + focioifs21: + branch: runoff + foci211: + branch: foci211 + clean_command: rm -rf bin; cd src; make clean; cd .. comp_command: rm -rf bin; mkdir bin; cd src; make ; cd .. ; cp bin/rnfmap.exe ./bin/rnfma git-repository: https://gitlab.dkrz.de/ec-earth/runoff-mapper.git +contact: "jan.streffing(at)awi.de, miguel.andres-martinez(at)awi.de" install_bins: bin/rnfma ## ## Directories @@ -106,7 +117,7 @@ coupling_fields: grid: opaf choose_runoff_method: - 'new': + 'EM21': runoff_fields_recv: [R_Runoff_atm] runoff_fields_send: [R_Runoff_oce] calving_fields_send: [R_Calving_oce] @@ -115,6 +126,15 @@ choose_runoff_method: grid: rnfm "[[calving_fields_send-->FIELD]]": grid: rnfs + 'JK22': + runoff_fields_recv: [R_Runoff_atm, R_Calving_atm] + runoff_fields_send: [R_Runoff_oce] + calving_fields_send: [R_Calving_oce] + add_coupling_fields: + "[[runoff_fields_send-->FIELD]]": + grid: rnfm + "[[calving_fields_send-->FIELD]]": + grid: rnfs '*': runoff_fields_recv: [R_Runoff_atm] runoff_fields_send: [R_Runoff_oce] diff --git a/configs/components/sample/sample.yaml b/configs/components/sample/sample.yaml index 93e9e7282..4c51104a1 100644 --- a/configs/components/sample/sample.yaml +++ b/configs/components/sample/sample.yaml @@ -12,6 +12,7 @@ choose_version: branch: master git-repository: "https://github.com/mandresm/esm_sample.git" +contact: "miguel.andres-martinez(at)awi.de" install_bins: _build/sample clean_command: ${defaults.clean_command} comp_command: mkdir -p _build; gcc -Wall src/sample.c -o _build/sample diff --git a/configs/components/scope/scope.yaml b/configs/components/scope/scope.yaml index 97f7db1f6..07b385c2a 100644 --- a/configs/components/scope/scope.yaml +++ b/configs/components/scope/scope.yaml @@ -10,9 +10,10 @@ available_versions: - dev choose_version: dev: - git-repository: https://gitlab.awi.de/pgierz/scope.git + git-repository: https://gitlab.awi.de/paleodyn/Models/scope.git clean_command: pip uninstall scope-coupler comp_command: 'mkdir bin; pip install --user -e .; cp $(python -m site --user-base)/bin/scope ./bin ' +contact: "paul.gierz(at)awi.de" install_bins: - bin/scope diff --git a/configs/components/tux/tux.yaml b/configs/components/tux/tux.yaml index 4726507b9..46113cb22 100644 --- a/configs/components/tux/tux.yaml +++ b/configs/components/tux/tux.yaml @@ -24,11 +24,10 @@ clean_command: "rm -fr ${install_bins}" comp_command: "display ${install_bins}" metadata: - Institute: wiki - Description: - "Tux image" - Authors: "who knows" + Institute: "" + Description: "" + Authors: "" Publications: - - "are you serious?" + - " " License: GPL diff --git a/configs/components/vilma/vilma.yaml b/configs/components/vilma/vilma.yaml index a363f016d..b47a55fd0 100644 --- a/configs/components/vilma/vilma.yaml +++ b/configs/components/vilma/vilma.yaml @@ -100,6 +100,8 @@ choose_version: branch: ${version} nproc: 8 +contact: "miguel.andres-martinez(at)awi.de, paul.gierz(at)awi.de" + choose_scenario: ice5g: diff --git a/configs/components/xios/xios.yaml b/configs/components/xios/xios.yaml index 2f08f5294..f10aa2a30 100644 --- a/configs/components/xios/xios.yaml +++ b/configs/components/xios/xios.yaml @@ -22,12 +22,14 @@ archfile: ESMTOOLS_generic_intel available_versions: - 2.0_r982_ogcm - 2.0_r982 +- 2.0_r982_autotools - trunk - trunk_oasis - "2.5" - 2.5_r1910 - 2.5_r1910_oifs - 2.5_r1910_ogcm +- 2.5_smhi branch: esm-tools @@ -35,6 +37,10 @@ choose_version: 2.0_r982: archfile: ESMTOOLS_generic_oasis_intel use_oasis: --use_oasis oasis3_mct + 2.0_r982_autotools: + archfile: ESMTOOLS_generic_oasis_intel + use_oasis: --use_oasis oasis3_mct + branch: esm-tools-autotools 2.0_r982_ogcm: archfile: ESMTOOLS_generic_intel use_oasis: '' @@ -44,12 +50,14 @@ choose_version: archfile: ESMTOOLS_generic_intel use_oasis: '' comp_command: export XIOS_TOPLEVEL=${model_dir}; ./make_xios --arch ${archfile} --netcdf_lib netcdf4_par ${use_oasis} --job 24 --prod; cp bin/xios_server.exe bin/xios.x + contact: "swahl(at)geomar.de" trunk_oasis: git-repository: https://git.geomar.de/foci/src/xios.git branch: xios_trunk archfile: ESMTOOLS_generic_oasis_intel use_oasis: --use_oasis oasis3_mct comp_command: export XIOS_TOPLEVEL=${model_dir}; ./make_xios --arch ${archfile} --netcdf_lib netcdf4_par ${use_oasis} --job 24 --prod; cp bin/xios_server.exe bin/xios.x + contact: "swahl(at)geomar.de" "2.5": git-repository: https://gitlab.dkrz.de/ec-earth/xios-2.5.git archfile: ESMTOOLS_generic_oasis_intel @@ -62,6 +70,16 @@ choose_version: archfile: ESMTOOLS_generic_oasis_intel "*": foo: bar + # MA: yet another block, this time for albedo. We cannot fix this now, but in the + # future we should adopt the compiler suite logic for the other computers. Already + # included in ESM-Tools clickup + choose_computer.compiler_suite: + gcc: + archfile: ESMTOOLS_generic_oasis_gcc + intel-oneapi: + archfile: ESMTOOLS_levante_oasis_intel + "*": + foo: bar choose_computer.name: levante: archfile: ESMTOOLS_levante_oasis_intel @@ -83,11 +101,30 @@ choose_version: archfile: ESMTOOLS_generic_intel use_oasis: '' branch: 2.5_r1910 + 2.5_smhi: + git-repository: https://gitlab.dkrz.de/ec-earth/xios-2.5-ece + branch: main + archfile: ESMTOOLS_generic_oasis_intel + choose_computer.useMPI: # JS: This entire block is a missnomer. It's not the MPI thats imporant but the compiler cray ftn vs intel. + cray_mpich: + archfile: ESMTOOLS_generic_oasis_cray + intelmpi: + archfile: ESMTOOLS_generic_oasis_intel + parastationmpi: + archfile: ESMTOOLS_generic_oasis_intel + "*": + foo: bar + choose_computer.name: + levante: + archfile: ESMTOOLS_levante_oasis_intel + use_oasis: --use_oasis oasis3_mct + comp_command: export XIOS_TOPLEVEL=${model_dir}; ./make_xios --arch ${archfile} --netcdf_lib netcdf4_par ${use_oasis} --job 24 --prod; cp bin/xios_server.exe bin/xios.x clean_command: rm -rf bin lib obj ppsrc cfg done etc flags inc tmp comp_command: export XIOS_TOPLEVEL=${model_dir}; ./make_xios --arch ${archfile} --netcdf_lib netcdf4_par --full ${use_oasis} --job 24; cp bin/xios_server.exe bin/xios.x #destination: xios-${version} destination: xios git-repository: https://git.geomar.de/foci/src/xios.git +contact: "jan.streffing(at)awi.de, miguel.andres-martinez(at)awi.de" install_bins: bin/xios.x use_oasis: '' # @@ -101,11 +138,17 @@ config_files: choose_general.setup_name: nemo: - xml_dir: ${nemo.model_dir}/CONFIG/${nemo.version}/EXP00 - add_config_files: - domain_def: domain_def - field_def: field_def - file_def: file_def + choose_nemo.generation: + "3.6": + xml_dir: ${nemo.model_dir}/CONFIG/${nemo.version}/${nemo.reference_expid} + add_config_files: + domain_def: domain_def + field_def: field_def + file_def: file_def + "4.2": + xml_dir: ${nemo.model_dir}/cfgs/${nemo.version}/${nemo.reference_expid} + add_config_files: + nemo_xml: nemo_xml oifs: xml_dir: "${computer.pool_directories.focipool}" add_config_files: @@ -114,7 +157,7 @@ choose_general.setup_name: focioifs: xml_dir: "${computer.pool_directories.focipool}" choose_general.version: - "2.0": + "*": add_config_files: context_ifs: context_ifs ifs_xml: ifs_xml @@ -132,32 +175,38 @@ choose_general.setup_name: foci: choose_general.version: default: - xml_dir: ${nemo.model_dir}/CONFIG/${nemo.version}/EXP00 + xml_dir: ${nemo.model_dir}/CONFIG/${nemo.version}/${nemo.reference_expid} + add_config_files: + domain_def: domain_def + field_def: field_def + file_def: file_def + default_autotools: + xml_dir: ${nemo.model_dir}/CONFIG/${nemo.version}/${nemo.reference_expid} add_config_files: domain_def: domain_def field_def: field_def file_def: file_def fs: - xml_dir: ${nemo.model_dir}/CONFIG/${nemo.version}/EXP00 + xml_dir: ${nemo.model_dir}/CONFIG/${nemo.version}/${nemo.reference_expid} add_config_files: domain_def: domain_def field_def: field_def file_def: file_def default_oasismct4: - xml_dir: ${nemo.model_dir}/CONFIG/${nemo.version}/EXP00 + xml_dir: ${nemo.model_dir}/CONFIG/${nemo.version}/${nemo.reference_expid} add_config_files: domain_def: domain_def field_def: field_def file_def: file_def agrif: - xml_dir: ${nemo.model_dir}/CONFIG/${nemo.version}/EXP00 + xml_dir: ${nemo.model_dir}/CONFIG/${nemo.version}/${nemo.reference_expid} add_config_files: domain_def: domain_def field_def: field_def file_def: file_def file_def_agrif: file_def_agrif agrif_oasismct4: - xml_dir: ${nemo.model_dir}/CONFIG/${nemo.version}/EXP00 + xml_dir: ${nemo.model_dir}/CONFIG/${nemo.version}/${nemo.reference_expid} add_config_files: domain_def: domain_def field_def: field_def @@ -185,6 +234,7 @@ config_sources: grid_def: ${xml_dir}/grid_def.xml ifs_xml: ${xml_dir}/ifs_xml/* context_ifs: ${xml_dir}/context_ifs.xml + nemo_xml: ${xml_dir}/*.xml config_in_work: domain_def: domain_def.xml @@ -196,6 +246,7 @@ config_in_work: grid_def: grid_def.xml ifs_xml: ifs_xml/* context_ifs: context_ifs.xml + nemo_xml: '*.xml' ignore_sources: xios_out: xios*.out diff --git a/configs/couplings/fesom-2.0-frontiers+oifs-43r3-awicm-frontiers/fesom-2.0-frontiers+oifs-43r3-awicm-frontiers.yaml b/configs/couplings/fesom-2.0-awicm-3.1+oifs-43r3-awicm-3.1.1+xios-2.5/fesom-2.0-awicm-3.1+oifs-43r3-awicm-3.1.1+xios-2.5.yaml similarity index 72% rename from configs/couplings/fesom-2.0-frontiers+oifs-43r3-awicm-frontiers/fesom-2.0-frontiers+oifs-43r3-awicm-frontiers.yaml rename to configs/couplings/fesom-2.0-awicm-3.1+oifs-43r3-awicm-3.1.1+xios-2.5/fesom-2.0-awicm-3.1+oifs-43r3-awicm-3.1.1+xios-2.5.yaml index b0274cd69..3bf104f09 100644 --- a/configs/couplings/fesom-2.0-frontiers+oifs-43r3-awicm-frontiers/fesom-2.0-frontiers+oifs-43r3-awicm-frontiers.yaml +++ b/configs/couplings/fesom-2.0-awicm-3.1+oifs-43r3-awicm-3.1.1+xios-2.5/fesom-2.0-awicm-3.1+oifs-43r3-awicm-3.1.1+xios-2.5.yaml @@ -1,8 +1,9 @@ components: -- rnfmap-awicm-frontiers -- oifs-43r3-awicm-frontiers -- fesom-2.0-frontiers -- oasis3mct-4.0-awicm-frontiers +- xios-2.5 +- rnfmap-awicm-3.1 +- oifs-43r3-awicm-3.1.1 +- fesom-2.0-awicm-3.1 +- oasis3mct-4.0-awicm-3.1 coupling_changes: - sed -i '/COUPLENEMOECE = /s/.TRUE./.FALSE./g' oifs-43r3/src/ifs/module/yommcc.F90 - sed -i '/COUPLEFESOM2 = /s/.FALSE./.TRUE./g' oifs-43r3/src/ifs/module/yommcc.F90 diff --git a/configs/couplings/fesom-2.0-awicm-3.1+oifs-43r3-awicm-3.1.2+xios-2.5/fesom-2.0-awicm-3.1+oifs-43r3-awicm-3.1.2+xios-2.5.yaml b/configs/couplings/fesom-2.0-awicm-3.1+oifs-43r3-awicm-3.1.2+xios-2.5/fesom-2.0-awicm-3.1+oifs-43r3-awicm-3.1.2+xios-2.5.yaml new file mode 100644 index 000000000..583e8cd9a --- /dev/null +++ b/configs/couplings/fesom-2.0-awicm-3.1+oifs-43r3-awicm-3.1.2+xios-2.5/fesom-2.0-awicm-3.1+oifs-43r3-awicm-3.1.2+xios-2.5.yaml @@ -0,0 +1,11 @@ +components: +- xios-2.5 +- rnfmap-awicm-3.1 +- oifs-43r3-awicm-3.1.2 +- fesom-2.0-awicm-3.1 +- oasis3mct-4.0-awicm-3.1 +coupling_changes: +- sed -i '/COUPLENEMOECE = /s/.TRUE./.FALSE./g' oifs-43r3/src/ifs/module/yommcc.F90 +- sed -i '/COUPLEFESOM2 = /s/.FALSE./.TRUE./g' oifs-43r3/src/ifs/module/yommcc.F90 +- sed -i '/COUPLENEMOFOCI = /s/.TRUE./.FALSE./g' oifs-43r3/src/ifs/module/yommcc.F90 + diff --git a/configs/couplings/fesom-2.0-master+oifs-43r3-master/fesom-2.0-master+oifs-43r3-master.yaml b/configs/couplings/fesom-2.0-master+oifs-43r3-master/fesom-2.0-master+oifs-43r3-master.yaml index f3a5b47a1..64fc043a1 100644 --- a/configs/couplings/fesom-2.0-master+oifs-43r3-master/fesom-2.0-master+oifs-43r3-master.yaml +++ b/configs/couplings/fesom-2.0-master+oifs-43r3-master/fesom-2.0-master+oifs-43r3-master.yaml @@ -1,10 +1,13 @@ components: -- rnfmap-awicm-frontiers +- xios-2.5_smhi +- rnfmap-smhi - oifs-43r3-master - fesom-2.0-master -- oasis3mct-4.0-awicm-frontiers +- oasis3mct-5.0-smhi coupling_changes: - sed -i '/COUPLENEMOECE = /s/.TRUE./.FALSE./g' oifs-43r3/src/ifs/module/yommcc.F90 - sed -i '/COUPLEFESOM2 = /s/.FALSE./.TRUE./g' oifs-43r3/src/ifs/module/yommcc.F90 - sed -i '/COUPLENEMOFOCI = /s/.TRUE./.FALSE./g' oifs-43r3/src/ifs/module/yommcc.F90 +- sed -i '/LNEMOLIMCUR = /s/.FALSE./.TRUE./g' oifs-43r3/src/ifs/module/yommcc.F90 +- sed -i '/LECONPERSNOW = /s/.FALSE./.TRUE./g' oifs-43r3/src/ifs/module/yommcc.F90 diff --git a/configs/couplings/fesom-2.1-wiso+echam-6.3.05p2-wiso+recom-2.0/fesom-2.1-wiso+echam-6.3.05p2-wiso+recom-2.0.yaml b/configs/couplings/fesom-2.1-recom-par_tracers_mpi+echam-6.3.05p2-wiso+recom-2.0/fesom-2.1-recom-par_tracers_mpi+echam-6.3.05p2-wiso+recom-2.0.yaml similarity index 79% rename from configs/couplings/fesom-2.1-wiso+echam-6.3.05p2-wiso+recom-2.0/fesom-2.1-wiso+echam-6.3.05p2-wiso+recom-2.0.yaml rename to configs/couplings/fesom-2.1-recom-par_tracers_mpi+echam-6.3.05p2-wiso+recom-2.0/fesom-2.1-recom-par_tracers_mpi+echam-6.3.05p2-wiso+recom-2.0.yaml index 56679a29d..eb3e09d11 100644 --- a/configs/couplings/fesom-2.1-wiso+echam-6.3.05p2-wiso+recom-2.0/fesom-2.1-wiso+echam-6.3.05p2-wiso+recom-2.0.yaml +++ b/configs/couplings/fesom-2.1-recom-par_tracers_mpi+echam-6.3.05p2-wiso+recom-2.0/fesom-2.1-recom-par_tracers_mpi+echam-6.3.05p2-wiso+recom-2.0.yaml @@ -1,7 +1,10 @@ components: - echam-6.3.05p2-wiso - fesom-2.1-recom -- oasis3mct-2.8-paleodyn + +# kh 09.06.22 +- oasis3mct-2.8-paleodyn-multi-group-support + coupling_changes: - sed -i '/ECHAM6_COUPLED/s/OFF/ON/g' echam-6.3.05p2-wiso/config/mh-linux - sed -ir '/..FC_DEFINE}__cpl_mpiom/s/..FC_DEFINE}__cpl_mpiom//g' echam-6.3.05p2-wiso/configure.ac diff --git a/configs/couplings/nemo-ORCA05_LIM2_KCM_AGRIF_OASISMCT4+oifs43r3-foci21/nemo-ORCA05_LIM2_KCM_AGRIF_OASISMCT4+oifs43r3-foci21.yaml b/configs/couplings/nemo-ORCA05_LIM2_KCM_AGRIF_OASISMCT4+oifs43r3-foci21/nemo-ORCA05_LIM2_KCM_AGRIF_OASISMCT4+oifs43r3-foci21.yaml new file mode 100644 index 000000000..115052be9 --- /dev/null +++ b/configs/couplings/nemo-ORCA05_LIM2_KCM_AGRIF_OASISMCT4+oifs43r3-foci21/nemo-ORCA05_LIM2_KCM_AGRIF_OASISMCT4+oifs43r3-foci21.yaml @@ -0,0 +1,9 @@ +components: +- oifs-43r3-foci21 +- nemo-ORCA05_LIM2_KCM_AGRIF_OASISMCT4 +- oasis3mct-EM21 +- rnfmap-focioifs21 +coupling_changes: +- sed -i '/COUPLENEMOECE = /s/.TRUE./.FALSE./g' oifs-43r3-foci21/src/ifs/module/yommcc.F90 +- sed -i '/COUPLEFESOM2 = /s/.TRUE./.FALSE./g' oifs-43r3-foci21/src/ifs/module/yommcc.F90 +- sed -i '/COUPLENEMOFOCI = /s/.FALSE./.TRUE./g' oifs-43r3-foci21/src/ifs/module/yommcc.F90 \ No newline at end of file diff --git a/configs/couplings/nemo-ORCA05_LIM2_KCM_AOW_FS_OASISMCT4+oifs43r3-foci21/nemo-ORCA05_LIM2_KCM_AOW_FS_OASISMCT4+oifs43r3-foci21.yaml b/configs/couplings/nemo-ORCA05_LIM2_KCM_AOW_FS_OASISMCT4+oifs43r3-foci21/nemo-ORCA05_LIM2_KCM_AOW_FS_OASISMCT4+oifs43r3-foci21.yaml new file mode 100644 index 000000000..af4c1be5d --- /dev/null +++ b/configs/couplings/nemo-ORCA05_LIM2_KCM_AOW_FS_OASISMCT4+oifs43r3-foci21/nemo-ORCA05_LIM2_KCM_AOW_FS_OASISMCT4+oifs43r3-foci21.yaml @@ -0,0 +1,10 @@ +components: +- oifs-43r3-foci21 +- nemo-ORCA05_LIM2_KCM_AOW_FS_OASISMCT4 +- oasis3mct-EM21 +- rnfmap-focioifs21 +- xios-2.5_r1910 +coupling_changes: +- sed -i '/COUPLENEMOECE = /s/.TRUE./.FALSE./g' oifs-43r3-foci21/src/ifs/module/yommcc.F90 +- sed -i '/COUPLEFESOM2 = /s/.TRUE./.FALSE./g' oifs-43r3-foci21/src/ifs/module/yommcc.F90 +- sed -i '/COUPLENEMOFOCI = /s/.FALSE./.TRUE./g' oifs-43r3-foci21/src/ifs/module/yommcc.F90 diff --git a/configs/couplings/nemo-ORCA05_LIM2_KCM_AOW_FS_OASISMCT4+oifs43r3-foci211/nemo-ORCA05_LIM2_KCM_AOW_FS_OASISMCT4+oifs43r3-foci211.yaml b/configs/couplings/nemo-ORCA05_LIM2_KCM_AOW_FS_OASISMCT4+oifs43r3-foci211/nemo-ORCA05_LIM2_KCM_AOW_FS_OASISMCT4+oifs43r3-foci211.yaml new file mode 100644 index 000000000..094de42f0 --- /dev/null +++ b/configs/couplings/nemo-ORCA05_LIM2_KCM_AOW_FS_OASISMCT4+oifs43r3-foci211/nemo-ORCA05_LIM2_KCM_AOW_FS_OASISMCT4+oifs43r3-foci211.yaml @@ -0,0 +1,10 @@ +components: +- oifs-43r3-foci211 +- nemo-ORCA05_LIM2_KCM_AOW_FS_OASISMCT4 +- oasis3mct-EM21 +- rnfmap-foci211 +- xios-2.5_r1910 +coupling_changes: +- sed -i '/COUPLENEMOECE = /s/.TRUE./.FALSE./g' oifs-43r3-foci211/src/ifs/module/yommcc.F90 +- sed -i '/COUPLEFESOM2 = /s/.TRUE./.FALSE./g' oifs-43r3-foci211/src/ifs/module/yommcc.F90 +- sed -i '/COUPLENEMOFOCI = /s/.FALSE./.TRUE./g' oifs-43r3-foci211/src/ifs/module/yommcc.F90 diff --git a/configs/couplings/nemo-ORCA05_LIM2_KCM_AOW_FS_OASISMCT4+oifs43r3-foci211/nemo-ORCA05_LIM2_KCM_AOW_FS_OASISMCT4+oifs43r3-foci211.yaml~ b/configs/couplings/nemo-ORCA05_LIM2_KCM_AOW_FS_OASISMCT4+oifs43r3-foci211/nemo-ORCA05_LIM2_KCM_AOW_FS_OASISMCT4+oifs43r3-foci211.yaml~ new file mode 100644 index 000000000..089bc39c0 --- /dev/null +++ b/configs/couplings/nemo-ORCA05_LIM2_KCM_AOW_FS_OASISMCT4+oifs43r3-foci211/nemo-ORCA05_LIM2_KCM_AOW_FS_OASISMCT4+oifs43r3-foci211.yaml~ @@ -0,0 +1,10 @@ +components: +- oifs-43r3-foci211 +- nemo-ORCA05_LIM2_KCM_AOW_FS_OASISMCT4 +- oasis3mct-EM21 +- rnfmap-foci211 +- xios-2.5_r1910 +coupling_changes: +- sed -i '/COUPLENEMOECE = /s/.TRUE./.FALSE./g' oifs-43r3-foci21/src/ifs/module/yommcc.F90 +- sed -i '/COUPLEFESOM2 = /s/.TRUE./.FALSE./g' oifs-43r3-foci21/src/ifs/module/yommcc.F90 +- sed -i '/COUPLENEMOFOCI = /s/.FALSE./.TRUE./g' oifs-43r3-foci21/src/ifs/module/yommcc.F90 diff --git a/configs/couplings/nemo-ORCA05_LIM2_KCM_AOW_autotools+echam-6.3.05p2-foci_autotools/nemo-ORCA05_LIM2_KCM_AOW_autotools+echam-6.3.05p2-foci_autotools.yaml b/configs/couplings/nemo-ORCA05_LIM2_KCM_AOW_autotools+echam-6.3.05p2-foci_autotools/nemo-ORCA05_LIM2_KCM_AOW_autotools+echam-6.3.05p2-foci_autotools.yaml new file mode 100644 index 000000000..3f8a787b0 --- /dev/null +++ b/configs/couplings/nemo-ORCA05_LIM2_KCM_AOW_autotools+echam-6.3.05p2-foci_autotools/nemo-ORCA05_LIM2_KCM_AOW_autotools+echam-6.3.05p2-foci_autotools.yaml @@ -0,0 +1,5 @@ +components: +- oasis3mct-foci_autotools +- echam-6.3.05p2-foci_autotools +- xios-2.0_r982_autotools +- nemo-ORCA05_LIM2_KCM_AOW_autotools diff --git a/configs/couplings/nemo-ORCA12_LIM2_KCM_AOW_FS_OASISMCT4+oifs43r3-foci21/nemo-ORCA12_LIM2_KCM_AOW_FS_OASISMCT4+oifs43r3-foci21.yaml b/configs/couplings/nemo-ORCA12_LIM2_KCM_AOW_FS_OASISMCT4+oifs43r3-foci21/nemo-ORCA12_LIM2_KCM_AOW_FS_OASISMCT4+oifs43r3-foci21.yaml new file mode 100644 index 000000000..ee743230b --- /dev/null +++ b/configs/couplings/nemo-ORCA12_LIM2_KCM_AOW_FS_OASISMCT4+oifs43r3-foci21/nemo-ORCA12_LIM2_KCM_AOW_FS_OASISMCT4+oifs43r3-foci21.yaml @@ -0,0 +1,10 @@ +components: +- oifs-43r3-foci21 +- nemo-ORCA12_LIM2_KCM_AOW_FS_OASISMCT4 +- oasis3mct-EM21 +- rnfmap-focioifs21 +- xios-2.5_r1910 +coupling_changes: +- sed -i '/COUPLENEMOECE = /s/.TRUE./.FALSE./g' oifs-43r3-foci21/src/ifs/module/yommcc.F90 +- sed -i '/COUPLEFESOM2 = /s/.TRUE./.FALSE./g' oifs-43r3-foci21/src/ifs/module/yommcc.F90 +- sed -i '/COUPLENEMOFOCI = /s/.FALSE./.TRUE./g' oifs-43r3-foci21/src/ifs/module/yommcc.F90 diff --git a/configs/esm_software/esm_runscripts/defaults_geomar.yaml b/configs/esm_software/esm_runscripts/defaults_geomar.yaml deleted file mode 100644 index f2477cbea..000000000 --- a/configs/esm_software/esm_runscripts/defaults_geomar.yaml +++ /dev/null @@ -1,41 +0,0 @@ -#per_model_defaults: -# file_movements: -# default: -# all_directions: copy -# bin: -# init_to_exp: copy -# exp_to_run: copy -# run_to_work: copy -# work_to_run: copy -# -# GEOMAR defaults -per_model_defaults: - file_movements: - default: - all_directions: copy - log: - all_directions: copy - bin: - init_to_exp: copy - exp_to_run: copy - run_to_work: copy - work_to_run: copy - forcing: - all_directions: link - input: - all_directions: link - restart_in: - # seb-wahl: need to copy restart files by default - # as oasis modifies the restart file !!!! - init_to_exp: copy - exp_to_run: copy - run_to_work: copy - work_to_run: link - restart_out: - all_directions: copy - config: - init_to_exp: copy - exp_to_run: link - run_to_work: link - work_to_run: link - diff --git a/configs/esm_software/esm_runscripts/esm_plugins.yaml b/configs/esm_software/esm_runscripts/esm_plugins.yaml index 3d6eac583..4c2d2ae94 100644 --- a/configs/esm_software/esm_runscripts/esm_plugins.yaml +++ b/configs/esm_software/esm_runscripts/esm_plugins.yaml @@ -13,8 +13,8 @@ core: - "initialize_batch_system" - "initialize_coupler" - "set_logfile" - - "add_vcs_info" - - "check_vcs_info_against_last_run" + #- "add_vcs_info" + #- "check_vcs_info_against_last_run" - "check_config_for_warnings_errors" prepexp: diff --git a/configs/esm_software/esm_runscripts/esm_runscripts.yaml b/configs/esm_software/esm_runscripts/esm_runscripts.yaml index 29d9d0d95..a7a0b3cb4 100644 --- a/configs/esm_software/esm_runscripts/esm_runscripts.yaml +++ b/configs/esm_software/esm_runscripts/esm_runscripts.yaml @@ -91,8 +91,8 @@ choose_job_type: - "copy_files_to_work" #- "write_simple_runscript" - "report_missing_files" - - "add_vcs_info" - - "check_vcs_info_against_last_run" + #- "add_vcs_info" + #- "check_vcs_info_against_last_run" - "_write_finalized_config" - "database_entry" #- "submit" diff --git a/configs/machines/albedo.yaml b/configs/machines/albedo.yaml new file mode 100644 index 000000000..e482cd483 --- /dev/null +++ b/configs/machines/albedo.yaml @@ -0,0 +1,210 @@ +################################################################################ +# The albedo.awi.de yaml config file for esm-tools +# +# P. Gierz, Nov/Dec 2022 +# M. Andres-Martinez, Nov/Dec 2022 +################################################################################ +name: albedo +# Could be useful if this is extraced from /etc/os-distro: +operating_system: "linux-rocky" +sh_interpreter: "/usr/bin/bash" +# Batch system and configuration: +batch_system: "slurm" +accounting: true +further_reading: + - batch_system/slurm.yaml +partitions: + compute: + name: mpp + cores_per_node: 128 + pp: + name: smp + cores_per_node: 1 + +# compute node hardware information: +logical_cpus_per_core: 2 +threads_per_core: 1 + +# pool directory information: +pool_directories: + pool: "/albedo/pool" + projects: "/albedo/work/projects" + focipool: "/dev/null" +pool_dir: "${computer.pool_directories.pool}" + +hyper_flag: "" # No hyperthreading on albedo is supported in esm-tools (yet)! +choose_heterogeneous_parallelization: + True: + choose_taskset: + False: + add_export_vars: + I_MPI_SLURM_EXT: 0 + "*": + taskset_chs: "" + add_unset_vars: + - "SLURM_DISTRIBUTION" + - "SLURM_NTASKS" + - "SLURM_NPROCS" + - "SLURM_ARBITRARY_NODELIST" + +hetjob_flag: packjob + +unset_vars: + - "SLURM_MEM_PER_NODE" + - "SLURM_MEM_PER_CPU" + +# QOS selection +# Calculate minutes of cpomputing time +compute_time_minutes: "$(( + ${compute_time!hour}*60 + ${compute_time!minute} + ${compute_time!second}/60 + ))" +# Define the QOS based on the minutes of computing time +qos: "$(( + '30min' if ${compute_time_minutes} <= 30 else + '12h' if ${compute_time_minutes} <= 720 else '48h' + ))" +additional_flags: ["--qos=${qos}"] + +mpi_implementation: openmpi +choose_mpi_implementation: + intel-oneapi-mpi: + mpi_implementation_module: intel-oneapi-mpi/2021.6.0 + mpi_implementation_suffix: intel-oneapi-mpi2021.6.0 + openmpi: + mpi_implementation_module: openmpi/4.1.3 + mpi_implementation_suffix: openmpi4.1.3 + +compiler_suite: intel-oneapi +choose_compiler_suite: + gcc: + compiler_module: gcc/12.1.0 + mkl_module: intel-oneapi-mkl/2022.1.0 + mkl_root: /albedo/soft/sw/spack-sw/intel-oneapi-mkl/2022.1.0-akthm3n/mkl/2022.1.0 + mpi_module: openmpi/4.1.3-gcc12.1.0 + hdf5_module: hdf5/1.12.2-openmpi4.1.3-gcc12.1.0 + netcdfc_module: netcdf-c/4.8.1-openmpi4.1.3-gcc12.1.0 + netcdff_module: netcdf-fortran/4.5.4-openmpi4.1.3-gcc12.1.0 + netcdfcxx_module: netcdf-cxx4/4.3.1-openmpi4.1.3-gcc12.1.0 + eccodes_module: eccodes/2.25.0-openmpi4.1.3-gcc12.1.0 + fc: mpifort + f77: mpifort + mpifc: mpifort + mpicc: mpicc + cc: mpicc + cxx: mpicxx + + add_export_vars: + # I/O libraries + HDF5ROOT: "/albedo/soft/sw/spack-sw/hdf5/1.12.2-rgostku/" + NETCDFROOT: "/albedo/soft/sw/spack-sw/netcdf-c/4.8.1-i5n4n63/" + NETCDFFROOT: "/albedo/soft/sw/spack-sw/netcdf-fortran/4.5.4-yb7woqz/" + ECCODESROOT: "/albedo/soft/sw/spack-sw/eccodes/2.25.0-vhmiess/" + + intel-oneapi: + compiler_module: intel-oneapi-compilers/2022.1.0 + mkl_module: intel-oneapi-mkl/2022.1.0-gcc12.1.0 + mkl_root: /albedo/soft/sw/spack-sw/intel-oneapi-mkl/2022.1.0-akthm3n/mkl/2022.1.0 + mpi_module: openmpi/4.1.3-intel2021.6.0 + hdf5_module: hdf5/1.12.2-openmpi4.1.3-intel2021.6.0 + netcdfc_module: netcdf-c/4.8.1-openmpi4.1.3-intel2021.6.0 + netcdff_module: netcdf-fortran/4.5.4-openmpi4.1.3-intel2021.6.0 + netcdfcxx_module: netcdf-cxx4/4.3.1-openmpi4.1.3-intel2021.6.0 + eccodes_module: eccodes/2.25.0-openmpi4.1.3-intel2021.6.0 + fc: mpif90 + f77: mpif90 + mpifc: mpif90 + mpicc: mpicc + cc: mpicc + cxx: mpic++ + + add_export_vars: + # I/O libraries + HDF5ROOT: "/albedo/soft/sw/spack-sw/hdf5/1.12.2-mstdrjw/" + NETCDFROOT: "/albedo/soft/sw/spack-sw/netcdf-c/4.8.1-vvxxdc3/" + NETCDFFROOT: "/albedo/soft/sw/spack-sw/netcdf-fortran/4.5.4-uwfs3bu/" + ECCODESROOT: "/albedo/soft/sw/spack-sw/eccodes/2.25.0-vn2k575/" + +module_actions: + # Ensure a clean environment before start: + - "purge" + # Compilers: + - "load ${compiler_module}" + - "load ${mkl_module}" + # MPI Implementation: + - "load ${mpi_module}" + # Libraries: + - "load udunits/2.2.28" + - "load ${hdf5_module}" + - "load ${netcdfc_module}" + - "load ${netcdff_module}" + - "load ${netcdfcxx_module}" + - "load ${eccodes_module}" + # General Tools: + - "load cdo/2.0.5" + - "load nco/5.0.1" + - "load git/2.35.2" + - "load perl/5.35.0-gcc12.1.0" + - "load python/3.10.4" + # Show what is there in the log: + - "list" + +export_vars: + # Basics: + LC_ALL: en_US.UTF-8 + + # Compilers: + FC: ${fc} + F77: ${f77} + MPIFC: ${mpifc} + MPICC: ${mpicc} + CC: ${cc} + CXX: ${cxx} + + CPU_MODEL: AMD_EPYC_ZEN2 + FESOM_PLATFORM_STRATEGY: albedo + + # PERL library + PERL5LIB: "/albedo/soft/sw/spack-sw/perl-uri/1.72-epj7s32/lib/perl5:/albedo/soft/sw/spack-sw/perl/5.35.0-asf6m5t/lib" + + # I/O libraries + HDF5ROOT: "" + NETCDFROOT: "" + NETCDFFROOT: "" + ECCODESROOT: "" + + OASIS3MCT_FC_LIB: '"-L$NETCDFFROOT/lib -lnetcdff"' + + # Message Passing Interface (MPI) environment variables: + # MPIROOT: "$(${mpifc} -show | perl -lne 'm{ -I(.*?)/include } and print $1')" + # NOTE(PG): I do not like this....should be set via module file, or fixed in model + MPIROOT: "$(${mpifc} -show | perl -lne 'm{ -I(.*?)/include } and print $1')" + MPI_LIB: "$(${mpifc} -show |sed -e 's/^[^ ]*//' -e 's/-[I][^ ]*//g')" + + # Linear-Algebra Library environment variables: + # FIXME(PG): This would be nicer... + # LAPACK_LIB: "$(mkl_link_tool --quiet -libs $MPIF90)" + # NOTE(PG): I do not like this....should be set via module file, or fixed in model + LAPACK_LIB: "'-L${mkl_root} -lmkl_intel_lp64 -lmkl_core -lmkl_sequential -lm -ldl'" + + LD_LIBRARY_PATH[(1)]: ${mkl_root}/lib/intel64:$LD_LIBRARY_PATH + + PATH[(1)]: "$PERL5LIB/../bin:$PATH" + PATH[(2)]: "$PATH:$ECCODESROOT/bin" #$HDF5ROOT/bin:$NETCDFFROOT/bin:$NETCDFROOT/bin:$ECCODESROOT/bin:$PATH + +warning: + testing: + message: " + ``Albedo Support for ESM-Tools is still in testing phase``. Most of the important + modules are already in the environment and many models compile already. + However, we cannot ensure that models will run smoothly due to missing + environment variables, pool problems, incorrect or not optimal compiler + flags... Feel free to try it a report and issue in https://github.com/esm-tools/esm_tools/issues + labelling it with the ``albedo`` tag, if things don't work as expected. By + running ``esm_tools test-state`` you'll get information of what you can + expect to work and what not. Bare in mind that the ESM-Tools configurations + specific to Albedo will be changing fast on the following weeks, until + Albedo is fully supported. We recommend against using it for production + runs.\n\n + We kindly ask for your patience and collaboration.\n + The ESM-Tools Team + " diff --git a/configs/machines/all_machines.yaml b/configs/machines/all_machines.yaml index e0caed4ae..4ca9f8448 100644 --- a/configs/machines/all_machines.yaml +++ b/configs/machines/all_machines.yaml @@ -1,3 +1,15 @@ +# NOTE(PG): Question to be clarified during code review. Why does this file exist? +# This is all information that could be instead contained in each individual +# machine file +albedo: + login_nodes: + - 'albedo0' + - 'albedo1' + compute_nodes: 'prod-*' + gpu_nodes: 'gpu-*' + fat_nodes: 'fat-*' + post_nodes: None + ollie: login_nodes: - 'ollie0' @@ -11,7 +23,7 @@ mistral: levante: login_nodes: 'levante*' - compute_nodes: '^l[A-Za-z0-9]+\.atos\.local$' + compute_nodes: '^l[A-Za-z0-9]+\.lvt\.dkrz.de$' # post_nodes: '' juwels: diff --git a/configs/machines/blogin.yaml b/configs/machines/blogin.yaml index 817c92d9e..8f1ebb94d 100644 --- a/configs/machines/blogin.yaml +++ b/configs/machines/blogin.yaml @@ -5,6 +5,8 @@ account: None # set default for hyperthreading_flag use_hyperthreading: False +# seb-wahl: use old heterogeneous parallelization on HLRN4, the new approach does not work yet +taskset: true choose_use_hyperthreading: "1": hyperthreading_flag: "" @@ -95,6 +97,7 @@ module_actions: - "load sw.skl" - "load cmake" - "load cdo nco" + - "load git" export_vars: LC_ALL: en_US.UTF-8 @@ -166,11 +169,13 @@ choose_iolibraries: system_libs: # TODO: find the correct libraries and dependencies add_module_actions: - - "load netcdf" + - "load netcdf/intel/4.7.3" # TODO: find the correct libraries and dependencies add_export_vars: NETCDF_DIR: /sw/dataformats/netcdf/intel.18/4.7.3/skl/ LD_LIBRARY_PATH: $NETCDF_DIR/lib/:$LD_LIBRARY_PATH + NETCDF_CXX_INCLUDE_DIRECTORIES: $NETCDF_DIR/include + NETCDF_CXX_LIBRARIES: $NETCDF_DIR/lib geomar_libs: add_export_vars: diff --git a/configs/machines/generic.yaml b/configs/machines/generic.yaml index d1f790a2e..d779571d9 100644 --- a/configs/machines/generic.yaml +++ b/configs/machines/generic.yaml @@ -2,8 +2,6 @@ name: generic accounting: false - - hetjob_flag: "?" # either hetjob or packjob batch_system: "slurm" @@ -44,3 +42,24 @@ cxx: "unset" further_reading: - batch_system/slurm.yaml + +choose_general.check: + False: + error: + generic.yaml: + message: " + You are trying to run an actual simulation with the environment from + ``configs/machines/generic.yaml``. This is not allowed, you should + always run using a specific machine file. The ``generic.yaml`` file + is only aimed for local testing of ESM-Tools functionalities and dry + check runs (``esm_runscripts -c``).\n + + If you are running on an HPC and you're seeing this message, it's + likely that the HOSTNAME of your machine does not match the + pattern defined in ``configs/machines/all_machines.yaml``. Please, + check that your machine is included in that file and that the + ``configs/machines/.yaml`` exists.\n + + For more info on how to implement a new machine in ESM-Tools check: + https://esm-tools.readthedocs.io/en/latest/cookbook.html#implement-a-new-hpc-machine\\ + " diff --git a/configs/machines/glogin.yaml b/configs/machines/glogin.yaml index 5090971e1..1c11e8435 100644 --- a/configs/machines/glogin.yaml +++ b/configs/machines/glogin.yaml @@ -5,6 +5,8 @@ account: None # set default for hyperthreading_flag use_hyperthreading: False +# seb-wahl: use old heterogeneous parallelization on HLRN4, the new approach does not work yet +taskset: true choose_use_hyperthreading: "1": hyperthreading_flag: "" @@ -77,6 +79,8 @@ pool_dir: "/scratch/usr/hbkawi" # default settings for compiler, mpi and I/O libs # TODO: system_libs not yet properly configured as I (seb-wahl) don't use them compiler_mpi: intel2019_impi2019 +# to compile nemo standalone, comment the line above and uncomment the one below +#compiler_mpi: intel2019_impi2019_nemo4 #iolibraries: system_libs # # for FOCIOIFS use @@ -95,6 +99,7 @@ module_actions: - "load sw.skl" - "load cmake" - "load cdo nco" + - "load git" export_vars: LC_ALL: en_US.UTF-8 @@ -153,11 +158,13 @@ choose_iolibraries: system_libs: # TODO: find the correct libraries and dependencies add_module_actions: - - "load netcdf" + - "load netcdf/intel/4.7.3" # TODO: find the correct libraries and dependencies add_export_vars: NETCDF_DIR: /sw/dataformats/netcdf/intel.18/4.7.3/skl/ LD_LIBRARY_PATH: $NETCDF_DIR/lib/:$LD_LIBRARY_PATH + NETCDF_CXX_INCLUDE_DIRECTORIES: $NETCDF_DIR/include + NETCDF_CXX_LIBRARIES: $NETCDF_DIR/lib geomar_libs: add_export_vars: diff --git a/configs/other_software/vcs/git.yaml b/configs/other_software/vcs/git.yaml index 032be7a47..a056935ed 100644 --- a/configs/other_software/vcs/git.yaml +++ b/configs/other_software/vcs/git.yaml @@ -1,4 +1,3 @@ -# get_command: "git clone ${define_branch} ${define_tag} ${repository}" get_command: "git clone ${define_options} ${define_branch} ${define_tag} ${repository}" update_command: "git pull" status_command: "git status" diff --git a/configs/setups/awicm/awicm.yaml b/configs/setups/awicm/awicm.yaml index 0b11448d2..3752e1129 100644 --- a/configs/setups/awicm/awicm.yaml +++ b/configs/setups/awicm/awicm.yaml @@ -105,13 +105,6 @@ jsbach: dynveg_file_ending: "" no_dynveg_file_ending: "" - choose_scenario_is_ssp: - True: - add_forcing_files: - Ndepo: Ndepo_ssp - popdens: popdens_ssp - cover_fract: cover_fract_ssp - ######################################################################################### diff --git a/configs/setups/awicm3/awicm3.yaml b/configs/setups/awicm3/awicm3.yaml index d2cd0e666..2ac1f8722 100644 --- a/configs/setups/awicm3/awicm3.yaml +++ b/configs/setups/awicm3/awicm3.yaml @@ -19,27 +19,49 @@ general: available_versions: - 'v3.0' - 'v3.1' + - 'v3.1.1' + - 'v3.1.2' - 'master' - - 'frontiers' - 'frontiers-xios' choose_version: v3.0: + major_version: v3.0 couplings: - fesom-2.0-awicm-3.0+oifs-43r3-awicm-3.0 v3.1: + major_version: v3.1 couplings: - fesom-2.0-awicm-3.1+oifs-43r3-awicm-3.1+xios-2.5 add_include_models: - xios add_further_reading: - xios/xios.env.yaml + v3.1.1: + major_version: v3.1 + couplings: + - fesom-2.0-awicm-3.1+oifs-43r3-awicm-3.1.1+xios-2.5 + add_include_models: + - xios + add_further_reading: + - xios/xios.env.yaml + v3.1.2: + major_version: v3.1 + couplings: + - fesom-2.0-awicm-3.1+oifs-43r3-awicm-3.1.2+xios-2.5 + add_include_models: + - xios + add_further_reading: + - xios/xios.env.yaml master: + major_version: master couplings: - fesom-2.0-master+oifs-43r3-master - frontiers: - couplings: - - fesom-2.0-frontiers+oifs-43r3-awicm-frontiers + add_include_models: + - xios + add_further_reading: + - xios/xios.env.yaml frontiers-xios: + major_version: frontiers-xios couplings: - fesom-2.0-frontiers+oifs-43r3-awicm-frontiers-xios+xios-2.5 add_include_models: @@ -67,6 +89,10 @@ general: pool_dir: "/proj/awi/input" blogin: pool_dir: "/scratch/usr/hbkawi/AWICM3_INPUT/input" + albedo: + pool_dir: "/albedo/scratch/user/mandresm/test_pool/input" + "*": + pool_dir: "TO-BE-DEFINED-BY-THE-USER" # Load compute recipe from oifs.yaml prepcompute_recipe: ${oifs.prepcompute_recipe} @@ -97,7 +123,6 @@ oifs: restart_rate: 12 ocean_resolution: "${fesom.resolution}" - mip: "cmip6" scenario: "historical" prepifs_expid: h6mv @@ -106,12 +131,16 @@ oifs: rtables_dir: ${input_dir}/rtables/ forcing_dir: ${input_dir}/${version}/ifsdata/ ifsdata_dir: ${input_dir}/${version}/ifsdata/ - choose_general.version: + choose_general.major_version: "v3.0": namelist_dir: ${general.esm_namelist_dir}/oifs/${version}/awicm3/v3.0 + mip: "cmip6" + wam: true "v3.1": with_xios: True - namelist_dir: ${general.esm_namelist_dir}/oifs/${version}/awicm3/frontiers + namelist_dir: ${general.esm_namelist_dir}/oifs/${version}/awicm3/v3.1 + mip: "cmip6" + wam: true add_namelist_changes: fort.4: NAMCT0: @@ -127,11 +156,38 @@ oifs: NAERAD: NSOLARSPECTRUM: "1" - "frontiers": - namelist_dir: ${general.esm_namelist_dir}/oifs/${version}/awicm3/frontiers "frontiers-xios": with_xios: True namelist_dir: ${general.esm_namelist_dir}/oifs/${version}/awicm3/frontiers + mip: "cmip6" + wam: true + add_namelist_changes: + fort.4: + NAMCT0: + LXIOS: TRUE + NAMIO_SERV: + NPROC_IO: 2 + NPROCESS_LEVEL: 5 + NIO_SERV_METHOD: 2 + NMSG_LEVEL_CLIENT: 0 + NMSG_LEVEL_SERVER: 1 + "master": + with_xios: True + namelist_dir: ${general.esm_namelist_dir}/oifs/${version}/awicm3/master + mip: "false" + wam: false + executable: OpenIFS + cloudfixer: 0 + append_icmcl: " + ${general.esm_function_dir}/components/oifs/append_icmcl_file.sh + ${thisrun_input_dir}/ + ${icmcl_dir}/${res_level}/${icmcl_file} + ${oifs.input_expid} + ${start_date!syear!smonth!sday} + ${icmcl_end_date_formatted} + ${work_dir};" + + add_namelist_changes: fort.4: NAMCT0: @@ -142,6 +198,17 @@ oifs: NIO_SERV_METHOD: 2 NMSG_LEVEL_CLIENT: 0 NMSG_LEVEL_SERVER: 1 + NAEPHY: + LECURR: true + NAERAD: + NSOLARSPECTRUM: "1" + #NAMMCC: + # RALBSEAD_NML: 0.045 + NAMORB: + LCORBMD: "true" + ORBMODE: "fixed_year" + ORBIY: ${start_date!syear} + cmip6_data_dir_nml: ${input_dir}/cmip6-data cmip5_data_dir_nml: ${input_dir}/cmip5-data @@ -163,8 +230,6 @@ oifs: TCO159_CORE2: nproc: 36 - # Wave model switch - wam: true perturb: 0 ensemble_id: 1 @@ -231,9 +296,6 @@ oifs: tl_o3_data_dir: ${input_dir}/${version}/climate/ ICMGG_INIT_name: "_${fesom.resolution}" - # Remove ICMCL_INIT forcing, which is only required for standalone simulations - remove_forcing_files: - - ICMCL_INIT # Postprocessing choose_general.postprocessing: @@ -296,18 +358,64 @@ fesom: oce_tra: surf_relax_s: "${surf_relax_s}" - choose_general.version: + choose_general.major_version: "v3.0": namelist_dir: "${esm_namelist_dir}/fesom2/2.0/awicm3/v3.0/" + add_namelist_changes: + namelist.oce: + oce_tra: + surf_relax_s: "${surf_relax_s}" + # Remove ICMCL_INIT forcing, which is only required for standalone simulations (form v3.2 onwards contains seasonal leaf area index, veg albedo etc.) + remove_forcing_files: + - ICMCL_INIT "v3.1": namelist_dir: "${esm_namelist_dir}/fesom2/2.0/awicm3/v3.1/" + add_namelist_changes: + namelist.oce: + oce_tra: + surf_relax_s: "${surf_relax_s}" + # Remove ICMCL_INIT forcing, which is only required for standalone simulations (form v3.2 onwards contains seasonal leaf area index, veg albedo etc.) + remove_forcing_files: + - ICMCL_INIT "master": namelist_dir: "${model_dir}/config/" - "frontiers": - namelist_dir: "${esm_namelist_dir}/fesom2/2.0/awicm3/frontiers/" + add_namelists: + - namelist.tra + - namelist.cvmix + add_config_sources: + tra: "${namelist_dir}/namelist.tra" + dyn: "${namelist_dir}/namelist.dyn" + add_config_in_work: + tra: "namelist.tra" + dyn: "namelist.dyn" + add_config_files: + tra: tra + dyn: dyn + add_namelist_changes: + namelist.config: + ale_def: + which_ALE: 'zstar' + namelist.oce: + oce_dyn: + SPP: true + namelist.tra: + tracer_phys: + surf_relax_s: "${surf_relax_s}" + use_momix: false + namelist.ice: + ice_therm: + albi: 0.6 + albim: 0.43 "frontiers-xios": model_tag: "frontiers" namelist_dir: "${esm_namelist_dir}/fesom2/2.0/awicm3/frontiers/" + add_namelist_changes: + namelist.oce: + oce_tra: + surf_relax_s: "${surf_relax_s}" + # Remove ICMCL_INIT forcing, which is only required for standalone simulations (form v3.2 onwards contains seasonal leaf area index, veg albedo etc.) + remove_forcing_files: + - ICMCL_INIT remove_namelist_changes.namelist.config.inout: # Not present in the fesom-bounded namelist but in the fesom-2.0.yaml - restart_length @@ -323,11 +431,11 @@ fesom: coupling_freq_in_steps: $((${oasis3mct.coupling_time_step} / ${fesom.time_step})) - add_config_files: - cvmix: cvmix + #add_config_files: + #cvmix: cvmix - add_config_sources: - cvmix: "${namelist_dir}/namelist.cvmix" + #add_config_sources: + #cvmix: "${namelist_dir}/namelist.cvmix" remove_config_files: - diag @@ -345,7 +453,43 @@ fesom: # - fesom/fesom.io.yaml xios: - xml_dir: "${general.esm_namelist_dir}/oifs/43r3/xios/${general.resolution}" + choose_general.version: + "master": + xml_dir: "${general.esm_namelist_dir}/oifs/43r3/xios/master/" + config_sources: + domain_def: ${xml_dir}/domain_def_oifs.xml + field_def_raw: ${xml_dir}/field_def_oifs_raw.xml + field_def_cmip6: ${xml_dir}/field_def_oifs_cmip6.xml + field_def_noncmip6: ${xml_dir}/field_def_oifs_noncmip6.xml + file_def_default: ${xml_dir}/file_def_oifs_default.xml + file_def_orig: ${xml_dir}/file_def_oifs_orig.xml + io_def: ${xml_dir}/iodef.xml + axis_def: ${xml_dir}/axis_def_oifs.xml + grid_def: ${xml_dir}/grid_def_oifs.xml + ifs_xml: ${xml_dir}/ifs_xml/* + context_ifs: ${xml_dir}/context_oifs.xml + + config_in_work: + domain_def: domain_def_oifs.xml + axis_def: axis_def_oifs.xml + grid_def: grid_def_oifs.xml + context_ifs: context_oifs.xml + + add_config_files: + field_def_raw: field_def_raw + field_def_cmip6: field_def_cmip6 + field_def_noncmip6: field_def_noncmip6 + file_def_default: file_def_default + file_def_orig: file_def_orig + + remove_config_files: + - file_def + - field_def + "*": + xml_dir: "${general.esm_namelist_dir}/oifs/43r3/xios/${general.resolution}" + + + nproc: 1 omp_num_threads: ${computer.partitions.compute.cores_per_node} @@ -374,6 +518,17 @@ rnfmap: input_files: runoff_maps: runoff_maps + choose_general.version: + "master": + add_namelist_changes: + namelist.runoffmapper: + NAMRNFMAP: + LCalvingEnthalpy: True + add_grids: + rnfa: + name: RNFA + rnfo: + name: RNFO ######################################################################################### @@ -381,8 +536,6 @@ rnfmap: oasis3mct: model_dir: ${general.model_dir}/oasis pool_dir: ${general.pool_dir}/oasis/ - input_dir: ${pool_dir}/cy${oifs.version}/${oifs.resolution}-${fesom.resolution}/ - mct_version: 4.0 norestart: "F" process_ordering: @@ -416,13 +569,27 @@ oasis3mct: r2a_seq: 2 coupling_time_step: "${oasis3mct.time_step}" - choose_general.version: + choose_general.major_version: 'frontiers-xios': + mct_version: 4.0 + input_dir: ${pool_dir}/cy${oifs.version}/${oifs.resolution}-${fesom.resolution}/ add_process_ordering: - xios rstos_file_name: 'rstos' rstas_file_name: 'rstas' 'v3.1': + mct_version: 4.0 + input_dir: ${pool_dir}/cy${oifs.version}/${oifs.resolution}-${fesom.resolution}/ + rstos_file_name: 'rstos_uv' + rstas_file_name: 'rstas_uv' + add_process_ordering: + - xios + add_coupling_target_fields: + add_rstos.nc: + - 'A_CurX:A_CurY <--gauswgt_i-- u_feom:v_feom' + 'master': + mct_version: 5.0 + input_dir: ${pool_dir}/cy${oifs.version}-master/${oifs.resolution}-${fesom.resolution}/ rstos_file_name: 'rstos_uv' rstas_file_name: 'rstas_uv' add_process_ordering: @@ -431,6 +598,8 @@ oasis3mct: add_rstos.nc: - 'A_CurX:A_CurY <--gauswgt_i-- u_feom:v_feom' '*': + mct_version: 4.0 + input_dir: ${pool_dir}/cy${oifs.version}/${oifs.resolution}-${fesom.resolution}/ rstos_file_name: 'rstos' rstas_file_name: 'rstas' @@ -559,15 +728,15 @@ oasis3mct: true: lag: "${time_step}" # If ini_restart_dir is not specified in the runscript and, therefore, - # it is not a branched off experiment add the /fesom.nproc/ to the + # it is not a branched off experiment adds the /fesom.nproc/ to the # sources when the run_number is 1 - load_restart_from_pool: "$(( '${input_dir}' == '${ini_restart_dir}' and ${general.run_number} == 1))" + load_restart_from_pool: "$(( os.path.realpath('${input_dir}') == os.path.realpath('${ini_restart_dir}') and ${general.run_number} == 1 ))" choose_load_restart_from_pool: true: - add_restart_in_sources: - rmp: ${input_dir}/${fesom.nproc}/rmp_*.nc - rstas.nc: ${input_dir}/${fesom.nproc}/${rstas_file_name}.nc - rstos.nc: ${input_dir}/${fesom.nproc}/${rstos_file_name}.nc + add_restart_in_sources: + rmp: ${input_dir}/${fesom.nproc}/rmp_*.nc + rstas.nc: ${input_dir}/${fesom.nproc}/${rstas_file_name}.nc + rstos.nc: ${input_dir}/${fesom.nproc}/${rstos_file_name}.nc restart_in_sources: rmp: rmp_*.nc @@ -588,6 +757,9 @@ oasis3mct: rmp: rmp_*.nc rstas.nc: rstas.nc rstos.nc: rstos.nc + remove_config_files: + - cf + computer: diff --git a/configs/setups/awiesm/awiesm-2.2.yaml b/configs/setups/awiesm/awiesm-2.2.yaml index 5ad115fa9..92548923d 100644 --- a/configs/setups/awiesm/awiesm-2.2.yaml +++ b/configs/setups/awiesm/awiesm-2.2.yaml @@ -17,8 +17,8 @@ general: - "modify_files" - "copy_files_to_work" - "report_missing_files" - - "add_vcs_info" - - "check_vcs_info_against_last_run" + #- "add_vcs_info" + #- "check_vcs_info_against_last_run" - "_write_finalized_config" - "database_entry" diff --git a/configs/setups/awiesm/awiesm.yaml b/configs/setups/awiesm/awiesm.yaml index e349f5f49..8d70c4ee5 100644 --- a/configs/setups/awiesm/awiesm.yaml +++ b/configs/setups/awiesm/awiesm.yaml @@ -29,6 +29,8 @@ # general.with_wiso: controls the choose_ blocks that trigger the necessary changes # in the namelists to activate/deactivate WISO, and therefore, it is meant to be # edited in the runscript. +# +# general.with_recom: switches on the REcoM-specific configurations general: prepcompute_recipe: @@ -45,8 +47,8 @@ general: - "modify_files" - "copy_files_to_work" - "report_missing_files" - - "add_vcs_info" - - "check_vcs_info_against_last_run" + #- "add_vcs_info" + #- "check_vcs_info_against_last_run" - "_write_finalized_config" - "database_entry" @@ -64,21 +66,25 @@ general: - '2.1' - '2.1-wiso' - '2.1-recom' + choose_version: '2.1': couplings: - fesom-2.1-awiesm-2.1+echam-6.3.05p2-awiesm-2.1 fesom_Dflags: "-DFESOM_COUPLED=ON" + with_recom: false '2.1-wiso': couplings: - fesom-2.1-wiso+echam-6.3.05p2-wiso fesom_Dflags: "-DFESOM_COUPLED=ON" + with_recom: false '2.1-recom': couplings: - - fesom-2.1-wiso+echam-6.3.05p2-wiso+recom-2.0 + - fesom-2.1-recom-par_tracers_mpi+echam-6.3.05p2-wiso+recom-2.0 add_include_models: - recom fesom_Dflags: "-DFESOM_COUPLED=ON -DRECOM_COUPLED=ON" + with_recom: true with_wiso: false with_pico: false @@ -111,7 +117,11 @@ echam: # Default namelist types provided with ESM-Tools. To see a list of supported # ``namelist_type`` options ``ls /esm_tools/namelist/echam// - namelist_type: "production" + choose_scenario_is_ssp: # Automatically calculated from the scenario variable + False: + namelist_type: "production" + True: + namelist_type: ${scenario_type} adj_input_dir: "${fesom.mesh_dir}/tarfiles${echam.resolution}/input/echam6" @@ -141,10 +151,6 @@ echam: "2.1-recom": version: "6.3.05p2-wiso" model_dir: ${general.model_dir}/echam-${echam.version} - wiso_fields: [o18_atmo, hdo_atmo, o16_atmo, w1_atm, w2_atm, w3_atm, i1_atm, i2_atm, i3_atm] # MA: after merging in FESOM by Martin B. this can be removed - add_coupling_fields: - "[[wiso_fields-->FIELD]]": - grid: atmo # Resolution switch # ----------------- @@ -170,6 +176,11 @@ echam: # Environment # ----------- + choose_computer.name: + albedo: + configure_opts: "'--with-coupler=oasis3-mct --without-regard-for-quality'" + "*": + configure_opts: '--with-coupler=oasis3-mct' add_compiletime_environment_changes: add_export_vars: # NOTE(PG)/FIXME(KH): The mh-linux is wrong, and uses OpenIFS Flags...??? @@ -177,7 +188,7 @@ echam: OIFS_OASIS_INCLUDE: '"-I$OIFS_OASIS_BASE/build/lib/psmile -I$OIFS_OASIS_BASE/build/lib/psmile/scrip -I$OIFS_OASIS_BASE/build/lib/psmile/mct -I$OIFS_OASIS_BASE/build/lib/psmile/mct/mpeu"' OASIS3MCT_FC_LIB: "$(pwd)/lib/" OASIS3MCTROOT: "$(pwd)/oasis/" - configure_opts: '--with-coupler=oasis3-mct' + configure_opts: "${echam.configure_opts}" # Bootstrap switch # ---------------- @@ -192,6 +203,17 @@ echam: submodelctl: lupdate_orog: True + # with_recom switch + # ----------------- + # Settings for running with REcoM + choose_general.with_recom: + True: + wiso_fields: [o18_atmo, hdo_atmo, o16_atmo, w1_atm, w2_atm, w3_atm, i1_atm, i2_atm, i3_atm] # MA: after merging in FESOM by Martin B. this can be removed + add_coupling_fields: + "[[wiso_fields-->FIELD]]": + grid: atmo + + @@ -249,26 +271,7 @@ fesom: "2.1-recom": version: "2.1-recom" ALE_scheme: 'zstar' - - num_tracers: 33 namelist_dir: ${fesom.model_dir}/config/ - add_config_sources: - oce: "${namelist_dir}/namelist.oce.recom.ciso" - add_config_in_work: - oce: namelist.oce - remove_namelist_changes.namelist.config: [inout] - add_namelist_changes: - namelist.config: - restart_log: - restart_length: "${restart_rate}" - restart_length_unit: "${restart_unit}" - namelist.oce: - oce_tra: - num_tracers: "${num_tracers}" - wiso_fields: [o18_feom, hdo_feom, o16_feom, w1_oce, w2_oce, w3_oce, i1_oce, i2_oce, i3_oce] # MA: after merging in FESOM by Martin B. this can be removed - add_coupling_fields: - "[[wiso_fields-->FIELD]]": - grid: feom # General namelist_changes for coupled FESOM # ------------------------------------------ @@ -338,24 +341,55 @@ fesom: "*": is: invalid + # with_recom switch + # ----------------- + # Settings for running with REcoM + choose_general.with_recom: + True: + add_config_sources: + oce: "${namelist_dir}/namelist.oce.recom${namelist_ciso_sufix}" + io: "${namelist_dir}/namelist.io.recom${namelist_ciso_sufix}" + remove_namelist_changes.namelist.config: [inout] + add_namelist_changes: + namelist.config: + restart_log: + restart_length: "${restart_rate}" + restart_length_unit: "${restart_unit}" + namelist.oce: + oce_tra: + num_tracers: "${num_tracers}" + wiso_fields: [o18_feom, hdo_feom, o16_feom, w1_oce, w2_oce, w3_oce, i1_oce, i2_oce, i3_oce] # MA: after merging in FESOM by Martin B. this can be removed + add_coupling_fields: + "[[wiso_fields-->FIELD]]": + grid: feom + + # use_ciso switch + # --------------- + # num_tracers only changed if ``with_recom: true``, i.e. indentation) + choose_recom.use_ciso: + True: + namelist_ciso_sufix: ".ciso" + num_tracers: 33 + False: + namelist_ciso_sufix: "" + num_tracers: 24 + ######################################################################################### recom: - choose_general.version: - 2.1-recom: + choose_general.with_recom: + True: version: "2.0" - bgc_num: 31 - benthos_num: 8 - bottflx_num: 8 - add_namelist_changes: - namelist.recom: - pavariables: - bgc_num: "${bgc_num}" - benthos_num: "${benthos_num}" - bottflx_num: "${bottflx_num}" - data_path: /work/ollie/mbutzin/fesom2/input/dust/ + #5.7.22 Ying: par-tracers only with ciso + use_ciso: true + + add_choose_computer.name: + levante: + data_path: /home/a/a270105/initial_files/pi_init/dust_coremesh/ + ollie: + data_path: /work/ollie/mbutzin/fesom2/input/dust/ restart_name: "restart." @@ -371,15 +405,6 @@ recom: namelist_dir: ${fesom.model_dir}/config/ - # Include the extra namelist that is not included by default in recom.yaml -# add_namelists: -# - namelist.io.recom.ciso -# add_config_files: -# io.recom.ciso: io.recom.ciso - add_config_sources: - recom: ${namelist_dir}/namelist.recom - add_config_in_work: - recom: namelist.recom "*": not_used: "" @@ -436,8 +461,8 @@ oasis3mct: - 'i1_oce <--distwgt-- i1_atm' - 'i2_oce <--distwgt-- i2_atm' - 'i3_oce <--distwgt-- i3_atm' - choose_general.version: - "2.1-recom": # MA: after merging in FESOM by Martin B. this can be removed + choose_general.with_recom: + True: # MA: after merging in FESOM by Martin B. this can be removed add_coupling_target_fields: add_o2a_flux: - 'o18_atmo <--distwgt-- o18_feom' diff --git a/configs/setups/foci/echam_monitoring.ipynb b/configs/setups/foci/echam_monitoring.ipynb new file mode 100644 index 000000000..6c29f4d27 --- /dev/null +++ b/configs/setups/foci/echam_monitoring.ipynb @@ -0,0 +1,410 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "a130f942-d112-47bf-8951-c4887eb37e7a", + "metadata": {}, + "source": [ + "# Simple Monitoring plots from ECHAM6 monthly mean output\n", + "Currently the standard BOT files that are produced by the postprocessing are used." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f915cff8-9d6b-46d6-90c3-eeb51ed93224", + "metadata": { + "tags": [ + "parameters" + ] + }, + "outputs": [], + "source": [ + "# this is the parameters cell for papermill\n", + "# Via papermill (https://papermill.readthedocs.io/en/latest/) the settings below can be overwritten via command line arguments. \n", + "# This allows to run this notebook in batch mode. The cell below is tagged as parameter cell. \n", + "expid = \"mon3y\"\n", + "iniyear = 1850\n", + "exproot = \"/home/shkifmsw/esm/esm-experiments\"\n", + "obsroot = \"/home/shkifmsw/foci_input2/OBS_MONITORING/T63/\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "58bde0c7-1cce-4431-8f7b-29cbadf91789", + "metadata": {}, + "outputs": [], + "source": [ + "# settings that can overwritten by command line arguments\n", + "# only required at a later stage, \n", + "# in normal monitoring mode startyear and endyear are detected automatically\n", + "monitoring = {\n", + " 'exproot': exproot,\n", + " 'obsroot': obsroot,\n", + " 'iniyear': iniyear,\n", + " 'expid': expid,\n", + "}\n", + "\n", + "monitoring['ftype'] = {\n", + " 'echam6_BOT_mm': {\n", + " 'vars_lineplot': ['temp2', 'tsw', 'toa', 'aclcov' ,'precip', 'evap', 'net_water_flux'],\n", + " 'vars_mapplot': ['tsw','temp2','precip'],\n", + " }\n", + "} \n", + "\n", + "varopts = {\n", + " 'toa': {\n", + " 'long_name': 'TOA radiation balance'\n", + " },\n", + " 'temp2': {\n", + " 'offset': -273.15,\n", + " 'scale_factor': 1.0,\n", + " # obs_* and plot settings are only relevant for bias map plots, not for line plots\n", + " 'use_obs': True,\n", + " 'obs_path': f'{monitoring[\"obsroot\"]}/t2m-eraint_monthly_T63_1979-2013.nc',\n", + " 'obs_varname': 't2m',\n", + " 'obs_timerange': ['1980-01-01','2009-12-31'], # currently not used\n", + " 'plotlevels': [-6,-5,-4,-3,-2,-1,1,2,3,4,5,6],\n", + " },\n", + " 'tsw': {\n", + " 'offset': -273.15,\n", + " 'scale_factor': 1.0,\n", + " 'use_obs': True,\n", + " 'obs_path': f'{monitoring[\"obsroot\"]}/HADISST_1_1_SST_1950-2004_T63.nc',\n", + " 'obs_varname': 'sst',\n", + " 'obs_timerange': ['1980-01-01','2004-12-31'], # currently not used\n", + " 'plotlevels': [-6,-5,-4,-3,-2,-1,1,2,3,4,5,6],\n", + " },\n", + " 'precip': {\n", + " 'scale_factor': 86400.0,\n", + " 'use_obs': True,\n", + " 'obs_path': f'{monitoring[\"obsroot\"]}/gpcp_monthly_precip_T63_1979-2013.nc',\n", + " 'obs_varname': 'precip',\n", + " 'obs_timerange': ['1980-01-01','2004-12-31'], # currently not used\n", + " 'plotlevels': [-6,-5,-4,-3,-2,-1,1,2,3,4,5,6],\n", + " 'cmap': 'RdBu'\n", + " }\n", + "}\n", + "\n", + "monitoring['echamroot'] = f'{monitoring[\"exproot\"]}/{monitoring[\"expid\"]}/outdata/echam6'\n", + "monitoring['echammonroot'] = f'{monitoring[\"exproot\"]}/{monitoring[\"expid\"]}/mon/echam'" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "dec6e0e2-6036-4633-ae9b-cc219549c90a", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "import xarray as xr\n", + "import seaborn as sns\n", + "import pandas as pd\n", + "import numpy as np\n", + "from cartopy import crs as ccrs # Cartography library\n", + "from cartopy.mpl.gridliner import LONGITUDE_FORMATTER, LATITUDE_FORMATTER\n", + "import matplotlib.pyplot as plt\n", + "import os.path\n", + "import glob\n", + "import random\n", + "import multiprocessing\n", + "from functools import partial\n", + "import warnings\n", + "warnings.filterwarnings('ignore')\n", + "#import shutil\n", + "from cdo import *\n", + "# TODO: in interactive mode, set path to cdo below, comment to run in batch mode on any machine\n", + "os.environ['CDO'] = '/home/shkifmsw/miniconda3/envs/jupyter_mon/bin/cdo'\n", + "cdo = Cdo()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "46c8012b-f3ba-42af-b2bc-05db6c4704b3", + "metadata": {}, + "outputs": [], + "source": [ + "# run cdo operations in parallel\n", + "def cdo_parallel(year,monitoring):\n", + " '''\n", + " Wrapper function to run cdo in parallel\n", + " '''\n", + " for ftype in monitoring.get('ftype').keys():\n", + " infile=f\"{monitoring['echamroot']}/{monitoring['expid']}_{ftype}_{year:04d}.nc\"\n", + " singleyear=f\"{monitoring['echammonroot']}/{monitoring['expid']}_{ftype}_{year:04d}_yearmean.nc\"\n", + " singleyearfldmean=f\"{monitoring['echammonroot']}/{monitoring['expid']}_{ftype}_{year:04d}_yearfldmean.nc\"\n", + " #if os.path.exists(singleyear): num_years=num_years+1\n", + " if os.path.exists(infile):\n", + " if not os.path.exists(singleyear): cdo.yearmean(input=infile, output=singleyear)\n", + " if not os.path.exists(singleyearfldmean): cdo.fldmean(input=singleyear, output=singleyearfldmean)\n", + "\n", + " \n", + "def find_startyear_endyear(monitoring):\n", + " '''\n", + " Automagically finds start year and end year by checking the existing monitoring file and\n", + " then walking through the model output to find the last year\n", + " '''\n", + " # check if a yearmean.nc file exists, and get last year from file\n", + " startyear = monitoring['iniyear']\n", + " # assume that all filetypes have been processed to the same endyear\n", + " ftype = list(monitoring.get('ftype').keys())[-1]\n", + " \n", + " yearmeanfile = f\"{monitoring['echammonroot']}/{monitoring['expid']}_{ftype}_yearfldmean.nc\"\n", + " if os.path.exists(yearmeanfile):\n", + " ds = xr.open_dataset(yearmeanfile)\n", + " startyear = ds.time.values[-1].astype('datetime64[Y]').astype(int) + 1970\n", + " endyear = startyear\n", + "\n", + " # find last file if the endyear request is larger than the startyear\n", + " # which has been automatically detected above.\n", + " # If the startyear == endyear no calculations need to be performed. This can happen\n", + " # if we rerun the code manually\n", + " for year in range(startyear+1,startyear+10000): # 10000 is arbitrary\n", + " if os.path.exists(f\"{monitoring['echamroot']}/{monitoring['expid']}_{ftype}_{year:04d}.nc\"):\n", + " endyear = year\n", + " else:\n", + " break\n", + " \n", + " return startyear,endyear\n", + "\n", + "startyear, endyear = find_startyear_endyear(monitoring)\n", + "\n", + "if endyear > startyear:\n", + " \n", + " print(f'Calculating files from {startyear} to {endyear}.')\n", + " \n", + " years = list(range(startyear,endyear+1))\n", + " pool = multiprocessing.Pool(processes=1)\n", + " run_cdo = partial(cdo_parallel, monitoring=monitoring)\n", + " result_list = pool.map(run_cdo, years)\n", + "\n", + " for ftype in monitoring.get('ftype').keys():\n", + " for f in [\"yearmean\",\"yearfldmean\"]:\n", + " if os.path.exists(f\"{monitoring['echammonroot']}/{monitoring['expid']}_{ftype}_{endyear}_{f}.nc\"):\n", + " meanfile = f\"{monitoring['echammonroot']}/{monitoring['expid']}_{ftype}_{f}.nc\"\n", + " if os.path.exists(meanfile):\n", + " tmpfile=f\"{monitoring['echammonroot']}/tmp_{random.randint(0,10000)}.nc\"\n", + " cdo.mergetime(input=f\"{meanfile} {monitoring['echammonroot']}/{monitoring['expid']}_{ftype}_????_{f}.nc\", output=tmpfile)\n", + " os.remove(meanfile); os.rename(tmpfile,meanfile)\n", + " else:\n", + " cdo.mergetime(input=f\"{monitoring['echammonroot']}/{monitoring['expid']}_{ftype}_????_{f}.nc\", output=meanfile)\n", + "\n", + " for f in glob.glob(f\"{monitoring['echammonroot']}/{monitoring['expid']}_{ftype}_????_{f}.nc\"): os.remove(f)\n", + "else:\n", + " print(f'{startyear} <= {endyear}, no calculations need to be performed.')" + ] + }, + { + "cell_type": "markdown", + "id": "4eda73f7-6b4f-47dd-8b56-2e27d2ee2246", + "metadata": {}, + "source": [ + "## Monitoring plots for ECHAM6 surface data" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "1e742ec9-9f2b-48fc-a7bf-cb2cb8048bd3", + "metadata": {}, + "outputs": [], + "source": [ + "# functions to make plots look nice\n", + "col_blind = sns.color_palette(\"colorblind\", 10)\n", + "sns.set_style('ticks')\n", + "sns.set_palette(col_blind)\n", + "sns.set_context(\"notebook\", font_scale=1., rc={\"lines.linewidth\": 1.5})\n", + "\n", + "def set_number_of_subplots(varlist,x=1):\n", + " '''\n", + " Calculate reasonable subplot layout, based on the number of variables\n", + " to be plotted.\n", + " '''\n", + " num_plots_x = x\n", + " num_plots_y = np.ceil( len(varlist) / num_plots_x).astype(int)\n", + " return num_plots_x, num_plots_y\n", + "\n", + "def derived_vars(ds,var,varopts):\n", + " '''\n", + " Calculate derived variables for monitoring and/or apply scaling and offset'\n", + " '''\n", + " if var == 'toa':\n", + " var_data = ds['srad0'] + ds['trad0'] \n", + " elif var == 'net_water_flux':\n", + " var_data = ds['precip'] + ds['evap']\n", + " else:\n", + " var_data = ds[var]\n", + " var_data.attrs = ds[var].attrs\n", + " \n", + " if varopts.get(var):\n", + " var_data = var_data * varopts[var].get('scale_factor',1.0) + varopts[var].get('offset',0) \n", + " \n", + " return var_data\n", + "\n", + "def prepare_map_plot(ds,var,varopts):\n", + " '''\n", + " Calculate mean over the last 20 yearly means from the monitoring file\n", + " produced by cdo above. If less than 20 years are available the last x years are taken\n", + " OBS data is averaged over the entire time given in the input file for simplicity\n", + " Also add plot options to variable attributes for easier use in cell that actually does the plots.\n", + " '''\n", + " var_data = derived_vars(ds,var,varopts)\n", + " n_years = 20\n", + " \n", + " if varopts.get(var):\n", + " if varopts[var].get('use_obs',False):\n", + " obs_start = varopts[var].get('obs_timerange')[0]\n", + " obs_end = varopts[var].get('obs_timerange')[1]\n", + " obs_file = xr.open_dataset(varopts[var].get('obs_path')) \n", + " obs_data = obs_file[varopts[var].get('obs_varname',var)] * varopts[var].get('scale_factor',1.0) + varopts[var].get('offset',0)\n", + " # use up to the last 20 years to calculate the mean\n", + " var_data = var_data[-n_years:,:,:].mean(dim='time')\n", + " var_data.values[:,:] = var_data.values[:,:] - obs_data.mean(dim='time').values[:,:]\n", + " else:\n", + " var_data = var_data[-n_years:,:,:].mean(dim='time')\n", + " \n", + " if varopts[var].get('long_name'):\n", + " var_data.attrs['long_name'] = varopts[var].get('long_name',var)\n", + " if varopts[var].get('plotlevels'):\n", + " var_data.attrs['plotlevels'] = varopts[var].get('plotlevels')\n", + " else:\n", + " spacing = (var_data.max() - var_data.max())/10\n", + " var_data.attrs['plotlevels'] = np.linspace(var_data.min()+spacing,var_data.max()-spacing,10)\n", + " \n", + " var_data.attrs['cmap'] = varopts[var].get('cmap','RdBu_r')\n", + " else:\n", + " var_data = var_data[-n_years:,:,:].mean(dim='time')\n", + " \n", + " return var_data" + ] + }, + { + "cell_type": "markdown", + "id": "56125fe6-ff97-4051-bdd9-43e64e58dafc", + "metadata": {}, + "source": [ + "## Line plots for ECHAM6 output" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "fd0e75e7-ecbb-4edc-a3a4-1a4c6b753028", + "metadata": {}, + "outputs": [], + "source": [ + "for ftypes in monitoring.get('ftype').keys():\n", + " \n", + " num_plots_x, num_plots_y = set_number_of_subplots(monitoring['ftype'].get(ftypes).get('vars_lineplot'))\n", + " \n", + " fldmeandata = xr.open_dataset(f\"{monitoring['echammonroot']}/{monitoring['expid']}_{ftypes}_yearfldmean.nc\")\n", + "\n", + " # line plots\n", + " fig, axs = plt.subplots(num_plots_y, num_plots_x, figsize=(max(num_plots_x*6,18),num_plots_y*5))\n", + " i=-1\n", + " for var in monitoring['ftype'].get(ftypes).get('vars_lineplot'):\n", + " i=i+1\n", + " ax = axs.flat[i]\n", + " var_data = derived_vars(fldmeandata,var,varopts)\n", + " p = var_data.plot(ax=ax)\n", + " if var_data['time'].size > 40:\n", + " p2 = var_data.rolling(time=20,center=True).mean().plot(ax=ax,linewidth=3)\n", + " ax.set_title(var_data.attrs.get('long_name',var))\n", + " ax.set_xlabel('')\n", + " ax.set_ylabel('')\n", + " " + ] + }, + { + "cell_type": "markdown", + "id": "1dee3f8f-0c6d-4572-a7d5-53ff6825ca1b", + "metadata": {}, + "source": [ + "## Map plots for ECHAM6 output" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "17bf5ed1-86a8-4740-bc2e-7e04f000a921", + "metadata": {}, + "outputs": [], + "source": [ + "# map plots\n", + "\n", + "for ftypes in monitoring.get('ftype').keys():\n", + "\n", + " yearmeandata = xr.open_dataset(f\"{monitoring['echammonroot']}/{monitoring['expid']}_{ftypes}_yearmean.nc\")\n", + " \n", + " num_plots_x, num_plots_y = set_number_of_subplots(monitoring['ftype'].get(ftypes).get('vars_mapplot'),x=3)\n", + " proj = ccrs.PlateCarree()\n", + " fig, axs = plt.subplots(num_plots_y, num_plots_x, \n", + " figsize=(num_plots_x*8,num_plots_y*5), \n", + " subplot_kw={'projection': proj})\n", + " \n", + " i=-1\n", + " for var in monitoring['ftype'].get(ftypes).get('vars_mapplot'):\n", + " i=i+1\n", + " ax = axs.flat[i]\n", + " var_data = prepare_map_plot(yearmeandata,var,varopts)\n", + " p = var_data.plot.contourf(\n", + " ax=ax,\n", + " transform=ccrs.PlateCarree(), \n", + " #cmap='RdYlBu_r',\n", + " cmap=var_data.attrs['cmap'],\n", + " levels=var_data.attrs['plotlevels'],\n", + " extend='both',\n", + " cbar_kwargs={'label': '',\n", + " 'extend': 'both','shrink': 0.6,\n", + " 'orientation': 'vertical',\n", + " 'spacing': 'proportional',\n", + " 'ticks': var_data.attrs['plotlevels']\n", + " }\n", + " )\n", + " ax.set_title(var_data.attrs.get('long_name',var))\n", + " ax.set_xlabel('')\n", + " ax.set_ylabel('')\n", + " ax.coastlines(resolution='10m', lw=0.51)\n", + " \n", + " gl = ax.gridlines(crs=ccrs.PlateCarree(), linestyle='dotted',color='black',\n", + " linewidth=0.5, alpha=0.5,\n", + " draw_labels=True, zorder=.3)\n", + "\n", + " gl.top_labels = False\n", + " gl.right_labels = False\n", + " gl.left_labels = True\n", + " gl.xformatter = LONGITUDE_FORMATTER\n", + " gl.yformatter = LATITUDE_FORMATTER" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "jupyter_mon", + "language": "python", + "name": "jupyter_mon" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.12" + }, + "toc-autonumbering": false, + "toc-showcode": false, + "toc-showmarkdowntxt": false, + "toc-showtags": false + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/configs/setups/foci/echam_monitoring.sh b/configs/setups/foci/echam_monitoring.sh new file mode 100755 index 000000000..95d24b238 --- /dev/null +++ b/configs/setups/foci/echam_monitoring.sh @@ -0,0 +1,71 @@ +#!/bin/bash +# +# Wrapper script to run notebook with command line arguments +# in the shell. As papermill can handle yaml arguments as well +# we may just read the finished config yaml at some point +# SebastianWahl 05/2022 +# +echo "`date`: ECHAM6 monitoring started" +# +basedir="$HOME/esm/esm-experiments/" +obsroot="$HOME/foci_input2/OBS_MONITORING/T63/" +expid="test" +iniyear=1850 +condapath="$HOME/miniconda3/" +# +#------- DO NOT EDIT BELOW THIS LINE UNLESS YOU KNOW WHAT YOU ARE DOING ------# +# +# Read the command line arguments +OPTIND=1 # Reset in case getopts has been used previously in the shell. +while getopts "h?:r:i:p:c:o:" opt; do + case "$opt" in + h|\?) + echo + echo " Valid options are -h or -? for this help" + echo " -p path to data (basedir, default is $basedir)" + echo " -o path to obs data (basedir, default is $obsroot)" + echo " -r experiment / run id (run, default is $expid)" + echo " -i initial year (initial year, default is $iniyear)" + echo " -c root path to conda env (condapath, default is \$HOME/miniconda3/)" + echo + exit 0 + ;; + r) expid=$OPTARG + ;; + i) iniyear=$OPTARG + ;; + p) basedir=$OPTARG + ;; + o) obsroot=$OPTARG + ;; + c) condapath=$OPTARG + ;; + esac +done + +shift $((OPTIND-1)) +[ "$1" = "--" ] && shift +echo +echo "Doing ECHAM6 monitoring in $basedir for $expid from year $iniyear onwards" +echo "Using conda environment from $condapath" +echo +if ! source $condapath/bin/activate jupyter_mon ; then + echo + echo "source $condapath/bin/activate jupyter_mon failed" + echo "install with" + echo " conda env create -n jupyter_mon --file $(dirname $0)/jupyter_mon.yaml" + echo " source $condapath/bin/activate jupyter_mon" + echo ' python -m ipykernel install --user --name jupyter_mon --display-name "jupyter_mon"' + echo + exit 1 +else + source $condapath/bin/activate jupyter_mon +fi + +cd $(dirname $0) +papermill echam_monitoring.ipynb echam_monitoring_${expid}.ipynb -p expid $expid -p iniyear $iniyear -p exproot $basedir -p obsroot $obsroot +jupyter-nbconvert --no-input --to html echam_monitoring_${expid}.ipynb +mv -v *.html $basedir/$expid/mon/echam/ + +echo "`date`: ECHAM6 monitoring finished" +exit 0 diff --git a/configs/setups/foci/echam_postprocessing.sh b/configs/setups/foci/echam_postprocessing.sh index ebef7b164..72b02c993 100755 --- a/configs/setups/foci/echam_postprocessing.sh +++ b/configs/setups/foci/echam_postprocessing.sh @@ -182,21 +182,13 @@ endyear=${enddate%????} #[[ $startyear == $iniyear && $inidate != *0101 ]] && ((++startyear)) [[ $enddate != *1231 ]] && ((--endyear)) -# Temporary directory -id="post" -post_dir=$DATA_DIR/${id}_$startdate-$enddate -if [[ -d $post_dir ]] ; then - print "Hey: previous job failed or still running; $post_dir exists. Will stop now" - exit 1 -fi -mkdir -p $post_dir - function rename_files { prefix=$1 stamps_in=$2 filetags_in=$3 + missing_output=0 for stamp in $stamps_in ; do suffix=${stamp}${fileext} @@ -218,12 +210,21 @@ function rename_files { else if ! [[ -f $output ]] ; then echo "$output not available." + missing_output=1 else echo "$output already available." fi fi done done + + if [[ $missing_output -eq 1 ]] ; then + echo + echo " Not all files available required for yearly postprocessing. Will stop here" + echo + exit 0 + fi + } # # Postprocessing of ECHAM @@ -250,10 +251,19 @@ filetags=${ATM_FILE_TAGS} atm_files_to_remove= # Generate monthly means, possibly apply afterburner transformations -echo 0 > $post_dir/status -rename_files $prefix "$stamps" "$filetags" +rename_files $prefix "$stamps" "$filetags" wait +# Temporary directory +id="post" +post_dir=$DATA_DIR/${id}_$startdate-$enddate +if [[ -d $post_dir ]] ; then + print "Hey: previous job failed or still running; $post_dir exists. Will stop now" + exit 1 +fi +mkdir -p $post_dir + +echo 0 > $post_dir/status remove_list= for stamp in $stamps ; do diff --git a/configs/setups/foci/foci.yaml b/configs/setups/foci/foci.yaml index e3d8bd213..988a1f490 100644 --- a/configs/setups/foci/foci.yaml +++ b/configs/setups/foci/foci.yaml @@ -36,6 +36,7 @@ general: available_versions: - default + - default_autotools - fs - default_oasismct4 - agrif @@ -44,6 +45,9 @@ general: default: couplings: - nemo-ORCA05_LIM2_KCM_AOW+echam-6.3.05p2-foci + default_autotools: + couplings: + - nemo-ORCA05_LIM2_KCM_AOW_autotools+echam-6.3.05p2-foci_autotools fs: couplings: - nemo-ORCA05_LIM2_KCM_AOW_FS+echam-6.3.05p2-foci @@ -59,26 +63,6 @@ general: #add_include_models: #- xios - file_movements: - forcing: - all_directions: link - input: - all_directions: link - restart_in: - # seb-wahl: need to copy restart files by default - # as oasis modifies the restart file !!!! - init_to_exp: copy - exp_to_run: copy - run_to_work: copy - work_to_run: link - restart_out: - all_directions: copy - #config: - # init_to_exp: copy - # exp_to_run: copy - # run_to_work: link - # work_to_run: link - ######################################################################################### ########### necessary changes to submodels compared to standalone setups ################ ######################################################################################### @@ -132,6 +116,8 @@ echam: choose_general.version: default: version: "6.3.05p2-foci" + default_autotools: + version: "6.3.05p2-foci" fs: version: "6.3.05p2-foci" default_oasismct4: @@ -151,17 +137,35 @@ echam: # do we want to link files or copy. For ECHAM6 we can't link the restart file # as hdrestart.nc is named the same for input and output. Another crazy habbit of ECHAM6 - #file_movements: - # forcing: - # all_directions: "link" - # forcing: - # all_directions: "link" + file_movements: + default: + all_directions: copy + config: + init_to_exp: copy + exp_to_run: link + run_to_work: link + forcing: + all_directions: link + log: + all_directions: copy + input: + all_directions: link + outdata: + all_directions: move + restart_in: + all_directions: link + restart_out: + all_directions: move lresume: ${general.lresume} ini_parent_exp_id: ${general.ini_parent_exp_id} ini_parent_date: "${general.ini_parent_date}" ini_parent_dir: "${general.ini_parent_dir}/echam6/" + # Allows ssp scenarios to start before the ssp period with historical settings + # (i.e. historical to ssp simulations) + allow_hist2ssp_transition: True + # some datamath for to be able to change the coupling step easily coupling_freq_in_steps: $((${oasis3mct.coupling_time_step} / ${echam.time_step})) @@ -331,7 +335,22 @@ echam: echam_postprocessing.sh -r ${general.expid} -s ${start_date!syear} - -e ${end_date!syear}" + -e ${end_date!syear} + -p ${general.base_dir}" + nproc: 1 + echam_monitoring: + batch_or_shell: shell + order_in_cluster: sequential + run_on_queue: ${computer.partitions.pp.name} + run_after: echam_postprocessing + script_dir: ${general.esm_function_dir}/setups/foci + submit_to_batch_system: True + script: " + echam_monitoring.sh + -r ${general.expid} + -i ${initial_date!syear} + -o ${computer.pool_directories.focipool}/OBS_MONITORING/T63/ + " nproc: 1 hdmodel: @@ -342,10 +361,34 @@ hdmodel: restart_out_sources: hdrestart: restart_${general.expid}_hd_${other_date!syear!smonth!sday}.nc + # do we want to link files or copy. For the HD model we can't link the restart file + # as hdrestart.nc is named the same for input and output. Another crazy habbit of ECHAM6 + file_movements: + default: + all_directions: copy + config: + init_to_exp: copy + exp_to_run: link + run_to_work: link + forcing: + all_directions: link + log: + all_directions: copy + input: + all_directions: link + outdata: + all_directions: move + restart_in: + all_directions: copy + restart_out: + all_directions: copy + + jsbach: version: "3.20p1" # directories - pool_dir: "${computer.pool_directories.focipool}/JSBACH" + pool_dir: "${computer.pool_directories.focipool}/ECHAM6_${echam.resolution}/JSBACH/" + input_dir_couple: "${pool_dir}/input/" choose_computer.name: ollie: dynveg_file_ending: "" @@ -353,6 +396,28 @@ jsbach: dynamic_vegetations: True + Ndepo_path: "${echam.resolution}/ndepo/Ndepo${Ndepo_sufix}." + + file_movements: + default: + all_directions: copy + config: + init_to_exp: copy + exp_to_run: link + run_to_work: link + forcing: + all_directions: link + log: + all_directions: copy + input: + all_directions: link + outdata: + all_directions: move + restart_in: + all_directions: link + restart_out: + all_directions: move + # settings for restarting from another run lresume: ${general.lresume} ini_parent_exp_id: ${general.ini_parent_exp_id} @@ -414,6 +479,8 @@ nemo: choose_general.version: default: version: "ORCA05_LIM2_KCM_AOW" + default_autotools: + version: "ORCA05_LIM2_KCM_AOW_autotools" fs: version: "ORCA05_LIM2_KCM_AOW_FS" agrif: @@ -424,6 +491,23 @@ nemo: model_dir: ${general.model_dir}/nemo-${nemo.version} setup_dir: ${general.model_dir} + # file handling settings + file_movements: + default: + all_directions: copy + config: + init_to_exp: copy + exp_to_run: link + run_to_work: link + forcing: + all_directions: link + log: + all_directions: copy + input: + all_directions: link + outdata: + all_directions: move + # settings for restarting from another run lresume: ${general.lresume} ini_parent_exp_id: ${general.ini_parent_exp_id} @@ -449,8 +533,9 @@ nemo: script: " nemo_postprocessing.sh -m -r ${general.expid} - -s ${start_date!syear} - -e ${end_date!syear}" + -s ${start_date} + -e ${end_date} + -p ${general.base_dir}" nproc: 1 @@ -513,6 +598,33 @@ oasis3mct: - 'OIceEvap <--conserv2-- AIceEvap' - 'O_dQnsdT <--conserv2-- A_dQnsdT' + default_autotools: + version: "foci" + export_mode_a2o: EXPORTED + + coupling_target_fields: + sstocean: + - 'AIceFrac <--conserv-- OIceFrac' + - 'A_SSTSST <--conserv-- O_SSTSST' + - 'A_TepIce <--conserv-- O_TepIce' + - 'A_IceTck <--conserv-- O_IceTck' + - 'A_SnwTck <--conserv-- O_SnwTck' + - 'A_OCurx1 <--conserv-- O_OCurx1' + - 'A_OCury1 <--conserv-- O_OCury1' + flxatmos: + - 'O_OTaux1 <--bicubic-- A_OTaux1' + - 'O_OTauy1 <--bicubic-- A_OTauy1' + - 'O_ITaux1 <--bicubic-- A_ITaux1' + - 'O_ITauy1 <--bicubic-- A_ITauy1' + - 'O_QsrIce <--conserv2-- A_QsrIce' + - 'O_QsrMix <--conserv3-- A_QsrMix' + - 'O_QnsIce <--conserv2-- A_QnsIce' + - 'O_QnsMix <--conserv3-- A_QnsMix' + - 'OTotRain <--conserv4-- ATotRain' + - 'OTotSnow <--conserv2-- ATotSnow' + - 'OIceEvap <--conserv2-- AIceEvap' + - 'O_dQnsdT <--conserv2-- A_dQnsdT' + fs: version: "foci" export_mode_a2o: EXPORTED diff --git a/configs/setups/foci/jupyter_mon.yaml b/configs/setups/foci/jupyter_mon.yaml new file mode 100644 index 000000000..90b2c723e --- /dev/null +++ b/configs/setups/foci/jupyter_mon.yaml @@ -0,0 +1,21 @@ +name: jupyter_mon +channels: + - conda-forge + - defaults +dependencies: + - python + - cartopy + - cf_units + - cftime + - ipython + - matplotlib + - netCDF4 + - numpy + - pandas + - seaborn + - xarray + - ipykernel + - papermill + - nbconvert + - python-cdo + - cdo diff --git a/configs/setups/foci/nemo_monitoring.sh b/configs/setups/foci/nemo_monitoring.sh index 48e578f63..b20956738 100755 --- a/configs/setups/foci/nemo_monitoring.sh +++ b/configs/setups/foci/nemo_monitoring.sh @@ -63,7 +63,8 @@ if [[ ! -r $envfile ]] ; then exit 1 else # module purge in envfile writes non-printable chars to log - source $envfile | tee + # TODO: tee "kills" the source command, need to find a workaround + source $envfile # | tee fi EXP_DIR=${basedir}/${EXP_ID} diff --git a/configs/setups/foci/nemo_postprocessing.sh b/configs/setups/foci/nemo_postprocessing.sh index b8cde3391..9cbeb62ac 100755 --- a/configs/setups/foci/nemo_postprocessing.sh +++ b/configs/setups/foci/nemo_postprocessing.sh @@ -10,21 +10,21 @@ # basedir=~/esm/esm-experiments/ # change via -p EXP_ID="test_experiment" # change via -r -startyear=1850 # change via -s -endyear=1850 # change via -e -envfile="$basedir/$EXP_ID/scripts/env.sh" # change via -x +startdate=18500101 # change via -s +enddate=18501231 # change via -e +envfile="" # change via -x +freq="m" run_monitoring="no" module load nco || module load NCO OCEAN_CHECK_NETCDF4=false # set to false to skip netcdf4 conversion, time consuming but reduces file size by at least 50% -OCEAN_CONVERT_NETCDF4=true -OCEAN_FILE_TAGS="grid_T grid_U grid_V grid_W icemod ptrc_T" +OCEAN_CONVERT_NETCDF4=true +OCEAN_FILE_TAGS="grid_T grid_U grid_V icemod ptrc_T" # Other settings -day="01" -max_jobs=12 +max_jobs=20 # ############################################################################### # END OF USER INTERFACE @@ -35,16 +35,17 @@ max_jobs=12 # # Read the command line arguments OPTIND=1 # Reset in case getopts has been used previously in the shell. -while getopts "h?md:r:s:e:p:x" opt; do +while getopts "h?md:r:s:e:p:x:i:" opt; do case "$opt" in h|\?) echo echo " Valid options are -h or -? for this help" echo " -d for more output (useful for debugging, not used at the moment)" - echo " -p path to data (basedir, default is $basedir)" + echo " -p path to data (basedir, default is $basedir)" echo " -r experiment / run id (run, default is $EXP_ID)" - echo " -s startyear (startyear, default is $startyear)" - echo " -e endyear (endyear, default is $endyear)" + echo " -s startdate (startdate, default is $startdate)" + echo " -e enddate (enddate, default is $enddate)" + echo " -i increment (increment, default is calculated automagially, see code for details)" echo " -x full path to env.sh file (envfile, default is $HOME/esm/esm-experiments/\$EXP_ID/scripts/env.sh)" echo " -m run nemo_monitoring.sh " echo @@ -54,9 +55,11 @@ while getopts "h?md:r:s:e:p:x" opt; do ;; r) EXP_ID=$OPTARG ;; - s) startyear=$OPTARG + s) startdate=$OPTARG ;; - e) endyear=$OPTARG + e) enddate=$OPTARG + ;; + i) increment=$OPTARG ;; p) basedir=$OPTARG ;; @@ -67,13 +70,22 @@ while getopts "h?md:r:s:e:p:x" opt; do esac done +[[ -z $envfile ]] && envfile="$basedir/$EXP_ID/scripts/env.sh" shift $((OPTIND-1)) [ "$1" = "--" ] && shift -envfile="$basedir/$EXP_ID/scripts/env.sh" echo -echo "Doing postprocessing in $basedir for $EXP_ID from year $startyear to $endyear" +echo "Doing postprocessing in $basedir for $EXP_ID from $startdate to $enddate" echo "Using an environment from $envfile" echo +startdate=$(date --date "$startdate" "+%Y%m%d") +enddate=$(date --date "$enddate" "+%Y%m%d") +if [[ ${#startdate} -ne 8 ]] || [[ ${#enddate} -ne 8 ]]; then + echo + echo " Please provide start and end date in yyyymmdd format e.g." + echo " $0 -s 20220101 -e 20220930" + echo + exit 1 +fi if [[ ! -r $envfile ]] ; then echo echo $envfile does not exist @@ -81,7 +93,7 @@ if [[ ! -r $envfile ]] ; then exit 1 else # module purge in envfile writes non-printable chars to log - source $envfile | tee + source $envfile > >(tee) fi # # the ncks option -a is deprecated since version 4.7.1 and replaced by --no-alphabetize @@ -99,8 +111,8 @@ set -e ############################################################################### # # some derived variables that directly depend on the command line arguments... -startdate=${startyear}0101 # -nextdate=$((endyear + 1))0101 +#startdate=${startyearmonth}01 # +#enddate=$((endyear + 1))0101 DATA_DIR=${basedir}/${EXP_ID}/outdata RESTART_DIR=${basedir}/${EXP_ID}/restart #inidate=18500101 # not needed anymore @@ -135,18 +147,12 @@ function time_merge { cat "$@" > $tmp && mv $tmp $out } -# -# Job specification -# - -mean_op='-monmean'; avg_op='-monavg' - sleep_time=2 # Definition of some time variables # # enddate: last day of this run -enddate=$(date --date="$nextdate - 1 day" "+%Y%m%d") +#enddate=$(date --date="$nextdate - 1 day" "+%Y%m%d") # # DATA PROCESSING @@ -162,27 +168,23 @@ then exit 1 fi -# Computation of expected input time stamps -startstamp=${startdate%??} -laststamp= -stamps= - -currdate=$startdate -while [[ $currdate -le $enddate ]] ; do - laststamp=${currdate%??} - stamps="$stamps $laststamp" - #currdate=$(calc_date plus -M 1 $currdate) - # 18930401 does not exist for the date function and leads to an error - [[ "$currdate" == "18930401" ]] && currdate="18930331" - currdate=$(date --date="$currdate + 1 month" "+%Y%m%d") -done - -# Computation of expected years for concatenated output -#iniyear=${inidate%????} -startyear=${startdate%????} -endyear=${enddate%????} -#[[ $startyear == $iniyear && $inidate != *0101 ]] && ((++startyear)) -[[ $enddate != *1231 ]] && ((--endyear)) +# Computation of frequency, currently y for yearly and m for monthly are supported +startmonth=$(date --date="$startdate" "+%m") +endmonth=$(date --date="$enddate" "+%m") +startyear=$(date --date="$startdate" "+%Y") +endyear=$(date --date="$enddate" "+%Y") + +[[ "$startmonth" == "01" ]] && [[ "$endmonth" == "12" ]] && freq="y" + +# calculate increment if not set, set to 1 to postprocess multiple years of +# simulation that ran in multiyear intervals. +if [[ -z $increment ]] ; then + if [[ $startyear == $endyear ]] ; then + increment=$((endmonth - startmonth + 1)) + else + increment=$((endyear - startyear + 1)) + fi +fi # Temporary directory id=$$ @@ -207,19 +209,32 @@ cd ${outmod} mkdir nc3 filetags="${OCEAN_FILE_TAGS}" -steps="${EXP_ID}_1d ${EXP_ID}_5d ${EXP_ID}_1m ${EXP_ID}_1y 1_${EXP_ID}_1d 1_${EXP_ID}_5d 1_${EXP_ID}_1m 1_${EXP_ID}_1y" +steps="${EXP_ID}_3h ${EXP_ID}_1d ${EXP_ID}_5d ${EXP_ID}_1m ${EXP_ID}_1y 1_${EXP_ID}_3h 1_${EXP_ID}_1d 1_${EXP_ID}_5d 1_${EXP_ID}_1m 1_${EXP_ID}_1y" tchunk=1; zchunk=1; ychunk=100; xchunk=100 echo 0 > $post_dir/status if ${OCEAN_CONVERT_NETCDF4} ; then - for ((year=startyear; year<=endyear; ++year)) + + nextdate=$startdate + while [[ $nextdate -lt $enddate ]] do + # treat special case of 18930401, see echam_postprocessing.sh + if [[ $freq == "m" ]] ; then + currdate1=$nextdate + currdate2=$(date --date="$currdate1 + ${increment} month - 1 day" "+%Y%m%d") + nextdate=$(date --date="$currdate1 + ${increment} month" "+%Y%m%d") + else + currdate1=$nextdate + currdate2=$(date --date="$currdate1 + ${increment} year - 1 day" "+%Y%m%d") + nextdate=$(date --date="$currdate2 + ${increment} year" "+%Y%m%d") + fi + for filetag in $filetags do for s in $steps do - input=${s}_${year}0101_${year}1231_${filetag}.nc3 - output=${s}_${year}0101_${year}1231_${filetag}.nc + input=${s}_${currdate1}_${currdate2}_${filetag}.nc3 + output=${s}_${currdate1}_${currdate2}_${filetag}.nc # !!! output files will have the same name as the old input file !!! if [[ -f $output ]] ; then mv $output $input @@ -284,27 +299,40 @@ cd ${outmod} echo 0 > $post_dir/status mkdir ym -for ((year=startyear; year<=endyear; ++year)) +nextdate=$startdate +while [[ $nextdate -lt $enddate ]] && [[ $freq="y" ]] do + # treat special case of 18930401, see echam_postprocessing.sh + if [[ $freq == "m" ]] ; then + currdate1=$nextdate + currdate2=$(date --date="$currdate1 + ${increment} month - 1 day" "+%Y%m%d") + nextdate=$(date --date="$currdate1 + ${increment} month" "+%Y%m%d") + else + currdate1=$nextdate + currdate2=$(date --date="$currdate1 + ${increment} year - 1 day" "+%Y%m%d") + nextdate=$(date --date="$currdate2 + ${increment} year" "+%Y%m%d") + fi + for filetag in $filetags do for s in $steps do # !!! output files will have the same name as the old input file !!! - input=${s}_${year}0101_${year}1231_${filetag}.nc + input=${s}_${currdate1}_${currdate2}_${filetag}.nc if [[ "$s" =~ ^1_.*$ ]] ; then - output=1_${EXP_ID}_1y_${year}0101_${year}1231_${filetag}.nc + output=1_${EXP_ID}_1y_${currdate1}_${currdate2}_${filetag}.nc else - output=${EXP_ID}_1y_${year}0101_${year}1231_${filetag}.nc + output=${EXP_ID}_1y_${currdate1}_${currdate2}_${filetag}.nc fi - if [[ -f $input ]] && [[ ! -f ym/$output ]] && [[ ! -f ym/${output}3 ]]; then + # ym calculation currently only available for 1y chunks + if [[ "$freq" == "y" ]] && [[ -f $input ]] && [[ ! -f ym/$output ]] && [[ ! -f ym/${output}3 ]]; then touch ym/$output # If too many jobs run at the same time, wait while (( $(jobs -p | wc -l) >= max_jobs )); do sleep $sleep_time; done ( trap 'echo $? > $post_dir/status' ERR - cdo yearmean $input ym/$output + cdo -L yearmean $input ym/$output cd ym mv $output ${output}3 ncks -7 $sortoption -L 1 \ @@ -318,7 +346,7 @@ do cd .. ) & # file from cdo must be available for [[ ! -f ym/$output ]] in case of e.g. 5d and 1m output - sleep 5 + sleep 3 fi done #steps done @@ -335,18 +363,41 @@ print 'NEMO ym calculation finished' print 'NEMO restart postprocessing started' cd ${RESTART_DIR}/${ocemod} -for ((year=startyear-1; year /dev/null 2>&1 ; then +# treat special case of 18930401, see echam_postprocessing.sh +if [[ $freq == "m" ]] ; then + prevdate=$(date --date="$startdate - 1 month" "+%Y%m%d") + prevenddate=$(date --date="$prevdate + 1 month -1 day" "+%Y%m%d") +else + prevdate=$(date --date="$startdate - 1 year" "+%Y%m%d") + prevenddate=$(date --date="$prevdate + 1 year - 1 day" "+%Y%m%d") +fi +nextdate=$prevdate +echo "nextdate=$nextdate / prevenddate=$prevenddate / enddate=$enddate" + +while [[ $nextdate -lt $prevenddate ]] +do + # treat special case of 18930401, see echam_postprocessing.sh + if [[ $freq == "m" ]] ; then + currdate1=$nextdate + currdate2=$(date --date="$currdate1 + 1 month - 1 day" "+%Y%m%d") + nextdate=$(date --date="$currdate1 + 1 month" "+%Y%m%d") + else + currdate1=$nextdate + currdate2=$(date --date="$currdate1 + 1 year - 1 day" "+%Y%m%d") + nextdate=$(date --date="$currdate2 + 1 year" "+%Y%m%d") + fi + + # output=${EXP_ID}_1y_${currdate1}_${currdate2}_${filetag}.nc + if ls *${EXP_ID}_*_restart*_${currdate2}_*.nc > /dev/null 2>&1 ; then # If too many jobs run at the same time, wait while (( $(jobs -p | wc -l) >= max_jobs )); do sleep $sleep_time; done ( trap 'echo $? > $post_dir/status' ERR print "Processing year $year" - tar czf ${EXP_ID}_restart_${year}1231.tar.gz *${EXP_ID}_*_restart*_${year}1231_*.nc - [[ $? -eq 0 ]] && rm *${EXP_ID}_*_restart*_${year}1231_*.nc + tar czf ${EXP_ID}_restart_${currdate2}.tar.gz *${EXP_ID}_*_restart*_${currdate2}_*.nc + [[ $? -eq 0 ]] && rm *${EXP_ID}_*_restart*_${currdate2}_*.nc ) & fi - wait done wait @@ -396,8 +447,8 @@ print 'removal of temporary and non-precious data files finished' print "post-processing finished for $startdate-$enddate" -if [[ "$run_monitoring" == "yes" ]] ; then - print "will now run NEMO monitoring for $startdate-$enddate" +if [[ "$endmonth" == "12" ]] && [[ "$run_monitoring" == "yes" ]] ; then + print "will now run NEMO monitoring until $enddate" $(dirname $0)/nemo_monitoring.sh -r ${EXP_ID} else print "NEMO monitoring switched off, use -m to activate it" diff --git a/configs/setups/focioifs/focioifs.yaml b/configs/setups/focioifs/focioifs.yaml index 215cd4640..c1c238301 100644 --- a/configs/setups/focioifs/focioifs.yaml +++ b/configs/setups/focioifs/focioifs.yaml @@ -19,8 +19,9 @@ general: - "modify_files" - "copy_files_to_work" - "report_missing_files" - - "add_vcs_info" - - "check_vcs_info_against_last_run" + # not working, bug already reported at https://github.com/esm-tools/esm_tools/discussions/774 + # - "add_vcs_info" + # - "check_vcs_info_against_last_run" - "database_entry" model: focioifs @@ -54,16 +55,34 @@ general: - agrif - '2.0' - '2.1' + - '2.1-O12' + - '2.1.1' choose_version: '2.1': + runoff_method: "EM21" + calving_method: "old" couplings: - - nemo-ORCA05_LIM2_KCM_AOW_FS_OASISMCT4+oifs43r3-foci + - nemo-ORCA05_LIM2_KCM_AOW_FS_OASISMCT4+oifs43r3-foci21 + '2.1.1': + runoff_method: "EM21" + calving_method: "JS" + couplings: + - nemo-ORCA05_LIM2_KCM_AOW_FS_OASISMCT4+oifs43r3-foci211 + '2.1-O12': + runoff_method: "EM21" + calving_method: "old" + couplings: + - nemo-ORCA12_LIM2_KCM_AOW_FS_OASISMCT4+oifs43r3-foci21 '2.0': + runoff_method: "old" + calving_method: "old" couplings: - nemo-ORCA05_LIM2_KCM_AOW_FS_OASISMCT4+oifs43r3-foci agrif: + runoff_method: "EM21" + calving_method: "old" couplings: - - nemo-ORCA05_LIM2_KCM_AGRIF_OASISMCT4+oifs43r3-foci + - nemo-ORCA05_LIM2_KCM_AGRIF_OASISMCT4+oifs43r3-foci21 version: "2.0" scenario: "PI-CTRL" @@ -71,8 +90,6 @@ general: postprocessing: false post_time: "00:05:00" compute_time: "01:30:00" - - runoff_method: "old" file_movements: forcing: @@ -180,6 +197,20 @@ oifs: # Turn on coupling # TODO: Add variable for AGRIF coupling FOCI_CPL_NEMO_LIM: ".true." + + # For coupled setups we can use ocean currents + use_ocean_currents: False + choose_use_ocean_currents: + True: + add_namelist_changes: + fort.4: + NAEPHY: + LECURR: ".true." + False: + add_namelist_changes: + fort.4: + NAEPHY: + LECURR: ".false." choose_resolution: @@ -193,6 +224,8 @@ oifs: choose_general.resolution: TCO95_ORCA05: nproc: 279 + TCO95_ORCA12: + nproc: 287 # split fields to A, R and L grid # A grid is wet points except lakes @@ -201,7 +234,8 @@ oifs: foci_fields_a: [A_QsrMix, A_QnsMix, ATotRain, ATotEvap, ATotSnow, AIceEvap] foci_fields_l: [AIceFrac, A_SSTSST, A_TepIce, A_IceTck, A_SnwTck, A_OCurx1, A_OCury1, A_OTaux1, A_OTauy1, A_ITaux1, A_ITauy1, A_QsrIce, A_QnsIce, A_dQnsdT] - foci_fields_r: [A_Runoff] #, A_Calving] + + #foci_fields_r: [A_Runoff, A_Calving] coupling_fields: "[[foci_fields_a-->FIELD]]": @@ -232,28 +266,81 @@ oifs: "[[fociagrif_fields_l-->FIELD]]": grid: atml "[[fociagrif_fields_n-->FIELD]]": - grid: atml - - + grid: atml + + choose_general.calving_method: + 'JS': + foci_fields_r: [A_Runoff, A_Calving] + 'old': + foci_fields_r: [A_Runoff] + # settings for restarting from another run lresume: ${general.lresume} ini_parent_exp_id: ${general.ini_parent_exp_id} ini_parent_date: "${general.ini_parent_date}" ini_parent_dir: "${general.ini_parent_dir}/restart/oifs/" + + # Post processing + choose_general.postprocessing: + True: + workflow: + next_run_triggered_by: tidy + subjobs: + oifs_postprocessing: + batch_or_shell: shell + order_in_cluster: concurrent + run_on_queue: ${computer.partitions.pp.name} + run_after: tidy + script_dir: ${general.esm_function_dir}/setups/focioifs/ + submit_to_batch_system: True + script: " + oifs_postprocessing.sh -m + -r ${general.expid} + -s ${start_date} + -e ${end_date} + -p ${general.base_dir}" + nproc: 1 nemo: - version: "ORCA05_LIM2_KCM_AOW_FS_OASISMCT4" + # For 2.1-O12 we choose ORCA12 config for NEMO + choose_general.version: + "2.1-O12": + version: "ORCA12_LIM2_KCM_AOW_FS_OASISMCT4" + resolution: ORCA12 + # dont this this does anything, but keep it for safety + default: + version: "3.6foci" + "*": + version: "ORCA05_LIM2_KCM_AOW_FS_OASISMCT4" + resolution: ORCA05 + + - #file_movements: - # input: - # all_directions: link + file_movements: + restart_in: + init_to_exp: link + exp_to_run: link + run_to_work: link + work_to_run: link - choose_general.resolution: - TCO95_ORCA05: + choose_resolution: + ORCA05: nproca: 24 nprocb: 20 - + loccunif_nb: 4 + # Joakim: Need to find good choice for ORCA12 + ORCA12: + nproca: 24 + nprocb: 20 + loccunif_nb: 288 + + # Set LOCCUNIF NB for nest + choose_nemo.nest1: + viking10: + loccunif_nb_nest: 16 + loccunif_nb_nest: 12 + namelist_changes: namelist_cfg: # Runoff comes from OASIS @@ -269,8 +356,9 @@ nemo: sn_rcv_rnf: ['coupled', 'no', '', '', ''] sn_rcv_emp: ['conservative', 'no', '', '', ''] - choose_general.runoff_method: + choose_general.runoff_method: "EM21": + runoff_method: "EM21" add_namelist_changes: namelist_cfg: namsbc_cpl: @@ -280,9 +368,13 @@ nemo: add_namelist_changes: 1_namelist_cfg: namsbc_cpl: - sn_rcv_rnf: ['coupled', 'no', '', '', ''] + sn_rcv_emp: ['conservative', 'no', '', '', ''] + sn_rcv_rnf: ['coupled', 'no', '', '', ''] + # Commented out calving since its only for Antarctica + # and its not needed in VIKING10 + #sn_rcv_cal: ['coupled', 'no', '', '', ''] - resolution: ORCA05 + coupling_freq: "$(( ${time_step} / ${nemo.time_step} ))" # number of neighbours for runoff remapping (if runoff_method = EM21) @@ -290,8 +382,8 @@ nemo: # Small number means lots of runoff in each few grid cells which could be unstable # Large number means low runoff in many grid cells which is stable, but less accurate # Needs tuning for each NEMO resolution - loccunif_nb: 4 - + #loccunif_nb: 4 + model_dir: ${general.model_dir}/nemo-${nemo.version} setup_dir: ${general.model_dir} @@ -301,11 +393,7 @@ nemo: ini_parent_date: "${general.ini_parent_date}" ini_parent_dir: "${general.ini_parent_dir}/restart/nemo/" ini_restart_steps: ${general.ini_nemo_restart_steps} - - choose_general.version: - default: - version: "3.6foci" - + ## ## coupling ## @@ -322,13 +410,14 @@ nemo: order_in_cluster: concurrent run_on_queue: ${computer.partitions.pp.name} run_after: tidy - script_dir: ${general.esm_function_dir}/setups/foci + script_dir: ${general.esm_function_dir}/setups/focioifs/ submit_to_batch_system: True script: " nemo_postprocessing.sh -m -r ${general.expid} - -s ${start_date!syear} - -e ${end_date!syear}" + -s ${start_date} + -e ${end_date} + -p ${general.base_dir}" nproc: 1 @@ -344,6 +433,39 @@ rnfmap: setup_dir: ${general.model_dir} nproc: 1 time_step: ${oasis3mct.coupling_time_step} + + choose_general.version: + "2.1.1": + version: foci211 + runoff_method: "JK22" + "2.1": + version: focioifs21 + runoff_method: "EM21" + "2.1-O12": + version: focioifs21 + runoff_method: "EM21" + "*": + version: focioifs1 + runoff_method: "old" + + #choose_general.runoff_method: + # "EM21": + # runoff_method: "EM21" + # "*": + # runoff_method: "old" + + choose_general.calving_method: + 'JS': + runoff_fields_recv: [R_Runoff_atm, R_Calving_atm] + 'old': + runoff_fields_recv: [R_Runoff_atm] + + add_outdata_files: + runoff_out: runoff_out + add_outdata_in_work: + runoff_out: runoff_out.nc + add_outdata_sources: + runoff_out: runoff_out.nc ######################################################################################### @@ -361,13 +483,20 @@ oasis3mct: - rnfmap - xios + file_movements: + input: + init_to_exp: copy + exp_to_run: copy + run_to_work: copy + work_to_run: link + # settings for restarting from another run # for oasis we always do a (fake) restart lresume: true ini_parent_exp_id: ${general.ini_parent_exp_id} ini_parent_date: "${general.ini_parent_date}" ini_parent_dir: "${general.ini_parent_dir}/restart/oasis3mct/" - + this_oasis_date_stamp: "" choose_lresume: 1: @@ -387,80 +516,68 @@ oasis3mct: coupling_time_step: 10800 export_mode: EXPORTED + choose_general.resolution: + TCO95_ORCA05: + # Default values (probably ok if grids similar) + nb_of_neighbours_a2o: 9 + weight_a2o: 2.0 + TCO95_ORCA12: + # Suggested by Eric Maisonnave for Tco95 -> VIKING10 + nb_of_neighbours_a2o: 15 + weight_a2o: 0.1 + coupling_target_fields: # Coupling ocean fields to atm sstocean: - #- 'AIceFrac:A_SSTSST:A_TepIce:A_IceTck:A_SnwTck:A_OCurx1:A_OCury1 <--o2agauswgt-- OIceFrac:O_SSTSST:O_TepIce:O_IceTck:O_SnwTck:O_OCurx1:O_OCury1' - - 'AIceFrac <--o2agauswgt-- OIceFrac' - - 'A_SSTSST <--o2agauswgt-- O_SSTSST' - - 'A_TepIce <--o2agauswgt-- O_TepIce' - - 'A_IceTck <--o2agauswgt-- O_IceTck' - - 'A_SnwTck <--o2agauswgt-- O_SnwTck' - - 'A_OCurx1 <--o2agauswgt-- O_OCurx1' - - 'A_OCury1 <--o2agauswgt-- O_OCury1' + - 'AIceFrac:A_SSTSST:A_TepIce:A_IceTck:A_SnwTck:A_OCurx1:A_OCury1 <--o2agauswgt-- OIceFrac:O_SSTSST:O_TepIce:O_IceTck:O_SnwTck:O_OCurx1:O_OCury1' + #- 'AIceFrac <--o2agauswgt-- OIceFrac' + #- 'A_SSTSST <--o2agauswgt-- O_SSTSST' + #- 'A_TepIce <--o2agauswgt-- O_TepIce' + #- 'A_IceTck <--o2agauswgt-- O_IceTck' + #- 'A_SnwTck <--o2agauswgt-- O_SnwTck' + #- 'A_OCurx1 <--o2agauswgt-- O_OCurx1' + #- 'A_OCury1 <--o2agauswgt-- O_OCury1' - # Couple HTESSEL runoff to river routing - rnfatm: - - 'R_Runoff_atm <--a2rgauswgt-- A_Runoff' - #- 'R_Calving_atm <--a2rgauswgt-- A_Calving' + # Couple HTESSEL runoff to river routing: + # This is done in a choose_general.version block below # Coupled river routing to ocean runoff mask - #rnrunoff: - # #- 'O_Runoff <--r2ogauswgt-- R_Runoff_oce' - # #- 'O_Runoff <--r2oconserv-- R_Runoff_oce' - # - 'O_Runoff <--r2obilinear-- R_Runoff_oce' + # are set further down + # Couple atm fluxes to ocean (non-conserving) flxatmos: - #- 'O_QsrIce:O_QnsIce:OTotSnow:OIceEvap:O_dQnsdT <--a2ogauswgtnc-- A_QsrIce:A_QnsIce:ATotSnow:AIceEvap:A_dQnsdT' - - 'O_QsrIce <--a2ogauswgtnc-- A_QsrIce' - - 'O_QnsIce <--a2ogauswgtnc-- A_QnsIce' + - 'O_QsrIce:O_QnsIce:O_dQnsdT <--a2ogauswgtnc-- A_QsrIce:A_QnsIce:A_dQnsdT' + #- 'O_QsrIce <--a2ogauswgtnc-- A_QsrIce' + #- 'O_QnsIce <--a2ogauswgtnc-- A_QnsIce' #- 'OTotSnow <--a2ogauswgtnc-- ATotSnow' #- 'OIceEvap <--a2ogauswgtnc-- AIceEvap' - - 'O_dQnsdT <--a2ogauswgtnc-- A_dQnsdT' + #- 'O_dQnsdT <--a2ogauswgtnc-- A_dQnsdT' # Coupled atm stress to ocean (non-conserving) atmtau: - #- 'O_OTaux1:O_OTauy1:O_ITaux1:O_ITauy1 <--a2ogauswgtnc-- A_OTaux1:A_OTauy1:A_ITaux1:A_ITauy1' - - 'O_OTaux1 <--a2ogauswgtnc-- A_OTaux1' - - 'O_OTauy1 <--a2ogauswgtnc-- A_OTauy1' - - 'O_ITaux1 <--a2ogauswgtnc-- A_ITaux1' - - 'O_ITauy1 <--a2ogauswgtnc-- A_ITauy1' + - 'O_OTaux1:O_OTauy1:O_ITaux1:O_ITauy1 <--a2ogauswgtnc-- A_OTaux1:A_OTauy1:A_ITaux1:A_ITauy1' + #- 'O_OTaux1 <--a2ogauswgtnc-- A_OTaux1' + #- 'O_OTauy1 <--a2ogauswgtnc-- A_OTauy1' + #- 'O_ITaux1 <--a2ogauswgtnc-- A_ITaux1' + #- 'O_ITauy1 <--a2ogauswgtnc-- A_ITauy1' # Couple atm fluxes to ocean (conserving) atmflx: - #- 'O_QsrMix:O_QnsMix:OTotRain <--a2ogauswgtcn-- A_QsrMix:A_QnsMix:ATotRain' - - 'O_QsrMix <--a2ogauswgtcn-- A_QsrMix' - - 'O_QnsMix <--a2ogauswgtcn-- A_QnsMix' - - 'OTotRain <--a2ogauswgtcn-- ATotRain' - - 'OTotSnow <--a2ogauswgtcn-- ATotSnow' - - 'OIceEvap <--a2ogauswgtcn-- AIceEvap' - - 'OTotEvap <--a2ogauswgtcn-- ATotEvap' - - # new behaviour: locally conservative remapping of runoff - # and split runoff and Antarctic calving - # old behaviour: everything is runoff. remap to NEMO with bilinear - choose_general.runoff_method: - 'EM21': - add_coupling_target_fields: - rnrunoff: - - 'O_Runoff <--r2oloccunif-- R_Runoff_oce' - #- 'OCalving <--c2obilincn-- R_Calving_oce' - add_restart_in_files: - rmp_c2o_RC: rmp_c2o_RC - rmp_r2o_RC: rmp_r2o_RC - add_restart_out_files: - rmp_c2o_RC: rmp_c2o_RC - rmp_r2o_RC: rmp_r2o_RC - '*': - add_coupling_target_fields: - rnrunoff: - - 'O_Runoff <--r2obilinear-- R_Runoff_oce' - add_restart_in_files: - rmp_r2f_RF: rmp_r2f_RF - add_restart_out_files: - rmp_r2f_RF: rmp_r2f_RF - + - 'O_QsrMix:O_QnsMix:OTotRain:OTotSnow:OIceEvap:OTotEvap <--a2ogauswgtcn-- A_QsrMix:A_QnsMix:ATotRain:ATotSnow:AIceEvap:ATotEvap' + #- 'O_QsrMix <--a2ogauswgtcn-- A_QsrMix' + #- 'O_QnsMix <--a2ogauswgtcn-- A_QnsMix' + #- 'OTotRain <--a2ogauswgtcn-- ATotRain' + #- 'OTotSnow <--a2ogauswgtcn-- ATotSnow' + #- 'OIceEvap <--a2ogauswgtcn-- AIceEvap' + #- 'OTotEvap <--a2ogauswgtcn-- ATotEvap' + choose_general.version: + '2.1.1': + add_coupling_target_fields: + # Couple HTESSEL runoff to river routing + rnfatm: + - 'R_Runoff_atm:R_Calving_atm <--a2rgauswgt-- A_Runoff:A_Calving' + agrif: add_restart_in_files: rmp_a2agr_L1: rmp_a2agr_L1 @@ -468,6 +585,7 @@ oasis3mct: rmp_agr2a_1L: rmp_agr2a_1L rmp_agr2a_2L: rmp_agr2a_2L rmp_r2agr_R1: rmp_r2agr_R1 + rmp_c2agr_R1: rmp_c2agr_R1 sstocean1: sstocean1 flxatmos1: flxatmos1 @@ -482,6 +600,7 @@ oasis3mct: rmp_agr2a_1L: rmp_agr2a_1L rmp_agr2a_2L: rmp_agr2a_2L rmp_r2agr_R1: rmp_r2agr_R1 + rmp_c2agr_R1: rmp_c2agr_R1 sstocean1: sstocean1 flxatmos1: flxatmos1 @@ -491,6 +610,9 @@ oasis3mct: agrifspg: agrifspg add_coupling_target_fields: + # Couple HTESSEL runoff to river routing + rnfatm: + - 'R_Runoff_atm <--a2rgauswgt-- A_Runoff' sstocean_1: #- 'M01_AIceFrac <--agr2agauswgt-- 1_OIceFrac' #- 'M01_A_SSTSST <--agr2agauswgt-- 1_O_SSTSST' @@ -506,13 +628,14 @@ oasis3mct: #- 'M01_A_SnwTck <--agr2adistwgt-- 1_O_SnwTck' #- 'M01_A_OCurx1 <--agr2adistwgt-- 1_O_OCurx1' #- 'M01_A_OCury1 <--agr2adistwgt-- 1_O_OCury1' - - 'M01_AIceFrac <--agr2abilin-- 1_OIceFrac' - - 'M01_A_SSTSST <--agr2abilin-- 1_O_SSTSST' - - 'M01_A_TepIce <--agr2abilin-- 1_O_TepIce' - - 'M01_A_IceTck <--agr2abilin-- 1_O_IceTck' - - 'M01_A_SnwTck <--agr2abilin-- 1_O_SnwTck' - - 'M01_A_OCurx1 <--agr2abilin-- 1_O_OCurx1' - - 'M01_A_OCury1 <--agr2abilin-- 1_O_OCury1' + - 'M01_AIceFrac:M01_A_SSTSST:M01_A_TepIce:M01_A_IceTck:M01_A_SnwTck:M01_A_OCurx1:M01_A_OCury1 <--agr2abilin-- 1_OIceFrac:1_O_SSTSST:1_O_TepIce:1_O_IceTck:1_O_SnwTck:1_O_OCurx1:1_O_OCury1' + #- 'M01_AIceFrac <--agr2abilin-- 1_OIceFrac' + #- 'M01_A_SSTSST <--agr2abilin-- 1_O_SSTSST' + #- 'M01_A_TepIce <--agr2abilin-- 1_O_TepIce' + #- 'M01_A_IceTck <--agr2abilin-- 1_O_IceTck' + #- 'M01_A_SnwTck <--agr2abilin-- 1_O_SnwTck' + #- 'M01_A_OCurx1 <--agr2abilin-- 1_O_OCurx1' + #- 'M01_A_OCury1 <--agr2abilin-- 1_O_OCury1' atmflx_1: #- '1_O_QsrMix <--a2agrgauswgtcn-- A_QsrMix' #- '1_O_QnsMix <--a2agrgauswgtcn-- A_QnsMix' @@ -520,9 +643,13 @@ oasis3mct: #- '1_O_QsrMix <--a2agrdistwgtcn-- A_QsrMix' #- '1_O_QnsMix <--a2agrdistwgtcn-- A_QnsMix' #- '1_OTotRain <--a2agrdistwgtcn-- ATotRain' - - '1_O_QsrMix <--a2agrbilincn-- A_QsrMix' - - '1_O_QnsMix <--a2agrbilincn-- A_QnsMix' - - '1_OTotRain <--a2agrbilincn-- ATotRain' + - '1_O_QsrMix:1_O_QnsMix:1_OTotRain:1_OTotSnow:1_OTotEvap:1_OIceEvap <--a2agrgauswgtcn-- A_QsrMix:A_QnsMix:ATotRain:ATotSnow:ATotEvap:AIceEvap' + #- '1_O_QsrMix <--a2agrbilincn-- A_QsrMix' + #- '1_O_QnsMix <--a2agrbilincn-- A_QnsMix' + #- '1_OTotRain <--a2agrbilincn-- ATotRain' + #- '1_OTotSnow <--a2agrbilincn-- ATotSnow' + #- '1_OTotEvap <--a2agrbilincn-- ATotEvap' + #- '1_OIceEvap <--a2agrbilincn-- AIceEvap' atmtau_1: #- '1_O_OTaux1 <--a2agrgauswgtnc-- A_OTaux1' #- '1_O_OTauy1 <--a2agrgauswgtnc-- A_OTauy1' @@ -532,10 +659,11 @@ oasis3mct: #- '1_O_OTauy1 <--a2agrdistwgt-- A_OTauy1' #- '1_O_ITaux1 <--a2agrdistwgt-- A_ITaux1' #- '1_O_ITauy1 <--a2agrdistwgt-- A_ITauy1' - - '1_O_OTaux1 <--a2agrbilin-- A_OTaux1' - - '1_O_OTauy1 <--a2agrbilin-- A_OTauy1' - - '1_O_ITaux1 <--a2agrbilin-- A_ITaux1' - - '1_O_ITauy1 <--a2agrbilin-- A_ITauy1' + - '1_O_OTaux1:1_O_OTauy1:1_O_ITaux1:1_O_ITauy1 <--a2agrgauswgtcn-- A_OTaux1:A_OTauy1:A_ITaux1:A_ITauy1' + #- '1_O_OTaux1 <--a2agrbilin-- A_OTaux1' + #- '1_O_OTauy1 <--a2agrbilin-- A_OTauy1' + #- '1_O_ITaux1 <--a2agrbilin-- A_ITaux1' + #- '1_O_ITauy1 <--a2agrbilin-- A_ITauy1' flxatmos_1: #- '1_O_QsrIce <--a2agrgauswgtnc-- A_QsrIce' #- '1_O_QnsIce <--a2agrgauswgtnc-- A_QnsIce' @@ -547,19 +675,51 @@ oasis3mct: #- '1_OTotSnow <--a2agrdistwgt-- ATotSnow' #- '1_OIceEvap <--a2agrdistwgt-- AIceEvap' #- '1_O_dQnsdT <--a2agrdistwgt-- A_dQnsdT' - - '1_O_QsrIce <--a2agrbilin-- A_QsrIce' - - '1_O_QnsIce <--a2agrbilin-- A_QnsIce' - - '1_OTotSnow <--a2agrbilin-- ATotSnow' - - '1_OIceEvap <--a2agrbilin-- AIceEvap' - - '1_O_dQnsdT <--a2agrbilin-- A_dQnsdT' + - '1_O_QsrIce:1_O_QnsIce:1_O_dQnsdT <--a2agrgauswgtcn-- A_QsrIce:A_QnsIce:A_dQnsdT' + #- '1_O_QsrIce <--a2agrbilin-- A_QsrIce' + #- '1_O_QnsIce <--a2agrbilin-- A_QnsIce' + #- '1_OTotSnow <--a2agrbilin-- ATotSnow' + #- '1_OIceEvap <--a2agrbilin-- AIceEvap' + #- '1_O_dQnsdT <--a2agrbilin-- A_dQnsdT' rnrunoff_1: - - '1_O_Runoff <--r2agrbilinear-- R_Runoff_oce' + #- '1_O_Runoff <--r2agrbilinear-- R_Runoff_oce' + #- '1_OCalving <--r2agrbilinear-- R_Calving_oce' + - '1_O_Runoff <--r2agrloccunif-- R_Runoff_oce' + #- '1_OCalving <--r2agrzero-- R_Calving_oce' agrifspg: #- 'M01_A_AgrSpg <--agr22agauswgt-- 1_O_AgrSpg' - 'M01_A_AgrSpg <--agr22adistwgt-- 1_O_AgrSpg' #- 'M01_A_AgrSpg <--agr22abilin-- 1_O_AgrSpg' + '*': + # Couple HTESSEL runoff to river routing + add_coupling_target_fields: + rnfatm: + - 'R_Runoff_atm <--a2rgauswgt-- A_Runoff' - + # new behaviour: locally conservative remapping of runoff + # and split runoff and Antarctic calving + # old behaviour: everything is runoff. remap to NEMO with bilinear + choose_general.runoff_method: + 'EM21': + add_coupling_target_fields: + rnrunoff: + - 'O_Runoff <--r2oloccunif-- R_Runoff_oce' + - 'OCalving <--c2obilincn-- R_Calving_oce' + add_restart_in_files: + rmp_c2o_RC: rmp_c2o_RC + rmp_r2o_RC: rmp_r2o_RC + add_restart_out_files: + rmp_c2o_RC: rmp_c2o_RC + rmp_r2o_RC: rmp_r2o_RC + '*': + add_coupling_target_fields: + rnrunoff: + - 'O_Runoff <--r2obilinear-- R_Runoff_oce' + add_restart_in_files: + rmp_r2f_RF: rmp_r2f_RF + add_restart_out_files: + rmp_r2f_RF: rmp_r2f_RF + coupling_directions: # OIFS dry points to runoff mapper 'atmr->rnfa': @@ -612,7 +772,15 @@ oasis3mct: # Runoff to AGRIF 'rnfo->agr1r': lag: ${r2o_lag} - seq: 3 + seq: 3 + # Runoff to AGRIF (EM21) + 'rnfm->agr1': + lag: ${r2o_lag} + seq: 3 + 'rnfs->agr1': + lag: ${r2o_lag} + seq: 3 + coupling_methods: # NEMO to OpenIFS (Lgrid) @@ -697,7 +865,7 @@ oasis3mct: search_bin: latitude nb_of_neighbours: ${nemo.loccunif_nb} - mapping: - mapname: rmp_rnfm_to_opac_LOCCUNIF_${nemo.resolution}.nc + mapname: rmp_rnfm_to_opac_LOCCUNIF_${nemo.loccunif_nb}_${nemo.resolution}.nc map_regrid_on: dst # Remapping for calving @@ -709,7 +877,7 @@ oasis3mct: time_transformation: average remapping: - mapping: - mapname: rmp_rnfm_to_opac_ZERO.nc + mapname: rmp_rnfs_to_opac_ZERO.nc map_regrid_on: src postprocessing: conserv: @@ -721,7 +889,7 @@ oasis3mct: search_bin: latitude nb_of_search_bins: 40 - mapping: - mapname: rmp_rnfs_to_opaa_BILINEAR_${nemo.resolution}.nc + mapname: rmp_rnfs_to_opaa_ZERO_${nemo.resolution}.nc map_regrid_on: dst postprocessing: conserv: @@ -734,8 +902,8 @@ oasis3mct: remapping: - gauswgt: search_bin: latitude - nb_of_neighbours: 9 - weight: 2.0 + nb_of_neighbours: ${nb_of_neighbours_a2o} + weight: ${weight_a2o} - mapping: mapname: rmp_${oifs.oasis_grid_name_l}_to_opat_GAUSWGT_${nemo.resolution}.nc map_regrid_on: src @@ -747,8 +915,8 @@ oasis3mct: remapping: - gauswgt: search_bin: latitude - nb_of_neighbours: 9 - weight: 2.0 + nb_of_neighbours: ${nb_of_neighbours_a2o} + weight: ${weight_a2o} - mapping: mapname: rmp_${oifs.oasis_grid_name_a}_to_opac_GAUSWGT_${nemo.resolution}.nc map_regrid_on: src @@ -763,10 +931,10 @@ oasis3mct: remapping: - gauswgt: search_bin: latitude - nb_of_neighbours: 2 - weight: 2.0 + nb_of_neighbours: 15 + weight: 0.1 - mapping: - mapname: rmp_${oifs.oasis_grid_name_l}_to_agr1_GAUSWGT_${nemo.resolution}.nc + mapname: rmp_${oifs.oasis_grid_name_l}_to_agr1_GAUSWGT_${nemo.nest1}.nc map_regrid_on: src # OpenIFS (Agrid) to AGRIF @@ -776,10 +944,10 @@ oasis3mct: remapping: - gauswgt: search_bin: latitude - nb_of_neighbours: 2 - weight: 2.0 + nb_of_neighbours: 15 + weight: 0.1 - mapping: - mapname: rmp_${oifs.oasis_grid_name_a}_to_agr1_GAUSWGT_${nemo.resolution}.nc + mapname: rmp_${oifs.oasis_grid_name_a}_to_agr1_GAUSWGT_${nemo.nest1}.nc map_regrid_on: src # AGRIF to OpenIFS (Lgrid) @@ -889,7 +1057,29 @@ oasis3mct: - mapping: mapname: rmp_rnfo_to_agr1r_BILINEAR_${nemo.resolution}.nc map_regrid_on: dst - + + # Locally conserving runoff mapping + r2agrloccunif: + time_transformation: average + remapping: + - loccunif: + search_bin: latitude + nb_of_neighbours: ${nemo.loccunif_nb_nest} + - mapping: + mapname: rmp_rnfm_to_agr1_LOCCUNIF_${nemo.loccunif_nb_nest}_${nemo.nest1}.nc + map_regrid_on: dst + + # Requires setting remap_matrix=0 in rmp file (see above comment for r2ozero) + r2agrzero: + time_transformation: average + remapping: + - mapping: + mapname: rmp_rnfs_to_agr1_ZERO.nc + map_regrid_on: src + postprocessing: + conserv: + method: global + #add_input_files: input_files: areas: areas @@ -936,14 +1126,17 @@ oasis3mct: rmp_r2o_RC: rmp_rnfm_to_opac_LOCCUNIF_${nemo.loccunif_nb}_${nemo.resolution}.nc rmp_a2o_LT: rmp_${oifs.oasis_grid_name_l}_to_opat_GAUSWGT_${nemo.resolution}.nc rmp_a2o_AC: rmp_${oifs.oasis_grid_name_a}_to_opac_GAUSWGT_${nemo.resolution}.nc - rmp_c2o_RC: rmp_rnfs_to_opaa_BILINEAR_${nemo.resolution}.nc + #rmp_c2o_RC: rmp_rnfs_to_opaa_BILINEAR_${nemo.resolution}.nc + rmp_c2o_RC: rmp_rnfs_to_opaa_ZERO_${nemo.resolution}.nc # These four are for AGRIF-OpenIFS remapping - rmp_a2agr_L1: rmp_${oifs.oasis_grid_name_l}_to_agr1_BILINEAR_${nemo.resolution}.nc - rmp_a2agr_A1: rmp_${oifs.oasis_grid_name_a}_to_agr1_BILINEAR_${nemo.resolution}.nc + rmp_a2agr_L1: rmp_${oifs.oasis_grid_name_l}_to_agr1_GAUSWGT_${nemo.nest1}.nc + rmp_a2agr_A1: rmp_${oifs.oasis_grid_name_a}_to_agr1_GAUSWGT_${nemo.nest1}.nc rmp_agr2a_1L: rmp_agr1_to_${oifs.oasis_grid_name_l}_BILINEAR_${nemo.resolution}.nc rmp_agr2a_2L: rmp_agr2_to_${oifs.oasis_grid_name_l}_DISTWGT_${nemo.resolution}.nc - rmp_r2agr_R1: rmp_rnfo_to_agr1r_BILINEAR_${nemo.resolution}.nc + #rmp_r2agr_R1: rmp_rnfo_to_agr1r_BILINEAR_${nemo.resolution}.nc + rmp_r2agr_R1: rmp_rnfm_to_agr1_LOCCUNIF_${nemo.loccunif_nb_nest}_${nemo.nest1}.nc + rmp_c2agr_R1: rmp_rnfm_to_agr1_ZERO.nc sstocean: sstocean flxatmos: flxatmos @@ -965,15 +1158,18 @@ oasis3mct: #rmp_r2f_RF: rmp_rnfo_to_rnfo_GAUSWGT_${nemo.resolution}.nc rmp_r2f_RF: rmp_rnfo_to_rnfo_BILINEAR_${nemo.resolution}.nc rmp_r2o_RC: rmp_rnfm_to_opac_LOCCUNIF_${nemo.loccunif_nb}_${nemo.resolution}.nc - rmp_c2o_RC: rmp_rnfs_to_opaa_BILINEAR_${nemo.resolution}.nc + #rmp_c2o_RC: rmp_rnfs_to_opaa_BILINEAR_${nemo.resolution}.nc + rmp_c2o_RC: rmp_rnfs_to_opaa_ZERO_${nemo.resolution}.nc rmp_a2o_LT: rmp_${oifs.oasis_grid_name_l}_to_opat_GAUSWGT_${nemo.resolution}.nc rmp_a2o_AC: rmp_${oifs.oasis_grid_name_a}_to_opac_GAUSWGT_${nemo.resolution}.nc - rmp_a2agr_L1: rmp_${oifs.oasis_grid_name_l}_to_agr1_BILINEAR_${nemo.resolution}.nc - rmp_a2agr_A1: rmp_${oifs.oasis_grid_name_a}_to_agr1_BILINEAR_${nemo.resolution}.nc + rmp_a2agr_L1: rmp_${oifs.oasis_grid_name_l}_to_agr1_GAUSWGT_${nemo.nest1}.nc + rmp_a2agr_A1: rmp_${oifs.oasis_grid_name_a}_to_agr1_GAUSWGT_${nemo.nest1}.nc rmp_agr2a_1L: rmp_agr1_to_${oifs.oasis_grid_name_l}_BILINEAR_${nemo.resolution}.nc rmp_agr2a_2L: rmp_agr2_to_${oifs.oasis_grid_name_l}_DISTWGT_${nemo.resolution}.nc - rmp_r2agr_R1: rmp_rnfo_to_agr1r_BILINEAR_${nemo.resolution}.nc + #rmp_r2agr_R1: rmp_rnfo_to_agr1r_BILINEAR_${nemo.resolution}.nc + rmp_r2agr_R1: rmp_rnfm_to_agr1_LOCCUNIF_${nemo.loccunif_nb_nest}_${nemo.nest1}.nc + rmp_c2agr_R1: rmp_rnfm_to_agr1_ZERO.nc #rmp_a2agr_L1: rmp_${oifs.oasis_grid_name_l}_to_agr1_GAUSWGT_${nemo.resolution}.nc #rmp_a2agr_A1: rmp_${oifs.oasis_grid_name_a}_to_agr1_GAUSWGT_${nemo.resolution}.nc @@ -1016,15 +1212,19 @@ oasis3mct: #rmp_r2f_RF: rmp_rnfo_to_rnfo_GAUSWGT_${nemo.resolution}.nc rmp_r2f_RF: rmp_rnfo_to_rnfo_BILINEAR_${nemo.resolution}.nc rmp_r2o_RC: rmp_rnfm_to_opac_LOCCUNIF_${nemo.loccunif_nb}_${nemo.resolution}.nc - rmp_c2o_RC: rmp_rnfs_to_opaa_BILINEAR_${nemo.resolution}.nc + #rmp_c2o_RC: rmp_rnfs_to_opaa_BILINEAR_${nemo.resolution}.nc + rmp_c2o_RC: rmp_rnfs_to_opaa_ZERO_${nemo.resolution}.nc rmp_a2o_LT: rmp_${oifs.oasis_grid_name_l}_to_opat_GAUSWGT_${nemo.resolution}.nc rmp_a2o_AC: rmp_${oifs.oasis_grid_name_a}_to_opac_GAUSWGT_${nemo.resolution}.nc - rmp_a2agr_L1: rmp_${oifs.oasis_grid_name_l}_to_agr1_BILINEAR_${nemo.resolution}.nc - rmp_a2agr_A1: rmp_${oifs.oasis_grid_name_a}_to_agr1_BILINEAR_${nemo.resolution}.nc + rmp_a2agr_L1: rmp_${oifs.oasis_grid_name_l}_to_agr1_GAUSWGT_${nemo.nest1}.nc + rmp_a2agr_A1: rmp_${oifs.oasis_grid_name_a}_to_agr1_GAUSWGT_${nemo.nest1}.nc rmp_agr2a_1L: rmp_agr1_to_${oifs.oasis_grid_name_l}_BILINEAR_${nemo.resolution}.nc rmp_agr2a_2L: rmp_agr2_to_${oifs.oasis_grid_name_l}_DISTWGT_${nemo.resolution}.nc - rmp_r2agr_R1: rmp_rnfo_to_agr1r_BILINEAR_${nemo.resolution}.nc + #rmp_r2agr_R1: rmp_rnfo_to_agr1r_BILINEAR_${nemo.resolution}.nc + rmp_r2agr_R1: rmp_rnfm_to_agr1_LOCCUNIF_${nemo.loccunif_nb_nest}_${nemo.nest1}.nc + rmp_c2agr_R1: rmp_rnfm_to_agr1_ZERO.nc + #rmp_a2agr_L1: rmp_${oifs.oasis_grid_name_l}_to_agr1_GAUSWGT_${nemo.resolution}.nc #rmp_a2agr_A1: rmp_${oifs.oasis_grid_name_a}_to_agr1_GAUSWGT_${nemo.resolution}.nc #rmp_agr2a_1L: rmp_agr1_to_${oifs.oasis_grid_name_l}_GAUSWGT_${nemo.resolution}.nc @@ -1050,15 +1250,18 @@ oasis3mct: #rmp_r2f_RF: rmp_rnfo_to_rnfo_GAUSWGT_${nemo.resolution}.nc rmp_r2f_RF: rmp_rnfo_to_rnfo_BILINEAR_${nemo.resolution}.nc rmp_r2o_RC: rmp_rnfm_to_opac_LOCCUNIF_${nemo.loccunif_nb}_${nemo.resolution}.nc - rmp_c2o_RC: rmp_rnfs_to_opaa_BILINEAR_${nemo.resolution}.nc + #rmp_c2o_RC: rmp_rnfs_to_opaa_BILINEAR_${nemo.resolution}.nc + rmp_c2o_RC: rmp_rnfs_to_opaa_ZERO_${nemo.resolution}.nc rmp_a2o_LT: rmp_${oifs.oasis_grid_name_l}_to_opat_GAUSWGT_${nemo.resolution}.nc rmp_a2o_AC: rmp_${oifs.oasis_grid_name_a}_to_opac_GAUSWGT_${nemo.resolution}.nc - rmp_a2agr_L1: rmp_${oifs.oasis_grid_name_l}_to_agr1_BILINEAR_${nemo.resolution}.nc - rmp_a2agr_A1: rmp_${oifs.oasis_grid_name_a}_to_agr1_BILINEAR_${nemo.resolution}.nc + rmp_a2agr_L1: rmp_${oifs.oasis_grid_name_l}_to_agr1_GAUSWGT_${nemo.nest1}.nc + rmp_a2agr_A1: rmp_${oifs.oasis_grid_name_a}_to_agr1_GAUSWGT_${nemo.nest1}.nc rmp_agr2a_1L: rmp_agr1_to_${oifs.oasis_grid_name_l}_BILINEAR_${nemo.resolution}.nc rmp_agr2a_2L: rmp_agr2_to_${oifs.oasis_grid_name_l}_DISTWGT_${nemo.resolution}.nc - rmp_r2agr_R1: rmp_rnfo_to_agr1r_BILINEAR_${nemo.resolution}.nc + #rmp_r2agr_R1: rmp_rnfo_to_agr1r_BILINEAR_${nemo.resolution}.nc + rmp_r2agr_R1: rmp_rnfm_to_agr1_LOCCUNIF_${nemo.loccunif_nb_nest}_${nemo.nest1}.nc + rmp_c2agr_R1: rmp_rnfm_to_agr1_ZERO.nc #rmp_a2agr_L1: rmp_${oifs.oasis_grid_name_l}_to_agr1_GAUSWGT_${nemo.resolution}.nc #rmp_a2agr_A1: rmp_${oifs.oasis_grid_name_a}_to_agr1_GAUSWGT_${nemo.resolution}.nc diff --git a/configs/setups/focioifs/nemo_monitoring.sh b/configs/setups/focioifs/nemo_monitoring.sh deleted file mode 100755 index 2d1bec603..000000000 --- a/configs/setups/focioifs/nemo_monitoring.sh +++ /dev/null @@ -1,244 +0,0 @@ -#!/bin/bash -# TODO: need to add SLURM header -# -################################################################################# -# default settings for the variables that can be changed via the command line -# -basedir=~/esm/esm-experiments/ # change via -p -EXP_ID="test_experiment" # change via -r -envfile="$basedir/$EXP_ID/scripts/env.sh" # change via -x -ncpus=24 -use_singularity=true -# -#------- DO NOT EDIT BELOW THIS LINE UNLESS YOU KNOW WHAT YOU ARE DOING ------# -# -# Support log style output -print () { echo "$(date +'%F %T'):" "$@"; } -# always use -O with cdo -cdo () { command cdo -O "$@"; } - -# Read the command line arguments -OPTIND=1 # Reset in case getopts has been used previously in the shell. -while getopts "h?d:r:n:p:x:" opt; do - case "$opt" in - h|\?) - echo - echo " Valid options are -h or -? for this help" - echo " -d for more output (useful for debugging, not used at the moment)" - echo " -p path to data (basedir, default is $basedir)" - echo " -r experiment / run id (run, default is $EXP_ID)" - echo " -n number of CPUs to use (ncpus, default is $ncpus)" - echo " -x full path to env.sh file (envfile, default is $HOME/esm/esm-experiments/\$EXP_ID/scripts/env.sh)" - echo - exit 0 - ;; - d) debug=1 # verbose mode - ;; - r) EXP_ID=$OPTARG - ;; - n) ncpus=$OPTARG - ;; - p) basedir=$OPTARG - ;; - x) envfile=$OPTARG - ;; - esac -done -shift $((OPTIND-1)) -[ "$1" = "--" ] && shift - -# update vars with command line options if set -envfile="$basedir/$EXP_ID/scripts/env.sh" -export PBS_NP=${ncpus} - -echo -print "NEMO monitoring and derived data calculation in" -print "$basedir for $EXP_ID" -print "Using environment file $envfile" -echo -if [[ ! -r $envfile ]] ; then - echo - print $envfile does not exist - echo - exit 1 -else - # module purge in envfile writes non-printable chars to log - source $envfile | tee -fi - -EXP_DIR=${basedir}/${EXP_ID} -if [ ! -d ${EXP_DIR} ] ; then - print "$EXP_DIR not found." - exit 1 -fi - -if [ ! -d ${EXP_DIR}/outdata/nemo/ym ] ; then - print "$EXP_DIR/outdata/nemo/ym not found." - print "You need to run nemo_postprocessing.sh first." - exit 1 -fi - -# setup basic directory -MONITORING_PATH=${EXP_DIR}/_MON -test -d ${MONITORING_PATH} || mkdir ${MONITORING_PATH} -cd ${MONITORING_PATH} - -# generate lock file, check if we're already locked and exit if necessary -lock_file=${MONITORING_PATH}/monitoring_lock_${EXP_ID}.lock -[ -e "${lock_file}" ] && { echo ${lock_file} exists; exit 1; } - -# if we're still running, create a lock file containing a nanosecond time stamp -# to be used later on -lock_time_stamp=`date -Ins` -echo ${lock_time_stamp} > ${lock_file} - -# setup directories (in interactive mode this is done by Monitoring/scripts/monitoring_basic_setup.py -for d in model_data derived_data plots galleries tmp ; do - mkdir -p ${d}/${EXP_ID} -done -mkdir -p ini - -sw_bind="" -if [[ "$(hostname)" =~ "nesh" ]] ; then - echo "`date` NOTE: This code runs on $(hostname)" - # need to do this as /gxfs_work1/gxfs_home_interim/sw is a soft link to - # /gxfs_work1/gxfs_home_interim/sw which singularity does not like as the - # soft link can't be resolved in the container - sw_bind="--bind /gxfs_home/sw:/gxfs_work1/gxfs_home_interim/sw" - shome_bind="--bind /home/smomw235:/home/smomw235" - foci_input2="/gxfs_work1/geomar/smomw235/foci_input2" - # only used if use_singularity=false - MINICONDA_HOME=~smomw235/miniconda3 - module load nco -elif [[ "$(hostname)" =~ blogin* ]] || [[ "$(hostname)" =~ glogin* ]] || \ - [[ "$(hostname)" =~ b?n* ]] || [[ "$(hostname)" =~ g?n* ]] ; then - echo "`date` NOTE: This code runs on $(hostname)" - sw_bind="--bind /sw:/sw" - shome_bind="--bind /home/shkifmsw:/home/shkifmsw" - # on HLRN4 cdftools are linked to e.g. libcurl.so.4 which are not - # available in the default path in the container, luckily all the - # required shared libs are installed in our conda environment - export LD_LIBRARY_PATH=/opt/conda/envs/monitoring/lib:$LD_LIBRARY_PATH - foci_input2="/scratch/usr/shkifmsw/foci_input2" - # only used if use_singularity=false - MINICONDA_HOME=~shkifmsw/miniconda3 - module load nco -else - echo $(hostname) is untested. - exit 1 -fi - -cat > ini/monitoring_${EXP_ID}.ini << EOF -[monitoring_configuration] -monitoring_path = ${MONITORING_PATH} -drakkar_config = ORCA05 -experiment_name = ${EXP_ID} -original_model_data_path = ${EXP_DIR}/outdata/nemo/ym -original_mesh_data_path = ${foci_input2}/NEMO_ORCA05/input/ORCA05/masks -repeat_existing_diagnostics = False -repeat_existing_plots = False -exclude_freq_from_diag_and_plots = 1d,5d,1m,730h,5y,10y,20y -simple_mode = True -EOF - -if $use_singularity ; then - module load singularity - # run monitoring from the singularity container - # TODO: currently the .sif files is expected in the cwd, this is not the best solution - ln -sfv ${foci_input2}/SINGULARITY/mkexp-monitoring.sif . - - input_bind="--bind ${foci_input2}:${foci_input2}" - - SINGULARITYENV_LD_LIBRARY_PATH=$LD_LIBRARY_PATH \ - SINGULARITYENV_APPEND_PATH=$(dirname $(which ncrcat)) \ - SINGULARITYENV_PYTHONPATH=/usr/local/Monitoring \ - singularity exec --bind $WORK:$WORK --bind $HOME:$HOME \ - $sw_bind $input_bind $shome_bind --bind ${IO_LIB_ROOT}/bin:/usr/local/bin \ - mkexp-monitoring.sif python \ - /usr/local/Monitoring/scripts/monitoring_parallel.py \ - ${MONITORING_PATH}/ini/monitoring_${EXP_ID}.ini -else - if [[ ! -d Monitoring ]]; then - git clone -b develop-swahl https://git.geomar.de/TM/Monitoring.git Monitoring - fi - # activate the python environment - source ${MINICONDA_HOME}/bin/activate monitoring - python \ - ${MONITORING_PATH}/Monitoring/scripts/monitoring_parallel.py \ - ${MONITORING_PATH}/ini/monitoring_${EXP_ID}.ini -fi -monerror=$? -if [[ $monerror -gt 0 ]] ; then - echo - echo "Monitoring finished with error code $?, Try to continue anyways" - echo -fi - -# start concatenation -# settings for concatenation -# varlist="DRAKE_transports FLORIDA_BAHAMAS_transports moc icediags amoc_max_25.000N amoc_max_36.000N amoc_max_45.000N" -# complete list of derived data from Willi's monitoring -varlist="BERING_transports FRAM_transports BAFFIN_transports -DENMARK_STRAIT_transports ICELAND_SCOTLAND_transports CUBA_FLORIDA_transports -FLORIDA_BAHAMAS_transports DRAKE_transports AUS_AA_transports -ITF_transports MOZAMBIQUE_CHANNEL_transports SOUTH_AFR_transports -KERGUELEN_transports CAMPBELL_transports AFR_AUSTR_transports -AUSTR_AM_transports AM_AFR_transports DAVIS_transports -icediags moc psi speed -section_23W section_ACT section_DAVIS -section_OSNAP section_STAtlOMZ section_WoceA1E -section_WoceA1W section_WoceA24N section_WoceS04A -amoc_max_25.000N amoc_max_36.000N amoc_max_45.000N" - -frequency='1y' -datadir=${MONITORING_PATH}/derived_data/${EXP_ID} -run=${EXP_ID} -targetdir="${EXP_DIR}/derived/nemo/" -mkdir -p $targetdir - -for f in $frequency ; do - for var in $varlist ; do - if ls -1 $datadir/${run}*${f}*${var}.nc > /dev/null 2>&1 ; then - firstfile=$(ls -1 $datadir/${run}*${f}*${var}.nc | head -1) - lastfile=$(ls -1 $datadir/${run}*${f}*${var}.nc | tail -1) - if [[ "$(basename $firstfile)" =~ ${run}_${f}_([0-9]+)_([0-9]+)_(.*).nc ]]; then - startdate=${BASH_REMATCH[1]} - fi - if [[ "$(basename $lastfile)" =~ ${run}_${f}_([0-9]+)_([0-9]+)_(.*).nc ]]; then - enddate=${BASH_REMATCH[2]} - fi - echo " Running ncrcat / cp for ${run}*${f}*${var}.nc --> ${targetdir}/${run}_${f}_${startdate}_${enddate}_${var}.nc" - while (( $(jobs -p | wc -l) >= PBS_NP )); do sleep 5; done - ( - rm -f ${targetdir}/${run}_${f}_*_${var}.nc - ofile='' - if [[ "$firstfile" == "$lastfile" ]]; then - cp -pv $firstfile $targetdir/ - ofile=$firstfile - else - rm -fv ${targetdir}/${run}_${f}_*_${var}.nc - ofile=${targetdir}/${run}_${f}_${startdate}_${enddate}_${var}.nc - ncrcat -7 -o ${ofile} $datadir/${run}*${f}*${var}.nc - fi - - # rewrite time axis, had problems using the original time axis with - # python (xarray) - year=$(echo $startdate | cut -b -4) - [[ "$f" == "1y" ]] && tax="${year}-07-01,00:00:00,1y" - [[ "$f" == "5y" ]] && tax="${year}-07-01,00:00:00,5y" - [[ "$f" == "10y" ]] && tax="${year}-01-01,00:00:00,10y" - [[ "$f" == "20y" ]] && tax="${year}-01-01,00:00:00,20y" - mv ${ofile} ${ofile}.tmp.nc - cdo -L -r -f nc4c settunits,days -settaxis,$tax \ - ${ofile}.tmp.nc ${ofile} && rm ${ofile}.tmp.nc - ) & - else - echo " No file matching $datadir/${run}*${f}*${var}.nc available" - fi - done -done -wait -# check if existing lock file is ours -[ -e "${lock_file}" ] && [[ "${lock_time_stamp}" == "$(cat ${lock_file})" ]] && rm -fv ${lock_file} || { echo "${lock_file} not ours. Won't delete."; exit 1; } - -print 'monitoring3 finished' diff --git a/configs/setups/focioifs/nemo_monitoring.sh b/configs/setups/focioifs/nemo_monitoring.sh new file mode 120000 index 000000000..24997f3ca --- /dev/null +++ b/configs/setups/focioifs/nemo_monitoring.sh @@ -0,0 +1 @@ +../foci/nemo_monitoring.sh \ No newline at end of file diff --git a/configs/setups/focioifs/nemo_postprocessing.sh b/configs/setups/focioifs/nemo_postprocessing.sh deleted file mode 100755 index b8cde3391..000000000 --- a/configs/setups/focioifs/nemo_postprocessing.sh +++ /dev/null @@ -1,404 +0,0 @@ -#!/bin/bash -# -# Postprocessing for FOCI within ESM-Tools -# based on the Postprocessing from the old mkexp based runtime environment -# Sebastian Wahl 06/2021 -# - -################################################################################# -# default settings for the variables that can be changed via the command line -# -basedir=~/esm/esm-experiments/ # change via -p -EXP_ID="test_experiment" # change via -r -startyear=1850 # change via -s -endyear=1850 # change via -e -envfile="$basedir/$EXP_ID/scripts/env.sh" # change via -x -run_monitoring="no" - -module load nco || module load NCO - -OCEAN_CHECK_NETCDF4=false -# set to false to skip netcdf4 conversion, time consuming but reduces file size by at least 50% -OCEAN_CONVERT_NETCDF4=true -OCEAN_FILE_TAGS="grid_T grid_U grid_V grid_W icemod ptrc_T" - -# Other settings -day="01" -max_jobs=12 -# -############################################################################### -# END OF USER INTERFACE -############################################################################### -# -# -#------- DO NOT EDIT BELOW THIS LINE UNLESS YOU KNOW WHAT YOU ARE DOING ------# -# -# Read the command line arguments -OPTIND=1 # Reset in case getopts has been used previously in the shell. -while getopts "h?md:r:s:e:p:x" opt; do - case "$opt" in - h|\?) - echo - echo " Valid options are -h or -? for this help" - echo " -d for more output (useful for debugging, not used at the moment)" - echo " -p path to data (basedir, default is $basedir)" - echo " -r experiment / run id (run, default is $EXP_ID)" - echo " -s startyear (startyear, default is $startyear)" - echo " -e endyear (endyear, default is $endyear)" - echo " -x full path to env.sh file (envfile, default is $HOME/esm/esm-experiments/\$EXP_ID/scripts/env.sh)" - echo " -m run nemo_monitoring.sh " - echo - exit 0 - ;; - d) debug=1 # verbose mode - ;; - r) EXP_ID=$OPTARG - ;; - s) startyear=$OPTARG - ;; - e) endyear=$OPTARG - ;; - p) basedir=$OPTARG - ;; - x) envfile=$OPTARG - ;; - m) run_monitoring="yes" - ;; - esac -done - -shift $((OPTIND-1)) -[ "$1" = "--" ] && shift -envfile="$basedir/$EXP_ID/scripts/env.sh" -echo -echo "Doing postprocessing in $basedir for $EXP_ID from year $startyear to $endyear" -echo "Using an environment from $envfile" -echo -if [[ ! -r $envfile ]] ; then - echo - echo $envfile does not exist - echo - exit 1 -else - # module purge in envfile writes non-printable chars to log - source $envfile | tee -fi -# -# the ncks option -a is deprecated since version 4.7.1 and replaced by --no-alphabetize -sortoption="--no-alphabetize" -[[ $(ncks --version 2>&1 | tail -1 | tr -dc '0-9') -lt 471 ]] && sortoption="-a" - -# Support log style output -print () { echo "$(date +'%F %T'):" "$@"; } -print_re='^[0-9]+-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}' - -# Bail out on error -trap 'print Error at line $BASH_LINENO >&2' ERR -set -e -# -############################################################################### -# -# some derived variables that directly depend on the command line arguments... -startdate=${startyear}0101 # -nextdate=$((endyear + 1))0101 -DATA_DIR=${basedir}/${EXP_ID}/outdata -RESTART_DIR=${basedir}/${EXP_ID}/restart -#inidate=18500101 # not needed anymore -debug=0 - -# Component directories/names -ocemod=nemo - -# -# Default options for Unix commands -mkdir () { command mkdir -vp "$@"; } -rm () { command rm -vf "$@"; } -ln () { command ln -vf "$@"; } - -cdo () { command cdo -O "$@"; } -after () { command cdo after "$@"; } - -# -# Utilities -# - -function get_file_names { - typeset pattern="$1" - shift - echo $(printf " $pattern" "$@") -} - -function time_merge { - typeset out="$1" - typeset tmp=$(dirname $out)/.$(basename $out) - shift - cat "$@" > $tmp && mv $tmp $out -} - -# -# Job specification -# - -mean_op='-monmean'; avg_op='-monavg' - -sleep_time=2 - -# Definition of some time variables -# -# enddate: last day of this run -enddate=$(date --date="$nextdate - 1 day" "+%Y%m%d") - -# -# DATA PROCESSING -# - -print "post-processing started for $startdate-$enddate" - -# Check time range - -if [[ $startdate != *01 ]] -then - print "Oops: invalid start date; currently only first of month is supported" - exit 1 -fi - -# Computation of expected input time stamps -startstamp=${startdate%??} -laststamp= -stamps= - -currdate=$startdate -while [[ $currdate -le $enddate ]] ; do - laststamp=${currdate%??} - stamps="$stamps $laststamp" - #currdate=$(calc_date plus -M 1 $currdate) - # 18930401 does not exist for the date function and leads to an error - [[ "$currdate" == "18930401" ]] && currdate="18930331" - currdate=$(date --date="$currdate + 1 month" "+%Y%m%d") -done - -# Computation of expected years for concatenated output -#iniyear=${inidate%????} -startyear=${startdate%????} -endyear=${enddate%????} -#[[ $startyear == $iniyear && $inidate != *0101 ]] && ((++startyear)) -[[ $enddate != *1231 ]] && ((--endyear)) - -# Temporary directory -id=$$ -post_dir=$DATA_DIR/${id}_$startdate-$enddate -[[ -d $post_dir ]] && - print "Hey: previous job failed or still running; removing temp dir" -rm -r $post_dir -mkdir $post_dir - -# -# Convert NEMO netcdf3 output to netcdf4 using the chunking algorithm -# developed by Willi Rath, GEOMAR (convert_to_deflated_nc4classic_with_small_chunks.sh) -# Converts any NEMO netCDF file to deflated (level 1) netCDF4-classic with -# (1,1,100,100)=(t,z,y,x) chunks. -# needs ncdump and a recent (4.3.7 or newer) nco -# -print 'NEMO netcdf4 conversion started' -outmod=${DATA_DIR}/${ocemod} - -mkdir ${outmod} -cd ${outmod} -mkdir nc3 - -filetags="${OCEAN_FILE_TAGS}" -steps="${EXP_ID}_1d ${EXP_ID}_5d ${EXP_ID}_1m ${EXP_ID}_1y 1_${EXP_ID}_1d 1_${EXP_ID}_5d 1_${EXP_ID}_1m 1_${EXP_ID}_1y" -tchunk=1; zchunk=1; ychunk=100; xchunk=100 - -echo 0 > $post_dir/status -if ${OCEAN_CONVERT_NETCDF4} ; then - for ((year=startyear; year<=endyear; ++year)) - do - for filetag in $filetags - do - for s in $steps - do - input=${s}_${year}0101_${year}1231_${filetag}.nc3 - output=${s}_${year}0101_${year}1231_${filetag}.nc - # !!! output files will have the same name as the old input file !!! - if [[ -f $output ]] ; then - mv $output $input - - # If too many jobs run at the same time, wait - while (( $(jobs -p | wc -l) >= max_jobs )); do sleep $sleep_time; done - ( - trap 'echo $? > $post_dir/status' ERR - print "converting " $input " to " $output - if [[ ! -f $output ]]; then - ncks -7 $sortoption -L 1 \ - --cnk_dmn time,${tchunk} --cnk_dmn time_counter,${tchunk} \ - --cnk_dmn z,${zchunk} --cnk_dmn depthu,${zchunk} --cnk_dmn depthv,${zchunk} --cnk_dmn depthw,${zchunk} --cnk_dmn deptht,${zchunk} \ - --cnk_dmn x,${xchunk} --cnk_dmn y,${ychunk} \ - $input $output - if [[ $? -eq 0 ]]; then - print "Conversion of $input to $output OK, now checking file with cdo diff" - ${OCEAN_CHECK_NETCDF4} && cdo -s diff $input $output > ${output}.check - if ${OCEAN_CHECK_NETCDF4} && [[ $? -eq 0 ]] && [[ $(wc -l ${output}.check | awk '{print$1}') -eq 0 ]]; then - print "cdo diff $input $output OK" - rm -f ${output}.check - mv -v $input nc3/ - rm nc3/$input - else - if ${OCEAN_CHECK_NETCDF4} ; then - echo "ERROR: $input and $output differ" - mv -v $input nc3/ - else - echo "cdo diff check switched off (OCEAN_CHECK_NETCDF4 = ${OCEAN_CHECK_NETCDF4})" - mv -v $input nc3/ - rm nc3/$input - fi - fi - else - echo "ERROR during conversion of $input to $output" - mv -v $input nc3/ - fi - else - echo "ERROR: $output exists. This should not happen." - mv -v $input nc3/ - fi - ) & - fi - done #steps - done #filetags - done #years -fi -wait -[[ $(<$post_dir/status) -eq 0 ]] - -print 'NEMO netcdf4 conversion finished' - -# -# Calculate yearly means from nemo output and place in ym/ subdirectory -# - -print 'NEMO ym calculation started' - -steps="${EXP_ID}_1m ${EXP_ID}_5d ${EXP_ID}_1d 1_${EXP_ID}_1m 1_${EXP_ID}_5d 1_${EXP_ID}_1d" -cd ${outmod} - -echo 0 > $post_dir/status -mkdir ym - -for ((year=startyear; year<=endyear; ++year)) -do - for filetag in $filetags - do - for s in $steps - do - # !!! output files will have the same name as the old input file !!! - input=${s}_${year}0101_${year}1231_${filetag}.nc - if [[ "$s" =~ ^1_.*$ ]] ; then - output=1_${EXP_ID}_1y_${year}0101_${year}1231_${filetag}.nc - else - output=${EXP_ID}_1y_${year}0101_${year}1231_${filetag}.nc - fi - if [[ -f $input ]] && [[ ! -f ym/$output ]] && [[ ! -f ym/${output}3 ]]; then - - touch ym/$output - # If too many jobs run at the same time, wait - while (( $(jobs -p | wc -l) >= max_jobs )); do sleep $sleep_time; done - ( - trap 'echo $? > $post_dir/status' ERR - cdo yearmean $input ym/$output - cd ym - mv $output ${output}3 - ncks -7 $sortoption -L 1 \ - --cnk_dmn time,${tchunk} --cnk_dmn time_counter,${tchunk} \ - --cnk_dmn z,${zchunk} --cnk_dmn depthu,${zchunk} --cnk_dmn depthv,${zchunk} --cnk_dmn depthw,${zchunk} --cnk_dmn deptht,${zchunk} \ - --cnk_dmn x,${xchunk} --cnk_dmn y,${ychunk} \ - ${output}3 $output - # only simple checking with ym as the files can be - # reproduced in case of an error - [[ $? -eq 0 ]] && rm -v ${output}3 - cd .. - ) & - # file from cdo must be available for [[ ! -f ym/$output ]] in case of e.g. 5d and 1m output - sleep 5 - fi - done #steps - done - wait -done - -wait -[[ $(<$post_dir/status) -eq 0 ]] - -print 'NEMO ym calculation finished' -# -# put NEMO restart files from previous year in one tar file -# -print 'NEMO restart postprocessing started' -cd ${RESTART_DIR}/${ocemod} - -for ((year=startyear-1; year /dev/null 2>&1 ; then - # If too many jobs run at the same time, wait - while (( $(jobs -p | wc -l) >= max_jobs )); do sleep $sleep_time; done - ( - trap 'echo $? > $post_dir/status' ERR - print "Processing year $year" - tar czf ${EXP_ID}_restart_${year}1231.tar.gz *${EXP_ID}_*_restart*_${year}1231_*.nc - [[ $? -eq 0 ]] && rm *${EXP_ID}_*_restart*_${year}1231_*.nc - ) & - fi - wait -done -wait - -[[ $(<$post_dir/status) -eq 0 ]] -print 'NEMO restart postprocessing finished' -# -# Store land sea mask information separately -# merge mesh_mask.nc files -# TODO: nocscombine needs to be compiled with NEMO -cd ${DATA_DIR}/${ocemod} -if [[ $(type -P nocscombinev2.x) ]] && [[ ! -f mesh_mask.nc ]] && [[ -f mesh_mask_0000.nc ]]; then - nocscombinev2.x -f mesh_mask_0000.nc - if [[ $? -eq 0 ]] && [[ -f mesh_mask.nc ]]; then - print "nocscombinev2.x finished sucessfully" - rm mesh_mask_????.nc - test -d $DATA_DIR/fx || mkdir -p $DATA_DIR/fx - mv mesh_mask.nc $DATA_DIR/fx/ - fi -else - print "nocscombinev2.x is missing or" - print "mesh_mask.nc already available or" - print "mesh_mask_0000.nc missing" -fi -if [[ $(type -P nocscombinev2.x) ]] && [[ ! -f 1_mesh_mask.nc ]] && [[ -f 1_mesh_mask_0000.nc ]]; then - nocscombinev2.x -f 1_mesh_mask_0000.nc - if [[ $? -eq 0 ]] && [[ -f 1_mesh_mask.nc ]]; then - print "nocscombinev2.x finished sucessfully" - rm 1_mesh_mask_????.nc - test -d $DATA_DIR/fx || mkdir -p $DATA_DIR/fx - mv 1_mesh_mask.nc $DATA_DIR/fx/ - fi -else - print "nocscombinev2.x is missing or" - print "1_mesh_mask.nc already available or" - print "1_mesh_mask_0000.nc missing" -fi -print 'NEMO storing of static data finished' -# -# Epilogue -# - -# Clean up - -print 'removal of temporary and non-precious data files started' -rm -r $post_dir -print 'removal of temporary and non-precious data files finished' - -print "post-processing finished for $startdate-$enddate" - -if [[ "$run_monitoring" == "yes" ]] ; then - print "will now run NEMO monitoring for $startdate-$enddate" - $(dirname $0)/nemo_monitoring.sh -r ${EXP_ID} -else - print "NEMO monitoring switched off, use -m to activate it" -fi diff --git a/configs/setups/focioifs/nemo_postprocessing.sh b/configs/setups/focioifs/nemo_postprocessing.sh new file mode 120000 index 000000000..517fad5a5 --- /dev/null +++ b/configs/setups/focioifs/nemo_postprocessing.sh @@ -0,0 +1 @@ +../foci/nemo_postprocessing.sh \ No newline at end of file diff --git a/configs/setups/focioifs/oifs_postprocessing.sh b/configs/setups/focioifs/oifs_postprocessing.sh new file mode 100755 index 000000000..c8f5576cb --- /dev/null +++ b/configs/setups/focioifs/oifs_postprocessing.sh @@ -0,0 +1,473 @@ +#!/bin/bash +# +# Postprocessing for FOCI within ESM-Tools +# based on the Postprocessing from the old mkexp based runtime environment +# Sebastian Wahl 06/2021 +# +# Modified for OpenIFS by Joakim Kjellsson +# + +################################################################################# +# default settings for the variables that can be changed via the command line +# +basedir=~/esm/esm-experiments/ # change via -p +EXP_ID="test_experiment" # change via -r +startdate=18500101 # change via -s +enddate=18501231 # change via -e +envfile="" # change via -x +freq="m" +run_monitoring="no" + +module load nco || module load NCO + +ATM_CHECK_NETCDF4=false +# set to false to skip netcdf4 conversion, time consuming but reduces file size by at least 50% +ATM_CONVERT_NETCDF4=true +ATM_FILE_TAGS="regular_sfc regular_pv regular_pl regular_ml reduced_sfc reduced_pv reduced_pl reduced_ml" + +# Other settings +max_jobs=20 +# +############################################################################### +# END OF USER INTERFACE +############################################################################### +# +# +#------- DO NOT EDIT BELOW THIS LINE UNLESS YOU KNOW WHAT YOU ARE DOING ------# +# +# Read the command line arguments +OPTIND=1 # Reset in case getopts has been used previously in the shell. +while getopts "h?md:r:s:e:p:x:i:" opt; do + case "$opt" in + h|\?) + echo + echo " Valid options are -h or -? for this help" + echo " -d for more output (useful for debugging, not used at the moment)" + echo " -p path to data (basedir, default is $basedir)" + echo " -r experiment / run id (run, default is $EXP_ID)" + echo " -s startdate (startdate, default is $startdate)" + echo " -e enddate (enddate, default is $enddate)" + echo " -i increment (increment, default is calculated automagially, see code for details)" + echo " -x full path to env.sh file (envfile, default is $HOME/esm/esm-experiments/\$EXP_ID/scripts/env.sh)" + echo " -m run oifs_monitoring.sh " + echo + exit 0 + ;; + d) debug=1 # verbose mode + ;; + r) EXP_ID=$OPTARG + ;; + s) startdate=$OPTARG + ;; + e) enddate=$OPTARG + ;; + i) increment=$OPTARG + ;; + p) basedir=$OPTARG + ;; + x) envfile=$OPTARG + ;; + m) run_monitoring="yes" + ;; + esac +done + +[[ -z $envfile ]] && envfile="$basedir/$EXP_ID/scripts/env.sh" +shift $((OPTIND-1)) +[ "$1" = "--" ] && shift +echo +echo "Doing postprocessing in $basedir for $EXP_ID from $startdate to $enddate" +echo "Using an environment from $envfile" +echo +startdate=$(date --date "$startdate" "+%Y%m%d") +enddate=$(date --date "$enddate" "+%Y%m%d") +if [[ ${#startdate} -ne 8 ]] || [[ ${#enddate} -ne 8 ]]; then + echo + echo " Please provide start and end date in yyyymmdd format e.g." + echo " $0 -s 20220101 -e 20220930" + echo + exit 1 +fi +if [[ ! -r $envfile ]] ; then + echo + echo $envfile does not exist + echo + exit 1 +else + # module purge in envfile writes non-printable chars to log + source $envfile > >(tee) +fi +# +# the ncks option -a is deprecated since version 4.7.1 and replaced by --no-alphabetize +sortoption="--no-alphabetize" +[[ $(ncks --version 2>&1 | tail -1 | tr -dc '0-9') -lt 471 ]] && sortoption="-a" + +# Support log style output +print () { echo "$(date +'%F %T'):" "$@"; } +print_re='^[0-9]+-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}' + +# Bail out on error +trap 'print Error at line $BASH_LINENO >&2' ERR +set -e +# +############################################################################### +# +# some derived variables that directly depend on the command line arguments... +#startdate=${startyearmonth}01 # +#enddate=$((endyear + 1))0101 +DATA_DIR=${basedir}/${EXP_ID}/outdata +RESTART_DIR=${basedir}/${EXP_ID}/restart +#inidate=18500101 # not needed anymore +debug=0 + +# Component directories/names +atmmod=oifs +rnfmod=rnfmap + +# +# Default options for Unix commands +mkdir () { command mkdir -vp "$@"; } +rm () { command rm -vf "$@"; } +ln () { command ln -vf "$@"; } + +cdo () { command cdo -O "$@"; } +after () { command cdo after "$@"; } + +# +# Utilities +# + +function get_file_names { + typeset pattern="$1" + shift + echo $(printf " $pattern" "$@") +} + +function time_merge { + typeset out="$1" + typeset tmp=$(dirname $out)/.$(basename $out) + shift + cat "$@" > $tmp && mv $tmp $out +} + +sleep_time=2 + +# Definition of some time variables +# +# enddate: last day of this run +#enddate=$(date --date="$nextdate - 1 day" "+%Y%m%d") + +# +# DATA PROCESSING +# + +print "post-processing started for $startdate-$enddate" + +# Check time range + +if [[ $startdate != *01 ]] +then + print "Oops: invalid start date; currently only first of month is supported" + exit 1 +fi + +# Computation of frequency, currently y for yearly and m for monthly are supported +startyear=$(date --date="$startdate" "+%Y") +startmonth=$(date --date="$startdate" "+%m") +endyear=$(date --date="$enddate" "+%Y") +endmonth=$(date --date="$enddate" "+%m") + +[[ "$startmonth" == "01" ]] && [[ "$endmonth" == "12" ]] && freq="y" + +# calculate increment if not set, set to 1 to postprocess multiple years of +# simulation that ran in multiyear intervals. +if [[ -z $increment ]] ; then + if [[ $startyear == $endyear ]] ; then + increment=$((endmonth - startmonth + 1)) + else + increment=$((endyear - startyear + 1)) + fi +fi + +# Temporary directory +id=$$ +post_dir=$DATA_DIR/${id}_$startdate-$enddate +[[ -d $post_dir ]] && + print "Hey: previous job failed or still running; removing temp dir" +rm -r $post_dir +mkdir $post_dir + +# +# Convert OpenIFS/XIOS netcdf3 output to netcdf4 using the chunking algorithm +# developed by Willi Rath, GEOMAR (convert_to_deflated_nc4classic_with_small_chunks.sh) +# Converts any OpenIFS netCDF file to deflated (level 1) netCDF4-classic with +# (1,1,96,96)=(t,plev,lat,lon) chunks. +# needs ncdump and a recent (4.3.7 or newer) nco +# +print 'OpenIFS netcdf4 conversion started' +outmod=${DATA_DIR}/${atmmod} + +mkdir ${outmod} +cd ${outmod} +mkdir nc3 + +filetags="${ATM_FILE_TAGS}" +steps="1ts 1h 3h 6h 1d 1m 1y" +tchunk=1; zchunk=1; ychunk=96; xchunk=96 + +echo 0 > $post_dir/status +if ${ATM_CONVERT_NETCDF4} ; then + + nextdate=$startdate + while [[ $nextdate -lt $enddate ]] + do + # treat special case of 18930401, see echam_postprocessing.sh + if [[ $freq == "m" ]] ; then + currdate1=$nextdate + currdate2=$(date --date="$currdate1 + ${increment} month - 1 day" "+%Y%m%d") + nextdate=$(date --date="$currdate1 + ${increment} month" "+%Y%m%d") + else + currdate1=$nextdate + currdate2=$(date --date="$currdate1 + ${increment} year - 1 day" "+%Y%m%d") + nextdate=$(date --date="$currdate2 + ${increment} year" "+%Y%m%d") + fi + + for filetag in $filetags + do + for s in $steps + do + # Name of output from model (always ECE3...) + input_orig=ECE3_${s}_${currdate1}_${filetag}.nc + # Rename to this + input=${EXP_ID}_${s}_${currdate1}_${currdate2}_${filetag}.nc3 + # Name of final compressed file + output=${EXP_ID}_${s}_${currdate1}_${currdate2}_${filetag}.nc + + if [[ -f $input_orig ]] ; then + mv $input_orig $input + # If too many jobs run at the same time, wait + while (( $(jobs -p | wc -l) >= max_jobs )); do sleep $sleep_time; done + ( + trap 'echo $? > $post_dir/status' ERR + print "converting " $input " to " $output + if [[ ! -f $output ]]; then + ncks -7 $sortoption -L 1 \ + --cnk_dmn time,${tchunk} --cnk_dmn time_counter,${tchunk} \ + --cnk_dmn z,${zchunk} --cnk_dmn depthu,${zchunk} \ + --cnk_dmn depthv,${zchunk} --cnk_dmn depthw,${zchunk} --cnk_dmn deptht,${zchunk} \ + --cnk_dmn x,${xchunk} --cnk_dmn y,${ychunk} \ + $input $output + if [[ $? -eq 0 ]]; then + print "Conversion of $input to $output OK, now checking file with cdo diff" + ${ATM_CHECK_NETCDF4} && cdo -s diff $input $output > ${output}.check + if ${ATM_CHECK_NETCDF4} && [[ $? -eq 0 ]] && [[ $(wc -l ${output}.check | awk '{print$1}') -eq 0 ]]; then + print "cdo diff $input $output OK" + rm -f ${output}.check + mv -v $input nc3/ + rm nc3/$input + else + if ${ATM_CHECK_NETCDF4} ; then + echo "ERROR: $input and $output differ" + mv -v $input nc3/ + else + echo "cdo diff check switched off (ATM_CHECK_NETCDF4 = ${ATM_CHECK_NETCDF4})" + mv -v $input nc3/ + rm nc3/$input + fi + fi + else + echo "ERROR during conversion of $input to $output" + mv -v $input nc3/ + fi + else + echo "ERROR: $output exists. This should not happen." + mv -v $input nc3/ + fi + ) & + fi + done #steps + done #filetags + done #years +fi +wait +[[ $(<$post_dir/status) -eq 0 ]] + +print 'OpenIFS netcdf4 conversion finished' + +# +# Post process output from runoff (if existing) +# +outrnf=${DATA_DIR}/${rnfmod} +print 'Runoff post processing started' + +if [[ -d $outrnf ]] ; then + cd ${outrnf} + # ESM-Tools renames files if they exist in the output directory and + # creates a link to the lates file. If the postprocessing runs late + # we are not postprocessing the file we think we postprocess. + runoff_out="runoff_out.nc" + [[ -L $runoff_out ]] && runoff_out="runoff_out.nc_${startdate}-${enddate}" + + if [[ -f ${runoff_out} ]] ; then + + # make time axis + cdo -settunits,seconds -settaxis,${startyear}-${startmonth}-01,00:00,3h ${runoff_out} runoff_out_time.nc + + # day, month and year means + cdo daymean runoff_out_time.nc ${EXP_ID}_1d_${startdate}_${enddate}_rnf.nc + cdo monmean runoff_out_time.nc ${EXP_ID}_1m_${startdate}_${enddate}_rnf.nc + if [[ "$freq" == "y" ]] ; then + cdo yearmean runoff_out_time.nc ${EXP_ID}_1y_${startdate}_${enddate}_rnf.nc + fi + rm ${runoff_out} runoff_out_time.nc + fi +fi + +# +# Calculate yearly means from nemo output and place in ym/ subdirectory +# + +print 'OpenIFS ym calculation started' + +# Use only daily and monthly output +steps="1d 1m" +cd ${outmod} + +echo 0 > $post_dir/status +mkdir ym +# TODO: only works for yearly restart intervals at the moment +# can be improved, see nemo_postprocessing.sh +if ${ATM_CONVERT_NETCDF4} ; then + for ((year=startyear; year<=endyear; ++year)) + do + for filetag in $filetags + do + for s in $steps + do + # !!! output files will have the same name as the old input file !!! + input=${EXP_ID}_${s}_${year}0101_${year}1231_${filetag}.nc + output=${EXP_ID}_1y_${year}0101_${year}1231_${filetag}.nc + + if [[ "$freq" == "y" ]] && [[ -f $input ]] && [[ ! -f ym/$output ]] && [[ ! -f ym/${output}3 ]]; then + + touch ym/$output + # If too many jobs run at the same time, wait + while (( $(jobs -p | wc -l) >= max_jobs )); do sleep $sleep_time; done + ( + trap 'echo $? > $post_dir/status' ERR + cdo yearmean $input ym/$output + cd ym + mv $output ${output}3 + ncks -7 $sortoption -L 1 \ + --cnk_dmn time,${tchunk} --cnk_dmn time_counter,${tchunk} \ + --cnk_dmn z,${zchunk} --cnk_dmn depthu,${zchunk} --cnk_dmn depthv,${zchunk} --cnk_dmn depthw,${zchunk} --cnk_dmn deptht,${zchunk} \ + --cnk_dmn x,${xchunk} --cnk_dmn y,${ychunk} \ + ${output}3 $output + # only simple checking with ym as the files can be + # reproduced in case of an error + [[ $? -eq 0 ]] && rm -v ${output}3 + cd .. + ) & + # file from cdo must be available for [[ ! -f ym/$output ]] in case of e.g. 5d and 1m output + sleep 5 + fi + done #steps + done + wait +done + +wait +[[ $(<$post_dir/status) -eq 0 ]] + +print 'OpenIFS ym calculation finished' + +fi + +# +# put OpenIFS restart files from previous year in one tar file +# + + +#print 'OpenIFS restart postprocessing started' +#cd ${RESTART_DIR}/${atmmod} +# +#for ((year=startyear-1; year /dev/null 2>&1 ; then +# # If too many jobs run at the same time, wait +# while (( $(jobs -p | wc -l) >= max_jobs )); do sleep $sleep_time; done +# ( +# trap 'echo $? > $post_dir/status' ERR +# print "Processing year $year" +# tar czf ${EXP_ID}_restart_${year}1231.tar.gz *${EXP_ID}_*_restart*_${year}1231_*.nc +# [[ $? -eq 0 ]] && rm *${EXP_ID}_*_restart*_${year}1231_*.nc +# ) & +# fi +# wait +#done +#wait + +#[[ $(<$post_dir/status) -eq 0 ]] +#print 'NEMO restart postprocessing finished' +# + +# Make mask and cell size info +# * If we have _fx_ output, then take lsm and other stuff +# * Use cdo gridarea to generate areacella +cd ${DATA_DIR}/${atmmod} +for ((year=startyear; year<=endyear; ++year)) ; do + echo " Use ECE3_fx_${year}0101_regular_sfc.nc to make grid file for regular grid " + if [[ -f "ECE3_fx_${year}0101_regular_sfc.nc" ]] ; then + if [[ ! -f "areacella.nc" ]] ; then + echo " Make areacella.nc " + # Get grid cell area + cdo -L -chname,cell_area,areacella -gridarea ECE3_fx_${year}0101_regular_sfc.nc areacella.nc + else + echo " areacella.nc already exists " + fi + if [[ ! -f "lsm.nc" ]] ; then + echo " Make lsm.nc " + # Get lsm + cdo -L -aexpr,'land_mask=lsm+cl' -select,name=lsm,cl,al,sz ECE3_fx_${year}0101_regular_sfc.nc lsm.nc + else + echo " lsm.nc already exists " + fi + fi + + if [[ -f "ECE3_fx_${year}0101_reduced_sfc.nc" ]] ; then + if [[ ! -f "areacella_reduced.nc" ]] ; then + # Get grid cell area + cdo -L -chname,cell_area,areacella -gridarea ECE3_fx_${year}0101_reduced_sfc.nc areacella_reduced.nc + fi + if [[ ! -f "lsm_reduced.nc" ]] ; then + # Get lsm + cdo -L -aexpr,'land_mask=lsm+cl' -select,name=lsm,cl,al,sz ECE3_fx_${year}0101_reduced_sfc.nc lsm_reduced.nc + fi + fi +done + +if [[ -f "areacella.nc" ]] && [[ -f "lsm.nc" ]] ; then + echo " areacella.nc and lsm.nc exist, so removing fx files " + rm *_fx_*_regular_sfc.nc +fi +if [[ -f "areacella_reduced.nc" ]] && [[ -f "lsm_reduced.nc" ]] ; then + rm *_fx_*_reduced_sfc.nc +fi + +# +# Epilogue +# + +# Clean up + +print 'removal of temporary and non-precious data files started' +rm -r $post_dir +print 'removal of temporary and non-precious data files finished' + +print "post-processing finished for $startdate-$enddate" + +#if [[ "$run_monitoring" == "yes" ]] ; then +# print "will now run NEMO monitoring for $startdate-$enddate" +# $(dirname $0)/nemo_monitoring.sh -r ${EXP_ID} +#else +# print "OpenIFS monitoring switched off, use -m to activate it" +#fi diff --git a/configs/spack_envs/README.md b/configs/spack_envs/README.md new file mode 100644 index 000000000..da9bf895e --- /dev/null +++ b/configs/spack_envs/README.md @@ -0,0 +1,6 @@ +# Spack Environments + +This folder contains spack environments for various computers which should be +able to compile the models offered in the esm-tools toolbox. Please note, +however, that these are only here for reference and that we recommend you to +use `esm-master` to install your models! diff --git a/configs/spack_envs/albedo-spack.yaml b/configs/spack_envs/albedo-spack.yaml new file mode 100644 index 000000000..404b099b4 --- /dev/null +++ b/configs/spack_envs/albedo-spack.yaml @@ -0,0 +1,32 @@ +# This is a Spack Environment file to install all software +# needed for compilation of various climate models currently +# employed under the esm-tools infrastructure umbrella. +# +# It describes a set of packages to be installed, along with +# configuration settings. +spack: + # add package specs to the `specs` list + specs: + - intel-oneapi-compilers@2022.0.1 + - openmpi@4.1.3 + - netcdf-c@4.8.1 + - netcdf-cxx4@4.3.1 ^netcdf-c@4.8.1 + - netcdf-fortran@4.6.0 ^netcdf-c@4.8.1 + - hdf5@1.12.2 +fortran+hl + - intel-oneapi-mkl@2022.0.1 + - udunits@2.2.28 + - git@2.38.1 + # - python@3.10.4 + # - py-pip ^python@3.10.4 + - eccodes@2.25.0+fortran+netcdf+openmp %intel@2021.5.0 ^openmpi@4.1.3%intel@2021.5.0 ^hdf5+fortran+hl ^netcdf-c@4.8.1%intel@2021.5.0 + - perl@5.34.1 + packages: + all: + compiler: [intel@2021.5.0] + view: true + concretizer: + unify: true + modules: + prefix_inspections: + include: + - CPATH diff --git a/configs/templates/component_template.yaml b/configs/templates/component_template.yaml new file mode 100644 index 000000000..c421af18e --- /dev/null +++ b/configs/templates/component_template.yaml @@ -0,0 +1,99 @@ +# NAME OF YOUR MODEL OR COMPONENT HERE +# +# For more information about the extended YAML syntax, please consult: +# https://esm-tools.readthedocs.io/en/latest/yaml.html#esm-tools-extended-yaml-syntax +# +# For more information about the ESM-Tools feature variables available, please consult: +# https://esm-tools.readthedocs.io/en/latest/esm_variables.html#esm-tools-variables + +model: name of your component +version: default version + +metadata: + Institute: where it was developed + Description: + A brief description here + Authors: Authors + Publications: + - "Main publication for this component here " + License: + License details here + +git-repository: if your code is hosted in git place here the address +branch: default branch +comp_command: command used to compile your component +install_bins: subpath within ``model_dir`` where the comp command produces the binaries +clean_command: ${defaults.clean_command} +executable: medusa_recom_paleo + +choose_version: + # Here you can place all the variables you would want to control via the version + # variable above (for example, you could also add ``git-repository``, + # ``comp_command``, ``destination``, ...) + a_version_of_your_choice: + branch: name of the branch/tag associated to that version if you use git + another_version_of_your_choice: + branch: name of the branch/tag associated to that version if you use git + +# ``model_dir`` let's ESM-Tools know where is the source code of your component (must +# be an absolute path). Normally, changed via the runscript. We recommend you leave it +# as below, changing only the ``name_of_your_model`` part to whatever you defined as +# the ``model`` var. This will automatically select the source code for esm_master if +# the command is operating with a coupled setup +model_dir: "${general.esm_master.dir}/name_of_your_model-${version}" + +# This section takes care of dealing with environment changes you might want to do, to +# deviated from the defaults define for the specific machine +# (``configs/machine/.yaml``). For more information consult: +# https://esm-tools.readthedocs.io/en/latest/esm_environment.html#esm-environment +environment_changes: + a_variable_in_the_computer_yaml: here you can over + add_module_actions: + - module command without ``module`` word (e.g. ``load hdf5``) + - module command without ``module`` word (e.g. ``load netcdf``) + add_export_vars: + VARIABLE_TO_EXPORT: '"value of the variable you want to export"' + VARIABLE_TO_EXPORT: '"value of the variable you want to export"' + +# Some recommended defaults +lresume: false + +# Some commonly used variables in other ESM-Tools components (but optional) +input_dir: ${pool_dir}/path/within/the/pool/dir/to/the/input/of/your/component +namelist_dir: /absolute/path/to/the/namelist/folder + +# If your components has namelist the following syntax allows you to control the values +# of their values. For more information consult: +# https://esm-tools.readthedocs.io/en/latest/yaml.html#changing-namelists +namelist_changes: + namelist_name: + section_in_the_namelist: + variable_in_the_namelist: its new value here + +namelists: + - name of the namelist + +# File dictionaries to control the copying/moving/linking of all files associated to +# the simulation. This syntax will change for something better soon. For more details +# about this syntax consult: +# https://esm-tools.readthedocs.io/en/latest/yaml.html#file-dictionaries +input_files: + file_name: file_tag +input_source: + file_tag: /absolute/path/to/the/file +input_in_work: + file_tag: /relative/path/to/the/file/in/the/work/directory + +config_files: + namelist_name: namelist_tag # Or any other configuration file +config_sources: + namelist_tag: ${namelist_dir}/ # Use ${namelist_dir} here if you + # defined it above + +create_config: + name_of_the_config_you_want_to_create: + - "<--append-- line 1" + - "<--append-- line 2" + +bin_sources: + bin_tag: ${model_dir}/bin/${executable} # This would be the normal way to do it diff --git a/configs/templates/machine_template.yaml b/configs/templates/machine_template.yaml new file mode 100644 index 000000000..8f0b91b60 --- /dev/null +++ b/configs/templates/machine_template.yaml @@ -0,0 +1,155 @@ +####################################################################################### +# The dummy yaml machine config file for esm-tools +# +# This is a dummy machine file. It is intend to be used for creating a new config file +# for a new machine setup. It provides a minimal structure to be filled in with +# the oppropriate values of the new HPC system. +# +# Usage: +# - Please replace the placeholder indicated by <...> +# with your PHC specific values +# - Please uncomment sections of this yaml file if appropriate. +# Possible sections are indicating this (see below). +# - See also files for other machines that are already implemented in esm-tools. +# - After editing this file, save it as .yaml in configs/machines. Add also +# an entry in the file configs/machines/all_machines.yaml (in this folder) for the +# new machine. +####################################################################################### + +# GENERIC YAML CONFIGURATION FILES +# +# Set hostname of the machine +name: + +# General information about operating system +# Operating system +#operating_system: "" +# Shell interpreter (e.g. "/usr/bin/bash") +sh_interpreter: "" + +# Information about the job scheduler +# Set batch system (e.g. slurm/pbs) +batch_system: "" + +# Set whether an account needs to be set for batch system (e.g. true or false). +# The actual account that will be used for the experiment will be set in the runscript. +accounting: true +# +#hetjob_flag: "?" # either hetjob or packjob, this depends on your SLURM version. More info can be found: https://slurm.schedmd.com/heterogeneous_jobs.html +# +#jobtype: compute +# +# Information about the partitions of the machine +# +# Specify if hyperthreading should be used. +use_hyperthreading: False +# Set further options depending on hyperthreading variable 'use_hyperthreading' by +# uncommenting and editing the following 'choose_use_hyperthreading' section: +#choose_use_hyperthreading: +# True: +# hyperthreading_flag: "" +# mt_launcher_flag: "" +# False: +# : + +# Set default partition (e.g. compute) +partition: +# +# Set detail information for available partitions on the machine. +# These variables will be used in other parts of this yaml file. +choose_partition: + : + partition_name: "" + partition_cpn: # integer number +# +# Define available partitions of the machine for different jobtypes (e.g. for computing [compute], post-processing [PP], etc.) +# +partitions: + compute: + name: ${computer.partition_name} # this uses the variable set in choose_partition section (see above) + #name: "compute" # or set the partition name as string + cores_per_node: ${computer.partition_cpn} +# +#logical_cpus_per_core: 2 +# +#threads_per_core: 1 +# +# Specify different pool directories for this machine. +# +pool_directories: +# focipool: "" +# pool: "" +# + +# Setup environment +# Load necessary modules (e.g. git, cdo, nco, compiler). Edit and extent the following lines. +module_actions: + - "purge" + - "load " +# - "load " +# - "load " +# +# Export environment variables. Extend the following lines to export needed environment variables. +export_vars: + # Locale Settings + LC_ALL: en_US.UTF-8 + # Compiler + FC: + F77: + MPICC: + MPIFC: + CC: + CXX: + # Other environemnt variables + +## Some other yaml files use a file 'computer.fc', etc to identify the compiler, so we need to add them here. +fc: "$FC" +cc: "$CC" +mpifc: "$MPIFC" +mpicc: "$MPICC" +cxx: "$CXX" +# +# +# Launcher flags (i.e. flags for the srun/mpirun/aprun command) +launcher_flags: "-l" + +# Choose another configuration file, that should be evaluated (e.g. slurm.yaml, pbs.yaml) +further_reading: + - batch_system/slurm.yaml + + +#################################################################################### +# Further functionality: +# +# If there are modules or environment variables that are different for +# different e.g. compilers, you can use the funcionality of +# declaring choose_ blocks in this yaml file. +# (For more details about yaml syntax please also see the documentation +# https://esm-tools.readthedocs.io/en/latest/yaml.html#switches-choose) +# +# The following lines show an example of how such a choose_ block can be +# set up depending on a given compiler value/key given by the variable compiler_mpi. +# + +#compiler_mpi: + +#choose_compiler_mpi: +# : +# : +# # load additional modules specific for compiler +# add_module_actions: +# - "load " +# - "load " +# - "load " +# # add additional variables to exported: change and extend following lines: +# add_export_vars: +# # Compiler +# FC: +# F77: +# MPICC: +# MPIFC: +# CC: +# CXX: +#################################################################################### diff --git a/docs/.rtd_reqs.txt b/docs/.rtd_reqs.txt index fb41a1a3a..6c3165002 100644 --- a/docs/.rtd_reqs.txt +++ b/docs/.rtd_reqs.txt @@ -1,6 +1,7 @@ click colorama coloredlogs +docutils==0.16 emoji numpy loguru @@ -10,6 +11,7 @@ questionary sphinxcontrib-napoleon sphinx-copybutton sphinx-tabs +sphinx-toolbox sqlalchemy pyyaml xdgenvpy diff --git a/docs/conf.py b/docs/conf.py index 8903a152d..779496c37 100755 --- a/docs/conf.py +++ b/docs/conf.py @@ -117,14 +117,9 @@ # Add any Sphinx extension module names here, as strings. They can be # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom ones. -# MA: for some reason sphinxcontrib.napoleon does not work on ollie so -# the working module sphinx.ext.napoleon is used when compiled from ollie. -if os.getcwd().split('/')[2]=="ollie": - extensions = ['sphinx.ext.autodoc', 'sphinx.ext.viewcode', 'sphinx.ext.graphviz', - 'sphinx.ext.autosectionlabel', 'sphinx.ext.napoleon', 'sphinx_copybutton', 'sphinx_tabs.tabs'] -else: - extensions = ['sphinx.ext.autodoc', 'sphinx.ext.viewcode', 'sphinx.ext.graphviz', - 'sphinx.ext.autosectionlabel', 'sphinxcontrib.napoleon', 'sphinx_copybutton', 'sphinx_tabs.tabs'] +extensions = ['sphinx.ext.autodoc', 'sphinx.ext.viewcode', 'sphinx.ext.graphviz', + 'sphinx.ext.autosectionlabel', 'sphinx.ext.napoleon', 'sphinx_copybutton', 'sphinx_tabs.tabs', + 'sphinx_toolbox.collapse'] napoleon_custom_sections = ["User Information", "Programmer Information"] diff --git a/docs/cookbook.rst b/docs/cookbook.rst index 9f4c6770c..aabc8e4b0 100644 --- a/docs/cookbook.rst +++ b/docs/cookbook.rst @@ -41,6 +41,7 @@ documentation issue on `our GitHub repository ``: giving an integer as a value results in deleting + the ``run_`` folders except for the last runs + (recommended option as it allows for debugging of crashed + simulations). + + .. Note:: + ``clean_runs: (bool)`` is incompatible with + ``clean_this_rundir`` and ``clean_runs: (int)`` is incompatible + with ``clean_old_rundirs_except`` (an error will be raised + after the end of the first simulation). The functionality of + ``clean_runs`` variable **alone will suffice most of the + standard user requirements**. If finer tunning for the removal + of ``run_`` directories is required you can used the following + variables instead of ``clean_runs``. + +* ``clean_this_rundir``: (bool) Removes the entire run directory + (equivalent to ``clean_runs: (bool)``). ``clean_this_rundir: True`` + **overrides every other** ``clean_`` **option**. + +* ``clean_old_rundirs_except``: (int) Removes the entire run + directory except for the last runs (equivalent to + ``clean_runs: (int)``). + +* ``clean_old_rundirs_keep_every``: (int) Removes the entire + run directory except every th run. Compatible with + ``clean_old_rundirs_except`` or ``clean_runs: (int)``. + +* ``clean__dir``: (bool) Erases the run directory + for a specific filetype. Compatible with all the other options. + +* ``clean_size``: (int or float) Erases all files with size + greater than ``clean_size``, must be specified in bytes! Compatible + with all the other options. + +**Example** + +To delete all the ``run_`` directories in your experiment include this +into your runscript: + +.. code-block:: yaml + + general: + clean_runs: True + +To keep the last 2 ``run_`` directories: + +.. code-block:: yaml + + general: + clean_runs: 2 + +To keep the last 2 runs and every 5 runs: + +.. code-block:: yaml + + general: + clean_old_rundirs_except: 2 + clean_old_rundirs_keep_every: 5 Debugging an Experiment ----------------------- @@ -259,12 +331,12 @@ This will enable the `pdb Python debugger ' + +.. warning:: + The branch **needs to exist on GitHub** as it is cloned form there, and **not from your + local folder**. If you made any changes in your local branch make sure they are pushed before + running ``esm_runscripts`` with a virtual environment, so that your changes are included in the + virtual environment installation. + +You may also select to install esm_tools in `editable mode`, in which case +they will be installed in a folder ``src/esm_tools/`` in the root of +your experiment. Any changes made to the code in that folder **will** influence how +ESM-Tools behave. To create a virtual environment with ESM-Tools installed in +`editable` mode use: + +.. code-block:: yaml + + general: + install__editable: true/false + +.. note:: + When using a virtual environment, config files and namelists will come of the + folder .venv_esmtools listed above and **not** from your user install directory. + You should make **all** changes to the namelists and config files via your user + runscript (:ref:`yaml:Changing Namelists`). This is recommended in all cases!!! diff --git a/docs/esm_tests.rst b/docs/esm_tests.rst new file mode 100644 index 000000000..ca79d3ebc --- /dev/null +++ b/docs/esm_tests.rst @@ -0,0 +1,379 @@ +.. highlight:: shell + +========= +ESM-Tests +========= + +.. note:: This is a feature aimed for advance users and developers who work in preparing + default configurations of experiments, or who implement a model/coupled-setup in + ESM-Tools. + +`ESM-Tests` is the integration testing suite from `ESM-Tools`. Its aim is to test a set +of selected runscripts and model builds just by using one single command: +``esm_tests``. It can also perform dry actions (i.e. check compilations and check +runs). + +Glossary +-------- + +.. glossary:: + + actual vs check test + An `actual test` is a test where the model has been compiled and run in one of the + supported HPCs. A `check test` is a dry test, meaning, no compilation or run takes + place, but instead, the configuration files and scripts are generated. Both + `actual` and `check` tests compare their output configuration files and scripts + to the `last-state`, and offer the possibility to update the `last-state` of those + files at the end of the test. + + esm_tests_info + The repository where the files of the ``last-state`` and the ``runscripts`` for + testing are stored. This repository is clone as a submodel of `ESM-Tools` whenever + ``esm_tests`` command is run for the first time. The repository is cloned locally + into the ``esm_tools/src/esm_tests/resources`` folder. You can activate the submodule + manually via ``git submodule init`` followed by ``git submodule sync``. + + last-state + Set of configuration files, both from compilation and runtime, that represent the + last approved configuration of the testing runscripts. This set of files is kept + for comparison with the equivalent files of future pull-requests, to ensure the + stability of the configurations. `ESM-Tests` always compares the new files to the + ``last-state`` files automatically, both in actual compilation/runs or check + compilation/runs. See :ref:`esm_tests:Last-state`. + + runscripts + The runscripts to run the tests. Runscripts define the test simulation details as + in regular `ESM-Tools` runscripts, but are also used for `ESM-Tests` to understand + what needs to be compiled. Runscripts are part of the ``esm_tests_info`` submodule, + and can be found (if the submodule was initiated via ``esm_tests -u``) in + ``esm_tools/src/esm_tests/resources/runscripts``. Runscripts need to be generalized + (i.e. ``choose_computer.name``) for the different HPCs where you want to run the + tests. + + ``state.yaml`` + In this document some times referred only as state, is a `YAML` file that includes + information about the status of the tests (actual tests or check tests) in + different computers. It also includes the date of the last actual test. + +Usage +----- + +`ESM-Tests` is designed to compile and run tests **just with one single command**, +without additional arguments: ``esm_tests``, so that launching a suite of tests in a +supported HPC is straight forward. Higher granularity in the control of the tests is +enabled via: + +* :ref:`esm_tests:Arguments` +* Runscripts via the usual ``esm_parser`` syntax (e.g. ``choose_computer.name``) +* :ref:`esm_tests:Model control file (\`\`config.yaml\`\`)` +* :ref:`esm_tests:Local test configuration (\`\`test_config.yaml\`\`)` + +The commands syntax is as follows:: + + esm_tests [-h] [-n] [-c] [-u] [-d] [-s SAVE] [-t] [-o] [-b] [-g] [-e] [-r BRANCH] + +Arguments +--------- + +====================================================== ========================================================== +Optional arguments Description +====================================================== ========================================================== + -h, --help Show this help message and exit + -n, --no-user Avoid loading user config (for check tests in GitHub) + -c, --check Check mode on (does not compile or run, but produces + some files that can be compared to previous existing + files in ``last_tested`` folder) + -u, --update Updates the resources with the release branch, + including runscriptsand last_tested files + -d, --delete Delete previous tests + -s SAVE, --save SAVE Save files for comparisson in ``last_tested`` folder. + The values can be ``True``/``False`` + -t, --state Print the state stored in ``state.yaml`` + -o, --hold Hold before operation, to give time to check the output + -b, --bulletpoints Bullet points for printing the state and copy/paste as + markdown text + -g, --github Use this flag when running in GitHub servers (i.e. + adds syntax for collapsing compare sections of the + output for GitHub Actions) + -e, --system-exit-on-errors Trigger a system exit on errors or file differences + so that GitHub actions can catch that as a failing test + -r BRANCH, --branch BRANCH use the given esm_tests_info branch +====================================================== ========================================================== + +Last-state +---------- + +The ``last-state`` files are https://github.com/esm-tools/esm_tets_info repository, in +the ``release`` branch. The files stored in the ``last-state`` are: +* compilation scripts (``comp-*.sh``) +* namelists +* namcouple +* finished_config +* batch scripts (``.run``) + +Check test status +----------------- + +As a user, you can check the ``last-state`` status (the online one of the +``esm_tests_info`` repo, ``release`` branch) by running:: + + esm_tools test-state + +This will give you a summary of the state of compilation and running tests for +different models, in different computers, and also a date of when the latest actual +compilation and run tests were carried out. + +If you are testing locally in an HPC, you can get the same information about your local +state by running:: + + esm_tests -t + +Model control file (``config.yaml``) +------------------------------------ + +**File location:** ``esm_tools/src/esm_tests/resources/runscripts//config.yaml`` +**Versioned**: Yes, distributed with ``esm_tests_info`` + +The `Model control file` gives you control over `ESM-Tests` setups for the set of +runscripts for a given model (the model which name is the same as the folder where +the ``config.yaml`` is contained: +``esm_tools/src/esm_tests/resources/runscripts//``). + +Within this file you can control: + +* which files need to be present for considering an ``actual compilation test`` + successful (``comp.actual.files``) +* which files need to be present for considering an ``actual run test`` + successful (``run.actual.files``) +* which messages from the execution of ``esm_runscripts`` should trigger an error + in an ``actual run test`` (``run.actual.errors``) +* which ``computers`` are supported for this set of tests (``computers``) + +The file should contain this structure: + +.. code-block:: yaml + + comp: + actual: + files: + - "file/path" # Typically the binaries + check: {} + run: + actual: + errors: + - "error message to mark the test as not successful # Typically "MISSING FILES" + files: # Typically restart files and outdata files + - "path/to/file1" + - "globbing/path/*/to*files" + check: {} + computers: + - + - + +In the ``files`` sections, **globbing is supported**. + +The file's paths should be relative to the compilation folder or the experiment folder. + +Each file name can be followed by the syntax ``in/except [, +, ...]`` to only check for that file ``in`` that set of model versions, +or to exclude (``except``) that file from being check for a set of model versions. + +**Example** + +.. code-block:: yaml + + comp: + actual: + files: + - "bin/fesom*" + - "bin/oifs" + - "bin/rnfma" + check: {} + run: + actual: + errors: + - "MISSING FILES" + files: + - "restart/fesom/fesom.*.oce.restart/hnode.nc*" + - "restart/fesom/fesom.*.oce.restart/salt.nc*" + - "restart/fesom/fesom.*.oce.restart/ssh_rhs_old.nc*" + - "restart/fesom/fesom.*.oce.restart/temp.nc*" + - "restart/fesom/fesom.*.oce.restart/urhs_AB.nc*" + - "restart/fesom/fesom.*.oce.restart/vrhs_AB.nc*" + - "restart/fesom/fesom.*.oce.restart/w_impl.nc*" + - "restart/fesom/fesom.*.ice.restart/area.nc*" + - "restart/fesom/fesom.*.ice.restart/hice.nc*" + - "restart/fesom/fesom.*.ice.restart/hsnow.nc*" + - "restart/fesom/fesom.*.ice.restart/ice_albedo.nc*" + - "restart/fesom/fesom.*.ice.restart/ice_temp.nc*" + - "restart/fesom/fesom.*.ice.restart/uice.nc*" + - "restart/fesom/fesom.*.ice.restart/vice.nc*" + - "restart/oasis3mct/rmp_*" + - "restart/oasis3mct/rstas.nc*" + - "restart/oasis3mct/rstos.nc*" + - "restart/oifs/*/BLS*" + - "restart/oifs/*/LAW*" + - "restart/oifs/*/rcf" + - "restart/oifs/*/srf*" + - "restart/oifs/*/waminfo*" + - "outdata/oifs/*/ICMGG* except [frontiers-xios, v3.1]" + - "outdata/oifs/*/ICMSH* except [frontiers-xios, v3.1]" + - "outdata/oifs/*/ICMUA* except [frontiers-xios, v3.1]" + - "outdata/oifs/atm_remapped* in [frontiers-xios, v3.1]" + - "outdata/fesom/*.fesom.*.nc" + check: {} + computers: + - ollie + - mistral + - juwels + - aleph + - blogin + - levante + +Local test configuration (``test_config.yaml``) +----------------------------------------------- + +**File location:** ``esm_tools/src/esm_tests/test_config.yaml`` +**Versioned**: No, user specific, git-ignored + +This file gives you control on which tests ``esm_tests`` will run in the current +machine, independently of what tests are defined in the `Model control files`. The +current machine needs to be included in the `Model control file` for the test to run +(i.e. ``test_config.yaml`` runs only the tests included there and supported on the +current platform). The syntax is as follows: + + .. code-block:: yaml + + : + - .yaml + - .yaml + - [ ... ] + : all + [ ... ] + +The ``model`` sections need to be named after the folders in +``esm_tools/src/esm_tests/resources/runscripts``. If you want to run all the suported +runscripts for a model in this platform, make the ``model`` section have the value +``all``. If you want to select a set of **supported runscripts** make the ``model`` +be a list of runscripts (this runscripts need to be in +``esm_tools/src/esm_tests/resources/runscripts//``). If you want to run all the +supported runscripts for all supported models in this platform, but still keep this +file around (i.e. commented most of the contents), make the file content be an empty +dictionary (``{}``). + +**Example** + + .. code-block:: yaml + + #{} + awiesm: #all + - all_awiesm-2.1-recom.yaml + # - awiesm-2.1_icebergs.yaml + - bootstrap.yaml + - pico.yaml + - PI_ctrl_awiesm-2.1-wiso.yaml + - pi.yaml + - pi-wiso.yaml + echam: all + fesom: all + awicm: all + # - awicm1-CMIP6-initial-monthly.yaml + # - awicm2-initial-monthly.yaml + fesom-recom: + - fesom-recom1.4-initial-daily.yaml + awicm3: all + # - awicm3-v3.1-TCO95L91-CORE2_initial + # - awicm3-frontiers-TCO159L91-CORE2_initial.yaml + #oifsamip: all + #vilma-pism: all + +ESM-Tests cookbook +------------------ + +How to include a new model/runscript +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +1. Add the given runscript to ``esm_tools/src/esm_tests/resources/runscripts//`` +2. Make sure your runscript has a meaningful name +3. Make sure your runscript has the correct model ``version`` defined, for a standalone + model in the section of the model (not in ``general``), and for a coupled setup, + both in the ``general`` section and in the coupled setup section (e.g. ``awiesm`` + section). This version will be used by `ESM-Test` for the ``esm_master`` command to + compile +4. Modify the following variables to take the environment variables setup by `ESM-Tests`: + + .. code-block:: yaml + + general: + account: !ENV ${ACCOUNT} + base_dir: !ENV ${ESM_TESTING_DIR} + : + model_dir: !ENV ${MODEL_DIR} + +5. Generalize the runscript to be able to run in the computers where you'd want it + to be supported (i.e. add the necessary ``choose_computer.name`` switches) +6. Create the `Model control file` + (``esm_tools/src/esm_tests/resources/runscripts//config.yaml``). See + ref:`esm_tests:Model control file (\`\`config.yaml\`\`)` for details about the + content +7. If you are using the :ref:`Local test configuration (\`\`test_config.yaml\`\`)` + to exclude some models, make sure the current model is included, so that your + tests can be run locally. + +How to include a new platform for in an existing model +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +1. In the corresponding `Model control file` + (``esm_tools/src/esm_tests/resources/runscripts//config.yaml``), add + the name of the platform to the ``computers`` list +2. In the runscripts + (``esm_tools/src/esm_tests/resources/runscripts//.yaml``), add + the necessary case to the ``choose_computer.name`` to specify pool directories, + forcing files, ``nproc``, etc. + +How to approve changes on a GitHub Pull-Request +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +1. In the pull-request, if all the tests passed you don't need to approve any + changes, you can jump directly to step 4. +2. If any of the tests labelled as ``esm_tests`` failed (click on the triangles to + expand screen captures): + + .. collapse:: Click on Details + + .. image:: images/esm_tests1.png + + .. collapse:: Find the names of the runscripts with differences (in yellow) + + .. image:: images/esm_tests2.png + + .. collapse:: Scroll up and expand the lines starting with COMPILE/SUBMITTING (for + compilation and runtime checks respectively) followed by the script with + differences + + .. image:: images/esm_tests3.png + + .. collapse:: Review the differences with special attention to namelists and + namcouple files + + .. image:: images/esm_tests4.png + + + +3. If there are no problematic differences, and the pull-request has been already + reviewed and is just ready to be merged, write a message on the PR containing + ``#approve-changes``. This will commit the new files from the tests as the + ``last-state``, in the ``esm_tests_info`` repository. + + .. warning:: Currently, ``#approve-changes`` does not update the test status + on GitHub, once the operation finishes. If you want to see whether + ``#approve_changes`` finished or not you have to navigate to the ``Actions`` + tab in GitHub. If you want to see all tests green, wait until + ``#approve-changes`` finishes, and relaunch the tests for the last + failed set of tests in the PR. Miguel - I know this is a pain, but I could not + figure out how to do all this automatically (I wasted enough time on GitHub + Actions for years to come). + +4. Bump the version and wait that the bumpversion commit shows up. + +5. You can now merge. diff --git a/docs/esm_tools.rst b/docs/esm_tools.rst new file mode 100644 index 000000000..8e7058294 --- /dev/null +++ b/docs/esm_tools.rst @@ -0,0 +1,56 @@ +========= +ESM Tools +========= + +The command line interface ``esm_tools`` also has a top-level program you can +use to interact with several parts of our software. + +Usage: Top level commands +------------------------- + +To show all top-level commands:: + + $ esm_tools --help + Usage: esm_tools [OPTIONS] COMMAND [ARGS]... + + Options: + --version Show the version and exit. + --help Show this message and exit. + + Commands: + create-new-config Opens your $EDITOR and creates a new file for NAME + test-state Prints the state of the last tested experiments. + +Usage: Getting the Version +-------------------------- + +You can get the version number you currently have with:: + + $ esm_tools --version + esm_tools, version 6.20.1 + +Usage: Checking current testing state +------------------------------------- + +You can get the current state of our automatic tests with:: + + $ esm_tools test-state + +Usage: Making a new component +----------------------------- + +You can get a pre-generated template to add a new component with:: + + $ esm_tools create-new-config + Creating a new component configuration for my_new_thing + + ...EDITOR OPENS.... + + Thank you! The new configuration has been saved. Please commit it (and get in touch with the + esm-tools team if you need help)! + +You can also specify if you are creating a new ``setup`` or a new ``component`` with:: + + $ esm_tools create-new-config --type setup + +Note however that there is (as of this writing) no template available for setups! diff --git a/docs/esm_variables.rst b/docs/esm_variables.rst index 65e35534a..4e7e620bf 100644 --- a/docs/esm_variables.rst +++ b/docs/esm_variables.rst @@ -45,15 +45,16 @@ Installation variables :header: Key, Description :widths: 15, 85 - model, "Name of the model/setup as listed in the config files (``esm_tools/configs/components`` for models and ``esm_tools/configs/setups`` for setups)." - setup_name, Name of the coupled setup. - version, "Version of the model/setup (one of the available options in the ``available_versions`` list)." - available_versions, List of supported versions of the component or coupled setup. - git-repository, Address of the model's git repository. - branch, Branch from where to clone. - destination, "Name of the folder where the model is downloaded and compiled, in a coupled setup." - comp_command, Command used to compile the component. - install_bins, "Path inside the component folder, where the component is compiled by default. This path is necessary because, after compilation, ESM-Tools needs to copy the binary from this path to the ``/bin`` folder." + model, "Name of the model/setup as listed in the config files (``esm_tools/configs/components`` for models and ``esm_tools/configs/setups`` for setups)." + setup_name, Name of the coupled setup. + version, "Version of the model/setup (one of the available options in the ``available_versions`` list)." + available_versions, List of supported versions of the component or coupled setup. + git-repository, Address of the model's git repository. + branch, Branch from where to clone. + destination, "Name of the folder where the model is downloaded and compiled, in a coupled setup." + comp_command, Command used to compile the component. + install_bins, "Path inside the component folder, where the component is compiled by default. This path is necessary because, after compilation, ESM-Tools needs to copy the binary from this path to the ``/bin`` folder." + source_code_permissions, "Sets the file permisions for the source code using `chmod -R ." Runtime variables ----------------- diff --git a/docs/esm_versions.rst b/docs/esm_versions.rst index 60fb2e8ca..2dc2b52a4 100644 --- a/docs/esm_versions.rst +++ b/docs/esm_versions.rst @@ -1,11 +1,21 @@ -============ -ESM-Versions -============ +================= +ESM-Tools version +================= -New with the Tools version 3.1.5, you will find an executable in your path called ``esm_version``. This was added by Paul Gierz to help the user / developer to keep track of / upgrade the python packages belonging to ESM Tools. +Use ``esm_tools --version`` to get the version of `ESM-Tools`. + +.. note:: If your version is prior to 6.0.0 (before 2022) this option does not exist. + You can use ``esm_versions`` instead (:ref:`esm_versions:ESM-Versions`) + +ESM-Versions (deprecated) +------------------------- + +.. warning:: This feature is deprecated since 2022 (version 6.0.0) + +Above version 3.1.5 and below 6.0.0, you will find an executable in your path called ``esm_version``. This was added by Paul Gierz to help the user / developer to keep track of / upgrade the python packages belonging to ESM Tools. Usage ------ +~~~~~ It doesn't matter from which folder you call ``esm_versions``. You have two subcommands:: @@ -22,34 +32,3 @@ Notice that you can also upgrade single python packages, e.g.:: branch And yes, ``esm_versions`` can upgrade itself. - - -Getting ESM-Versions --------------------- - -As was said before, if you have the Tools with a version newer than 3.1.4, you should already have ``esm_versions`` in your path. In case you are on an older version of the Tools, or it is missing because of problems, you need to remove the installed python packages by hand one last time, and then reinstall them using the installer: - -1. Make sure to push all your local changes to branches of the repos, or save them otherwise! - -2. Remove the installed python libs:: - - $ rm -rf ~/.local/lib/python-whatever_your_version/site-packages/esm* - -3. Remove the installed executables:: - - $ rm -rf ~/.local/bin/esm* - -4. Upgrade the repository esm_tools:: - - $ cd path/to/esm_tools - $ git checkout release - $ git pull - -5. Re-install the python packages:: - - $ ./install.sh - -You should now be on the most recent released version of the tools, and ``esm_versions`` should be in your ``PATH``. - - - diff --git a/docs/images/esm_tests1.png b/docs/images/esm_tests1.png new file mode 100644 index 000000000..799c78ccc Binary files /dev/null and b/docs/images/esm_tests1.png differ diff --git a/docs/images/esm_tests2.png b/docs/images/esm_tests2.png new file mode 100644 index 000000000..1dbff2e83 Binary files /dev/null and b/docs/images/esm_tests2.png differ diff --git a/docs/images/esm_tests3.png b/docs/images/esm_tests3.png new file mode 100644 index 000000000..66e5b8c93 Binary files /dev/null and b/docs/images/esm_tests3.png differ diff --git a/docs/images/esm_tests4.png b/docs/images/esm_tests4.png new file mode 100644 index 000000000..e5f92ef52 Binary files /dev/null and b/docs/images/esm_tests4.png differ diff --git a/docs/index.rst b/docs/index.rst index f19c80bfd..2729163f7 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -13,11 +13,13 @@ Welcome to ESM Tools's documentation! yaml_hierarchy esm_variables Supported_Models + esm_tools esm_master esm_versions esm_runscripts workflow esm_environment + esm_tests motd cookbook faq diff --git a/docs/installation.rst b/docs/installation.rst index a00f42408..a8bc6ea4a 100644 --- a/docs/installation.rst +++ b/docs/installation.rst @@ -71,14 +71,14 @@ $ esm_versions upgrade esm_parser Uninstall ESM-Tools ------------------- -To uninstall your current installation make sure you have the most recent version of +We are sorry to see you go! To uninstall your current installation make sure you have the most recent version of ``pip`` available for your system:: $ python3 -m pip install -U pip Then, you can use use the following command to uninstall all `ESM-Tools` packages:: -$ esm_versions clean +$ pip freeze | grep esm | xargs pip uninstall -y You can also choose to manually uninstall. In order to do that, remove the installed Python packages and delete the ``esm_*`` executables. The following commands will do the trick if you installed with the ``install.sh`` script or installed using ``pip`` with ``user`` mode :: @@ -89,5 +89,5 @@ Note that you may have a different Python version, so the second command might n $ pip uninstall [--user] esm-tools -The ``--user`` flag may be required when using ``pip``. +The ``--user`` flag may be required when using ``pip`` if you are not uninstalling in either a virtual environment or a global install (you would need to be root in that case). diff --git a/docs/recipes/add_machine.rst b/docs/recipes/add_machine.rst new file mode 100644 index 000000000..fb68d8a1c --- /dev/null +++ b/docs/recipes/add_machine.rst @@ -0,0 +1,50 @@ +Implement a New HPC Machine +=========================== + +To implement a new HPC machine to `ESM-Tools`, two files need to be updated and created, respectively: + +- ``/esm_tools/configs/machines/all_machines.yaml`` +- ``/esm_tools/configs/machines/.yaml`` + +1. Add an additional entry for the new machine. + + Use your favourite text editor and open the file ``/esm_tools/configs/machines/all_machines.yaml``:: + + $ /esm_tools/configs/machines/all_machines.yaml + + and add a new entry for the new machine (replace placeholders indicated by <...>) + + .. code-block:: yaml + + : + login_nodes: '*' # A regex pattern that matches the hostname of login nodes + compute_nodes: '' # A regex pattern that matches the hostname of compute nodes + + +2. Create a new machine file. + + Use your favourite text editor to create and edit a new machine file ``.yaml`` in the + ``esm_tools/configs/machines/`` folder:: + + $ /esm_tools/configs/machines/.yaml + + A template file (``machine_template.yaml``) is available in ``configs/templates``, so you can alternatively copy + this file into the ``configs/machines`` folder edit the relevant entries:: + + $ cp /esm_tools/configs/templates/machine_template.yaml /esm_tools/configs/machines/.yaml + $ /esm_tools/configs/machines/.yaml + + You can also reproduce the two steps above simply by running the following ``esm_tools`` command:: + + $ esm_tools create-new-config /esm_tools/configs/machines/.yaml -t machine + + This will copy the ``machine_template.yaml`` in the target location and open the file in your default editor. + +See also +~~~~~~~~ + +.. links to relevant parts of the documentation + +- :ref:`esm_variables:ESM-Tools Variables` +- :ref:`yaml:Switches (\`\`choose_\`\`)` +- :ref:`yaml:What Is YAML?` diff --git a/docs/recipes/add_model_setup.rst b/docs/recipes/add_model_setup.rst index bbcb137b3..d3bb4e066 100644 --- a/docs/recipes/add_model_setup.rst +++ b/docs/recipes/add_model_setup.rst @@ -3,6 +3,8 @@ Implement a New Model **Feature available since version:** 4.2 +.. note:: since version 6.20.2 a template is available in + ``esm_tools/configs/templates/component_template.yaml`` 1. Upload your model into a repository such us `gitlab.awi.de`, `gitlab.dkrz.de` or `GitHub`. Make sure to set up the right access permissions, so that you comply with the licensing of diff --git a/docs/recipes/sbatch_flags.rst b/docs/recipes/sbatch_flags.rst index 96072abf2..4599506c7 100644 --- a/docs/recipes/sbatch_flags.rst +++ b/docs/recipes/sbatch_flags.rst @@ -28,3 +28,17 @@ your runscript: computer: additional_flags: "--qos=24h" + +Adding more than one flag +~~~~~~~~~~~~~~~~~~~~~~~~~ + +Alternatively, you can include a list of additional flags: + +.. code-block:: yaml + + computer: + additional_flags: + - "--qos=24h" + - "--comment='My Slurm Comment'" + +See the documentation for the batch scheduler on your HPC system to see the allowed options. diff --git a/docs/yaml.rst b/docs/yaml.rst index 055a47ddb..7d5c64a1f 100644 --- a/docs/yaml.rst +++ b/docs/yaml.rst @@ -915,6 +915,23 @@ of a `FESOM` simulation and store it in a variable called `prev_time_step`: already available in the current run, under variables such as ``last_start_date``, ``parent_start_date``, etc. +Branchoff experiments with ``prev_run`` +--------------------------------------- + +If you use ``prev_run`` variables in your model configuration files, ``esm_runscripts`` +will require that you define a ``prev_run_config_file`` variable in your runscript +**when you try to run a branchoff experiment**. As a branchoff is a way of restarting, +``esm_runscripts`` needs to know which file should use to load the ``prev_run`` +information, but (contrary to the regular restarts within the same experiment) finding +that file name is a non-trivial task: being a different experiment, the datestamps and +restart frequency can differ from the parent experiment to the branchoff experiment. To +overcome this problem the user needs to specify the **full path** to the +``finished_config.yaml`` to be used on the first run of the branchoff experiment: + +.. code-block:: yaml + + prev_run_config_file: "///config/_finished_config.yaml_-" + Error-handling and warning syntax ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/esm_tools/motd/motd.yaml b/esm_tools/motd/motd.yaml index 40a24ede8..01a6c248c 100644 --- a/esm_tools/motd/motd.yaml +++ b/esm_tools/motd/motd.yaml @@ -130,10 +130,34 @@ release6.7: If the model you are aiming to use is not in that list, please add a comment\n to the discussion in the link, stating the model's name, version, branches...\n and \x1b[35mcontact the model developers\x1b[0m for them to do the necessary\n - changes in the CMake files.\n + changes in the CMake files.\n" + action: DELAY(1) + announcement: true - To upgrade to version \x1b[96m6.7\x1b[0m follow these simple steps:\n - \x1b[96m1.\x1b[0m \x1b[35mcd /esm_tools\x1b[0m\n - \x1b[96m2.\x1b[0m \x1b[35mgit pull\x1b[0m\n" +oasis_branchoff6.21.23: + package: "esm_tools" + versions: "<6.21.23" + message: "\x1b[1m\x1b[96mOASIS BRANCH-OFF RESTARTS FIXED!\x1b[0m\n + + The bug on the copying of the wrong flux files from OASIS \x1b[96mwhen running\n + a branch-off simulation that started from the middle of a parent simulation\x1b[0m is now\n + \x1b[96mfixed\x1b[0m (no more manual fixing of the \x1b[35mrstas.nc\x1b[0m/\x1b[35mrstos.nc\x1b[0m/\x1b[35ma2o_flux\x1b[0m/\x1b[35mo2a_flux.nc\x1b[0m\n + links is needed).\n" action: DELAY(1) announcement: true + +#online_workshops: +# package: "esm_tools" +# versions: "<7.0.0" +# message: "\x1b[1m\x1b[96mONLINE WORKSHOPS\x1b[0m\n +# +# The ESM-Tools team has been recently organizing a number of in-person workshops.\n +# Did you miss some of those? No problem! the workshops were recorded and you can\n +# access their content here: \x1b[35mhttps://github.com/esm-tools/workshops\x1b[0m\n +# (scroll down to the Workshops index to find the workshops available and their links).\n +# The workshops currently avialable are:\n +# - \x1b[96mESM-Tools\x1b[0m\n +# - \x1b[96mGit\x1b[0m\n +# - \x1b[96mGitHub Projects for Project Management\x1b[0m\n" +# action: DELAY(1) +# note: delete after a week ot two diff --git a/install.sh b/install.sh index ec9322aeb..ea0cf72dd 100755 --- a/install.sh +++ b/install.sh @@ -46,7 +46,7 @@ if hash git 2>/dev/null; then echo $git_error_message echo "git version found: ${git_version}" else - if test ${minor_git_version} -lt "13"; then + if test ${minor_git_version} -lt "10"; then echo $git_error_message echo "git version found: ${git_version}" fi @@ -60,7 +60,12 @@ fi if [ ! -z ${VIRTUAL_ENV+x} ]; then echo "Detected virtual environment $VIRTUAL_ENV" pip install -e . -#FIXME(PG): We might still need a case for Conda virtual environments +elif [ ! -z ${CONDA_PREFIX+x} ]; then + echo "=======================" + echo "Using CONDA environment" + echo "=======================" + echo "WARNING: The use of a conda environment is currently not recommended. Use only for testing purposes!" + ${CONDA_PREFIX}/bin/pip install -e . else echo "Standard install to user directory (likely ${HOME}/.local)" pip install --user -e . diff --git a/motd/motd.yaml b/motd/motd.yaml index 40a24ede8..01a6c248c 100644 --- a/motd/motd.yaml +++ b/motd/motd.yaml @@ -130,10 +130,34 @@ release6.7: If the model you are aiming to use is not in that list, please add a comment\n to the discussion in the link, stating the model's name, version, branches...\n and \x1b[35mcontact the model developers\x1b[0m for them to do the necessary\n - changes in the CMake files.\n + changes in the CMake files.\n" + action: DELAY(1) + announcement: true - To upgrade to version \x1b[96m6.7\x1b[0m follow these simple steps:\n - \x1b[96m1.\x1b[0m \x1b[35mcd /esm_tools\x1b[0m\n - \x1b[96m2.\x1b[0m \x1b[35mgit pull\x1b[0m\n" +oasis_branchoff6.21.23: + package: "esm_tools" + versions: "<6.21.23" + message: "\x1b[1m\x1b[96mOASIS BRANCH-OFF RESTARTS FIXED!\x1b[0m\n + + The bug on the copying of the wrong flux files from OASIS \x1b[96mwhen running\n + a branch-off simulation that started from the middle of a parent simulation\x1b[0m is now\n + \x1b[96mfixed\x1b[0m (no more manual fixing of the \x1b[35mrstas.nc\x1b[0m/\x1b[35mrstos.nc\x1b[0m/\x1b[35ma2o_flux\x1b[0m/\x1b[35mo2a_flux.nc\x1b[0m\n + links is needed).\n" action: DELAY(1) announcement: true + +#online_workshops: +# package: "esm_tools" +# versions: "<7.0.0" +# message: "\x1b[1m\x1b[96mONLINE WORKSHOPS\x1b[0m\n +# +# The ESM-Tools team has been recently organizing a number of in-person workshops.\n +# Did you miss some of those? No problem! the workshops were recorded and you can\n +# access their content here: \x1b[35mhttps://github.com/esm-tools/workshops\x1b[0m\n +# (scroll down to the Workshops index to find the workshops available and their links).\n +# The workshops currently avialable are:\n +# - \x1b[96mESM-Tools\x1b[0m\n +# - \x1b[96mGit\x1b[0m\n +# - \x1b[96mGitHub Projects for Project Management\x1b[0m\n" +# action: DELAY(1) +# note: delete after a week ot two diff --git a/namelists/echam/6.3.04p1/cmip6/namelist.echam b/namelists/echam/6.3.04p1/cmip6/namelist.echam new file mode 100644 index 000000000..1dabca3a0 --- /dev/null +++ b/namelists/echam/6.3.04p1/cmip6/namelist.echam @@ -0,0 +1,139 @@ +&parctl + nproca=24 + nprocb=48 +/ +&runctl + NPROMA=72 + OUT_FILETYPE=2 + OUT_ZTYPE=0 + RERUN_FILETYPE=4 + LTIMER=.false. + LMIDATM=.true. + LFRACTIONAL_MASK=.false. + !LHD=.true. + LCOUPLE=.true. + LCOUPLE_CO2=.true. + !LIPCC=.true. + LAMIP=.false. + PUTOCEAN=1,'days','last',0 + GETOCEAN=1,'days','last',0 + PUTDATA=24,'hours','last',0 + default_output=.true. + TRIGFILES=12,'months','exact',0 + LDEBUGEV=.false. + !lmeltpond=.false. + out_expname=From2017in2019in2017Climatessp3703 + dt_stop=2019,10,01 + dt_resume=2019,07,01 + lresume=.true. + out_datapath='/work/ba1138/a270148/esm-experiments/AWICM/From2017in2019in2017Climatessp3703/work//' + delta_time=200 + putrerun=3,'months','first',0 +/ +&submdiagctl + vphysc_lpost = .false. +/ +&mvstreamctl + interval = 1, 'months', 'last', 0 + target = 'spim' + source = 'sp' + variables = 'st:mean', 'svo:mean', 'lsp:mean', 'sd:mean' +/ +&mvstreamctl + interval = 1, 'months', 'last', 0 + target = 'glim' + source = 'gl' + variables = 'xl:mean', 'xi:mean' +/ +&mvstreamctl + interval = 1, 'months', 'last', 0 + target = 'aclcim' + source = 'g3b' + variables = 'aclc:mean' +/ +&set_stream_element + stream = 'aclcim' + name = 'aclc' + code = 162 + lpost = 1 +/ +&set_stream + stream = 'jsbach' + lpost = 0 +/ +&set_stream + stream = 'land' + lpost = 0 +/ +&set_stream + stream = 'veg' + lpost = 0 +/ +&set_stream + stream = 'yasso' + lpost = 0 +/ +&mvstreamctl + interval = 1, 'months', 'last', 0 + target = 'g3bim' + source = 'g3b' + variables = 't2min:min', 't2max:max', 'topmax:mean' +/ +&mvstreamctl + interval = 1, 'days', 'last', 0 + target = 'glday' + source = 'gl' + variables = 'q:mean' +/ +&mvstreamctl + target = 'g3bday' + interval = 1, 'days', 'last', 0 + source = 'g3b' + meannam = 'tslm1', 'tsi' +/ +&mvstreamctl + interval = 1, 'days', 'last', 0 + target = 'g3bid' + source = 'g3b' + variables = 'u10:mean', 'v10:mean', 'temp2:mean', 'relhum:mean', + 'dew2:mean', 'ws:mean', 'sn:mean', 'wimax:max', 't2min:min', 't2max:max' +/ +&mvstreamctl + interval = 1, 'days', 'last', 0 + target = 'jsbid' + source = 'jsbach' + variables = 'layer_moisture:mean' +/ +&mvstreamctl + interval = 6, 'hours', 'last', 0 + target = 'sp6h' + source = 'sp' + variables = 'st:mean', 'svo:mean', 'lsp:mean', 'sd:mean' +/ +&mvstreamctl + interval = 1, 'hours', 'last', 0 + target = 'g3b1hi' + source = 'g3b' + variables = 'u10:inst', 'v10:inst', 'wimax:max' +/ +&dynctl + ENSTDIF = 1. +/ +&submodelctl + lmethox = .true. + lco2 = .false. +/ +&radctl + iaero = 9 + io3 = 4 + isolrad = 1 + ico2 = 4 + ighg = 1 + icfc = 4 + ich4 = 4 + in2o = 4 +/ +&co2ctl + LCO2_SCENARIO = .true. +/ + diff --git a/namelists/echam/6.3.05p2-awiesm-2.1/cmip6/namelist.echam b/namelists/echam/6.3.05p2-awiesm-2.1/cmip6/namelist.echam new file mode 100644 index 000000000..3a2e7dcc9 --- /dev/null +++ b/namelists/echam/6.3.05p2-awiesm-2.1/cmip6/namelist.echam @@ -0,0 +1,187 @@ +&parctl + nproca = 24 + nprocb = 24 + nprocar = 0 + nprocbr = 0 +/ + +&runctl + nproma = 0 + npromar = 0 + out_expname = 'ssp5_104' + out_datapath = '/work/ab0246/a270188/awiesm-2.1-wiso_future/pico-fesom/experiments/ssp5_104//run_20150101-20151231/work/' + out_filetype = 2 + out_ztype = 0 + rerun_filetype = 4 + lresume = .false. + ltimer = .false. + lmidatm = .true. + lfractional_mask = .false. + lcouple = .true. + lcouple_co2 = .true. + lamip = .false. + dt_start = 2015, 1, 1 + dt_stop = 2016, 1, 1 + delta_time = 450 + putocean = 1, 'days', 'last', 0 + getocean = 1, 'days', 'last', 0 + putrerun = 1, 'years', 'first', 0 + putdata = 1, 'months', 'last', 0 + default_output = .false. + trigfiles = 12, 'months', 'exact', 0 + ldebugev = .false. + dt_resume = 2015, 1, 1 +/ + +&submdiagctl + vphysc_lpost = .false. +/ + +&mvstreamctl + filetag = 'echam' + source = 'sp', 'gl', 'g3b' +/ + +&mvstreamctl + interval = 1, 'months', 'last', 0 + target = 'spim' + source = 'sp' + variables = 'st:mean', 'svo:mean', 'lsp:mean', 'sd:mean' +/ + +&mvstreamctl + interval = 1, 'months', 'last', 0 + target = 'glim' + source = 'gl' + variables = 'xl:mean', 'xi:mean' +/ + +&mvstreamctl + interval = 1, 'months', 'last', 0 + target = 'aclcim' + source = 'g3b' + variables = 'aclc:mean' +/ + +&mvstreamctl + interval = 1, 'months', 'last', 0 + target = 'g3bim' + source = 'g3b' + variables = 't2min:min', 't2max:max', 'topmax:mean' +/ + +&mvstreamctl + interval = 1, 'days', 'last', 0 + target = 'glday' + source = 'gl' + variables = 'q:mean' +/ + +&mvstreamctl + target = 'g3bday' + interval = 1, 'days', 'last', 0 + source = 'g3b' + meannam = 'tslm1', 'tsi' +/ + +&mvstreamctl + interval = 1, 'days', 'last', 0 + target = 'g3bid' + source = 'g3b' + variables = 'u10:mean', 'v10:mean', 'temp2:mean', 'relhum:mean', 'dew2:mean', + 'ws:mean', 'sn:mean', 'wimax:max', 't2min:min', 't2max:max' +/ + +&mvstreamctl + interval = 1, 'days', 'last', 0 + target = 'jsbid' + source = 'jsbach' + variables = 'layer_moisture:mean' +/ + +&mvstreamctl + interval = 6, 'hours', 'last', 0 + target = 'sp6h' + source = 'sp' + variables = 'st:mean', 'svo:mean', 'lsp:mean', 'sd:mean' +/ + +&mvstreamctl + interval = 1, 'hours', 'last', 0 + target = 'g3b1hi' + source = 'g3b' + variables = 'u10:inst', 'v10:inst', 'wimax:max' +/ + +&mvstreamctl + interval = 1, 'days', 'last', 0 + target = 'g3bdaymax' + source = 'g3b' + variables = 'temp2:max' +/ + +&mvstreamctl + interval = 1, 'days', 'last', 0 + target = 'g3bdaymin' + source = 'g3b' + variables = 'temp2:min' +/ + +&set_stream_element + stream = 'aclcim' + name = 'aclc' + code = 162 + lpost = 1 +/ + +&set_stream + stream = 'jsbach' + lpost = 0 +/ + +&set_stream + stream = 'land' + lpost = 0 +/ + +&set_stream + stream = 'veg' + lpost = 0 +/ + +&set_stream + stream = 'yasso' + lpost = 0 +/ + +&dynctl + enstdif = 1.0 +/ + +&submodelctl + lmethox = .true. + lco2 = .false. +/ + +&radctl + iaero = 8 + io3 = 4 + isolrad = 1 + ico2 = 4 + ighg = 1 + icfc = 4 + ich4 = 4 + in2o = 4 + lrad_async = .false. + lrestart_from_old = .false. +/ + +&co2ctl + lco2_scenario = .true. +/ + +&wisoctl + lwiso_rerun = .false. + lwiso = .false. + nwiso = 0 +/ diff --git a/namelists/echam/6.3.05p2-wiso/HIST/namelist.echam b/namelists/echam/6.3.05p2-wiso/HIST/namelist.echam new file mode 100644 index 000000000..3521067e6 --- /dev/null +++ b/namelists/echam/6.3.05p2-wiso/HIST/namelist.echam @@ -0,0 +1,124 @@ +&runctl + dt_start = 1850, 1, 1, 0, 0, 0 + dt_stop = 2402, 1, 1, 0, 0, 0 + putrerun = 1, 'months', 'last', 0 + default_output = .false. + lcouple = .true. + lcouple_co2 = .true. + lfractional_mask = .false. + lresume = .true. + out_expname = 'TST' + out_datapath = '/work/bk0988/awicm/a270062/fesom_echam/glob//cpl_work_test/' + rerun_filetype = 4 + getocean = 1, 'days', 'last', 0 + putocean = 1, 'days', 'last', 0 +/ + +&wisoctl + lwiso = .false. + lwiso_rerun = .false. + nwiso = 0 +/ + +&parctl + nproca = 24 + nprocb = 24 + nprocar = 0 + nprocbr = 0 +/ + +&submodelctl + lmethox = .true. +/ + +&mvstreamctl ! 'default spm glm g3bm' + filetag = 'echam' + source = 'sp', 'gl', 'g3b' +/ +&mvstreamctl ! 'default co2m' + filetag = 'co2' + source = 'co2' +/ +&mvstreamctl ! 'default surfm' + filetag = 'surf' + source = 'surf' +/ +&mvstreamctl ! 'default tracerm' + filetag = 'tracer' + source = 'tracer' +/ +&mvstreamctl ! 'default jsbachm' + filetag = 'jsbach' + source = 'jsbach' +/ +&mvstreamctl ! 'default landm' + filetag = 'land' + source = 'land' +/ +&mvstreamctl ! 'default vegm' + filetag = 'veg' + source = 'veg' +/ +&mvstreamctl ! 'default yassom' + filetag = 'yasso' + source = 'yasso' +/ +&mvstreamctl ! 'default wisom' + filetag = 'wiso' + source = 'wiso' +/ +&mvstreamctl ! 'default la_wisom' + filetag = 'la_wiso' + source = 'la_wiso' +/ +&mvstreamctl ! 'default js_wisom' + filetag = 'js_wiso' + source = 'js_wiso' +/ + +&set_stream ! 'default jsbach' + stream = 'jsbach' + lpost = 0 +/ +&set_stream ! 'default land' + stream = 'land' + lpost = 0 +/ +&set_stream ! 'default veg' + stream = 'veg' + lpost = 0 +/ +&set_stream ! 'default yasso' + stream = 'yasso' + lpost = 0 +/ +&set_stream ! 'default wiso' + stream = 'wiso' + lpost = 0 +/ +&set_stream ! 'default js_wiso' + stream = 'js_wiso' + lpost = 0 +/ +&set_stream ! 'default la_wiso' + stream = 'la_wiso' + lpost = 0 +/ +&radctl + iaero = 8 + io3 = 4 + isolrad = 1 + ich4 = 4 + ico2 = 4 + in2o = 4 + icfc = 4 + ighg = 1 + co2vmr = 336.52e-06 + ch4vmr = 1530.2e-09 + n2ovmr = 300.74e-09 + cfcvmr(1) = 148.80e-12 + cfcvmr(2) = 270.50e-12 +/ +&co2ctl + lco2_scenario = .true. +/ diff --git a/namelists/echam/6.3.05p2-wiso/PALEO/namelist.echam b/namelists/echam/6.3.05p2-wiso/PALEO/namelist.echam new file mode 100644 index 000000000..342f87303 --- /dev/null +++ b/namelists/echam/6.3.05p2-wiso/PALEO/namelist.echam @@ -0,0 +1,133 @@ +&runctl + dt_start = 2285, 12, 31, 23, 52, 30 + dt_stop = 6699, 12, 31, 23, 52, 30 + putrerun = 12, 'months', 'last', 0 + lfractional_mask = .false. + lresume = .true. + out_datapath = './' + out_expname = 'E280' + rerun_filetype = 4 + delta_time = 450 + putdata = 1, 'months', 'last', 0 + nproma = 8 + npromar = 8 + lcouple = .true. + getocean = 1, 'days', 'last', 0 + putocean = 1, 'days', 'last', 0 + lcouple_co2 = .true. + default_output = .false. +/ +&wisoctl + lwiso = .false. + lwiso_rerun = .false. + nwiso = 0 +/ +&parctl + nproca = 24 + nprocb = 24 + nprocar = 24 + nprocbr = 24 + +/ +&submodelctl + lmethox = .true. +/ +&submdiagctl + vphysc_lpost = .false. +/ +&mvstreamctl + interval = 1, 'months', 'last', 0 + target = 'spim' + source = 'sp' + variables = 'st:mean', 'svo:mean', 'lsp:mean', 'sd:mean' +/ +&mvstreamctl + interval = 1, 'months', 'last', 0 + target = 'glim' + source = 'gl' + variables = 'xl:mean', 'xi:mean' +/ +&mvstreamctl + interval = 1, 'months', 'last', 0 + target = 'aclcim' + source = 'g3b' + variables = 'aclc:mean' +/ +&set_stream_element + stream = 'aclcim' + name = 'aclc' + code = 162 + lpost = 1 +/ +&set_stream + stream = 'jsbach' + lpost = 0 +/ +&set_stream + stream = 'land' + lpost = 0 +/ +&set_stream + stream = 'veg' + lpost = 0 +/ +&set_stream + stream = 'yasso' + lpost = 0 +/ +&mvstreamctl + interval = 1, 'months', 'last', 0 + target = 'g3bim' + source = 'g3b' + variables = 't2min:min', 't2max:max', 'topmax:mean' +/ +&mvstreamctl + interval = 1, 'days', 'last', 0 + target = 'glday' + source = 'gl' + variables = 'q:mean' +/ +&mvstreamctl + target = 'g3bday' + interval = 1, 'days', 'last', 0 + source = 'g3b' + meannam = 'tslm1', 'tsi' +/ +&mvstreamctl + interval = 1, 'days', 'last', 0 + target = 'g3bid' + source = 'g3b' + variables = 'u10:mean', 'v10:mean', 'temp2:mean', 'relhum:mean', 'albedo:mean', + 'dew2:mean', 'ws:mean', 'sn:mean', 'wimax:max', 't2min:min', 't2max:max' +/ +&mvstreamctl + interval = 1, 'days', 'last', 0 + target = 'jsbid' + source = 'jsbach' + variables = 'layer_moisture:mean' +/ +&mvstreamctl + interval = 6, 'hours', 'last', 0 + target = 'sp6h' + source = 'sp' + variables = 'st:mean', 'svo:mean', 'lsp:mean', 'sd:mean' +/ +&mvstreamctl + interval = 1, 'hours', 'last', 0 + target = 'g3b1hi' + source = 'g3b' + variables = 'u10:inst', 'v10:inst', 'wimax:max' +/ +&radctl + iaero = 3 + io3 = 4 + isolrad = 6 + ich4 = 3 + in2o = 3 + co2vmr = 284.3169860840e-06 + ch4vmr = 808.2490234375e-09 + n2ovmr = 273.0210571289e-09 + yr_perp = 1850 + lrad_async = .true. + lrestart_from_old = .false. +/ diff --git a/namelists/echam/6.3.05p2-wiso/PALEO/namelist.echam.yearlyoutput b/namelists/echam/6.3.05p2-wiso/PALEO/namelist.echam.yearlyoutput new file mode 100644 index 000000000..73bb1574e --- /dev/null +++ b/namelists/echam/6.3.05p2-wiso/PALEO/namelist.echam.yearlyoutput @@ -0,0 +1,90 @@ +&runctl + dt_start = 2285, 12, 31, 23, 52, 30 + dt_stop = 6699, 12, 31, 23, 52, 30 + putrerun = 1, 'years', 'last', 0 + lfractional_mask = .false. + lresume = .true. + out_datapath = './' + out_expname = 'E280' + rerun_filetype = 4 + delta_time = 450 + putdata = 1, 'years', 'last', 0 + nproma = 8 + npromar = 8 + lcouple = .true. + getocean = 1, 'days', 'last', 0 + putocean = 1, 'days', 'last', 0 + lcouple_co2 = .true. + default_output = .false. +/ +&wisoctl + lwiso = .false. + lwiso_rerun = .false. + nwiso = 0 +/ +&parctl + nproca = 24 + nprocb = 24 + nprocar = 24 + nprocbr = 24 + +/ +&submodelctl + lmethox = .true. +/ +&submdiagctl + vphysc_lpost = .false. +/ +&mvstreamctl + interval = 1, 'years', 'last', 0 + target = 'spim' + source = 'sp' + variables = 'st:mean', 'svo:mean', 'lsp:mean', 'sd:mean' +/ +&mvstreamctl + interval = 1, 'years', 'last', 0 + target = 'glim' + source = 'gl' + variables = 'xl:mean', 'xi:mean' +/ +&mvstreamctl + interval = 1, 'years', 'last', 0 + target = 'aclcim' + source = 'g3b' + variables = 'aclc:mean' +/ +&set_stream_element + stream = 'aclcim' + name = 'aclc' + code = 162 + lpost = 1 +/ +&set_stream + stream = 'jsbach' + lpost = 0 +/ +&set_stream + stream = 'land' + lpost = 0 +/ +&set_stream + stream = 'veg' + lpost = 0 +/ +&set_stream + stream = 'yasso' + lpost = 0 +/ +&radctl + iaero = 3 + io3 = 4 + isolrad = 6 + ich4 = 3 + in2o = 3 + co2vmr = 284.3169860840e-06 + ch4vmr = 808.2490234375e-09 + n2ovmr = 273.0210571289e-09 + yr_perp = 1850 + lrad_async = .true. + lrestart_from_old = .false. +/ diff --git a/namelists/echam/6.3.05p2-wiso/PI-CTRL/namelist.echam b/namelists/echam/6.3.05p2-wiso/PI-CTRL/namelist.echam index 5d7c668dc..342f87303 100644 --- a/namelists/echam/6.3.05p2-wiso/PI-CTRL/namelist.echam +++ b/namelists/echam/6.3.05p2-wiso/PI-CTRL/namelist.echam @@ -61,11 +61,11 @@ / &set_stream stream = 'jsbach' - lpost = 1 + lpost = 0 / &set_stream stream = 'land' - lpost = 1 + lpost = 0 / &set_stream stream = 'veg' diff --git a/namelists/echam/6.3.05p2-wiso/PI-CTRL/namelist.echam.nooutput b/namelists/echam/6.3.05p2-wiso/PI-CTRL/namelist.echam.nooutput new file mode 100644 index 000000000..fcea97e47 --- /dev/null +++ b/namelists/echam/6.3.05p2-wiso/PI-CTRL/namelist.echam.nooutput @@ -0,0 +1,51 @@ +! This is the "no output" variant of namelist.echam. It contains absolutely no +! output, and can be used as a template for testing. +! +! P. Gierz +! Alfred Wegener Institute, Helmholtz Centre for Polar and Marine Research +! July 2021 + +&runctl + dt_start = 2285, 12, 31, 23, 52, 30 + dt_stop = 6699, 12, 31, 23, 52, 30 + putrerun = 12, 'months', 'last', 0 + lfractional_mask = .false. + lresume = .true. + out_datapath = './' + out_expname = 'E280' + rerun_filetype = 4 + delta_time = 450 + putdata = 1, 'years', 'last', 0 + nproma = 8 + lcouple = .true. + getocean = 1, 'days', 'last', 0 + putocean = 1, 'days', 'last', 0 + lcouple_co2 = .true. + default_output = .false. +/ + +&parctl + nproca = 24 + nprocb = 24 +/ + +&submodelctl + lmethox = .true. +/ + +&submdiagctl + vphysc_lpost = .false. +/ + +&radctl + iaero = 3 + io3 = 4 + isolrad = 6 + ich4 = 3 + in2o = 3 + co2vmr = 284.3169860840e-06 + ch4vmr = 808.2490234375e-09 + n2ovmr = 273.0210571289e-09 + yr_perp = 1850 +/ + diff --git a/namelists/echam/6.3.05p2-wiso/PI-CTRL/namelist.echam.yearlyoutput b/namelists/echam/6.3.05p2-wiso/PI-CTRL/namelist.echam.yearlyoutput new file mode 100644 index 000000000..73bb1574e --- /dev/null +++ b/namelists/echam/6.3.05p2-wiso/PI-CTRL/namelist.echam.yearlyoutput @@ -0,0 +1,90 @@ +&runctl + dt_start = 2285, 12, 31, 23, 52, 30 + dt_stop = 6699, 12, 31, 23, 52, 30 + putrerun = 1, 'years', 'last', 0 + lfractional_mask = .false. + lresume = .true. + out_datapath = './' + out_expname = 'E280' + rerun_filetype = 4 + delta_time = 450 + putdata = 1, 'years', 'last', 0 + nproma = 8 + npromar = 8 + lcouple = .true. + getocean = 1, 'days', 'last', 0 + putocean = 1, 'days', 'last', 0 + lcouple_co2 = .true. + default_output = .false. +/ +&wisoctl + lwiso = .false. + lwiso_rerun = .false. + nwiso = 0 +/ +&parctl + nproca = 24 + nprocb = 24 + nprocar = 24 + nprocbr = 24 + +/ +&submodelctl + lmethox = .true. +/ +&submdiagctl + vphysc_lpost = .false. +/ +&mvstreamctl + interval = 1, 'years', 'last', 0 + target = 'spim' + source = 'sp' + variables = 'st:mean', 'svo:mean', 'lsp:mean', 'sd:mean' +/ +&mvstreamctl + interval = 1, 'years', 'last', 0 + target = 'glim' + source = 'gl' + variables = 'xl:mean', 'xi:mean' +/ +&mvstreamctl + interval = 1, 'years', 'last', 0 + target = 'aclcim' + source = 'g3b' + variables = 'aclc:mean' +/ +&set_stream_element + stream = 'aclcim' + name = 'aclc' + code = 162 + lpost = 1 +/ +&set_stream + stream = 'jsbach' + lpost = 0 +/ +&set_stream + stream = 'land' + lpost = 0 +/ +&set_stream + stream = 'veg' + lpost = 0 +/ +&set_stream + stream = 'yasso' + lpost = 0 +/ +&radctl + iaero = 3 + io3 = 4 + isolrad = 6 + ich4 = 3 + in2o = 3 + co2vmr = 284.3169860840e-06 + ch4vmr = 808.2490234375e-09 + n2ovmr = 273.0210571289e-09 + yr_perp = 1850 + lrad_async = .true. + lrestart_from_old = .false. +/ diff --git a/namelists/fesom2/2.0/awicm3/DART/namelist.config b/namelists/fesom2/2.0/awicm3/DART/namelist.config index b283fdd8d..ca42ecb72 100755 --- a/namelists/fesom2/2.0/awicm3/DART/namelist.config +++ b/namelists/fesom2/2.0/awicm3/DART/namelist.config @@ -30,7 +30,7 @@ logfile_outfreq=960 !in logfile info. output frequency, # steps &ale_def which_ALE='zstar' ! 'linfs','zlevel', 'zstar' -use_partial_cell=.true. +use_partial_cell=.false. / &geometry diff --git a/namelists/fesom2/2.0/awicm3/DART/namelist.io b/namelists/fesom2/2.0/awicm3/DART/namelist.io index 341614c52..6c834f1b7 100644 --- a/namelists/fesom2/2.0/awicm3/DART/namelist.io +++ b/namelists/fesom2/2.0/awicm3/DART/namelist.io @@ -2,7 +2,7 @@ ldiag_solver =.false. lcurt_stress_surf=.false. ldiag_curl_vel3 =.false. -ldiag_energy =.false. +ldiag_energy =.true. ldiag_salt3D =.false. ldiag_dMOC =.false. ldiag_DVD =.false. @@ -19,26 +19,30 @@ io_listsize=100 !number of streams to allocate. shallbe large or equal to the nu ! 'otracers' - all other tracers if applicable ! for 'dMOC' to work ldiag_dMOC must be .true. otherwise no output &nml_list -io_list = 'sst ',1, 'm', 4, - 'sss ',1, 'm', 4, - 'ssh ',1, 'm', 4, - 'uice ',1, 'm', 4, - 'vice ',1, 'm', 4, - 'a_ice ',1, 'm', 4, - 'm_ice ',1, 'm', 4, - 'm_snow ',1, 'm', 4, +io_list = 'sst ',90,'s', 4, + 'sss ',1, 'd', 4, + 'ssh ',1, 'd', 4, + 'uice ',1, 'd', 4, + 'vice ',1, 'd', 4, + 'a_ice ',1, 'd', 4, + 'm_ice ',1, 'd', 4, + 'm_snow ',1, 'd', 4, 'MLD1 ',1, 'm', 4, 'MLD2 ',1, 'm', 4, 'tx_sur ',1, 'm', 4, 'ty_sur ',1, 'm', 4, - 'temp ',1, 'y', 4, - 'salt ',1, 'y', 4, - 'N2 ',1, 'y', 4, - 'Kv ',1, 'y', 4, - 'u ',1, 'y', 4, - 'v ',1, 'y', 4, - 'w ',1, 'y', 4, - 'Av ',1, 'y', 4, + 'temp ',1, 'm', 4, + 'salt ',1, 'm', 4, + 'N2 ',1, 'm', 4, + 'Kv ',1, 'm', 4, + 'u ',1, 'm', 4, + 'v ',1, 'm', 4, + 'w ',1, 'm', 4, + 'temp1-31 ',1, 'd', 4, + 'salt1-31 ',1, 'd', 4, + 'u1-31 ',1, 'd', 4, + 'v1-31 ',1, 'd', 4, + 'w1-31 ',1, 'd', 4, 'bolus_u ',1, 'y', 4, 'bolus_v ',1, 'y', 4, 'bolus_w ',1, 'y', 4, diff --git a/namelists/fesom2/2.0/awicm3/DART/namelist.oce b/namelists/fesom2/2.0/awicm3/DART/namelist.oce index 1874bf363..be283831e 100644 --- a/namelists/fesom2/2.0/awicm3/DART/namelist.oce +++ b/namelists/fesom2/2.0/awicm3/DART/namelist.oce @@ -1,85 +1,75 @@ &oce_dyn -C_d=0.0025 ! Bottom drag, nondimensional -gamma0=0.001 ! [m/s], backgroung viscosity= gamma0*len, it should be as small as possible (keep it < 0.01 m/s). -gamma1=0.05 !0.0285 ! [nodim], for computation of the flow aware viscosity -gamma2=0.5 !0.285 ! [s/m], is only used in easy backscatter option -Div_c=.5 ! the strength of the modified Leith viscosity, nondimensional, 0.3 -- 1.0 -Leith_c=.05 ! the strength of the Leith viscosity -visc_option=5 ! 1=Harmonic Leith parameterization; - ! 2=Laplacian+Leith+biharmonic background - ! 3=Biharmonic Leith parameterization - ! 4=Biharmonic flow aware - ! 5=Kinematic (easy) Backscatter - ! 6=Biharmonic flow aware (viscosity depends on velocity Laplacian) - ! 7=Biharmonic flow aware (viscosity depends on velocity differences) - ! 8=Dynamic Backscatter -easy_bs_return= 0.9 !1.5 ! coefficient for returned sub-gridscale energy, to be used with visc_option=5 (easy backscatter) -A_ver= 1.e-4 ! Vertical viscosity, m^2/s -scale_area=5.8e9 ! Visc. and diffus. are for an element with scale_area -mom_adv=2 ! 1=vector CV, p1 vel, 2=sca. CV, 3=vector inv. -free_slip=.false. ! Switch on free slip -i_vert_visc=.true. -w_split=.true. -w_max_cfl=0.8 ! maximum allowed CFL criteria in vertical (0.5 < w_max_cfl < 1.) ! in older FESOM it used to be w_exp_max=1.e-3 -SPP=.false. ! Salt Plume Parameterization -Fer_GM=.false. !.true. ! to swith on/off GM after Ferrari et al. 2010 -K_GM_max = 3000.0 ! max. GM thickness diffusivity (m2/s) -K_GM_min = 2.0 ! max. GM thickness diffusivity (m2/s) -K_GM_bvref = 2 ! def of bvref in ferreira scaling 0=srf,1=bot mld,2=mean over mld,3=weighted mean over mld -K_GM_rampmax = 40.0 ! Resol >K_GM_rampmax[km] GM on -K_GM_rampmin = 30.0 ! Resol TB04 mixing -momix_lat = -50.0 ! latitidinal treshhold for TB04, =90 --> global -momix_kv = 0.01 ! PP/KPP, mixing coefficient within MO length -use_instabmix = .true. ! enhance convection in case of instable stratification -instabmix_kv = 0.1 -use_windmix = .false. ! enhance mixing trough wind only for PP mixing (for stability) -windmix_kv = 1.e-3 -windmix_nl = 2 - -diff_sh_limit=5.0e-3 ! for KPP, max diff due to shear instability -Kv0_const=.false. -double_diffusion=.false. ! for KPP,dd switch -K_ver=1.0e-5 -K_hor=0. !3000. -surf_relax_T=0.0 -surf_relax_S=0. !1.929e-06 ! 50m/300days 6.43e-07! m/s 10./(180.*86400.) -balance_salt_water =.true. ! balance virtual-salt or freshwater flux or not -clim_relax=0.0 ! 1/s, geometrical information has to be supplied -ref_sss_local=.true. -ref_sss=34. -i_vert_diff =.true. ! true -tra_adv_hor ='MFCT' !'MUSCL', 'UPW1' -tra_adv_ver ='QR4C' !'QR4C', 'CDIFF', 'UPW1' -tra_adv_lim ='FCT' !'FCT', 'NONE' (default) -tra_adv_ph = 1. ! a parameter to be used in horizontal advection (for MUSCL it is the fraction of fourth-order contribution in the solution) -tra_adv_pv = 1. ! a parameter to be used in horizontal advection (for QR4C it is the fraction of fourth-order contribution in the solution) -! Implemented trassers (3d restoring): -! 301 - Fram strait. -! 302 - Bering Strait -! 303 - BSO -num_tracers=2 !number of all tracers -tracer_ID =0,1 !their IDs (0 and 1 are reserved for temperature and salinity) +&oce_tra + use_momix = .true. + momix_lat = -50.0 + momix_kv = 0.01 + use_instabmix = .true. + instabmix_kv = 0.1 + use_windmix = .false. + windmix_kv = 0.001 + windmix_nl = 2 + diff_sh_limit = 0.005 + kv0_const = .true. + double_diffusion = .false. + k_ver = 1e-05 + k_hor = 0. + surf_relax_t = 0.0 + surf_relax_s = 0 + balance_salt_water = .true. + clim_relax = 0.0 + ref_sss_local = .true. + ref_sss = 34.0 + i_vert_diff = .true. + tra_adv_hor = 'MFCT' + tra_adv_ver = 'QR4C' + tra_adv_lim = 'FCT' + tra_adv_ph = 0.0 + tra_adv_pv = 1.0 + gamma0_tra = 0.0005 + gamma1_tra = 0.0125 + gamma2_tra = 0.0 + num_tracers = 2 + tracer_id = 0, 1 / -&oce_init3d ! initial conditions for tracers -n_ic3d = 2 ! number of tracers to initialize -idlist = 1, 0 ! their IDs (0 is temperature, 1 is salinity, etc.). The reading order is defined here! -filelist = 'phc3.0_winter.nc', 'phc3.0_winter.nc' ! list of files in ClimateDataPath to read (one file per tracer), same order as idlist -varlist = 'salt', 'temp' ! variables to read from specified files -t_insitu = .true. ! if T is insitu it will be converted to potential after reading it +&oce_init3d + n_ic3d = 2 + idlist = 1, 0 + filelist = 'phc3.0_winter.nc', 'phc3.0_winter.nc' + varlist = 'salt', 'temp' + t_insitu = .true. / diff --git a/namelists/fesom2/2.0/awicm3/SO3/namelist.config b/namelists/fesom2/2.0/awicm3/SO3/namelist.config new file mode 100644 index 000000000..6a02532a2 --- /dev/null +++ b/namelists/fesom2/2.0/awicm3/SO3/namelist.config @@ -0,0 +1,69 @@ +! This is the namelist file for model general configuration + +&modelname +runid='fesom' +/ + +×tep +step_per_day=2160 +run_length=1 +run_length_unit='m' ! y, m, d, s +/ + +&clockinit ! the model starts at +timenew=0.0 +daynew=1 +yearnew=1948 +/ + +&paths +MeshPath='/work/ab0995/a270067/fesom2/jane/mesh/' +ClimateDataPath='/work/ba1254/a270067/input/fesom2/hydrography/' +ResultPath='/scratch/a/a270067/jane_4/' +/ + +&restart_log +restart_length=1 !only required for d,h,s cases, y, m take 1 +restart_length_unit='y' !output period: y, d, h, s +logfile_outfreq=270 !in logfile info. output frequency, # steps +/ + +&ale_def +which_ALE='linfs' ! 'linfs','zlevel', 'zstar' +use_partial_cell=.false. +/ + +&initialization +OceClimaDataName='Winter_PHC3_ts.out' !which T/S data to initial. ocean + !'Winter_PHC3_ts.out' + !'Annual_PHC3_ts.out' +use_prepared_init_ice=.false. !how to init. ice; runid.initial_ice.nc +/ + +&geometry +cartesian=.false. +fplane=.false. +cyclic_length=360 ![degree] +rotated_grid=.true. !option only valid for coupled model case now +force_rotation=.true. +alphaEuler=50. ![degree] Euler angles, convention: +betaEuler=15. ![degree] first around z, then around new x, +gammaEuler=-90. ![degree] then around new z. +/ + +&calendar +include_fleapyear=.true. !.false. +/ + +&run_config +use_ice=.true. ! ocean+ice +use_cavity=.false. ! +use_cavity_partial_cell=.false. +use_floatice = .false. +use_sw_pene=.true. +/ + +&machine +n_levels=1 +n_part=25600 !10800 !3600 !14400 !2520 !1152 ! number of partitions on each hierarchy level +/ diff --git a/namelists/fesom2/2.0/awicm3/SO3/namelist.cvmix b/namelists/fesom2/2.0/awicm3/SO3/namelist.cvmix new file mode 100644 index 000000000..00754cca1 --- /dev/null +++ b/namelists/fesom2/2.0/awicm3/SO3/namelist.cvmix @@ -0,0 +1,72 @@ +! namelist for Turbulent Kinetic Energy (TKE) +¶m_tke +tke_c_k = 0.1 +tke_c_eps = 0.7 +tke_alpha = 30.0 +tke_mxl_min = 1.0e-8 +tke_kappaM_min = 0.0 +tke_kappaM_max = 100.0 +tke_cd = 3.75 ! for Dirichlet boundary conditions +!tke_cd = 1.0 ! for Neumann boundary conditions +tke_surf_min = 1.0e-4 +tke_min = 1.0e-6 +! tke_mxl_choice ... Can only be 1 or 2, choice of calculation of mixing +! length; currently only Blanke, B., P. Delecluse option is implemented +tke_mxl_choice = 2 +/ + +! namelist for IDEMIX +¶m_idemix +idemix_tau_v = 86400.0 ! time scale for vertical symmetrisation (sec) +idemix_tau_h = 1296000.0 ! time scale for horizontal symmetrisation +idemix_gamma = 1.570 ! constant of order one derived from the shape of the spectrum in m space (dimensionless) +idemix_jstar = 10.0 ! spectral bandwidth in modes (dimensionless) +idemix_mu0 = 1.33333333 ! dissipation parameter (dimensionless) +idemix_sforcusage = 0.2 +idemix_n_hor_iwe_prop_iter = 5 ! iterations for contribution from horiz. wave propagation +idemix_surforc_file = '/work/ollie/clidyn/forcing/IDEMIX/fourier_smooth_2005_cfsr_inert_rgrid.nc' +idemix_botforc_file = '/work/ollie/clidyn/forcing/IDEMIX/tidal_energy_gx1v6_20090205_rgrid.nc' +/ + +! namelist for PP +¶m_pp +pp_use_fesompp = .true. ! if true use fesom flavor off PP if false use original PP of Pacanowski & Philander +pp_Av0 = 0.01 ! mixing coeff. for PP +pp_alpha = 5.0 ! alpha param eq. (1) in Pacanowski and Philander 1981 +pp_exp = 2.0 ! n param eq. (1) in Pacanowski and Philander 1981 +pp_Avbckg = 1.0e-4 ! const. pp background viscosity +pp_Kvbckg = 1.0e-5 ! const. pp background diffusivity +pp_use_nonconstKvb = .true. ! use lat and depth dependent background diffusivity +/ + +! namelist for KPP +¶m_kpp +kpp_use_fesomkpp = .false. ! if true use cvmix MOM5 like kpp if false use cvmix MOM6 like kpp +kpp_use_enhanceKv = .true. ! If true, add enhanced diffusivity at base of boundary layer +kpp_use_compEkman = .true. ! If true, compute Ekman depth limit for OBLdepth +kpp_use_monob = .true. ! If true, compute Monin-Obukhov limit for OBLdepth +kpp_interptype_ri = "linear" ! Type of interpolation in determining OBL depth: linear,quadratic,cubic +kpp_interptype_atobl= "LMD94" ! Type of interpolation of visc and diff at obl depth: linear,quadratic,cubic,LMD94 +kpp_matchtechc = "ParabolicNonLocal" ! Setting diffusivity and NLT profile functions:SimpleShapes, MatchGradient, MatchBoth, ParabolicNonLocal +kpp_internalmix = "KPP" ! Ri-number dependet mixing scheme below the OBL: 'PP' or 'KPP' +kpp_reduce_tauuice = .false. ! If True, reduce the wind stress (ustar) under sea ice. +kpp_Av0 = 5.0e-3 ! leading coefficient of shear mixing formula, units: m^2/s: default= 5e-3 +kpp_Kv0 = 5.0e-3 +kpp_Ri0 = 0.7 ! critical Richardson number value, units: unitless (0.7 in LMD94) +kpp_pp_Av0 = 0.01 ! Parameter in case of PP mixing below the OBL +kpp_use_nonconstKvb= .true. ! If True use non constant background diffusivity of Qiang from FESOM1.4 +kpp_Avbckg = 1.0e-4 ! Values for const. background viscosity and diffusivity +kpp_Kvbckg = 1.0e-5 +/ + +! namelist for TIDAL +¶m_tidal +tidal_mixscheme = "Simmons" +tidal_efficiency = 0.2 ! units: unitless (fraction); (Gamma in Simmons et al.) +tidal_vert_decayscale= 500.0 ! units: m; zeta in Simmons et al. (used to compute the vertical deposition function) +tidal_max_coeff = 50e-4 ! units: m^2/s; largest acceptable value for diffusivity +tidal_lcl_mixfrac = 0.33 !tidal dissipation efficiency (q in Simmons et al.), i.e. fraction of energy that dissipates locally +tidal_depth_cutoff = 0.0 !depth of the shallowest column where tidal mixing is computed (positive below surface) +tidal_botforc_file = '/work/ollie/pscholz/FORCING/IDEMIX/tidal_energy_gx1v6_20090205_rgrid.nc' +/ + diff --git a/namelists/fesom2/2.0/awicm3/SO3/namelist.dyn b/namelists/fesom2/2.0/awicm3/SO3/namelist.dyn new file mode 100644 index 000000000..b132c25bf --- /dev/null +++ b/namelists/fesom2/2.0/awicm3/SO3/namelist.dyn @@ -0,0 +1,23 @@ +&dynamics_visc +visc_gamma0 = 0.0199 ! [m/s], backgroung viscosity= gamma0*len, it should be as small a s possible (keep it < 0.01 m/s). +visc_gamma1 = 0.37 ! [nodim], for computation of the flow aware viscosity +visc_gamma2 = 0.0285 ! [s/m], is only used in easy backscatter option +visc_easybsreturn= 0.3 + +opt_visc = 5 +! 5=Kinematic (easy) Backscatter +! 6=Biharmonic flow aware (viscosity depends on velocity Laplacian) +! 7=Biharmonic flow aware (viscosity depends on velocity differences) +! 8=Dynamic Backscatter + +use_ivertvisc= .true. +/ + +&dynamics_general +momadv_opt = 2 ! option for momentum advection in moment only =2 +use_freeslip = .false. ! Switch on free slip +use_wsplit = .true. ! Switch for implicite/explicte splitting of vert. velocity +wsplit_maxcfl= 0.1 ! maximum allowed CFL criteria in vertical (0.5 < w_max_cfl < 1.) + ! in older FESOM it used to be w_exp_max=1.e-3 +/ + diff --git a/namelists/fesom2/2.0/awicm3/SO3/namelist.forcing b/namelists/fesom2/2.0/awicm3/SO3/namelist.forcing new file mode 100644 index 000000000..36e1474d2 --- /dev/null +++ b/namelists/fesom2/2.0/awicm3/SO3/namelist.forcing @@ -0,0 +1,58 @@ +! This is the namelist file for forcing + +&forcing_exchange_coeff +Ce_atm_oce=1.75e-3 ! exchange coeff. of latent heat over open water +Ch_atm_oce=1.75e-3 ! exchange coeff. of sensible heat over open water +Cd_atm_oce=1.0e-3 ! drag coefficient between atmosphere and water +Ce_atm_ice=1.75e-3 ! exchange coeff. of latent heat over ice +Ch_atm_ice=1.75e-3 ! exchange coeff. of sensible heat over ice +Cd_atm_ice=1.2e-3 ! drag coefficient between atmosphere and ice +Swind =0.0 ! parameterization for coupled current feedback +/ + +&forcing_bulk +AOMIP_drag_coeff=.false. +ncar_bulk_formulae=.true. +ncar_bulk_z_wind=10.0 ! height at which wind forcing is located (CORE:10m, JRA:2m) +ncar_bulk_z_tair=2.0 ! height at which temp forcing is located (CORE:10m, JRA:2m) +ncar_bulk_z_shum=2.0 ! height at which humi forcing is located (CORE:10m, JRA:2m) + +/ + +&land_ice +use_landice_water=.false. +landice_start_mon=5 +landice_end_mon=10 +/ + +&nam_sbc + nm_xwind_file = '/work/ba1254/a270067/era5/forcing/diffuse/u.' ! name of file with winds, if nm_sbc=2 + nm_ywind_file = '/work/ba1254/a270067/era5/forcing/diffuse/v.' ! name of file with winds, if nm_sbc=2 + nm_humi_file = '/work/ba1254/a270067/era5/forcing/diffuse/q.' ! name of file with humidity + nm_qsr_file = '/work/ba1254/a270067/era5/forcing/diffuse/ssrd.' ! name of file with solar heat + nm_qlw_file = '/work/ba1254/a270067/era5/forcing/diffuse/strd.' ! name of file with Long wave + nm_tair_file = '/work/ba1254/a270067/era5/forcing/diffuse/t2m.' ! name of file with 2m air temperature + nm_prec_file = '/work/ba1254/a270067/era5/forcing/diffuse/rf.' ! name of file with total precipitation + nm_snow_file = '/work/ba1254/a270067/era5/forcing/diffuse/sf.' ! name of file with snow precipitation + nm_mslp_file = '/work/ba1254/a270067/era5/forcing/diffuse/sp.' ! air_pressure_at_sea_level + nm_xwind_var = 'u' ! name of variable in file with wind + nm_ywind_var = 'v' ! name of variable in file with wind + nm_humi_var = 'q' ! name of variable in file with humidity + nm_qsr_var = 'ssrd' ! name of variable in file with solar heat + nm_qlw_var = 'strd' ! name of variable in file with Long wave + nm_tair_var = 't2m' ! name of variable in file with 2m air temperature + nm_prec_var = 'rf' ! name of variable in file with total precipitation + nm_snow_var = 'sf' ! name of variable in file with total precipitation + nm_mslp_var = 'sp' ! name of variable in file with air_pressure_at_sea_level + nm_nc_iyear = 1900 + nm_nc_imm = 1 ! initial month of time axis in netCDF + nm_nc_idd = 1 ! initial day of time axis in netCDF + nm_nc_freq = 1 ! data points per day (i.e. 86400 if the time axis is in seconds) + nm_nc_tmid = 0 ! 1 if the time stamps are given at the mid points of the netcdf file, 0 otherwise (i.e. 1 in CORE1, CORE2; 0 in JRA55) + l_xwind=.true., l_ywind=.true., l_humi=.true., l_qsr=.true., l_qlw=.true., l_tair=.true., l_prec=.true., l_mslp=.false., l_cloud=.false., l_snow=.true. + nm_runoff_file ='/pool/data/AWICM/FESOM2/FORCING/CORE2/runoff.nc' + runoff_data_source ='CORE2' !Dai09, CORE2, JRA55 + !runoff_climatology =.true. ???? + nm_sss_data_file ='/pool/data/AWICM/FESOM2/FORCING/CORE2/PHC2_salx.nc' + sss_data_source ='CORE2' +/ diff --git a/namelists/fesom2/2.0/awicm3/SO3/namelist.ice b/namelists/fesom2/2.0/awicm3/SO3/namelist.ice new file mode 100644 index 000000000..bcd86f145 --- /dev/null +++ b/namelists/fesom2/2.0/awicm3/SO3/namelist.ice @@ -0,0 +1,31 @@ +! Ice namelist +&ice_dyn +whichEVP=0 ! 0=standart; 1=mEVP; 2=aEVP +Pstar=30000.0 ! [N/m^2] +ellipse=2.0 +c_pressure=20.0 ! ice concentration parameter used in ice strength computation +delta_min=1.0e-11 ! [s^(-1)] +evp_rheol_steps=120 ! number of EVP subcycles +alpha_evp=250 ! constant that control numerical stability of mEVP. Adjust with resolution. +beta_evp=250 ! constant that control numerical stability of mEVP. Adjust with resolution. +c_aevp=0.15 ! a tuning constant in aEVP. Adjust with resolution. +Cd_oce_ice=0.0055 ! drag coef. oce - ice +ice_gamma_fct=0.5 ! smoothing parameter +ice_diff=0.0 ! diffusion to stabilize +theta_io=0.0 ! rotation angle +ice_ave_steps=1 ! ice step=ice_ave_steps*oce_step +/ + +&ice_therm +Sice=4.0 ! Ice salinity 3.2--5.0 ppt. +h0=.5 ! Lead closing parameter [m] +emiss_ice=0.97 ! Emissivity of Snow/Ice, +emiss_wat=0.97 ! Emissivity of open water +albsn=0.81 ! Albedo: frozen snow +albsnm=0.77 ! melting snow +albi=0.7 ! frozen ice +albim=0.68 ! melting ice +albw=0.1 ! open water +con=2.1656 ! Thermal conductivities: ice; W/m/K +consn=0.31 ! snow +/ diff --git a/namelists/fesom2/2.0/awicm3/SO3/namelist.icepack b/namelists/fesom2/2.0/awicm3/SO3/namelist.icepack new file mode 100644 index 000000000..ed0dd4d4c --- /dev/null +++ b/namelists/fesom2/2.0/awicm3/SO3/namelist.icepack @@ -0,0 +1,146 @@ +&env_nml ! In the original release these variables are defined in the icepack.settings + nicecat = 5 ! number of ice thickness categories + nfsdcat = 1 ! number of floe size categories + nicelyr = 4 ! number of vertical layers in the ice + nsnwlyr = 4 ! number of vertical layers in the snow + ntraero = 0 ! number of aerosol tracers (up to max_aero in ice_domain_size.F90) + trzaero = 0 ! number of z aerosol tracers (up to max_aero = 6) + tralg = 0 ! number of algal tracers (up to max_algae = 3) + trdoc = 0 ! number of dissolve organic carbon (up to max_doc = 3) + trdic = 0 ! number of dissolve inorganic carbon (up to max_dic = 1) + trdon = 0 ! number of dissolve organic nitrogen (up to max_don = 1) + trfed = 0 ! number of dissolved iron tracers (up to max_fe = 2) + trfep = 0 ! number of particulate iron tracers (up to max_fe = 2) + nbgclyr = 0 ! number of zbgc layers + trbgcz = 0 ! set to 1 for zbgc tracers (needs TRBGCS = 0 and TRBRI = 1) + trzs = 0 ! set to 1 for zsalinity tracer (needs TRBRI = 1) + trbri = 0 ! set to 1 for brine height tracer + trage = 0 ! set to 1 for ice age tracer + trfy = 0 ! set to 1 for first-year ice area tracer + trlvl = 0 ! set to 1 for level and deformed ice tracers + trpnd = 0 ! set to 1 for melt pond tracers + trbgcs = 0 ! set to 1 for skeletal layer tracers (needs TRBGCZ = 0) + ndtd = 1 ! dynamic time steps per thermodynamic time step +/ + +&grid_nml + kcatbound = 1 +/ + +&tracer_nml + tr_iage = .false. + tr_FY = .false. + tr_lvl = .false. + tr_pond_cesm = .false. + tr_pond_topo = .false. + tr_pond_lvl = .false. + tr_aero = .false. + tr_fsd = .false. +/ + +&thermo_nml + kitd = 1 + ktherm = 1 + conduct = 'bubbly' + a_rapid_mode = 0.5e-3 + Rac_rapid_mode = 10.0 + aspect_rapid_mode = 1.0 + dSdt_slow_mode = -5.0e-8 + phi_c_slow_mode = 0.05 + phi_i_mushy = 0.85 + ksno = 0.3 +/ + +&shortwave_nml + shortwave = 'ccsm3' + albedo_type = 'ccsm3' + albicev = 0.78 + albicei = 0.36 + albsnowv = 0.98 + albsnowi = 0.70 + albocn = 0.1 + ahmax = 0.3 + R_ice = 0. + R_pnd = 0. + R_snw = 1.5 + dT_mlt = 1.5 + rsnw_mlt = 1500. + kalg = 0.6 +/ + +&ponds_nml + hp1 = 0.01 + hs0 = 0. + hs1 = 0.03 + dpscale = 1.e-3 + frzpnd = 'hlid' + rfracmin = 0.15 + rfracmax = 1. + pndaspect = 0.8 +/ + +&forcing_nml + formdrag = .false. + atmbndy = 'default' + calc_strair = .true. + calc_Tsfc = .true. + highfreq = .false. + natmiter = 5 + ustar_min = 0.0005 + emissivity = 0.95 + fbot_xfer_type = 'constant' + update_ocn_f = .false. + l_mpond_fresh = .false. + tfrz_option = 'linear_salt' + oceanmixed_ice = .true. + wave_spec_type = 'none' +/ + +&dynamics_nml + kstrength = 1 + krdg_partic = 1 + krdg_redist = 1 + mu_rdg = 3 + Cf = 17. + P_star = 27000. + C_star = 20. +/ + +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!! Icepack output namelist !!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +&nml_list_icepack +io_list_icepack = 'aicen ',1, 'm', 4, ! Sea ice concentration + 'vicen ',1, 'm', 4, ! Volume per unit area of ice + 'vsnon ',1, 'm', 4, ! Volume per unit area of snow + !'Tsfcn ',1, 'm', 4, ! Sea ice surf. temperature + !'iagen ',1, 'm', 4, ! Sea ice age + !'FYn ',1, 'm', 4, ! First year ice + !'lvln ',1, 'm', 4, ! Ridged sea ice area and volume + !'pond_cesmn',1, 'm', 4, ! Melt ponds area, volume and refrozen lid thickness + !'pond_topon',1, 'm', 4, ! Melt ponds area, volume and refrozen lid thickness + !'pond_lvln ',1, 'm', 4, ! Melt ponds area, volume and refrozen lid thickness + !'brinen ',1, 'm', 4, ! Volume fraction of ice with dynamic salt + !'qicen ',1, 'm', 4, ! Sea ice enthalpy + !'sicen ',1, 'm', 4, ! Sea ice salinity + !'qsnon ',1, 'm', 4, ! Snow enthalpy + ! Average over thicknes classes + !'aice ',1, 'm', 4, ! Sea ice concentration + !'vice ',1, 'm', 4, ! Volume per unit area of ice + !'vsno ',1, 'm', 4, ! Volume per unit area of snow + !'Tsfc ',1, 'm', 4, ! Sea ice surf. temperature + !'iage ',1, 'm', 4, ! Sea ice age + !'FY ',1, 'm', 4, ! First year ice + !'lvl ',1, 'm', 4, ! Ridged sea ice area and volume + !'pond_cesm ',1, 'm', 4, ! Melt ponds area, volume and refrozen lid thickness + !'pond_topo ',1, 'm', 4, ! Melt ponds area, volume and refrozen lid thickness + !'pond_lvl ',1, 'm', 4, ! Melt ponds area, volume and refrozen lid thickness + !'brine ',1, 'm', 4, ! Volume fraction of ice with dynamic salt + !'qice ',1, 'm', 4, ! Sea ice enthalpy + !'sice ',1, 'm', 4, ! Sea ice salinity + !'qsno ',1, 'm', 4, ! Snow enthalpy + ! Other variables + !'uvel ',1, 'm', 4, ! x-component of sea ice velocity + !'vvel ',1, 'm', 4, ! y-component of sea ice velocity +/ diff --git a/namelists/fesom2/2.0/awicm3/SO3/namelist.io b/namelists/fesom2/2.0/awicm3/SO3/namelist.io new file mode 100644 index 000000000..12af6e25c --- /dev/null +++ b/namelists/fesom2/2.0/awicm3/SO3/namelist.io @@ -0,0 +1,43 @@ +&diag_list +ldiag_solver =.false. +lcurt_stress_surf=.false. +ldiag_curl_vel3 =.false. +ldiag_energy =.false. +ldiag_salt3D =.false. +ldiag_dMOC =.false. +ldiag_DVD =.false. +ldiag_forc =.false. +/ + +&nml_general +io_listsize =100 !number of streams to allocate. shallbe large or equal to the number of streams in &nml_list +vec_autorotate =.false. +/ + +! for sea ice related variables use_ice should be true, otherewise there will be no output +! for 'curl_surf' to work lcurt_stress_surf must be .true. otherwise no output +! for 'fer_C', 'bolus_u', 'bolus_v', 'bolus_w', 'fer_K' to work Fer_GM must be .true. otherwise no output +! 'otracers' - all other tracers if applicable +! for 'dMOC' to work ldiag_dMOC must be .true. otherwise no output +&nml_list +io_list = 'sst ',1, 'd', 4, + 'sss ',1, 'd', 4, + 'ssh ',1, 'd', 4, + 'uice ',1, 'd', 4, + 'vice ',1, 'd', 4, + 'a_ice ',1, 'd', 4, + 'm_ice ',1, 'd', 4, + 't050 ',1, 'd', 4, + 't100 ',1, 'd', 4, + 's050 ',1, 'd', 4, + 's100 ',1, 'd', 4, + 'u050 ',1, 'd', 4, + 'u100 ',1, 'd', 4, + 'v050 ',1, 'd', 4, + 'v100 ',1, 'd', 4, + 'm_snow ',1, 'm', 4, + 'MLD1 ',1, 'm', 4, + 'MLD2 ',1, 'm', 4, + 'tx_sur ',1, 'm', 4, + 'ty_sur ',1, 'm', 4, +/ diff --git a/namelists/fesom2/2.0/awicm3/SO3/namelist.oce b/namelists/fesom2/2.0/awicm3/SO3/namelist.oce new file mode 100644 index 000000000..cec7f4b9e --- /dev/null +++ b/namelists/fesom2/2.0/awicm3/SO3/namelist.oce @@ -0,0 +1,26 @@ +! The namelist file for the finite-volume ocean model + +&oce_dyn +C_d=0.0025 ! Bottom drag, nondimensional +A_ver= 1.e-4 ! Vertical viscosity, m^2/s +scale_area=5.8e9 ! Visc. and diffus. are for an element with scale_area +SPP=.true. !.false. ! Salt Plume Parameterization +Fer_GM=.true. ! to swith on/off GM after Ferrari et al. 2010 +K_GM_max = 500. !1000.0 ! max. GM thickness diffusivity (m2/s) +K_GM_min = 2.0 ! max. GM thickness diffusivity (m2/s) +K_GM_bvref = 2 ! def of bvref in ferreira scaling 0=srf,1=bot mld,2=mean over mld,3=weighted mean over mld +K_GM_rampmax = -1.0 ! Resol >K_GM_rampmax[km] GM on +K_GM_rampmin = -1.0 ! Resol TB04 mixing +momix_lat = 90.000 !90.00 ! latitidinal treshhold for TB04, =90 --> global +momix_kv = 0.01 ! PP/KPP, mixing coefficient within MO length +use_instabmix = .true. ! enhance convection in case of instable stratification +instabmix_kv = 0.1 +use_windmix = .false. ! enhance mixing trough wind only for PP mixing (for stability) +windmix_kv = 1.e-3 +windmix_nl = 2 +diff_sh_limit=5.0e-3 ! for KPP, max diff due to shear instability +Kv0_const=.true. +double_diffusion=.false. ! for KPP,dd switch +K_ver=1.0e-5 +K_hor=0. !100. !3000. +surf_relax_T=0.0 +surf_relax_S=1.929e-06 ! 50m/300days 6.43e-07! m/s 10./(180.*86400.) +balance_salt_water =.true. ! balance virtual-salt or freshwater flux or not +clim_relax=0.0 ! 1/s, geometrical information has to be supplied +ref_sss_local=.true. +ref_sss=34. +/ diff --git a/namelists/fesom2/2.0/awicm3/frontiers/namelist.io b/namelists/fesom2/2.0/awicm3/frontiers/namelist.io index 2781319a0..2c328e47c 100644 --- a/namelists/fesom2/2.0/awicm3/frontiers/namelist.io +++ b/namelists/fesom2/2.0/awicm3/frontiers/namelist.io @@ -9,6 +9,10 @@ ldiag_DVD =.false. ldiag_forc =.true. / +&nml_output_settings + keep_nth_level = 1 +/ + &nml_listsize io_listsize=100 !number of streams to allocate. shallbe large or equal to the number of streams in &nml_list / diff --git a/namelists/fesom2/2.0/awicm3/jane/namelist.config b/namelists/fesom2/2.0/awicm3/jane/namelist.config new file mode 100644 index 000000000..6a02532a2 --- /dev/null +++ b/namelists/fesom2/2.0/awicm3/jane/namelist.config @@ -0,0 +1,69 @@ +! This is the namelist file for model general configuration + +&modelname +runid='fesom' +/ + +×tep +step_per_day=2160 +run_length=1 +run_length_unit='m' ! y, m, d, s +/ + +&clockinit ! the model starts at +timenew=0.0 +daynew=1 +yearnew=1948 +/ + +&paths +MeshPath='/work/ab0995/a270067/fesom2/jane/mesh/' +ClimateDataPath='/work/ba1254/a270067/input/fesom2/hydrography/' +ResultPath='/scratch/a/a270067/jane_4/' +/ + +&restart_log +restart_length=1 !only required for d,h,s cases, y, m take 1 +restart_length_unit='y' !output period: y, d, h, s +logfile_outfreq=270 !in logfile info. output frequency, # steps +/ + +&ale_def +which_ALE='linfs' ! 'linfs','zlevel', 'zstar' +use_partial_cell=.false. +/ + +&initialization +OceClimaDataName='Winter_PHC3_ts.out' !which T/S data to initial. ocean + !'Winter_PHC3_ts.out' + !'Annual_PHC3_ts.out' +use_prepared_init_ice=.false. !how to init. ice; runid.initial_ice.nc +/ + +&geometry +cartesian=.false. +fplane=.false. +cyclic_length=360 ![degree] +rotated_grid=.true. !option only valid for coupled model case now +force_rotation=.true. +alphaEuler=50. ![degree] Euler angles, convention: +betaEuler=15. ![degree] first around z, then around new x, +gammaEuler=-90. ![degree] then around new z. +/ + +&calendar +include_fleapyear=.true. !.false. +/ + +&run_config +use_ice=.true. ! ocean+ice +use_cavity=.false. ! +use_cavity_partial_cell=.false. +use_floatice = .false. +use_sw_pene=.true. +/ + +&machine +n_levels=1 +n_part=25600 !10800 !3600 !14400 !2520 !1152 ! number of partitions on each hierarchy level +/ diff --git a/namelists/fesom2/2.0/awicm3/jane/namelist.cvmix b/namelists/fesom2/2.0/awicm3/jane/namelist.cvmix new file mode 100644 index 000000000..00754cca1 --- /dev/null +++ b/namelists/fesom2/2.0/awicm3/jane/namelist.cvmix @@ -0,0 +1,72 @@ +! namelist for Turbulent Kinetic Energy (TKE) +¶m_tke +tke_c_k = 0.1 +tke_c_eps = 0.7 +tke_alpha = 30.0 +tke_mxl_min = 1.0e-8 +tke_kappaM_min = 0.0 +tke_kappaM_max = 100.0 +tke_cd = 3.75 ! for Dirichlet boundary conditions +!tke_cd = 1.0 ! for Neumann boundary conditions +tke_surf_min = 1.0e-4 +tke_min = 1.0e-6 +! tke_mxl_choice ... Can only be 1 or 2, choice of calculation of mixing +! length; currently only Blanke, B., P. Delecluse option is implemented +tke_mxl_choice = 2 +/ + +! namelist for IDEMIX +¶m_idemix +idemix_tau_v = 86400.0 ! time scale for vertical symmetrisation (sec) +idemix_tau_h = 1296000.0 ! time scale for horizontal symmetrisation +idemix_gamma = 1.570 ! constant of order one derived from the shape of the spectrum in m space (dimensionless) +idemix_jstar = 10.0 ! spectral bandwidth in modes (dimensionless) +idemix_mu0 = 1.33333333 ! dissipation parameter (dimensionless) +idemix_sforcusage = 0.2 +idemix_n_hor_iwe_prop_iter = 5 ! iterations for contribution from horiz. wave propagation +idemix_surforc_file = '/work/ollie/clidyn/forcing/IDEMIX/fourier_smooth_2005_cfsr_inert_rgrid.nc' +idemix_botforc_file = '/work/ollie/clidyn/forcing/IDEMIX/tidal_energy_gx1v6_20090205_rgrid.nc' +/ + +! namelist for PP +¶m_pp +pp_use_fesompp = .true. ! if true use fesom flavor off PP if false use original PP of Pacanowski & Philander +pp_Av0 = 0.01 ! mixing coeff. for PP +pp_alpha = 5.0 ! alpha param eq. (1) in Pacanowski and Philander 1981 +pp_exp = 2.0 ! n param eq. (1) in Pacanowski and Philander 1981 +pp_Avbckg = 1.0e-4 ! const. pp background viscosity +pp_Kvbckg = 1.0e-5 ! const. pp background diffusivity +pp_use_nonconstKvb = .true. ! use lat and depth dependent background diffusivity +/ + +! namelist for KPP +¶m_kpp +kpp_use_fesomkpp = .false. ! if true use cvmix MOM5 like kpp if false use cvmix MOM6 like kpp +kpp_use_enhanceKv = .true. ! If true, add enhanced diffusivity at base of boundary layer +kpp_use_compEkman = .true. ! If true, compute Ekman depth limit for OBLdepth +kpp_use_monob = .true. ! If true, compute Monin-Obukhov limit for OBLdepth +kpp_interptype_ri = "linear" ! Type of interpolation in determining OBL depth: linear,quadratic,cubic +kpp_interptype_atobl= "LMD94" ! Type of interpolation of visc and diff at obl depth: linear,quadratic,cubic,LMD94 +kpp_matchtechc = "ParabolicNonLocal" ! Setting diffusivity and NLT profile functions:SimpleShapes, MatchGradient, MatchBoth, ParabolicNonLocal +kpp_internalmix = "KPP" ! Ri-number dependet mixing scheme below the OBL: 'PP' or 'KPP' +kpp_reduce_tauuice = .false. ! If True, reduce the wind stress (ustar) under sea ice. +kpp_Av0 = 5.0e-3 ! leading coefficient of shear mixing formula, units: m^2/s: default= 5e-3 +kpp_Kv0 = 5.0e-3 +kpp_Ri0 = 0.7 ! critical Richardson number value, units: unitless (0.7 in LMD94) +kpp_pp_Av0 = 0.01 ! Parameter in case of PP mixing below the OBL +kpp_use_nonconstKvb= .true. ! If True use non constant background diffusivity of Qiang from FESOM1.4 +kpp_Avbckg = 1.0e-4 ! Values for const. background viscosity and diffusivity +kpp_Kvbckg = 1.0e-5 +/ + +! namelist for TIDAL +¶m_tidal +tidal_mixscheme = "Simmons" +tidal_efficiency = 0.2 ! units: unitless (fraction); (Gamma in Simmons et al.) +tidal_vert_decayscale= 500.0 ! units: m; zeta in Simmons et al. (used to compute the vertical deposition function) +tidal_max_coeff = 50e-4 ! units: m^2/s; largest acceptable value for diffusivity +tidal_lcl_mixfrac = 0.33 !tidal dissipation efficiency (q in Simmons et al.), i.e. fraction of energy that dissipates locally +tidal_depth_cutoff = 0.0 !depth of the shallowest column where tidal mixing is computed (positive below surface) +tidal_botforc_file = '/work/ollie/pscholz/FORCING/IDEMIX/tidal_energy_gx1v6_20090205_rgrid.nc' +/ + diff --git a/namelists/fesom2/2.0/awicm3/jane/namelist.dyn b/namelists/fesom2/2.0/awicm3/jane/namelist.dyn new file mode 100644 index 000000000..b132c25bf --- /dev/null +++ b/namelists/fesom2/2.0/awicm3/jane/namelist.dyn @@ -0,0 +1,23 @@ +&dynamics_visc +visc_gamma0 = 0.0199 ! [m/s], backgroung viscosity= gamma0*len, it should be as small a s possible (keep it < 0.01 m/s). +visc_gamma1 = 0.37 ! [nodim], for computation of the flow aware viscosity +visc_gamma2 = 0.0285 ! [s/m], is only used in easy backscatter option +visc_easybsreturn= 0.3 + +opt_visc = 5 +! 5=Kinematic (easy) Backscatter +! 6=Biharmonic flow aware (viscosity depends on velocity Laplacian) +! 7=Biharmonic flow aware (viscosity depends on velocity differences) +! 8=Dynamic Backscatter + +use_ivertvisc= .true. +/ + +&dynamics_general +momadv_opt = 2 ! option for momentum advection in moment only =2 +use_freeslip = .false. ! Switch on free slip +use_wsplit = .true. ! Switch for implicite/explicte splitting of vert. velocity +wsplit_maxcfl= 0.1 ! maximum allowed CFL criteria in vertical (0.5 < w_max_cfl < 1.) + ! in older FESOM it used to be w_exp_max=1.e-3 +/ + diff --git a/namelists/fesom2/2.0/awicm3/jane/namelist.forcing b/namelists/fesom2/2.0/awicm3/jane/namelist.forcing new file mode 100644 index 000000000..36e1474d2 --- /dev/null +++ b/namelists/fesom2/2.0/awicm3/jane/namelist.forcing @@ -0,0 +1,58 @@ +! This is the namelist file for forcing + +&forcing_exchange_coeff +Ce_atm_oce=1.75e-3 ! exchange coeff. of latent heat over open water +Ch_atm_oce=1.75e-3 ! exchange coeff. of sensible heat over open water +Cd_atm_oce=1.0e-3 ! drag coefficient between atmosphere and water +Ce_atm_ice=1.75e-3 ! exchange coeff. of latent heat over ice +Ch_atm_ice=1.75e-3 ! exchange coeff. of sensible heat over ice +Cd_atm_ice=1.2e-3 ! drag coefficient between atmosphere and ice +Swind =0.0 ! parameterization for coupled current feedback +/ + +&forcing_bulk +AOMIP_drag_coeff=.false. +ncar_bulk_formulae=.true. +ncar_bulk_z_wind=10.0 ! height at which wind forcing is located (CORE:10m, JRA:2m) +ncar_bulk_z_tair=2.0 ! height at which temp forcing is located (CORE:10m, JRA:2m) +ncar_bulk_z_shum=2.0 ! height at which humi forcing is located (CORE:10m, JRA:2m) + +/ + +&land_ice +use_landice_water=.false. +landice_start_mon=5 +landice_end_mon=10 +/ + +&nam_sbc + nm_xwind_file = '/work/ba1254/a270067/era5/forcing/diffuse/u.' ! name of file with winds, if nm_sbc=2 + nm_ywind_file = '/work/ba1254/a270067/era5/forcing/diffuse/v.' ! name of file with winds, if nm_sbc=2 + nm_humi_file = '/work/ba1254/a270067/era5/forcing/diffuse/q.' ! name of file with humidity + nm_qsr_file = '/work/ba1254/a270067/era5/forcing/diffuse/ssrd.' ! name of file with solar heat + nm_qlw_file = '/work/ba1254/a270067/era5/forcing/diffuse/strd.' ! name of file with Long wave + nm_tair_file = '/work/ba1254/a270067/era5/forcing/diffuse/t2m.' ! name of file with 2m air temperature + nm_prec_file = '/work/ba1254/a270067/era5/forcing/diffuse/rf.' ! name of file with total precipitation + nm_snow_file = '/work/ba1254/a270067/era5/forcing/diffuse/sf.' ! name of file with snow precipitation + nm_mslp_file = '/work/ba1254/a270067/era5/forcing/diffuse/sp.' ! air_pressure_at_sea_level + nm_xwind_var = 'u' ! name of variable in file with wind + nm_ywind_var = 'v' ! name of variable in file with wind + nm_humi_var = 'q' ! name of variable in file with humidity + nm_qsr_var = 'ssrd' ! name of variable in file with solar heat + nm_qlw_var = 'strd' ! name of variable in file with Long wave + nm_tair_var = 't2m' ! name of variable in file with 2m air temperature + nm_prec_var = 'rf' ! name of variable in file with total precipitation + nm_snow_var = 'sf' ! name of variable in file with total precipitation + nm_mslp_var = 'sp' ! name of variable in file with air_pressure_at_sea_level + nm_nc_iyear = 1900 + nm_nc_imm = 1 ! initial month of time axis in netCDF + nm_nc_idd = 1 ! initial day of time axis in netCDF + nm_nc_freq = 1 ! data points per day (i.e. 86400 if the time axis is in seconds) + nm_nc_tmid = 0 ! 1 if the time stamps are given at the mid points of the netcdf file, 0 otherwise (i.e. 1 in CORE1, CORE2; 0 in JRA55) + l_xwind=.true., l_ywind=.true., l_humi=.true., l_qsr=.true., l_qlw=.true., l_tair=.true., l_prec=.true., l_mslp=.false., l_cloud=.false., l_snow=.true. + nm_runoff_file ='/pool/data/AWICM/FESOM2/FORCING/CORE2/runoff.nc' + runoff_data_source ='CORE2' !Dai09, CORE2, JRA55 + !runoff_climatology =.true. ???? + nm_sss_data_file ='/pool/data/AWICM/FESOM2/FORCING/CORE2/PHC2_salx.nc' + sss_data_source ='CORE2' +/ diff --git a/namelists/fesom2/2.0/awicm3/jane/namelist.ice b/namelists/fesom2/2.0/awicm3/jane/namelist.ice new file mode 100644 index 000000000..bcd86f145 --- /dev/null +++ b/namelists/fesom2/2.0/awicm3/jane/namelist.ice @@ -0,0 +1,31 @@ +! Ice namelist +&ice_dyn +whichEVP=0 ! 0=standart; 1=mEVP; 2=aEVP +Pstar=30000.0 ! [N/m^2] +ellipse=2.0 +c_pressure=20.0 ! ice concentration parameter used in ice strength computation +delta_min=1.0e-11 ! [s^(-1)] +evp_rheol_steps=120 ! number of EVP subcycles +alpha_evp=250 ! constant that control numerical stability of mEVP. Adjust with resolution. +beta_evp=250 ! constant that control numerical stability of mEVP. Adjust with resolution. +c_aevp=0.15 ! a tuning constant in aEVP. Adjust with resolution. +Cd_oce_ice=0.0055 ! drag coef. oce - ice +ice_gamma_fct=0.5 ! smoothing parameter +ice_diff=0.0 ! diffusion to stabilize +theta_io=0.0 ! rotation angle +ice_ave_steps=1 ! ice step=ice_ave_steps*oce_step +/ + +&ice_therm +Sice=4.0 ! Ice salinity 3.2--5.0 ppt. +h0=.5 ! Lead closing parameter [m] +emiss_ice=0.97 ! Emissivity of Snow/Ice, +emiss_wat=0.97 ! Emissivity of open water +albsn=0.81 ! Albedo: frozen snow +albsnm=0.77 ! melting snow +albi=0.7 ! frozen ice +albim=0.68 ! melting ice +albw=0.1 ! open water +con=2.1656 ! Thermal conductivities: ice; W/m/K +consn=0.31 ! snow +/ diff --git a/namelists/fesom2/2.0/awicm3/jane/namelist.icepack b/namelists/fesom2/2.0/awicm3/jane/namelist.icepack new file mode 100644 index 000000000..ed0dd4d4c --- /dev/null +++ b/namelists/fesom2/2.0/awicm3/jane/namelist.icepack @@ -0,0 +1,146 @@ +&env_nml ! In the original release these variables are defined in the icepack.settings + nicecat = 5 ! number of ice thickness categories + nfsdcat = 1 ! number of floe size categories + nicelyr = 4 ! number of vertical layers in the ice + nsnwlyr = 4 ! number of vertical layers in the snow + ntraero = 0 ! number of aerosol tracers (up to max_aero in ice_domain_size.F90) + trzaero = 0 ! number of z aerosol tracers (up to max_aero = 6) + tralg = 0 ! number of algal tracers (up to max_algae = 3) + trdoc = 0 ! number of dissolve organic carbon (up to max_doc = 3) + trdic = 0 ! number of dissolve inorganic carbon (up to max_dic = 1) + trdon = 0 ! number of dissolve organic nitrogen (up to max_don = 1) + trfed = 0 ! number of dissolved iron tracers (up to max_fe = 2) + trfep = 0 ! number of particulate iron tracers (up to max_fe = 2) + nbgclyr = 0 ! number of zbgc layers + trbgcz = 0 ! set to 1 for zbgc tracers (needs TRBGCS = 0 and TRBRI = 1) + trzs = 0 ! set to 1 for zsalinity tracer (needs TRBRI = 1) + trbri = 0 ! set to 1 for brine height tracer + trage = 0 ! set to 1 for ice age tracer + trfy = 0 ! set to 1 for first-year ice area tracer + trlvl = 0 ! set to 1 for level and deformed ice tracers + trpnd = 0 ! set to 1 for melt pond tracers + trbgcs = 0 ! set to 1 for skeletal layer tracers (needs TRBGCZ = 0) + ndtd = 1 ! dynamic time steps per thermodynamic time step +/ + +&grid_nml + kcatbound = 1 +/ + +&tracer_nml + tr_iage = .false. + tr_FY = .false. + tr_lvl = .false. + tr_pond_cesm = .false. + tr_pond_topo = .false. + tr_pond_lvl = .false. + tr_aero = .false. + tr_fsd = .false. +/ + +&thermo_nml + kitd = 1 + ktherm = 1 + conduct = 'bubbly' + a_rapid_mode = 0.5e-3 + Rac_rapid_mode = 10.0 + aspect_rapid_mode = 1.0 + dSdt_slow_mode = -5.0e-8 + phi_c_slow_mode = 0.05 + phi_i_mushy = 0.85 + ksno = 0.3 +/ + +&shortwave_nml + shortwave = 'ccsm3' + albedo_type = 'ccsm3' + albicev = 0.78 + albicei = 0.36 + albsnowv = 0.98 + albsnowi = 0.70 + albocn = 0.1 + ahmax = 0.3 + R_ice = 0. + R_pnd = 0. + R_snw = 1.5 + dT_mlt = 1.5 + rsnw_mlt = 1500. + kalg = 0.6 +/ + +&ponds_nml + hp1 = 0.01 + hs0 = 0. + hs1 = 0.03 + dpscale = 1.e-3 + frzpnd = 'hlid' + rfracmin = 0.15 + rfracmax = 1. + pndaspect = 0.8 +/ + +&forcing_nml + formdrag = .false. + atmbndy = 'default' + calc_strair = .true. + calc_Tsfc = .true. + highfreq = .false. + natmiter = 5 + ustar_min = 0.0005 + emissivity = 0.95 + fbot_xfer_type = 'constant' + update_ocn_f = .false. + l_mpond_fresh = .false. + tfrz_option = 'linear_salt' + oceanmixed_ice = .true. + wave_spec_type = 'none' +/ + +&dynamics_nml + kstrength = 1 + krdg_partic = 1 + krdg_redist = 1 + mu_rdg = 3 + Cf = 17. + P_star = 27000. + C_star = 20. +/ + +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!! Icepack output namelist !!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +&nml_list_icepack +io_list_icepack = 'aicen ',1, 'm', 4, ! Sea ice concentration + 'vicen ',1, 'm', 4, ! Volume per unit area of ice + 'vsnon ',1, 'm', 4, ! Volume per unit area of snow + !'Tsfcn ',1, 'm', 4, ! Sea ice surf. temperature + !'iagen ',1, 'm', 4, ! Sea ice age + !'FYn ',1, 'm', 4, ! First year ice + !'lvln ',1, 'm', 4, ! Ridged sea ice area and volume + !'pond_cesmn',1, 'm', 4, ! Melt ponds area, volume and refrozen lid thickness + !'pond_topon',1, 'm', 4, ! Melt ponds area, volume and refrozen lid thickness + !'pond_lvln ',1, 'm', 4, ! Melt ponds area, volume and refrozen lid thickness + !'brinen ',1, 'm', 4, ! Volume fraction of ice with dynamic salt + !'qicen ',1, 'm', 4, ! Sea ice enthalpy + !'sicen ',1, 'm', 4, ! Sea ice salinity + !'qsnon ',1, 'm', 4, ! Snow enthalpy + ! Average over thicknes classes + !'aice ',1, 'm', 4, ! Sea ice concentration + !'vice ',1, 'm', 4, ! Volume per unit area of ice + !'vsno ',1, 'm', 4, ! Volume per unit area of snow + !'Tsfc ',1, 'm', 4, ! Sea ice surf. temperature + !'iage ',1, 'm', 4, ! Sea ice age + !'FY ',1, 'm', 4, ! First year ice + !'lvl ',1, 'm', 4, ! Ridged sea ice area and volume + !'pond_cesm ',1, 'm', 4, ! Melt ponds area, volume and refrozen lid thickness + !'pond_topo ',1, 'm', 4, ! Melt ponds area, volume and refrozen lid thickness + !'pond_lvl ',1, 'm', 4, ! Melt ponds area, volume and refrozen lid thickness + !'brine ',1, 'm', 4, ! Volume fraction of ice with dynamic salt + !'qice ',1, 'm', 4, ! Sea ice enthalpy + !'sice ',1, 'm', 4, ! Sea ice salinity + !'qsno ',1, 'm', 4, ! Snow enthalpy + ! Other variables + !'uvel ',1, 'm', 4, ! x-component of sea ice velocity + !'vvel ',1, 'm', 4, ! y-component of sea ice velocity +/ diff --git a/namelists/fesom2/2.0/awicm3/jane/namelist.io b/namelists/fesom2/2.0/awicm3/jane/namelist.io new file mode 100644 index 000000000..12af6e25c --- /dev/null +++ b/namelists/fesom2/2.0/awicm3/jane/namelist.io @@ -0,0 +1,43 @@ +&diag_list +ldiag_solver =.false. +lcurt_stress_surf=.false. +ldiag_curl_vel3 =.false. +ldiag_energy =.false. +ldiag_salt3D =.false. +ldiag_dMOC =.false. +ldiag_DVD =.false. +ldiag_forc =.false. +/ + +&nml_general +io_listsize =100 !number of streams to allocate. shallbe large or equal to the number of streams in &nml_list +vec_autorotate =.false. +/ + +! for sea ice related variables use_ice should be true, otherewise there will be no output +! for 'curl_surf' to work lcurt_stress_surf must be .true. otherwise no output +! for 'fer_C', 'bolus_u', 'bolus_v', 'bolus_w', 'fer_K' to work Fer_GM must be .true. otherwise no output +! 'otracers' - all other tracers if applicable +! for 'dMOC' to work ldiag_dMOC must be .true. otherwise no output +&nml_list +io_list = 'sst ',1, 'd', 4, + 'sss ',1, 'd', 4, + 'ssh ',1, 'd', 4, + 'uice ',1, 'd', 4, + 'vice ',1, 'd', 4, + 'a_ice ',1, 'd', 4, + 'm_ice ',1, 'd', 4, + 't050 ',1, 'd', 4, + 't100 ',1, 'd', 4, + 's050 ',1, 'd', 4, + 's100 ',1, 'd', 4, + 'u050 ',1, 'd', 4, + 'u100 ',1, 'd', 4, + 'v050 ',1, 'd', 4, + 'v100 ',1, 'd', 4, + 'm_snow ',1, 'm', 4, + 'MLD1 ',1, 'm', 4, + 'MLD2 ',1, 'm', 4, + 'tx_sur ',1, 'm', 4, + 'ty_sur ',1, 'm', 4, +/ diff --git a/namelists/fesom2/2.0/awicm3/jane/namelist.oce b/namelists/fesom2/2.0/awicm3/jane/namelist.oce new file mode 100644 index 000000000..cec7f4b9e --- /dev/null +++ b/namelists/fesom2/2.0/awicm3/jane/namelist.oce @@ -0,0 +1,26 @@ +! The namelist file for the finite-volume ocean model + +&oce_dyn +C_d=0.0025 ! Bottom drag, nondimensional +A_ver= 1.e-4 ! Vertical viscosity, m^2/s +scale_area=5.8e9 ! Visc. and diffus. are for an element with scale_area +SPP=.true. !.false. ! Salt Plume Parameterization +Fer_GM=.true. ! to swith on/off GM after Ferrari et al. 2010 +K_GM_max = 500. !1000.0 ! max. GM thickness diffusivity (m2/s) +K_GM_min = 2.0 ! max. GM thickness diffusivity (m2/s) +K_GM_bvref = 2 ! def of bvref in ferreira scaling 0=srf,1=bot mld,2=mean over mld,3=weighted mean over mld +K_GM_rampmax = -1.0 ! Resol >K_GM_rampmax[km] GM on +K_GM_rampmin = -1.0 ! Resol TB04 mixing +momix_lat = 90.000 !90.00 ! latitidinal treshhold for TB04, =90 --> global +momix_kv = 0.01 ! PP/KPP, mixing coefficient within MO length +use_instabmix = .true. ! enhance convection in case of instable stratification +instabmix_kv = 0.1 +use_windmix = .false. ! enhance mixing trough wind only for PP mixing (for stability) +windmix_kv = 1.e-3 +windmix_nl = 2 +diff_sh_limit=5.0e-3 ! for KPP, max diff due to shear instability +Kv0_const=.true. +double_diffusion=.false. ! for KPP,dd switch +K_ver=1.0e-5 +K_hor=0. !100. !3000. +surf_relax_T=0.0 +surf_relax_S=1.929e-06 ! 50m/300days 6.43e-07! m/s 10./(180.*86400.) +balance_salt_water =.true. ! balance virtual-salt or freshwater flux or not +clim_relax=0.0 ! 1/s, geometrical information has to be supplied +ref_sss_local=.true. +ref_sss=34. +/ diff --git a/namelists/fesom2/2.0/namelist.config.bckp b/namelists/fesom2/2.0/namelist.config.bckp deleted file mode 100755 index ca6dff94d..000000000 --- a/namelists/fesom2/2.0/namelist.config.bckp +++ /dev/null @@ -1,88 +0,0 @@ -! This is the namelist file for model general configuration - -&modelname -runid='fesom' -/ - -×tep -step_per_day= -run_length= -run_length_unit= ! y, m, d, s -/ - -&clockinit ! the model starts at -timenew=0.0 -daynew=1 -yearnew= -/ - -&paths -MeshPath = -ClimateDataPath= -ForcingDataPath= -TideForcingPath= -ResultPath = -/ - -&initialization -OceClimaDataName='Winter_PHC3_ts.out' !which T/S data to initial. ocean - !'Winter_PHC3_ts.out' - !'Annual_PHC3_ts.out' -use_prepared_init_ice=.false. !how to init. ice; runid.initial_ice.nc -/ - -&inout -restartflag= !restart from which saved record,'last','#' -output_length=1 !only required for d,h,s cases, y, m take 1 -output_length_unit='d' !output period: y, d, h, s -output_offset=64 -restart_length=1 !only required for d,h,s cases, y, m take 1 -restart_length_unit='m' !output period: y, d, h, s -restart_offset=64 -logfile_outfreq=600 !in logfile info. output frequency, # steps -use_means=.true. !average output, if false prints out snapshots -/ - -&mesh_def -grid_type=1 !1 z-level, 2 sigma, 3 z+sigma -use_ALE=.true. ! switch on/off ALE -which_ALE='zlevel' ! 'linfs','zlevel', 'zstar','zstar-weight', 'ztilde' -use_partial_cell=.true. -min_hnode=0.5 -lzstar_lev=20 -max_ice_loading=4.0 -/ - -&geometry -cartesian=.false. -fplane=.false. -betaplane=.false. -f_fplane=-1.4e-4 ![1/s] -beta_betaplane=2.0e-11 ![1/s/m] -cyclic_length=360. ![degree] -rotated_grid=.true. !option only valid for coupled model case now -alphaEuler=50. ![degree] Euler angles, convention: -betaEuler=15. ![degree] first around z, then around new x, -gammaEuler=-90. ![degree] then around new z. -force_rotation=.false. -/ - -&calendar -include_fleapyear=.false. -/ - -&run_config -use_ice=.true. ! ocean+ice -use_floatice = .true. -use_sw_pene=.false. -toy_ocean=.false. ! use toy forcing/initialization -/ - -&machine -! system_arch=1 -n_levels=3 -!n_part= 18, 2, 10 ! number of partitions on each hierarchy level -n_part= 18, 2, 12 ! 432 number of partitions on each hierarchy level -! n_part= 15, 2, 12 ! 360 number of partitions on each hierarchy level -!n_part= 12, 2, 12 ! 288 number of partitions on each hierarchy level -/ diff --git a/namelists/fesom2/namelist.config.bckp2 b/namelists/fesom2/namelist.config.bckp2 deleted file mode 100755 index 734532f0a..000000000 --- a/namelists/fesom2/namelist.config.bckp2 +++ /dev/null @@ -1,85 +0,0 @@ -! This is the namelist file for model general configuration - -&modelname -runid='fesom' -/ - -×tep -step_per_day= -run_length= -run_length_unit= ! y, m, d, s -/ - -&clockinit -timenew=0.0 -daynew=1 -yearnew= -/ - -&paths -MeshPath= -OpbndPath='' -ClimateDataPath= -ForcingDataPath= -TideForcingPath= -ResultPath= -/ - -&initialization -OceClimaDataName='Winter_PHC3_ts.out' !which T/S data to initial. ocean - !'Winter_PHC3_ts.out' - !'Annual_PHC3_ts.out' -use_prepared_init_ice=.false. !how to init. ice; runid.initial_ice.nc -/ - -&inout -restartflag= !restart from which saved record,'last','#' -output_length= !only required for d,h,s cases, y, m take 1 -output_length_unit='' !output period: y, d, h, s -output_offset=64 -restart_length= !only required for d,h,s cases, y, m take 1 -restart_length_unit='' !output period: y, d, h, s -restart_offset=64 -logfile_outfreq=100 !in logfile info. output frequency, # steps -use_means=.false. !average output, if false prints out snapshots -/ - -&mesh_def -grid_type=1 !1 z-level, 2 sigma, 3 z+sigma -use_ALE=.true. ! switch on/off ALE -which_ALE='linfs' ! 'linfs','zlevel', 'zstar','zstar-weight', 'ztilde' -use_partial_cell=.false. -min_hnode=0.25 -lzstar_lev=3 -/ - -&geometry -cartesian=.false. -fplane=.false. -betaplane=.false. -f_fplane=-1.4e-4 ![1/s] -beta_betaplane=2.0e-11 ![1/s/m] -cyclic_length=360. ![degree] -rotated_grid=.true. !option only valid for coupled model case now -alphaEuler=50. ![degree] Euler angles, convention: -betaEuler=15. ![degree] first around z, then around new x, -gammaEuler=-90. ![degree] then around new z. -force_rotation=.false. -/ - -&calendar -include_fleapyear=.false. -/ - -&run_config -use_ice=.true. ! ocean+ice -use_floatice = .false. -use_sw_pene=.true. -toy_ocean=.false. ! use toy forcing/initialization -/ - -&machine -! system_arch=1 -n_levels=3 -n_part= 2,4,36 ! number of partitions on each hierarchy level -/ diff --git a/namelists/jsbach/3.20/ssp126/dynveg/namelist.jsbach b/namelists/jsbach/3.20/cmip6/dynveg/namelist.jsbach similarity index 100% rename from namelists/jsbach/3.20/ssp126/dynveg/namelist.jsbach rename to namelists/jsbach/3.20/cmip6/dynveg/namelist.jsbach diff --git a/namelists/jsbach/3.20/cmip6/no_dynveg/namelist.jsbach b/namelists/jsbach/3.20/cmip6/no_dynveg/namelist.jsbach new file mode 100644 index 000000000..186c5f30e --- /dev/null +++ b/namelists/jsbach/3.20/cmip6/no_dynveg/namelist.jsbach @@ -0,0 +1,28 @@ +&JSBACH_CTL + STANDALONE = .false. + ! --- number of tiles --- + NTILES = 11 + USE_BETHY = .true. + USE_PHENOLOGY = .true. + USE_ALBEDO = .true. + WITH_YASSO = .true. + WITH_HD = .true. + USE_ROUGHNESS_LAI = .true. + USE_ROUGHNESS_ORO = .false. + VEG_AT_1200 = .false. + ! --- output options --- + FILE_TYPE = 1 + FILE_ZTYPE = 1 + LPOST_ECHAM = .false. ! variables in echam output will not be printed twice + DEBUG = .FALSE. + LCC_FORCING_TYPE = maps +/ +&SOIL_CTL + NSOIL = 5 +/ +&HYDROLOGY_CTL + LDEBUGHD=.false. + DIAG_WATER_BUDGET=.true. +/ +!because of the large sensitivity of HD model discharge to the changes in HYDROLOGY_CTL +!it is recommended not to modify HD parameters via namelist (the default values will be used) diff --git a/namelists/jsbach/3.20/ssp245/dynveg/namelist.jsbach b/namelists/jsbach/3.20/ssp245/dynveg/namelist.jsbach deleted file mode 100644 index 740010360..000000000 --- a/namelists/jsbach/3.20/ssp245/dynveg/namelist.jsbach +++ /dev/null @@ -1,47 +0,0 @@ -&jsbach_ctl - standalone = .false. - ntiles = 11 - use_bethy = .true. - use_phenology = .true. - use_albedo = .true. - with_yasso = .true. - with_hd = .true. - use_roughness_lai = .true. - use_roughness_oro = .false. - veg_at_1200 = .false. - use_dynveg = .true. - use_disturbance = .true. - with_nitrogen = .true. - lcc_forcing_type = 'transitions' - lcc_scheme = 2 - test_cconservation = .true. - test_nconservation = .true. -/ -&soil_ctl - nsoil = 5 -/ -&hydrology_ctl - gethd = 192, 'steps', 'exact', 0 - puthd = 192, 'steps', 'exact', -450 - diag_water_budget = .true. -/ -&cbalance_ctl - read_ndepo = .true. -/ -&disturbance_ctl - fire_name = 'thonicke' - fuel_name = 'thonicke' - lburn_pasture = .true. -/ -&input_ctl - var_name = 'lightning_frq' - var_file_name = 'HRMC_COM_FR' - file_name = 'lightning.nc' - action_cycle = 'all' -/ -&input_ctl - var_name = 'population_density' - dt_update = 0 - init_rec = 1 ! only read first record of population_density file (i.e. year 1850) -/ - diff --git a/namelists/jsbach/3.20/ssp534os/dynveg/namelist.jsbach b/namelists/jsbach/3.20/ssp534os/dynveg/namelist.jsbach deleted file mode 100644 index 740010360..000000000 --- a/namelists/jsbach/3.20/ssp534os/dynveg/namelist.jsbach +++ /dev/null @@ -1,47 +0,0 @@ -&jsbach_ctl - standalone = .false. - ntiles = 11 - use_bethy = .true. - use_phenology = .true. - use_albedo = .true. - with_yasso = .true. - with_hd = .true. - use_roughness_lai = .true. - use_roughness_oro = .false. - veg_at_1200 = .false. - use_dynveg = .true. - use_disturbance = .true. - with_nitrogen = .true. - lcc_forcing_type = 'transitions' - lcc_scheme = 2 - test_cconservation = .true. - test_nconservation = .true. -/ -&soil_ctl - nsoil = 5 -/ -&hydrology_ctl - gethd = 192, 'steps', 'exact', 0 - puthd = 192, 'steps', 'exact', -450 - diag_water_budget = .true. -/ -&cbalance_ctl - read_ndepo = .true. -/ -&disturbance_ctl - fire_name = 'thonicke' - fuel_name = 'thonicke' - lburn_pasture = .true. -/ -&input_ctl - var_name = 'lightning_frq' - var_file_name = 'HRMC_COM_FR' - file_name = 'lightning.nc' - action_cycle = 'all' -/ -&input_ctl - var_name = 'population_density' - dt_update = 0 - init_rec = 1 ! only read first record of population_density file (i.e. year 1850) -/ - diff --git a/namelists/jsbach/3.20/ssp585/dynveg/namelist.jsbach b/namelists/jsbach/3.20/ssp585/dynveg/namelist.jsbach deleted file mode 100644 index 740010360..000000000 --- a/namelists/jsbach/3.20/ssp585/dynveg/namelist.jsbach +++ /dev/null @@ -1,47 +0,0 @@ -&jsbach_ctl - standalone = .false. - ntiles = 11 - use_bethy = .true. - use_phenology = .true. - use_albedo = .true. - with_yasso = .true. - with_hd = .true. - use_roughness_lai = .true. - use_roughness_oro = .false. - veg_at_1200 = .false. - use_dynveg = .true. - use_disturbance = .true. - with_nitrogen = .true. - lcc_forcing_type = 'transitions' - lcc_scheme = 2 - test_cconservation = .true. - test_nconservation = .true. -/ -&soil_ctl - nsoil = 5 -/ -&hydrology_ctl - gethd = 192, 'steps', 'exact', 0 - puthd = 192, 'steps', 'exact', -450 - diag_water_budget = .true. -/ -&cbalance_ctl - read_ndepo = .true. -/ -&disturbance_ctl - fire_name = 'thonicke' - fuel_name = 'thonicke' - lburn_pasture = .true. -/ -&input_ctl - var_name = 'lightning_frq' - var_file_name = 'HRMC_COM_FR' - file_name = 'lightning.nc' - action_cycle = 'all' -/ -&input_ctl - var_name = 'population_density' - dt_update = 0 - init_rec = 1 ! only read first record of population_density file (i.e. year 1850) -/ - diff --git a/namelists/jsbach/3.20p1/HIST/no_dynveg/namelist.jsbach b/namelists/jsbach/3.20p1/HIST/no_dynveg/namelist.jsbach new file mode 100755 index 000000000..065506cdb --- /dev/null +++ b/namelists/jsbach/3.20p1/HIST/no_dynveg/namelist.jsbach @@ -0,0 +1,25 @@ +&JSBACH_CTL + STANDALONE = .false. + ! --- number of tiles --- + NTILES = 11 + USE_BETHY = .true. + USE_PHENOLOGY = .true. + USE_ALBEDO = .true. + WITH_YASSO = .true. + WITH_HD = .true. + USE_ROUGHNESS_LAI = .true. + USE_ROUGHNESS_ORO = .false. + VEG_AT_1200 = .false. + LCC_FORCING_TYPE = maps +/ +&SOIL_CTL + NSOIL = 5 +/ +&HYDROLOGY_CTL + GETHD = 24, 'steps', 'exact', 0 + PUTHD = 24, 'steps', 'exact', -450 + DIAG_WATER_BUDGET = .true. +/ +!because of the large sensitivity of HD model discharge to the changes in HYDROLOGY_CTL +!it is recommended not to modify HD parameters via namelist (the default values will be used) + diff --git a/namelists/oifs/43r3/awicm3/deck/fort.4 b/namelists/oifs/43r3/awicm3/deck/fort.4 deleted file mode 100644 index 3c8289cab..000000000 --- a/namelists/oifs/43r3/awicm3/deck/fort.4 +++ /dev/null @@ -1,511 +0,0 @@ -! ----------------------------------------------------------------------------- -! *** NAMECECFG: EC-Earth specific configuration parameters -! ----------------------------------------------------------------------------- -&NAMECECFG ! DONE - ECE_CPL_NEMO_LIM = false, ! Whether IFS is coupled to NEMO/LIM - ECE_CPL_FESOM_FESIM = true, ! Whether IFS is coupled to FESOM/FESIM -/ -&NAMAWICFG - ECE_AWI_CPL_FESOM = true, ! Whether IFS is coupled to FESOM2 -/ - -&NAMFOCICFG -/ - -&NAMIOS - CFRCF = "./rcf", - CIOSPRF = "./srf", -/ -&NAMFPG - NFPLEV = 60, - NFPMAX = 159, -/ -&NAMCVER - LVERTFE = TRUE, - NVSCH = 3, - LRNHC1 = FALSE, - LVFE_GWMPA = TRUE, - LVFE_GW = TRUE, - LVFE_Z_TERM = TRUE, - LVFE_X_TERM = TRUE, - LVFE_LAPL_BC = TRUE, - LVFE_LAPL = TRUE, -/ -&NAMMCC - LMCCIEC = FALSE, - LMCCEC = TRUE, - LMCC04 = FALSE, - LMCCDYNSEAICE = TRUE, -/ -&NAMTRANS - LFFTW = FALSE, -/ -&NAMRES - NFRRES = 1, - NRESTS = -1,-48, -/ -&NAERAD - NRPROMA = -8, - LCMIP6 = TRUE, - SSPNAME = 'historical', - CMIP6DATADIR = '/work/ollie/jstreffi/input/oifs-43r3/TL159L60//../cmip6-data/', - LA4xCO2 = FALSE, - L1PCTCO2 = FALSE, - LCMIP5 = FALSE, - CMIP5DATADIR = '/work/ollie/jstreffi/input/oifs-43r3/TL159L60//../cmip5-data/', - NCMIPFIXYR = 1990, - NRCP = 0, - LHVOLCA = FALSE, - CRTABLEDIR ='/work/ollie/jstreffi/input/oifs-43r3/rtables/', - LECOMPGRID = FALSE, -/ -&NAMARG - LSLAG = TRUE, - NCONF = 1, - UTSTEP = 3600.0, - CUSTOP = 'h8760', - CNMEXP = 'awi3', -/ -&NAMCMIP - LGHGCMIP5 = TRUE, ! read CMIP5 gas - LGHGPI = TRUE, ! pi-control run (keep GHG at 1850 levels) -/ -&NAEPHY - LEPHYS = TRUE, - LEVDIF = TRUE, - LESURF = TRUE, - LECOND = TRUE, - LECUMF = TRUE, - LEPCLD = TRUE, - LEEVAP = TRUE, - LEVGEN = TRUE, - LESSRO = TRUE, - LECURR = FALSE, - LEOCWA = TRUE, - LEGWDG = TRUE, - LEGWWMS = TRUE, - LEOZOC = TRUE, - LEQNGT = TRUE, - LERADI = TRUE, - LERADS = TRUE, - LESICE = TRUE, - LEO3CH = TRUE, - LEDCLD = TRUE, - LDUCTDIA = FALSE, - LELIGHT = FALSE, - RDEGREW = 0.5, - RSOUTW = -81.0, - RNORTW = 81.0, - LBUD23 = FALSE, ! enable computation of physics tendencies - LWCOU = FALSE, ! TRUE if wave model is to be run - LWCOU2W = TRUE, ! TRUE if two-way interaction with wave model - NSTPW = 1, ! frequency of call to wave model (timesteps) -/ -&NAMPAR1 - NOUTTYPE = 1 - LSPLIT = TRUE, - NWRTOUT = 4, - NFLDIN = 0, - NSTRIN = 1, -/ -&NAMPAR0 - LSTATS = TRUE, - LDETAILED_STATS = FALSE, - LSYNCSTATS = FALSE, - LSTATSCPU = FALSE, - NPRNT_STATS = 70, - LBARRIER_STATS = FALSE, - LBARRIER_STATS2 = FALSE, - NPROC = 72, - NSPECRESMIN = 160, - NOUTPUT = 1, - MP_TYPE = 2, - MBX_SIZE = 3200000, -/ -&NAMDYNA - LGRADSP = TRUE, - LRFRIC = TRUE, -/ -&NAMDYNCORE - LAQUA = FALSE, -/ -&NAMDYN - LMASCOR = TRUE, - LMASDRY = TRUE, - NITMP = 5, -/ -&NAMCLDP - SCLCT_SWITCH = 2, -/ -&NAMCT0 - LNHDYN = FALSE, - CTYPE = "fc", - CFCLASS = "rd", - LARPEGEF = FALSE, - LFDBOP = TRUE, - LSMSSIG = TRUE, - LSPRT = TRUE, - LTWOTL = TRUE, - LSLPHY = TRUE, - N3DINI = 0, - NFRDHP = 12, - NFRDHFD = 1, - NFRSDI = 1, - NFRHIS = 6, - NFRPOS = 6, - NFRMASSCON = 12, - NFPOS = 2, - NPOSTS = 0, - NHISTS = 0, - NMASSCONS = 0, - NFRCO = 0, - NFRDHFZ = 48, - NDHFZTS = 0, - NDHFDTS = 0, - NUNDEFLD = 1, -/ -&NAMDDH - BDEDDH(1:6,1) = 4.0,1.0,0.0,50.0,0.0,49.0, - NDHKD = 120, - LHDZON = FALSE, - LHDEFZ = FALSE, - LHDDOP = FALSE, - LHDEFD = FALSE, - LHDGLB = TRUE, - LHDPRG = TRUE, - LHDHKS = TRUE, -/ -&NAMGFL - NERA40 = 14, - YQ_NL%LGP = TRUE, - YQ_NL%LSP = FALSE, - YL_NL%LGP = TRUE, - YI_NL%LGP = TRUE, - YA_NL%LGP = TRUE, - YO3_NL%LGP = TRUE, -/ -&NAMFPC - CFPFMT="MODEL", - NFP3DFP=0, - NFP3DFT=, - NFP3DFV=0, - MFP3DFP(:)=3,129,130,131,132,138,155,157,133,246,247,248 - MFP3DFT(:)=, - MFP3DFV=133, - NFP2DF=0, - MFP2DF(:)=129,152, - NFPPHY=3, - MFPPHY (:)=167,228,164 - NRFP3S(:)=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60, - RFP3P(:)=100000,92500,85000,70000,60000,50000,40000,30000,25000,20000,15000,10000,7000,5000,3000,2000,1000,500,100, - RFP3TH(:)=315.0,325.0,330.0, - NFPCLI=0, - LFPQ=false, - LTRACEFP=false, - RFPCORR=60000., -/ -&NAMPPC - LRSACC = TRUE, ! reset accumulated fields to zero at model output frequency -/ -&NAMFPD - NLAT = 400, - NLON = 800, -/ -&NAMDIM - NPROMA = -16 ! for a vector computer this number needs to be larger -/ -&NAMRLX -/ -&NAMVAR - LMODERR = .FALSE., - LJCDFI = .FALSE., - LUSEJCDFI = .FALSE., -/ -&NAMVV0 - LLFORCE_READ = FALSE, -/ -&NAMNMI - LASSI = TRUE, -/ -&NAEAER -/ -&NALBAR -/ -&NALORI -/ -&NAM_DISTRIBUTED_VECTORS -/ -&NAM926 -/ -&NAMAFN -/ -&NAMANA -/ -&NAMARPHY -/ -&NAMCA -/ -&NAMCAPE -/ -&NAMCFU -/ -&NAMCHK -/ -&NAMCHET -/ -&NAMCLTC -/ -&NAMCOM -/ -&NAMCOS -/ -&NAMCTAN -/ -&NAMCUMF -/ -&NAMCUMFS -/ -&NAMCT1 -/ -&NAMCVA -/ -&NAMDFHD -/ -&NAMDFI -/ -&NAMDIF -/ -&NAMDIMO -/ -&NAMDMSP -/ -&NAMDPHY -/ -&NAMEMIS_CONF -/ -&NAMENKF -/ -&NAMFA -/ -&NAMFFT -/ -&NAMFPDY2 -/ -&NAMFPDYH -/ -&NAMFPDYP -/ -&NAMFPDYS -/ -&NAMFPDYT -/ -&NAMFPDYV -/ -&NAMFPEZO -/ -&NAMFPF -/ -&NAMFPIOS -/ -&NAMFPPHY -/ -&NAMFPSC2 -/ -&NAMFPSC2_DEP -/ -&NAMFY2 -/ -&NAMGEM -/ -&NAMGMS -/ -&NAMGOES -/ -&NAMGOM -/ -&NAMGRIB -/ -&NAMGWD -/ -&NAMGWWMS -/ -&NAMHLOPT -/ -&NAMINI -/ -&NAMIOMI -/ -&NAMJBCODES -/ -&NAMJFH -/ -&NAMJG -/ -&NAMJO -/ -&NAMKAP -/ -&NAMLCZ -/ -&NAMLEG -/ -&NAMLFI -/ -&NAMMCUF -/ -&NAMMETEOSAT -/ -&NAMMTS -/ -&NAMMTSAT -/ -&NAMMTT -/ -&NAMMUL -/ -&NAMNASA -/ -&NAMNN -/ -&NAMNPROF -/ -&NAMNUD -/ -&NAMOBS -/ -&NAMONEDVAR -/ -&NAMOPH -/ -&NAMOPTCMEM -/ -&NAMPARAR -/ -&NAMPHY -/ -&NAMPHY0 -/ -&NAMPHY1 -/ -&NAMPHY2 -/ -&NAMPHY3 -/ -&NAMPHYDS -/ -&NAMPONG -/ -&NAMRAD15 -/ -&NAMRADCMEM -/ -&NAMRCOEF -/ -&NAMRINC -/ -&NAMRIP -/ -&NAMSATS -/ -&NAMSCC -/ -&NAMSCEN -/ -&NAMSCM -/ -&NAMSENS -/ -&NAMSIMPHL -/ -&NAMSKF -/ -&NAMSPSDT -/ -&NAMSPP -/ -&NAMSSMI -/ -&NAMSTA -/ -&NAMSTOPH -/ -&NAMTCWV -/ -&NAMTESTVAR -/ -&NAMTOPH -/ -&NAMTOVS -/ -&NAMTRAJP -/ -&NAMTRM -/ -&NAMVARBC -/ -&NAMVARBC_AIREP -/ -&NAMVARBC_ALLSKY -/ -&NAMVARBC_GBRAD -/ -&NAMVARBC_RAD -/ -&NAMVARBC_SFCOBS -/ -&NAMVARBC_TCWV -/ -&NAMVARBC_TO3 -/ -&NAMVAREPS -/ -&NAMVDOZ -/ -&NAMVFP -/ -&NAMVRTL -/ -&NAMVV1 -/ -&NAMVV2 -/ -&NAMVWRK -/ -&NAMWAVELETJB -/ -&NAMXFU -/ -&NAMZDI -/ -&NAPHLC -/ -&NAV1IS -/ -&NAEPHLI -/ -&NAMPPVI -/ -&NAMSPNG -/ -&NAMTHLIM -/ -&NAMOOPS -/ -&NAMINTFLEX -/ -&NAMIAU -/ -&NAMDIM_TRAJ -/ -&NAMVDF -/ -&NAMGWDIAG -/ -&NAMTRANS0 -/ -&NAMMETHOX -/ -&NAM_ATLAS_IFS -/ -&NAETLDIAG -/ diff --git a/namelists/oifs/43r3/awicm3/deck/wam_namelist b/namelists/oifs/43r3/awicm3/deck/wam_namelist deleted file mode 100644 index 993cc64da..000000000 --- a/namelists/oifs/43r3/awicm3/deck/wam_namelist +++ /dev/null @@ -1,155 +0,0 @@ - &NALINE - CLHEADER =" WAVE MODEL ", - CBPLTDT = "19900406000000", - CEPLTDT ="00000000000000", - CDATEF = "19900406000000", - IDELPRO = 900, - IDELT = 900, - IDELWO = 900, - IDELWI = 900, - IDELALT = 0, - CDATECURA = "19900406000000", - IDELCUR = 0, - CLOTSU(1)= "H", - CLOTSU(2)= "H", - CLOTSU(3)= "H", - CLOTSU(4)= "H", - CLOTSU(5)= "H", - CLOTSU(6)= "H", - CLOTSU(7)= "H", - IDELINT = 0000006, - IDELINS = 0000006, - IDELSPT = 0000006, - IDELRES = 240, - CDATER ="00000000000000", - CDATES ="00000000000000", - LSECONDORDER = T, - FFLAG(17)= F,, - PFLAG(1)= F,, - PFLAG(3)= F,, - PFLAG(6)= F,, - PFLAG(7)= F,, - PFLAG(8)= F,, - PFLAG(10)= F,, - PFLAG(25)= F,, - PFLAG(37)= F,, - PFLAG(44)= F,, - PFLAG(46)= F,, - LFDBIOOUT = T, - LFDB = T, - NWRTOUTWAM = 12, - ISHALLO = 0, - ALPHAPMAX = 0.03, - ISNONLIN = 0, - IDAMPING = 1, - LBIWBK = T, - IPROPAGS = 2, - LSUBGRID = T, - IREFRA = 0, - LICERUN = T, - LMASKICE = T, - LICETH = F, - LLUNSTR = F, - ITEST = 0, - ITESTB = 1, - IREST = 0, - IASSI = 0, - YCLASS ="rd", - NLOCGRB = 1, - ISTREAM = 1045, - YEXPVER ="h6mv", - NENSFNB = 000, - NTOTENS = 000, - NCONSENSUS = 0, - NNCEP = 0, - NMFR = 0, - NDWD = 0, - NUKM = 0, - LMESSPASS = T, - LWCOU = T, - LWNEMOCOU= F, - LWNEMOCOUDEBUG= F, - LRSTINFDAT=F - LSMSSIG_WAM = T, - - - CPATH = "./", - CFDBSF = "./", - CFDB2DSP = "./", - LGRIBIN= T, - LGRIBOUT= T, - LFDBIOOUT= T, - LNOCDIN = F, - IBUFRSAT(1) = 1, - CSATNAME(1) = 'ERS-1', - LALTPAS(1) = F, - LALTCOR(1) = T, - XKAPPA2(1) = 0.084, - LALTGRDOUT(1) = T, - ALTSDTHRSH(1) = 1.0, - HSALTCUT(1) = 0.1, - IBUFRSAT(2) = 2, - CSATNAME(2) = 'ERS-2', - LALTPAS(2) = F, - LALTCOR(2) = T, - XKAPPA2(2) = 0.09, - LALTGRDOUT(2) = T, - ALTSDTHRSH(2) = 1.0, - HSALTCUT(2) = 0.1, - IBUFRSAT(3) = 60, - CSATNAME(3) = 'ENVISAT', - LALTPAS(3) = F, - HSALTCUT(3) = 0.1, - LALTGRDOUT(3) = T, - IBUFRSAT(4) = 260, - CSATNAME(4) = 'JASON-1', - LALTPAS(4) = F, - LALTCOR(4) = F, - XKAPPA2(4) = 0.09, - HSALTCUT(4) = 0.1, - ALTBGTHRSH(4) = 2., - LALTGRDOUT(4) = T, - IBUFRSAT(5) = 261, - CSATNAME(5) = 'JASON-2', - LALTPAS(5) = F, - HSALTCUT(5) = 0.1, - LALTGRDOUT(5) = T, - IBUFRSAT(6) = 47, - CSATNAME(6) = 'CRYOSAT-2', - LALTPAS(6) = F, - HSALTCUT(6) = 0.1, - LALTGRDOUT(6) = T, - IBUFRSAT(7) = 441, - CSATNAME(7) = 'ALTIKA', - LALTPAS(7) = F, - HSALTCUT(7) = 0.1, - LALTGRDOUT(7) = T, - L4VTYPE = F, - LWAMANOUT = T, - LFRSTFLD = F, - LALTAS = F, - LSARAS = F, - LSARINV = F, - IREFDATE=0, - NSYSNB= -1, - LGUST = T, - LADEN = T, - LLWSWAVE = F, - LLWDWAVE = F, - LLSOURCE = T, - LNSESTART = F, - LRELWIND = T, - NMETNB= -1, - LL1D = F, - NPROMA_WAM = 24, - LWCOUNORMS = F, - SWAMPWIND = 18.45, - SWAMPWIND2 = 0., - DTNEWWIND = 0., - LTURN90 = F, - SWAMPCIFR = 0., - LGRHDIFS = T, - LNEWLVTP = F, - LODBRALT = F, -GFLAG(:)= F, -/ diff --git a/namelists/oifs/43r3/awicm3/master/fort.4 b/namelists/oifs/43r3/awicm3/master/fort.4 new file mode 100644 index 000000000..d01fcbafb --- /dev/null +++ b/namelists/oifs/43r3/awicm3/master/fort.4 @@ -0,0 +1,450 @@ +! ============================================================================ +&NAMECECFG +! ---------------------------------------------------------------------------- +! * EC-Earth configuration +! ---------------------------------------------------------------------------- +ECE_CPL_FESOM_FESIM = true, ! Run coupled to NEMO (true) or not (false) + +! ============================================================================ +/ + +! ============================================================================ +&NAMMCC +! ---------------------------------------------------------------------------- +! * Module YOMMCC: Keys for IFS "climate version" +! ---------------------------------------------------------------------------- + LMCCEC = true, ! LMCCEC = .T. ===> Boundary conditions updated by ECMWF routines + ! = .F. ===> they are not updated + NFRCPL = 0, ! NFRCPL ===> Coupling frequency + LMCCDYNSEAICE = true, ! Use of dynamic sea-ice model + +! LNEMOCOUP ! LNEMOCOUP = .T. ===> SINGLE EXECUTABLE COUPLING TO NEMO +! ! = .F. ===> NO SINGLE EXECUTABLE COUPLING TO NEMO +! LNEMOSSTFREEZ ! LNEMOSSTFREEZ = .T. ===> SET SST TO FREEZING IF CI<=RCIMIN +! ! = .F. ===> KEEP NEMO SST IF CI<=RCIMIN +! LNEMOFLUXNC ! LNEMOFLUXNC = .T. ===> OUTPUT FLUXES FOR NEMO COUPLING IN NETCDF +! ! = .F. ===> DO NOT OUTPUT FLUXES FOR NEMO COUPLING IN NETCDF +! LNEMO1WAY ! LNEMO1WAY = .T. ===> 1WAY (IFS TO NEMO) COUPLING +! ! = .F. ===> 2WAY IFS TO NEMO AND NEMO TO IFS COUPLING +! LNEMOIFSLOG ! LNEMOIFSLOG = .T. ===> NEMO LOG OUTPUT IN IFS NODE.???_?? FILES +! ! = .F. ===> NORMAL NEMO LOG OUTPUT +! LNEMOLIMGET ! LNEMOLIMGET = .T. ! Get new fields LIM +! LNEMOLIMPUT ! LNEMOLIMPUT = .T. ! Put new fields LIM +! LNEMOLIMALB ! LNEMOLIMALB = .T. ! Use albedo from LIM +! LNEMOLIMTEMP ! LNEMOLIMTEMP = .F. ! Use ice temp from LIM +! LNEMOLIMTLVL ! LNEMOLIMTLVL = .F. ! Receive temp levels from LIM +! LNEMOLIMTHK ! LNEMOLIMTHK = .T. ! Use ice and snow thickness +! ============================================================================ +/ + +! ============================================================================ +&NAMARG +! ---------------------------------------------------------------------------- +! * +! ---------------------------------------------------------------------------- + NCONF = 1, + LSLAG = true, + CNMEXP = 'awi3', + UTSTEP = 3600.0, ! Time step in seconds + CUSTOP = 'd1', ! txx = timesteps, hxx = hours, dxx = days. +! ============================================================================ +/ + +&NAMDIM + NPROMA = -8, +/ + +&NAMGFL + YQ_NL%LGP = true, + YQ_NL%LSP = false, + YO3_NL%LGP = false, + YQ_NL%LGPINGP = true, + YR_NL%NREQIN = -1, + YS_NL%NREQIN = -1, + LTRCMFMG = true, +/ + +&NAMPAR0 + LSTATS = true, + LDETAILED_STATS = false, + LSYNCSTATS = false, + MP_TYPE = 2, + MBX_SIZE = 32000000, + NPROC = 144, ! Number of MPI ranks (cores of no OpenMP) + NOUTPUT = 1, +/ + +&NAMCT0 + LXIOS = true, + NFPOS = 2, + LREFOUT = true, + N3DINI = 0, + NFRDHP = 1, + NFRDHFD = 1, + NFRSDI = 1, + LSLPHY = false, + LSLPHY = true, + NUNDEFLD = 1, + NFRMASSCON = 1, +/ + +&NAMPAR1 + LSPLIT = true, + NFLDIN = 0, + NSTRIN = 1, + NSTROUT = 0, + NOUTTYPE = 1, + LPPTSF = false, + NPPBUFLEN = 100000, +/ + +&NAMRIP0 + ! NINDAT = 19970115, + ! NSSSSS = 43200, +/ + +&NAEPHY + LEPHYS = true, + LERADI = true, + LELAIV = false, +/ + +&NAERAD + NRPROMA = -8, + CRTABLEDIR = "/p/project/chhb19/streffing1/input/oifs-43r3/rtables/", ! Modify this for your installation, note trailing / +/ + +&NAMGEM + NHTYP = 0, +/ + +&NAMDPHY + ! NVXTR2 = 0, + ! NVEXTR = 0, + ! NCEXTR = 0, +/ + +&NAMAFN + TFP_FUA(1)%LLGP = false, +/ + +&NAMRES + NFRRES = 1 + NRESTS = -1, -24 +/ +&NAMPPC + LRSACC = true, ! reset accumulated fields to zero at model output frequency +/ + +&NAMDYN + LMASCOR = true, + LMASDRY = false, +/ + +&NAMFPC +/ + +&NAEAER +/ +&NALBAR +/ +&NALORI +/ +&NAM_DISTRIBUTED_VECTORS +/ +&NAM926 +/ +&NAMANA +/ +&NAMARPHY +/ +&NAMCA +/ +&NAMCAPE +/ +&NAMCFU +/ +&NAMCHK +/ +&NAMCHET +/ +&NAMCLDP +/ +&NAMCLTC +/ +&NAMCOM +/ +&NAMCOS +/ +&NAMCTAN +/ +&NAMCUMF +/ +&NAMCUMFS +/ +&NAMCT1 +/ +&NAMCVA +/ +&NAMDDH +/ +&NAMDFHD +/ +&NAMDFI +/ +&NAMDIF +/ +&NAMDIMO +/ +&NAMDMSP +/ +&NAMDYNA +/ +&NAMDYNCORE +/ +&NAMEMIS_CONF +/ +&NAMENKF +/ +&NAMFA +/ +&NAMFFT +/ +&NAMFPD +/ +&NAMFPDY2 +/ +&NAMFPDYH +/ +&NAMFPDYP +/ +&NAMFPDYS +/ +&NAMFPDYT +/ +&NAMFPDYV +/ +&NAMFPEZO +/ +&NAMFPF +/ +&NAMFPG +/ +&NAMFPIOS +/ +&NAMFPPHY +/ +&NAMFPSC2 +/ +&NAMFPSC2_DEP +/ +&NAMFY2 +/ +&NAMGMS +/ +&NAMGOES +/ +&NAMGOM +/ +&NAMGRIB +/ +&NAMGWD +/ +&NAMGWWMS +/ +&NAMHLOPT +/ +&NAMINI +/ +&NAMIOMI +/ +&NAMIOS +/ +&NAMJBCODES +/ +&NAMJFH +/ +&NAMJG +/ +&NAMJO +/ +&NAMKAP +/ +&NAMLCZ +/ +&NAMLEG +/ +&NAMLFI +/ +&NAMMCUF +/ +&NAMMETEOSAT +/ +&NAMMTS +/ +&NAMMTSAT +/ +&NAMMTT +/ +&NAMMUL +/ +&NAMNMI +/ +&NAMNASA +/ +&NAMNN +/ +&NAMNPROF +/ +&NAMNUD +/ +&NAMOBS +/ +&NAMONEDVAR +/ +&NAMOPH +/ +&NAMOPTCMEM +/ +&NAMPARAR +/ +&NAMPHY +/ +&NAMPHY0 +/ +&NAMPHY1 +/ +&NAMPHY2 +/ +&NAMPHY3 +/ +&NAMPHYDS +/ +&NAMPONG +/ +&NAMRAD15 +/ +&NAMRADCMEM +/ +&NAMRCOEF +/ +&NAMRINC +/ +&NAMRIP +/ +&NAMSATS +/ +&NAMSCC +/ +&NAMSCEN +/ +&NAMSCM +/ +&NAMSENS +/ +&NAMSIMPHL +/ +&NAMSKF +/ +&NAMSPSDT +/ +&NAMSPP +/ +&NAMSSMI +/ +&NAMSTA +/ +&NAMSTOPH +/ +&NAMTCWV +/ +&NAMTESTVAR +/ +&NAMTOPH +/ +&NAMTOVS +/ +&NAMTRAJP +/ +&NAMTRANS +/ +&NAMTRM +/ +&NAMVAR +/ +&NAMVARBC +/ +&NAMVARBC_AIREP +/ +&NAMVARBC_ALLSKY +/ +&NAMVARBC_GBRAD +/ +&NAMVARBC_RAD +/ +&NAMVARBC_SFCOBS +/ +&NAMVARBC_TCWV +/ +&NAMVARBC_TO3 +/ +&NAMVAREPS +/ +&NAMVDOZ +/ +&NAMVFP +/ +&NAMVRTL +/ +&NAMVV0 +/ +&NAMVV1 +/ +&NAMVV2 +/ +&NAMVWRK +/ +&NAMWAVELETJB +/ +&NAMXFU +/ +&NAMZDI +/ +&NAPHLC +/ +&NAV1IS +/ +&NAEPHLI +/ +&NAMCVER +/ +&NAMPPVI +/ +&NAMSPNG +/ +&NAMRLX +/ +&NAMTHLIM +/ +&NAMOOPS +/ +&NAMINTFLEX +/ +&NAMIAU +/ +&NAMDIM_TRAJ +/ +&NAMVDF +/ +&NAMGWDIAG +/ +&NAMTRANS0 +/ +&NAMMETHOX +/ +&NAM_ATLAS_IFS +/ +&NAETLDIAG +/ + +! vi:syntax=fortran diff --git a/namelists/oifs/43r3/awicm3/master/wam_namelist b/namelists/oifs/43r3/awicm3/master/wam_namelist new file mode 100644 index 000000000..be4a4dce4 --- /dev/null +++ b/namelists/oifs/43r3/awicm3/master/wam_namelist @@ -0,0 +1,106 @@ +&NALINE + CLHEADER = ' WAVE MODEL ' + CBPLTDT = '20000101000000' + CEPLTDT = '00000000000000' + CDATEF = '20000101000000' + IDELPRO = 900 + IDELT = 900 + IDELWO = 900 + IDELWI = 900 + IDELALT = 0 + CDATECURA = '20000101000000' + IDELCUR = 0 + CLOTSU(1:7) = 'H', 'H', 'H', 'H', 'H', 'H', 'H' + IDELINT = 6 + IDELINS = 6 + IDELSPT = 6 + IDELRES = 240 + CDATER = '00000000000000' + CDATES = '00000000000000' + LSECONDORDER = .true. + FFLAG(17) = .false. + PFLAG(1:46) = .false., , .false., , , .false., .false., .false., , .false., + , , , , , , , , , , , , , , .false., , , , , , , , , , + , , .false., , , , , , , .false., , .false. + LFDBIOOUT = .true. + LFDB = .true. + NWRTOUTWAM = 12 + ISHALLO = 0 + ALPHAPMAX = 0.03 + ISNONLIN = 0 + IDAMPING = 1 + LBIWBK = .true. + IPROPAGS = 2 + LSUBGRID = .true. + IREFRA = 0 + LICERUN = .true. + LMASKICE = .true. + LICETH = .false. + LLUNSTR = .false. + ITEST = 0 + ITESTB = 1 + IREST = 0 + IASSI = 0 + YCLASS = 'rd' + NLOCGRB = 1 + ISTREAM = 1045 + YEXPVER = 'h6mv' + NENSFNB = 0 + NTOTENS = 0 + NCONSENSUS = 0 + NNCEP = 0 + NMFR = 0 + NDWD = 0 + NUKM = 0 + LMESSPASS = .true. + LWCOU = .true. + LWNEMOCOU = .false. + LWNEMOCOUDEBUG = .false. + LRSTINFDAT = .false. + LSMSSIG_WAM = .true. + CPATH = './' + CFDBSF = './' + CFDB2DSP = './' + LGRIBIN = .true. + LGRIBOUT = .true. + LNOCDIN = .false. + IBUFRSAT(1:7) = 1, 2, 60, 260, 261, 47, 441 + CSATNAME(1:7) = 'ERS-1', 'ERS-2', 'ENVISAT', 'JASON-1', 'JASON-2', 'CRYOSAT-2', + 'ALTIKA' + LALTPAS(1:7) = .false., .false., .false., .false., .false., .false., + .false. + LALTCOR(1:4) = .true., .true., , .false. + XKAPPA2(1:4) = 0.084, 0.09, , 0.09 + LALTGRDOUT(1:7) = .true., .true., .true., .true., .true., .true., .true. + ALTSDTHRSH(1:2) = 1.0, 1.0 + HSALTCUT(1:7) = 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1 + ALTBGTHRSH(4) = 2.0 + L4VTYPE = .false. + LWAMANOUT = .true. + LFRSTFLD = .false. + LALTAS = .false. + LSARAS = .false. + LSARINV = .false. + IREFDATE = 0 + NSYSNB = -1 + LGUST = .true. + LADEN = .true. + LLWSWAVE = .false. + LLWDWAVE = .false. + LLSOURCE = .true. + LNSESTART = .false. + LRELWIND = .true. + NMETNB = -1 + LL1D = .false. + NPROMA_WAM = 24 + LWCOUNORMS = .false. + SWAMPWIND = 18.45 + SWAMPWIND2 = 0.0 + DTNEWWIND = 0.0 + LTURN90 = .false. + SWAMPCIFR = 0.0 + LGRHDIFS = .true. + LNEWLVTP = .false. + LODBRALT = .false. + GFLAG(:) = .false. +/ diff --git a/namelists/oifs/43r3/fort.4 b/namelists/oifs/43r3/fort.4 index 9edf18cea..4742995d8 100644 --- a/namelists/oifs/43r3/fort.4 +++ b/namelists/oifs/43r3/fort.4 @@ -154,21 +154,27 @@ YA_NL%LGP=true, YO3_NL%LGP=true, / &NAMFPC -CFPFMT="MODEL", -NFP3DFS=0, -NFP3DFT=0, -NFP3DFV=0, -NFP2DF=2, -MFP2DF=129,152, ! z,lnsp -NFP3DFP=6, -MFP3DFP=131,132,130,133,135,129 !! u,v,t,q,w,zh on pressure levels -NFPPHY=34, -MFPPHY(:)=167,235,151,134,165, 166,168,228,144,143, 182,44,180,181,146, 147,175,176,169,177, 210,211,164,212,178, 179,208,209,78,79, 205,206,151131,151132 -RFP3P(:)=100000.0,92500.0,85000.0,50000.0,30000.0,10000.0,5000.0,1000.0,500.0,100.0,50.0,10.0, -NFPCLI=0, -LFPQ=false, -LTRACEFP=false, -RFPCORR=60000., +CFPFMT = 'MODEL' +NFP3DFS = 10 +MFP3DFS = 133, 75, 76, 246, 247, 248, 138, 155, 130, 203 +NRFP3S = -99 +NFP2DF = 2 +MFP2DF = 152, 129 +MFP3DFP = 75, 76, 246, 247, 248, 138, 155, 130, 133, 203 +MFPPHY = 15, 16, 17, 18, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, + 42, 43, 66, 67, 74 139, 141, 148, 160, 161, + 162, 163, 170, 172, 173, 174, 183, 198, 234, 235, + 236, 238, 228008, 228009, 228010, 228011, 228012, 228013, 228014, 228007 +NFP3DFP = 10 +NFPPHY = 50 +RFP3P = 85000.0, 50000.0, 5000.0 +NFP3DFT = 0 +NFP3DFV = 0 +NFPCLI = 0 +LFPQ = .false. +LTRACEFP = .false. +RFPCORR = 60000.0 / &NAMFPD NLAT=400, diff --git a/namelists/oifs/43r3/xios/TCO1279_DART/axis_def.xml b/namelists/oifs/43r3/xios/TCO1279_DART/axis_def.xml new file mode 100644 index 000000000..334b9bb8b --- /dev/null +++ b/namelists/oifs/43r3/xios/TCO1279_DART/axis_def.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/namelists/oifs/43r3/xios/TCO1279_DART/context_ifs.xml b/namelists/oifs/43r3/xios/TCO1279_DART/context_ifs.xml new file mode 100644 index 000000000..df526436e --- /dev/null +++ b/namelists/oifs/43r3/xios/TCO1279_DART/context_ifs.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + false + false + + + + -3 + -3 + + + + 2 + 2 + 2 + + + + 0 + false + false + 60000.0 + + + diff --git a/namelists/oifs/43r3/xios/TCO1279_DART/domain_def.xml b/namelists/oifs/43r3/xios/TCO1279_DART/domain_def.xml new file mode 100644 index 000000000..971951c2c --- /dev/null +++ b/namelists/oifs/43r3/xios/TCO1279_DART/domain_def.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/namelists/oifs/43r3/xios/TCO1279_DART/field_def.xml b/namelists/oifs/43r3/xios/TCO1279_DART/field_def.xml new file mode 100644 index 000000000..c31e980ca --- /dev/null +++ b/namelists/oifs/43r3/xios/TCO1279_DART/field_def.xml @@ -0,0 +1,277 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/namelists/oifs/43r3/xios/TCO1279_DART/file_def.xml b/namelists/oifs/43r3/xios/TCO1279_DART/file_def.xml new file mode 100644 index 000000000..ec82f96fa --- /dev/null +++ b/namelists/oifs/43r3/xios/TCO1279_DART/file_def.xml @@ -0,0 +1,317 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/namelists/oifs/43r3/xios/TCO1279_DART/grid_def.xml b/namelists/oifs/43r3/xios/TCO1279_DART/grid_def.xml new file mode 100644 index 000000000..4e314a0c8 --- /dev/null +++ b/namelists/oifs/43r3/xios/TCO1279_DART/grid_def.xml @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/namelists/oifs/43r3/xios/TCO1279_DART/iodef.xml b/namelists/oifs/43r3/xios/TCO1279_DART/iodef.xml new file mode 100644 index 000000000..d34b854b0 --- /dev/null +++ b/namelists/oifs/43r3/xios/TCO1279_DART/iodef.xml @@ -0,0 +1,29 @@ + + + + + + + + true + 50 + 1 + false + 0.5 + + + + performance + 2.0 + + + + true + true + oifs + 50 + true + + + + diff --git a/namelists/oifs/43r3/xios/TCO319_DART/iodef.xml b/namelists/oifs/43r3/xios/TCO319_DART/iodef.xml index 8680c2284..d34b854b0 100644 --- a/namelists/oifs/43r3/xios/TCO319_DART/iodef.xml +++ b/namelists/oifs/43r3/xios/TCO319_DART/iodef.xml @@ -5,16 +5,16 @@ - false + true 50 - 2 + 1 false 0.5 performance - 1.0 + 2.0 diff --git a/namelists/oifs/43r3/xios/TCO639_DART/iodef.xml b/namelists/oifs/43r3/xios/TCO639_DART/iodef.xml index 8680c2284..d34b854b0 100644 --- a/namelists/oifs/43r3/xios/TCO639_DART/iodef.xml +++ b/namelists/oifs/43r3/xios/TCO639_DART/iodef.xml @@ -5,16 +5,16 @@ - false + true 50 - 2 + 1 false 0.5 performance - 1.0 + 2.0 diff --git a/namelists/oifs/43r3/xios/TCO639_ROS2/axis_def.xml b/namelists/oifs/43r3/xios/TCO639_ROS2/axis_def.xml new file mode 100644 index 000000000..334b9bb8b --- /dev/null +++ b/namelists/oifs/43r3/xios/TCO639_ROS2/axis_def.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/namelists/oifs/43r3/xios/TCO639_ROS2/context_ifs.xml b/namelists/oifs/43r3/xios/TCO639_ROS2/context_ifs.xml new file mode 100644 index 000000000..e3724c1c0 --- /dev/null +++ b/namelists/oifs/43r3/xios/TCO639_ROS2/context_ifs.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + false + false + + + + -6 + -6 + + + + 2 + 2 + 2 + + + + 0 + false + false + 60000.0 + + + diff --git a/namelists/oifs/43r3/xios/TCO639_ROS2/domain_def.xml b/namelists/oifs/43r3/xios/TCO639_ROS2/domain_def.xml new file mode 100644 index 000000000..6e8fff308 --- /dev/null +++ b/namelists/oifs/43r3/xios/TCO639_ROS2/domain_def.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/namelists/oifs/43r3/xios/TCO639_ROS2/field_def.xml b/namelists/oifs/43r3/xios/TCO639_ROS2/field_def.xml new file mode 100644 index 000000000..c31e980ca --- /dev/null +++ b/namelists/oifs/43r3/xios/TCO639_ROS2/field_def.xml @@ -0,0 +1,277 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/namelists/oifs/43r3/xios/TCO639_ROS2/file_def.xml b/namelists/oifs/43r3/xios/TCO639_ROS2/file_def.xml new file mode 100644 index 000000000..0e8c259ee --- /dev/null +++ b/namelists/oifs/43r3/xios/TCO639_ROS2/file_def.xml @@ -0,0 +1,315 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/namelists/oifs/43r3/xios/TCO639_ROS2/grid_def.xml b/namelists/oifs/43r3/xios/TCO639_ROS2/grid_def.xml new file mode 100644 index 000000000..4e314a0c8 --- /dev/null +++ b/namelists/oifs/43r3/xios/TCO639_ROS2/grid_def.xml @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/namelists/oifs/43r3/xios/TCO639_ROS2/iodef.xml b/namelists/oifs/43r3/xios/TCO639_ROS2/iodef.xml new file mode 100644 index 000000000..d34b854b0 --- /dev/null +++ b/namelists/oifs/43r3/xios/TCO639_ROS2/iodef.xml @@ -0,0 +1,29 @@ + + + + + + + + true + 50 + 1 + false + 0.5 + + + + performance + 2.0 + + + + true + true + oifs + 50 + true + + + + diff --git a/namelists/oifs/43r3/xios/TCO639_SO3/axis_def.xml b/namelists/oifs/43r3/xios/TCO639_SO3/axis_def.xml new file mode 100644 index 000000000..334b9bb8b --- /dev/null +++ b/namelists/oifs/43r3/xios/TCO639_SO3/axis_def.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/namelists/oifs/43r3/xios/TCO639_SO3/context_ifs.xml b/namelists/oifs/43r3/xios/TCO639_SO3/context_ifs.xml new file mode 100644 index 000000000..e3724c1c0 --- /dev/null +++ b/namelists/oifs/43r3/xios/TCO639_SO3/context_ifs.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + false + false + + + + -6 + -6 + + + + 2 + 2 + 2 + + + + 0 + false + false + 60000.0 + + + diff --git a/namelists/oifs/43r3/xios/TCO639_SO3/domain_def.xml b/namelists/oifs/43r3/xios/TCO639_SO3/domain_def.xml new file mode 100644 index 000000000..6e8fff308 --- /dev/null +++ b/namelists/oifs/43r3/xios/TCO639_SO3/domain_def.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/namelists/oifs/43r3/xios/TCO639_SO3/field_def.xml b/namelists/oifs/43r3/xios/TCO639_SO3/field_def.xml new file mode 100644 index 000000000..c31e980ca --- /dev/null +++ b/namelists/oifs/43r3/xios/TCO639_SO3/field_def.xml @@ -0,0 +1,277 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/namelists/oifs/43r3/xios/TCO639_SO3/file_def.xml b/namelists/oifs/43r3/xios/TCO639_SO3/file_def.xml new file mode 100644 index 000000000..0e8c259ee --- /dev/null +++ b/namelists/oifs/43r3/xios/TCO639_SO3/file_def.xml @@ -0,0 +1,315 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/namelists/oifs/43r3/xios/TCO639_SO3/grid_def.xml b/namelists/oifs/43r3/xios/TCO639_SO3/grid_def.xml new file mode 100644 index 000000000..4e314a0c8 --- /dev/null +++ b/namelists/oifs/43r3/xios/TCO639_SO3/grid_def.xml @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/namelists/oifs/43r3/xios/TCO639_SO3/iodef.xml b/namelists/oifs/43r3/xios/TCO639_SO3/iodef.xml new file mode 100644 index 000000000..d34b854b0 --- /dev/null +++ b/namelists/oifs/43r3/xios/TCO639_SO3/iodef.xml @@ -0,0 +1,29 @@ + + + + + + + + true + 50 + 1 + false + 0.5 + + + + performance + 2.0 + + + + true + true + oifs + 50 + true + + + + diff --git a/namelists/oifs/43r3/xios/TCO639_jane/axis_def.xml b/namelists/oifs/43r3/xios/TCO639_jane/axis_def.xml new file mode 100644 index 000000000..334b9bb8b --- /dev/null +++ b/namelists/oifs/43r3/xios/TCO639_jane/axis_def.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/namelists/oifs/43r3/xios/TCO639_jane/context_ifs.xml b/namelists/oifs/43r3/xios/TCO639_jane/context_ifs.xml new file mode 100644 index 000000000..e3724c1c0 --- /dev/null +++ b/namelists/oifs/43r3/xios/TCO639_jane/context_ifs.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + false + false + + + + -6 + -6 + + + + 2 + 2 + 2 + + + + 0 + false + false + 60000.0 + + + diff --git a/namelists/oifs/43r3/xios/TCO639_jane/domain_def.xml b/namelists/oifs/43r3/xios/TCO639_jane/domain_def.xml new file mode 100644 index 000000000..6e8fff308 --- /dev/null +++ b/namelists/oifs/43r3/xios/TCO639_jane/domain_def.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/namelists/oifs/43r3/xios/TCO639_jane/field_def.xml b/namelists/oifs/43r3/xios/TCO639_jane/field_def.xml new file mode 100644 index 000000000..c31e980ca --- /dev/null +++ b/namelists/oifs/43r3/xios/TCO639_jane/field_def.xml @@ -0,0 +1,277 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/namelists/oifs/43r3/xios/TCO639_jane/file_def.xml b/namelists/oifs/43r3/xios/TCO639_jane/file_def.xml new file mode 100644 index 000000000..0e8c259ee --- /dev/null +++ b/namelists/oifs/43r3/xios/TCO639_jane/file_def.xml @@ -0,0 +1,315 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/namelists/oifs/43r3/xios/TCO639_jane/grid_def.xml b/namelists/oifs/43r3/xios/TCO639_jane/grid_def.xml new file mode 100644 index 000000000..4e314a0c8 --- /dev/null +++ b/namelists/oifs/43r3/xios/TCO639_jane/grid_def.xml @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/namelists/oifs/43r3/xios/TCO639_jane/iodef.xml b/namelists/oifs/43r3/xios/TCO639_jane/iodef.xml new file mode 100644 index 000000000..d34b854b0 --- /dev/null +++ b/namelists/oifs/43r3/xios/TCO639_jane/iodef.xml @@ -0,0 +1,29 @@ + + + + + + + + true + 50 + 1 + false + 0.5 + + + + performance + 2.0 + + + + true + true + oifs + 50 + true + + + + diff --git a/namelists/oifs/43r3/xios/TCO95_CORE2/axis_def.xml b/namelists/oifs/43r3/xios/TCO95_CORE2/axis_def.xml index 334b9bb8b..498f23766 100644 --- a/namelists/oifs/43r3/xios/TCO95_CORE2/axis_def.xml +++ b/namelists/oifs/43r3/xios/TCO95_CORE2/axis_def.xml @@ -9,8 +9,7 @@ - - + diff --git a/namelists/oifs/43r3/xios/master/axis_def_oifs.xml b/namelists/oifs/43r3/xios/master/axis_def_oifs.xml new file mode 100644 index 000000000..498f23766 --- /dev/null +++ b/namelists/oifs/43r3/xios/master/axis_def_oifs.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/namelists/oifs/43r3/xios/master/context_oifs.xml b/namelists/oifs/43r3/xios/master/context_oifs.xml new file mode 100644 index 000000000..81ae4c2db --- /dev/null +++ b/namelists/oifs/43r3/xios/master/context_oifs.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + false + false + + + + -6 + -6 + + + + 2 + 2 + 2 + + + + 0 + false + false + 60000.0 + + + + + diff --git a/namelists/oifs/43r3/xios/master/domain_def_oifs.xml b/namelists/oifs/43r3/xios/master/domain_def_oifs.xml new file mode 100644 index 000000000..534ded4ee --- /dev/null +++ b/namelists/oifs/43r3/xios/master/domain_def_oifs.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/namelists/oifs/43r3/xios/master/field_def_oifs_cmip6.xml b/namelists/oifs/43r3/xios/master/field_def_oifs_cmip6.xml new file mode 100644 index 000000000..fad639b31 --- /dev/null +++ b/namelists/oifs/43r3/xios/master/field_def_oifs_cmip6.xml @@ -0,0 +1,304 @@ + + + + + + + + + + @tas_min + + + + + @tas_max + + + + + + + + + + tisr/3600 + + + + (tisr-tsr)/3600 + + + + -ttr/3600 + + + + + + sqrt(sfcWind_u*sfcWind_u + sfcWind_v*sfcWind_v) + + + + + @sfcWind_max + + + + 1000.0 * sd / rsn + + + + (sd>0.0)?asn:$missing_value + + + + (sd>0.0)?tsn:$missing_value + + + + -sshf/3600 + + + + -slhf/3600 + + + + 100*tcc + + + + 1000*tp/3600 + + + + + + 100*exp(17.62*((d2m-273.15)/(d2m-30.03)-(t2m-273.15)/(t2m-30.03))) + + + + + + + + -1000*e/3600 + + + + ewss/3600 + + + + nsss/3600 + + + + sqrt(ewss*ewss + nsss*nsss)/3600 + + + + + + + + + + + + + + + + z_pl/9.81 + + + + + diff --git a/namelists/oifs/43r3/xios/master/field_def_oifs_noncmip6.xml b/namelists/oifs/43r3/xios/master/field_def_oifs_noncmip6.xml new file mode 100644 index 000000000..6e553fa71 --- /dev/null +++ b/namelists/oifs/43r3/xios/master/field_def_oifs_noncmip6.xml @@ -0,0 +1,113 @@ + + + + + + + + ssr/3600 + + + + str/3600 + + + + tsr/3600 + + + + ttr/3600 + + + + tsrc/3600 + + + + ttrc/3600 + + + + + + 100*hcc + + + + 100*mcc + + + + 100*lcc + + + + + diff --git a/namelists/oifs/43r3/xios/master/field_def_oifs_raw.xml b/namelists/oifs/43r3/xios/master/field_def_oifs_raw.xml new file mode 100644 index 000000000..ae8fe7ca8 --- /dev/null +++ b/namelists/oifs/43r3/xios/master/field_def_oifs_raw.xml @@ -0,0 +1,287 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/namelists/oifs/43r3/xios/master/file_def_oifs_default.xml b/namelists/oifs/43r3/xios/master/file_def_oifs_default.xml new file mode 100644 index 000000000..97261a1d2 --- /dev/null +++ b/namelists/oifs/43r3/xios/master/file_def_oifs_default.xml @@ -0,0 +1,144 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/namelists/oifs/43r3/xios/master/file_def_oifs_orig.xml b/namelists/oifs/43r3/xios/master/file_def_oifs_orig.xml new file mode 100644 index 000000000..b64dc09ea --- /dev/null +++ b/namelists/oifs/43r3/xios/master/file_def_oifs_orig.xml @@ -0,0 +1,160 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/namelists/oifs/43r3/xios/master/grid_def_oifs.xml b/namelists/oifs/43r3/xios/master/grid_def_oifs.xml new file mode 100644 index 000000000..4e314a0c8 --- /dev/null +++ b/namelists/oifs/43r3/xios/master/grid_def_oifs.xml @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/namelists/oifs/43r3/xios/master/iodef.xml b/namelists/oifs/43r3/xios/master/iodef.xml new file mode 100644 index 000000000..c282c23b6 --- /dev/null +++ b/namelists/oifs/43r3/xios/master/iodef.xml @@ -0,0 +1,30 @@ + + + + + + + + 5 + false + + performance + 2.0 + true + true + true + 50 + 1 + false + 0.5 + + + false + OpenIFS + + + + + + + diff --git a/runscripts/CI/awiesm/albedo/pi.yaml b/runscripts/CI/awiesm/albedo/pi.yaml new file mode 100644 index 000000000..097fbf118 --- /dev/null +++ b/runscripts/CI/awiesm/albedo/pi.yaml @@ -0,0 +1,47 @@ +general: + account: 'computing.computing' + setup_name: "awiesm" + compute_time: "00:20:00" + initial_date: "1850-01-01T00:00:00" # Initial exp. date + final_date: "1850-04-01T00:00:00" # Final date of the experiment + project_base: !ENV ${PROJECT_BASE} + base_dir: "${general.project_base}/experiments" + nmonth: 1 + nyear: 0 + with_wiso: False + use_venv: False + clean_old_rundirs_except: 2 + clean_old_rundirs_keep_every: 25 + version: "2.1" + # Why is this twice?? + model_dir: "${general.project_base}/model_codes/awiesm-2.1" + description: > + Basic AWIESM Test for PI + +awiesm: + postprocessing: false + # Why is this twice?? + model_dir: "${general.project_base}/model_codes/awiesm-2.1" + +echam: + restart_rate: 1 + restart_unit: "months" + input_sources: + jansurf: "/albedo/pool/FESOM/meshes_default/core/tarfilesT63/input/echam6/T63CORE2_jan_surf.nc" + vgratclim: "/albedo/pool/FESOM/meshes_default/core/tarfilesT63/input/echam6/T63CORE2_VGRATCLIM.nc" + vltclim: "/albedo/pool/FESOM/meshes_default/core/tarfilesT63/input/echam6/T63CORE2_VLTCLIM.nc" +jsbach: + input_sources: + jsbach_1850: "/albedo/pool/FESOM/meshes_default/core/tarfilesT63/input/jsbach/jsbach_T63CORE2_11tiles_5layers_1850.nc" + +fesom: + restart_rate: 1 + restart_unit: "m" + restart_first: 1 + namelist_dir: "${general.project_base}/model_codes/awiesm-2.1/fesom-2.1/config" + mesh_dir: "/albedo/pool/FESOM/fesom2.0/meshes/mesh_CORE2_final/" + namelist_changes: + namelist.config: + geometry: + force_rotation: false + diff --git a/runscripts/awicm/awicm-mistral-initial-monthly.run b/runscripts/awicm/awicm-mistral-initial-monthly.run deleted file mode 100755 index 606079dbd..000000000 --- a/runscripts/awicm/awicm-mistral-initial-monthly.run +++ /dev/null @@ -1,47 +0,0 @@ -#! /bin/ksh -l -set -e - - -setup_name="awicm" -#check=1 - -account=ab0995 -compute_time="00:25:00" -############################################################################### - -INITIAL_DATE_awicm=2000-01-01 # Initial exp. date -FINAL_DATE_awicm=2000-02-01 # Final date of the experiment - -awicm_VERSION="CMIP6" -POST_PROCESSING_awicm=0 -SCENARIO_awicm="PI-CTRL" - -RES_fesom=CORE2 - -MODEL_DIR_awicm=${HOME}/esm-master/awicm-test/ - -BASE_DIR=/work/ab0995/a270058/esm_yaml_test/ - -POOL_DIR_fesom=/work/bm0944/input/ - -MESH_DIR_fesom=/pool/data/AWICM/FESOM1/MESHES/core/ - -NYEAR_awicm=0 # Number of years per run -NMONTH_awicm=1 # Number of months per run - -LRESUME_echam=0 -LRESUME_fesom=0 -LRESUME_oasis3mct=0 - -RESTART_RATE_fesom=1 -RESTART_FIRST_fesom=1 -RESTART_UNIT_fesom='m' - - - -further_reading_fesom="fesom_output_control.yaml" - - -############################################################################### -load_all_functions -general_do_it_all $@ diff --git a/runscripts/awicm/awicm-mistral-restart-LGM_BoundaryConditions.run b/runscripts/awicm/awicm-mistral-restart-LGM_BoundaryConditions.run deleted file mode 100755 index 7afc2651c..000000000 --- a/runscripts/awicm/awicm-mistral-restart-LGM_BoundaryConditions.run +++ /dev/null @@ -1,101 +0,0 @@ -#! /bin/ksh -l -set -e - -module purge - -export FUNCTION_PATH=${HOME}/esm-master/esm-runscripts/functions/all -export FPATH=$FUNCTION_PATH - -machine_name=mistral -setup_name="awicm" # mpiesm, pism_mpiesm, echam. mpiom, or pism -ACCOUNT=ab0246 -check=0 # run job in check mode, without submitting and / or launching - - -# the executable. Set to 0 to turn off -#compute_time="00:20:00" # this will cause walltime barriers, bu the job should start right away... -compute_time="03:00:00" -post_time="01:00:00" -ESM_USE_C_CALENDAR=1 -############################################################################### -awicm_VERSION="1.1" -MODEL_DIR_awicm=${HOME}/esm-master/awicm-test/ - - -########################## -## GENERAL SECTION ####### -########################## -expid="LGM_TEST" - -BASE_DIR=/work/ba0989/a270077/esm_tools_dev - -INITIAL_DATE=1850-01-01 # initial exp. date -FINAL_DATE=1852-01-01 # final date of the experiment - - -NYEAR_echam=1 # number of years per run -NMONTH_echam=0 - - -########################## -## ECHAM/JSBACH SECTION ## -########################## -RES_echam=T63 -SCENARIO_echam=PALEO - -echam_DATASET=r0007 -jsbach_DATASET=r0009 - -#BIN_DIR_echam=${HOME}/esm-master/echam-test/bin - -# if you want to start from echam restarts, use: -LRESUME_echam=1 -INI_RESTART_DIR_echam=/work/ab0246/a270064/esm-experiments/lgm_anm/restart/echam -INI_PARENT_DATE_echam=39281231 #, for example 24001231235640 -INI_PARENT_EXP_ID_echam=lgm_anm # of spinup experiment, for example TST - -nproca_echam=12 -nprocb_echam=24 - -INI_RESTART_DIR_jsbach=/work/ab0246/a270064/esm-experiments/lgm_anm/restart/jsbach -INI_RESTART_DIR_hdmodel=/work/ab0246/a270064/esm-experiments/lgm_anm/restart/hdmodel - -JAN_SURF_echam=/work/ab0246/a270064/esm-experiments/lgm_anm/input/echam/T63LGM_jan_surf.nc -VGRATCLIM_echam=/work/ab0246/a270064/esm-experiments/lgm_anm/input/echam/T63LGM_VGRATCLIM.nc -VLTCLIM_echam=/work/ab0246/a270064/esm-experiments/lgm_anm/input/echam/T63LGM_VLTCLIM.nc - -HDPARA_FILE_hdmodel=/work/ab0246/a270064/esm-experiments/lgm_anm/input/hdmodel/hdpara.nc -LAND_BOUNDARY_CONDITIONS_jsbach=/work/ab0246/a270064/esm-experiments/lgm_anm/input/jsbach/jsbach_T63LGM_11tiles_5layers_1850.nc -DYNVEG_jsbach=dynveg - -CO2_echam=190.0e-6 -CH4_echam=0.375e-6 -N2O_echam=0.200e-6 -CECC_echam=0.018994 -COBLD_echam=22.949 -CLONP_echam=294.42 -DISTURBED_YEARS_echam='1894' -DISTURBANCE_echam=1.00001 - -################### -## FESOM SECTION ## -################### - -RES_fesom=LGM -MESH_DIR_fesom=/mnt/lustre02/work/ba0989/a270077/FESOM_meshes/CORE2_LGM - -INI_RESTART_DIR_fesom=/work/ab0246/a270064/esm-experiments/lgm_anm/restart/fesom -INI_PARENT_DATE_fesom=39281231 #, for example 24001231235640 - -RESTART_RATE_fesom=1 -RESTART_FIRST_fesom=1 -RESTART_UNIT_fesom='y' - - - -further_reading_fesom="fesom_output_control.yaml" -############################################################################### - - -load_all_functions -general_do_it_all $@ diff --git a/runscripts/awicm/awicm-ollie-initial-monthly.run b/runscripts/awicm/awicm-ollie-initial-monthly.run deleted file mode 100755 index 21ed5b415..000000000 --- a/runscripts/awicm/awicm-ollie-initial-monthly.run +++ /dev/null @@ -1,45 +0,0 @@ -#! /bin/ksh -l -set -e - - -setup_name="awicm" -#check=1 - -account=ab0995 -compute_time="00:15:00" -############################################################################### - -INITIAL_DATE_awicm=2000-01-01 # Initial exp. date -FINAL_DATE_awicm=2000-02-29 # Final date of the experiment - -awicm_VERSION="CMIP6" -POST_PROCESSING_awicm=0 -SCENARIO_awicm="PI-CTRL" - -RES_fesom=CORE2 - -MODEL_DIR_awicm=/work/ollie/dbarbi/modelcodes/awicm-CMIP6/ -BASE_DIR=/work/ollie/dbarbi/esm_yaml_test/ - -POOL_DIR_fesom=/work/ollie/pool/FESOM/ -MESH_DIR_fesom=/work/ollie/pool/FESOM/meshes_default/core/ - -NYEAR_awicm=0 # Number of years per run -NMONTH_awicm=1 # Number of months per run - -LRESUME_echam=0 -LRESUME_fesom=0 -LRESUME_oasis3mct=0 - -RESTART_RATE_fesom=1 -RESTART_FIRST_fesom=1 -RESTART_UNIT_fesom='m' - - - -further_reading_fesom="fesom_output_control.yaml" - - -############################################################################### -load_all_functions -general_do_it_all $@ diff --git a/runscripts/awicm/awicm1-CMIP6-initial-daily.yaml b/runscripts/awicm/awicm1-CMIP6-initial-daily.yaml new file mode 100644 index 000000000..8abdcab29 --- /dev/null +++ b/runscripts/awicm/awicm1-CMIP6-initial-daily.yaml @@ -0,0 +1,90 @@ +general: + setup_name: 'awicm' + account: ab0995 #!ENV ${ACCOUNT} + compute_time: "00:30:00" + initial_date: "1850-01-03" + final_date: "1850-01-04" + base_dir: !ENV ${WORKCD} #${ESM_TESTING_DIR} + nyear: 0 + nmonth: 0 + nday: 1 + lresume: false + ini_restart_exp_id: i971_awi1 + ini_restart_dir: /work/ab0995/a270152/i971_awi1/restart/ + +awicm: + version: "CMIP6" + scenario: "PI-CTRL" + post_processing: 0 + model_dir: /work/ab0995/a270152/model_codes/awicm-CMIP6/ #!ENV ${MODEL_DIR} + pool_dir: /pool/data/ + resolution: T127 + +fesom: + restart_rate: 1 + restart_unit: "d" + restart_first: 1 + + choose_computer.name: + levante: + rpool_dir: /work/ab0995/a270152/testing_pool/input/ + rmesh_dir: /work/ab0995/a270152/testing_pool/AWICM/FESOM1/MESHES/core/ + rproc: 384 + pool_dir: ${fesom.rpool_dir} + mesh_dir: ${fesom.rmesh_dir} + resolution: CORE2 + time_step: 450 + nproc: ${rproc} + + lresume: ${general.lresume} + ini_restart_exp_id: ${general.ini_restart_exp_id} + ini_restart_date: "${prev_date}" + ini_restart_dir: ${general.ini_restart_dir}/fesom/ + +echam: + restart_rate: 1 + restart_unit: "days" + restart_first: 1 + + scenario: "PI-CTRL" + resolution: T127 + levels: L95 + post_processing: False + lresume: ${general.lresume} + choose_computer.name: + levante: + nproca: 32 + nprocb: 32 + "*": + nproca: 24 + nprocb: 24 + time_step: 200 + + ini_restart_exp_id: ${general.ini_restart_exp_id} + ini_restart_date: "${prev_date}" + ini_restart_dir: ${general.ini_restart_dir}/echam/ + +jsbach: + dataset: r0009 + streams: + - jsbach + - jsbid + - yasso + - surf + - veg + remove_jsbach.forcing_files: + - a_nd_file + - lightning + - popdens + - LU + + lresume: ${general.lresume} + ini_restart_exp_id: ${general.ini_restart_exp_id} + ini_restart_date: "${prev_date}" + ini_restart_dir: ${general.ini_restart_dir}/jsbach/ + +oasis3mct: + lresume: ${general.lresume} + ini_restart_exp_id: ${general.ini_restart_exp_id} + ini_restart_date: "${prev_date}" + ini_restart_dir: ${general.ini_restart_dir}/oasis3mct/ diff --git a/runscripts/awicm/echam-mistral-restart-monthly.run b/runscripts/awicm/echam-mistral-restart-monthly.run deleted file mode 100755 index 68eb3c163..000000000 --- a/runscripts/awicm/echam-mistral-restart-monthly.run +++ /dev/null @@ -1,34 +0,0 @@ -#! /bin/ksh -l -set -e - - -setup_name="echam_standalone" -#check=1 - -account=ab0995 -compute_time="00:15:00" -############################################################################### - -INITIAL_DATE=2000-01-01 # Initial exp. date -FINAL_DATE=2000-02-29 # Final date of the experiment - -echam_VERSION="6.3.04p1" -POST_PROCESSING_echam=0 -SCENARIO_echam="PI-CTRL" - -RES_echam=T63 - -MODEL_DIR=/work/ab0995/a270058/modelcodes/echam-6.3.04p1// -BASE_DIR=/work/ab0995/a270058/esm_yaml_test/ - -NYEAR=0 # Number of years per run -NMONTH=1 # Number of months per run - -LRESUME_echam=1 -INI_RESTART_DIR_echam=/work/ab0246/a270064/esm-experiments/lgm_anm/restart/echam -INI_PARENT_DATE_echam=37991231 -INI_PARENT_EXP_ID_echam=lgm_anm - -############################################################################### -load_all_functions -general_do_it_all $@ diff --git a/runscripts/awicm/foci-mistral-initial_monthly.run b/runscripts/awicm/foci-mistral-initial_monthly.run deleted file mode 100755 index 6da9cdcaa..000000000 --- a/runscripts/awicm/foci-mistral-initial_monthly.run +++ /dev/null @@ -1,32 +0,0 @@ - -setup_name="foci" -compute_time="00:15:00" -account=ab0995 - -############################################################################### - -INITIAL_DATE=2000-01-01 # Initial exp. date -FINAL_DATE=2000-02-29 # Final date of the experiment - -foci_VERSION="1.0" -POST_PROCESSING_foci=0 -SCENARIO="PI-CTRL" - -RES_nemo=ORCA05 -RES_echam=T63 - -MODEL_DIR=/work/ab0995/a270058/modelcodes/foci-1.0/ -BASE_DIR=/work/ab0995/a270058/esm_yaml_test/ - -NYEAR=0 # Number of years per run -NMONTH=1 # Number of months per run - -LRESUME_echam=0 -LRESUME_nemo=0 -LRESUME_oasis3mct=0 - -RESTART_RATE_nemo=1 -RESTART_FIRST_nemo=1 -RESTART_UNIT_nemo='m' - -############################################################################### diff --git a/runscripts/awicm3/frontiers/awicm3-frontiers-aleph-TCO159L91-CORE2.yaml b/runscripts/awicm3/frontiers/awicm3-frontiers-aleph-TCO159L91-CORE2.yaml deleted file mode 100644 index ee7f9bed8..000000000 --- a/runscripts/awicm3/frontiers/awicm3-frontiers-aleph-TCO159L91-CORE2.yaml +++ /dev/null @@ -1,39 +0,0 @@ -general: - user: !ENV ${USER} - setup_name: "awicm3" - version: "frontiers" - account: "awiiccp" - compute_time: "00:30:00" - initial_date: "2000-01-01" - final_date: "2000-01-03" - base_dir: "/scratch/${user}/runtime/${general.setup_name}-${general.version}/" - nday: 1 - nmonth: 0 - nyear: 0 - -awicm3: - postprocessing: false - model_dir: "/home/${user}/model_codes/${general.setup_name}-${general.version}/" - -fesom: - resolution: "CORE2" - #pool_dir: "/work/ollie/jstreffi/input/fesom2/" - mesh_dir: "${pool_dir}/core2/" - restart_rate: 1 - restart_unit: "d" - restart_first: 1 - lresume: false - time_step: 1800 - nproc: 40 - -oifs: - lresume: false - time_step: 3600 - prepifs_expid: h9wu - input_expid: awi3 - wam: true - nproc: 80 - -oasis3mct: - lresume: false # Set to false to generate the rst files for first leg - time_step: 3600 diff --git a/runscripts/awicm3/frontiers/awicm3-frontiers-aleph-TCO319L137-DART.yaml b/runscripts/awicm3/frontiers/awicm3-frontiers-aleph-TCO319L137-DART.yaml deleted file mode 100644 index 79a732e83..000000000 --- a/runscripts/awicm3/frontiers/awicm3-frontiers-aleph-TCO319L137-DART.yaml +++ /dev/null @@ -1,56 +0,0 @@ -general: - setup_name: "awicm3" - version: "1.0-frontiers" - account: "awiiccp" - compute_time: "00:30:00" - initial_date: "1990-01-01" - final_date: "1990-01-02" - base_dir: "/scratch/awiiccp2/" - nday: 1 - nmonth: 0 - nyear: 0 - use_venv: false # This needs to be deleted as default so that the user gets the dialogue and takes action - -awicm3: - postprocessing: false - model_dir: /home/awiiccp2/esm/model_codes/awicm3-1.0-frontiers/ - -fesom: - ini_parent_exp_id: "D00" - ini_parent_date: "1989-12-31" - ini_parent_dir: "/scratch/awiiccp3/D00/" - resolution: "DART" - mesh_dir: /proj/awiiccp3/input/fesom2/dart/mesh/ - restart_rate: 1 - restart_unit: "d" - restart_first: 1 - lresume: false # don't forget to check! - namelist_changes: - namelist.config: - machine: - n_levels: 2 - n_part: [10, 72] - choose_general.run_number: - 1: - restart_in_sources: - oce_restart: /proj/awiiccp3/input/fesom2/restarts/DART/fesom.1989.oce.restart.nc - ice_restart: /proj/awiiccp3/input/fesom2/restarts/DART/fesom.1989.ice.restart.nc - namelist_dir: /home/awiiccp3/esm_tools/namelists/fesom2/awicm3/awicm-3-DART/ - time_step: 100 - nproc: 5760 - -oifs: - resolution: "TCO319" - levels: "L137" - prepifs_expid: a0iw - input_expid: awi3 - wam: true - lresume: false - time_step: 1800 - nproc: 600 - omp_num_threads: 2 - - -oasis3mct: - lresume: false # Set to false to generate the rst files for first leg - time_step: 3600 diff --git a/runscripts/awicm3/frontiers/awicm3-frontiers-aleph-TL159L60-CORE2.yaml b/runscripts/awicm3/frontiers/awicm3-frontiers-aleph-TL159L60-CORE2.yaml deleted file mode 100644 index 338026f10..000000000 --- a/runscripts/awicm3/frontiers/awicm3-frontiers-aleph-TL159L60-CORE2.yaml +++ /dev/null @@ -1,42 +0,0 @@ -general: - user: !ENV ${USER} - setup_name: "awicm3" - version: "frontiers" - compute_time: "00:30:00" - initial_date: "1990-01-01" - final_date: "1991-01-01" - base_dir: "/scratch/${user}/runtime/${general.setup_name}-${general.version}/" - nday: 1 - nmonth: 0 - nyear: 0 - -awicm3: - postprocessing: false - model_dir: "/home/${user}/model_codes/${general.setup_name}-${general.version}/" - -fesom: - resolution: "CORE2" - mesh_dir: "${pool_dir}/core2/" - #pool_dir: "/work/ollie/jstreffi/input/fesom2/" - restart_rate: 1 - restart_unit: "d" - restart_first: 1 - lresume: false - time_step: 2400 - nproc: 320 - -oifs: - resolution: "TL159" - levels: "L60" - prepifs_expid: h6mv - input_expid: awi3 - wam: false - lresume: false - time_step: 3600 - nproc: 160 - omp_num_threads: 4 - - -oasis3mct: - lresume: false # Set to false to generate the rst files for first leg - time_step: 7200 diff --git a/runscripts/awicm3/frontiers/awicm3-frontiers-juwels-TCO159L91-CORE2_inital.yaml b/runscripts/awicm3/frontiers/awicm3-frontiers-juwels-TCO159L91-CORE2_inital.yaml deleted file mode 100644 index 71f1594b3..000000000 --- a/runscripts/awicm3/frontiers/awicm3-frontiers-juwels-TCO159L91-CORE2_inital.yaml +++ /dev/null @@ -1,44 +0,0 @@ -general: - user: !ENV ${USER} - setup_name: "awicm3" - version: "frontiers" - account: "hhb19" - compute_time: "00:20:00" - initial_date: "2000-01-01" - final_date: "2000-01-03" - base_dir: "/p/scratch/chhb19/${user}/runtime/${general.setup_name}-${general.version}/" - nday: 1 - nmonth: 0 - nyear: 0 - -awicm3: - postprocessing: false - model_dir: "/p/project/chhb19/${user}/model_codes/${general.setup_name}-${general.version}/" - pool_dir: "/p/project/chhb19/jstreffi/input/" - -fesom: - resolution: "CORE2" - pool_dir: "/p/project/chhb19/jstreffi/input/fesom2/" - mesh_dir: "${pool_dir}/core2/" - restart_rate: 1 - restart_unit: "d" - restart_first: 1 - lresume: false - time_step: 2400 - nproc: 288 - -oifs: - resolution: "TCO159" - levels: "L91" - prepifs_expid: h9wu - input_expid: awi3 - wam: true - lresume: false - time_step: 3600 - nproc: 288 - omp_num_threads: 6 - -oasis3mct: - lresume: false # Set to false to generate the rst files for first leg - time_step: 7200 - use_lucia: true diff --git a/runscripts/awicm3/frontiers/awicm3-frontiers-juwels-TCO319L137-D3.yaml b/runscripts/awicm3/frontiers/awicm3-frontiers-juwels-TCO319L137-D3.yaml deleted file mode 100644 index d8bcd27fe..000000000 --- a/runscripts/awicm3/frontiers/awicm3-frontiers-juwels-TCO319L137-D3.yaml +++ /dev/null @@ -1,50 +0,0 @@ -general: - user: !ENV ${USER} - setup_name: "awicm3" - version: "frontiers" - account: "hhb19" - compute_time: "08:00:00" - initial_date: "1990-01-01" - final_date: "1990-01-03" - base_dir: "/p/scratch/chhb19/${user}/runtime/${general.setup_name}-${general.version}/" - nday: 1 - nmonth: 0 - nyear: 0 - -awicm3: - postprocessing: false - model_dir: "/p/project/chhb19/${user}/model_codes/${general.setup_name}-${general.version}/" - pool_dir: "/p/project/chhb19/jstreffi/input/" - -fesom: - resolution: "D3" - pool_dir: "/p/project/chhb19/jstreffi/input/fesom2/" - mesh_dir: "/p/project/chhb19/jstreffi/input/fesom2/D3/" - restart_rate: 1 - restart_unit: "d" - restart_first: 1 - lresume: true - ini_parent_exp_id: "placeholder" - ini_parent_date: "1989-12-31" - ini_parent_dir: "/p/project/chhb19/hegewald1/fesom_restarts/D3/" - time_step: 400 - nproc: 576 - -oifs: - resolution: "TCO319" - levels: "L137" - prepifs_expid: a0iw - input_expid: awi3 - wam: true - lresume: false - time_step: 450 - nproc: 576 - omp_num_threads: 2 - -oasis3mct: - lresume: false # Set to false to generate the rst files for first leg - time_step: 3600 - use_lucia: true -# choose_lresume: -# false: -# remove_input_files: ['rmp'] diff --git a/runscripts/awicm3/frontiers/awicm3-frontiers-juwels-TCO319L137-D3_coldstart.yaml b/runscripts/awicm3/frontiers/awicm3-frontiers-juwels-TCO319L137-D3_coldstart.yaml deleted file mode 100644 index c3605dd34..000000000 --- a/runscripts/awicm3/frontiers/awicm3-frontiers-juwels-TCO319L137-D3_coldstart.yaml +++ /dev/null @@ -1,50 +0,0 @@ -general: - user: !ENV ${USER} - setup_name: "awicm3" - version: "frontiers" - account: "hhb19" - compute_time: "08:00:00" - initial_date: "1990-01-01" - final_date: "1990-01-03" - base_dir: "/p/scratch/chhb19/${user}/runtime/${general.setup_name}-${general.version}/" - nday: 1 - nmonth: 0 - nyear: 0 - -awicm3: - postprocessing: false - model_dir: "/p/project/chhb19/${user}/model_codes/${general.setup_name}-${general.version}/" - pool_dir: "/p/project/chhb19/jstreffi/input/" - -fesom: - resolution: "D3" - pool_dir: "/p/project/chhb19/jstreffi/input/fesom2/" - mesh_dir: "/p/project/chhb19/jstreffi/input/fesom2/D3/" - restart_rate: 1 - restart_unit: "d" - restart_first: 1 - lresume: false - ini_parent_exp_id: "placeholder" - ini_parent_date: "1989-12-31" - ini_parent_dir: "/p/project/chhb19/hegewald1/fesom_restarts/D3/" - time_step: 100 - nproc: 576 - -oifs: - resolution: "TCO319" - levels: "L137" - prepifs_expid: a0iw - input_expid: awi3 - wam: true - lresume: false - time_step: 450 - nproc: 576 - omp_num_threads: 2 - -oasis3mct: - lresume: false # Set to false to generate the rst files for first leg - time_step: 3600 - use_lucia: true -# choose_lresume: -# false: -# remove_input_files: ['rmp'] diff --git a/runscripts/awicm3/frontiers/awicm3-frontiers-juwels-TCO319L137-DART.yaml b/runscripts/awicm3/frontiers/awicm3-frontiers-juwels-TCO319L137-DART.yaml deleted file mode 100644 index 1a290e8e9..000000000 --- a/runscripts/awicm3/frontiers/awicm3-frontiers-juwels-TCO319L137-DART.yaml +++ /dev/null @@ -1,68 +0,0 @@ -general: - user: !ENV ${USER} - setup_name: "awicm3" - version: "frontiers" - account: "hhb20" - compute_time: "00:55:00" - initial_date: "1990-01-01" - final_date: "1990-02-01" - base_dir: "/p/scratch/chhb19/${user}/runtime/${general.setup_name}-${general.version}/" - nday: 0 - nmonth: 1 - nyear: 0 - -awicm3: - postprocessing: false - model_dir: "/p/project/chhb19/${user}/model_codes/${general.setup_name}-${general.version}/" - pool_dir: "/p/project/chhb19/jstreffi/input/" - -fesom: - resolution: "DART" - pool_dir: "/p/project/chhb19/jstreffi/input/fesom2/" - mesh_dir: "/p/project/chhb19/jstreffi/input/fesom2/dart/" - restart_rate: 1 - restart_unit: "m" - restart_first: 1 - lresume: true - ini_parent_exp_id: "D00" - ini_parent_date: "1989-12-31" - ini_parent_dir: "/p/project/chhb19/streffing1/input/fesom2/restart/DART/" - choose_general.run_number: - 1: - restart_in_sources: - par_oce_restart: /p/project/chhb19/streffing1/input/fesom2/restart/DART/fesom.1989.oce.restart/*.nc - par_ice_restart: /p/project/chhb19/streffing1/input/fesom2/restart/DART/fesom.1989.ice.restart/*.nc - namelist_changes: - namelist.config: - machine: - n_levels: 2 - n_part: [80, 72] - namelist.oce: - oce_dyn: - redi: ".false." - namelist.ice: - ice_therm: - albsn: 0.81 - albsnm: 0.77 - albi: 0.78 - albim: 0.70 - namelist_dir: "/p/project/chhb19/semmler1/esm_tools/namelists/fesom2/awicm3/DART/" - time_step: 240 - nproc: 4320 - -oifs: - resolution: "TCO319" - levels: "L137" - prepifs_expid: a0iw - input_expid: awi3 - wam: true - lresume: false - time_step: 900 - nproc: 1200 - omp_num_threads: 2 - -oasis3mct: - lresume: true # Set to false to generate the rst files for first leg - time_step: 3600 - use_lucia: true - diff --git a/runscripts/awicm3/frontiers/awicm3-frontiers-juwels-TL159L60-CORE2.yaml b/runscripts/awicm3/frontiers/awicm3-frontiers-juwels-TL159L60-CORE2.yaml deleted file mode 100644 index ab9fde68d..000000000 --- a/runscripts/awicm3/frontiers/awicm3-frontiers-juwels-TL159L60-CORE2.yaml +++ /dev/null @@ -1,47 +0,0 @@ -general: - user: !ENV ${USER} - setup_name: "awicm3" - version: "frontiers" - account: "hhb20" - compute_time: "00:15:00" - initial_date: "2000-01-01" - final_date: "2000-02-01" - base_dir: "/p/scratch/chhb19/${user}/runtime/${general.setup_name}-${general.version}/" - nday: 0 - nmonth: 1 - nyear: 0 - -awicm3: - postprocessing: false - model_dir: "/p/project/chhb19/${user}/model_codes/${general.setup_name}-${general.version}/" - pool_dir: "/p/project/chhb19/jstreffi/input/" - -fesom: - resolution: "CORE2" - pool_dir: "/p/project/chhb19/jstreffi/input/fesom2/" - mesh_dir: "/p/project/chhb19/jstreffi/input/fesom2/core2/" - restart_rate: 1 - restart_unit: "m" - restart_first: 1 - lresume: false - time_step: 2400 - nproc: 864 - -oifs: - resolution: "TL159" - levels: "L60" - prepifs_expid: h6mv - input_expid: awi3 - wam: true - lresume: false - time_step: 3600 - nproc: 180 - omp_num_threads: 6 - -oasis3mct: - lresume: true # Set to false to generate the rst files for first leg - time_step: 7200 - use_lucia: true -# choose_lresume: -# false: -# remove_input_files: ['rmp'] diff --git a/runscripts/awicm3/frontiers/awicm3-frontiers-juwels-TL159L60-CORE2_inital.yaml b/runscripts/awicm3/frontiers/awicm3-frontiers-juwels-TL159L60-CORE2_inital.yaml deleted file mode 100644 index 425e281c8..000000000 --- a/runscripts/awicm3/frontiers/awicm3-frontiers-juwels-TL159L60-CORE2_inital.yaml +++ /dev/null @@ -1,47 +0,0 @@ -general: - user: !ENV ${USER} - setup_name: "awicm3" - version: "frontiers" - account: "hhb19" - compute_time: "00:15:00" - initial_date: "2000-01-01" - final_date: "2000-01-02" - base_dir: "/p/scratch/chhb19/${user}/runtime/${general.setup_name}-${general.version}/" - nday: 5 - nmonth: 0 - nyear: 0 - -awicm3: - postprocessing: false - model_dir: "/p/project/chhb19/${user}/model_codes/${general.setup_name}-${general.version}/" - pool_dir: "/p/project/chhb19/jstreffi/input/" - -fesom: - resolution: "CORE2" - pool_dir: "/p/project/chhb19/jstreffi/input/fesom2/" - mesh_dir: "/p/project/chhb19/jstreffi/input/fesom2/core2/" - restart_rate: 5 - restart_unit: "d" - restart_first: 5 - lresume: false - time_step: 2400 - nproc: 48 - -oifs: - resolution: "TL159" - levels: "L60" - prepifs_expid: h6mv - input_expid: awi3 - wam: true - lresume: false - time_step: 3600 - nproc: 48 - omp_num_threads: 2 - -oasis3mct: - lresume: false # Set to false to generate the rst files for first leg - time_step: 7200 - use_lucia: true -# choose_lresume: -# false: -# remove_input_files: ['rmp'] diff --git a/runscripts/awicm3/frontiers/awicm3-frontiers-juwels-TL159L60-CORE2_initial.yaml b/runscripts/awicm3/frontiers/awicm3-frontiers-juwels-TL159L60-CORE2_initial.yaml deleted file mode 100644 index 9da9c5932..000000000 --- a/runscripts/awicm3/frontiers/awicm3-frontiers-juwels-TL159L60-CORE2_initial.yaml +++ /dev/null @@ -1,47 +0,0 @@ -general: - user: !ENV ${USER} - setup_name: "awicm3" - version: "frontiers" - account: "hhb20" - compute_time: "00:15:00" - initial_date: "2000-01-01" - final_date: "2000-01-03" - base_dir: "/p/scratch/chhb19/${user}/runtime/${general.setup_name}-${general.version}/" - nday: 1 - nmonth: 0 - nyear: 0 - -awicm3: - postprocessing: false - model_dir: "/p/project/chhb19/${user}/model_codes/${general.setup_name}-${general.version}/" - pool_dir: "/p/project/chhb19/jstreffi/input/" - -fesom: - resolution: "CORE2" - pool_dir: "/p/project/chhb19/jstreffi/input/fesom2/" - mesh_dir: "/p/project/chhb19/jstreffi/input/fesom2/core2/" - restart_rate: 1 - restart_unit: "m" - restart_first: 1 - lresume: false - time_step: 2400 - nproc: 864 - -oifs: - resolution: "TL159" - levels: "L60" - prepifs_expid: h6mv - input_expid: awi3 - wam: true - lresume: false - time_step: 3600 - nproc: 48 - omp_num_threads: 1 - -oasis3mct: - lresume: false # Set to false to generate the rst files for first leg - time_step: 7200 - use_lucia: true -# choose_lresume: -# false: -# remove_input_files: ['rmp'] diff --git a/runscripts/awicm3/frontiers/awicm3-frontiers-mistral-TCO319L137-D3.yaml b/runscripts/awicm3/frontiers/awicm3-frontiers-mistral-TCO319L137-D3.yaml deleted file mode 100644 index 8cef673b1..000000000 --- a/runscripts/awicm3/frontiers/awicm3-frontiers-mistral-TCO319L137-D3.yaml +++ /dev/null @@ -1,51 +0,0 @@ -general: - user: !ENV ${USER} - setup_name: "awicm3" - version: "frontiers" - account: "ab0995" - compute_time: "00:15:00" - initial_date: "1990-01-01" - final_date: "1990-01-02" - base_dir: "/work/ab0995/${user}/runtime/${general.setup_name}-${general.version}/" - nday: 1 - nmonth: 0 - nyear: 0 - -awicm3: - postprocessing: false - model_dir: "/pf/a/${user}/model_codes/${general.setup_name}-${general.version}/" - -fesom: - resolution: "D3" - restart_rate: 1 - restart_unit: "d" - restart_first: 1 - time_step: 100 - nproc: 576 - namelist_dir: "/work/ch0636/a270067/esm_tools/namelists/fesom2/awicm3/awicm-3-D3test/" - # Restart options are for outdated restart file types, deactivated by default until fixed - lresume: false - #ini_parent_exp_id: "DS21" - #ini_parent_date: "1989-12-31" - #ini_parent_dir: "/work/ch0636/a270067/runtime/awicm-3.1/DS21/" - #choose_general.run_number: - # 1: - # restart_in_sources: - # oce_restart: /work/ch0636/a270067/runtime/awicm-3.1/DS21/restart/fesom/fesom.1989.oce.restart.nc - # ice_restart: /work/ch0636/a270067/runtime/awicm-3.1/DS21/restart/fesom/fesom.1989.ice.restart.nc - - -oifs: - resolution: "TCO319" - levels: "L137" - lresume: false - time_step: 450 - nproc: 576 - prepifs_expid: a0iw - input_expid: awi3 - wam: true - -oasis3mct: - lresume: false # Set to false to generate the rst files for first leg - time_step: 3600 - diff --git a/runscripts/awicm3/frontiers/awicm3-frontiers-ollie-TCO159L91-CORE2.yaml b/runscripts/awicm3/frontiers/awicm3-frontiers-ollie-TCO159L91-CORE2.yaml deleted file mode 100644 index 64ca74ca3..000000000 --- a/runscripts/awicm3/frontiers/awicm3-frontiers-ollie-TCO159L91-CORE2.yaml +++ /dev/null @@ -1,43 +0,0 @@ -general: - user: !ENV ${USER} - setup_name: "awicm3" - version: "frontiers" - compute_time: "08:00:00" - initial_date: "2000-01-01" - final_date: "2000-01-04" - base_dir: "/work/ollie/${user}/runtime/${general.setup_name}-${general.version}/" - nday: 1 - nmonth: 0 - nyear: 0 - -awicm3: - postprocessing: false - model_dir: "/home/ollie/${user}/model_codes/${general.setup_name}-${general.version}/" - -fesom: - resolution: "CORE2" - #pool_dir: "/work/ollie/jstreffi/input/fesom2/" - mesh_dir: "/work/ollie/projects/clidyn/FESOM2/meshes/core2/" - restart_rate: 1 - restart_unit: "d" - restart_first: 1 - lresume: false - time_step: 2400 - nproc: 144 - -oifs: - resolution: "TCO159" - levels: "L91" - lresume: false - time_step: 3600 - prepifs_expid: h9wu - input_expid: awi3 - wam: true - nproc: 144 - omp_num_threads: 1 - mip: "cmip6" - scenario: "piControl" - -oasis3mct: - lresume: true # Set to false to generate the rst files for first leg - time_step: 7200 diff --git a/runscripts/awicm3/frontiers/awicm3-frontiers-ollie-TCO159L91-CORE2_inital.yaml b/runscripts/awicm3/frontiers/awicm3-frontiers-ollie-TCO159L91-CORE2_inital.yaml deleted file mode 100644 index 122b673b7..000000000 --- a/runscripts/awicm3/frontiers/awicm3-frontiers-ollie-TCO159L91-CORE2_inital.yaml +++ /dev/null @@ -1,42 +0,0 @@ -general: - user: !ENV ${USER} - setup_name: "awicm3" - version: "frontiers" - compute_time: "00:30:00" - initial_date: "2000-01-01" - final_date: "2000-01-02" - taskset: true - base_dir: "/work/ollie/${user}/runtime/${general.setup_name}-${general.version}/" - nday: 1 - nmonth: 0 - nyear: 0 - -awicm3: - postprocessing: false - model_dir: "/home/ollie/${user}/model_codes/${general.setup_name}-${general.version}/" - -fesom: - resolution: "CORE2" - #pool_dir: "/work/ollie/jstreffi/input/fesom2/" - mesh_dir: "/work/ollie/projects/clidyn/FESOM2/meshes/core2/" - restart_rate: 1 - restart_unit: "d" - restart_first: 1 - lresume: false - time_step: 2400 - nproc: 144 - -oifs: - resolution: "TCO159" - levels: "L91" - lresume: false - time_step: 3600 - prepifs_expid: h9wu - input_expid: awi3 - wam: true - nproc: 72 - omp_num_threads: 2 - -oasis3mct: - lresume: false # Set to false to generate the rst files for first leg - time_step: 7200 diff --git a/runscripts/awicm3/frontiers/awicm3-frontiers-ollie-TCO159L91-orca25_initial.yaml b/runscripts/awicm3/frontiers/awicm3-frontiers-ollie-TCO159L91-orca25_initial.yaml deleted file mode 100644 index e93cb283c..000000000 --- a/runscripts/awicm3/frontiers/awicm3-frontiers-ollie-TCO159L91-orca25_initial.yaml +++ /dev/null @@ -1,41 +0,0 @@ -general: - setup_name: "awicm3" - version: "1.0-frontiers" - compute_time: "00:30:00" - initial_date: "2000-01-01" - final_date: "2000-01-02" - taskset: true - base_dir: "/work/ollie/jstreffi/runtime/awicm-3.1/" - nday: 1 - nmonth: 0 - nyear: 0 - -awicm3: - postprocessing: false - model_dir: "/home/ollie/jstreffi/model_codes/awicm3-1.0-frontiers/" - -fesom: - resolution: "orca25" - pool_dir: "/work/ollie/clidyn/FESOM2/meshes/" - #mesh_dir: "/work/ollie/projects/clidyn/FESOM2/meshes/core2/" - restart_rate: 1 - restart_unit: "d" - restart_first: 1 - lresume: true - time_step: 1200 - nproc: 1152 - -oifs: - resolution: "TCO159" - levels: "L91" - lresume: false - time_step: 3600 - prepifs_expid: h9wu - input_expid: awi3 - wam: true - nproc: 72 - omp_num_threads: 2 - -oasis3mct: - lresume: false # Set to false to generate the rst files for first leg - time_step: 7200 diff --git a/runscripts/awicm3/frontiers/awicm3-frontiers-ollie-TCO95L91-CORE2.yaml b/runscripts/awicm3/frontiers/awicm3-frontiers-ollie-TCO95L91-CORE2.yaml deleted file mode 100644 index e2398d370..000000000 --- a/runscripts/awicm3/frontiers/awicm3-frontiers-ollie-TCO95L91-CORE2.yaml +++ /dev/null @@ -1,48 +0,0 @@ -general: - user: !ENV ${USER} - setup_name: "awicm3" - version: "frontiers" - compute_time: "00:30:00" - initial_date: "2000-01-01" - final_date: "2000-05-01" - base_dir: "/work/ollie/${user}/runtime/${general.setup_name}-${general.version}/" - nday: 0 - nmonth: 1 - nyear: 0 - -awicm3: - postprocessing: false - model_dir: "/home/ollie/${user}/model_codes/${general.setup_name}-${general.version}/" - pool_dir: "/work/ollie/jstreffi/input/" - -fesom: - resolution: "CORE2" - pool_dir: "/work/ollie/jstreffi/input/fesom2/" - mesh_dir: "/work/ollie/jstreffi/input/fesom2/core2/" - #namelist_dir: "/home/ollie/jstreffi/esm_tools/namelists/fesom2/2.1/" - restart_rate: 1 - restart_unit: "m" - restart_first: 1 - lresume: false - time_step: 900 - nproc: 288 - -oifs: - resolution: "TCO95" - levels: "L91" - prepifs_expid: aack - input_expid: awi3 - wam: true - lresume: false - time_step: 900 - nproc: 288 - omp_num_threads: 4 - cmip_fix_year: 1990 - output: "1hr" - -oasis3mct: - lresume: true # Set to false to generate the rst files for first leg - time_step: 900 - use_lucia: true - - diff --git a/runscripts/awicm3/frontiers/awicm3-frontiers-ollie-TL159L60-CORE2.yaml b/runscripts/awicm3/frontiers/awicm3-frontiers-ollie-TL159L60-CORE2.yaml deleted file mode 100644 index 91e03c986..000000000 --- a/runscripts/awicm3/frontiers/awicm3-frontiers-ollie-TL159L60-CORE2.yaml +++ /dev/null @@ -1,41 +0,0 @@ -general: - user: !ENV ${USER} - setup_name: "awicm3" - version: "frontiers" - compute_time: "00:30:00" - initial_date: "1990-01-01" - final_date: "2000-01-01" - base_dir: "/work/ollie/${user}/runtime/${general.setup_name}-${general.version}/" - nday: 0 - nmonth: 0 - nyear: 1 - -awicm3: - postprocessing: false - model_dir: "/home/ollie/${user}/model_codes/{setup_name}-${version}/" - -fesom: - resolution: "CORE2" - #pool_dir: "/work/ollie/jstreffi/input/fesom2/" - mesh_dir: "${pool_dir}/core2/" - restart_rate: 1 - restart_unit: "y" - restart_first: 1 - lresume: false - time_step: 2400 - nproc: 864 - -oifs: - resolution: "TL159" - levels: "L60" - prepifs_expid: h6mv - input_expid: awi3 - wam: true - lresume: false - time_step: 3600 - nproc: 180 - omp_num_threads: 6 - -oasis3mct: - lresume: true # Set to false to generate the rst files for first leg - time_step: 7200 diff --git a/runscripts/awicm3/frontiers/awicm3-frontiers-ollie-TL159L60-CORE2_inital.yaml b/runscripts/awicm3/frontiers/awicm3-frontiers-ollie-TL159L60-CORE2_inital.yaml deleted file mode 100644 index a98f9bf93..000000000 --- a/runscripts/awicm3/frontiers/awicm3-frontiers-ollie-TL159L60-CORE2_inital.yaml +++ /dev/null @@ -1,41 +0,0 @@ -general: - user: !ENV ${USER} - setup_name: "awicm3" - version: "frontiers" - compute_time: "00:30:00" - initial_date: "1990-01-01" - final_date: "1990-01-03" - base_dir: "/work/ollie/${user}/runtime/${general.setup_name}-${general.version}/" - nday: 1 - nmonth: 0 - nyear: 0 - -awicm3: - postprocessing: false - model_dir: "/home/ollie/${user}/model_codes/${general.setup_name}-${general.version}/" - -fesom: - resolution: "CORE2" - #pool_dir: "/work/ollie/jstreffi/input/fesom2/" - mesh_dir: "${pool_dir}/core2/" - restart_rate: 1 - restart_unit: "d" - restart_first: 1 - lresume: false - time_step: 2400 - nproc: 144 - -oifs: - resolution: "TL159" - levels: "L60" - prepifs_expid: h6mv - input_expid: awi3 - wam: true - lresume: false - time_step: 3600 - nproc: 36 - omp_num_threads: 2 - -oasis3mct: - lresume: false # Set to false to generate the rst files for first leg - time_step: 7200 diff --git a/runscripts/awicm3/frontiers/awicm3-frontiers-xios-levante-TCO319L137.yaml b/runscripts/awicm3/frontiers/awicm3-frontiers-xios-levante-TCO319L137.yaml deleted file mode 100644 index 8115db5b0..000000000 --- a/runscripts/awicm3/frontiers/awicm3-frontiers-xios-levante-TCO319L137.yaml +++ /dev/null @@ -1,94 +0,0 @@ -general: - user: !ENV ${USER} - setup_name: "awicm3" - version: "frontiers-xios" - account: "ab0995" - compute_time: "00:30:00" - initial_date: "2000-01-01" - final_date: "2004-01-01" - base_dir: "/work/ab0246/${user}/runtime/${general.setup_name}-${general.version}/" - nday: 0 - nmonth: 1 - nyear: 0 - -computer: - taskset: true - -awicm3: - postprocessing: false - model_dir: "/home/a/${user}/model_codes/${general.setup_name}-${general.version}//" - -fesom: - resolution: "DART" - pool_dir: "/work/ab0246/a270092/input/fesom2/" - mesh_dir: "${pool_dir}/dart/" - restart_rate: 1 - restart_unit: "m" - restart_first: 1 - lresume: true - ini_parent_exp_id: "D00" - ini_parent_date: "2049-12-31" - ini_parent_dir: "/work/ab0246/a270092/input/fesom2/restart/DART/" - choose_general.run_number: - 1: - restart_in_sources: - par_oce_restart: /work/ab0246/a270092/input/fesom2/restart/DART/fesom.2049.oce.restart/*.nc - par_ice_restart: /work/ab0246/a270092/input/fesom2/restart/DART/fesom.2049.ice.restart/*.nc - - namelist_dir: "${model_dir}/config/" - add_namelists: - - namelist.tra - - namelist.dyn - add_config_sources: - tra: "${namelist_dir}/namelist.tra" - dyn: "${namelist_dir}/namelist.dyn" - add_config_in_work: - tra: "namelist.tra" - dyn: "namelist.dyn" - add_config_files: - tra: tra - dyn: dyn - namelist_changes: - namelist.tra: - tracer_phys: - surf_relax_s: 0.0 - tracer_list: - nml_tracer_list: 1, 'MFCT', 'QR4C', 'FCT ', 0.0, 1.0, 2, 'MFCT', 'QR4C','FCT ', 0.0, 1.0 - namelist.config: - machine: - n_levels: 2 - n_part: [80, 72] - namelist.oce: - oce_dyn: - redi: ".false." - namelist.ice: - ice_therm: - albsn: 0.81 - albsnm: 0.77 - albi: 0.78 - albim: 0.70 - time_step: 240 - nproc: 4320 - -oifs: - resolution: "TCO319" - levels: "L137" - prepifs_expid: a0iw - input_expid: awi3 - wam: true - lresume: false - time_step: 900 - nproc: 1200 - omp_num_threads: 2 - -oasis3mct: - lresume: true # Set to false to generate the rst files for first leg - time_step: 3600 - use_lucia: true - -xios: - with_model: oifs - nproc: 1 - omp_num_threads: 48 - - diff --git a/runscripts/awicm3/master/WARNING.master.readme b/runscripts/awicm3/master/WARNING.master.readme index 32f70d268..e5cfb6e7d 100644 --- a/runscripts/awicm3/master/WARNING.master.readme +++ b/runscripts/awicm3/master/WARNING.master.readme @@ -1,5 +1,6 @@ Note: The master branch experiments yaml scripts follow the latest developments of FESOM2 and OpenIFS. New commits may come in multiple times a day. These scripts are not tested in any way shape of form. -Use these only if you wich to test-drive the latest master branch changes. Otherwise it is recommended -you stick to v3.0 for stable branch or frontiers for a somewhat tested and contiuouly in use branch. +Use these if you wish to test-drive the latest master branch changes. + +For scientific work it is recommended you stick to v3.1. diff --git a/runscripts/awicm3/frontiers/awicm3-frontiers-juwels-TCO159L91-CORE2.yaml b/runscripts/awicm3/master/awicm3-master-juwels-TCO95L91-CORE2.yaml similarity index 72% rename from runscripts/awicm3/frontiers/awicm3-frontiers-juwels-TCO159L91-CORE2.yaml rename to runscripts/awicm3/master/awicm3-master-juwels-TCO95L91-CORE2.yaml index 374d8f776..911e62b56 100644 --- a/runscripts/awicm3/frontiers/awicm3-frontiers-juwels-TCO159L91-CORE2.yaml +++ b/runscripts/awicm3/master/awicm3-master-juwels-TCO95L91-CORE2.yaml @@ -1,11 +1,11 @@ general: user: !ENV ${USER} setup_name: "awicm3" - version: "frontiers" + version: "master" account: "hhb20" - compute_time: "00:30:00" + compute_time: "00:10:00" initial_date: "2000-01-01" - final_date: "2000-02-01" + final_date: "2010-01-01" base_dir: "/p/scratch/chhb19/${user}/runtime/${general.setup_name}-${general.version}/" nday: 0 nmonth: 1 @@ -25,20 +25,30 @@ fesom: restart_first: 1 lresume: false time_step: 2400 - nproc: 288 + nproc: 48 oifs: - resolution: "TCO159" + resolution: "TCO95" levels: "L91" - prepifs_expid: h9wu + prepifs_expid: aack input_expid: awi3 - wam: true lresume: false time_step: 3600 - nproc: 384 - omp_num_threads: 6 + nproc: 48 + omp_num_threads: 1 + add_namelist_changes: + fort.4: + NAMCLDP: + SCLCT_SWITCH: 2 oasis3mct: lresume: true # Set to false to generate the rst files for first leg time_step: 7200 use_lucia: true + +xios: + with_model: oifs + nproc: 2 + omp_num_threads: 24 + + diff --git a/runscripts/awicm3/frontiers/issue_cleanup.yaml b/runscripts/awicm3/master/awicm3-master-juwels-TCO95L91-CORE2_initial.yaml similarity index 79% rename from runscripts/awicm3/frontiers/issue_cleanup.yaml rename to runscripts/awicm3/master/awicm3-master-juwels-TCO95L91-CORE2_initial.yaml index 88362c663..f09d6be12 100644 --- a/runscripts/awicm3/frontiers/issue_cleanup.yaml +++ b/runscripts/awicm3/master/awicm3-master-juwels-TCO95L91-CORE2_initial.yaml @@ -1,11 +1,11 @@ general: user: !ENV ${USER} setup_name: "awicm3" - version: "frontiers-xios" + version: "master" account: "hhb20" - compute_time: "00:20:00" + compute_time: "00:10:00" initial_date: "2000-01-01" - final_date: "2000-03-01" + final_date: "2001-01-03" base_dir: "/p/scratch/chhb19/${user}/runtime/${general.setup_name}-${general.version}/" nday: 1 nmonth: 0 @@ -25,24 +25,21 @@ fesom: restart_first: 1 lresume: false time_step: 2400 - nproc: 432 - add_export_vars: - add_namelist_changes: - namelist.oce: - oce_dyn: - gamma0: "1" + nproc: 48 oifs: resolution: "TCO95" levels: "L91" prepifs_expid: aack input_expid: awi3 - wam: true lresume: false time_step: 3600 nproc: 48 omp_num_threads: 1 - + add_namelist_changes: + fort.4: + NAMCLDP: + SCLCT_SWITCH: 2 oasis3mct: lresume: false # Set to false to generate the rst files for first leg @@ -51,7 +48,7 @@ oasis3mct: xios: with_model: oifs - nproc: 1 - omp_num_threads: 48 + nproc: 2 + omp_num_threads: 24 diff --git a/runscripts/awicm3/frontiers/awicm3-frontiers-xios-levante-TCO95L91-CORE2.yaml b/runscripts/awicm3/master/awicm3-master-levante-TCO95L91-CORE2.yaml similarity index 79% rename from runscripts/awicm3/frontiers/awicm3-frontiers-xios-levante-TCO95L91-CORE2.yaml rename to runscripts/awicm3/master/awicm3-master-levante-TCO95L91-CORE2.yaml index e7f532c60..9f427cc66 100644 --- a/runscripts/awicm3/frontiers/awicm3-frontiers-xios-levante-TCO95L91-CORE2.yaml +++ b/runscripts/awicm3/master/awicm3-master-levante-TCO95L91-CORE2.yaml @@ -1,14 +1,14 @@ general: user: !ENV ${USER} setup_name: "awicm3" - version: "frontiers-xios" + version: "master" account: "ab0995" - compute_time: "00:20:00" + compute_time: "00:05:00" initial_date: "2000-01-01" - final_date: "2000-02-01" + final_date: "2000-01-02" base_dir: "/work/ab0246/${user}/runtime/${general.setup_name}-${general.version}/" - nday: 0 - nmonth: 1 + nday: 1 + nmonth: 0 nyear: 0 computer: @@ -23,11 +23,11 @@ fesom: pool_dir: "/work/ab0246/a270092/input/fesom2/" mesh_dir: "${pool_dir}/core2/" restart_rate: 1 - restart_unit: "m" + restart_unit: "d" restart_first: 1 lresume: false time_step: 1800 - nproc: 768 + nproc: 384 oifs: resolution: "TCO95" @@ -38,17 +38,17 @@ oifs: lresume: false time_step: 3600 nproc: 384 - omp_num_threads: 8 + omp_num_threads: 1 rnfmap: omp_num_threads: 128 oasis3mct: lresume: true # Set to false to generate the rst files for first leg - time_step: 3600 + time_step: 7200 xios: with_model: oifs - nproc: 8 - omp_num_threads: 16 + nproc: 4 + omp_num_threads: 32 diff --git a/runscripts/awicm3/master/awicm3-master-levante-TCO95L91-CORE2_initial.yaml b/runscripts/awicm3/master/awicm3-master-levante-TCO95L91-CORE2_initial.yaml new file mode 100644 index 000000000..a3066f405 --- /dev/null +++ b/runscripts/awicm3/master/awicm3-master-levante-TCO95L91-CORE2_initial.yaml @@ -0,0 +1,53 @@ +general: + user: !ENV ${USER} + setup_name: "awicm3" + version: "master" + account: "ab0995" + compute_time: "00:30:00" + initial_date: "2000-01-01" + final_date: "2000-04-01" + base_dir: "/work/ab0246/${user}/runtime/${general.setup_name}-${general.version}/" + nday: 0 + nmonth: 1 + nyear: 0 + +computer: + taskset: true + +awicm3: + postprocessing: false + model_dir: "/home/a/${user}/model_codes/${general.setup_name}-${general.version}//" + +fesom: + resolution: "CORE2" + pool_dir: "/work/ab0246/a270092/input/fesom2/" + mesh_dir: "${pool_dir}/core2/" + restart_rate: 1 + restart_unit: "m" + restart_first: 1 + lresume: false + time_step: 1800 + nproc: 384 + +oifs: + resolution: "TCO95" + levels: "L91" + prepifs_expid: aack + input_expid: awi3 + lresume: false + time_step: 3600 + nproc: 384 + omp_num_threads: 1 + +rnfmap: + omp_num_threads: 128 + +oasis3mct: + lresume: false # Set to false to generate the rst files for first leg + time_step: 7200 + +xios: + with_model: oifs + nproc: 4 + omp_num_threads: 32 + diff --git a/runscripts/awicm3/frontiers/awicm3-frontiers-ollie-TCO95L91-CORE2_inital.yaml b/runscripts/awicm3/master/awicm3-master-ollie-TCO95L91-CORE2.yaml similarity index 75% rename from runscripts/awicm3/frontiers/awicm3-frontiers-ollie-TCO95L91-CORE2_inital.yaml rename to runscripts/awicm3/master/awicm3-master-ollie-TCO95L91-CORE2.yaml index 6d09e09d0..d9571fae2 100644 --- a/runscripts/awicm3/frontiers/awicm3-frontiers-ollie-TCO95L91-CORE2_inital.yaml +++ b/runscripts/awicm3/master/awicm3-master-ollie-TCO95L91-CORE2.yaml @@ -1,13 +1,13 @@ general: user: !ENV ${USER} setup_name: "awicm3" - version: "frontiers" - compute_time: "00:30:00" + version: "master" + compute_time: "00:20:00" initial_date: "2000-01-01" - final_date: "2000-01-03" + final_date: "2000-02-01" base_dir: "/work/ollie/${user}/runtime/${general.setup_name}-${general.version}/" - nday: 1 - nmonth: 0 + nday: 0 + nmonth: 1 nyear: 0 awicm3: @@ -20,11 +20,11 @@ fesom: pool_dir: "/work/ollie/jstreffi/input/fesom2/" mesh_dir: "/work/ollie/jstreffi/input/fesom2/core2/" restart_rate: 1 - restart_unit: "d" + restart_unit: "m" restart_first: 1 lresume: false time_step: 2400 - nproc: 288 + nproc: 432 oifs: resolution: "TCO95" @@ -34,13 +34,12 @@ oifs: wam: true lresume: false time_step: 3600 - nproc: 72 - omp_num_threads: 1 + nproc: 216 + omp_num_threads: 6 oasis3mct: - lresume: false # Set to false to generate the rst files for first leg + lresume: true # Set to false to generate the rst files for first leg time_step: 7200 use_lucia: true - diff --git a/runscripts/awicm3/v3.1.1/awicm3-v3.1.1-albedo-TCO95L91-CORE2.yaml b/runscripts/awicm3/v3.1.1/awicm3-v3.1.1-albedo-TCO95L91-CORE2.yaml new file mode 100644 index 000000000..64c1499b4 --- /dev/null +++ b/runscripts/awicm3/v3.1.1/awicm3-v3.1.1-albedo-TCO95L91-CORE2.yaml @@ -0,0 +1,53 @@ +general: + user: !ENV ${USER} + setup_name: "awicm3" + version: "v3.1.1" + account: paleodyn.paleodyn + compute_time: "00:10:00" + initial_date: "2000-01-01" + final_date: "2000-02-01" + base_dir: "/albedo/work/user/${user}/runtime/${general.setup_name}-${general.version}/" + nday: 0 + nmonth: 1 + nyear: 0 + +computer: + taskset: true + additional_flags: [ --qos=30min ] + +awicm3: + postprocessing: false + model_dir: "/albedo/home/${user}/model_codes/${general.setup_name}-${general.version}//" + +fesom: + resolution: "CORE2" + pool_dir: "/albedo/work/user/mandresm/test_pool/clidyn/FESOM2/" + climate_data_dir: "${pool_dir}/hydrography/phc3.0/" + mesh_dir: "${pool_dir}/meshes/core2/" + restart_rate: 1 + restart_unit: "m" + restart_first: 1 + lresume: false + time_step: 1800 + nproc: 128 + +oifs: + resolution: "TCO95" + levels: "L91" + prepifs_expid: aack + input_expid: awi3 + wam: true + lresume: false + time_step: 3600 + nproc: 128 + omp_num_threads: 1 + +oasis3mct: + lresume: false # Set to false to generate the rst files for first leg + time_step: 7200 + +xios: + with_model: oifs + nproc: 4 + omp_num_threads: 32 + diff --git a/runscripts/awicm3/v3.1.1/awicm3-v3.1.1-levante-TCO95L91-CORE2.yaml b/runscripts/awicm3/v3.1.1/awicm3-v3.1.1-levante-TCO95L91-CORE2.yaml new file mode 100644 index 000000000..7d5a6b1a1 --- /dev/null +++ b/runscripts/awicm3/v3.1.1/awicm3-v3.1.1-levante-TCO95L91-CORE2.yaml @@ -0,0 +1,56 @@ +general: + user: !ENV ${USER} + setup_name: "awicm3" + version: "v3.1.1" + account: "ab0995" + compute_time: "00:20:00" + initial_date: "2000-01-01" + final_date: "2000-02-01" + base_dir: "/work/ab0246/${user}/runtime/${general.setup_name}-${general.version}/" + nday: 0 + nmonth: 1 + nyear: 0 + +computer: + taskset: true + +awicm3: + postprocessing: false + model_dir: "/home/a/${user}/model_codes/${general.setup_name}-${general.version}//" + +fesom: + resolution: "CORE2" + pool_dir: "/work/ab0246/a270092/input/fesom2/" + mesh_dir: "${pool_dir}/core2/" + tide_forcing_dir: "${pool_dir}/fesom/tide_forcing/" + add_namelist_changes: + namelist.config: + paths: + tideforcingpath: "${pool_dir}/fesom/tide_forcing/" + restart_rate: 1 + restart_unit: "m" + restart_first: 1 + lresume: false + time_step: 1800 + nproc: 128 + +oifs: + resolution: "TCO95" + levels: "L91" + prepifs_expid: aack + input_expid: awi3 + wam: true + lresume: false + time_step: 3600 + nproc: 128 + omp_num_threads: 1 + +oasis3mct: + lresume: false # Set to false to generate the rst files for first leg + time_step: 7200 + +xios: + with_model: oifs + nproc: 4 + omp_num_threads: 32 + diff --git a/runscripts/awicm3/v3.1.2/awicm3-v3.1.2-albedo-TCO95L91-CORE2.yaml b/runscripts/awicm3/v3.1.2/awicm3-v3.1.2-albedo-TCO95L91-CORE2.yaml new file mode 100644 index 000000000..f73edab15 --- /dev/null +++ b/runscripts/awicm3/v3.1.2/awicm3-v3.1.2-albedo-TCO95L91-CORE2.yaml @@ -0,0 +1,53 @@ +general: + user: !ENV ${USER} + setup_name: "awicm3" + version: "v3.1.2" + account: paleodyn.paleodyn + compute_time: "00:10:00" + initial_date: "2000-01-01" + final_date: "2000-02-01" + base_dir: "/albedo/work/user/${user}/runtime/${general.setup_name}-${general.version}/" + nday: 0 + nmonth: 1 + nyear: 0 + +computer: + taskset: true + additional_flags: [ --qos=30min ] + +awicm3: + postprocessing: false + model_dir: "/albedo/home/${user}/model_codes/${general.setup_name}-${general.version}//" + +fesom: + resolution: "CORE2" + pool_dir: "/albedo/work/user/mandresm/test_pool/clidyn/FESOM2/" + climate_data_dir: "${pool_dir}/hydrography/phc3.0/" + mesh_dir: "${pool_dir}/meshes/core2/" + restart_rate: 1 + restart_unit: "m" + restart_first: 1 + lresume: false + time_step: 1800 + nproc: 128 + +oifs: + resolution: "TCO95" + levels: "L91" + prepifs_expid: aack + input_expid: awi3 + wam: true + lresume: false + time_step: 3600 + nproc: 128 + omp_num_threads: 1 + +oasis3mct: + lresume: false # Set to false to generate the rst files for first leg + time_step: 7200 + +xios: + with_model: oifs + nproc: 4 + omp_num_threads: 32 + diff --git a/runscripts/awicm3/v3.1.2/awicm3-v3.1.2-levante-TCO95L91-CORE2.yaml b/runscripts/awicm3/v3.1.2/awicm3-v3.1.2-levante-TCO95L91-CORE2.yaml new file mode 100644 index 000000000..55ced8241 --- /dev/null +++ b/runscripts/awicm3/v3.1.2/awicm3-v3.1.2-levante-TCO95L91-CORE2.yaml @@ -0,0 +1,56 @@ +general: + user: !ENV ${USER} + setup_name: "awicm3" + version: "v3.1.2" + account: "ab0995" + compute_time: "00:20:00" + initial_date: "2000-01-01" + final_date: "2000-02-01" + base_dir: "/work/ab0246/${user}/runtime/${general.setup_name}-${general.version}/" + nday: 0 + nmonth: 1 + nyear: 0 + +computer: + taskset: true + +awicm3: + postprocessing: false + model_dir: "/home/a/${user}/model_codes/${general.setup_name}-${general.version}//" + +fesom: + resolution: "CORE2" + pool_dir: "/work/ab0246/a270092/input/fesom2/" + mesh_dir: "${pool_dir}/core2/" + tide_forcing_dir: "${pool_dir}/fesom/tide_forcing/" + add_namelist_changes: + namelist.config: + paths: + tideforcingpath: "${pool_dir}/fesom/tide_forcing/" + restart_rate: 1 + restart_unit: "m" + restart_first: 1 + lresume: false + time_step: 1800 + nproc: 128 + +oifs: + resolution: "TCO95" + levels: "L91" + prepifs_expid: aack + input_expid: awi3 + wam: true + lresume: false + time_step: 3600 + nproc: 128 + omp_num_threads: 1 + +oasis3mct: + lresume: false # Set to false to generate the rst files for first leg + time_step: 7200 + +xios: + with_model: oifs + nproc: 4 + omp_num_threads: 32 + diff --git a/runscripts/awicm3/v3.1/awicm3-v3.1-albedo-TCO95L91-CORE2.yaml b/runscripts/awicm3/v3.1/awicm3-v3.1-albedo-TCO95L91-CORE2.yaml new file mode 100644 index 000000000..c24f11df9 --- /dev/null +++ b/runscripts/awicm3/v3.1/awicm3-v3.1-albedo-TCO95L91-CORE2.yaml @@ -0,0 +1,53 @@ +general: + user: !ENV ${USER} + setup_name: "awicm3" + version: "v3.1" + account: paleodyn.paleodyn + compute_time: "00:10:00" + initial_date: "2000-01-01" + final_date: "2000-02-01" + base_dir: "/albedo/work/user/${user}/runtime/${general.setup_name}-${general.version}/" + nday: 0 + nmonth: 1 + nyear: 0 + +computer: + taskset: true + additional_flags: [ --qos=30min ] + +awicm3: + postprocessing: false + model_dir: "/albedo/home/${user}/model_codes/${general.setup_name}-${general.version}//" + +fesom: + resolution: "CORE2" + pool_dir: "/albedo/work/user/mandresm/test_pool/clidyn/FESOM2/" + climate_data_dir: "${pool_dir}/hydrography/phc3.0/" + mesh_dir: "${pool_dir}/meshes/core2/" + restart_rate: 1 + restart_unit: "m" + restart_first: 1 + lresume: false + time_step: 1800 + nproc: 128 + +oifs: + resolution: "TCO95" + levels: "L91" + prepifs_expid: aack + input_expid: awi3 + wam: true + lresume: false + time_step: 3600 + nproc: 128 + omp_num_threads: 1 + +oasis3mct: + lresume: false # Set to false to generate the rst files for first leg + time_step: 7200 + +xios: + with_model: oifs + nproc: 4 + omp_num_threads: 32 + diff --git a/runscripts/awicm3/frontiers/awicm3-frontiers-juwels-TCO639L137-DART_initial.yaml b/runscripts/awicm3/v3.1/awicm3-v3.1-juwels-TCO639L137-SO3_initial.yaml similarity index 71% rename from runscripts/awicm3/frontiers/awicm3-frontiers-juwels-TCO639L137-DART_initial.yaml rename to runscripts/awicm3/v3.1/awicm3-v3.1-juwels-TCO639L137-SO3_initial.yaml index 67e3c5c9f..2b3cb5235 100644 --- a/runscripts/awicm3/frontiers/awicm3-frontiers-juwels-TCO639L137-DART_initial.yaml +++ b/runscripts/awicm3/v3.1/awicm3-v3.1-juwels-TCO639L137-SO3_initial.yaml @@ -1,9 +1,9 @@ general: user: !ENV ${USER} setup_name: "awicm3" - version: "frontiers" + version: "v3.1" account: "hhb20" - compute_time: "00:30:00" + compute_time: "02:00:00" initial_date: "1990-01-01" final_date: "1990-01-03" base_dir: "/p/scratch/chhb19/${user}/runtime/${general.setup_name}-${general.version}/" @@ -17,21 +17,22 @@ awicm3: pool_dir: "/p/project/chhb19/jstreffi/input/" fesom: - resolution: "DART" + resolution: "SO3" pool_dir: "/p/project/chhb19/jstreffi/input/fesom2/" - mesh_dir: "/p/project/chhb19/jstreffi/input/fesom2/dart/" + mesh_dir: "/p/project/chhb19/jstreffi/input/fesom2/SO3/" restart_rate: 1 restart_unit: "d" restart_first: 1 lresume: true ini_parent_exp_id: "D00" - ini_parent_date: "1989-12-31" - ini_parent_dir: "/p/project/chhb19/streffing1/input/fesom2/restart/DART/" + ini_parent_date: "2014-12-31" + ini_parent_dir: "/p/project/chhb19/streffing1/input/fesom2/restart/SO3/" choose_general.run_number: 1: restart_in_sources: - par_oce_restart: /p/project/chhb19/streffing1/input/fesom2/restart/DART/fesom.1989.oce.restart/*.nc - par_ice_restart: /p/project/chhb19/streffing1/input/fesom2/restart/DART/fesom.1989.ice.restart/*.nc + par_oce_restart: /p/project/chhb19/streffing1/input/fesom2/restart/SO3/fesom.2014.oce.restart/*.nc + par_ice_restart: /p/project/chhb19/streffing1/input/fesom2/restart/SO3/fesom.2014.ice.restart/*.nc + lasttime: '86040' namelist_changes: namelist.config: machine: @@ -46,9 +47,11 @@ fesom: albsnm: 0.77 albi: 0.78 albim: 0.70 - namelist_dir: "/p/project/chhb19/semmler1/esm_tools/namelists/fesom2/awicm3/DART/" - time_step: 240 - nproc: 4320 + time_step: 300 + nproc: 8192 + file_movements: + restart_in: + all_directions: link oifs: resolution: "TCO639" @@ -57,9 +60,13 @@ oifs: input_expid: awi3 wam: true lresume: false - time_step: 900 - nproc: 1200 - omp_num_threads: 4 + time_step: 60 + nproc: 384 + omp_num_threads: 2 + add_namelist_changes: + fort.4: + NAMCT0: + LXIOS: 'false' oasis3mct: lresume: false # Set to false to generate the rst files for first leg @@ -68,3 +75,9 @@ oasis3mct: # choose_lresume: # false: # remove_input_files: ['rmp'] + +#xios: +# with_model: oifs +# nproc: 2 +# omp_num_threads: 48 + diff --git a/runscripts/awicm3/v3.1/awicm3-v3.1-juwels-TCO95L91-CORE2.yaml b/runscripts/awicm3/v3.1/awicm3-v3.1-juwels-TCO95L91-CORE2.yaml index 5ac958b80..88553a5fa 100644 --- a/runscripts/awicm3/v3.1/awicm3-v3.1-juwels-TCO95L91-CORE2.yaml +++ b/runscripts/awicm3/v3.1/awicm3-v3.1-juwels-TCO95L91-CORE2.yaml @@ -3,13 +3,13 @@ general: setup_name: "awicm3" version: "v3.1" account: "hhb20" - compute_time: "00:10:00" - initial_date: "2000-01-01" - final_date: "2050-01-01" - base_dir: "/p/scratch/chhb19/${user}/runtime/${general.setup_name}-${general.version}/" + compute_time: "06:00:00" + initial_date: "1990-01-01" + final_date: "2040-01-01" + base_dir: "/p/scratch/chhb20/${user}/runtime/${general.setup_name}-${general.version}/" nday: 0 - nmonth: 1 - nyear: 0 + nmonth: 0 + nyear: 10 awicm3: postprocessing: false @@ -20,9 +20,9 @@ fesom: resolution: "CORE2" pool_dir: "/p/project/chhb19/jstreffi/input/fesom2/" mesh_dir: "/p/project/chhb19/jstreffi/input/fesom2/core2/" - restart_rate: 1 - restart_unit: "m" - restart_first: 1 + restart_rate: 10 + restart_unit: "y" + restart_first: 10 lresume: false time_step: 2400 nproc: 432 diff --git a/runscripts/awicm3/v3.1/awicm3-v3.1-juwels-TCO95L91-CORE2_initial.yaml b/runscripts/awicm3/v3.1/awicm3-v3.1-juwels-TCO95L91-CORE2_initial.yaml index b75fa0023..fb7fb06ee 100644 --- a/runscripts/awicm3/v3.1/awicm3-v3.1-juwels-TCO95L91-CORE2_initial.yaml +++ b/runscripts/awicm3/v3.1/awicm3-v3.1-juwels-TCO95L91-CORE2_initial.yaml @@ -2,10 +2,10 @@ general: user: !ENV ${USER} setup_name: "awicm3" version: "v3.1" - account: "hhb20" + account: "hhb21" compute_time: "00:20:00" initial_date: "2000-01-01" - final_date: "2000-03-01" + final_date: "2000-01-03" base_dir: "/p/scratch/chhb19/${user}/runtime/${general.setup_name}-${general.version}/" nday: 1 nmonth: 0 @@ -25,7 +25,7 @@ fesom: restart_first: 1 lresume: false time_step: 2400 - nproc: 432 + nproc: 144 oifs: resolution: "TCO95" diff --git a/runscripts/awicm3/v3.1/awicm3-v3.1-levante-TCO1279L137-DART_inital.yaml b/runscripts/awicm3/v3.1/awicm3-v3.1-levante-TCO1279L137-DART_inital.yaml new file mode 100644 index 000000000..69fc5cf5e --- /dev/null +++ b/runscripts/awicm3/v3.1/awicm3-v3.1-levante-TCO1279L137-DART_inital.yaml @@ -0,0 +1,85 @@ +general: + user: !ENV ${USER} + setup_name: "awicm3" + version: "v3.1" + account: "ab0995" + compute_time: "00:30:00" + initial_date: "2000-01-01" + final_date: "2004-01-01" + base_dir: "/work/ab0246/${user}/runtime/${general.setup_name}-${general.version}/" + nday: 1 + nmonth: 0 + nyear: 0 + +computer: + taskset: true + +awicm3: + postprocessing: false + model_dir: "/home/a/${user}/model_codes/${general.setup_name}-${general.version}//" + +fesom: + resolution: "DART" + namelist_dir: "/home/a/a270092/esm_tools/namelists/fesom2/2.0/awicm3/DART" + pool_dir: "/work/ab0246/a270092/input/fesom2/" + mesh_dir: "${pool_dir}/dart/" + restart_rate: 1 + restart_unit: "d" + restart_first: 1 + lresume: false + + time_step: 60 + nproc: 1024 + add_namelist_changes: + namelist.oce: + oce_dyn: + div_c: 5 + leith_c: 0.5 + +oifs: + resolution: "TCO1279" + levels: "L137" + prepifs_expid: hf05 + input_expid: awi3 + wam: true + lresume: false + time_step: 180 + nproc: 1280 + omp_num_threads: 4 + add_namelist_changes: + fort.4: + NAMCT0: + LXIOS: false + +oasis3mct: + lresume: false # Set to false to generate the rst files for first leg + time_step: 7200 + use_lucia: true + coupling_methods: + gauswgt_i: + time_transformation: instant + remapping: + gauswgt: + search_bin: latitude + nb_of_search_bins: 1 + nb_of_neighbours: 9 + weight: "2" + gauswgt_gss: + time_transformation: conserv + remapping: + gauswgt: + search_bin: latitude + nb_of_search_bins: 1 + nb_of_neighbours: 9 + weight: "2" + postprocessing: + conserv: + method: gsspos + algorithm: opt + +xios: + with_model: oifs + nproc: 1 + omp_num_threads: 128 + + diff --git a/runscripts/awicm3/v3.1/awicm3-v3.1-levante-TCO319L137.yaml b/runscripts/awicm3/v3.1/awicm3-v3.1-levante-TCO319L137-DART.yaml similarity index 100% rename from runscripts/awicm3/v3.1/awicm3-v3.1-levante-TCO319L137.yaml rename to runscripts/awicm3/v3.1/awicm3-v3.1-levante-TCO319L137-DART.yaml diff --git a/runscripts/awicm3/v3.1/awicm3-v3.1-levante-TCO319L137_inital.yaml b/runscripts/awicm3/v3.1/awicm3-v3.1-levante-TCO319L137-DART_inital.yaml similarity index 100% rename from runscripts/awicm3/v3.1/awicm3-v3.1-levante-TCO319L137_inital.yaml rename to runscripts/awicm3/v3.1/awicm3-v3.1-levante-TCO319L137-DART_inital.yaml diff --git a/runscripts/awicm3/v3.1/awicm3-v3.1-levante-TCO639L137-ROS2_inital.yaml b/runscripts/awicm3/v3.1/awicm3-v3.1-levante-TCO639L137-ROS2_inital.yaml new file mode 100644 index 000000000..fea9aa6ef --- /dev/null +++ b/runscripts/awicm3/v3.1/awicm3-v3.1-levante-TCO639L137-ROS2_inital.yaml @@ -0,0 +1,58 @@ +general: + user: !ENV ${USER} + setup_name: "awicm3" + version: "v3.1" + account: "ab0995" + compute_time: "00:30:00" + initial_date: "2000-01-01" + final_date: "2000-01-04" + base_dir: "/work/ab0246/${user}/runtime/${general.setup_name}-${general.version}/" + nday: 1 + nmonth: 0 + nyear: 0 + +computer: + taskset: true + +awicm3: + postprocessing: false + model_dir: "/home/a/${user}/model_codes/${general.setup_name}-${general.version}//" + +fesom: + resolution: "ROS2" + pool_dir: "/work/ab0246/a270092/input/fesom2/" + mesh_dir: "${pool_dir}/ROS2/" + restart_rate: 1 + restart_unit: "d" + restart_first: 1 + lresume: true + ini_parent_exp_id: "D00" + ini_parent_date: "2049-12-31" + ini_parent_dir: "/work/ab0246/a270092/input/fesom2/restart/DART/" + + namelist_dir: "${model_dir}/config/" + time_step: 60 + nproc: 2304 + +oifs: + resolution: "TCO639" + levels: "L137" + prepifs_expid: hf1d + input_expid: awi3 + wam: true + lresume: false + time_step: 600 + nproc: 384 + omp_num_threads: 1 + +oasis3mct: + lresume: false # Set to false to generate the rst files for first leg + time_step: 7200 + use_lucia: true + +xios: + with_model: oifs + nproc: 1 + omp_num_threads: 48 + + diff --git a/runscripts/awicm3/v3.1/awicm3-v3.1-levante-TCO639L137-SO3.yaml b/runscripts/awicm3/v3.1/awicm3-v3.1-levante-TCO639L137-SO3.yaml new file mode 100644 index 000000000..914078b72 --- /dev/null +++ b/runscripts/awicm3/v3.1/awicm3-v3.1-levante-TCO639L137-SO3.yaml @@ -0,0 +1,70 @@ +general: + user: !ENV ${USER} + setup_name: "awicm3" + version: "v3.1" + account: "ab0995" + compute_time: "02:00:00" + initial_date: "2000-01-01" + final_date: "2000-02-01" + base_dir: "/work/ab0246/${user}/runtime/${general.setup_name}-${general.version}/" + nday: 0 + nmonth: 1 + nyear: 0 + +computer: + taskset: true + +awicm3: + postprocessing: false + model_dir: "/home/a/${user}/model_codes/${general.setup_name}-${general.version}//" + +fesom: + resolution: "SO3" + pool_dir: " /work/ab0246/a270092/input/fesom2/" + mesh_dir: "${pool_dir}/SO3/" + restart_rate: 1 + restart_unit: "m" + restart_first: 1 + lresume: false + ini_parent_exp_id: "D00" + ini_parent_date: "2014-12-31" + ini_parent_dir: "/work/ab0246/a270092/input/fesom2/restart/SO3/" + choose_general.run_number: + 1: + restart_in_sources: + par_oce_restart: /work/ab0246/a270092/input/fesom2/restart/SO3//fesom.2014.oce.restart/*.nc + par_ice_restart: /work/ab0246/a270092/input/fesom2/restart/SO3//fesom.2014.ice.restart/*.nc + lasttime: '86220' + time_step: 60 + nproc: 8192 + file_movements: + restart_in: + all_directions: link + +oifs: + resolution: "TCO639" + levels: "L137" + prepifs_expid: hf1d + input_expid: awi3 + wam: true + lresume: false + time_step: 720 + nproc: 384 + omp_num_threads: 8 + add_namelist_changes: + fort.4: + NAMCT0: + LXIOS: 'false' + + +oasis3mct: + lresume: true # Set to false to generate the rst files for first leg + time_step: 3600 + use_lucia: true + +xios: + with_model: oifs + nproc: 1 + omp_num_threads: 48 + + diff --git a/runscripts/awicm3/v3.1/awicm3-v3.1-levante-TCO639L137-SO3_inital.yaml b/runscripts/awicm3/v3.1/awicm3-v3.1-levante-TCO639L137-SO3_inital.yaml new file mode 100644 index 000000000..2d6e8e9e2 --- /dev/null +++ b/runscripts/awicm3/v3.1/awicm3-v3.1-levante-TCO639L137-SO3_inital.yaml @@ -0,0 +1,70 @@ +general: + user: !ENV ${USER} + setup_name: "awicm3" + version: "v3.1" + account: "ab0995" + compute_time: "02:00:00" + initial_date: "2000-01-01" + final_date: "2000-01-03" + base_dir: "/work/ab0246/${user}/runtime/${general.setup_name}-${general.version}/" + nday: 1 + nmonth: 0 + nyear: 0 + +computer: + taskset: true + +awicm3: + postprocessing: false + model_dir: "/home/a/${user}/model_codes/${general.setup_name}-${general.version}//" + +fesom: + resolution: "SO3" + pool_dir: " /work/ab0246/a270092/input/fesom2/" + mesh_dir: "${pool_dir}/SO3/" + restart_rate: 1 + restart_unit: "d" + restart_first: 1 + lresume: false + ini_parent_exp_id: "D00" + ini_parent_date: "2014-12-31" + ini_parent_dir: "/work/ab0246/a270092/input/fesom2/restart/SO3/" + choose_general.run_number: + 1: + restart_in_sources: + par_oce_restart: /work/ab0246/a270092/input/fesom2/restart/SO3//fesom.2014.oce.restart/*.nc + par_ice_restart: /work/ab0246/a270092/input/fesom2/restart/SO3//fesom.2014.ice.restart/*.nc + lasttime: '86340' + time_step: 60 + nproc: 8192 + file_movements: + restart_in: + all_directions: link + +oifs: + resolution: "TCO639" + levels: "L137" + prepifs_expid: hf1d + input_expid: awi3 + wam: true + lresume: false + time_step: 60 + nproc: 384 + omp_num_threads: 8 + add_namelist_changes: + fort.4: + NAMCT0: + LXIOS: 'false' + + +oasis3mct: + lresume: false # Set to false to generate the rst files for first leg + time_step: 3600 + use_lucia: true + +xios: + with_model: oifs + nproc: 1 + omp_num_threads: 48 + + diff --git a/runscripts/awicm3/v3.1/awicm3-v3.1-levante-TCO639L137-jane.yaml b/runscripts/awicm3/v3.1/awicm3-v3.1-levante-TCO639L137-jane.yaml new file mode 100644 index 000000000..8f9dfd73e --- /dev/null +++ b/runscripts/awicm3/v3.1/awicm3-v3.1-levante-TCO639L137-jane.yaml @@ -0,0 +1,60 @@ +general: + user: !ENV ${USER} + setup_name: "awicm3" + version: "v3.1" + account: "ab0995" + compute_time: "00:30:00" + initial_date: "2000-01-01" + final_date: "2000-01-04" + base_dir: "/work/ab0246/${user}/runtime/${general.setup_name}-${general.version}/" + nday: 1 + nmonth: 0 + nyear: 0 + +computer: + taskset: true + +awicm3: + postprocessing: false + model_dir: "/home/a/${user}/model_codes/${general.setup_name}-${general.version}//" + +fesom: + resolution: "jane" + pool_dir: " /work/ab0246/a270092/input/fesom2/" + mesh_dir: "${pool_dir}/jane/" + restart_rate: 1 + restart_unit: "d" + restart_first: 1 + lresume: true + ini_parent_exp_id: "D00" + ini_parent_date: "1980-12-31" + ini_parent_dir: "/work/ab0246/a270092/input/fesom2/restart/jane/" + time_step: 80 + nproc: 3840 + file_movements: + restart_in: + all_directions: link + + +oifs: + resolution: "TCO639" + levels: "L137" + prepifs_expid: hf1d + input_expid: awi3 + wam: true + lresume: false + time_step: 300 + nproc: 384 + omp_num_threads: 2 + +oasis3mct: + lresume: false # Set to false to generate the rst files for first leg + time_step: 3600 + use_lucia: true + +xios: + with_model: oifs + nproc: 1 + omp_num_threads: 48 + + diff --git a/runscripts/awicm3/v3.1/awicm3-v3.1-levante-TCO639L137-jane_inital.yaml b/runscripts/awicm3/v3.1/awicm3-v3.1-levante-TCO639L137-jane_inital.yaml new file mode 100644 index 000000000..12c5b789e --- /dev/null +++ b/runscripts/awicm3/v3.1/awicm3-v3.1-levante-TCO639L137-jane_inital.yaml @@ -0,0 +1,68 @@ +general: + user: !ENV ${USER} + setup_name: "awicm3" + version: "v3.1" + account: "ab0995" + compute_time: "02:00:00" + initial_date: "2000-01-01" + final_date: "2000-01-04" + base_dir: "/work/ab0246/${user}/runtime/${general.setup_name}-${general.version}/" + nday: 1 + nmonth: 0 + nyear: 0 + +computer: + taskset: true + +awicm3: + postprocessing: false + model_dir: "/home/a/${user}/model_codes/${general.setup_name}-${general.version}//" + +fesom: + resolution: "jane" + pool_dir: " /work/ab0246/a270092/input/fesom2/" + mesh_dir: "${pool_dir}/jane/" + restart_rate: 1 + restart_unit: "d" + restart_first: 1 + lresume: true + ini_parent_exp_id: "D00" + ini_parent_date: "1980-12-31" + ini_parent_dir: "/work/ab0246/a270092/input/fesom2/restart/jane/" + time_step: 40 + nproc: 3840 + file_movements: + restart_in: + all_directions: link + choose_general.run_number: + 1: + lasttime: '86320' + + + +oifs: + resolution: "TCO639" + levels: "L137" + prepifs_expid: hf1d + input_expid: awi3 + wam: true + lresume: false + time_step: 720 + nproc: 384 + omp_num_threads: 4 + add_namelist_changes: + fort.4: + NAMCT0: + LXIOS: 'false' + +oasis3mct: + lresume: false # Set to false to generate the rst files for first leg + time_step: 3600 + use_lucia: true + +xios: + with_model: oifs + nproc: 1 + omp_num_threads: 48 + + diff --git a/runscripts/awicm3/v3.1/awicm3-v3.1-levante-TCO95L91-CORE2.yaml b/runscripts/awicm3/v3.1/awicm3-v3.1-levante-TCO95L91-CORE2.yaml index 6d603763d..3d91ac5d2 100644 --- a/runscripts/awicm3/v3.1/awicm3-v3.1-levante-TCO95L91-CORE2.yaml +++ b/runscripts/awicm3/v3.1/awicm3-v3.1-levante-TCO95L91-CORE2.yaml @@ -26,8 +26,8 @@ fesom: restart_unit: "m" restart_first: 1 lresume: false - time_step: 2400 - nproc: 384 + time_step: 1800 + nproc: 128 oifs: resolution: "TCO95" @@ -37,11 +37,8 @@ oifs: wam: true lresume: false time_step: 3600 - nproc: 384 - omp_num_threads: 8 - -rnfmap: - omp_num_threads: 128 + nproc: 128 + omp_num_threads: 1 oasis3mct: lresume: true # Set to false to generate the rst files for first leg @@ -49,6 +46,6 @@ oasis3mct: xios: with_model: oifs - nproc: 8 - omp_num_threads: 16 + nproc: 4 + omp_num_threads: 32 diff --git a/runscripts/awicm3/v3.1/awicm3-v3.1-levante-TCO95L91-CORE2_initial.yaml b/runscripts/awicm3/v3.1/awicm3-v3.1-levante-TCO95L91-CORE2_initial.yaml index 31e72a031..77e10d9ff 100644 --- a/runscripts/awicm3/v3.1/awicm3-v3.1-levante-TCO95L91-CORE2_initial.yaml +++ b/runscripts/awicm3/v3.1/awicm3-v3.1-levante-TCO95L91-CORE2_initial.yaml @@ -27,7 +27,7 @@ fesom: restart_first: 1 lresume: false time_step: 2400 - nproc: 384 + nproc: 128 oifs: resolution: "TCO95" @@ -37,7 +37,7 @@ oifs: wam: true lresume: false time_step: 3600 - nproc: 384 + nproc: 128 omp_num_threads: 1 rnfmap: diff --git a/runscripts/awicm3/v3.1/awicm3-v3.1-ollie-TCO95L91-CORE2.yaml b/runscripts/awicm3/v3.1/awicm3-v3.1-ollie-TCO95L91-CORE2.yaml index 824f56fce..63f3bde26 100644 --- a/runscripts/awicm3/v3.1/awicm3-v3.1-ollie-TCO95L91-CORE2.yaml +++ b/runscripts/awicm3/v3.1/awicm3-v3.1-ollie-TCO95L91-CORE2.yaml @@ -4,10 +4,10 @@ general: version: "v3.1" compute_time: "00:20:00" initial_date: "2000-01-01" - final_date: "2000-02-01" + final_date: "2000-01-03" base_dir: "/work/ollie/${user}/runtime/${general.setup_name}-${general.version}/" - nday: 0 - nmonth: 1 + nday: 1 + nmonth: 0 nyear: 0 awicm3: @@ -20,11 +20,11 @@ fesom: pool_dir: "/work/ollie/jstreffi/input/fesom2/" mesh_dir: "/work/ollie/jstreffi/input/fesom2/core2/" restart_rate: 1 - restart_unit: "m" + restart_unit: "d" restart_first: 1 lresume: false - time_step: 2400 - nproc: 432 + time_step: 1800 + nproc: 288 oifs: resolution: "TCO95" @@ -34,8 +34,8 @@ oifs: wam: true lresume: false time_step: 3600 - nproc: 216 - omp_num_threads: 6 + nproc: 72 + omp_num_threads: 2 oasis3mct: lresume: true # Set to false to generate the rst files for first leg diff --git a/runscripts/awicm3/v3.1/awicm3-v3.1-ollie-TCO95L91-CORE2_inital.yaml b/runscripts/awicm3/v3.1/awicm3-v3.1-ollie-TCO95L91-CORE2_initial.yaml similarity index 93% rename from runscripts/awicm3/v3.1/awicm3-v3.1-ollie-TCO95L91-CORE2_inital.yaml rename to runscripts/awicm3/v3.1/awicm3-v3.1-ollie-TCO95L91-CORE2_initial.yaml index 530521c9c..cd0166bca 100644 --- a/runscripts/awicm3/v3.1/awicm3-v3.1-ollie-TCO95L91-CORE2_inital.yaml +++ b/runscripts/awicm3/v3.1/awicm3-v3.1-ollie-TCO95L91-CORE2_initial.yaml @@ -23,8 +23,8 @@ fesom: restart_unit: "d" restart_first: 1 lresume: false - time_step: 2400 - nproc: 432 + time_step: 1800 + nproc: 288 oifs: resolution: "TCO95" @@ -34,8 +34,8 @@ oifs: wam: true lresume: false time_step: 3600 - nproc: 36 - omp_num_threads: 1 + nproc: 72 + omp_num_threads: 2 oasis3mct: lresume: false # Set to false to generate the rst files for first leg diff --git a/runscripts/awicm3/v3.2/BASE+CLOUD+ORB+RCIMIN.yaml b/runscripts/awicm3/v3.2/BASE+CLOUD+ORB+RCIMIN.yaml new file mode 100644 index 000000000..c7b8add2b --- /dev/null +++ b/runscripts/awicm3/v3.2/BASE+CLOUD+ORB+RCIMIN.yaml @@ -0,0 +1,66 @@ +general: + user: !ENV ${USER} + setup_name: "awicm3" + version: "master" + account: "hhb20" + compute_time: "06:00:00" + initial_date: "1990-01-01" + final_date: "2040-01-01" + base_dir: "/p/scratch/chhb20/${user}/runtime/${general.setup_name}-${general.version}/" + nday: 0 + nmonth: 0 + nyear: 10 + +awicm3: + postprocessing: false + model_dir: "/p/project/chhb19/${user}/model_codes/${general.setup_name}-${general.version}/" + pool_dir: "/p/project/chhb19/jstreffi/input/" + +fesom: + resolution: "CORE2" + pool_dir: "/p/project/chhb19/jstreffi/input/fesom2/" + mesh_dir: "/p/project/chhb19/jstreffi/input/fesom2/core2/" + restart_rate: 10 + restart_unit: "y" + restart_first: 10 + lresume: false + time_step: 2400 + nproc: 432 + add_namelist_changes: + namelist.io: + nml_list: + io_list: [ 'sst',1, 'm', 4, 'sss',1, 'm', 4,'ssh',1, 'm', 4,'uice',1, 'd', 4,'vice',1, 'd', 4,'a_ice',1, 'm', 4,'m_ice',1, 'm', 4,'m_snow',1, 'm', 4,'MLD1',1, 'm', 4,'MLD2',1, 'm', 4,'MLD3',1, 'm', 4,'tx_sur',1, 'm', 4,'ty_sur',1, 'm', 4,'temp',1, 'm', 4,'salt',1, 'm', 8,'N2',1, 'y', 4,'Kv',1, 'y', 4,'u',1, 'y', 4,'v',1, 'y', 4,'unod',1, 'y', 4,'vnod',1, 'y', 4,'w',1, 'y', 4,'Av',1, 'y', 4,'bolus_u',1, 'y', 4,'bolus_v',1, 'y', 4,'bolus_w',1, 'y', 4] + +oifs: + resolution: "TCO95" + levels: "L91" + prepifs_expid: aack + input_expid: awi3 + lresume: false + time_step: 3600 + nproc: 360 + omp_num_threads: 6 + add_namelist_changes: + fort.4: + NAMCLDP: + SCLCT_SWITCH: 2 + NAMORB: + LCORBMD: true + ORBMODE: "fixed_parameters" + ORBECCEN: 0.016764 + ORBOBLIQ: 23.459 + ORBMVELP: 100.33 + NAEPHY: + RCIMIN: 0 + +oasis3mct: + lresume: true # Set to false to generate the rst files for first leg + time_step: 7200 + use_lucia: true + +xios: + with_model: oifs + nproc: 2 + omp_num_threads: 48 + + diff --git a/runscripts/awicm3/v3.2/BASE+CLOUD+ORB.yaml b/runscripts/awicm3/v3.2/BASE+CLOUD+ORB.yaml new file mode 100644 index 000000000..d5218b3e7 --- /dev/null +++ b/runscripts/awicm3/v3.2/BASE+CLOUD+ORB.yaml @@ -0,0 +1,64 @@ +general: + user: !ENV ${USER} + setup_name: "awicm3" + version: "master" + account: "hhb20" + compute_time: "06:00:00" + initial_date: "1990-01-01" + final_date: "2400-01-01" + base_dir: "/p/scratch/chhb20/${user}/runtime/${general.setup_name}-${general.version}/" + nday: 0 + nmonth: 0 + nyear: 10 + +awicm3: + postprocessing: false + model_dir: "/p/project/chhb19/${user}/model_codes/${general.setup_name}-${general.version}/" + pool_dir: "/p/project/chhb19/jstreffi/input/" + +fesom: + resolution: "CORE2" + pool_dir: "/p/project/chhb19/jstreffi/input/fesom2/" + mesh_dir: "/p/project/chhb19/jstreffi/input/fesom2/core2/" + restart_rate: 10 + restart_unit: "y" + restart_first: 10 + lresume: false + time_step: 2400 + nproc: 432 + add_namelist_changes: + namelist.io: + nml_list: + io_list: [ 'sst',1, 'm', 4, 'sss',1, 'm', 4,'ssh',1, 'm', 4,'uice',1, 'd', 4,'vice',1, 'd', 4,'a_ice',1, 'm', 4,'m_ice',1, 'm', 4,'m_snow',1, 'm', 4,'MLD1',1, 'm', 4,'MLD2',1, 'm', 4,'MLD3',1, 'm', 4,'tx_sur',1, 'm', 4,'ty_sur',1, 'm', 4,'temp',1, 'm', 4,'salt',1, 'm', 8,'N2',1, 'y', 4,'Kv',1, 'y', 4,'u',1, 'y', 4,'v',1, 'y', 4,'unod',1, 'y', 4,'vnod',1, 'y', 4,'w',1, 'y', 4,'Av',1, 'y', 4,'bolus_u',1, 'y', 4,'bolus_v',1, 'y', 4,'bolus_w',1, 'y', 4] + +oifs: + resolution: "TCO95" + levels: "L91" + prepifs_expid: aack + input_expid: awi3 + lresume: false + time_step: 3600 + nproc: 360 + omp_num_threads: 6 + add_namelist_changes: + fort.4: + NAMCLDP: + SCLCT_SWITCH: 2 + NAMORB: + LCORBMD: true + ORBMODE: "fixed_parameters" + ORBECCEN: 0.016764 + ORBOBLIQ: 23.459 + ORBMVELP: 100.33 + +oasis3mct: + lresume: true # Set to false to generate the rst files for first leg + time_step: 7200 + use_lucia: true + +xios: + with_model: oifs + nproc: 2 + omp_num_threads: 48 + + diff --git a/runscripts/awicm3/v3.2/BASE+CLOUD.yaml b/runscripts/awicm3/v3.2/BASE+CLOUD.yaml new file mode 100644 index 000000000..13189d07f --- /dev/null +++ b/runscripts/awicm3/v3.2/BASE+CLOUD.yaml @@ -0,0 +1,59 @@ +general: + user: !ENV ${USER} + setup_name: "awicm3" + version: "master" + account: "hhb20" + compute_time: "06:00:00" + initial_date: "1990-01-01" + final_date: "2040-01-01" + base_dir: "/p/scratch/chhb20/${user}/runtime/${general.setup_name}-${general.version}/" + nday: 0 + nmonth: 0 + nyear: 10 + +awicm3: + postprocessing: false + model_dir: "/p/project/chhb19/${user}/model_codes/${general.setup_name}-${general.version}/" + pool_dir: "/p/project/chhb19/jstreffi/input/" + +fesom: + resolution: "CORE2" + pool_dir: "/p/project/chhb19/jstreffi/input/fesom2/" + mesh_dir: "/p/project/chhb19/jstreffi/input/fesom2/core2/" + restart_rate: 10 + restart_unit: "y" + restart_first: 10 + lresume: false + time_step: 2400 + nproc: 432 + add_namelist_changes: + namelist.io: + nml_list: + io_list: [ 'sst',1, 'm', 4, 'sss',1, 'm', 4,'ssh',1, 'm', 4,'uice',1, 'd', 4,'vice',1, 'd', 4,'a_ice',1, 'm', 4,'m_ice',1, 'm', 4,'m_snow',1, 'm', 4,'MLD1',1, 'm', 4,'MLD2',1, 'm', 4,'MLD3',1, 'm', 4,'tx_sur',1, 'm', 4,'ty_sur',1, 'm', 4,'temp',1, 'm', 4,'salt',1, 'm', 8,'N2',1, 'y', 4,'Kv',1, 'y', 4,'u',1, 'y', 4,'v',1, 'y', 4,'unod',1, 'y', 4,'vnod',1, 'y', 4,'w',1, 'y', 4,'Av',1, 'y', 4,'bolus_u',1, 'y', 4,'bolus_v',1, 'y', 4,'bolus_w',1, 'y', 4] + +oifs: + resolution: "TCO95" + levels: "L91" + prepifs_expid: aack + input_expid: awi3 + lresume: false + time_step: 3600 + nproc: 360 + omp_num_threads: 6 + add_namelist_changes: + fort.4: + NAMCLDP: + SCLCT_SWITCH: 2 + + +oasis3mct: + lresume: true # Set to false to generate the rst files for first leg + time_step: 7200 + use_lucia: true + +xios: + with_model: oifs + nproc: 2 + omp_num_threads: 48 + + diff --git a/runscripts/awicm3/v3.2/BASE.yaml b/runscripts/awicm3/v3.2/BASE.yaml new file mode 100644 index 000000000..aa5d8d34e --- /dev/null +++ b/runscripts/awicm3/v3.2/BASE.yaml @@ -0,0 +1,55 @@ +general: + user: !ENV ${USER} + setup_name: "awicm3" + version: "master" + account: "hhb20" + compute_time: "06:00:00" + initial_date: "1990-01-01" + final_date: "2040-01-01" + base_dir: "/p/scratch/chhb20/${user}/runtime/${general.setup_name}-${general.version}/" + nday: 0 + nmonth: 0 + nyear: 10 + +awicm3: + postprocessing: false + model_dir: "/p/project/chhb19/${user}/model_codes/${general.setup_name}-${general.version}/" + pool_dir: "/p/project/chhb19/jstreffi/input/" + +fesom: + resolution: "CORE2" + pool_dir: "/p/project/chhb19/jstreffi/input/fesom2/" + mesh_dir: "/p/project/chhb19/jstreffi/input/fesom2/core2/" + restart_rate: 10 + restart_unit: "y" + restart_first: 10 + lresume: false + time_step: 2400 + nproc: 432 + add_namelist_changes: + namelist.io: + nml_list: + io_list: [ 'sst',1, 'm', 4, 'sss',1, 'm', 4,'ssh',1, 'm', 4,'uice',1, 'd', 4,'vice',1, 'd', 4,'a_ice',1, 'm', 4,'m_ice',1, 'm', 4,'m_snow',1, 'm', 4,'MLD1',1, 'm', 4,'MLD2',1, 'm', 4,'MLD3',1, 'm', 4,'tx_sur',1, 'm', 4,'ty_sur',1, 'm', 4,'temp',1, 'm', 4,'salt',1, 'm', 8,'N2',1, 'y', 4,'Kv',1, 'y', 4,'u',1, 'y', 4,'v',1, 'y', 4,'unod',1, 'y', 4,'vnod',1, 'y', 4,'w',1, 'y', 4,'Av',1, 'y', 4,'bolus_u',1, 'y', 4,'bolus_v',1, 'y', 4,'bolus_w',1, 'y', 4] + + +oifs: + resolution: "TCO95" + levels: "L91" + prepifs_expid: aack + input_expid: awi3 + lresume: false + time_step: 3600 + nproc: 360 + omp_num_threads: 6 + +oasis3mct: + lresume: true # Set to false to generate the rst files for first leg + time_step: 7200 + use_lucia: true + +xios: + with_model: oifs + nproc: 2 + omp_num_threads: 48 + + diff --git a/runscripts/awicm3/frontiers/awicm3-frontiers-juwels-TCO95L91-CORE2.yaml b/runscripts/awicm3/v3.2/SPEED.yaml similarity index 80% rename from runscripts/awicm3/frontiers/awicm3-frontiers-juwels-TCO95L91-CORE2.yaml rename to runscripts/awicm3/v3.2/SPEED.yaml index 894411aed..5df3a8f9c 100644 --- a/runscripts/awicm3/frontiers/awicm3-frontiers-juwels-TCO95L91-CORE2.yaml +++ b/runscripts/awicm3/v3.2/SPEED.yaml @@ -1,15 +1,15 @@ general: user: !ENV ${USER} setup_name: "awicm3" - version: "frontiers" + version: "master" account: "hhb20" - compute_time: "00:25:00" - initial_date: "2000-01-01" - final_date: "2001-01-01" + compute_time: "00:10:00" + initial_date: "1990-01-01" + final_date: "1990-02-01" base_dir: "/p/scratch/chhb19/${user}/runtime/${general.setup_name}-${general.version}/" nday: 0 - nmonth: 0 - nyear: 1 + nmonth: 1 + nyear: 0 awicm3: postprocessing: false @@ -21,7 +21,7 @@ fesom: pool_dir: "/p/project/chhb19/jstreffi/input/fesom2/" mesh_dir: "/p/project/chhb19/jstreffi/input/fesom2/core2/" restart_rate: 1 - restart_unit: "y" + restart_unit: "m" restart_first: 1 lresume: false time_step: 2400 @@ -32,7 +32,6 @@ oifs: levels: "L91" prepifs_expid: aack input_expid: awi3 - wam: true lresume: false time_step: 3600 nproc: 360 @@ -43,3 +42,9 @@ oasis3mct: time_step: 7200 use_lucia: true +xios: + with_model: oifs + nproc: 2 + omp_num_threads: 48 + + diff --git a/runscripts/echam/echam-nudging-ollie-restart-monthly.yaml b/runscripts/echam/echam-nudging-ollie-restart-monthly.yaml new file mode 100644 index 000000000..f1193d0e6 --- /dev/null +++ b/runscripts/echam/echam-nudging-ollie-restart-monthly.yaml @@ -0,0 +1,219 @@ +general: + setup_name: "echam" + version: "6.3.05p2-wiso" + compute_time: "00:30:00" + initial_date: "2000-01-01" + final_date: "2005-01-31" + model_dir: "/home/ollie/mwerner/codes/echam-6.3.05p2-wiso/" + base_dir: "/work/ollie/mwerner/echam6-wiso-nudging/T63L47" + nmonth: 1 + nyear: 0 + with_wiso: True + use_venv: False + clean_old_rundirs_except: 3 + +echam: + scenario: "HIST" + dataset: r0007 + res: T63 + lresume: False + restart_rate: 1 + restart_unit: "months" + ini_parent_date: 19991231 + ini_parent_exp_id: "NUDGING_ERA5_T63L47_v1.2" + ini_parent_dir: "/work/ollie/mwerner/echam6-wiso-nudging/T63L47/NUDGING_ERA5_T63L47_acauquoin/restart/echam6/" + + add_namelist_changes: + namelist.echam: + runctl: + putdata: + - 6 + - 'hours' + - 'last' + - 0 + lcouple: False + lcouple_co2: False + default_output: False + lamip: True + lnudge: True + l_orbvsop87: True + putocean: "remove_from_namelist" + getocean: "remove_from_namelist" + ndgctl: + dt_nudg_start: + - ${echam.current_date!syear} + - ${echam.current_date!smonth} + - ${echam.current_date!sday} + dt_nudg_stop: + - ${echam.next_date!syear} + - ${echam.next_date!smonth} + - ${echam.next_date!sday} + inudgformat: 2 + ndg_file_nc: 'ndg%y4%m2.nc' + nsstinc: 0 + lnudgcli: False + lnudgini: False + + file_movements: + forcing: + all_directions: "link" + input: + all_directions: "link" + + remove_forcing_files: + - greenhouse + - ozonea + - ozoneb + - ozonec + - sst + - sic + + forcing_sources: + + # water isotope forcing file + wiso_sw_observed: "/home/ollie/mwerner/model_input/ECHAM6-wiso/PI_ctrl/T63/T63_wisosw_d.nc" + + # ERA5 forcing files + era5_atm: "/work/ollie/paleodyn/nudging/ERA5/atmos/T63/era5${echam.res}${echam.levels}_${echam.current_date!syear}${echam.current_date!smonth}.nc" + sst: "/work/ollie/paleodyn/nudging/ERA5/sea/T63/T63_era5sst_@YEAR@.nc" + sic: "/work/ollie/paleodyn/nudging/ERA5/sea/T63/T63_era5sic_@YEAR@.nc" + + # further ECHAM6 forcing files + greenhouse_gases: "/work/ollie/pool/ECHAM6/greenhouse.nc" + + add_forcing_files: + wiso_sw: wiso_sw_observed + + era5_previous: era5_atm + era5_current: era5_atm + era5_next: era5_atm + sst: sst + sic: sic + + greenhouse_gases: greenhouse_gases + + forcing_in_work: + wiso_sw: "unit.25" + + era5_previous: ndg${echam.prev_date!syear}${echam.prev_date!smonth}.nc + era5_current: ndg${echam.current_date!syear}${echam.current_date!smonth}.nc + era5_next: ndg${echam.next_date!syear}${echam.next_date!smonth}.nc + sst: "sst@YEAR@" + sic: "ice@YEAR@" + + greenhouse_gases: "greenhouse_gases.nc" + + add_forcing_additional_information: + sst: + - need_year_before + - need_year_after + - need_2years_after + sic: + - need_year_before + - need_year_after + - need_2years_after + + add_streams: #put these output files into output directory instead of "unknown" + - nudg + + remove_streams: # these streams have not been used in previous (script-based) setups for ECHAM6-wiso nudged simulations + - g3bid + - g3bim + - g3bday + - g3b1hi + - glday + - aclcim + - rad + - sp6h + - glim + - spim + +jsbach: + add_namelist_changes: + namelist.jsbach: + jsbach_ctl: + with_hd: True + lcc_forcing_type: 'transitions' + lcc_scheme: 2 + test_cconservation: True + test_nconservation: False + use_dynveg: False + use_disturbance: False + with_nitrogen: False + file_type: "remove_from_namelist" + file_ztype: "remove_from_namelist" + lpost_echam: "remove_from_namelist" + debug: "remove_from_namelist" + cbalance_ctl: + read_ndepo: False + hydrology_ctl: + ldebughd: "remove_from_namelist" + gethd: + - 192 + - 'steps' + - 'exact' + - 0 + puthd: + - 192 + - 'steps' + - 'exact' + - -450 + input_ctl: + var_name: "remove_from_namelist" + #dt_update: "remove_from_namelist" + init_rec: "remove_from_namelist" + + file_movements: + forcing: + all_directions: "link" + input: + all_directions: "link" + + remove_input_files: + - jsbach + + input_sources: + jsbach_bin_default: "/work/ollie/pool/JSBACH/input/r0010/T63/jsbach_T63GR15_11tiles_5layers_1976_no-dynveg.nc" + add_input_files: + jsbach_bin: jsbach_bin_default + input_in_work: + jsbach_bin: "jsbach.nc" + + remove_forcing_files: + - a_nd_file + - cover_fract + - lightning + - Ndepo + - popdens + - LU + - LU_trans + + forcing_sources: + landuse_transition: "/work/ollie/pool/JSBACH/T63/New_Hampshire_LCC/hist/LUH_transitions_T63_@YEAR@.nc" + landuse_harvest: "/work/ollie/pool/JSBACH/T63/New_Hampshire_LCC/hist/LUH_harvest_T63_@YEAR@.nc" + add_forcing_files: + landuse_transition: landuse_transition + landuse_harvest: landuse_harvest + forcing_in_work: + landuse_transition: "landuseTransitions.@YEAR@.nc" + landuse_harvest: "landuseHarvest.@YEAR@.nc" + add_forcing_additional_information: + landuse_transition: + - need_year_before + - need_year_after + landuse_harvest: + - need_year_before + - need_year_after + + remove_streams: # these streams have not been used in previous (script-based) setups for ECHAM6-wiso nudged simulations + - land + - la_wiso + - jsbid + - nitro + +hdmodel: + file_movements: + forcing: + all_directions: "link" + input: + all_directions: "link" diff --git a/runscripts/foci/foci-agrif-restart-piCtl_yearly_restart.yaml b/runscripts/foci/foci-agrif-restart-piCtl_yearly_restart.yaml new file mode 100755 index 000000000..121f237ac --- /dev/null +++ b/runscripts/foci/foci-agrif-restart-piCtl_yearly_restart.yaml @@ -0,0 +1,70 @@ +general: + use_venv: False + verbose: False + setup_name: "foci" + version: "agrif" + homedir: !ENV ${HOME} + + # operational settings: yearly restarts + compute_time: "06:00:00" + initial_date: "1850-01-01T00:00:00" # Initial exp. date + final_date: "1853-01-01T00:00:00" # Final date of the experiment + nmonth: 12 + clean_runs: 2 + # test settings: 5 daily restarts + #compute_time: "00:35:00" + #initial_date: "1850-01-01T00:00:00" # Initial exp. date + #final_date: "1850-01-16T00:00:00" # Final date of the experiment + nday: 5 + + lresume: True + ini_parent_exp_id: "FOCI1.10-TM026" + ini_parent_date: "20491231" + ini_nemo_restart_steps: 3506352 + ini_parent_dir: "${general.pool_dir}/FOCI_RESTART/${ini_parent_exp_id}/" + + postprocessing: true + # machine specific setup + account: shk00018 + base_dir: ${homedir}/esm/esm-experiments/ + +foci: + model_dir: ${general.homedir}/esm/models/foci-agrif/ + +# debug coupling, print coupling files +#oasis3mct: +# export_mode_a2o: EXPOUT + +echam: + scenario: "PI-CTRL" + resolution: "T63" + # operational settings: yearly restarts + restart_rate: ${general.nmonth} + restart_unit: "months" + # test settings: 5 daily restarts + #restart_rate: ${general.nday} + #restart_unit: "days" + nproca: 16 + nprocb: 12 + +nemo: + #agrif_dir: /path/to/my/input_files/AGRIF/agrif_${nest} + #nest1: NPAC10 + nest1: VIKING10 + #nest1: INALT10x + resolution: "ORCA05" + version: "ORCA05_LIM2_FOCI_AGRIF_AOW" + jpni: 36 + jpnj: 24 + nproc: 864 + # jpni and jpnj are 0 by default, i.e. automatic distribution on CPUs + # + # if an initial run does not work, or if you experience instabilities in NEMO or the NEST + # the following settings may help to get past those instabilities + #namelist_changes: + # namelist_cfg: + # namtra_ldf: + # rn_aht_0: 599 + +xios: + nproc: 36 diff --git a/runscripts/foci/foci-initial-piCtl_yearly_restart.yaml b/runscripts/foci/foci-initial-piCtl_yearly_restart.yaml index 17518d024..b1df852cc 100755 --- a/runscripts/foci/foci-initial-piCtl_yearly_restart.yaml +++ b/runscripts/foci/foci-initial-piCtl_yearly_restart.yaml @@ -37,6 +37,13 @@ echam: restart_unit: "months" nproca: 24 nprocb: 24 + # parallel I/O, off by default + #nprocio: 6 + #namelist_changes: + # namelist.echam: + # parctl: + # iomode: 2 + # nprocio: ${nprocio} nemo: resolution: "ORCA05" diff --git a/runscripts/foci/foci-initial-piCtl_yearly_restart_parallelio.yaml b/runscripts/foci/foci-initial-piCtl_yearly_restart_parallelio.yaml new file mode 100755 index 000000000..11fdb31f4 --- /dev/null +++ b/runscripts/foci/foci-initial-piCtl_yearly_restart_parallelio.yaml @@ -0,0 +1,56 @@ +# nesh only +# It is currently under investigation whether the extra +# #SBATCH flags below improve model performance +# Sebastian Wahl 05/2021 +# uncomment below if you run on nesh at CAU +#computer: +# additional_flags: +# - --mem=72000 +# - --constraint="cascade" + +general: + use_venv: False + verbose: False + setup_name: "foci" + version: "default" + homedir: !ENV ${HOME} + + compute_time: "01:30:00" + initial_date: "1850-01-01T00:00:00" # Initial exp. date + final_date: "1852-01-01T00:00:00" # Final date of the experiment + postprocessing: true + scenario: "PI-CTRL" + nmonth: 12 + clean_runs: 2 + + # machine specific setup + # nesh: comment account + account: shk00018 + base_dir: ${homedir}/esm/esm-experiments/ + +foci: + model_dir: ${general.homedir}/esm/models/foci-default-cmake/ + +echam: + resolution: "T63" + restart_rate: ${general.nmonth} + restart_unit: "months" + nproca: 24 + nprocb: 24 + nprocio: 6 + namelist_changes: + namelist.echam: + parctl: + iomode: 2 + nprocio: ${nprocio} + +nemo: + resolution: "ORCA05" + version: "ORCA05_LIM2_KCM_AOW" + jpni: 20 + jpnj: 24 + nproc: 480 + # jpni and jpnj are 0 by default, i.e. automatic distribution on CPUs + +xios: + nproc: 12 diff --git a/runscripts/focioifs/focioifs-piCtl-agrif-HR-blogin.yaml b/runscripts/focioifs/focioifs-piCtl-agrif-HR-blogin.yaml new file mode 100755 index 000000000..37eb5eea4 --- /dev/null +++ b/runscripts/focioifs/focioifs-piCtl-agrif-HR-blogin.yaml @@ -0,0 +1,96 @@ +# example to use the a small number of nodes / CPUs that +general: + use_venv: False + verbose: False + homedir: !ENV ${HOME} + + setup_name: "focioifs" + version: "agrif" + resolution: "TCO399_ORCA05" + + compute_time: "01:00:00" + initial_date: "1850-01-01T00:00:00" # Initial exp. date + final_date: "1850-02-01T00:00:00" # Final date of the experiment + + nyear: 0 + nmonth: 1 + nday: 0 + restart_rate: 1 + restart_unit: days + hours: 0 + + # machine specific setup + account: shk00018 #hirace + base_dir: ${general.homedir}/esm/esm-experiments/ + #base_dir: /p/project/hirace/kjellsson1/esm/esm-experiments/ + +focioifs: + #model_dir: /p/project/hirace/kjellsson1/esm/models/focioifs-agrif/ + model_dir: ${general.homedir}/esm/models/focioifs-agrif/ + version: agrif + +oifs: + version: "43r3" + with_xios: True + scenario: "piControl" + mip: "cmip6" + pool_dir: "/scratch/projects/shk00018/foci_input2/" + input_dir: "${pool_dir}/openifs_cy43_tco399/" + rtables_dir: "${pool_dir}/openifs_cy43_general/rtables/" + vtables_dir: "${pool_dir}/openifs_cy43_general/vtables/" + clim_dir: "${pool_dir}/openifs_cy43_tco399/399_4/" + ifsdata_dir: "${pool_dir}/openifs_cy43_general/ifsdata/" + cmip5_data_dir: "${pool_dir}/openifs_cy43_general/cmip5_ghg/" + cmip6_data_dir: "${pool_dir}/openifs_cy43_general/cmip6-data/" + icmcl_dir: "${pool_dir}/openifs_cy43_tco399/2008010100/" + icmcl_file: "ICMCLh9twINIT" + prepifs_expid: h9tw + prepifs_startdate: 20080101 + resolution: TCO399 + levels: L91 + time_step: 900 + lresume: 0 + nproc: 480 + omp_num_threads: 8 + use_ocean_currents: 0 + with_nest1: true + +oasis3mct: + norestart: T + use_lucia: True + debug_level: 1 + coupling_time_step: 3600 + #export_mode: EXPOUT + pool_dir: /scratch/projects/shk00018/foci_input2/oasis3_openifs43r3-tco399_orca05_viking10/ + ini_parent_dir: /scratch/projects/shk00018/foci_input2/oasis3_openifs43r3-tco399_orca05_viking10/ + oasis_date_stamp: "" + +nemo: + agrif_dir: /scratch/projects/shk00018/foci_input2/agrif_viking10/ + resolution: "ORCA05" + #time_step: 600 + version: "ORCA05_LIM2_KCM_AGRIF_OASISMCT4" + jpni: 24 + jpnj: 18 + nproc: 432 + nest1: viking10 + + add_namelist_changes: + namelist_cfg: + #namsbc: + # nn_fsbc: 1 + namsbc_rnf: + rn_rfact: 1.06 + 1_namelist_cfg: + #namsbc: + # nn_fsbc: 1 + namsbc_rnf: + rn_rfact: 0.0 + +rnfmap: + nproc: 1 + +xios: + with_model: focioifs + xml_dir: /scratch/projects/shk00018/foci_input2/oasis3_openifs43r3-tco399_orca05_viking10/output_for_test/ + nproc: 95 diff --git a/runscripts/focioifs/focioifs-piCtl-agrif-blogin.yaml b/runscripts/focioifs/focioifs-piCtl-agrif-blogin.yaml index f37baa176..ab6ebf8bd 100755 --- a/runscripts/focioifs/focioifs-piCtl-agrif-blogin.yaml +++ b/runscripts/focioifs/focioifs-piCtl-agrif-blogin.yaml @@ -8,13 +8,13 @@ general: version: "agrif" resolution: "TCO95_ORCA05" - compute_time: "00:30:00" + compute_time: "01:00:00" initial_date: "1850-01-01T00:00:00" # Initial exp. date - final_date: "1850-01-06T00:00:00" # Final date of the experiment + final_date: "1850-02-01T00:00:00" # Final date of the experiment nyear: 0 - nmonth: 0 - nday: 5 + nmonth: 1 + nday: 0 restart_rate: 1 restart_unit: days hours: 0 @@ -47,35 +47,53 @@ oifs: prepifs_startdate: 20080101 resolution: TCO95 levels: L91 + time_step: 1800 lresume: 0 - nproc: 143 + nproc: 144 + omp_num_threads: 2 use_ocean_currents: 0 with_nest1: true oasis3mct: norestart: F - use_lucia: False - debug_level: 5 - export_mode: EXPOUT + use_lucia: True + debug_level: 1 + #export_mode: EXPOUT #pool_dir: "/p/project/hirace/kjellsson1/foci_input2/oasis3_openifs43r3-tco95_orca05_viking10/" #ini_parent_dir: "/p/project/hirace/kjellsson1/foci_input2/oasis3_openifs43r3-tco95_orca05_viking10/" - pool_dir: /scratch/usr/shkjocke/foci_input2/OASIS3_OPENIFS43R3-TCO95_ORCA05_VIKING10/ - ini_parent_dir: /scratch/usr/shkjocke/foci_input2/OASIS3_OPENIFS43R3-TCO95_ORCA05_VIKING10/ + #pool_dir: /scratch/usr/shkjocke/foci_input2/OASIS3_OPENIFS43R3-TCO95_ORCA05_VIKING10/ + #ini_parent_dir: /scratch/usr/shkjocke/foci_input2/OASIS3_OPENIFS43R3-TCO95_ORCA05_VIKING10/ + pool_dir: /scratch/projects/shk00018/foci_input2/oasis3_openifs43r3-tco95_orca05_viking10/ + ini_parent_dir: /scratch/projects/shk00018/foci_input2/oasis3_openifs43r3-tco95_orca05_viking10/ oasis_date_stamp: "" nemo: + agrif_dir: /scratch/projects/shk00018/foci_input2/agrif_viking10/ resolution: "ORCA05" + #time_step: 600 version: "ORCA05_LIM2_KCM_AGRIF_OASISMCT4" - jpni: 24 - jpnj: 18 - nproc: 432 + jpni: 36 + jpnj: 24 + nproc: 864 nest1: viking10 + add_namelist_changes: + namelist_cfg: + #namsbc: + # nn_fsbc: 1 + namsbc_rnf: + rn_rfact: 1.06 + 1_namelist_cfg: + #namsbc: + # nn_fsbc: 1 + namsbc_rnf: + rn_rfact: 1.0 + rnfmap: nproc: 1 xios: with_model: focioifs #xml_dir: "/p/project/hirace/kjellsson1/foci_input2/oasis3_openifs43r3-tco95_orca05_viking10/output_for_test/" - xml_dir: /scratch/usr/shkjocke/foci_input2/OASIS3_OPENIFS43R3-TCO95_ORCA05_VIKING10/output_for_test/ - nproc: 48 + xml_dir: /scratch/projects/shk00018/foci_input2/oasis3_openifs43r3-tco95_orca05_viking10/output_for_test/ + nproc: 47 diff --git a/runscripts/focioifs/focioifs-piCtl-initial-blogin.yaml b/runscripts/focioifs/focioifs-piCtl-initial-blogin.yaml index 0c810d3e7..3b6223ef8 100755 --- a/runscripts/focioifs/focioifs-piCtl-initial-blogin.yaml +++ b/runscripts/focioifs/focioifs-piCtl-initial-blogin.yaml @@ -4,11 +4,12 @@ general: homedir: !ENV ${HOME} setup_name: "focioifs" + version: "2.1" resolution: "TCO95_ORCA05" compute_time: "12:00:00" initial_date: "1850-01-01T00:00:00" # Initial exp. date - final_date: "1950-01-01T00:00:00" # Final date of the experiment + final_date: "2300-01-01T00:00:00" # Final date of the experiment nyear: 10 nmonth: 0 @@ -24,12 +25,12 @@ general: base_dir: ${general.homedir}/esm/esm-experiments/ focioifs: - model_dir: ${general.homedir}/esm/models/focioifs-2.0 + model_dir: ${general.homedir}/esm/models/focioifs-2.1 oifs: version: "43r3" with_xios: True - scenario: "piControl" + scenario: "historical" mip: "cmip6" pool_dir: /scratch/projects/shk00018/foci_input2/ input_dir: "${pool_dir}/openifs_cy43_tco95/" @@ -45,23 +46,25 @@ oifs: prepifs_startdate: 20080101 resolution: TCO95 levels: L91 - #time_step: 1800 + time_step: 1800 lresume: 0 - nproc: 287 + nproc: 288 + omp_num_threads: 2 use_ocean_currents: 0 perturb: 0 sclct_switch: 2 - #add_namelist_changes: - # fort.4: - # NAMGFL: - # NMFDIAGLEV: 2 + add_namelist_changes: + fort.4: + NAERAD: + NCMIPFIXYR: 1950 + LSOLAR1950: ".true." oasis3mct: norestart: F use_lucia: True #export_mode: EXPOUT - #debug_level: 50 + debug_level: 50 pool_dir: "/scratch/projects/shk00018/foci_input2/oasis3_openifs43r3-tco95_orca05/" ini_parent_dir: "/scratch/projects/shk00018/foci_input2/oasis3_openifs43r3-tco95_orca05/" oasis_date_stamp: "" diff --git a/runscripts/focioifs/focioifs-piCtl-orca12-initial-blogin.yaml b/runscripts/focioifs/focioifs-piCtl-orca12-initial-blogin.yaml new file mode 100755 index 000000000..0733c7da6 --- /dev/null +++ b/runscripts/focioifs/focioifs-piCtl-orca12-initial-blogin.yaml @@ -0,0 +1,96 @@ +general: + use_venv: False + verbose: False + homedir: !ENV ${HOME} + + setup_name: "focioifs" + version: "2.1-O12" + resolution: "TCO95_ORCA12" + + compute_time: "12:00:00" + initial_date: "1950-01-01T00:00:00" # Initial exp. date + final_date: "1950-01-02T00:00:00" # Final date of the experiment + + nyear: 0 + nmonth: 0 + nday: 1 + restart_rate: 1 + restart_unit: days + hours: 0 + + postprocessing: True + + # machine specific setup + account: shkjocke + base_dir: ${general.homedir}/esm/esm-experiments/ + +focioifs: + model_dir: ${general.homedir}/esm/models/focioifs-2.1-O12 + +oifs: + version: "43r3" + with_xios: True + scenario: "historical" + mip: "cmip6" + pool_dir: /scratch/projects/shk00018/foci_input2/ + input_dir: "${pool_dir}/openifs_cy43_tco95/" + rtables_dir: "${pool_dir}/openifs_cy43_general/rtables/" + vtables_dir: "${pool_dir}/openifs_cy43_general/vtables/" + clim_dir: "${pool_dir}/openifs_cy43_tco95/95_4/" + ifsdata_dir: "${pool_dir}/openifs_cy43_general/ifsdata/" + cmip5_data_dir: "${pool_dir}/openifs_cy43_general/cmip5_ghg/" + cmip6_data_dir: "${pool_dir}/openifs_cy43_general/cmip6-data/" + icmcl_dir: "${pool_dir}/openifs_cy43_tco95/2008010100/" + icmcl_file: "ICMCLhagwINIT" + prepifs_expid: hagw + prepifs_startdate: 20080101 + resolution: TCO95 + levels: L91 + time_step: 1800 + lresume: 0 + nproc: 287 + use_ocean_currents: 0 + perturb: 0 + sclct_switch: 2 + + add_namelist_changes: + fort.4: + NAERAD: + NCMIPFIXYR: 1950 + LSOLAR1950: ".true." + +oasis3mct: + norestart: F + use_lucia: True + export_mode: EXPOUT + debug_level: 50 + coupling_time_step: 1800 + pool_dir: "/scratch/projects/shk00018/foci_input2/oasis3_openifs43r3-tco95_orca12/" + ini_parent_dir: "/scratch/projects/shk00018/foci_input2/oasis3_openifs43r3-tco95_orca12/" + oasis_date_stamp: "" + +nemo: + resolution: "ORCA12" + jpni: 24 + jpnj: 18 + nproc: 432 + time_step: 60 + input_dir: "/scratch/projects/shk00018/ORCA12/" + add_namelist_changes: + namelist_cfg: + namsbc_rnf: + rn_rfact: 1.058 + namtra_ldf: + rn_aht_0: 200 + rn_aht_m: 200 + namdyn_ldf: + rn_ahm_0_blp: -1e11 + rn_ahm_m_blp: -1e13 + +rnfmap: + nproc: 1 + +xios: + with_model: focioifs + xml_dir: "/scratch/projects/shk00018/foci_input2/oasis3_openifs43r3-tco95_orca12/output_for_test/" + nproc: 47 diff --git a/runscripts/focioifs/focioifs21-piCtl-initial-glogin.yaml b/runscripts/focioifs/focioifs21-piCtl-initial-glogin.yaml new file mode 100755 index 000000000..fec78f4b2 --- /dev/null +++ b/runscripts/focioifs/focioifs21-piCtl-initial-glogin.yaml @@ -0,0 +1,112 @@ +general: + use_venv: False + verbose: False + homedir: !ENV ${HOME} + + setup_name: "focioifs" + resolution: "TCO95_ORCA05" + version: "2.1" + + compute_time: "01:00:00" + initial_date: "1950-01-01T00:00:00" # Initial exp. date + final_date: "1951-01-01T00:00:00" # Final date of the experiment + + nyear: 1 + nmonth: 0 + nday: 0 + restart_rate: 1 + restart_unit: days + hours: 0 + account: shk00018 + base_dir: /scratch/usr/shkjocke/esm-experiments/ + + # This activates post processing for OpenIFS and NEMO + postprocessing: 1 + +computer: + additional_flags: '--qos=preempt' + +focioifs: + model_dir: ${general.homedir}/esm/models/focioifs-2.1/ + +oifs: + version: "43r3" + time_step: 1800 + with_xios: True + scenario: "piControl" + mip: "cmip6" + pool_dir: /scratch/projects/shk00018/foci_input2/ + input_dir: "${pool_dir}/openifs_cy43_tco95/" + rtables_dir: "${pool_dir}/openifs_cy43_general/rtables/" + vtables_dir: "${pool_dir}/openifs_cy43_general/vtables/" + clim_dir: "${pool_dir}/openifs_cy43_tco95/95_4/" + ifsdata_dir: "${pool_dir}/openifs_cy43_general/ifsdata/" + cmip5_data_dir: "${pool_dir}/openifs_cy43_general/cmip5_ghg/" + cmip6_data_dir: "${pool_dir}/openifs_cy43_general/cmip6-data/" + icmcl_dir: "${pool_dir}/OPENIFS43R3-TCO95/2008010100/" + icmcl_file: "ICMCLhagwINIT" + # This would use initial conditions from ERA-Interim 2008-01-01 + prepifs_expid: hagw + prepifs_startdate: 20080101 + + resolution: TCO95 + levels: L91 + nproc: 288 + omp_num_threads: 2 + use_ocean_currents: 0 + sclct_switch: 2 + + # Fix to control-1950 as HighResMIP + add_namelist_changes: + fort.4: + NAERAD: + NCMIPFIXYR: 1950 + LSOLAR1950: ".true." + NAMMCC: + RALBSEAD_NML: 0.045 + +oasis3mct: + lresume: True + pool_dir: "/scratch/projects/shk00018/foci_input2/oasis3_openifs43r3-tco95_orca05/" + # This would be for a cold start (SST = 0C,etc) + ini_parent_dir: "/scratch/projects/shk00018/foci_input2/oasis3_openifs43r3-tco95_orca05/" + + norestart: F + use_lucia: True + #export_mode: EXPOUT + #debug_level: 50 + oasis_date_stamp: "" + +nemo: + lresume: ${general.lresume} + + resolution: "ORCA05" + jpni: 24 + jpnj: 18 + nproc: 432 + add_input_sources: + sn_tem_levitus: /scratch/projects/shk00018/ORCA05/votemper_EN4_gridded_195001-ORCA05_DROWN.nc + sn_sal_levitus: /scratch/projects/shk00018/ORCA05/vosaline_EN4_gridded_195001-ORCA05_DROWN.nc + add_namelist_changes: + namelist_cfg: + namtsd: + sn_tem: ['votemper_EN4_gridded_195001-ORCA05_DROWN.nc', -12, 'votemper', .true., .true., 'yearly', ' ', ' ', ' '] + sn_sal: ['vosaline_EN4_gridded_195001-ORCA05_DROWN.nc', -12, 'vosaline', .true., .true., 'yearly', '', ' ', ' '] + namsbc: + nn_fsbc: 1 + namtrd: + ln_dyn_trd: '.true.' + ln_tra_trd: '.true.' + namtra_ldf: + rn_aht_0: 600 + namsbc_rnf: + rn_rfact: 1.0 + +rnfmap: + nproc: 1 + +xios: + with_model: focioifs + #xml_dir: "/scratch/projects/shk00018/foci_input2/oasis3_openifs43r3-tco95_orca05/output_for_spinup_1800s/" + xml_dir: "/scratch/projects/shk00018/foci_input2/oasis3_openifs43r3-tco95_orca05/output_5dUVTS_1dPlev/" + nproc: 143 diff --git a/runscripts/focioifs/focioifs21-piCtl-restart-blogin.yaml b/runscripts/focioifs/focioifs21-piCtl-restart-blogin.yaml new file mode 100755 index 000000000..5ccb49ab7 --- /dev/null +++ b/runscripts/focioifs/focioifs21-piCtl-restart-blogin.yaml @@ -0,0 +1,122 @@ +general: + use_venv: False + verbose: False + homedir: !ENV ${HOME} + + setup_name: "focioifs" + resolution: "TCO95_ORCA05" + version: "2.1" + + compute_time: "12:00:00" + initial_date: "4000-01-01T00:00:00" # Initial exp. date + final_date: "4100-01-01T00:00:00" # Final date of the experiment + + nyear: 10 + nmonth: 0 + nday: 0 + restart_rate: 1 + restart_unit: days + hours: 0 + account: shk00018 + base_dir: /scratch/usr/shkjocke/esm-slask/ + + lresume: True + ini_parent_exp_id: "FOCI_GJK006" + ini_string_parent_date: "4000-01-01" + ini_nemo_restart_steps: 20161344 + ini_parent_dir: "/scratch/projects/shk00018/focioifs_restarts/${ini_parent_exp_id}/restart/" + oasis_date_stamp: "_39900101-39991231" + # We will not restart OpenIFS, techinically speaking + # with the eternal restart feature, the complete yaml of the previous run needs to be available: + #prev_run_config_file: "${ini_parent_dir}/../../config/${ini_parent_exp_id}_finished_config.yaml${oasis_date_stamp}" + + # This activates post processing for OpenIFS and NEMO + postprocessing: 1 + +focioifs: + model_dir: ${general.homedir}/esm/models/focioifs-2.1/ + +oifs: + lresume: False + # This would be for a traditional restart + # but not used here + #prev_run_config_file: "${general.prev_run_config_file}" + #ini_parent_exp_id: "${general.ini_parent_exp_id}" + #ini_parent_dir: "${general.ini_parent_dir}/oifs/" + #ini_parent_date: "${prev_date}" + + version: "43r3" + with_xios: True + scenario: "piControl" + mip: "cmip6" + pool_dir: /scratch/projects/shk00018/foci_input2/ + input_dir: "${pool_dir}/openifs_cy43_tco95/" + #input_dir: "/scratch/projects/shk00018/focioifs_restarts/FOCI_GJK006/restart/oifs/" + rtables_dir: "${pool_dir}/openifs_cy43_general/rtables/" + vtables_dir: "${pool_dir}/openifs_cy43_general/vtables/" + clim_dir: "${pool_dir}/openifs_cy43_tco95/95_4/" + ifsdata_dir: "${pool_dir}/openifs_cy43_general/ifsdata/" + cmip5_data_dir: "${pool_dir}/openifs_cy43_general/cmip5_ghg/" + cmip6_data_dir: "${pool_dir}/openifs_cy43_general/cmip6-data/" + icmcl_dir: "${pool_dir}/OPENIFS43R3-TCO95/2008010100/" + icmcl_file: "ICMCLhagwINIT" + # This would use initial conditions from ERA-Interim 2008-01-01 + #prepifs_expid: hagw + #prepifs_startdate: 20080101 + + # This uses initial conditions from FOCI_GJK006 4000-01-02 + prepifs_expid: ECE3 + prepifs_startdate: 40000101 + + resolution: TCO95 + levels: L91 + nproc: 288 + omp_num_threads: 1 + use_ocean_currents: 0 + sclct_switch: 2 + initial_date_cold: "4000-01-01" + +oasis3mct: + lresume: ${general.lresume} + pool_dir: "/scratch/projects/shk00018/foci_input2/oasis3_openifs43r3-tco95_orca05/" + # This would be for a cold start (SST = 0C,etc) + #ini_parent_dir: "/scratch/projects/shk00018/foci_input2/oasis3_openifs43r3-tco95_orca05/" + # Use FOCI_GJK006 4000-01-01 + ini_parent_exp_id: "${general.ini_parent_exp_id}" + ini_parent_dir: "${general.ini_parent_dir}/oasis3mct/" + ini_parent_date: "${prev_date}" + + norestart: F + use_lucia: True + #export_mode: EXPOUT + #debug_level: 50 + # in FOCIOIFS all oasis input files are treated as restarts. + # in FOCI all remapping files are handled as inputs. Both approaches work. + #ini_parent_dir: "${general.ini_parent_dir}/oasis3mct" + oasis_date_stamp: "${general.oasis_date_stamp}" + #oasis_date_stamp: "" + +nemo: + lresume: ${general.lresume} + ini_parent_exp_id: "${general.ini_parent_exp_id}" + ini_parent_dir: "${general.ini_parent_dir}/nemo/" + ini_parent_date: "${prev_date}" + + resolution: "ORCA05" + jpni: 24 + jpnj: 18 + nproc: 432 + add_namelist_changes: + namelist_cfg: + namtra_ldf: + rn_aht_0: 600 + namsbc_rnf: + rn_rfact: 1.067 + +rnfmap: + nproc: 1 + +xios: + with_model: focioifs + xml_dir: "/scratch/projects/shk00018/foci_input2/oasis3_openifs43r3-tco95_orca05/output_for_spinup/" + nproc: 47 diff --git a/runscripts/focioifs/focioifs211-piCtl-restart-glogin.yaml b/runscripts/focioifs/focioifs211-piCtl-restart-glogin.yaml new file mode 100755 index 000000000..5bef02684 --- /dev/null +++ b/runscripts/focioifs/focioifs211-piCtl-restart-glogin.yaml @@ -0,0 +1,141 @@ +general: + use_venv: False + verbose: False + homedir: !ENV ${HOME} + + setup_name: "focioifs" + resolution: "TCO95_ORCA05" + version: "2.1.1" + + compute_time: "12:00:00" + initial_date: "4000-01-01T00:00:00" # Initial exp. date + final_date: "4100-01-01T00:00:00" # Final date of the experiment + + nyear: 10 + nmonth: 0 + nday: 0 + restart_rate: 1 + restart_unit: days + hours: 0 + account: shk00018 + base_dir: /scratch/usr/shkjocke/esm-experiments/ + + lresume: True + ini_parent_exp_id: "FOCI_GJK006" + ini_string_parent_date: "4000-01-01" + ini_nemo_restart_steps: 20161344 + ini_parent_dir: "/scratch/usr/shkjocke/esm-experiments/${ini_parent_exp_id}/restart/" + oasis_date_stamp: "_39900101-39991231" + # We will not restart OpenIFS, techinically speaking + # with the eternal restart feature, the complete yaml of the previous run needs to be available: + prev_run_config_file: "${ini_parent_dir}/../../config/${ini_parent_exp_id}_finished_config.yaml${oasis_date_stamp}" + + # This activates post processing for OpenIFS and NEMO + postprocessing: 1 + +computer: + additional_flags: '--qos=preempt' + +focioifs: + model_dir: ${general.homedir}/esm/models/focioifs-2.1.1/ + +oifs: + lresume: True + # This would be for a traditional restart + # but not used here + prev_run_config_file: "${general.prev_run_config_file}" + ini_parent_exp_id: "${general.ini_parent_exp_id}" + ini_parent_dir: "${general.ini_parent_dir}/oifs/" + ini_parent_date: "${prev_date}" + + version: "43r3" + with_xios: True + scenario: "piControl" + mip: "cmip6" + pool_dir: /scratch/projects/shk00018/foci_input2/ + input_dir: "${pool_dir}/openifs_cy43_tco95/" + #input_dir: "/scratch/projects/shk00018/focioifs_restarts/FOCI_GJK006/restart/oifs/" + rtables_dir: "${pool_dir}/openifs_cy43_general/rtables/" + vtables_dir: "${pool_dir}/openifs_cy43_general/vtables/" + clim_dir: "${pool_dir}/openifs_cy43_tco95/95_4/" + ifsdata_dir: "${pool_dir}/openifs_cy43_general/ifsdata/" + cmip5_data_dir: "${pool_dir}/openifs_cy43_general/cmip5_ghg/" + cmip6_data_dir: "${pool_dir}/openifs_cy43_general/cmip6-data/" + icmcl_dir: "${pool_dir}/OPENIFS43R3-TCO95/2008010100/" + icmcl_file: "ICMCLhagwINIT" + # This would use initial conditions from ERA-Interim 2008-01-01 + prepifs_expid: hagw + prepifs_startdate: 20080101 + + # This uses initial conditions from FOCI_GJK006 4000-01-02 + #prepifs_expid: ECE3 + #prepifs_startdate: 40000101 + + resolution: TCO95 + levels: L91 + nproc: 287 + omp_num_threads: 1 + use_ocean_currents: 0 + sclct_switch: 2 + initial_date_cold: "4000-01-01" + + #add_namelist_changes: + # fort.4: + # NAMMCC: + # RALBSEAD_NML: 0.045 + +oasis3mct: + lresume: ${general.lresume} + pool_dir: "/scratch/projects/shk00018/foci_input2/oasis3_openifs43r3-tco95_orca05/" + # This would be for a cold start (SST = 0C,etc) + #ini_parent_dir: "/scratch/projects/shk00018/foci_input2/oasis3_openifs43r3-tco95_orca05/" + # Use FOCI_GJK006 4000-01-01 + ini_parent_exp_id: "${general.ini_parent_exp_id}" + ini_parent_dir: "/scratch/projects/shk00018/focioifs_restarts/${ini_parent_exp_id}/restart/oasis3mct/" + ini_parent_date: "${prev_date}" + + norestart: F + use_lucia: True + export_mode: EXPORTED + debug_level: 5 + # in FOCIOIFS all oasis input files are treated as restarts. + # in FOCI all remapping files are handled as inputs. Both approaches work. + #ini_parent_dir: "${general.ini_parent_dir}/oasis3mct" + oasis_date_stamp: "${general.oasis_date_stamp}" + #oasis_date_stamp: "" + +nemo: + lresume: ${general.lresume} + ini_parent_exp_id: "${general.ini_parent_exp_id}" + ini_parent_dir: "${general.ini_parent_dir}/nemo/" + ini_parent_date: "${prev_date}" + + resolution: "ORCA05" + jpni: 24 + jpnj: 18 + nproc: 432 + add_namelist_changes: + namelist_cfg: + namrun: + cn_ocerst_indir: ${parent_restart_dir} + cn_ocerst_outdir: ${experiment_restart_out_dir} + namtra_ldf: + rn_aht_0: 600 + namsbc_rnf: + rn_rfact: 0.962 + namelist_ice_cfg: + namicerun: + cn_icerst_indir: ${parent_restart_dir} + cn_icerst_outdir: ${experiment_restart_out_dir} + namelist_top_cfg: + namtrc_run: + cn_trcrst_indir: ${parent_restart_dir} + cn_trcrst_outdir: ${experiment_restart_out_dir} + +rnfmap: + nproc: 1 + +xios: + with_model: focioifs + xml_dir: "/scratch/projects/shk00018/foci_input2/oasis3_openifs43r3-tco95_orca05/output_for_spinup/" + nproc: 48 diff --git a/runscripts/focioifs/orca12_spinup/focioifs-piCtl-orca12-day10-restart-blogin.yaml b/runscripts/focioifs/orca12_spinup/focioifs-piCtl-orca12-day10-restart-blogin.yaml new file mode 100755 index 000000000..6a0ceedf1 --- /dev/null +++ b/runscripts/focioifs/orca12_spinup/focioifs-piCtl-orca12-day10-restart-blogin.yaml @@ -0,0 +1,126 @@ +general: + use_venv: False + verbose: False + homedir: !ENV ${HOME} + + setup_name: "focioifs" + version: "2.1-O12" + resolution: "TCO95_ORCA12" + + compute_time: "12:00:00" + initial_date: "1950-01-11T00:00:00" # Initial exp. date + final_date: "1950-01-16T00:00:00" # Final date of the experiment + + nyear: 0 + nmonth: 0 + nday: 5 + restart_rate: 1 + restart_unit: days + hours: 0 + + postprocessing: True + + # machine specific setup + account: shk00018 + base_dir: ${general.homedir}/esm/esm-experiments/ + + lresume: True + ini_parent_exp_id: "FOCI_BJK012" + ini_string_parent_date: "1950-01-11" + ini_nemo_restart_steps: 3600 + ini_parent_dir: "/scratch/usr/shkjocke/esm-experiments/${ini_parent_exp_id}/restart/" + oasis_date_stamp: "_19500106-19500110" + # with the eternal restart feature, the complete yaml of the previous run needs to be available: + prev_run_config_file: "${ini_parent_dir}/../../config/${ini_parent_exp_id}_finished_config.yaml" #${oasis_date_stamp}" + +focioifs: + model_dir: ${general.homedir}/esm/models/focioifs-2.1-O12 + +oifs: + lresume: ${general.lresume} + prev_run_config_file: "${general.prev_run_config_file}" + ini_parent_exp_id: "${general.ini_parent_exp_id}" + ini_parent_dir: "${general.ini_parent_dir}/oifs/" + ini_parent_date: "${prev_date}" + + version: "43r3" + with_xios: True + scenario: "historical" + mip: "cmip6" + pool_dir: /scratch/projects/shk00018/foci_input2/ + input_dir: "${pool_dir}/openifs_cy43_tco95/" + rtables_dir: "${pool_dir}/openifs_cy43_general/rtables/" + vtables_dir: "${pool_dir}/openifs_cy43_general/vtables/" + clim_dir: "${pool_dir}/openifs_cy43_tco95/95_4/" + ifsdata_dir: "${pool_dir}/openifs_cy43_general/ifsdata/" + cmip5_data_dir: "${pool_dir}/openifs_cy43_general/cmip5_ghg/" + cmip6_data_dir: "${pool_dir}/openifs_cy43_general/cmip6-data/" + icmcl_dir: "${pool_dir}/openifs_cy43_tco95/2008010100/" + icmcl_file: "ICMCLhagwINIT" + prepifs_expid: hagw + prepifs_startdate: 20080101 + resolution: TCO95 + levels: L91 + time_step: 1800 + nproc: 287 + use_ocean_currents: 0 + perturb: 0 + sclct_switch: 2 + + add_namelist_changes: + fort.4: + NAERAD: + NCMIPFIXYR: 1950 + LSOLAR1950: ".true." + +oasis3mct: + lresume: ${general.lresume} + pool_dir: "/scratch/projects/shk00018/foci_input2/oasis3_openifs43r3-tco95_orca12/" + ini_parent_dir: "/scratch/projects/shk00018/foci_input2/oasis3_openifs43r3-tco95_orca12/" + ini_parent_exp_id: "${general.ini_parent_exp_id}" + ini_parent_date: "${prev_date}" + + norestart: F + use_lucia: True + #export_mode: EXPOUT + debug_level: 5 + coupling_time_step: 3600 + #oasis_date_stamp: "" + +nemo: + lresume: ${general.lresume} + ini_parent_exp_id: "${general.ini_parent_exp_id}" + ini_parent_dir: "${general.ini_parent_dir}/nemo/" + ini_parent_date: "${prev_date}" + + resolution: "ORCA12" + jpni: 60 + jpnj: 32 + nproc: 1429 + time_step: 200 + input_dir: "/scratch/projects/shk00018/ORCA12/" + add_namelist_changes: + namelist_cfg: + namsbc: + nn_fsbc: 1 + namsbc_rnf: + rn_rfact: 1.067 + namtra_ldf: + rn_aht_0: 125 + rn_aht_m: 125 + namdyn_ldf: + rn_ahm_0_blp: -1.25e10 + rn_ahm_m_blp: -1e11 + namelist_ice_cfg: + namicedyn: + pstar: 1.5e4 + ahi0: 200 + telast: 120 + +rnfmap: + nproc: 1 + +xios: + with_model: focioifs + xml_dir: "/scratch/projects/shk00018/foci_input2/oasis3_openifs43r3-tco95_orca12/output_1dUVTS_1dPLev/" + nproc: 203 diff --git a/runscripts/focioifs/orca12_spinup/focioifs-piCtl-orca12-day15-restart-blogin.yaml b/runscripts/focioifs/orca12_spinup/focioifs-piCtl-orca12-day15-restart-blogin.yaml new file mode 100755 index 000000000..4ffb27e47 --- /dev/null +++ b/runscripts/focioifs/orca12_spinup/focioifs-piCtl-orca12-day15-restart-blogin.yaml @@ -0,0 +1,126 @@ +general: + use_venv: False + verbose: False + homedir: !ENV ${HOME} + + setup_name: "focioifs" + version: "2.1-O12" + resolution: "TCO95_ORCA12" + + compute_time: "12:00:00" + initial_date: "1950-01-16T00:00:00" # Initial exp. date + final_date: "1950-01-21T00:00:00" # Final date of the experiment + + nyear: 0 + nmonth: 0 + nday: 5 + restart_rate: 1 + restart_unit: days + hours: 0 + + postprocessing: True + + # machine specific setup + account: shk00018 + base_dir: ${general.homedir}/esm/esm-experiments/ + + lresume: True + ini_parent_exp_id: "FOCI_BJK013" + ini_string_parent_date: "1950-01-16" + ini_nemo_restart_steps: 2160 + ini_parent_dir: "/scratch/usr/shkjocke/esm-experiments/${ini_parent_exp_id}/restart/" + oasis_date_stamp: "_19500111-19500115" + # with the eternal restart feature, the complete yaml of the previous run needs to be available: + prev_run_config_file: "${ini_parent_dir}/../../config/${ini_parent_exp_id}_finished_config.yaml" #${oasis_date_stamp}" + +focioifs: + model_dir: ${general.homedir}/esm/models/focioifs-2.1-O12 + +oifs: + lresume: ${general.lresume} + prev_run_config_file: "${general.prev_run_config_file}" + ini_parent_exp_id: "${general.ini_parent_exp_id}" + ini_parent_dir: "${general.ini_parent_dir}/oifs/" + ini_parent_date: "${prev_date}" + + version: "43r3" + with_xios: True + scenario: "historical" + mip: "cmip6" + pool_dir: /scratch/projects/shk00018/foci_input2/ + input_dir: "${pool_dir}/openifs_cy43_tco95/" + rtables_dir: "${pool_dir}/openifs_cy43_general/rtables/" + vtables_dir: "${pool_dir}/openifs_cy43_general/vtables/" + clim_dir: "${pool_dir}/openifs_cy43_tco95/95_4/" + ifsdata_dir: "${pool_dir}/openifs_cy43_general/ifsdata/" + cmip5_data_dir: "${pool_dir}/openifs_cy43_general/cmip5_ghg/" + cmip6_data_dir: "${pool_dir}/openifs_cy43_general/cmip6-data/" + icmcl_dir: "${pool_dir}/openifs_cy43_tco95/2008010100/" + icmcl_file: "ICMCLhagwINIT" + prepifs_expid: hagw + prepifs_startdate: 20080101 + resolution: TCO95 + levels: L91 + time_step: 1800 + nproc: 287 + use_ocean_currents: 0 + perturb: 0 + sclct_switch: 2 + + add_namelist_changes: + fort.4: + NAERAD: + NCMIPFIXYR: 1950 + LSOLAR1950: ".true." + +oasis3mct: + lresume: ${general.lresume} + pool_dir: "/scratch/projects/shk00018/foci_input2/oasis3_openifs43r3-tco95_orca12/" + ini_parent_dir: "/scratch/projects/shk00018/foci_input2/oasis3_openifs43r3-tco95_orca12/" + ini_parent_exp_id: "${general.ini_parent_exp_id}" + ini_parent_date: "${prev_date}" + + norestart: F + use_lucia: True + #export_mode: EXPOUT + debug_level: 5 + coupling_time_step: 3600 + #oasis_date_stamp: "" + +nemo: + lresume: ${general.lresume} + ini_parent_exp_id: "${general.ini_parent_exp_id}" + ini_parent_dir: "${general.ini_parent_dir}/nemo/" + ini_parent_date: "${prev_date}" + + resolution: "ORCA12" + jpni: 60 + jpnj: 32 + nproc: 1429 + time_step: 300 + input_dir: "/scratch/projects/shk00018/ORCA12/" + add_namelist_changes: + namelist_cfg: + namsbc: + nn_fsbc: 1 + namsbc_rnf: + rn_rfact: 1.0 + namtra_ldf: + rn_aht_0: 125 + rn_aht_m: 125 + namdyn_ldf: + rn_ahm_0_blp: -1.25e10 + rn_ahm_m_blp: -1e11 + namelist_ice_cfg: + namicedyn: + pstar: 1.5e4 + ahi0: 200 + telast: 120 + +rnfmap: + nproc: 1 + +xios: + with_model: focioifs + xml_dir: "/scratch/projects/shk00018/foci_input2/oasis3_openifs43r3-tco95_orca12/output_1dUVTS_1dPLev/" + nproc: 203 diff --git a/runscripts/focioifs/orca12_spinup/focioifs-piCtl-orca12-day20-restart-blogin.yaml b/runscripts/focioifs/orca12_spinup/focioifs-piCtl-orca12-day20-restart-blogin.yaml new file mode 100755 index 000000000..32885fe50 --- /dev/null +++ b/runscripts/focioifs/orca12_spinup/focioifs-piCtl-orca12-day20-restart-blogin.yaml @@ -0,0 +1,129 @@ +general: + use_venv: False + verbose: False + homedir: !ENV ${HOME} + + setup_name: "focioifs" + version: "2.1-O12" + resolution: "TCO95_ORCA12" + + compute_time: "12:00:00" + initial_date: "1950-01-21T00:00:00" # Initial exp. date + final_date: "1950-02-01T00:00:00" # Final date of the experiment + + nyear: 0 + nmonth: 0 + nday: 11 + restart_rate: 1 + restart_unit: days + hours: 0 + + postprocessing: True + + # machine specific setup + account: shk00018 + base_dir: ${general.homedir}/esm/esm-experiments/ + + lresume: True + ini_parent_exp_id: "FOCI_BJK014" + ini_string_parent_date: "1950-01-21" + ini_nemo_restart_steps: 1440 + ini_parent_dir: "/scratch/usr/shkjocke/esm-experiments/${ini_parent_exp_id}/restart/" + oasis_date_stamp: "_19500116-19500120" + # with the eternal restart feature, the complete yaml of the previous run needs to be available: + prev_run_config_file: "${ini_parent_dir}/../../config/${ini_parent_exp_id}_finished_config.yaml" #${oasis_date_stamp}" + +focioifs: + model_dir: ${general.homedir}/esm/models/focioifs-2.1-O12 + +oifs: + lresume: ${general.lresume} + prev_run_config_file: "${general.prev_run_config_file}" + ini_parent_exp_id: "${general.ini_parent_exp_id}" + ini_parent_dir: "${general.ini_parent_dir}/oifs/" + ini_parent_date: "${prev_date}" + + version: "43r3" + with_xios: True + scenario: "historical" + mip: "cmip6" + pool_dir: /scratch/projects/shk00018/foci_input2/ + input_dir: "${pool_dir}/openifs_cy43_tco95/" + rtables_dir: "${pool_dir}/openifs_cy43_general/rtables/" + vtables_dir: "${pool_dir}/openifs_cy43_general/vtables/" + clim_dir: "${pool_dir}/openifs_cy43_tco95/95_4/" + ifsdata_dir: "${pool_dir}/openifs_cy43_general/ifsdata/" + cmip5_data_dir: "${pool_dir}/openifs_cy43_general/cmip5_ghg/" + cmip6_data_dir: "${pool_dir}/openifs_cy43_general/cmip6-data/" + icmcl_dir: "${pool_dir}/openifs_cy43_tco95/2008010100/" + icmcl_file: "ICMCLhagwINIT" + prepifs_expid: hagw + prepifs_startdate: 20080101 + resolution: TCO95 + levels: L91 + time_step: 1800 + nproc: 287 + use_ocean_currents: 0 + perturb: 0 + sclct_switch: 2 + + add_namelist_changes: + fort.4: + NAERAD: + NCMIPFIXYR: 1950 + LSOLAR1950: ".true." + +oasis3mct: + lresume: ${general.lresume} + pool_dir: "/scratch/projects/shk00018/foci_input2/oasis3_openifs43r3-tco95_orca12/" + ini_parent_dir: "/scratch/projects/shk00018/foci_input2/oasis3_openifs43r3-tco95_orca12/" + ini_parent_exp_id: "${general.ini_parent_exp_id}" + ini_parent_date: "${prev_date}" + + norestart: F + use_lucia: True + #export_mode: EXPOUT + debug_level: 5 + coupling_time_step: 3600 + #oasis_date_stamp: "" + +nemo: + lresume: ${general.lresume} + ini_parent_exp_id: "${general.ini_parent_exp_id}" + ini_parent_dir: "${general.ini_parent_dir}/nemo/" + ini_parent_date: "${prev_date}" + + resolution: "ORCA12" + jpni: 60 + jpnj: 32 + nproc: 1429 + time_step: 300 + input_dir: "/scratch/projects/shk00018/ORCA12/" + add_namelist_changes: + namelist_cfg: + namsbc: + nn_fsbc: 1 + namsbc_rnf: + rn_rfact: 1.0 + namtra_ldf: + rn_aht_0: 125 + rn_aht_m: 125 + namdyn_ldf: + rn_ahm_0_blp: -1.25e10 + rn_ahm_m_blp: -1e11 + namtrd: + ln_dyn_trd: '.true.' + ln_tra_trd: '.true.' + namelist_ice_cfg: + namicedyn: + pstar: 1.5e4 + ahi0: 200 + telast: 120 + +rnfmap: + nproc: 1 + +xios: + with_model: focioifs + xml_dir: "/scratch/projects/shk00018/foci_input2/oasis3_openifs43r3-tco95_orca12/output_1dUVTS_1dPLev/" + nproc: 203 diff --git a/runscripts/focioifs/orca12_spinup/focioifs-piCtl-orca12-day31-restart-blogin.yaml b/runscripts/focioifs/orca12_spinup/focioifs-piCtl-orca12-day31-restart-blogin.yaml new file mode 100755 index 000000000..f69a4a7bf --- /dev/null +++ b/runscripts/focioifs/orca12_spinup/focioifs-piCtl-orca12-day31-restart-blogin.yaml @@ -0,0 +1,129 @@ +general: + use_venv: False + verbose: False + homedir: !ENV ${HOME} + + setup_name: "focioifs" + version: "2.1-O12" + resolution: "TCO95_ORCA12" + + compute_time: "12:00:00" + initial_date: "1950-02-01T00:00:00" # Initial exp. date + final_date: "1955-01-01T00:00:00" # Final date of the experiment + + nyear: 0 + nmonth: 1 + nday: 0 + restart_rate: 1 + restart_unit: days + hours: 0 + + postprocessing: True + + # machine specific setup + account: shk00018 + base_dir: ${general.homedir}/esm/esm-experiments/ + + lresume: True + ini_parent_exp_id: "FOCI_BJK015" + ini_string_parent_date: "1950-02-01" + ini_nemo_restart_steps: 3168 + ini_parent_dir: "/scratch/usr/shkjocke/esm-experiments/${ini_parent_exp_id}/restart/" + oasis_date_stamp: "_19500121-19500131" + # with the eternal restart feature, the complete yaml of the previous run needs to be available: + prev_run_config_file: "${ini_parent_dir}/../../config/${ini_parent_exp_id}_finished_config.yaml" #${oasis_date_stamp}" + +focioifs: + model_dir: ${general.homedir}/esm/models/focioifs-2.1-O12 + +oifs: + lresume: ${general.lresume} + prev_run_config_file: "${general.prev_run_config_file}" + ini_parent_exp_id: "${general.ini_parent_exp_id}" + ini_parent_dir: "${general.ini_parent_dir}/oifs/" + ini_parent_date: "${prev_date}" + + version: "43r3" + with_xios: True + scenario: "historical" + mip: "cmip6" + pool_dir: /scratch/projects/shk00018/foci_input2/ + input_dir: "${pool_dir}/openifs_cy43_tco95/" + rtables_dir: "${pool_dir}/openifs_cy43_general/rtables/" + vtables_dir: "${pool_dir}/openifs_cy43_general/vtables/" + clim_dir: "${pool_dir}/openifs_cy43_tco95/95_4/" + ifsdata_dir: "${pool_dir}/openifs_cy43_general/ifsdata/" + cmip5_data_dir: "${pool_dir}/openifs_cy43_general/cmip5_ghg/" + cmip6_data_dir: "${pool_dir}/openifs_cy43_general/cmip6-data/" + icmcl_dir: "${pool_dir}/openifs_cy43_tco95/2008010100/" + icmcl_file: "ICMCLhagwINIT" + prepifs_expid: hagw + prepifs_startdate: 20080101 + resolution: TCO95 + levels: L91 + time_step: 1800 + nproc: 287 + use_ocean_currents: 0 + perturb: 0 + sclct_switch: 2 + + add_namelist_changes: + fort.4: + NAERAD: + NCMIPFIXYR: 1950 + LSOLAR1950: ".true." + +oasis3mct: + lresume: ${general.lresume} + pool_dir: "/scratch/projects/shk00018/foci_input2/oasis3_openifs43r3-tco95_orca12/" + ini_parent_dir: "/scratch/projects/shk00018/foci_input2/oasis3_openifs43r3-tco95_orca12/" + ini_parent_exp_id: "${general.ini_parent_exp_id}" + ini_parent_date: "${prev_date}" + + norestart: F + use_lucia: True + #export_mode: EXPOUT + debug_level: 5 + coupling_time_step: 3600 + #oasis_date_stamp: "" + +nemo: + lresume: ${general.lresume} + ini_parent_exp_id: "${general.ini_parent_exp_id}" + ini_parent_dir: "${general.ini_parent_dir}/nemo/" + ini_parent_date: "${prev_date}" + + resolution: "ORCA12" + jpni: 60 #-1 + jpnj: 48 #-1 + nproc: 2094 #2880 + time_step: 300 + input_dir: "/scratch/projects/shk00018/ORCA12/" + add_namelist_changes: + namelist_cfg: + namsbc: + nn_fsbc: 1 + namsbc_rnf: + rn_rfact: 1.0 + namtra_ldf: + rn_aht_0: 125 + rn_aht_m: 125 + namdyn_ldf: + rn_ahm_0_blp: -1.25e10 + rn_ahm_m_blp: -1e11 + namtrd: + ln_dyn_trd: '.true.' + ln_tra_trd: '.true.' + namelist_ice_cfg: + namicedyn: + pstar: 1.5e4 + ahi0: 200 + telast: 120 + +rnfmap: + nproc: 1 + +xios: + with_model: focioifs + xml_dir: "/scratch/projects/shk00018/foci_input2/oasis3_openifs43r3-tco95_orca12/output_1dUVTS_1dPLev/" + nproc: 210 diff --git a/runscripts/focioifs/orca12_spinup/focioifs-piCtl-orca12-day5-restart-blogin.yaml b/runscripts/focioifs/orca12_spinup/focioifs-piCtl-orca12-day5-restart-blogin.yaml new file mode 100755 index 000000000..a5aaf093e --- /dev/null +++ b/runscripts/focioifs/orca12_spinup/focioifs-piCtl-orca12-day5-restart-blogin.yaml @@ -0,0 +1,128 @@ +general: + use_venv: False + verbose: False + homedir: !ENV ${HOME} + + setup_name: "focioifs" + version: "2.1-O12" + resolution: "TCO95_ORCA12" + + compute_time: "12:00:00" + initial_date: "1950-01-06T00:00:00" # Initial exp. date + final_date: "1950-01-11T00:00:00" # Final date of the experiment + + nyear: 0 + nmonth: 0 + nday: 5 + restart_rate: 1 + restart_unit: days + hours: 0 + + postprocessing: True + + # machine specific setup + account: shk00018 + base_dir: ${general.homedir}/esm/esm-experiments/ + + lresume: True + ini_parent_exp_id: "FOCI_BJK011" + ini_string_parent_date: "1950-01-06" + ini_nemo_restart_steps: 7200 + ini_parent_dir: "/scratch/usr/shkjocke/esm-experiments/${ini_parent_exp_id}/restart/" + oasis_date_stamp: "_19500101-19500105" + # with the eternal restart feature, the complete yaml of the previous run needs to be available: + prev_run_config_file: "${ini_parent_dir}/../../config/${ini_parent_exp_id}_finished_config.yaml" #${oasis_date_stamp}" + +focioifs: + model_dir: ${general.homedir}/esm/models/focioifs-2.1-O12 + +oifs: + lresume: ${general.lresume} + prev_run_config_file: "${general.prev_run_config_file}" + ini_parent_exp_id: "${general.ini_parent_exp_id}" + ini_parent_dir: "${general.ini_parent_dir}/oifs/" + ini_parent_date: "${prev_date}" + + version: "43r3" + with_xios: True + scenario: "historical" + mip: "cmip6" + pool_dir: /scratch/projects/shk00018/foci_input2/ + input_dir: "${pool_dir}/openifs_cy43_tco95/" + rtables_dir: "${pool_dir}/openifs_cy43_general/rtables/" + vtables_dir: "${pool_dir}/openifs_cy43_general/vtables/" + clim_dir: "${pool_dir}/openifs_cy43_tco95/95_4/" + ifsdata_dir: "${pool_dir}/openifs_cy43_general/ifsdata/" + cmip5_data_dir: "${pool_dir}/openifs_cy43_general/cmip5_ghg/" + cmip6_data_dir: "${pool_dir}/openifs_cy43_general/cmip6-data/" + icmcl_dir: "${pool_dir}/openifs_cy43_tco95/2008010100/" + icmcl_file: "ICMCLhagwINIT" + prepifs_expid: hagw + prepifs_startdate: 20080101 + resolution: TCO95 + levels: L91 + time_step: 1800 + nproc: 287 + use_ocean_currents: 0 + perturb: 0 + sclct_switch: 2 + + add_namelist_changes: + fort.4: + NAERAD: + NCMIPFIXYR: 1950 + LSOLAR1950: ".true." + +oasis3mct: + lresume: ${general.lresume} + pool_dir: "/scratch/projects/shk00018/foci_input2/oasis3_openifs43r3-tco95_orca12/" + ini_parent_dir: "/scratch/projects/shk00018/foci_input2/oasis3_openifs43r3-tco95_orca12/" + ini_parent_exp_id: "${general.ini_parent_exp_id}" + ini_parent_date: "${prev_date}" + + norestart: F + use_lucia: True + #export_mode: EXPOUT + debug_level: 5 + coupling_time_step: 3600 + #oasis_date_stamp: "" + +nemo: + lresume: ${general.lresume} + ini_parent_exp_id: "${general.ini_parent_exp_id}" + ini_parent_dir: "${general.ini_parent_dir}/nemo/" + ini_parent_date: "${prev_date}" + + resolution: "ORCA12" + jpni: 60 + jpnj: 32 + nproc: 1429 + time_step: 120 + input_dir: "/scratch/projects/shk00018/ORCA12/" + add_namelist_changes: + namelist_cfg: + namsbc: + # seems important to have fsbc=1 + # likely to keep LIM stable + nn_fsbc: 1 + namsbc_rnf: + rn_rfact: 1.067 + namtra_ldf: + rn_aht_0: 125 + rn_aht_m: 125 + namdyn_ldf: + rn_ahm_0_blp: -1.25e10 + rn_ahm_m_blp: -1e11 + namelist_ice_cfg: + namicedyn: + pstar: 1.5e4 + ahi0: 200 + telast: 120 + +rnfmap: + nproc: 1 + +xios: + with_model: focioifs + xml_dir: "/scratch/projects/shk00018/foci_input2/oasis3_openifs43r3-tco95_orca12/output_1dUVTS_1dPLev/" + nproc: 203 diff --git a/runscripts/focioifs/orca12_spinup/focioifs-piCtl-orca12-initial-blogin.yaml b/runscripts/focioifs/orca12_spinup/focioifs-piCtl-orca12-initial-blogin.yaml new file mode 100755 index 000000000..77698d0b4 --- /dev/null +++ b/runscripts/focioifs/orca12_spinup/focioifs-piCtl-orca12-initial-blogin.yaml @@ -0,0 +1,127 @@ +general: + use_venv: False + verbose: False + homedir: !ENV ${HOME} + + setup_name: "focioifs" + version: "2.1-O12" + resolution: "TCO95_ORCA12" + + compute_time: "12:00:00" + initial_date: "1950-01-01T00:00:00" # Initial exp. date + final_date: "1950-01-06T00:00:00" # Final date of the experiment + + nyear: 0 + nmonth: 0 + nday: 5 + restart_rate: 1 + restart_unit: days + hours: 0 + + postprocessing: True + + # machine specific setup + account: shk00018 + base_dir: ${general.homedir}/esm/esm-experiments/ + + #lresume: True + #ini_parent_exp_id: "orca12_30" + #ini_string_parent_date: "1950-01-16" + #ini_nemo_restart_steps: 2160 + #ini_parent_dir: "/scratch/usr/shkjocke/esm-experiments/${ini_parent_exp_id}/restart/" + #oasis_date_stamp: "_19500115-19500115" + # with the eternal restart feature, the complete yaml of the previous run needs to be available: + #prev_run_config_file: "${ini_parent_dir}/../../config/${ini_parent_exp_id}_finished_config.yaml${oasis_date_stamp}" + +focioifs: + model_dir: ${general.homedir}/esm/models/focioifs-2.1-O12 + +oifs: + #lresume: ${general.lresume} + #prev_run_config_file: "${general.prev_run_config_file}" + #ini_parent_exp_id: "${general.ini_parent_exp_id}" + #ini_parent_dir: "${general.ini_parent_dir}/oifs/" + #ini_parent_date: "${prev_date}" + + version: "43r3" + with_xios: True + scenario: "historical" + mip: "cmip6" + pool_dir: /scratch/projects/shk00018/foci_input2/ + input_dir: "${pool_dir}/openifs_cy43_tco95/" + rtables_dir: "${pool_dir}/openifs_cy43_general/rtables/" + vtables_dir: "${pool_dir}/openifs_cy43_general/vtables/" + clim_dir: "${pool_dir}/openifs_cy43_tco95/95_4/" + ifsdata_dir: "${pool_dir}/openifs_cy43_general/ifsdata/" + cmip5_data_dir: "${pool_dir}/openifs_cy43_general/cmip5_ghg/" + cmip6_data_dir: "${pool_dir}/openifs_cy43_general/cmip6-data/" + icmcl_dir: "${pool_dir}/openifs_cy43_tco95/2008010100/" + icmcl_file: "ICMCLhagwINIT" + prepifs_expid: hagw + prepifs_startdate: 20080101 + resolution: TCO95 + levels: L91 + time_step: 1800 + nproc: 287 + use_ocean_currents: 0 + perturb: 0 + sclct_switch: 2 + + add_namelist_changes: + fort.4: + NAERAD: + NCMIPFIXYR: 1950 + LSOLAR1950: ".true." + +oasis3mct: + #lresume: ${general.lresume} + pool_dir: "/scratch/projects/shk00018/foci_input2/oasis3_openifs43r3-tco95_orca12/" + ini_parent_dir: "/scratch/projects/shk00018/foci_input2/oasis3_openifs43r3-tco95_orca12/" + #ini_parent_exp_id: "${general.ini_parent_exp_id}" + #ini_parent_dir: "${general.ini_parent_dir}/oasis3mct/" + #ini_parent_date: "${prev_date}" + + norestart: F + use_lucia: True + #export_mode: EXPOUT + debug_level: 5 + coupling_time_step: 3600 + oasis_date_stamp: "" + +nemo: + #lresume: ${general.lresume} + #ini_parent_exp_id: "${general.ini_parent_exp_id}" + #ini_parent_dir: "${general.ini_parent_dir}/nemo/" + #ini_parent_date: "${prev_date}" + + resolution: "ORCA12" + jpni: 60 + jpnj: 32 + nproc: 1429 + time_step: 60 + input_dir: "/scratch/projects/shk00018/ORCA12/" + add_namelist_changes: + namelist_cfg: + namsbc: + nn_fsbc: 1 + namsbc_rnf: + rn_rfact: 1.067 + namtra_ldf: + rn_aht_0: 125 + rn_aht_m: 125 + namdyn_ldf: + rn_ahm_0_blp: -1.25e10 + rn_ahm_m_blp: -1e11 + namelist_ice_cfg: + namicedyn: + pstar: 1.5e4 + ahi0: 200 + telast: 120 + +rnfmap: + nproc: 1 + +xios: + with_model: focioifs + xml_dir: "/scratch/projects/shk00018/foci_input2/oasis3_openifs43r3-tco95_orca12/output_1dUVTS_1dPLev/" + nproc: 203 diff --git a/runscripts/nemo/nemo4-GYRE_PISCES.yaml b/runscripts/nemo/nemo4-GYRE_PISCES.yaml index bb787384c..6c05883f5 100755 --- a/runscripts/nemo/nemo4-GYRE_PISCES.yaml +++ b/runscripts/nemo/nemo4-GYRE_PISCES.yaml @@ -10,6 +10,9 @@ # an uncoupled setup. We need to explicitely specify them here computer: launcher_flags: "--mpi=pmi2 -l --kill-on-bad-exit=1 --cpu_bind=cores --distribution=cyclic:cyclic --export=ALL" + # for HLRN4 set compiler_mpi if intel2019_impi2019_nemo4 is not set as default + # in glogin.yaml or blogin.yaml + compiler_mpi: intel2019_impi2019_nemo4 general: use_venv: False diff --git a/runscripts/nemo/nemo4-ORCA05.z75.ICE.JRA.yaml b/runscripts/nemo/nemo4-ORCA05.z75.ICE.JRA.yaml new file mode 100755 index 000000000..74b857d65 --- /dev/null +++ b/runscripts/nemo/nemo4-ORCA05.z75.ICE.JRA.yaml @@ -0,0 +1,25 @@ +general: + use_venv: false + homedir: !ENV ${HOME} + setup_name: nemo + compute_time: "02:15:00" + account: shkifmsw + initial_date: "1980-01-01T00:00:00" # Initial exp. date + final_date: "1983-01-01T00:00:00" # Final date of the experiment + leapyear: False + nyear: 1 + base_dir: ${homedir}/esm/esm-experiments/ + model_dir: ${homedir}/esm/models/nemo-ORCA05.z75.ICE.JRA + +nemo: + version: ORCA05.z75.ICE.JRA + resolution: "ORCA05" + leapyear: False + nproc: 480 + jpni: 24 + jpnj: 20 + # jpni and jpnj are 0 by default, i.e. automatic distribution on CPUs + +xios: + model_dir: ${general.homedir}/esm/models/nemo-ORCA05.z75.ICE.JRA/xios + nproc: 24 diff --git a/runscripts/oifs/oifs-43r3-tco199-amip-1-1-6_blogin_initial_annual.yaml b/runscripts/oifs/oifs-43r3-tco199-amip-1-1-6_blogin_initial_annual.yaml index c03efde74..2c5e4ee2d 100644 --- a/runscripts/oifs/oifs-43r3-tco199-amip-1-1-6_blogin_initial_annual.yaml +++ b/runscripts/oifs/oifs-43r3-tco199-amip-1-1-6_blogin_initial_annual.yaml @@ -5,12 +5,12 @@ general: clean_runs: 2 setup_name: oifs - compute_time: "10:00:00" + compute_time: "01:30:00" account: shk00018 initial_date: "1979-01-01T00:00:00" - final_date: "2015-01-01T00:00:00" - model_dir: /home/shkjocke/model_codes/oifs-43r3-v1/ - base_dir: /scratch/usr/shkjocke/esm-slask/ + final_date: "1980-01-01T00:00:00" + model_dir: /home/shkjocke/esm/models/oifs-43r3-v1/ + base_dir: /scratch/usr/shkjocke/esm-experiments/ nyear: 1 nmonth: 0 nday: 0 @@ -21,6 +21,7 @@ oifs: version: 43r3 with_xios: True time_step: 1800 + omp_num_threads: 4 pool_dir: /scratch/usr/shkjocke/foci_input2 input_dir: ${pool_dir}/OPENIFS43R3-TCO199/ rtables_dir: ${pool_dir}/OPENIFS43R3_GENERAL/rtables/ @@ -38,7 +39,7 @@ oifs: levels: L91 lresume: 0 post_processing: 0 - nproc: 480 + nproc: 576 perturb: 0 ensemble_id: 1 pextra: 0 diff --git a/runscripts/oifs/oifs-43r3-tco399-amip-1-1-6_blogin_initial_annual.yaml b/runscripts/oifs/oifs-43r3-tco399-amip-1-1-6_blogin_initial_annual.yaml index 52189a50f..a36bf7a28 100644 --- a/runscripts/oifs/oifs-43r3-tco399-amip-1-1-6_blogin_initial_annual.yaml +++ b/runscripts/oifs/oifs-43r3-tco399-amip-1-1-6_blogin_initial_annual.yaml @@ -3,14 +3,14 @@ general: verbose: False setup_name: oifs - compute_time: "4:00:00" + compute_time: "04:00:00" account: shk00018 initial_date: "1979-01-01T00:00:00" - final_date: "2015-01-01T00:00:00" - model_dir: /home/shkjocke/model_codes/oifs-43r3-v1/ - base_dir: /scratch/usr/shkjocke/esm-slask/ - nyear: 0 - nmonth: 1 + final_date: "1980-01-01T00:00:00" + model_dir: /home/shkjocke/esm/models/oifs-43r3-v1/ + base_dir: /scratch/usr/shkjocke/esm-experiments/ + nyear: 1 + nmonth: 0 nday: 0 restart_rate: 1 restart_unit: days @@ -36,17 +36,16 @@ oifs: levels: L91 lresume: 0 post_processing: 0 - nproc: 1536 - #nprocb: 1 + nproc: 768 + omp_num_threads: 8 perturb: 0 ensemble_id: 1 xios: - xml_dir: /scratch/usr/shkjocke/foci_input2/OPENIFS43R3-TCO399/output_1ts+3hr+6hrPLev+1dayPV+Amon + #xml_dir: /scratch/usr/shkjocke/foci_input2/OPENIFS43R3-TCO399/output_1ts+3hr+6hrPLev+1dayPV+Amon # 3hr surface var output, 6hr model levels, 1m surface + pressure levels - #xml_dir: /scratch/usr/shkjocke/foci_input2/OPENIFS43R3-TCO399/output_3h+6hrLev + xml_dir: /scratch/usr/shkjocke/foci_input2/OPENIFS43R3-TCO399/output_3h+6hrLev # 1m surface + pressure levels #xml_dir: /scratch/usr/shkjocke/foci_input2/OPENIFS43R3-TCO399/output_1m_sfc_pl with_model: oifs - nproc: 192 - #nprocb: 1 \ No newline at end of file + nproc: 192 \ No newline at end of file diff --git a/runscripts/oifs/oifs-43r3-tco95-amip-1-1-6_blogin_initial_annual.yaml b/runscripts/oifs/oifs-43r3-tco95-amip-1-1-6_blogin_initial_annual.yaml index 6f8fa68ed..8c6b15b7e 100644 --- a/runscripts/oifs/oifs-43r3-tco95-amip-1-1-6_blogin_initial_annual.yaml +++ b/runscripts/oifs/oifs-43r3-tco95-amip-1-1-6_blogin_initial_annual.yaml @@ -19,7 +19,7 @@ general: oifs: version: 43r3 with_xios: True - time_step: 3600 + time_step: 3600 #pool_dir: /scratch/usr/shkifmsw/foci_input2 input_dir: ${pool_dir}/OPENIFS43R3-TCO95/ rtables_dir: ${pool_dir}/OPENIFS43R3_GENERAL/rtables/ @@ -38,11 +38,29 @@ oifs: lresume: 0 post_processing: 0 nproc: 288 + omp_num_threads: 1 perturb: 0 #solarspectrum: 1 #only works with 43r3v2 ensemble_id: 1 restart_type: eternal + # For prognostic O3 (Cariolle scheme) set + # YO3_NL%LGP to true (O3 advection) + # LEO3CH to true (for chem scheme) + # LEPO3RA to true (for use in rad scheme) + # NGHGRAD to 20 (so prog overwrites climatology) + add_namelist_changes: + fort.4: + NAMGFL: + YO3_NL%LGP: '.true.' + NAEPHY: + LEO3CH: '.true.' + NAERAD: + LEPO3RA: '.true.' + LCMIP6O3: '.false.' + LEO3VAR: '.false.' + NGHGRAD: 20 + xios: # Precip and 2t every time step + 3hr + 6hrPLev + 1 day PV + monthly #xml_dir: /scratch/usr/shkjocke/foci_input2/OPENIFS43R3-TCO95/output_1ts+3hr+6hrPLev+1dayPV+Amon diff --git a/runscripts/oifs/oifs-43r3-tco95-amip-1-1-6_blogin_v2.yaml b/runscripts/oifs/oifs-43r3-tco95-amip-1-1-6_blogin_v2.yaml new file mode 100644 index 000000000..13cb79620 --- /dev/null +++ b/runscripts/oifs/oifs-43r3-tco95-amip-1-1-6_blogin_v2.yaml @@ -0,0 +1,76 @@ +general: + use_venv: False + verbose: False + clean_runs: 3 + + setup_name: oifs + compute_time: "01:00:00" + account: shk00018 + initial_date: "1979-01-01T00:00:00" + final_date: "2015-01-01T00:00:00" + model_dir: /home/shkjocke/esm/models/oifs-43r3-v2/ + base_dir: /scratch/usr/shkjocke/esm-experiments/ + nyear: 1 + nmonth: 0 + nday: 0 + restart_rate: 1 + restart_unit: days + +oifs: + version: 43r3 + with_xios: True + time_step: 3600 + #pool_dir: /scratch/usr/shkifmsw/foci_input2 + input_dir: ${pool_dir}/OPENIFS43R3-TCO95/ + rtables_dir: ${pool_dir}/OPENIFS43R3_GENERAL/rtables/ + vtables_dir: ${pool_dir}/OPENIFS43R3_GENERAL/vtables/ + clim_dir: ${pool_dir}/OPENIFS43R3-TCO95/95_4/ + ifsdata_dir: ${pool_dir}/OPENIFS43R3_GENERAL/ifsdata/ + cmip6_data_dir: ${pool_dir}/OPENIFS43R3_GENERAL/cmip6-data/ + mip: cmip6 + scenario: historical + icmcl_dir: /scratch/usr/shkjocke/foci_input2/OPENIFS43R3-TCO95-AMIP/ + icmcl_file: ICMCLhagwINIT_AMIP-1-1-6_19790101_20171231 + prepifs_expid: hagw + prepifs_startdate: 20080101 + resolution: TCO95 + levels: L91 + lresume: 0 + post_processing: 0 + nproc: 288 + omp_num_threads: 1 + perturb: 0 + ensemble_id: 1 + restart_type: eternal + + # Only for 43r3-v2 + solarspectrum: 1 + o3_scheme: cmip6 + + # For CMIP6 O3 we set + # LCMIP6O3 to true + # LEO3VAR to true + # LEPO3RA to false (otherwise prognostic O3 is used) + #add_namelist_changes: + # fort.4: + # NAMGFL: + # YO3_NL%LGP: '.true.' + # NAEPHY: + # LEO3CH: '.true.' + # NAERAD: + # LEPO3RA: '.false.' + # LCMIP6O3: '.true.' + # LEO3VAR: '.true.' + # NGHGRAD: 21 + +xios: + # Precip and 2t every time step + 3hr + 6hrPLev + 1 day PV + monthly + #xml_dir: /scratch/usr/shkjocke/foci_input2/OPENIFS43R3-TCO95/output_1ts+3hr+6hrPLev+1dayPV+Amon + # 3hr surface var output, 6hr model levels, 1m surface + pressure levels + #xml_dir: /scratch/usr/shkjocke/foci_input2/OPENIFS43R3-TCO95/output_3h+6hrLev + # 6hrPlev + 1day PV lev + 1day sfc + monthly means + #xml_dir: /scratch/usr/shkjocke/foci_input2/OPENIFS43R3-TCO95/output_6hrPLev+Aday+Amon + # 1m surface + pressure levels + xml_dir: /scratch/usr/shkjocke/foci_input2/OPENIFS43R3-TCO95/output_1m_sfc_pl + with_model: oifs + nproc: 96 diff --git a/runscripts/oifs/oifs-43r3-tco95-amip-blogin_tuning.yaml b/runscripts/oifs/oifs-43r3-tco95-amip-blogin_tuning.yaml index 4bd36e638..f07c78bc2 100644 --- a/runscripts/oifs/oifs-43r3-tco95-amip-blogin_tuning.yaml +++ b/runscripts/oifs/oifs-43r3-tco95-amip-blogin_tuning.yaml @@ -3,10 +3,10 @@ general: verbose: False setup_name: oifs - compute_time: "02:30:00" + compute_time: "02:00:00" initial_date: "1979-01-01T00:00:00" - final_date: "1981-01-01T00:00:00" - nyear: 2 + final_date: "1980-01-01T00:00:00" + nyear: 1 nmonth: 0 nday: 0 restart_rate: 1 @@ -17,18 +17,19 @@ general: # machine specific setup account: shk00018 - model_dir: /home/shkjocke/model_codes/oifs-43r3-v1/ - base_dir: /scratch/usr/shkjocke/esm-tuning/ + model_dir: /home/shkjocke/esm/models/oifs-43r3-v1/ + base_dir: /scratch/usr/shkjocke/esm-tuning-v2/ oifs: version: 43r3 with_xios: True - input_dir: ${pool_dir}/OPENIFS43R3-TCO95/ - rtables_dir: ${pool_dir}/OPENIFS43R3_GENERAL/rtables/ - vtables_dir: ${pool_dir}/OPENIFS43R3_GENERAL/vtables/ - clim_dir: ${pool_dir}/OPENIFS43R3-TCO95/95_4/ - ifsdata_dir: ${pool_dir}/OPENIFS43R3_GENERAL/ifsdata/ - cmip6_data_dir: ${pool_dir}/OPENIFS43R3_GENERAL/cmip6-data/ + pool_dir: /scratch/projects/shk00018/foci_input2/ + input_dir: ${pool_dir}/openifs_cy43_tco95/ + rtables_dir: ${pool_dir}/openifs_cy43_general/rtables/ + vtables_dir: ${pool_dir}/openifs_cy43_general/vtables/ + clim_dir: ${pool_dir}/openifs_cy43_tco95/95_4/ + ifsdata_dir: ${pool_dir}/openifs_cy43_general/ifsdata/ + cmip6_data_dir: ${pool_dir}/openifs_cy43_general/cmip6-data/ mip: cmip6 scenario: historical icmcl_dir: /scratch/usr/shkjocke/foci_input2/OPENIFS43R3-TCO95-AMIP/ @@ -39,8 +40,9 @@ oifs: levels: L91 lresume: 0 post_processing: 0 - nproc: 288 - perturb: 0 + nproc: 480 + time_step: 1800 + perturb: 1 ensemble_id: 1 pextra: 0 massfixer: 2 @@ -51,10 +53,11 @@ oifs: NAMCUMF: RPRCON: 1.4E-3 ENTRORG: 1.75E-3 - DETRPEN: 0.75E-4 + DETRPEN: 0.6E-4 ENTRDD: 3.0E-4 NAMCLDP: RVICE: 0.13 + RCLCRIT_SEA: 2.5E-4 xios: # 3hr surface + 6hr model lev + 1d pressure lev + 1d PV + 1m surf and pressure level diff --git a/runscripts/oifs/run_ensemble.sh b/runscripts/oifs/run_ensemble.sh index 6fa4d0ebd..c34feac83 100755 --- a/runscripts/oifs/run_ensemble.sh +++ b/runscripts/oifs/run_ensemble.sh @@ -10,11 +10,11 @@ # If you have > 10 concurrent jobs the admin usually gets angry # and before you know it you are on trial for sabotaging government property -rs=oifs-43r3-tco95-1850-amip.yaml -expid="OIFS-1850" +rs=oifs-43r3-tco95-sochic_blogin.yaml +expid="OIFS-BJK002" # Dont do more than approx 10 in one go -for (( e=1 ; e<=10 ; e++ )) +for (( e=51 ; e<=100 ; e++ )) do # Runs will be labelled as "rip" # r = realisation diff --git a/runscripts/oifs/run_tuning.sh b/runscripts/oifs/run_tuning.sh index d64ff716d..4c86269be 100755 --- a/runscripts/oifs/run_tuning.sh +++ b/runscripts/oifs/run_tuning.sh @@ -10,7 +10,7 @@ # If you have > 10 concurrent jobs the admin usually gets angry # and before you know it you are on trial for sabotaging government property -rs=oifs-43r3-tco95-amip-blogin_qbo.yaml +rs=oifs-43r3-tco95-amip-blogin_tuning.yaml expid_prefix="oifs-tco95" rprcon=0 @@ -18,7 +18,8 @@ rvice=0 entrorg=0 detrpen=0 entrdd=0 -ggaussb=1 +rclcrit_sea=1 +ggaussb=0 # Dont do more than approx 10 in one go @@ -97,6 +98,21 @@ if [[ "x${entrdd}" == "x1" ]] ;then done fi +## RCLCRIT_SEA +if [[ "x${rclcrit_sea}" == "x1" ]] ;then + i=1 + + for r in 1.5E-4 2.0E-4 3.0E-4 3.5E-4 2.5E-4 ; do + ii=$( printf "%03d" $i ) + echo " Run name: ${expid_prefix}_r${ii}" + sed -i "s/RCLCRIT_SEA:.*/RCLCRIT_SEA: ${r}/" ${rs} + + esm_runscripts ${rs} -e ${expid_prefix}_r${ii} + + i=$(( $i + 1 )) + done +fi + # GGAUSSB if [[ "x${ggaussb}" == "x1" ]] ;then i=1 diff --git a/setup.cfg b/setup.cfg index b57b6d335..521bd7448 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 6.13.7 +current_version = 6.23.6 commit = True tag = True diff --git a/setup.py b/setup.py index 8dd73a8dc..82cc2e171 100644 --- a/setup.py +++ b/setup.py @@ -51,7 +51,7 @@ "deniz.ural@awi.de", "jan.streffing@awi.de", "sebastian.wahl@geomar.de", - "kai.himstedt@dkrz.de", + "kai.himstedt@dkrz.de", ], python_requires=">=3.6, <3.10", classifiers=[ @@ -101,6 +101,6 @@ test_suite="tests", tests_require=test_requirements, url="https://github.com/esm-tools/esm_tools", - version="6.13.7", + version="6.23.6", zip_safe=False, ) diff --git a/src/esm_archiving/__init__.py b/src/esm_archiving/__init__.py index cfc7321ee..099bc063f 100644 --- a/src/esm_archiving/__init__.py +++ b/src/esm_archiving/__init__.py @@ -4,7 +4,7 @@ __author__ = """Paul Gierz""" __email__ = "pgierz@awi.de" -__version__ = "6.13.7" +__version__ = "6.23.6" from .esm_archiving import (archive_mistral, check_tar_lists, delete_original_data, determine_datestamp_location, diff --git a/src/esm_calendar/__init__.py b/src/esm_calendar/__init__.py index 9cb173d66..75bb31619 100644 --- a/src/esm_calendar/__init__.py +++ b/src/esm_calendar/__init__.py @@ -2,6 +2,6 @@ __author__ = """Dirk Barbi""" __email__ = "dirk.barbi@awi.de" -__version__ = "6.13.7" +__version__ = "6.23.6" from .esm_calendar import * diff --git a/src/esm_calendar/esm_calendar.py b/src/esm_calendar/esm_calendar.py index d04291e57..468dab13e 100644 --- a/src/esm_calendar/esm_calendar.py +++ b/src/esm_calendar/esm_calendar.py @@ -274,6 +274,9 @@ def __init__(self, indate, calendar=Calendar()): indate2 = indate if "_" in indate2: date, time = indate2.split("_") + elif ":" in indate2 and not "-" in indate2: + date = "0000-00-00" + time = indate2 else: date = indate2 time = "" @@ -438,14 +441,7 @@ def from_list(cls, _list): fromlist = from_list def __repr__(self): - return "Date(%s-%s-%sT%s:%s:%s)" % ( - self.year, - self.month, - self.day, - self.hour, - self.minute, - self.second, - ) + return f"Date({self.year:02}-{self.month:02}-{self.day:02}T{self.hour:02}:{self.minute:02}:{self.second:02})" def __getitem__(self, item): return (self.year, self.month, self.day, self.hour, self.minute, self.second)[ @@ -698,41 +694,58 @@ def format( self, form="SELF", givenph=None, givenpm=None, givenps=None ): # basically format_date """ - Needs a docstring! - The following forms are accepted: - + SELF: uses the format which was given when constructing the date - + 0: A Date formated as YYYY + Beautifully returns a ``Date`` object as a string. + + Parameters + ---------- + form : str or int + Logic taken from from MPI-Met + givenph : bool-ish + Print hours + givenpm : bool-ish + Print minutes + givenps : bool-ish + Print seconds + + Note + ---- + **How to use the ``form`` argument** + The following forms are accepted: + + SELF: uses the format which was given when constructing the date + + 0: A Date formatted as YYYY - In [5]: test.format(form=1) - Out[5]: '1850-01-01_00:00:00' + In [5]: test.format(form=1) + Out[5]: '1850-01-01_00:00:00' - In [6]: test.format(form=2) - Out[6]: '1850-01-01T00:00:00' + In [6]: test.format(form=2) + Out[6]: '1850-01-01T00:00:00' - In [7]: test.format(form=3) - Out[7]: '1850-01-01 00:00:00' + In [7]: test.format(form=3) + Out[7]: '1850-01-01 00:00:00' - In [8]: test.format(form=4) - Out[8]: '1850 01 01 00 00 00' + In [8]: test.format(form=4) + Out[8]: '1850 01 01 00 00 00' - In [9]: test.format(form=5) - Out[9]: '01 Jan 1850 00:00:00' + In [9]: test.format(form=5) + Out[9]: '01 Jan 1850 00:00:00' - In [10]: test.format(form=6) - Out[10]: '18500101_00:00:00' + In [10]: test.format(form=6) + Out[10]: '18500101_00:00:00' - In [11]: test.format(form=7) - Out[11]: '1850-01-01_000000' + In [11]: test.format(form=7) + Out[11]: '1850-01-01_000000' - In [12]: test.format(form=8) - Out[12]: '18500101000000' + In [12]: test.format(form=8) + Out[12]: '18500101000000' - In [13]: test.format(form=9) - Out[13]: '18500101_000000' + In [13]: test.format(form=9) + Out[13]: '18500101_000000' - In [14]: test.format(form=10) - Out[14]: '01/01/1850 00:00:00' + In [14]: test.format(form=10) + Out[14]: '01/01/1850 00:00:00' """ + # Programmer notes to not be ever included in the doc-string: Paul really, Really, REALLY + # dislikes this function. It rubs me in the wrong way. if form == "SELF": form = self._date_format.form @@ -740,11 +753,12 @@ def format( pm = self._date_format.printminutes ps = self._date_format.printseconds - if not givenph == None: + # These variables are....utterly pointless + if givenph is not None: ph = givenph - if not givenpm == None: + if givenpm is not None: pm = givenpm - if not givenps == None: + if givenps is not None: ps = givenps ndate = list( map( diff --git a/src/esm_cleanup/__init__.py b/src/esm_cleanup/__init__.py index df8d3a0db..34714e458 100644 --- a/src/esm_cleanup/__init__.py +++ b/src/esm_cleanup/__init__.py @@ -2,4 +2,4 @@ __author__ = """Dirk Barbi""" __email__ = "dirk.barbi@awi.de" -__version__ = "6.13.7" +__version__ = "6.23.6" diff --git a/src/esm_database/__init__.py b/src/esm_database/__init__.py index d46aa03a8..8c6da0c53 100644 --- a/src/esm_database/__init__.py +++ b/src/esm_database/__init__.py @@ -2,4 +2,4 @@ __author__ = """Dirk Barbi""" __email__ = "dirk.barbi@awi.de" -__version__ = "6.13.7" +__version__ = "6.23.6" diff --git a/src/esm_database/location_database.py b/src/esm_database/location_database.py index f169cdc03..d69d1b7eb 100644 --- a/src/esm_database/location_database.py +++ b/src/esm_database/location_database.py @@ -1,9 +1,9 @@ -from sqlalchemy import create_engine, Column, Integer, String, Sequence, DateTime -from sqlalchemy.ext.declarative import declarative_base -from sqlalchemy.orm import sessionmaker - import os +from sqlalchemy import (Column, DateTime, Integer, Sequence, String, + create_engine) +from sqlalchemy.orm import declarative_base, sessionmaker + main_database_file = os.path.expanduser("~") + "/.esm_tools/esmtools.db" if not os.path.isdir(os.path.expanduser("~") + "/.esm_tools"): os.mkdir(os.path.expanduser("~") + "/.esm_tools") diff --git a/src/esm_environment/__init__.py b/src/esm_environment/__init__.py index 8ad9601a7..e8bffb4f7 100644 --- a/src/esm_environment/__init__.py +++ b/src/esm_environment/__init__.py @@ -2,6 +2,6 @@ __author__ = """Dirk Barbi""" __email__ = "dirk.barbi@awi.de" -__version__ = "6.13.7" +__version__ = "6.23.6" from .esm_environment import * diff --git a/src/esm_environment/esm_environment.py b/src/esm_environment/esm_environment.py index 2c3d8cb33..03e242d14 100644 --- a/src/esm_environment/esm_environment.py +++ b/src/esm_environment/esm_environment.py @@ -469,6 +469,10 @@ def get_shell_commands(self): """ environment = [] + # Fix for seb-wahl's hack via source + if self.config.get("general_actions") is not None: + for action in self.config["general_actions"]: + environment.append(action) # Write module actions if self.config.get("module_actions") is not None: for action in self.config["module_actions"]: @@ -478,6 +482,10 @@ def get_shell_commands(self): environment.append(action) else: environment.append(f"module {action}") + # Write Spack actions + if self.config.get("spack_actions") is not None: + for action in self.config["spack_actions"]: + environment.append(f"spack {action}") # Add an empty string as a newline: environment.append("") if self.config.get("export_vars") is not None: diff --git a/src/esm_master/__init__.py b/src/esm_master/__init__.py index 4b16131e2..3acaf3dfd 100644 --- a/src/esm_master/__init__.py +++ b/src/esm_master/__init__.py @@ -2,7 +2,7 @@ __author__ = """Dirk Barbi""" __email__ = "dirk.barbi@awi.de" -__version__ = "6.13.7" +__version__ = "6.23.6" from . import database diff --git a/src/esm_master/compile_info.py b/src/esm_master/compile_info.py index 7d3acbbed..2d7f00f0a 100644 --- a/src/esm_master/compile_info.py +++ b/src/esm_master/compile_info.py @@ -67,6 +67,8 @@ def combine_components_yaml(parsed_args): "archfile", "use_oasis", "pipe_options", # deniz: Linux pipe support + "contact", + "source_code_permissions", ] categories = ["components", "couplings", "setups", "esm_software"] diff --git a/src/esm_master/esm_master.py b/src/esm_master/esm_master.py index c73593205..7c12e341e 100644 --- a/src/esm_master/esm_master.py +++ b/src/esm_master/esm_master.py @@ -88,6 +88,8 @@ def main_flow(parsed_args, target): user_task.output() user_task.output_steps() + user_task.validate() + user_task.generate_task_script() if parsed_args.get("check", False): # deniz: if the environment variable ESM_MASTER_DEBUG is also set dump @@ -101,7 +103,6 @@ def main_flow(parsed_args, target): print("esm_master: check mode is activated. Not executing the actions above") return 0 - user_task.validate() user_task.execute(ignore_errors) # env) diff --git a/src/esm_master/general_stuff.py b/src/esm_master/general_stuff.py index cb3ebdd8c..a0f72c232 100644 --- a/src/esm_master/general_stuff.py +++ b/src/esm_master/general_stuff.py @@ -282,9 +282,15 @@ def assemble_command(self, package, todo, setup_info, general): raw_command = raw_command + " " + package.destination else: raw_command = raw_command + " " + package.raw_name + + commands = [raw_command] + + if package.permissions: + commands.append(f"chmod {package.permissions} -R {package.destination}") else: - raw_command = None - return raw_command + commands = None + + return commands def output(self): print() diff --git a/src/esm_master/software_package.py b/src/esm_master/software_package.py index 354369189..6191eb363 100644 --- a/src/esm_master/software_package.py +++ b/src/esm_master/software_package.py @@ -66,6 +66,7 @@ def __init__( self.coupling_changes = None # deniz: Linux pipe support: eg. curl foo.tar.gz | tar zx self.pipe_options = None + self.permissions = None def fill_in_infos(self, setup_info, vcs, general): @@ -74,10 +75,9 @@ def fill_in_infos(self, setup_info, vcs, general): self.complete_targets(setup_info) # kh 11.09.20 support git options like --recursive - self.repo_type, self.repo, self.branch, self.repo_options = self.get_repo_info( - setup_info, vcs - ) + self.get_repo_info(setup_info, vcs) self.destination = setup_info.get_config_entry(self, "destination") + self.contact = setup_info.get_config_entry(self, "contact") self.clone_destination = setup_info.get_config_entry(self, "clone_destination") if not self.destination: self.destination = self.raw_name @@ -232,18 +232,17 @@ def get_comp_type(self, setup_info): return "bin", [] def get_repo_info(self, setup_info, vcs): - repo = branch = repo_type = None + self.repo = self.branch = self.repo_type = None for check_repo in vcs.known_repos: - repo = setup_info.get_config_entry(self, check_repo + "-repository") - if repo: - repo_type = check_repo + self.repo = setup_info.get_config_entry(self, check_repo + "-repository") + if self.repo: + self.repo_type = check_repo break - branch = setup_info.get_config_entry(self, "branch") + self.branch = setup_info.get_config_entry(self, "branch") # kh 11.09.20 support git options like --recursive - repo_options = setup_info.get_config_entry(self, "repo_options") - - return repo_type, repo, branch, repo_options + self.repo_options = setup_info.get_config_entry(self, "repo_options") + self.permissions = setup_info.get_config_entry(self, "source_code_permissions") def get_command_list(self, setup_info, vcs, general): command_list = {} diff --git a/src/esm_master/task.py b/src/esm_master/task.py index deb1f2ca1..536f9c140 100644 --- a/src/esm_master/task.py +++ b/src/esm_master/task.py @@ -8,6 +8,7 @@ import pathlib from .software_package import software_package +from esm_parser import user_error import esm_environment import esm_plugin_manager @@ -35,13 +36,14 @@ def install(package: str) -> None: """ package_name = package.split("/")[-1].replace(".git", "") installed_packages = esm_plugin_manager.find_installed_plugins() + arg_list = [sys.executable, "-m", "pip", "install", "--user", package] + if os.environ.get("VIRTUAL_ENV"): + arg_list.remove("--user") if not package_name in installed_packages: try: - subprocess.check_call([sys.executable, "-m", "pip", "install", "--user",package]) + subprocess.check_call(arg_list) except (OSError, subprocess.CalledProcessError): # PermissionDeniedError would be nicer... - subprocess.check_call( - [sys.executable, "-m", "pip", "install", "--user", package] - ) + subprocess.check_call(arg_list) ###################################################################################### @@ -437,7 +439,9 @@ def check_requirements(self): + folder + " detected. Please run 'make get-" + self.package.raw_name - + "' first." + + "' first, or switch to the folder containing " + + folder + + "." ) print() sys.exit(0) @@ -446,7 +450,7 @@ def check_requirements(self): def validate(self): self.check_requirements() - def execute(self, ignore_errors=False): + def generate_task_script(self): for task in self.ordered_tasks: if task.todo in ["conf", "comp"]: if task.package.kind == "components": @@ -456,11 +460,17 @@ def execute(self, ignore_errors=False): ) if os.path.isfile(newfile): os.chmod(newfile, 0o755) + + def execute(self, ignore_errors=False): + # Calculate the number of get commands for this esm_master operation + self.num_of_get_commands() + # Loop through the commands for command in self.command_list: - if command.startswith("mkdir"): + repo = self.get_repo_properties_from_command(command) + if command.startswith("mkdir") and ";" not in command: # os.system(command) subprocess.run(command.split(), check=not ignore_errors) - elif command.startswith("cp "): + elif command.startswith("cp ") and ";" not in command: subprocess.run(command.split(), check=not ignore_errors) elif command.startswith("cd ") and ";" not in command: os.chdir(command.replace("cd ", "")) @@ -476,6 +486,16 @@ def execute(self, ignore_errors=False): pipe_command.split(), stdin=curl_process.stdout ) curl_process.wait() + elif repo["is_repo_operation"]: + command_spl = shlex.split(command) + try: + subprocess.run(command_spl, check=not ignore_errors) + except subprocess.CalledProcessError as error: + self.add_repo_error(command, repo, error) + # If it's the last repo command, check for errors and report them back + if repo["is_last_repo"]: + self.report_repo_errors() + self.report_destination_path_errors() else: # os.system(command) # deniz: I personally did not like the iterator and the list @@ -534,3 +554,184 @@ def output_steps(self): print(" Executing commands in this order:") for command in self.shown_command_list: print(" ", command) + + # Repository methods + # ------------------ + def num_of_get_commands(self): + """ + Defines ``self.num_get_commands`` which accounts for the total number of get + commands for the current ``esm_master`` operation + """ + self.num_get_commands = 0 + for command in self.command_list: + for subtask in self.subtasks: + if command in subtask.package.command_list.get("get", []): + self.num_get_commands += 1 + break + return self.num_get_commands # (Not strictly needed, but might be nice?) + + def get_repo_properties_from_command(self, command): + """ + If the current command is a repo action (e.g. cloning) collects the repo + information associated to that command + + Parameters + ---------- + command : str + The shell command to be evaluated + + Returns + ------- + repo : dict + A dictionary containing the following information: + - ``package``: the package object that contains all the package info + - ``is_repo_operation``: boolean that indicates whether ``command`` is a + repo operation + - ``is_last_repo``: boolean that indicates whether this is the last repo + operation or not + """ + # Initializes the list of executed repo commands + if not hasattr(self, "executed_repo_commands"): + self.executed_repo_commands = [] + + repo = {"is_repo_operation": False, "is_last_repo": False} + get_commands = self.package.command_list.get("get") + # This is true for standalone models + if self.package.repo and get_commands: + if command in get_commands: + repo["package"] = self.package + repo["is_repo_operation"] = True + repo["is_last_repo"] = True + # This block here is for coupled setups (loops through each subtask -> model) + else: + for subtask in self.subtasks: + get_commands = subtask.package.command_list.get("get") + if command in get_commands: + repo ["package"]= subtask.package + repo["is_repo_operation"] = True + self.executed_repo_commands.append(command) + if self.num_get_commands == len(self.executed_repo_commands): + repo["is_last_repo"] = True + break + + return repo + + def add_repo_error(self, command, repo, error): + """ + If an error occurred during the repo ``command``, then stores information about + the error, and the associated package. The information about the error is + saved in the attribute ``self.repo_errors`` (if it doesn't exist, it creates + it). + + The ``repo_errors`` attribute itself is a ``dict`` with keys being the failed + ``command``s, each of them containing the following variables: + - ``model``: model name + - ``repo``: url of the repo + - ``destination``: destination folder + - ``error``: "destination path exist" if the destination exist, and the value + of the ``error`` parameter if it the destination does not exist + + Note + ---- + Since the ``error`` is caught from an ``except`` of a ``subprocess`` + command, the actual error that occurred during the execution of the ``command`` + by ``subprocess.run`` is not caught. That means that we cannot evaluate which + type of error occurred during the repo command (i.e. was an error related to + access to the repo, or was it the error that happens when the folder already + exist?). To compensate for this problem, this method also checks whether the + destination folder exist or not to save a ``"destination path exist"`` error + description or to keep the same error string as reported by ``error`` + (permission problem). This approach is not ideal. It would be possible to catch + the ``subprocess`` error, by capturing the stdout/stderr of the ``subprocess`` + command, but then, the downloading progress is also captured and not displayed + to the user, which might make the users wonder if ESM-Tools is stalling. + + Parameters + ---------- + command : str + Repo command for which the error might have occur + repo : dict + Information associated to the repo ``command``, including tha ``package`` + object + error : str + Error caught from ``except`` + """ + # Initializes the list of executed repo commands + if not hasattr(self, "repo_errors"): + self.repo_errors = {} + + destination = repo["package"].destination + # Checks whether the destination path exists to save a "destination path exist" + # error + if os.path.isdir(destination): + error = "destination path exists" + for folder in self.folders_after_download: + if destination in folder: + full_destination = folder + + # If an error occured, store the information in the ``repo_errors`` atribute + if error: + self.repo_errors[command] = { + "model": repo["package"].model, + "repo": repo["package"].repo, + "contact": repo["package"].contact, + "destination": full_destination, + "error": error, + } + + def report_repo_errors(self): + """ + Reports an ``esm_parser.user_error`` summarizing all the information about + the repo permission errors associated to the ``esm_master`` command. + """ + if not hasattr(self, "repo_errors") or len(self.repo_errors) == 0: + return + + problematic_repos = "" + for command, repo_error in self.repo_errors.items(): + error = repo_error["error"] + if error != "destination path exists": + problematic_repos += ( + f"``{repo_error['model']}``: {repo_error['repo']}\n" + f" ``contact``: {repo_error['contact']}\n" + f" failed command: ``{command}``\n" + f" error message:\n{error}\n" + ) + + if problematic_repos: + user_error( + "Download error", + "There were problems downloading some of the components involved in " + f"the operation ``{self.raw_name}``. Make sure the ``user names`` and " + "``passwords`` you introduced are correct. Also, check that you have " + "access and reading permissions to the repositories listed below. If " + "you don't, contact the person in charge of that particular repository " + "(see ``contact`` in the repository list below).\n\n" + f"Repositories with problems:\n{problematic_repos}" + ) + + def report_destination_path_errors(self): + """ + Reports an ``esm_parser.user_error`` summarizing all the information about + the ``"destination path exist"`` errors associated to the ``esm_master`` + command. + """ + if not hasattr(self, "repo_errors") or len(self.repo_errors) == 0: + return + + problematic_destinations = "" + for command, repo_error in self.repo_errors.items(): + error = repo_error["error"] + if error == "destination path exists": + problematic_destinations += f"- ``{repo_error['destination']}``\n" + + if problematic_destinations: + user_error( + "destination already exists", + "Some coponents couldn't be downloaded because their destination paths " + f"already exists (see list below). If you want to download again the " + "model consider deleting that folder. If instead, you want to keep " + "that, you can use other esm_master commands (e.g. esm_master " + "comp--). Destinations already present:\n" + f"{problematic_destinations}\n" + ) diff --git a/src/esm_motd/__init__.py b/src/esm_motd/__init__.py index 952a2b62a..ddb4c6b2f 100644 --- a/src/esm_motd/__init__.py +++ b/src/esm_motd/__init__.py @@ -2,6 +2,6 @@ __author__ = """Dirk Barbi""" __email__ = "dirk.barbi@awi.de" -__version__ = "6.13.7" +__version__ = "6.23.6" from .esm_motd import * diff --git a/src/esm_motd/esm_motd.py b/src/esm_motd/esm_motd.py index 29b4b49b2..3027b6424 100644 --- a/src/esm_motd/esm_motd.py +++ b/src/esm_motd/esm_motd.py @@ -29,7 +29,7 @@ def __init__(self): url = "https://raw.githubusercontent.com/esm-tools/esm_tools/release/motd/motd.yaml" try: self.motdfile = urllib.request.urlopen(url) - except urllib.error.HTTPError: + except (urllib.error.HTTPError, urllib.error.URLError): timeout = 1 # seconds to wait # print(f"HTTP Error: Connection to file {url} containing update messages could not be established") # print(" Please check the URL by manually...") @@ -112,10 +112,12 @@ def motd_handler(self, mypackage, myversion): for message in self.message_dict: # If the package for this message is the same as ``mypackage`` and the # the version condition is met display the MOTD + version_range = self.message_dict[message]["versions"] + version = version_range.strip("<>=!") if self.message_dict[message][ "package" ] == mypackage and esm_utilities.check_valid_version( - self.message_dict[message]["versions"], version=myversion + version_range, version=myversion ): print( "************************************************************************************" @@ -124,9 +126,14 @@ def motd_handler(self, mypackage, myversion): print() print(self.message_dict[message]["message"]) if mypackage == "esm_tools": - print("Upgrade ESM-Tools by:") - print(f" cd {esm_tools._get_real_dir_from_pth_file('')}") - print(" git pull") + esm_tools_path = esm_tools._get_real_dir_from_pth_file('') + print( + f"Upgrade ESM-Tools to the version contianing this fix (\x1b[96m{version}\x1b[0m) by:\n" + f"\x1b[96m1.\x1b[0m \x1b[35mcd {esm_tools_path}\x1b[0m\n" + "\x1b[96m2.\x1b[0m Make sure that your git repo is clean (\x1b[35mgit status\x1b[0m)\n" + "\x1b[96m3.\x1b[0m \x1b[35mgit checkout release\x1b[0m\n" + "\x1b[96m4.\x1b[0m \x1b[35mgit pull\x1b[0m\n" + ) # Deprecated after monorepo rework, rewrite if we ever get to have # more than one package again. else: @@ -166,8 +173,10 @@ def check_all_esm_packages(): motd = MessageOfTheDayHandler() # Uncomment the following lines For testing using the local motd.yaml - # print(local_motd) - # with open(local_motd, "r") as motdfile: + #import os + #local_motd = f"{os.path.dirname(__file__)}/../../esm_tools/motd/motd.yaml" + #print(local_motd) + #with open(local_motd, "r") as motdfile: # motd.message_dict = yaml.load(motdfile, Loader=yaml.FullLoader) motd.motd_handler(mypackage, myversion) sys.exit(0) diff --git a/src/esm_parser/__init__.py b/src/esm_parser/__init__.py index bbb32b121..111aa9fba 100644 --- a/src/esm_parser/__init__.py +++ b/src/esm_parser/__init__.py @@ -2,7 +2,7 @@ __author__ = """Dirk Barbi""" __email__ = "dirk.barbi@awi.de" -__version__ = "6.13.7" +__version__ = "6.23.6" from .esm_parser import * diff --git a/src/esm_parser/esm_parser.py b/src/esm_parser/esm_parser.py index f8f7a89fe..a06bfe090 100644 --- a/src/esm_parser/esm_parser.py +++ b/src/esm_parser/esm_parser.py @@ -72,6 +72,11 @@ import sys import warnings +if sys.version_info > (3, 9): + from collections.abc import Mapping +else: + from collections import Mapping + # Always import externals before any non standard library imports # Third-Party Imports @@ -237,6 +242,7 @@ def look_for_file(model, item, all_config=None): def initialize_from_yaml(filepath): + user_config = {} for file_ending in YAML_AUTO_EXTENSIONS: if filepath.endswith(file_ending) and not file_ending == "": user_config = yaml_file_to_dict(filepath) @@ -247,6 +253,13 @@ def initialize_from_yaml(filepath): user_config["general"]["runscript_abspath"] = filepath user_config = complete_config(user_config) + if not user_config: + user_error( + "Incorrect extension", + f"The runscript provided (``{filepath}``) does not have a valid file " + "extension. The following are valid file extensions for runscripts: " + f"{YAML_AUTO_EXTENSIONS[1:]}" + ) return user_config @@ -573,7 +586,7 @@ def new_dict_merge(dct, merge_dct, winner="to_be_included"): if ( k in dct and isinstance(dct[k], dict) - and isinstance(merge_dct[k], collections.Mapping) + and isinstance(merge_dct[k], Mapping) ): new_dict_merge(dct[k], merge_dct[k], winner) else: @@ -615,7 +628,7 @@ def dict_merge(dct, merge_dct, resolve_nested_adds=False, **kwargs): if ( k in dct and isinstance(v, dict) - and isinstance(merge_dct[k], collections.Mapping) + and isinstance(merge_dct[k], Mapping) ): # NOTE(PG): this is a very bad hack and doesn't belong here at all. # Maybe instead the yaml_file_to_dict needs to say something like diff --git a/src/esm_plugin_manager/__init__.py b/src/esm_plugin_manager/__init__.py index f9b6f37d4..a6cb9c967 100644 --- a/src/esm_plugin_manager/__init__.py +++ b/src/esm_plugin_manager/__init__.py @@ -2,6 +2,6 @@ __author__ = """Dirk Barbi, Paul Gierz, Sebastian Wahl""" __email__ = "dirk.barbi@awi.de" -__version__ = "6.13.7" +__version__ = "6.23.6" from .esm_plugin_manager import * diff --git a/src/esm_profile/__init__.py b/src/esm_profile/__init__.py index fceed4c73..08b91040e 100644 --- a/src/esm_profile/__init__.py +++ b/src/esm_profile/__init__.py @@ -2,6 +2,6 @@ __author__ = """Dirk Barbi""" __email__ = "dirk.barbi@awi.de" -__version__ = "6.13.7" +__version__ = "6.23.6" from .esm_profile import * diff --git a/src/esm_runscripts/__init__.py b/src/esm_runscripts/__init__.py index 6c7977cec..2f649989d 100644 --- a/src/esm_runscripts/__init__.py +++ b/src/esm_runscripts/__init__.py @@ -2,7 +2,7 @@ __author__ = """Dirk Barbi""" __email__ = "dirk.barbi@awi.de" -__version__ = "6.13.7" +__version__ = "6.23.6" from .batch_system import * from .chunky_parts import * diff --git a/src/esm_runscripts/batch_system.py b/src/esm_runscripts/batch_system.py index a9049824a..a8faec98e 100644 --- a/src/esm_runscripts/batch_system.py +++ b/src/esm_runscripts/batch_system.py @@ -223,6 +223,11 @@ def calculate_requirements(config, cluster=None): else: continue + # seb-wahl: add support for ECHAM6's parallel I/O feature + # namelist parctl in namelist.echam + if "nprocio" in config[model]: + config[model]["tasks"] += config[model].get("nprocio",0) + nproc = config[model]["tasks"] if cluster == "compute": cores_per_node = config["computer"]["partitions"]["compute"][ diff --git a/src/esm_runscripts/chunky_parts.py b/src/esm_runscripts/chunky_parts.py index 09e2db869..439a8f970 100644 --- a/src/esm_runscripts/chunky_parts.py +++ b/src/esm_runscripts/chunky_parts.py @@ -10,7 +10,7 @@ def setup_correct_chunk_config(config): if not config["general"].get("iterative_coupling", False): return config - print("Starting the iterative coupling business") + print("Initializing iterative coupling") chunk_config = _restore_original_config(config) chunk_config = _initialize_chunk_date_file( diff --git a/src/esm_runscripts/cli.py b/src/esm_runscripts/cli.py index eaae9006a..4498c92f6 100644 --- a/src/esm_runscripts/cli.py +++ b/src/esm_runscripts/cli.py @@ -18,6 +18,7 @@ from .helpers import SmartSink from .sim_objects import * +from esm_parser import user_error def parse_shargs(): """The arg parser for interactive use""" @@ -247,6 +248,12 @@ def main(): runscript_full_path = os.path.realpath(ARGS.runscript) runscript_dir, runscript = os.path.split(runscript_full_path) runscript_dir += "/" + if not os.path.exists(runscript_full_path): + user_error( + "runscript not found", + f"The runscript ``{ARGS.runscript}`` does not exists in folder ``{runscript_dir}``. ", + dsymbols=["``", "'"], + ) # this might contain the relative path but it will be taken care of later command_line_config["original_command"] = original_command.strip() diff --git a/src/esm_runscripts/compute.py b/src/esm_runscripts/compute.py index 98345ebb1..596db3f6b 100644 --- a/src/esm_runscripts/compute.py +++ b/src/esm_runscripts/compute.py @@ -280,10 +280,13 @@ def initialize_experiment_logfile(config): # Write trace-log file now that we know where to do that if "trace_sink" in dir(logger): + experiment_dir = config["general"]["experiment_dir"] + expid = config["general"]["expid"] + it_coupled_model_name = config["general"]["iterative_coupled_model"] + datestamp = config["general"]["run_datestamp"] logfile_path = ( - f"{config['general']['experiment_dir']}/log" - f"/{config['general']['expid']}_esm_runscripts_" - f"{config['general']['run_datestamp']}.log" + f"{experiment_dir}/log/" + f"{expid}_{it_coupled_model_name}esm_runscripts_{datestamp}.log" ) logger.trace_sink.def_path(logfile_path) @@ -355,9 +358,12 @@ class EsmConfigDumper(yaml.dumper.Dumper): if "oasis3mct" in config: EsmConfigDumper.add_representer(esm_runscripts.oasis.oasis, oasis_representer) + thisrun_config_dir = config["general"]["thisrun_config_dir"] + expid = config["general"]["expid"] + it_coupled_model_name = config["general"]["iterative_coupled_model"] config_file_path = ( - f"{config['general']['thisrun_config_dir']}" - f"/{config['general']['expid']}_finished_config.yaml" + f"{thisrun_config_dir}/" + f"{expid}_{it_coupled_model_name}finished_config.yaml" ) with open(config_file_path, "w") as config_file: # Avoid saving ``prev_run`` information in the config file diff --git a/src/esm_runscripts/config_initialization.py b/src/esm_runscripts/config_initialization.py index 7b35c3aaa..7595e5515 100644 --- a/src/esm_runscripts/config_initialization.py +++ b/src/esm_runscripts/config_initialization.py @@ -14,6 +14,7 @@ def init_first_user_config(command_line_config, user_config): user_config = get_user_config_from_command_line(command_line_config) # maybe switch to another runscript, if iterative coupling + user_config["general"]["iterative_coupled_model"] = "" if user_config["general"].get("iterative_coupling", False): user_config = chunky_parts.setup_correct_chunk_config(user_config) @@ -37,6 +38,13 @@ def init_first_user_config(command_line_config, user_config): model_config = get_user_config_from_command_line(new_command_line_config) user_config = esm_parser.new_deep_update(user_config, model_config) + # Set the ``iterative_coupled_model`` string, to add the model name to the + # run_ folder, finished_config.yaml, etc., to avoid overwritting with the + # files of other offline coupled models + user_config["general"]["iterative_coupled_model"] = ( + f"{user_config['general']['setup_name']}_" + ) + if user_config["general"].get("debug_obj_init", False): pdb.set_trace() diff --git a/src/esm_runscripts/database.py b/src/esm_runscripts/database.py index eb60fd021..cf5653919 100644 --- a/src/esm_runscripts/database.py +++ b/src/esm_runscripts/database.py @@ -1,9 +1,9 @@ -from sqlalchemy import create_engine, Column, Integer, String, Sequence, DateTime -from sqlalchemy.ext.declarative import declarative_base -from sqlalchemy.orm import sessionmaker - import os +from sqlalchemy import (Column, DateTime, Integer, Sequence, String, + create_engine) +from sqlalchemy.orm import declarative_base, sessionmaker + # database_file = os.path.dirname(os.path.abspath(__file__)) + "/../database/esm_runscripts.db" database_file = os.path.expanduser("~") + "/.esm_tools/esm_runscripts.db" if not os.path.isdir(os.path.expanduser("~") + "/.esm_tools"): diff --git a/src/esm_runscripts/filelists.py b/src/esm_runscripts/filelists.py index b7f0a9b9d..fa27f8520 100644 --- a/src/esm_runscripts/filelists.py +++ b/src/esm_runscripts/filelists.py @@ -775,12 +775,15 @@ def log_used_files(config): if config["general"]["verbose"]: print("\n::: Logging used files", flush=True) filetypes = config["general"]["relevant_filetypes"] + expid = config["general"]["expid"] + it_coupled_model_name = config["general"]["iterative_coupled_model"] + datestamp = config["general"]["run_datestamp"] for model in config["general"]["valid_model_names"] + ["general"]: + thisrun_config_dir = config[model]["thisrun_config_dir"] # this file contains the files used in the experiment flist_file = ( - f"{config[model]['thisrun_config_dir']}" - f"/{config['general']['expid']}_filelist_" - f"{config['general']['run_datestamp']}" + f"{thisrun_config_dir}/" + f"{expid}_{it_coupled_model_name}filelist_{datestamp}" ) with open(flist_file, "w") as flist: @@ -889,7 +892,7 @@ def check_for_unknown_files(config): return config -def resolve_symlinks(file_source): +def resolve_symlinks(config, file_source): if os.path.islink(file_source): points_to = os.path.realpath(file_source) @@ -902,7 +905,7 @@ def resolve_symlinks(file_source): return file_source # recursively find the file that the link is pointing to - return resolve_symlinks(points_to) + return resolve_symlinks(config, points_to) else: return file_source @@ -953,7 +956,7 @@ def copy_files(config, filetypes, source, target): helpers.print_datetime(config) continue dest_dir = os.path.dirname(file_target) - file_source = resolve_symlinks(file_source) + file_source = resolve_symlinks(config, file_source) if not os.path.isdir(file_source): try: if not os.path.isdir(dest_dir): diff --git a/src/esm_runscripts/namelists.py b/src/esm_runscripts/namelists.py index 1f9c85f6a..6089fa573 100644 --- a/src/esm_runscripts/namelists.py +++ b/src/esm_runscripts/namelists.py @@ -90,6 +90,72 @@ def nmls_load(mconfig): mconfig["namelists"][nml].uppercase = True return mconfig + @staticmethod + def nmls_check_changes(namelist_changes): + """ + Checks if namelist changes are given in correct syntax. + If not, a user_error will be raised and stop the execution. + + Programmer Information + ---------------------- + + Parameters + ---------- + namelist_changes : nested dict + + If the syntax is correct, namelist_changes should be a nested dict of the following form:: + + {'namelist1.nml': {'namelist1': {'variable1': 'value1', 'variable2': 'value2', 'variable3': 'value3'}, 'namelist2': {'variable1': value1}}} + + Returns + ------- + None + + """ + + error_message = ( + "There is a syntax error, probably in your runscript (but potentially in other yaml files), " + "regarding namelist changes (e.g. in a 'add_namelist_changes' block). " + "It seems that either 'namelist_file' or " + "'namelist_group' or 'both' are missing.\n" + "Please make sure that namelist changes are specified in the correct syntax (see example below)" + " and rerun your runscript.\n" + ) + example = ( + "\nExample of a ``correct syntax`` for [add_]namelist_changes:\n" + "\t [add_]namelist_changes:\n" + "\t '':\n" + "\t '':\n" + "\t : " + ) + + nml_syntax_error = False + + for namelist in list(namelist_changes): + changes = namelist_changes[namelist] + # Check if namelist_changes are specified in correct syntax (e.g. in runscript) + # If correct syntax, changes is always a dict. + if not isinstance(changes, dict): + nml_syntax_error = True + this_is_wrong = (f"There is a syntax error in the following lines:\n\n[add_]namelist_changes:\n '{namelist}: {changes}'\n...") + break + else: + for change_chapter in list(changes): + change_entries = changes[change_chapter] + # Check if namelist_changes are specified in correct syntax (e.g. in runscript) + # If correct syntax, change_entries is always a dict. + if not isinstance(change_entries, dict): + nml_syntax_error = True + this_is_wrong = ( + f"There is a syntax error in the following lines:\n\n[add_]namelist_changes:\n '{namelist}':\n '{change_chapter}: {change_entries}'\n...") + break + if nml_syntax_error: + user_error( + "Syntax error in namelist changes", + f"{error_message}\n{this_is_wrong}\n{example}", + dsymbols=["``", "'"], + ) + @staticmethod def nmls_remove(mconfig): """ @@ -122,9 +188,15 @@ def nmls_remove(mconfig): ------- mconfig : dict The modified configuration. + + Calls to other methods + ---------------------- + nmls_check_changes """ namelist_changes = mconfig.get("namelist_changes", {}) + # Check if namelist_changes have correct syntax + Namelist.nmls_check_changes(namelist_changes) namelist_removes = [] for namelist in list(namelist_changes): changes = namelist_changes[namelist] @@ -136,7 +208,6 @@ def nmls_remove(mconfig): value = change_entries[key] if value == "remove_from_namelist": namelist_removes.append((namelist, change_chapter, key)) - # the key is probably coming from esm_tools config # files or from a user runscript. It can contain lower # case, but the original Fortran namelist could be in @@ -145,7 +216,6 @@ def nmls_remove(mconfig): # `key` is the processed variable from f90nml module and # is lowercase. remove_original_key = False - # traverse the namelist chapter and see if a mixed case # variable is also found for key2 in namelist_changes[namelist][change_chapter]: @@ -156,12 +226,10 @@ def nmls_remove(mconfig): namelist_removes.append( (namelist, change_chapter, original_key) ) - # remove both lowercase and mixed case variables del namelist_changes[namelist][change_chapter][key] if remove_original_key: del namelist_changes[namelist][change_chapter][original_key] - # mconfig instead of config, Grrrrr print( f"- NOTE: removing the variable: {key} from the namelist: {namelist}" @@ -219,8 +287,15 @@ def nmls_modify(mconfig): ------- mconfig : dict The modified configuration. + + Calls to other methods: + ---------------------- + nmls_check_changes """ namelist_changes = mconfig.get("namelist_changes", {}) + # Check if namelist_changes have correct syntax + Namelist.nmls_check_changes(namelist_changes) + for namelist, changes in namelist_changes.items(): mconfig["namelists"][namelist].patch(changes) return mconfig diff --git a/src/esm_runscripts/oasis.py b/src/esm_runscripts/oasis.py index d308bdf18..c834ff100 100644 --- a/src/esm_runscripts/oasis.py +++ b/src/esm_runscripts/oasis.py @@ -1,5 +1,10 @@ import sys +import glob +import os +import subprocess +import questionary +from esm_parser import user_error class oasis: def __init__( @@ -77,7 +82,6 @@ def add_coupling( lresume, export_mode="DEFAULT", ): - import sys self.namcouple += ["#"] @@ -98,12 +102,12 @@ def add_coupling( sep = ":" if export_mode == "DEFAULT": - if lresume == False: + if bool(lresume) is False: export_mode = "EXPOUT" else: export_mode = "EXPORTED" - if lresume == False: + if bool(lresume) is False: lag = str(0) else: lag = direction.get("lag", "0") @@ -387,11 +391,11 @@ def add_output_file(self, lefts, rights, leftmodel, rightmodel, config): self.next_coupling += 1 - if not "outdata_files" in config: + if "outdata_files" not in config: config["outdata_files"] = {} - if not "outdata_in_work" in config: + if "outdata_in_work" not in config: config["outdata_in_work"] = {} - if not "outdata_sources" in config: + if "outdata_sources" not in config: config["outdata_sources"] = {} for thisfile in out_file: @@ -400,11 +404,36 @@ def add_output_file(self, lefts, rights, leftmodel, rightmodel, config): config["outdata_in_work"][thisfile] = thisfile config["outdata_sources"][thisfile] = thisfile - def add_restart_files(self, restart_file, fconfig): + def add_restart_files(self, restart_file_label, fconfig): + """ + Handles the special restart case of the coupling fields. + + Cases + ----- + 1. If this run is a restart but not a branch-off experiment, set the source to + be the same as defined by the user in ``restart_in_sources`` or the same + as the name coming from ``coupling__fields``, if the first is + missing (the normal case). + 2. Same as case 1 but with the time stamp added to the name of the restart file + to make sure the correct file (and not a link to the last restart file made) + is loaded for the branch-off experiment. This option uses the + non-timestamped version of the file when only one file is found (e.g. the + parent simulation only has one run, or the files are taken for the first + run from the pool, as in AWICM3). + + Parameters + ---------- + restart_file_label : str + The file's label (not the file name itself!). Used to retrieve the + file's source and target path. As defined in the keys of + ``coupling_target_fields`` or ``coupling_input_fields`` in the yamls + fconfig : ConfigSetup + The complete simulation configuration. + """ + config = fconfig[self.name] gconfig = fconfig["general"] - # enddate = "_" + str(gconfig["end_date"].year) + str(gconfig["end_date"].month) + str(gconfig["end_date"].day) - # parentdate = "_" + str(config["parent_date"].year) + str(config["parent_date"].month) + str(config["parent_date"].day) + is_runtime = gconfig["run_or_compile"] == "runtime" enddate = "_" + gconfig["end_date"].format( form=9, givenph=False, givenpm=False, givenps=False ) @@ -412,44 +441,111 @@ def add_restart_files(self, restart_file, fconfig): form=9, givenph=False, givenpm=False, givenps=False ) - if not "restart_out_files" in config: + if "restart_out_files" not in config: config["restart_out_files"] = {} - if not "restart_out_in_work" in config: + if "restart_out_in_work" not in config: config["restart_out_in_work"] = {} - if not "restart_out_sources" in config: + if "restart_out_sources" not in config: config["restart_out_sources"] = {} - if not "restart_in_files" in config: + if "restart_in_files" not in config: config["restart_in_files"] = {} - if not "restart_in_in_work" in config: + if "restart_in_in_work" not in config: config["restart_in_in_work"] = {} - if not "restart_in_sources" in config: + if "restart_in_sources" not in config: config["restart_in_sources"] = {} - config["restart_out_files"][restart_file] = restart_file - config["restart_out_files"][restart_file + "_recv"] = restart_file + "_recv" + # Find the actual path of the restart + restart_file_path = config["restart_in_sources"].get(restart_file_label, None) + # Find the actual name of the restart: if a path is given in restart_in_sources + # get the basename of that path, otherwise assign the file label also as name + # of the file (coming from ``coupling__fields``) + if restart_file_path: + restart_file = os.path.basename(restart_file_label) + else: + restart_file = restart_file_label + + config["restart_out_files"][restart_file_label] = restart_file + config["restart_out_files"][restart_file_label + "_recv"] = restart_file + "_recv" - config["restart_out_in_work"][restart_file] = restart_file # + enddate - config["restart_out_in_work"][restart_file + "_recv"] = ( + config["restart_out_in_work"][restart_file_label] = restart_file # + enddate + config["restart_out_in_work"][restart_file_label + "_recv"] = ( restart_file + "_recv" ) # + enddate - config["restart_out_sources"][restart_file] = restart_file - config["restart_out_sources"][restart_file + "_recv"] = restart_file + "_recv" + config["restart_out_sources"][restart_file_label] = restart_file + config["restart_out_sources"][restart_file_label + "_recv"] = restart_file + "_recv" + + config["restart_in_files"][restart_file_label] = restart_file + config["restart_in_in_work"][restart_file_label] = restart_file + + # In case of a branch-off experiment -> use the correct oasis restart files: + # Not the soft link to the last, but the actual one for the branch-off date + if gconfig["run_number"] == 1 and config["lresume"] and gconfig["jobtype"] == "prepcompute": + # If they do not exist, define ``ini_restart_date`` and ``ini_restart_dir`` + # based on ``ini_parent_date`` and ``ini_parent_dir`` + if "ini_parent_date" in config and "ini_restart_date" not in config: + config["ini_restart_date"] = config["ini_parent_date"] + if "ini_parent_dir" in config and "ini_restart_dir" not in config: + config["ini_restart_dir"] = config["ini_parent_dir"] + # If the restart file path is not defined, or it's not an absolute path to + # the file, set it to be the same as the ini_restart_dir + if not restart_file_path or restart_file_path == restart_file: + restart_file_path = f"{config['ini_restart_dir']}/{restart_file}" + # If set in config (oasis): + if "ini_restart_dir" in config and "ini_restart_date" in config: + # check if restart file with ini_restart_date in filename is in the restart + # folder of the parent experiment to be branched off from: + glob_search_file = ( + f"{restart_file_path}_????????-" + f"{config['ini_restart_date'].year}" + f"{config['ini_restart_date'].month:02}" + f"{config['ini_restart_date'].day:02}" + ) + else: + glob_search_file = restart_file_path + + glob_restart_file = glob.glob(glob_search_file) + glob_restart_file.sort() + if restart_file and is_runtime: + # If there are more than one file found let the user decide which one to take + if len(glob_restart_file) == 1: + restart_file = os.path.basename(glob_restart_file[0]) + elif len(glob_restart_file) == 0: + restart_file = restart_file_path + if not os.path.isfile(restart_file): + user_error( + "Restart file missing", + f"No OASIS restart file for ``{restart_file_label}`` found " + f"matching the pattern ``{glob_search_file}`` nor " + f"``{restart_file}``" + ) + else: + if not gconfig["isinteractive"]: + # If more than one restart file found that matches ini_restart_date, + # ask the user to select from the result list: + message = ( + "More than one OASIS restart file was found for " + "your branchoff experiment that matches the " + "ini_restart_date you selected. Please select " + "one of the following OASIS restart files:" + ) + answers = questionary.form( + restarts = questionary.select(message, choices=glob_restart_file) + ).ask() + restart_file = answers["restarts"] + + config["restart_in_sources"][restart_file_label] = restart_file + + if restart_file_label not in config["restart_in_sources"]: + config["restart_in_sources"][restart_file_label] = restart_file - config["restart_in_files"][restart_file] = restart_file - config["restart_in_in_work"][restart_file] = restart_file - if not restart_file in config["restart_in_sources"]: - config["restart_in_sources"][restart_file] = restart_file def prepare_restarts(self, restart_file, all_fields, models, config): enddate = "_" + config["general"]["end_date"].format( form=9, givenph=False, givenpm=False, givenps=False ) # enddate = "_" + str(config["general"]["end_date"].year) + str(config["general"]["end_date"].month) + str(config["general"]["end_date"].day) - import glob - import os - import subprocess print("Preparing oasis restart files from initial run...", flush=True) # Assign an exe per model diff --git a/src/esm_runscripts/prepare.py b/src/esm_runscripts/prepare.py index 8d9287e0e..40315067e 100644 --- a/src/esm_runscripts/prepare.py +++ b/src/esm_runscripts/prepare.py @@ -393,9 +393,11 @@ def find_last_prepared_run(config): base_dir = esm_parser.find_variable( ["general", "base_dir"], config["general"]["base_dir"], config, [], True ) + expid = config["general"]["expid"] + it_coupled_model_name = config["general"]["iterative_coupled_model"] if os.path.isdir( - base_dir + "/" + config["general"]["expid"] + "/run_" + datestamp + f"{base_dir}/{expid}/run_{it_coupled_model_name}{datestamp}" ): config["general"]["current_date"] = current_date return config @@ -505,10 +507,11 @@ def _add_all_folders(config): # Apply changes from ``--update-files`` flag config = helpers.update_reusable_filetypes(config) + experiment_dir = config["general"]["experiment_dir"] + it_coupled_model_name = config["general"]["iterative_coupled_model"] + datestamp = config["general"]["run_datestamp"] config["general"]["thisrun_dir"] = ( - config["general"]["experiment_dir"] - + "/run_" - + config["general"]["run_datestamp"] + f"{experiment_dir}/run_{it_coupled_model_name}{datestamp}" ) for filetype in all_filetypes: @@ -615,7 +618,7 @@ def set_prev_date(config): ) else: - config[model]["prev_date"] = config["general"]["current_date"] + config[model]["prev_date"] = config["general"]["prev_date"] return config @@ -629,6 +632,7 @@ def set_parent_info(config): # Make sure "ini_parent_dir" and "ini_restart_dir" both work: for model in config["general"]["valid_model_names"]: + # If only ini_restart_* variables are used in runcscript, set ini_parent_* to the same values if not "ini_parent_dir" in config[model]: if "ini_restart_dir" in config[model]: config[model]["ini_parent_dir"] = config[model]["ini_restart_dir"] @@ -744,18 +748,29 @@ def check_vcs_info_against_last_run(config): config : dict The experiment configuration """ - if config['general']['run_number'] == 1: + # FIXME(PG): Sometimes general.run_number is None (shows up as null in the + # config), so this check is absolutely the worst way of doing it, but + # whatever... + if config['general']['run_number'] == 1 or config["general"]["run_number"] is None: return config # No check needed on the very first run exp_vcs_info_file = f"{config['general']['thisrun_log_dir']}/{config['general']['expid']}_vcs_info.yaml" # FIXME(PG): This file might not exist if people erase every run folder... last_exp_vcs_info_file = f"{config['prev_run']['general']['thisrun_log_dir']}/{config['general']['expid']}_vcs_info.yaml" - with open(exp_vcs_info_file, "r") as f: - current_vcs_info = yaml.safe_load(f) - with open(last_exp_vcs_info_file, "r") as f: - last_vcs_info = yaml.safe_load(f) + try: + with open(exp_vcs_info_file, "r") as f: + current_vcs_info = yaml.safe_load(f) + except IOError: + logger.warning(f"Unable to open {exp_vcs_info_file}, skipping check...") + return config + try: + with open(last_exp_vcs_info_file, "r") as f: + last_vcs_info = yaml.safe_load(f) + except IOError: + logger.warning(f"Unable to open {last_exp_vcs_info_file}, skipping_check...") + return config if not config["general"].get("allow_vcs_differences", False) and current_vcs_info != last_vcs_info: - esm_parser.user_error(""" + esm_parser.user_error("VCS Differences", """ You have differences in either the model code or in the esm-tools between two runs! If you are **sure** that this is OK, you can set 'general.allow_vcs_differences' to True to avoid this check. @@ -798,13 +813,15 @@ def initialize_coupler(config): if config["general"]["standalone"] == False: from . import coupler + base_dir = config["general"]["base_dir"] + expid = config["general"]["expid"] + it_coupled_model_name = config["general"]["iterative_coupled_model"] + datestamp = config["general"]["run_datestamp"] for model in list(config): if model in coupler.known_couplers: config["general"]["coupler_config_dir"] = ( - f"{config['general']['base_dir']}" - f"/{config['general']['expid']}" - f"/run_{config['general']['run_datestamp']}" - f"/config/{model}/" + f"{base_dir}/{expid}/" + f"run_{it_coupled_model_name}{datestamp}/config/{model}/" ) config["general"]["coupler"] = coupler.coupler_class(config, model) break diff --git a/src/esm_runscripts/prepcompute.py b/src/esm_runscripts/prepcompute.py index d0a6def08..0aca0d487 100644 --- a/src/esm_runscripts/prepcompute.py +++ b/src/esm_runscripts/prepcompute.py @@ -316,9 +316,12 @@ class EsmConfigDumper(yaml.dumper.Dumper): if "oasis3mct" in config: EsmConfigDumper.add_representer(esm_runscripts.oasis.oasis, oasis_representer) + thisrun_config_dir = config["general"]["thisrun_config_dir"] + expid = config["general"]["expid"] + it_coupled_model_name = config["general"]["iterative_coupled_model"] config_file_path = ( - f"{config['general']['thisrun_config_dir']}" - f"/{config['general']['expid']}_finished_config.yaml" + f"{thisrun_config_dir}/" + f"{expid}_{it_coupled_model_name}finished_config.yaml" ) with open(config_file_path, "w") as config_file: # Avoid saving ``prev_run`` information in the config file diff --git a/src/esm_runscripts/prepexp.py b/src/esm_runscripts/prepexp.py index 166806710..8ac0359cd 100644 --- a/src/esm_runscripts/prepexp.py +++ b/src/esm_runscripts/prepexp.py @@ -245,11 +245,16 @@ def initialize_experiment_logfile(config): ``general.exp_log_file``; this file is removed; and re-initialized. """ + experiment_dir = config["general"]["experiment_dir"] + expid = config["general"]["expid"] + it_coupled_model = config["general"]["iterative_coupled_model"] + datestamp = config["general"]["run_datestamp"] + if config["general"]["run_number"] == 1: if os.path.isfile(config["general"]["experiment_log_file"]): os.remove(config["general"]["experiment_log_file"]) - log_msg = f"# Beginning of Experiment {config['general']['expid']}" + log_msg = f"# Beginning of Experiment {expid}" write_to_log(config, [log_msg], message_sep="") write_to_log( @@ -266,9 +271,8 @@ def initialize_experiment_logfile(config): # Write trace-log file now that we know where to do that if "trace_sink" in dir(logger): logfile_path = ( - f"{config['general']['experiment_dir']}/log" - f"/{config['general']['expid']}_esm_runscripts_" - f"{config['general']['run_datestamp']}.log" + f"{experiment_dir}/log/" + f"{expid}_{it_coupled_model}esm_runscripts_{datestamp}.log" ) logger.trace_sink.def_path(logfile_path) diff --git a/src/esm_runscripts/prev_run.py b/src/esm_runscripts/prev_run.py index 8444f0fd9..609e2235b 100644 --- a/src/esm_runscripts/prev_run.py +++ b/src/esm_runscripts/prev_run.py @@ -313,6 +313,8 @@ def find_config(self, component): config_dir = ( self._config.get("general", {}).get("experiment_dir", "") + "/config/" ) + expid = self._config["general"]["expid"] + it_coupled_model_name = self._config["general"]["iterative_coupled_model"] # Find ``lresume`` and ``run_number`` for this component lresume = self._config.get(component, {}).get("lresume", False) run_number = self._config.get("general", {}).get("run_number", 1) @@ -406,7 +408,7 @@ def find_config(self, component): # one without timestamp (the case for run 1 in spinup). if len(potential_prev_configs) == 0 and run_number > 1: prev_run_config_file = ( - self._config["general"]["expid"] + "_finished_config.yaml" + f"{expid}_{it_coupled_model_name}finished_config.yaml" ) # Continuing run, not branched off, and one potential file. That's our file! elif len(potential_prev_configs) == 1 and run_number > 1: diff --git a/src/esm_runscripts/tidy.py b/src/esm_runscripts/tidy.py index aeeb5109a..ee2d8857b 100644 --- a/src/esm_runscripts/tidy.py +++ b/src/esm_runscripts/tidy.py @@ -362,12 +362,12 @@ def copy_all_results_to_exp(config): + destination ) else: - linkdest = resolve_symlinks(source) + linkdest = resolve_symlinks(config, source) # newlinkdest = ( # destination.rsplit("/", 1)[0] + "/" + linkdest.rsplit("/", 1)[-1] # ) if os.path.islink(destination): - destdest = resolve_symlinks(source) + destdest = resolve_symlinks(config, source) if linkdest == destdest: # both links are identical, skip continue diff --git a/src/esm_runscripts/workflow.py b/src/esm_runscripts/workflow.py index c81aad75b..b677ea507 100644 --- a/src/esm_runscripts/workflow.py +++ b/src/esm_runscripts/workflow.py @@ -132,7 +132,7 @@ def order_clusters(config): not gw_config["subjob_clusters"][subjob_cluster]["run_after"] in gw_config["subjob_clusters"] ): - print(f"Unknown cluster {subjob_cluster['run_after']}.") + print(f"Unknown cluster {gw_config['subjob_clusters'][subjob_cluster]['run_after']}.") sys.exit(-1) calling_cluster = gw_config["subjob_clusters"][subjob_cluster]["run_after"] @@ -156,7 +156,7 @@ def order_clusters(config): not gw_config["subjob_clusters"][subjob_cluster]["run_before"] in gw_config["subjob_clusters"] ): - print(f"Unknown cluster {subjob_cluster['run_before']}.") + print(f"Unknown cluster {gw_config['subjob_clusters'][subjob_cluster]['run_before']}.") sys.exit(-1) called_cluster = gw_config["subjob_clusters"][subjob_cluster]["run_before"] @@ -330,7 +330,13 @@ def init_total_workflow(config): config["general"]["workflow"]["subjobs"] = prepcompute config["general"]["workflow"]["subjobs"].update(compute) config["general"]["workflow"]["subjobs"].update(tidy) - + else: + if not "prepcompute" in config["general"]["workflow"]["subjobs"]: + config["general"]["workflow"]["subjobs"].update(prepcompute) + if not "compute" in config["general"]["workflow"]["subjobs"]: + config["general"]["workflow"]["subjobs"].update(compute) + if not "tidy" in config["general"]["workflow"]["subjobs"]: + config["general"]["workflow"]["subjobs"].update(tidy) if not "last_task_in_queue" in config["general"]["workflow"]: config["general"]["workflow"]["last_task_in_queue"] = "tidy" if not "first_task_in_queue" in config["general"]["workflow"]: diff --git a/src/esm_tests/__init__.py b/src/esm_tests/__init__.py index f10f8367d..bff3f3ccf 100644 --- a/src/esm_tests/__init__.py +++ b/src/esm_tests/__init__.py @@ -2,7 +2,7 @@ __author__ = """Miguel Andres-Martinez""" __email__ = "miguel.andres-martinez@awi.de" -__version__ = "6.13.7" +__version__ = "6.23.6" from .initialization import * from .read_shipped_data import * diff --git a/src/esm_tests/cli.py b/src/esm_tests/cli.py index f4d2b5ee7..6612ad1fb 100644 --- a/src/esm_tests/cli.py +++ b/src/esm_tests/cli.py @@ -45,6 +45,7 @@ def main(): # Parsing save_flag, print_state, delete_tests = info.argparse() + print(info["resources_branch"]) # Update ``resources`` update_resources_submodule(info) diff --git a/src/esm_tests/info.py b/src/esm_tests/info.py index a0748bc78..483dce431 100644 --- a/src/esm_tests/info.py +++ b/src/esm_tests/info.py @@ -51,6 +51,8 @@ class Info(dict): - ``user``: ``esm_tests`` configurations specific to the user, as read from ``/esm_tools/src/esm_tests/user_config.yaml``. + - ``branch``: branch in the ``esm_tests_info`` to be used as ``last-state`` + """ def __init__(self): @@ -150,6 +152,12 @@ def argparse(self): + "catch that as a failing test", action="store_true", ) + parser.add_argument( + "-r", + "--branch", + help="use the given esm_tests_info branch", + default="release", + ) args = vars(parser.parse_args()) @@ -165,6 +173,7 @@ def argparse(self): self["repo_update"] = args["update"] self["in_github"] = args["github"] self["system_exit_on_errors"] = args["system_exit_on_errors"] + self["resources_branch"] = args["branch"] if self["in_github"]: self["group_output"] = {"startg": "::group::{0}", "endg": "::endgroup::"} diff --git a/src/esm_tests/output.py b/src/esm_tests/output.py index c554a1cdd..4e3df4b9a 100644 --- a/src/esm_tests/output.py +++ b/src/esm_tests/output.py @@ -406,7 +406,7 @@ def format_results(info): continue results[model] = {} for script, v in scripts.items(): - version = v["version"] + version = str(v["version"]) results[model][version] = results[model].get(version, {}) results[model][version][script] = results[model][version].get(script, {}) state = v["state"] diff --git a/src/esm_tests/repos.py b/src/esm_tests/repos.py index 6a868812e..0b8cc992b 100644 --- a/src/esm_tests/repos.py +++ b/src/esm_tests/repos.py @@ -20,9 +20,9 @@ def update_resources_submodule(info, verbose=True): """ check_resources(info, verbose) + resources_branch = info["resources_branch"] if info["repo_update"]: - resources_branch = "release" text = f"Updating the resources repo with '{resources_branch}' branch" logger.info(text) diff --git a/src/esm_tests/resources b/src/esm_tests/resources index 9b2fee860..205019aa9 160000 --- a/src/esm_tests/resources +++ b/src/esm_tests/resources @@ -1 +1 @@ -Subproject commit 9b2fee860722f41496eccc9add1cd29cb0fe0300 +Subproject commit 205019aa987c821bd77ce658971c52a2e1d9f848 diff --git a/src/esm_tests/test_utilities.py b/src/esm_tests/test_utilities.py index a1257a1fd..4be563ad2 100644 --- a/src/esm_tests/test_utilities.py +++ b/src/esm_tests/test_utilities.py @@ -208,7 +208,7 @@ def print_state_online(info={}): """ Returns the state of the tested models obtained directly from the repository online. This method is aimed to be used externally from ``esm_tests`` (i.e. throw the - ``esm_tools --test-state`` command). + ``esm_tools test-state`` command). Parameters ---------- @@ -217,7 +217,11 @@ def print_state_online(info={}): If not provided, defines the ``info`` keys needed. """ - url = "https://raw.githubusercontent.com/esm-tools/esm_tests_info/release/state.yaml" + if "resources_branch" in info: + resources_branch = info["resources_branch"] + else: + resources_branch = "release" + url = f"https://raw.githubusercontent.com/esm-tools/esm_tests_info/{resources_branch}/state.yaml" try: current_state = urllib.request.urlopen(url) except urllib.error.HTTPError: @@ -261,6 +265,7 @@ def sort_dict(dict_to_sort): Dictionary sorted. """ if isinstance(dict_to_sort, dict): + dict_to_sort = {str(key): value for key, value in dict_to_sort.items()} dict_to_sort = {key: dict_to_sort[key] for key in sorted(dict_to_sort.keys())} for key, value in dict_to_sort.items(): dict_to_sort[key] = sort_dict(value) @@ -338,17 +343,28 @@ def get_rel_paths_compare_files(info, cfile, v, this_test_dir): info, "finished_config", v, this_test_dir ) if len(s_config_yaml) > 0: - namelists = extract_namelists(f"{user_info['test_dir']}/{s_config_yaml[0]}") + namelists, models = extract_namelists(f"{user_info['test_dir']}/{s_config_yaml[0]}") ldir = os.listdir(f"{user_info['test_dir']}/{this_test_dir}") ldir.sort() for f in ldir: # Take the first run directory if "run_" in f: cf_path = f"{this_test_dir}/{f}/work/" - for n in namelists: - if not os.path.isfile(f"{user_info['test_dir']}/{cf_path}/{n}"): + for n, model in zip(namelists, models): + namelist_path = f"{user_info['test_dir']}/{cf_path}/{n}" + if not os.path.isfile(namelist_path): logger.debug(f"'{cf_path}/{n}' does not exist!") - subpaths.append(f"{cf_path}/{n}") + # Is broken link + if os.path.islink(namelist_path) and not os.path.exists(os.readlink(namelist_path)): + path_in_general_config = ( + f"{this_test_dir}/config/{model}/{n}_{f.split('_')[-1]}" + ) + if os.path.exists(f"{user_info['test_dir']}/{path_in_general_config}"): + subpaths.append(f"{path_in_general_config}") + else: + logger.debug(f"'{cf_path}/{n}' does not exist!") + else: + subpaths.append(f"{cf_path}/{n}") break else: subpaths = [f"{this_test_dir}/{cfile}"] @@ -385,12 +401,15 @@ def extract_namelists(s_config_yaml): ------- namelists : list List of namelist names associated to this experiment. + components : list + List of components associated to the namelists (same order as ``namelists``). """ # Read config file with open(s_config_yaml, "r") as c: config = yaml.load(c, Loader=yaml.FullLoader) namelists = [] + components = [] # Loop through the components to find the namelists for component in config.keys(): namelists_component = config[component].get("namelists", []) @@ -400,9 +419,11 @@ def extract_namelists(s_config_yaml): [nml in x for x in config_sources.values()] ): namelists.append(nml) + components.append(component) # Adds OASIS ``namcouple`` if "oasis3mct" in config: namelists.append("namcouple") + components.append("oasis") - return namelists + return namelists, components diff --git a/src/esm_tests/tests.py b/src/esm_tests/tests.py index 4f635bdd2..fabcb2243 100644 --- a/src/esm_tests/tests.py +++ b/src/esm_tests/tests.py @@ -282,7 +282,7 @@ def run_test(info): scripts_info = info["scripts"] user_info = info["user"] actually_run = info["actually_run"] - run_errors = ["ERROR:", "slurmstepd: error: *** STEP"] + run_errors = ["ERROR:", "slurmstepd: error: *** STEP", "PBS: job killed: walltime"] # Set the counter to 0 c = 0 diff --git a/src/esm_tools/__init__.py b/src/esm_tools/__init__.py index c40f67962..8a614d19c 100644 --- a/src/esm_tools/__init__.py +++ b/src/esm_tools/__init__.py @@ -23,7 +23,7 @@ __author__ = """Dirk Barbi, Paul Gierz""" __email__ = "dirk.barbi@awi.de" -__version__ = "6.13.7" +__version__ = "6.23.6" import functools import inspect diff --git a/src/esm_tools/cli.py b/src/esm_tools/cli.py index 488ec29e0..5c52351d8 100644 --- a/src/esm_tools/cli.py +++ b/src/esm_tools/cli.py @@ -1,24 +1,60 @@ """ Functionality for displaying the version number """ +import shutil import sys + import click -import esm_tools + import esm_tests +import esm_tools # click.version_option read the PKG_INFO which contains the wrong version # number. Get it directly from __init__.py version = esm_tools.__version__ + +@click.group() @click.version_option(version=version) -@click.option("--test-state", is_flag=True, help="Prints the state of the last tested experiments.") -@click.command() -def main(test_state): - """Console script for esm_tools""" +def main(): + pass + + +@main.command() +def test_state(): + """Prints the state of the last tested experiments.""" + + esm_tests.test_utilities.print_state_online() + + return 0 - if test_state: - esm_tests.test_utilities.print_state_online() +@main.command() +@click.option( + "-t", + "--type", + type=click.Choice(["component", "setup", "machine"], case_sensitive=False), + help="Creates either a new component (default) or a new setup", + default="component", + show_default=True, +) +@click.argument("name", nargs=1) +def create_new_config(name, type): + """Opens your $EDITOR and creates a new file for NAME""" + click.echo(f"Creating a new {type} configuration for {name}") + template_file = esm_tools.get_config_filepath( + config=f"templates/{type}_template.yaml" + ) + shutil.copy(template_file, f"{name}.yaml") + new_config_file = f"{name}.yaml" + # TODO(PG): Currently this lands in the current working directory. + # Would be nice if this landed already in an git-controlled + # editable version and prepared a commit for you: + click.edit(filename=new_config_file) + click.echo( + "Thank you! The new configuration has been saved. Please commit it (and get in touch with the" + ) + click.echo("esm-tools team if you need help)!") return 0 diff --git a/src/esm_tools/motd/motd.yaml b/src/esm_tools/motd/motd.yaml index a0ccee953..01a6c248c 100644 --- a/src/esm_tools/motd/motd.yaml +++ b/src/esm_tools/motd/motd.yaml @@ -78,3 +78,86 @@ release5.1_esm_tools: " action: DELAY(1) +release6.0: + package: "esm_tools" + versions: "<6.0.0" + message: "\x1b[1m\x1b[96mVERSION 6.0 NOW AVAILABLE!\x1b[0m\n + + We are very happy to announce the release \x1b[96m6\x1b[0m of \x1b[1m\x1b[96mESM-Tools\x1b[0m!\n + + If you are already a user of ESM-Tools and you would like to upgrade your system,\n + please follow these steps:\n + \x1b[96m1.\x1b[0m Make sure you have either \x1b[35mpython3\x1b[0m or \x1b[35manaconda3\x1b[0m modules loaded\n + \x1b[96m2.\x1b[0m Navigate to your \x1b[35mesm_tools\x1b[0m folder, and make sure the branch\n + \ \ \ \ you are in is clean (\x1b[35mgit status\x1b[0m should report no modified files)\n + \x1b[96m3.\x1b[0m Run \x1b[35mesm_versions upgrade\x1b[0m (you might have to run this command twice)\n + \x1b[96m4.\x1b[0m You’ll be asked some questions about the installation, answer\n + \ \ \ \ them using the \x1b[35marrows\x1b[0m on your keyboard\n + \x1b[96m5.\x1b[0m Enjoy the new version!\n + + Note that the last step of the installation might take up to 10 minutes in\n + \ \ \ \ some machines.\n + + \x1b[96mNew components and coupled setups\x1b[0m\n + - AWICM3\n + - AWICM-1-REcoM\n + - AWIESM-2 with\n + - WISO\n + - REcoM\n + - VILMA-PISM\n + + \x1b[96mNew features\x1b[0m\n + - Workflow manager (postprocessing and offline coupling)\n + - Monorepository\n + - Automatic testing\n + - and many others...\n\n" + action: DELAY(1) + announcement: true + +release6.7: + package: "esm_tools" + versions: "<6.7.0" + message: "\x1b[1m\x1b[96mSUPPORT FOR LEVANTE\x1b[0m\n + + We are very happy to announce that \x1b[96mLevante HPC\x1b[0m from \x1b[96mDKRZ\x1b[0m is now supported in\n + release \x1b[96m6.7\x1b[0m of \x1b[1m\x1b[96mESM-Tools\x1b[0m!\n + + Many models needed changes in the CMake files to work optimally with the\n + AMD-processor architecture in this new system. Here you can find a list of\n + models and versions supported:\n + \t\x1b[35mhttps://github.com/esm-tools/esm_tools/discussions/663\x1b[0m\n + + If the model you are aiming to use is not in that list, please add a comment\n + to the discussion in the link, stating the model's name, version, branches...\n + and \x1b[35mcontact the model developers\x1b[0m for them to do the necessary\n + changes in the CMake files.\n" + action: DELAY(1) + announcement: true + +oasis_branchoff6.21.23: + package: "esm_tools" + versions: "<6.21.23" + message: "\x1b[1m\x1b[96mOASIS BRANCH-OFF RESTARTS FIXED!\x1b[0m\n + + The bug on the copying of the wrong flux files from OASIS \x1b[96mwhen running\n + a branch-off simulation that started from the middle of a parent simulation\x1b[0m is now\n + \x1b[96mfixed\x1b[0m (no more manual fixing of the \x1b[35mrstas.nc\x1b[0m/\x1b[35mrstos.nc\x1b[0m/\x1b[35ma2o_flux\x1b[0m/\x1b[35mo2a_flux.nc\x1b[0m\n + links is needed).\n" + action: DELAY(1) + announcement: true + +#online_workshops: +# package: "esm_tools" +# versions: "<7.0.0" +# message: "\x1b[1m\x1b[96mONLINE WORKSHOPS\x1b[0m\n +# +# The ESM-Tools team has been recently organizing a number of in-person workshops.\n +# Did you miss some of those? No problem! the workshops were recorded and you can\n +# access their content here: \x1b[35mhttps://github.com/esm-tools/workshops\x1b[0m\n +# (scroll down to the Workshops index to find the workshops available and their links).\n +# The workshops currently avialable are:\n +# - \x1b[96mESM-Tools\x1b[0m\n +# - \x1b[96mGit\x1b[0m\n +# - \x1b[96mGitHub Projects for Project Management\x1b[0m\n" +# action: DELAY(1) +# note: delete after a week ot two diff --git a/src/esm_utilities/__init__.py b/src/esm_utilities/__init__.py index 6500d2219..86e5de152 100644 --- a/src/esm_utilities/__init__.py +++ b/src/esm_utilities/__init__.py @@ -2,6 +2,6 @@ __author__ = """Paul Gierz""" __email__ = "pgierz@awi.de" -__version__ = "6.13.7" +__version__ = "6.23.6" from .utils import * diff --git a/utils/environment.yaml b/utils/environment.yaml new file mode 100644 index 000000000..48fe558a1 --- /dev/null +++ b/utils/environment.yaml @@ -0,0 +1,41 @@ +# ENVIRONMENT FOR RUNNING ESM-TOOLS WITH CONDA +# ============================================ +# WARNING: Running ESM-Tools with conda is not recommended at this state, +# and we won't be offering support for that. This environment and instructions +# are put together only for testing purposes, for the core team. +# +# How to install esm_tools using a conda environment +# -------------------------------------------------- +# 1. ``conda env create -f utils/environment.yaml -n esm_tools`` +# 2. Clone ESM-Tools from the github repository and use the ``./install.sh`` script +# (that script uses pip, because ESM-Tools is not in a conda repository, however +# most of the important dependencies for ESM-Tools are already defined in this +# file, meaning that pip almost only installs ESM-Tools). + +name: esm_tools +channels: + - conda-forge + - defaults +dependencies: + - python=3.9 + - Click>=7.0 + - PyGithub + - colorama + - coloredlogs + - emoji + - f90nml + - gitpython + - loguru + - numpy + - packaging + - pandas>=1.0 + - psutil + - pyyaml + - pyyaml>=5.1 + - questionary + - semver + - sqlalchemy + - tabulate + - tqdm + - typing_extensions>=3.10.0.0 +prefix: /Users/mandresm/opt/anaconda3/envs/esm_tools diff --git a/utils/fix_monorepo.py b/utils/fix_monorepo.py new file mode 100644 index 000000000..5372257d6 --- /dev/null +++ b/utils/fix_monorepo.py @@ -0,0 +1,278 @@ +""" +Script that cleans the multirepo packages of ESM-Tools (5.1.9 and some older packages:: + + python3 utils/fix_monorepo.py + +This script is based on the script used to upgrade from 5.1.9 yo 6.0.0: +https://github.com/esm-tools/esm_version_checker/blob/release/esm_version_checker/monorepo.py +""" + +import colorama +import glob +import os +import pkg_resources +import questionary +import shutil +import site +import subprocess +import sys + +import regex as re + + +def install_monorepo(esm_tools, version): + """ + Does all the magic for successfully installing the monorepo if the user has the + multirepo already installed. + """ + _, columns = os.popen("stty size", "r").read().split() + columns = int(columns) + + # Packages from multirepo + packages = [ + "esm_calendar", + "esm_database", + "esm_environment", + "esm_master", + "esm_motd", + "esm_parser", + "esm_plugin", + "esm_profile", + "esm_rcfile", + "esm_runscripts", + "esm_tools", + "esm_version", + ] + + tools_dir, bin_dir, lib_dirs = find_dir_to_remove(packages) + os.chdir(tools_dir) + + steps = { + "uninstall": "Uninstall packages (``pip uninstall esm_``)", + "esm_tools": f"Cleanup ``{tools_dir}/esm_tools`` folder", + "esm_tools.egg-info": f"Cleanup ``{tools_dir}/esm_tools.egg-info`` folder", + "rm_libs": ["Remove esm_ from python libraries in:"] + lib_dirs, + "rm_bins": f"Remove esm_ in the bin folder (``rm {bin_dir}/esm_``)", + "rm_easy": ["Remove ESM lines in the ``easy-install.pth`` files:"] + lib_dirs, + "install": "Install ``ESM-Tools`` again", + } + + # Printing and questionary + text = ( + "**Welcome to the monorepository version of ESM-Tools!**\n" + "\n" + f"You are trying to upgrade to the major version ``6`` which does " + "not use multiple repositories for different ``esm_`` anymore, " + "but instead all packages are contained in the ``esm_tools`` package (i.e. " + "esm_runscripts, esm_parser, esm_master, etc). You can find these packages " + "now in ``esm_tools/src/``.\n" + "\n" + "Also note that you won't be able to use ``esm_versions`` command from now " + "on, as this tool is not needed anymore for the monorepository, and it has " + "been consequently removed." + ) + + cprint() + cprint("**" + columns * "=" + "**") + cprint(text) + cprint("**" + columns * "=" + "**") + + cprint( + "The monorepository version needs a special installation. " + "ESM-Tools will perform the next steps:" + ) + + c = 1 + for key, value in steps.items(): + if isinstance(value, list): + cprint(f"``{c}`` - {value[0]}") + for substeps in value[1:]: + cprint(f"\t- {substeps}") + else: + cprint(f"``{c}`` - {value}") + c += 1 + + user_confirmed = False + while not user_confirmed: + response = questionary.select( + "Would you like to continue?", choices=(["[Quit] No, thank you...", "Yes!"]) + ).ask() # returns value of selection + if "[Quit]" in response and (version=="release" or version=="develop"): + # If the user refuses to install the monorepo bring back esm_tools to the + # last multirepo compatible version. + v = "v5.1.25" + if not version == "monorepo": + p = subprocess.check_call( + f"git reset {v}", + stdout=subprocess.PIPE, + stderr=subprocess.STDOUT, + shell=True, + ) + sys.exit(1) + elif "[Quit]" in response: + sys.exit(1) + user_confirmed = questionary.confirm("Are you sure?").ask() + + p = subprocess.check_call( + f"git checkout release", + stdout=subprocess.PIPE, + stderr=subprocess.STDOUT, + shell=True, + ) + p = subprocess.check_call( + f"git pull", + stdout=subprocess.PIPE, + stderr=subprocess.STDOUT, + shell=True, + ) + + # Dirty fix for installing the monorepo branch for testing previous version 6 is + # around. Not used when the monorepo is in release + if version == "monorepo": + subprocess.check_call(["git", "checkout", "monorepo"]) + subprocess.check_call(["git", "pull"]) + + cprint() + + # Uninstall packages + c = 1 + cprint(f"**{c}** - {steps['uninstall']}") + for package in packages: + uninstall(package) + + # Cleanup esm_tools folder + clean_folders = ["esm_tools", "esm_tools.egg-info"] + for cf in clean_folders: + if cf=="esm_tools": + cf = "esm_tools/__init__.py" + f = f"{tools_dir}/{cf}" + if os.path.isdir(f): + c += 1 + cprint(f"**{c}** - {steps[cf]}") + shutil.rmtree(f) + + # Remove libs + c += 1 + cprint(f"**{c}** - {steps['rm_libs'][0]}") + for lib_dir in lib_dirs: + for package in packages: + package_files = glob.glob(f"{lib_dir}/{package}*") + for f in package_files: + cprint(f"\tRemoving ``{f}``") + if os.path.isdir(f): + shutil.rmtree(f) + else: + os.remove(f) + + # Remove bins + c += 1 + cprint(f"**{c}** - {steps['rm_bins']}") + for package in packages: + bin_file = glob.glob(f"{bin_dir}/{package}*") + if bin_file: + bin_file = bin_file[0] + if os.path.isfile(bin_file): + cprint(f"\tRemoving ``{bin_file}``") + subprocess.run(["rm", "-f", bin_file]) + + # Clean ``easy-install.pth`` + c += 1 + cprint(f"**{c}** - {steps['rm_easy'][0]}") + clean_easy_install(lib_dirs, packages) + + # Install the tools + c += 1 + cprint(f"**{c}** - {steps['install']}") + p = subprocess.Popen( + f"cd {tools_dir} && pip install --user -e .", + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + shell=True, + ) + out, err = p.communicate() + + if not err: + cprint(f"**Version 6 installed sucessfully!**") + sys.exit(0) + elif "ERROR" in err.decode("utf-8"): + print(out.decode("utf-8")) + print(err.decode("utf-8")) + cprint("--Installation failed!--") + sys.exit(1) + elif "WARNING" in err.decode("utf-8"): + print(err.decode("utf-8")) + cprint(f"**Version 6 installed sucessfully with warnings!**") + sys.exit(0) + else: + print(out.decode("utf-8")) + print(err.decode("utf-8")) + cprint("--Installation failed!--") + sys.exit(1) + + +def uninstall(package): + """ + Taken from https://stackoverflow.com/questions/35080207/how-to-pass-the-same-answer-to-subprocess-popen-automatically + """ + cprint(f"\tUninstalling ``{package}``") + process = subprocess.Popen( + [sys.executable, "-m", "pip", "uninstall", package], + stdin=subprocess.PIPE, + stdout=subprocess.PIPE, + ) + yes_proc = subprocess.Popen(["yes", "y"], stdout=process.stdin) + process_output = process.communicate()[0] + yes_proc.wait() + + +def find_dir_to_remove(packages): + path_to_dists = "/".join(site.getusersitepackages().split("/")[:-2]) + python_dist_libs = [x for x in os.listdir(f"{path_to_dists}/") if "python" in x] + + lib_dirs = [f"{path_to_dists}/{x}/site-packages" for x in python_dist_libs] + bin_dir = "/".join(path_to_dists.split("/")[:-1] + ["bin"]) + tools_dir = pkg_resources.get_distribution("esm_tools").location + if tools_dir.endswith("esm_tools/src"): + tools_dir = tools_dir.replace("esm_tools/src", "esm_tools") + + return tools_dir, bin_dir, lib_dirs + + +def clean_easy_install(lib_dirs, packages): + for ld in lib_dirs: + easy_install_file = f"{ld}/easy-install.pth" + if os.path.isfile(easy_install_file): + cprint(f"\tCleaning ``{easy_install_file}``") + with open(easy_install_file, "r+") as f: + lines = f.readlines() + f.seek(0) + for line in lines: + contains_package = False + for package in packages: + if package in line: + contains_package = True + if contains_package: + continue + else: + f.write(line) + f.truncate() + + +def cprint(text=""): + # Bold strings + bs = "\033[1m" + be = "\033[0m" + reset_s = colorama.Style.RESET_ALL + title_color = colorama.Fore.CYAN + error_color = colorama.Fore.RED + remarks_color = colorama.Fore.MAGENTA + + text = re.sub("\*\*([^*]*)\*\*", f"{bs}{title_color}\\1{reset_s}{be}", text) + text = re.sub("``([^`]*)``", f"{remarks_color}\\1{reset_s}", text) + text = re.sub("--([^-]*)--", f"{error_color}\\1{reset_s}", text) + print(text) + +if __name__ == "__main__": + install_monorepo("", "") diff --git a/utils/requirements_dev.txt b/utils/requirements_dev.txt index 44cac3005..1e7ad57e9 100644 --- a/utils/requirements_dev.txt +++ b/utils/requirements_dev.txt @@ -1,6 +1,6 @@ pip==21.1 bump2version==0.5.11 -wheel==0.33.6 +wheel==0.38.1 watchdog==0.9.0 flake8==3.7.8 tox==3.14.0