├── datm ├── cime_config │ ├── buildlib │ ├── testdefs │ │ └── testmods_dirs │ │ │ └── datm │ │ │ ├── scam │ │ │ └── shell_commands │ │ │ └── 1PT │ │ │ └── shell_commands │ ├── config_archive.xml │ ├── user_nl_datm │ └── user_nl_datm_streams ├── CMakeLists.txt └── setservices.inc ├── dglc ├── cime_config │ ├── buildlib │ ├── config_archive.xml │ ├── user_nl_dglc │ ├── testdefs │ │ └── testlist_dglc.xml │ ├── user_nl_dglc_streams │ ├── stream_definition_dglc.xml │ ├── config_component.xml │ └── namelist_definition_dglc.xml └── CMakeLists.txt ├── dice ├── cime_config │ ├── buildlib │ ├── user_nl_dice │ ├── testdefs │ │ └── testlist_dice.xml │ ├── config_archive.xml │ ├── user_nl_dice_streams │ ├── config_component.xml │ ├── stream_definition_dice.xml │ └── namelist_definition_dice.xml └── CMakeLists.txt ├── dlnd ├── cime_config │ ├── buildlib │ ├── testdefs │ │ └── testlist_dlnd.xml │ ├── config_archive.xml │ ├── user_nl_dlnd │ ├── user_nl_dlnd_streams │ ├── stream_definition_dlnd.xml │ ├── namelist_definition_dlnd.xml │ └── config_component.xml └── CMakeLists.txt ├── docn ├── cime_config │ ├── buildlib │ ├── config_archive.xml │ ├── user_nl_docn │ ├── testdefs │ │ └── testlist_docn.xml │ └── user_nl_docn_streams ├── CMakeLists.txt ├── docn_datamode_copyall_mod.F90 ├── docn_import_data_mod.F90 └── docn_datamode_cplhist_mod.F90 ├── drof ├── cime_config │ ├── buildlib │ ├── testdefs │ │ └── testlist_drof.xml │ ├── config_archive.xml │ ├── user_nl_drof │ ├── user_nl_drof_streams │ ├── namelist_definition_drof.xml │ └── config_component.xml └── CMakeLists.txt ├── dwav ├── cime_config │ ├── buildlib │ ├── testdefs │ │ └── testlist_dwav.xml │ ├── config_archive.xml │ ├── user_nl_dwav │ ├── stream_definition_dwav.xml │ ├── user_nl_dwav_streams │ ├── config_component.xml │ └── namelist_definition_dwav.xml └── CMakeLists.txt ├── doc ├── source │ ├── _templates │ │ ├── layout.html │ │ └── footer.html │ ├── index.rst │ ├── _static │ │ └── pop_ver.js │ ├── dice.rst │ ├── dwav.rst │ ├── dlnd.rst │ ├── dglc.rst │ ├── drof.rst │ └── conf.py └── Makefile ├── Externals_CDEPS.cfg ├── .gitignore ├── .github ├── PULL_REQUEST_TEMPLATE.md ├── workflows │ ├── bumpversion.yml │ └── extbuild.yml └── actions │ ├── buildpnetcdf │ └── action.yml │ ├── buildnetcdff │ └── action.yml │ ├── buildcdeps │ └── action.yaml │ ├── buildesmf │ └── action.yml │ └── buildpio │ └── action.yml ├── README.md ├── .gitmodules ├── dshr └── CMakeLists.txt ├── share ├── shr_kind_mod.F90 ├── shr_assert.h ├── shr_precip_mod.F90 ├── CMakeLists.txt ├── shr_nl_mod.F90 ├── shr_abort_mod.F90 ├── shr_frz_mod.F90.in ├── shr_log_mod.F90 ├── shr_strconvert_mod.F90 └── shr_const_mod.F90 ├── streams └── CMakeLists.txt ├── cime_config ├── buildlib_comps └── streams.xsd ├── cmake ├── FindESMF.cmake ├── FindPIO.cmake └── LibCheck.cmake └── CMakeLists.txt /datm/cime_config/buildlib: -------------------------------------------------------------------------------- 1 | ../../cime_config/buildlib_comps -------------------------------------------------------------------------------- /dglc/cime_config/buildlib: -------------------------------------------------------------------------------- 1 | ../../cime_config/buildlib_comps -------------------------------------------------------------------------------- /dice/cime_config/buildlib: -------------------------------------------------------------------------------- 1 | ../../cime_config/buildlib_comps -------------------------------------------------------------------------------- /dlnd/cime_config/buildlib: -------------------------------------------------------------------------------- 1 | ../../cime_config/buildlib_comps -------------------------------------------------------------------------------- /docn/cime_config/buildlib: -------------------------------------------------------------------------------- 1 | ../../cime_config/buildlib_comps -------------------------------------------------------------------------------- /drof/cime_config/buildlib: -------------------------------------------------------------------------------- 1 | ../../cime_config/buildlib_comps -------------------------------------------------------------------------------- /dwav/cime_config/buildlib: -------------------------------------------------------------------------------- 1 | ../../cime_config/buildlib_comps -------------------------------------------------------------------------------- /doc/source/_templates/layout.html: -------------------------------------------------------------------------------- 1 | {% extends "!layout.html" %} 2 | 3 | {% set script_files = script_files + ["_static/pop_ver.js"] %} -------------------------------------------------------------------------------- /doc/source/_templates/footer.html: -------------------------------------------------------------------------------- 1 | {% extends "!footer.html" %} 2 | {% block extrafooter %} 3 | {{ super() }} 4 | 5 | {% endblock %} 6 | -------------------------------------------------------------------------------- /Externals_CDEPS.cfg: -------------------------------------------------------------------------------- 1 | [fox] 2 | tag = 4.1.2.1 3 | protocol = git 4 | repo_url = https://github.com/ESMCI/fox.git 5 | local_path = fox 6 | required = True 7 | 8 | [genf90] 9 | tag = 4816965 10 | protocol = git 11 | repo_url = https://github.com/PARALLELIO/genf90 12 | local_path = share/genf90 13 | required = True 14 | 15 | [externals_description] 16 | schema_version = 1.0.0 17 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Prerequisites 2 | *.d 3 | 4 | # Compiled Object files 5 | *.slo 6 | *.lo 7 | *.o 8 | *.obj 9 | 10 | # Precompiled Headers 11 | *.gch 12 | *.pch 13 | 14 | # Compiled Dynamic libraries 15 | *.so 16 | *.dylib 17 | *.dll 18 | 19 | # Fortran module files 20 | *.mod 21 | *.smod 22 | 23 | # Compiled Static libraries 24 | *.lai 25 | *.la 26 | *.a 27 | *.lib 28 | 29 | # Executables 30 | *.exe 31 | *.out 32 | *.app 33 | 34 | # ignore pycache 35 | __pycache__ 36 | -------------------------------------------------------------------------------- /dwav/cime_config/testdefs/testlist_dwav.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /drof/cime_config/testdefs/testlist_drof.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /dlnd/cime_config/testdefs/testlist_dlnd.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | ### Description of changes 2 | 3 | ### Specific notes 4 | 5 | Contributors other than yourself, if any: 6 | 7 | CDEPS Issues Fixed (include github issue #): 8 | 9 | Are there dependencies on other component PRs (if so list): 10 | 11 | Are changes expected to change answers (bfb, different to roundoff, more substantial): 12 | 13 | Any User Interface Changes (namelist or namelist defaults changes): 14 | 15 | Testing performed (e.g. aux_cdeps, CESM prealpha, etc): 16 | 17 | Hashes used for testing: 18 | 19 | -------------------------------------------------------------------------------- /datm/cime_config/testdefs/testmods_dirs/datm/scam/shell_commands: -------------------------------------------------------------------------------- 1 | # setup SCAM lon and lat for this iop 2 | # this should correspond to the forcing IOP coordinates 3 | ./xmlchange PTS_LON=206.0 4 | ./xmlchange PTS_LAT=70.5 5 | 6 | # Specify the starting/ending time for the IOP 7 | # The complete time slice of IOP file is specified below 8 | # but you may simulate any within the IOP start and end times. 9 | ./xmlchange RUN_STARTDATE=2004-10-05 10 | ./xmlchange START_TOD=7171 11 | ./xmlchange STOP_OPTION=nsteps 12 | ./xmlchange STOP_N=10 13 | 14 | -------------------------------------------------------------------------------- /.github/workflows/bumpversion.yml: -------------------------------------------------------------------------------- 1 | name: Bump version 2 | on: 3 | push: 4 | branches: 5 | - main 6 | jobs: 7 | build: 8 | runs-on: ubuntu-latest 9 | steps: 10 | - uses: actions/checkout@v2 11 | - name: Bump version and push tag 12 | id: tag_version 13 | uses: mathieudutour/github-tag-action@v5.5 14 | with: 15 | github_token: ${{ secrets.GITHUB_TOKEN }} 16 | create_annotated_tag: true 17 | default_bump: patch 18 | dry_run: false 19 | tag_prefix: cdeps 20 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # CDEPS 2 | Community Data Models for Earth Prediction Systems 3 | 4 | For documentation see 5 | 6 | https://escomp.github.io/CDEPS/versions/master/html/index.html 7 | 8 | ## A note on github tag action 9 | 10 | This repository is setup to automatically create tags on merge to 11 | main using .github/workflows/bumpversion.yml It uses 12 | https://github.com/mathieudutour/github-tag-action to look for 13 | keywords in commit messages and determine what the new version should 14 | be. The default if no keywords is found is to bump the patch version. 15 | -------------------------------------------------------------------------------- /datm/cime_config/config_archive.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | r 4 | rs1 5 | unset 6 | 7 | rpointer.atm$NINST_STRING.$DATENAME 8 | $CASE.datm$NINST_STRING.r.$DATENAME.nc,$CASE.datm$NINST_STRING.rs1.$DATENAME.bin 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /dglc/cime_config/config_archive.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | r 4 | rs1 5 | unset 6 | 7 | rpointer.glc$NINST_STRING.$DATENAME 8 | $CASE.dglc$NINST_STRING.r.$DATENAME.nc,$CASE.dglc$NINST_STRING.rs1.$DATENAME.bin 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /dlnd/cime_config/config_archive.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | r 4 | rs1 5 | unset 6 | 7 | rpointer.lnd$NINST_STRING.$DATENAME 8 | $CASE.dlnd$NINST_STRING.r.$DATENAME.nc,$CASE.dlnd$NINST_STRING.rs1.$DATENAME.bin 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /drof/cime_config/config_archive.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | r 4 | rs1 5 | unset 6 | 7 | rpointer.rof$NINST_STRING.$DATENAME 8 | $CASE.drof$NINST_STRING.r.$DATENAME.nc,$CASE.drof$NINST_STRING.rs1.$DATENAME.bin 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /dwav/cime_config/config_archive.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | r 4 | rs1 5 | unset 6 | 7 | rpointer.wav$NINST_STRING.$DATENAME 8 | $CASE.dwav$NINST_STRING.r.$DATENAME.nc,$CASE.dwav$NINST_STRING.rs1.$DATENAME.bin 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /docn/cime_config/config_archive.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | rs*\d* 4 | rs1 5 | unset 6 | 7 | rpointer.ocn$NINST_STRING.$DATENAME 8 | $CASE.docn$NINST_STRING.r.$DATENAME.nc,$CASE.docn$NINST_STRING.rs1.$DATENAME.bin 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | # This is a git-fleximod adapted .gitmodules file. Any field with a name starting in fx is a git-fleximod 2 | # specific field. See https://github.com/ESMCI/git-fleximod for details. 3 | 4 | [submodule "fox"] 5 | path = fox 6 | url = https://github.com/ESMCI/fox.git 7 | fxtag = 4.1.2.4 8 | fxrequired = AlwaysRequired 9 | fxDONOTUSEurl = https://github.com/ESMCI/fox.git 10 | 11 | [submodule "genf90"] 12 | path = share/genf90 13 | url = https://github.com/PARALLELIO/genf90 14 | fxtag = 4816965 15 | fxrequired = AlwaysRequired 16 | fxDONOTUSEurl = https://github.com/PARALLELIO/genf90 17 | -------------------------------------------------------------------------------- /datm/cime_config/testdefs/testmods_dirs/datm/1PT/shell_commands: -------------------------------------------------------------------------------- 1 | if [ "`./xmlquery ATM_GRID --value`" == "1x1_vancouverCAN" ]; then 2 | # Go one day in, so don't have to set the TOD as well 3 | ./xmlchange RUN_STARTDATE="1992-08-13" 4 | elif [ "`./xmlquery ATM_GRID --value`" == "1x1_mexicocityMEX" ]; then 5 | # Go one day in, so don't have to set the TOD as well 6 | ./xmlchange RUN_STARTDATE="1993-12-02" 7 | elif [ "`./xmlquery ATM_GRID --value`" == "1x1_urbanc_alpha" ]; then 8 | # Go one day in, so don't have to set the TOD as well 9 | ./xmlchange RUN_STARTDATE="0001-08-13" 10 | else 11 | ./xmlchange RUN_STARTDATE="2018-01-01" 12 | fi 13 | -------------------------------------------------------------------------------- /doc/Makefile: -------------------------------------------------------------------------------- 1 | # Minimal makefile for Sphinx documentation 2 | # 3 | 4 | # You can set these variables from the command line. 5 | SPHINXOPTS = 6 | SPHINXBUILD = sphinx-build 7 | SPHINXPROJ = CDEPS 8 | SOURCEDIR = source 9 | BUILDDIR = build 10 | 11 | # Put it first so that "make" without argument is like "make help". 12 | help: 13 | @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) 14 | 15 | .PHONY: help Makefile 16 | 17 | # Catch-all target: route all unknown targets to Sphinx using the new 18 | # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). 19 | %: Makefile 20 | @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) 21 | -------------------------------------------------------------------------------- /datm/cime_config/user_nl_datm: -------------------------------------------------------------------------------- 1 | !------------------------------------------------------------------------ 2 | ! Users should ONLY USE user_nl_datm to change namelists variables 3 | ! Users should add all user specific namelist changes below in the form of 4 | ! namelist_var = new_namelist_value 5 | ! Note that any namelist variable from shr_strdata_nml and datm_nml can 6 | ! be modified below using the above syntax 7 | ! User preview_namelists to view (not modify) the output namelist in the 8 | ! directory $CASEROOT/CaseDocs 9 | ! To modify the contents of a stream txt file, first use preview_namelists 10 | ! to obtain the contents of the stream txt files in CaseDocs, and then 11 | ! place a copy of the modified stream txt file in $CASEROOT with the string 12 | ! user_ prepended. 13 | !------------------------------------------------------------------------ 14 | -------------------------------------------------------------------------------- /dglc/cime_config/user_nl_dglc: -------------------------------------------------------------------------------- 1 | !------------------------------------------------------------------------ 2 | ! Users should ONLY USE user_nl_dglc to change namelists variables 3 | ! Users should add all user specific namelist changes below in the form of 4 | ! namelist_var = new_namelist_value 5 | ! Note that any namelist variable from shr_strdata_nml and dglc_nml can 6 | ! be modified below using the above syntax 7 | ! User preview_namelists to view (not modify) the output namelist in the 8 | ! directory $CASEROOT/CaseDocs 9 | ! To modify the contents of a stream txt file, first use preview_namelists 10 | ! to obtain the contents of the stream txt files in CaseDocs, and then 11 | ! place a copy of the modified stream txt file in $CASEROOT with the string 12 | ! user_ prepended. 13 | !------------------------------------------------------------------------ 14 | -------------------------------------------------------------------------------- /dice/cime_config/user_nl_dice: -------------------------------------------------------------------------------- 1 | !------------------------------------------------------------------------ 2 | ! Users should ONLY USE user_nl_dice to change namelists variables 3 | ! Users should add all user specific namelist changes below in the form of 4 | ! namelist_var = new_namelist_value 5 | ! Note that any namelist variable from shr_strdata_nml and dice_nml can 6 | ! be modified below using the above syntax 7 | ! User preview_namelists to view (not modify) the output namelist in the 8 | ! directory $CASEROOT/CaseDocs 9 | ! To modify the contents of a stream txt file, first use preview_namelists 10 | ! to obtain the contents of the stream txt files in CaseDocs, and then 11 | ! place a copy of the modified stream txt file in $CASEROOT with the string 12 | ! user_ prepended. 13 | !------------------------------------------------------------------------ 14 | -------------------------------------------------------------------------------- /dlnd/cime_config/user_nl_dlnd: -------------------------------------------------------------------------------- 1 | !------------------------------------------------------------------------ 2 | ! Users should ONLY USE user_nl_dlnd to change namelists variables 3 | ! Users should add all user specific namelist changes below in the form of 4 | ! namelist_var = new_namelist_value 5 | ! Note that any namelist variable from shr_strdata_nml and dlnd_nml can 6 | ! be modified below using the above syntax 7 | ! User preview_namelists to view (not modify) the output namelist in the 8 | ! directory $CASEROOT/CaseDocs 9 | ! To modify the contents of a stream txt file, first use preview_namelists 10 | ! to obtain the contents of the stream txt files in CaseDocs, and then 11 | ! place a copy of the modified stream txt file in $CASEROOT with the string 12 | ! user_ prepended. 13 | !------------------------------------------------------------------------ 14 | -------------------------------------------------------------------------------- /drof/cime_config/user_nl_drof: -------------------------------------------------------------------------------- 1 | !------------------------------------------------------------------------ 2 | ! Users should ONLY USE user_nl_drof to change namelists variables 3 | ! Users should add all user specific namelist changes below in the form of 4 | ! namelist_var = new_namelist_value 5 | ! Note that any namelist variable from shr_strdata_nml and drof_nml can 6 | ! be modified below using the above syntax 7 | ! User preview_namelists to view (not modify) the output namelist in the 8 | ! directory $CASEROOT/CaseDocs 9 | ! To modify the contents of a stream txt file, first use preview_namelists 10 | ! to obtain the contents of the stream txt files in CaseDocs, and then 11 | ! place a copy of the modified stream txt file in $CASEROOT with the string 12 | ! user_ prepended. 13 | !------------------------------------------------------------------------ 14 | -------------------------------------------------------------------------------- /.github/actions/buildpnetcdf/action.yml: -------------------------------------------------------------------------------- 1 | description: 'Build the pnetcdf library' 2 | inputs: 3 | pnetcdf_version: 4 | description: 'Tag in the pnetcdf repository to use' 5 | default: checkpoint.1.12.3 6 | required: False 7 | type: string 8 | install_prefix: 9 | description: 'Install path of pnetcdf' 10 | default: $HOME/pnetcdf 11 | required: False 12 | type: string 13 | 14 | runs: 15 | using: composite 16 | steps: 17 | - uses: actions/checkout@v3 18 | with: 19 | repository: Parallel-NetCDF/PnetCDF 20 | path: pnetcdf-src 21 | ref: ${{ inputs.pnetcdf_version }} 22 | - id: Build-PnetCDF 23 | shell: bash 24 | run: | 25 | pushd pnetcdf-src 26 | autoreconf -i 27 | ./configure --prefix=${{ inputs.install_prefix }} --enable-shared --disable-cxx 28 | make 29 | make install 30 | popd 31 | -------------------------------------------------------------------------------- /dice/cime_config/testdefs/testlist_dice.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /dshr/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | project(dshr Fortran) 2 | 3 | set(SRCFILES dshr_dfield_mod.F90 4 | dshr_fldlist_mod.F90 5 | dshr_mod.F90) 6 | 7 | foreach(FILE ${SRCFILES}) 8 | if(EXISTS "${CASEROOT}/SourceMods/src.cdeps/${FILE}") 9 | list(REMOVE_ITEM SRCFILES ${FILE}) 10 | list(APPEND SRCFILES "${CASEROOT}/SourceMods/src.cdeps/${FILE}") 11 | message("Using ${FILE} from ${CASEROOT}/SourceMods/src.cdeps") 12 | endif() 13 | endforeach() 14 | add_library(dshr ${SRCFILES}) 15 | 16 | if(BLD_STANDALONE) 17 | add_dependencies(dshr cdeps_share) 18 | target_include_directories (dshr PRIVATE ${CMAKE_BINARY_DIR}/share) 19 | endif() 20 | add_dependencies(dshr streams) 21 | 22 | target_include_directories (dshr PRIVATE ${ESMF_F90COMPILEPATHS}) 23 | target_include_directories (dshr PRIVATE "${PIO_Fortran_INCLUDE_DIR}") 24 | 25 | install(TARGETS dshr 26 | ARCHIVE DESTINATION lib 27 | LIBRARY DESTINATION lib) 28 | -------------------------------------------------------------------------------- /docn/cime_config/user_nl_docn: -------------------------------------------------------------------------------- 1 | !------------------------------------------------------------------------ 2 | ! Users should ONLY USE user_nl_docn to change namelists variables 3 | ! Users should add all user specific namelist changes below in the form of 4 | ! namelist_var = new_namelist_value 5 | ! Note that any namelist variable from shr_strdata_nml and docn_nml can 6 | ! be modified below using the above syntax 7 | ! User preview_namelists to view (not modify) the output namelist in the 8 | ! directory $CASEROOT/CaseDocs 9 | ! To modify the contents of a stream txt file, first use preview_namelists 10 | ! to obtain the contents of the stream txt files in CaseDocs, and then 11 | ! place a copy of the modified stream txt file in $CASEROOT with the string 12 | ! user_ prepended. 13 | ! As an example, to modify docn.streams.txt.prescribed, place the modified 14 | ! version in $CASEROOT with the name user_docn.streams.txt.prescribed 15 | !------------------------------------------------------------------------ 16 | -------------------------------------------------------------------------------- /dwav/cime_config/user_nl_dwav: -------------------------------------------------------------------------------- 1 | !------------------------------------------------------------------------ 2 | ! Users should ONLY USE user_nl_dwav to change namelists variables 3 | ! Users should add all user specific namelist changes below in the form of 4 | ! namelist_var = new_namelist_value 5 | ! Note that any namelist variable from shr_strdata_nml and dwav_nml can 6 | ! be modified below using the above syntax 7 | ! User preview_namelists to view (not modify) the output namelist in the 8 | ! directory $CASEROOT/CaseDocs 9 | ! To modify the contents of a stream txt file, first use preview_namelists 10 | ! to obtain the contents of the stream txt files in CaseDocs, and then 11 | ! place a copy of the modified stream txt file in $CASEROOT with the string 12 | ! user_ prepended. 13 | ! As an example, to modify dwav.streams.txt.prescribed, place the modified 14 | ! version in $CASEROOT with the name user_dwav.streams.txt.prescribed 15 | !------------------------------------------------------------------------ 16 | -------------------------------------------------------------------------------- /dice/cime_config/config_archive.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | r 4 | rs1 5 | unset 6 | 7 | rpointer.ice$NINST_STRING.$DATENAME 8 | $CASE.dice$NINST_STRING.r.$DATENAME.nc,$CASE.dice$NINST_STRING.rs1.$DATENAME.bin 9 | 10 | 11 | casename.dice.r.1976-01-01-00000.nc 12 | rpointer.ice_0001.1976-01-01-00000 13 | rpointer.ice.1976-01-01-00000 14 | rpointer.ice_0001.1976-01-02-00000 15 | rpointer.ice.1976-01-01-00480 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /doc/source/index.rst: -------------------------------------------------------------------------------- 1 | .. on documentation main file, created by 2 | sphinx-quickstart on Mon May 18 11:50:23 2020. 3 | You can adapt this file completely to your liking, but it should at least 4 | contain the root `toctree` directive. 5 | 6 | CDEPS documentation 7 | =================== 8 | 9 | The Community Data Models for Earth Predictive Systems (CDEPS) 10 | contains a set of NUOPC-compliant data components along with 11 | ESMF-based share code that enables new capabilities in selectively 12 | removing feedbacks in coupled model systems. The CDEPS data 13 | models perform the basic function of reading external data files, 14 | modifying those data, and then sending the data back to the CMEPS 15 | mediator. 16 | 17 | Table of contents 18 | ----------------- 19 | .. toctree:: 20 | :maxdepth: 2 21 | :numbered: 22 | 23 | introduction.rst 24 | streams.rst 25 | design_details.rst 26 | datm.rst 27 | docn.rst 28 | dice.rst 29 | dlnd.rst 30 | drof.rst 31 | dwav.rst 32 | dglc.rst 33 | extending.rst 34 | -------------------------------------------------------------------------------- /.github/actions/buildnetcdff/action.yml: -------------------------------------------------------------------------------- 1 | description: 'Build the netcdf fortran library' 2 | inputs: 3 | netcdf_fortran_version: 4 | description: 'Tag in the netcdf fortran repository to use' 5 | default: v5.6.0 6 | required: False 7 | type: string 8 | netcdf_c_path: 9 | description: 'Path to the installed netcdf c code root' 10 | default: /usr 11 | required: False 12 | type: string 13 | install_prefix: 14 | description: 'Install path of netcdf-fortran' 15 | default: $HOME/netcdf-fortran 16 | required: False 17 | type: string 18 | 19 | runs: 20 | using: composite 21 | steps: 22 | - uses: actions/checkout@v3 23 | with: 24 | repository: Unidata/netcdf-fortran 25 | path: netcdf-fortran-src 26 | ref: ${{ inputs.NETCDF_FORTRAN_VERSION }} 27 | - id: netcdf-fortran-build 28 | shell: bash 29 | run: | 30 | pushd netcdf-fortran-src 31 | export CPPFLAGS="-I${{ inputs.netcdf_c_path }}/include" 32 | export LDFLAGS="-L${{ inputs.netcdf_c_path }}/lib" 33 | ./configure --prefix=${{ inputs.install_prefix }} 34 | make 35 | make install 36 | -------------------------------------------------------------------------------- /dlnd/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | project(dlnd Fortran) 2 | set(SRCFILES lnd_comp_nuopc.F90) 3 | 4 | foreach(FILE ${SRCFILES}) 5 | if(EXISTS "${CASEROOT}/SourceMods/src.dlnd/${FILE}") 6 | list(REMOVE_ITEM SRCFILES ${FILE}) 7 | list(APPEND SRCFILES "${CASEROOT}/SourceMods/src.dlnd/${FILE}") 8 | message("Using ${FILE} from ${CASEROOT}/SourceMods/src.dlnd") 9 | endif() 10 | endforeach() 11 | 12 | message("DLND srcfiles are ${SRCFILES}") 13 | 14 | add_library(dlnd ${SRCFILES}) 15 | 16 | add_dependencies(dlnd dshr streams) 17 | target_include_directories (dlnd PRIVATE ${ESMF_F90COMPILEPATHS}) 18 | target_include_directories (dlnd PRIVATE "${CMAKE_SOURCE_DIR}") 19 | target_include_directories (dlnd PRIVATE "${PIO_Fortran_INCLUDE_DIR}") 20 | if(NOT DISABLE_FoX) 21 | target_include_directories (dlnd PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/../fox/include) 22 | endif() 23 | 24 | if(BLD_STANDALONE) 25 | # ESMX requires mod files 26 | foreach (SRC ${SRCFILES}) 27 | string(REGEX REPLACE "[.]F90$" ".mod" MOD ${SRC}) 28 | if (NOT DEFINED CIMEROOT AND MOD STREQUAL lnd_comp_nuopc.mod) 29 | set(MOD cdeps_dlnd_comp.mod) 30 | endif() 31 | install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${MOD}" DESTINATION include) 32 | endforeach () 33 | endif() 34 | -------------------------------------------------------------------------------- /drof/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | project(drof Fortran) 2 | set(SRCFILES rof_comp_nuopc.F90) 3 | 4 | foreach(FILE ${SRCFILES}) 5 | if(EXISTS "${CASEROOT}/SourceMods/src.drof/${FILE}") 6 | list(REMOVE_ITEM SRCFILES ${FILE}) 7 | list(APPEND SRCFILES "${CASEROOT}/SourceMods/src.drof/${FILE}") 8 | message("Using ${FILE} from ${CASEROOT}/SourceMods/src.drof") 9 | endif() 10 | endforeach() 11 | 12 | message("DROF srcfiles are ${SRCFILES}") 13 | 14 | add_library(drof ${SRCFILES}) 15 | 16 | add_dependencies(drof dshr streams) 17 | target_include_directories (drof PRIVATE ${ESMF_F90COMPILEPATHS}) 18 | target_include_directories (drof PRIVATE "${CMAKE_SOURCE_DIR}") 19 | target_include_directories (drof PRIVATE "${PIO_Fortran_INCLUDE_DIR}") 20 | if(NOT DISABLE_FoX) 21 | target_include_directories (drof PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/../fox/include) 22 | endif() 23 | 24 | if(BLD_STANDALONE) 25 | # ESMX requires mod files 26 | foreach (SRC ${SRCFILES}) 27 | string(REGEX REPLACE "[.]F90$" ".mod" MOD ${SRC}) 28 | if (NOT DEFINED CIMEROOT AND MOD STREQUAL rof_comp_nuopc.mod) 29 | set(MOD cdeps_drof_comp.mod) 30 | endif() 31 | install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${MOD}" DESTINATION include) 32 | endforeach () 33 | endif() 34 | -------------------------------------------------------------------------------- /dwav/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | project(dwav Fortran) 2 | set(SRCFILES wav_comp_nuopc.F90) 3 | 4 | foreach(FILE ${SRCFILES}) 5 | if(EXISTS "${CASEROOT}/SourceMods/src.dwav/${FILE}") 6 | list(REMOVE_ITEM SRCFILES ${FILE}) 7 | list(APPEND SRCFILES "${CASEROOT}/SourceMods/src.dwav/${FILE}") 8 | message("Using ${FILE} from ${CASEROOT}/SourceMods/src.dwav") 9 | endif() 10 | endforeach() 11 | 12 | message("DWAV srcfiles are ${SRCFILES}") 13 | 14 | add_library(dwav ${SRCFILES}) 15 | 16 | add_dependencies(dwav dshr streams) 17 | target_include_directories (dwav PRIVATE ${ESMF_F90COMPILEPATHS}) 18 | target_include_directories (dwav PRIVATE "${CMAKE_SOURCE_DIR}") 19 | target_include_directories (dwav PRIVATE "${PIO_Fortran_INCLUDE_DIR}") 20 | if(NOT DISABLE_FoX) 21 | target_include_directories (dwav PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/../fox/include) 22 | endif() 23 | 24 | if(BLD_STANDALONE) 25 | # ESMX requires mod files 26 | foreach (SRC ${SRCFILES}) 27 | string(REGEX REPLACE "[.]F90$" ".mod" MOD ${SRC}) 28 | if (NOT DEFINED CIMEROOT AND MOD STREQUAL wav_comp_nuopc.mod) 29 | set(MOD cdeps_dwav_comp.mod) 30 | endif() 31 | install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${MOD}" DESTINATION include) 32 | endforeach () 33 | endif() 34 | -------------------------------------------------------------------------------- /share/shr_kind_mod.F90: -------------------------------------------------------------------------------- 1 | MODULE shr_kind_mod 2 | 3 | !---------------------------------------------------------------------------- 4 | ! precision/kind constants add data public 5 | !---------------------------------------------------------------------------- 6 | public 7 | integer,parameter :: SHR_KIND_R8 = selected_real_kind(12) ! 8 byte real 8 | integer,parameter :: SHR_KIND_R4 = selected_real_kind( 6) ! 4 byte real 9 | integer,parameter :: SHR_KIND_RN = kind(1.0) ! native real 10 | integer,parameter :: SHR_KIND_I8 = selected_int_kind (13) ! 8 byte integer 11 | integer,parameter :: SHR_KIND_I4 = selected_int_kind ( 6) ! 4 byte integer 12 | integer,parameter :: SHR_KIND_I2 = selected_int_kind ( 4) ! 2 byte integer 13 | integer,parameter :: SHR_KIND_IN = kind(1) ! native integer 14 | integer,parameter :: SHR_KIND_CS = 80 ! short char 15 | integer,parameter :: SHR_KIND_CM = 160 ! mid-sized char 16 | integer,parameter :: SHR_KIND_CL = 256 ! long char 17 | integer,parameter :: SHR_KIND_CX = 512 ! extra-long char 18 | integer,parameter :: SHR_KIND_CXX= 4096 ! extra-extra-long char 19 | 20 | END MODULE shr_kind_mod 21 | -------------------------------------------------------------------------------- /dglc/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | project(dglc Fortran) 2 | set(SRCFILES glc_comp_nuopc.F90 3 | dglc_datamode_noevolve_mod.F90) 4 | 5 | foreach(FILE ${SRCFILES}) 6 | if(EXISTS "${CASEROOT}/SourceMods/src.dglc/${FILE}") 7 | list(REMOVE_ITEM SRCFILES ${FILE}) 8 | list(APPEND SRCFILES "${CASEROOT}/SourceMods/src.dglc/${FILE}") 9 | message("Using ${FILE} from ${CASEROOT}/SourceMods/src.dglc") 10 | endif() 11 | endforeach() 12 | 13 | message("DGLC srcfiles are ${SRCFILES}") 14 | 15 | add_library(dglc ${SRCFILES}) 16 | 17 | add_dependencies(dglc dshr streams) 18 | target_include_directories (dglc PRIVATE ${ESMF_F90COMPILEPATHS}) 19 | target_include_directories (dglc PRIVATE ${CMAKE_SOURCE_DIR}) 20 | target_include_directories (dglc PRIVATE ${PIO_Fortran_INCLUDE_DIR}) 21 | if(NOT DISABLE_FoX) 22 | target_include_directories (dglc PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/../fox/include) 23 | endif() 24 | 25 | if(BLD_STANDALONE) 26 | # ESMX requires mod files 27 | foreach (SRC ${SRCFILES}) 28 | string(REGEX REPLACE "[.]F90$" ".mod" MOD ${SRC}) 29 | if (NOT DEFINED CIMEROOT AND MOD STREQUAL glc_comp_nuopc.mod) 30 | set(MOD cdeps_dglc_comp.mod) 31 | endif() 32 | install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${MOD}" DESTINATION include) 33 | endforeach () 34 | endif() 35 | -------------------------------------------------------------------------------- /docn/cime_config/testdefs/testlist_docn.xml: -------------------------------------------------------------------------------- 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 | -------------------------------------------------------------------------------- /dglc/cime_config/testdefs/testlist_dglc.xml: -------------------------------------------------------------------------------- 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 | -------------------------------------------------------------------------------- /dice/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | project(dice Fortran) 2 | set(SRCFILES ice_comp_nuopc.F90 3 | dice_datamode_ssmi_mod.F90 4 | dice_datamode_cplhist_mod.F90 5 | dice_flux_atmice_mod.F90) 6 | 7 | foreach(FILE ${SRCFILES}) 8 | if(EXISTS "${CASEROOT}/SourceMods/src.dice/${FILE}") 9 | list(REMOVE_ITEM SRCFILES ${FILE}) 10 | list(APPEND SRCFILES "${CASEROOT}/SourceMods/src.dice/${FILE}") 11 | message("Using ${FILE} from ${CASEROOT}/SourceMods/src.dice") 12 | endif() 13 | endforeach() 14 | 15 | message("DICE srcfiles are ${SRCFILES}") 16 | 17 | add_library(dice ${SRCFILES}) 18 | 19 | add_dependencies(dice dshr streams) 20 | target_include_directories (dice PRIVATE ${ESMF_F90COMPILEPATHS}) 21 | target_include_directories (dice PRIVATE "${CMAKE_SOURCE_DIR}") 22 | target_include_directories (dice PRIVATE "${PIO_Fortran_INCLUDE_DIR}") 23 | if(NOT DISABLE_FoX) 24 | target_include_directories (dice PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/../fox/include) 25 | endif() 26 | 27 | if(BLD_STANDALONE) 28 | # ESMX requires mod files 29 | foreach (SRC ${SRCFILES}) 30 | string(REGEX REPLACE "[.]F90$" ".mod" MOD ${SRC}) 31 | if (NOT DEFINED CIMEROOT AND MOD STREQUAL ice_comp_nuopc.mod) 32 | set(MOD cdeps_dice_comp.mod) 33 | endif() 34 | install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${MOD}" DESTINATION include) 35 | endforeach () 36 | endif() 37 | -------------------------------------------------------------------------------- /streams/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | set(SRCFILES dshr_methods_mod.F90 2 | dshr_strdata_mod.F90 3 | dshr_stream_mod.F90 4 | dshr_tinterp_mod.F90) 5 | 6 | set(MODFILES ${SRCFILES}) 7 | 8 | foreach(FILE ${SRCFILES}) 9 | list(TRANSFORM MODFILES REPLACE ".F90" ".mod") 10 | if(EXISTS "${CASEROOT}/SourceMods/src.cdeps/${FILE}") 11 | list(REMOVE_ITEM SRCFILES ${FILE}) 12 | list(APPEND SRCFILES "${CASEROOT}/SourceMods/src.cdeps/${FILE}") 13 | message("Using ${FILE} from ${CASEROOT}/SourceMods/src.cdeps") 14 | endif() 15 | endforeach() 16 | 17 | message("Stream srcfiles are ${SRCFILES}") 18 | 19 | add_library(streams ${SRCFILES}) 20 | 21 | if(NOT DISABLE_FoX) 22 | add_dependencies(streams FoX_dom) 23 | target_include_directories (streams PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/../fox/include) 24 | endif() 25 | 26 | if(BLD_STANDALONE) 27 | add_dependencies(streams cdeps_share) 28 | target_include_directories (streams PRIVATE ${CMAKE_BINARY_DIR}/share) 29 | endif() 30 | 31 | target_include_directories (streams PRIVATE ${ESMF_F90COMPILEPATHS}) 32 | target_include_directories (streams PRIVATE ${PIO_Fortran_INCLUDE_DIR}) 33 | 34 | install(TARGETS streams 35 | ARCHIVE DESTINATION lib 36 | LIBRARY DESTINATION lib) 37 | foreach(MOD ${MODFILES}) 38 | install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${MOD}" DESTINATION include) 39 | endforeach() 40 | -------------------------------------------------------------------------------- /dwav/cime_config/stream_definition_dwav.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | $DIN_LOC_ROOT/share/meshes/ww3a_120222_ESMFmesh.nc 10 | 11 | 12 | $DIN_LOC_ROOT/wav/dwav/waveclim.mon.ww3a.150612.nc 13 | 14 | 15 | lamult Sw_lamult 16 | ustokes Sw_ustokes 17 | vstokes Sw_vstokes 18 | 19 | null 20 | 21 | bilinear 22 | 23 | null 24 | 1 25 | 1 26 | 1 27 | 0 28 | 29 | linear 30 | 31 | 32 | cycle 33 | 34 | 35 | 1.5 36 | 37 | single 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /.github/actions/buildcdeps/action.yaml: -------------------------------------------------------------------------------- 1 | name: CDEPS build and cache 2 | description: 'Build the CDEPS library' 3 | inputs: 4 | cdeps_version: 5 | description: 'Tag in the CDEPS repository to use' 6 | default: main 7 | required: False 8 | type: string 9 | pio_path: 10 | description: 'Path to the installed parallelio code root' 11 | default: $HOME/pio 12 | required: False 13 | type: string 14 | esmfmkfile: 15 | description: 'Path to the installed ESMF library mkfile' 16 | default: $HOME/ESMF/lib/libg/Linux.gfortran.64.openmpi.default/esmf.mk 17 | required: False 18 | type: string 19 | src_root: 20 | description: 'Path to cdeps source' 21 | default: $GITHUB_WORKSPACE 22 | required: False 23 | type: string 24 | cmake_flags: 25 | description: 'Extra flags for cmake command' 26 | default: -Wno-dev 27 | required: False 28 | type: string 29 | install_prefix: 30 | description: 'Install path of cdeps' 31 | default: $HOME/cdeps 32 | required: False 33 | type: string 34 | runs: 35 | using: composite 36 | steps: 37 | - id : Build-CDEPS 38 | shell: bash 39 | run: | 40 | mkdir build-cdeps 41 | pushd build-cdeps 42 | export ESMFMKFILE=${{ inputs.esmfmkfile }} 43 | export PIO=${{ inputs.pio_path }} 44 | cmake ${{ inputs.cmake_flags }} ${{ inputs.src_root }} 45 | make VERBOSE=1 46 | popd 47 | -------------------------------------------------------------------------------- /share/shr_assert.h: -------------------------------------------------------------------------------- 1 | #ifdef NDEBUG 2 | #define SHR_ASSERT(assert, msg) 3 | #define SHR_ASSERT_FL(assert, file, line) 4 | #define SHR_ASSERT_MFL(assert, msg, file, line) 5 | #define SHR_ASSERT_ALL(assert, msg) 6 | #define SHR_ASSERT_ALL_FL(assert, file, line) 7 | #define SHR_ASSERT_ALL_MFL(assert, msg, file, line) 8 | #define SHR_ASSERT_ANY(assert, msg) 9 | #define SHR_ASSERT_ANY_FL(assert, file, line) 10 | #define SHR_ASSERT_ANY_MFL(assert, msg, file, line) 11 | #else 12 | #define SHR_ASSERT(assert, my_msg) call shr_assert(assert, msg=my_msg) 13 | #define SHR_ASSERT_FL(assert, my_file, my_line) call shr_assert(assert, file=my_file, line=my_line) 14 | #define SHR_ASSERT_MFL(assert, my_msg, my_file, my_line) call shr_assert(assert, msg=my_msg, file=my_file, line=my_line) 15 | #define SHR_ASSERT_ALL(assert, my_msg) call shr_assert_all(assert, msg=my_msg) 16 | #define SHR_ASSERT_ALL_FL(assert, my_file, my_line) call shr_assert_all(assert, file=my_file, line=my_line) 17 | #define SHR_ASSERT_ALL_MFL(assert, my_msg, my_file, my_line) call shr_assert_all(assert, msg=my_msg, file=my_file, line=my_line) 18 | #define SHR_ASSERT_ANY(assert, my_msg) call shr_assert_any(assert, msg=my_msg) 19 | #define SHR_ASSERT_ANY_FL(assert, my_file, my_line) call shr_assert_any(assert, file=my_file, line=my_line) 20 | #define SHR_ASSERT_ANY_MFL(assert, my_msg, my_file, my_line) call shr_assert_any(assert, msg=my_msg, file=my_file, line=my_line) 21 | #endif 22 | use shr_assert_mod 23 | -------------------------------------------------------------------------------- /datm/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | project(datm Fortran) 2 | set(SRCFILES atm_comp_nuopc.F90 3 | datm_datamode_clmncep_mod.F90 4 | datm_datamode_cplhist_mod.F90 5 | datm_datamode_core2_mod.F90 6 | datm_datamode_jra_mod.F90 7 | datm_datamode_gefs_mod.F90 8 | datm_datamode_era5_mod.F90 9 | datm_datamode_simple_mod.F90) 10 | 11 | 12 | foreach(FILE ${SRCFILES}) 13 | if(EXISTS "${CASEROOT}/SourceMods/src.datm/${FILE}") 14 | list(REMOVE_ITEM SRCFILES ${FILE}) 15 | list(APPEND SRCFILES "${CASEROOT}/SourceMods/src.datm/${FILE}") 16 | message("Using ${FILE} from ${CASEROOT}/SourceMods/src.datm") 17 | endif() 18 | endforeach() 19 | 20 | message("DATM srcfiles are ${SRCFILES}") 21 | 22 | add_library(datm ${SRCFILES}) 23 | 24 | add_dependencies(datm dshr streams) 25 | target_include_directories (datm PRIVATE ${ESMF_F90COMPILEPATHS}) 26 | target_include_directories (datm PRIVATE ${CMAKE_SOURCE_DIR}) 27 | target_include_directories (datm PRIVATE ${PIO_Fortran_INCLUDE_DIR}) 28 | if(NOT DISABLE_FoX) 29 | target_include_directories (datm PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/../fox/include) 30 | endif() 31 | 32 | if(BLD_STANDALONE) 33 | # ESMX requires mod files 34 | foreach (SRC ${SRCFILES}) 35 | string(REGEX REPLACE "[.]F90$" ".mod" MOD ${SRC}) 36 | if (NOT DEFINED CIMEROOT AND MOD STREQUAL atm_comp_nuopc.mod) 37 | set(MOD cdeps_datm_comp.mod) 38 | endif() 39 | install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${MOD}" DESTINATION include) 40 | endforeach () 41 | endif() 42 | -------------------------------------------------------------------------------- /docn/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | project(docn Fortran) 2 | set(SRCFILES ocn_comp_nuopc.F90 3 | docn_datamode_copyall_mod.F90 4 | docn_datamode_som_mod.F90 5 | docn_datamode_aquaplanet_mod.F90 6 | docn_datamode_iaf_mod.F90 7 | docn_datamode_cplhist_mod.F90 8 | docn_datamode_multilev_mod.F90 9 | docn_datamode_multilev_dom_mod.F90 10 | docn_import_data_mod.F90) 11 | 12 | foreach(FILE ${SRCFILES}) 13 | if(EXISTS "${CASEROOT}/SourceMods/src.docn/${FILE}") 14 | list(REMOVE_ITEM SRCFILES ${FILE}) 15 | list(APPEND SRCFILES "${CASEROOT}/SourceMods/src.docn/${FILE}") 16 | message("Using ${FILE} from ${CASEROOT}/SourceMods/src.docn") 17 | endif() 18 | endforeach() 19 | 20 | message("DOCN srcfiles are ${SRCFILES}") 21 | 22 | add_library(docn ${SRCFILES}) 23 | 24 | add_dependencies(docn dshr streams) 25 | target_include_directories (docn PRIVATE ${ESMF_F90COMPILEPATHS}) 26 | target_include_directories (docn PRIVATE ${CMAKE_SOURCE_DIR}) 27 | target_include_directories (docn PRIVATE ${PIO_Fortran_INCLUDE_DIR}) 28 | if(NOT DISABLE_FoX) 29 | target_include_directories (docn PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/../fox/include) 30 | endif() 31 | 32 | if(BLD_STANDALONE) 33 | # ESMX requires mod files 34 | foreach (SRC ${SRCFILES}) 35 | string(REGEX REPLACE "[.]F90$" ".mod" MOD ${SRC}) 36 | if (NOT DEFINED CIMEROOT AND MOD STREQUAL ocn_comp_nuopc.mod) 37 | set(MOD cdeps_docn_comp.mod) 38 | endif() 39 | install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${MOD}" DESTINATION include) 40 | endforeach () 41 | endif() 42 | -------------------------------------------------------------------------------- /dglc/cime_config/user_nl_dglc_streams: -------------------------------------------------------------------------------- 1 | !------------------------------------------------------------------------ 2 | ! This file is used to modify datm.streams.xml generated in $RUNDIR 3 | ! Entries should have the form 4 | ! :<= new stream_value> 5 | ! The following are accepted values for an assume streamname of foo 6 | ! foo:meshfile = character string 7 | ! foo:datafiles = comma separated string of full pathnames (e.g. file1,file2,file3...) 8 | ! foo:datavars = comma separated string of field pairs (e.g. foo foobar,foo2 foobar2...) 9 | ! foo:taxmode = one of [cycle, extend, limit] 10 | ! foo:tintalgo = one of [lower,upper,nearest,linear,coszen] 11 | ! foo:readmode = single (only suported mode right now) 12 | ! foo:mapalgo = one of [bilinear,redist,nn,consf,consd,none] 13 | ! foo:dtlimit = real (1.5 is default) 14 | ! foo:year_first = integer 15 | ! foo:year_last = integer 16 | ! foo:year_align = integer 17 | ! foo:vectors = one of [none,u:v] 18 | ! foo:lev_dimname: = one of [null,name of level dimenion name] 19 | ! foo:offset = integer 20 | ! As an example: 21 | ! foo:year_first = 1950 22 | ! would change the stream year_first stream_entry to 1950 for the foo stream block 23 | ! NOTE: multi-line inputs are enabled by adding a \ at the end of the line 24 | ! As an emaple: 25 | ! foo:datafiles=foo1,foo2, \ 26 | ! foo3 27 | ! Will yield the following new entry for datafiles in stream foo 28 | ! 29 | ! foo1 30 | ! foo2 31 | ! foo3 32 | ! 33 | !------------------------------------------------------------------------ 34 | -------------------------------------------------------------------------------- /dice/cime_config/user_nl_dice_streams: -------------------------------------------------------------------------------- 1 | !------------------------------------------------------------------------ 2 | ! This file is used to modify datm.streams.xml generated in $RUNDIR 3 | ! Entries should have the form 4 | ! :<= new stream_value> 5 | ! The following are accepted values for an assume streamname of foo 6 | ! foo:meshfile = character string 7 | ! foo:datafiles = comma separated string of full pathnames (e.g. file1,file2,file3...) 8 | ! foo:datavars = comma separated string of field pairs (e.g. foo foobar,foo2 foobar2...) 9 | ! foo:taxmode = one of [cycle, extend, limit] 10 | ! foo:tintalgo = one of [lower,upper,nearest,linear,coszen] 11 | ! foo:readmode = single (only suported mode right now) 12 | ! foo:mapalgo = one of [bilinear,redist,nn,consf,consd,none] 13 | ! foo:dtlimit = real (1.5 is default) 14 | ! foo:year_first = integer 15 | ! foo:year_last = integer 16 | ! foo:year_align = integer 17 | ! foo:vectors = one of [none,u:v] 18 | ! foo:lev_dimname: = one of [null,name of level dimenion name] 19 | ! foo:offset = integer 20 | ! As an example: 21 | ! foo:year_first = 1950 22 | ! would change the stream year_first stream_entry to 1950 for the foo stream block 23 | ! NOTE: multi-line inputs are enabled by adding a \ at the end of the line 24 | ! As an emaple: 25 | ! foo:datafiles=foo1,foo2, \ 26 | ! foo3 27 | ! Will yield the following new entry for datafiles in stream foo 28 | ! 29 | ! foo1 30 | ! foo2 31 | ! foo3 32 | ! 33 | !------------------------------------------------------------------------ 34 | -------------------------------------------------------------------------------- /dlnd/cime_config/user_nl_dlnd_streams: -------------------------------------------------------------------------------- 1 | !------------------------------------------------------------------------ 2 | ! This file is used to modify datm.streams.xml generated in $RUNDIR 3 | ! Entries should have the form 4 | ! :<= new stream_value> 5 | ! The following are accepted values for an assume streamname of foo 6 | ! foo:meshfile = character string 7 | ! foo:datafiles = comma separated string of full pathnames (e.g. file1,file2,file3...) 8 | ! foo:datavars = comma separated string of field pairs (e.g. foo foobar,foo2 foobar2...) 9 | ! foo:taxmode = one of [cycle, extend, limit] 10 | ! foo:tintalgo = one of [lower,upper,nearest,linear,coszen] 11 | ! foo:readmode = single (only suported mode right now) 12 | ! foo:mapalgo = one of [bilinear,redist,nn,consf,consd,none] 13 | ! foo:dtlimit = real (1.5 is default) 14 | ! foo:year_first = integer 15 | ! foo:year_last = integer 16 | ! foo:year_align = integer 17 | ! foo:vectors = one of [none,u:v] 18 | ! foo:lev_dimname: = one of [null,name of level dimenion name] 19 | ! foo:offset = integer 20 | ! As an example: 21 | ! foo:year_first = 1950 22 | ! would change the stream year_first stream_entry to 1950 for the foo stream block 23 | ! NOTE: multi-line inputs are enabled by adding a \ at the end of the line 24 | ! As an emaple: 25 | ! foo:datafiles=foo1,foo2, \ 26 | ! foo3 27 | ! Will yield the following new entry for datafiles in stream foo 28 | ! 29 | ! foo1 30 | ! foo2 31 | ! foo3 32 | ! 33 | !------------------------------------------------------------------------ 34 | -------------------------------------------------------------------------------- /docn/cime_config/user_nl_docn_streams: -------------------------------------------------------------------------------- 1 | !------------------------------------------------------------------------ 2 | ! This file is used to modify datm.streams.xml generated in $RUNDIR 3 | ! Entries should have the form 4 | ! :<= new stream_value> 5 | ! The following are accepted values for an assume streamname of foo 6 | ! foo:meshfile = character string 7 | ! foo:datafiles = comma separated string of full pathnames (e.g. file1,file2,file3...) 8 | ! foo:datavars = comma separated string of field pairs (e.g. foo foobar,foo2 foobar2...) 9 | ! foo:taxmode = one of [cycle, extend, limit] 10 | ! foo:tintalgo = one of [lower,upper,nearest,linear,coszen] 11 | ! foo:readmode = single (only suported mode right now) 12 | ! foo:mapalgo = one of [bilinear,redist,nn,consf,consd,none] 13 | ! foo:dtlimit = real (1.5 is default) 14 | ! foo:year_first = integer 15 | ! foo:year_last = integer 16 | ! foo:year_align = integer 17 | ! foo:vectors = one of [none,u:v] 18 | ! foo:lev_dimname: = one of [null,name of level dimenion name] 19 | ! foo:offset = integer 20 | ! As an example: 21 | ! foo:year_first = 1950 22 | ! would change the stream year_first stream_entry to 1950 for the foo stream block 23 | ! NOTE: multi-line inputs are enabled by adding a \ at the end of the line 24 | ! As an emaple: 25 | ! foo:datafiles=foo1,foo2, \ 26 | ! foo3 27 | ! Will yield the following new entry for datafiles in stream foo 28 | ! 29 | ! foo1 30 | ! foo2 31 | ! foo3 32 | ! 33 | !------------------------------------------------------------------------ 34 | -------------------------------------------------------------------------------- /drof/cime_config/user_nl_drof_streams: -------------------------------------------------------------------------------- 1 | !------------------------------------------------------------------------ 2 | ! This file is used to modify datm.streams.xml generated in $RUNDIR 3 | ! Entries should have the form 4 | ! :<= new stream_value> 5 | ! The following are accepted values for an assume streamname of foo 6 | ! foo:meshfile = character string 7 | ! foo:datafiles = comma separated string of full pathnames (e.g. file1,file2,file3...) 8 | ! foo:datavars = comma separated string of field pairs (e.g. foo foobar,foo2 foobar2...) 9 | ! foo:taxmode = one of [cycle, extend, limit] 10 | ! foo:tintalgo = one of [lower,upper,nearest,linear,coszen] 11 | ! foo:readmode = single (only suported mode right now) 12 | ! foo:mapalgo = one of [bilinear,redist,nn,consf,consd,none] 13 | ! foo:dtlimit = real (1.5 is default) 14 | ! foo:year_first = integer 15 | ! foo:year_last = integer 16 | ! foo:year_align = integer 17 | ! foo:vectors = one of [none,u:v] 18 | ! foo:lev_dimname: = one of [null,name of level dimenion name] 19 | ! foo:offset = integer 20 | ! As an example: 21 | ! foo:year_first = 1950 22 | ! would change the stream year_first stream_entry to 1950 for the foo stream block 23 | ! NOTE: multi-line inputs are enabled by adding a \ at the end of the line 24 | ! As an emaple: 25 | ! foo:datafiles=foo1,foo2, \ 26 | ! foo3 27 | ! Will yield the following new entry for datafiles in stream foo 28 | ! 29 | ! foo1 30 | ! foo2 31 | ! foo3 32 | ! 33 | !------------------------------------------------------------------------ 34 | -------------------------------------------------------------------------------- /dwav/cime_config/user_nl_dwav_streams: -------------------------------------------------------------------------------- 1 | !------------------------------------------------------------------------ 2 | ! This file is used to modify datm.streams.xml generated in $RUNDIR 3 | ! Entries should have the form 4 | ! :<= new stream_value> 5 | ! The following are accepted values for an assume streamname of foo 6 | ! foo:meshfile = character string 7 | ! foo:datafiles = comma separated string of full pathnames (e.g. file1,file2,file3...) 8 | ! foo:datavars = comma separated string of field pairs (e.g. foo foobar,foo2 foobar2...) 9 | ! foo:taxmode = one of [cycle, extend, limit] 10 | ! foo:tintalgo = one of [lower,upper,nearest,linear,coszen] 11 | ! foo:readmode = single (only suported mode right now) 12 | ! foo:mapalgo = one of [bilinear,redist,nn,consf,consd,none] 13 | ! foo:dtlimit = real (1.5 is default) 14 | ! foo:year_first = integer 15 | ! foo:year_last = integer 16 | ! foo:year_align = integer 17 | ! foo:vectors = one of [none,u:v] 18 | ! foo:lev_dimname: = one of [null,name of level dimenion name] 19 | ! foo:offset = integer 20 | ! As an example: 21 | ! foo:year_first = 1950 22 | ! would change the stream year_first stream_entry to 1950 for the foo stream block 23 | ! NOTE: multi-line inputs are enabled by adding a \ at the end of the line 24 | ! As an emaple: 25 | ! foo:datafiles=foo1,foo2, \ 26 | ! foo3 27 | ! Will yield the following new entry for datafiles in stream foo 28 | ! 29 | ! foo1 30 | ! foo2 31 | ! foo3 32 | ! 33 | !------------------------------------------------------------------------ 34 | -------------------------------------------------------------------------------- /share/shr_precip_mod.F90: -------------------------------------------------------------------------------- 1 | module shr_precip_mod 2 | 3 | ! This module contains methods for manipulating precipitation quantities 4 | 5 | use shr_kind_mod, only : r8 => SHR_KIND_R8 6 | 7 | implicit none 8 | private 9 | save 10 | 11 | ! determine a rain-snow partitioning using a ramp method based on temperature 12 | public :: shr_precip_partition_rain_snow_ramp 13 | 14 | contains 15 | 16 | !----------------------------------------------------------------------- 17 | subroutine shr_precip_partition_rain_snow_ramp(temperature, frac_rain) 18 | ! 19 | ! !DESCRIPTION: 20 | ! Determine a rain-snow partitioning using a ramp method based on temperature. 21 | ! 22 | ! Returns fractional mass of precipitation falling as rain. The rest (1 - frac_rain) 23 | ! falls as snow. 24 | ! 25 | ! This is meant to be used for precipitation at the surface, e.g., to force CLM. 26 | ! 27 | ! !USES: 28 | use shr_const_mod, only : SHR_CONST_TKFRZ 29 | ! 30 | ! !ARGUMENTS: 31 | real(r8), intent(in) :: temperature ! temperature (K) 32 | real(r8), intent(out) :: frac_rain ! fraction of precipitation falling as rain 33 | ! 34 | ! !LOCAL VARIABLES: 35 | 36 | character(len=*), parameter :: subname = 'shr_precip_partition_rain_snow_ramp' 37 | !----------------------------------------------------------------------- 38 | 39 | ! ramp near freezing 40 | frac_rain = (temperature - SHR_CONST_TKFRZ) * 0.5_r8 41 | 42 | ! bound in [0,1] 43 | frac_rain = min(1.0_r8,max(0.0_r8,frac_rain)) 44 | 45 | end subroutine shr_precip_partition_rain_snow_ramp 46 | 47 | end module shr_precip_mod 48 | -------------------------------------------------------------------------------- /datm/cime_config/user_nl_datm_streams: -------------------------------------------------------------------------------- 1 | !------------------------------------------------------------------------ 2 | ! This file is used to modify datm.streams.xml generated in $RUNDIR 3 | ! Entries should have the form 4 | ! := (NO Quotes!!!) 5 | ! The following are accepted values for a stream named foo 6 | ! foo:meshfile = character string 7 | ! foo:datafiles = comma separated string of full pathnames (e.g. file1,file2,file3...) 8 | ! foo:datavars = comma separated string of field pairs (e.g. foo foobar,foo2 foobar2...) 9 | ! foo:taxmode = one of [cycle, extend, limit] 10 | ! foo:tintalgo = one of [lower,upper,nearest,linear,coszen] 11 | ! foo:readmode = single (only suported mode right now) 12 | ! foo:mapalgo = one of [bilinear,redist,nn,consf,consd,none] 13 | ! foo:dtlimit = real (1.5 is default) 14 | ! foo:year_first = integer 15 | ! foo:year_last = integer 16 | ! foo:year_align = integer 17 | ! foo:vectors = null or the names of the vector fields in the model (i.e. Sa_u:Sa_v) 18 | ! foo:lev_dimname: = one of [null,name of level dimenion name] 19 | ! foo:offset = integer 20 | ! As an example: 21 | ! foo:year_first = 1950 22 | ! would change the stream year_first stream_entry to 1950 for the foo stream block 23 | ! NOTE: multi-line inputs are enabled by adding a \ at the end of the line 24 | ! As an emaple: 25 | ! foo:datafiles=foo1,foo2, \ 26 | ! foo3 27 | ! Will yield the following new entry for datafiles in stream foo 28 | ! 29 | ! foo1 30 | ! foo2 31 | ! foo3 32 | ! 33 | !------------------------------------------------------------------------ 34 | -------------------------------------------------------------------------------- /dwav/cime_config/config_component.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 13 | 14 | Data wave model (DWAV) 15 | climatological mode 16 | 17 | 18 | 19 | char 20 | dwav 21 | dwav 22 | case_comp 23 | env_case.xml 24 | Name of wave component 25 | 26 | 27 | 28 | char 29 | CLIMO 30 | CLIMO 31 | 32 | CLIMO 33 | 34 | run_component_dwav 35 | env_run.xml 36 | DWAV mode 37 | 38 | 39 | 40 | logical 41 | TRUE,FALSE 42 | FALSE 43 | run_component_dwav 44 | env_run.xml 45 | If set to true, than dwav restarts will not be read on a continuation run. 46 | 47 | 48 | 49 | 50 | ========================================= 51 | DWAV naming conventions 52 | ========================================= 53 | 54 | 55 | 56 | -------------------------------------------------------------------------------- /dglc/cime_config/stream_definition_dglc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | unset 21 | 22 | 23 | unset 24 | 25 | 26 | unset unset 27 | 28 | null 29 | 30 | bilinear 31 | 32 | null 33 | 0 34 | 0 35 | 0 36 | 0 37 | 38 | lower 39 | 40 | 41 | cycle 42 | 43 | 44 | 1.5 45 | 46 | single 47 | 48 | 49 | 50 | -------------------------------------------------------------------------------- /cime_config/buildlib_comps: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | """ 4 | build cime component model library. This buildlib script is used by all CDEPS components. 5 | """ 6 | 7 | import sys, os 8 | 9 | _CIMEROOT = os.environ.get("CIMEROOT") 10 | if _CIMEROOT is None: 11 | raise SystemExit("ERROR: must set CIMEROOT environment variable") 12 | sys.path.append(os.path.join(_CIMEROOT, "CIME", "Tools")) 13 | 14 | _LIBDIR = os.path.join(_CIMEROOT, "CIME") 15 | sys.path.append(_LIBDIR) 16 | 17 | from standard_script_setup import * 18 | from CIME.buildlib import parse_input 19 | from CIME.case import Case 20 | from CIME.utils import run_cmd, symlink_force, expect 21 | 22 | # pragma pylint: disable=unused-argument,undefined-variable 23 | 24 | logger = logging.getLogger(__name__) 25 | 26 | 27 | def buildlib(bldroot, libroot, case, compname=None): 28 | if not compname: 29 | expect( 30 | bldroot.endswith("obj"), 31 | "It appears that buildlib_comps is being called for the main CDEPS build\n" 32 | "(the main CDEPS build should use buildlib, not buildlib_comps)", 33 | ) 34 | compname = os.path.basename(os.path.abspath(os.path.join(bldroot, os.pardir))) 35 | 36 | _, o, e = run_cmd("make d{}".format(compname), from_dir=bldroot, verbose=True) 37 | libname = "lib{}.a".format(compname) 38 | dlibname = "libd{}.a".format(compname) 39 | dlibpath = os.path.join(bldroot, dlibname) 40 | if os.path.exists(dlibpath): 41 | symlink_force(os.path.join(bldroot, dlibname), os.path.join(libroot, libname)) 42 | else: 43 | expect(False, "ERROR in {} build {} {}".format(compname, o, e)) 44 | logger.info(f"build successful for comp={compname}") 45 | 46 | 47 | def _main_func(args): 48 | caseroot, libroot, bldroot = parse_input(args) 49 | with Case(caseroot) as case: 50 | buildlib(bldroot, libroot, case) 51 | 52 | 53 | if __name__ == "__main__": 54 | _main_func(sys.argv) 55 | -------------------------------------------------------------------------------- /cmake/FindESMF.cmake: -------------------------------------------------------------------------------- 1 | 2 | if (DEFINED ENV{ESMFMKFILE}) 3 | message("ESMFMKFILE: $ENV{ESMFMKFILE}") 4 | else() 5 | message(FATAL_ERROR "ESMFMKFILE env variable is not defined") 6 | endif() 7 | 8 | set(ESMFMKFILE $ENV{ESMFMKFILE}) 9 | 10 | # convert esmf.mk makefile variables to cmake variables until ESMF 11 | # provides proper cmake package 12 | file(STRINGS ${ESMFMKFILE} esmf_mk_text) 13 | foreach(line ${esmf_mk_text}) 14 | string(REGEX REPLACE "^[ ]+" "" line ${line}) # strip leading spaces 15 | if (line MATCHES "^ESMF_*") # process only line starting with ESMF_ 16 | string(REGEX MATCH "^ESMF_[^=]+" esmf_name ${line}) 17 | string(REPLACE "${esmf_name}=" "" emsf_value ${line}) 18 | set(${esmf_name} "${emsf_value}") 19 | endif() 20 | endforeach() 21 | string(REPLACE "-I" "" ESMF_F90COMPILEPATHS ${ESMF_F90COMPILEPATHS}) 22 | string(REPLACE " " ";" ESMF_F90COMPILEPATHS ${ESMF_F90COMPILEPATHS}) 23 | 24 | # We use only these 4 variables in our build system. Make sure they are all set 25 | if(ESMF_VERSION_MAJOR AND 26 | ESMF_F90COMPILEPATHS AND 27 | ESMF_F90ESMFLINKRPATHS AND 28 | ESMF_F90ESMFLINKLIBS) 29 | message(" Found ESMF:") 30 | message("ESMF_VERSION_MAJOR: ${ESMF_VERSION_MAJOR}") 31 | message("ESMF_F90COMPILEPATHS: ${ESMF_F90COMPILEPATHS}") 32 | message("ESMF_F90ESMFLINKRPATHS: ${ESMF_F90ESMFLINKRPATHS}") 33 | message("ESMF_F90ESMFLINKLIBS: ${ESMF_F90ESMFLINKLIBS}") 34 | else() 35 | message("One of the ESMF_ variables is not defined") 36 | endif() 37 | 38 | include(FindPackageHandleStandardArgs) 39 | find_package_handle_standard_args(ESMF 40 | FOUND_VAR 41 | ESMF_FOUND 42 | REQUIRED_VARS 43 | ESMF_F90COMPILEPATHS 44 | ESMF_F90ESMFLINKRPATHS 45 | ESMF_F90ESMFLINKLIBS 46 | VERSION_VAR 47 | ESMF_VERSION_STRING) 48 | -------------------------------------------------------------------------------- /datm/setservices.inc: -------------------------------------------------------------------------------- 1 | subroutine SetServices(gcomp, rc) 2 | type(ESMF_GridComp) :: gcomp 3 | integer, intent(out) :: rc 4 | 5 | ! local variables 6 | character(len=*),parameter :: subname=trim(modName)//':(SetServices) ' 7 | !------------------------------------------------------------------------------- 8 | 9 | rc = ESMF_SUCCESS 10 | call ESMF_LogWrite(subname//' called', ESMF_LOGMSG_INFO) 11 | 12 | ! the NUOPC gcomp component will register the generic methods 13 | call NUOPC_CompDerive(gcomp, model_routine_SS, rc=rc) 14 | if (ChkErr(rc,__LINE__,u_FILE_u)) return 15 | 16 | ! switching to IPD versions 17 | call ESMF_GridCompSetEntryPoint(gcomp, ESMF_METHOD_INITIALIZE, & 18 | userRoutine=dshr_model_initphase, phase=0, rc=rc) 19 | if (ChkErr(rc,__LINE__,u_FILE_u)) return 20 | 21 | ! set entry point for methods that require specific implementation 22 | call NUOPC_CompSetEntryPoint(gcomp, ESMF_METHOD_INITIALIZE, & 23 | phaseLabelList=(/"IPDv01p1"/), userRoutine=InitializeAdvertise, rc=rc) 24 | if (ChkErr(rc,__LINE__,u_FILE_u)) return 25 | 26 | call NUOPC_CompSetEntryPoint(gcomp, ESMF_METHOD_INITIALIZE, & 27 | phaseLabelList=(/"IPDv01p3"/), userRoutine=InitializeRealize, rc=rc) 28 | if (ChkErr(rc,__LINE__,u_FILE_u)) return 29 | 30 | ! attach specializing method(s) 31 | call NUOPC_CompSpecialize(gcomp, specLabel=model_label_Advance, specRoutine=ModelAdvance, rc=rc) 32 | if (ChkErr(rc,__LINE__,u_FILE_u)) return 33 | 34 | call ESMF_MethodRemove(gcomp, label=model_label_SetRunClock, rc=rc) 35 | if (ChkErr(rc,__LINE__,u_FILE_u)) return 36 | call NUOPC_CompSpecialize(gcomp, specLabel=model_label_SetRunClock, specRoutine=dshr_set_runclock, rc=rc) 37 | if (ChkErr(rc,__LINE__,u_FILE_u)) return 38 | 39 | call NUOPC_CompSpecialize(gcomp, specLabel=model_label_Finalize, specRoutine=ModelFinalize, rc=rc) 40 | if (ChkErr(rc,__LINE__,u_FILE_u)) return 41 | 42 | call ESMF_LogWrite(subname//' done', ESMF_LOGMSG_INFO) 43 | 44 | end subroutine SetServices 45 | -------------------------------------------------------------------------------- /doc/source/_static/pop_ver.js: -------------------------------------------------------------------------------- 1 | $(document).ready(function() { 2 | /* For a URL that looks like 3 | https://blah.github.io/versions/VERSIONFOO/html/bar/index.html, set cur_version_dir to 4 | 'VERSIONFOO' (i.e., the portion of the path following 'versions'). 5 | */ 6 | var proj_end = document.baseURI.indexOf("versions") + 9; 7 | var end = document.baseURI.indexOf("/", proj_end); 8 | var cur_version_dir = document.baseURI.substring(proj_end, end); 9 | var mylist = $("#version-list"); 10 | mylist.empty(); 11 | $.getJSON(version_json_loc, function(data) { 12 | if (data.hasOwnProperty(cur_version_dir)) { 13 | /* First add the current version so that it appears first in the drop-down 14 | menu and starts as the selected element of the menu. If you click on the 15 | current version, you should stay at the current page. 16 | 17 | The conditional around this block should generally be true, but we check it 18 | just in case the current version is missing from the versions.json file for 19 | some reason. 20 | */ 21 | cur_version_name = data[cur_version_dir]; 22 | mylist.append($("