diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 1f9768a6a8..befac14642 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -31,7 +31,7 @@ setup: # Clone regressions directory - git clone --recursive http://gitlab.gfdl.noaa.gov/ogrp/Gaea-stats-MOM6-examples.git tests && cd tests # Install / update testing scripts - - git clone https://github.com/adcroft/MRS.git MRS + - git clone -b new-code-struct https://github.com/adcroft/MRS.git MRS # Update MOM6-examples and submodules - (cd MOM6-examples && git checkout . && git checkout dev/gfdl && git pull && git submodule init && git submodule update) - (cd MOM6-examples/src/MOM6 && git submodule update) @@ -60,7 +60,7 @@ gnu:ocean-only-nolibs: - time tar zxf $CACHE_DIR/tests_$CI_PIPELINE_ID.tgz && cd tests - make -f MRS/Makefile.build build/gnu/env && cd build/gnu # mkdir -p build/gnu/repro/symmetric_dynamic/ocean_only && cd build/gnu/repro/symmetric_dynamic/ocean_only - - ../../MOM6-examples/src/mkmf/bin/list_paths -l ../../../config_src/{solo_driver,dynamic_symmetric,ext*} ../../../src ../../MOM6-examples/src/FMS + - ../../MOM6-examples/src/mkmf/bin/list_paths -l ../../../config_src/{drivers/solo_driver,memory/dynamic_symmetric,infra/FMS1,ext*} ../../../src ../../MOM6-examples/src/FMS - sed -i '/FMS\/.*\/test_/d' path_names - ../../MOM6-examples/src/mkmf/bin/mkmf -t ../../MOM6-examples/src/mkmf/templates/ncrc-gnu.mk -p MOM6 -c"-Duse_libMPI -Duse_netCDF" path_names - time (source ./env ; make NETCDF=3 REPRO=1 MOM6 -s -j) @@ -73,7 +73,7 @@ gnu:ice-ocean-nolibs: - time tar zxf $CACHE_DIR/tests_$CI_PIPELINE_ID.tgz && cd tests - make -f MRS/Makefile.build build/gnu/env && cd build/gnu # mkdir -p build/gnu/repro/symmetric_dynamic/ocean_only && cd build/gnu/repro/symmetric_dynamic/ocean_only - - ../../MOM6-examples/src/mkmf/bin/list_paths -l ../../../config_src/{coupled_driver,dynamic,ext*} ../../../src ../../MOM6-examples/src/{FMS,coupler,SIS2,icebergs,ice_param,land_null,atmos_null} + - ../../MOM6-examples/src/mkmf/bin/list_paths -l ../../../config_src/{drivers/FMS_cap,memory/dynamic_nonsymmetric,infra/FMS1,ext*} ../../../src ../../MOM6-examples/src/{FMS,coupler,SIS2,icebergs,ice_param,land_null,atmos_null} - sed -i '/FMS\/.*\/test_/d' path_names - ../../MOM6-examples/src/mkmf/bin/mkmf -t ../../MOM6-examples/src/mkmf/templates/ncrc-gnu.mk -p MOM6 -c"-Duse_libMPI -Duse_netCDF -D_USE_LEGACY_LAND_ -Duse_AM3_physics" path_names - time (source ./env ; make NETCDF=3 REPRO=1 MOM6 -s -j) diff --git a/.testing/Makefile b/.testing/Makefile index 2806d54130..21da6cfde4 100644 --- a/.testing/Makefile +++ b/.testing/Makefile @@ -32,7 +32,6 @@ # MPIFC MPI Fortran compiler # # Build configuration: -# # FCFLAGS_DEBUG Testing ("debug") compiler flags # FCFLAGS_REPRO Production ("repro") compiler flags # FCFLAGS_INIT Variable initialization flags @@ -76,7 +75,6 @@ FCFLAGS_REPRO ?= -g -O2 FCFLAGS_INIT ?= FCFLAGS_COVERAGE ?= # Additional notes: -# # - The default values are simple, minimalist flags, supported by nearly all # compilers which are comparable to GFDL's canonical DEBUG and REPRO builds. # @@ -87,13 +85,14 @@ FCFLAGS_COVERAGE ?= # so FCFLAGS_INIT is used to provide additional MOM6 configuration. # Set to `true` to require identical results from DEBUG and REPRO builds +# NOTE: Many compilers (Intel, GCC on ARM64) do not yet produce identical +# results across DEBUG and REPRO builds (as defined below), so we disable on +# default. DO_REPRO_TESTS ?= +# Time measurement (configurable by the CI) TIME ?= time -# Many compilers (Intel, GCC on ARM64) do not yet produce identical results -# across DEBUG and REPRO builds (as defined below), so we disable on default. - #--- # Dependencies DEPS = deps @@ -154,10 +153,12 @@ SOURCE = \ $(foreach ext,F90 inc c h,$(wildcard $(1)/*/*.$(ext) $(1)/*/*/*.$(ext))) MOM_SOURCE = $(call SOURCE,../src) \ - $(wildcard ../config_src/solo_driver/*.F90) \ + $(wildcard ../config_src/infra/FMS1/*.F90) \ + $(wildcard ../config_src/drivers/solo_driver/*.F90) \ $(wildcard ../config_src/ext*/*/*.F90) TARGET_SOURCE = $(call SOURCE,build/target_codebase/src) \ - $(wildcard build/target_codebase/config_src/solo_driver/*.F90) \ + $(wildcard build/target_codebase/config_src/infra/FMS1/*.F90) \ + $(wildcard build/target_codebase/config_src/drivers/solo_driver/*.F90) \ $(wildcard build/target_codebase/config_src/ext*/*.F90) FMS_SOURCE = $(call SOURCE,$(DEPS)/fms/src) @@ -249,7 +250,7 @@ build/target/Makefile: | $(TARGET_CODEBASE) # Ideally we would want to re-run both Makefile and mkmf, but our mkmf call # is inside ./configure, so we must re-run ./configure as well. $(foreach b,$(filter-out target,$(BUILDS)),build/$(b)/Makefile): $(MOM_SOURCE) -build/target/configure: $(TARGET_SOURCE) +build/target_codebase/configure: $(TARGET_SOURCE) # Build MOM6 @@ -286,9 +287,6 @@ $(TARGET_CODEBASE)/ac/configure: $(TARGET_CODEBASE) $(TARGET_CODEBASE): git clone --recursive $(MOM_TARGET_URL) $@ cd $@ && git checkout $(MOM_TARGET_BRANCH) - # Copy modern autoconf files to target? - mkdir -p $(TARGET_CODEBASE)/ac - cp -r ../ac/{configure.ac,Makefile.in,m4} $(TARGET_CODEBASE)/ac #--- diff --git a/ac/configure.ac b/ac/configure.ac index 487230beb8..6ff4ae5e8b 100644 --- a/ac/configure.ac +++ b/ac/configure.ac @@ -42,18 +42,18 @@ srcdir=$srcdir/.. # Default to symmetric grid # NOTE: --enable is more properly used to add a feature, rather than to select # a compile-time mode, so this is not exactly being used as intended. -MEM_LAYOUT=${srcdir}/config_src/dynamic_symmetric +MEM_LAYOUT=${srcdir}/config_src/memory/dynamic_symmetric AC_ARG_ENABLE([asymmetric], AS_HELP_STRING([--enable-asymmetric], [Use the asymmetric grid])) AS_IF([test "$enable_asymmetric" = yes], - [MEM_LAYOUT=${srcdir}/config_src/dynamic]) + [MEM_LAYOUT=${srcdir}/config_src/memory/dynamic_nonsymmetric]) # Default to solo_driver -DRIVER_DIR=${srcdir}/config_src/solo_driver +DRIVER_DIR=${srcdir}/config_src/drivers/solo_driver AC_ARG_WITH([driver], AS_HELP_STRING([--with-driver=coupled_driver|solo_driver], [Select directory for driver source code])) AS_IF([test "x$with_driver" != "x"], - [DRIVER_DIR=${srcdir}/config_src/${with_driver}]) + [DRIVER_DIR=${srcdir}/config_src/drivers/${with_driver}]) # TODO: Rather than point to a pre-configured header file, autoconf could be # used to configure a header based on a template. @@ -216,6 +216,7 @@ AS_IF([test -z "$MKMF"], [ AC_CONFIG_COMMANDS([path_names], [list_paths -l \ ${srcdir}/src \ + ${srcdir}/config_src/infra/FMS1 \ ${srcdir}/config_src/ext* \ ${DRIVER_DIR} \ ${MEM_LAYOUT} diff --git a/config_src/coupled_driver/MOM_surface_forcing_gfdl.F90 b/config_src/drivers/FMS_cap/MOM_surface_forcing_gfdl.F90 similarity index 100% rename from config_src/coupled_driver/MOM_surface_forcing_gfdl.F90 rename to config_src/drivers/FMS_cap/MOM_surface_forcing_gfdl.F90 diff --git a/config_src/coupled_driver/ocean_model_MOM.F90 b/config_src/drivers/FMS_cap/ocean_model_MOM.F90 similarity index 100% rename from config_src/coupled_driver/ocean_model_MOM.F90 rename to config_src/drivers/FMS_cap/ocean_model_MOM.F90 diff --git a/config_src/ice_solo_driver/atmos_ocean_fluxes.F90 b/config_src/drivers/ice_solo_driver/atmos_ocean_fluxes.F90 similarity index 100% rename from config_src/ice_solo_driver/atmos_ocean_fluxes.F90 rename to config_src/drivers/ice_solo_driver/atmos_ocean_fluxes.F90 diff --git a/config_src/ice_solo_driver/ice_shelf_driver.F90 b/config_src/drivers/ice_solo_driver/ice_shelf_driver.F90 similarity index 100% rename from config_src/ice_solo_driver/ice_shelf_driver.F90 rename to config_src/drivers/ice_solo_driver/ice_shelf_driver.F90 diff --git a/config_src/mct_driver/mom_ocean_model_mct.F90 b/config_src/drivers/mct_cap/mom_ocean_model_mct.F90 similarity index 100% rename from config_src/mct_driver/mom_ocean_model_mct.F90 rename to config_src/drivers/mct_cap/mom_ocean_model_mct.F90 diff --git a/config_src/mct_driver/mom_surface_forcing_mct.F90 b/config_src/drivers/mct_cap/mom_surface_forcing_mct.F90 similarity index 100% rename from config_src/mct_driver/mom_surface_forcing_mct.F90 rename to config_src/drivers/mct_cap/mom_surface_forcing_mct.F90 diff --git a/config_src/mct_driver/ocn_cap_methods.F90 b/config_src/drivers/mct_cap/ocn_cap_methods.F90 similarity index 100% rename from config_src/mct_driver/ocn_cap_methods.F90 rename to config_src/drivers/mct_cap/ocn_cap_methods.F90 diff --git a/config_src/mct_driver/ocn_comp_mct.F90 b/config_src/drivers/mct_cap/ocn_comp_mct.F90 similarity index 100% rename from config_src/mct_driver/ocn_comp_mct.F90 rename to config_src/drivers/mct_cap/ocn_comp_mct.F90 diff --git a/config_src/mct_driver/ocn_cpl_indices.F90 b/config_src/drivers/mct_cap/ocn_cpl_indices.F90 similarity index 100% rename from config_src/mct_driver/ocn_cpl_indices.F90 rename to config_src/drivers/mct_cap/ocn_cpl_indices.F90 diff --git a/config_src/nuopc_driver/mom_cap.F90 b/config_src/drivers/nuopc_cap/mom_cap.F90 similarity index 100% rename from config_src/nuopc_driver/mom_cap.F90 rename to config_src/drivers/nuopc_cap/mom_cap.F90 diff --git a/config_src/nuopc_driver/mom_cap_methods.F90 b/config_src/drivers/nuopc_cap/mom_cap_methods.F90 similarity index 100% rename from config_src/nuopc_driver/mom_cap_methods.F90 rename to config_src/drivers/nuopc_cap/mom_cap_methods.F90 diff --git a/config_src/nuopc_driver/mom_cap_time.F90 b/config_src/drivers/nuopc_cap/mom_cap_time.F90 similarity index 100% rename from config_src/nuopc_driver/mom_cap_time.F90 rename to config_src/drivers/nuopc_cap/mom_cap_time.F90 diff --git a/config_src/nuopc_driver/mom_ocean_model_nuopc.F90 b/config_src/drivers/nuopc_cap/mom_ocean_model_nuopc.F90 similarity index 100% rename from config_src/nuopc_driver/mom_ocean_model_nuopc.F90 rename to config_src/drivers/nuopc_cap/mom_ocean_model_nuopc.F90 diff --git a/config_src/nuopc_driver/mom_surface_forcing_nuopc.F90 b/config_src/drivers/nuopc_cap/mom_surface_forcing_nuopc.F90 similarity index 100% rename from config_src/nuopc_driver/mom_surface_forcing_nuopc.F90 rename to config_src/drivers/nuopc_cap/mom_surface_forcing_nuopc.F90 diff --git a/config_src/nuopc_driver/ocn_comp_NUOPC.F90 b/config_src/drivers/nuopc_cap/ocn_comp_NUOPC.F90 similarity index 100% rename from config_src/nuopc_driver/ocn_comp_NUOPC.F90 rename to config_src/drivers/nuopc_cap/ocn_comp_NUOPC.F90 diff --git a/config_src/nuopc_driver/time_utils.F90 b/config_src/drivers/nuopc_cap/time_utils.F90 similarity index 100% rename from config_src/nuopc_driver/time_utils.F90 rename to config_src/drivers/nuopc_cap/time_utils.F90 diff --git a/config_src/solo_driver/MESO_surface_forcing.F90 b/config_src/drivers/solo_driver/MESO_surface_forcing.F90 similarity index 100% rename from config_src/solo_driver/MESO_surface_forcing.F90 rename to config_src/drivers/solo_driver/MESO_surface_forcing.F90 diff --git a/config_src/solo_driver/MOM_driver.F90 b/config_src/drivers/solo_driver/MOM_driver.F90 similarity index 100% rename from config_src/solo_driver/MOM_driver.F90 rename to config_src/drivers/solo_driver/MOM_driver.F90 diff --git a/config_src/solo_driver/MOM_surface_forcing.F90 b/config_src/drivers/solo_driver/MOM_surface_forcing.F90 similarity index 100% rename from config_src/solo_driver/MOM_surface_forcing.F90 rename to config_src/drivers/solo_driver/MOM_surface_forcing.F90 diff --git a/config_src/solo_driver/atmos_ocean_fluxes.F90 b/config_src/drivers/solo_driver/atmos_ocean_fluxes.F90 similarity index 100% rename from config_src/solo_driver/atmos_ocean_fluxes.F90 rename to config_src/drivers/solo_driver/atmos_ocean_fluxes.F90 diff --git a/config_src/solo_driver/user_surface_forcing.F90 b/config_src/drivers/solo_driver/user_surface_forcing.F90 similarity index 100% rename from config_src/solo_driver/user_surface_forcing.F90 rename to config_src/drivers/solo_driver/user_surface_forcing.F90 diff --git a/config_src/unit_drivers/MOM_sum_driver.F90 b/config_src/drivers/unit_drivers/MOM_sum_driver.F90 similarity index 100% rename from config_src/unit_drivers/MOM_sum_driver.F90 rename to config_src/drivers/unit_drivers/MOM_sum_driver.F90 diff --git a/src/framework/MOM_coms_infra.F90 b/config_src/infra/FMS1/MOM_coms_infra.F90 similarity index 100% rename from src/framework/MOM_coms_infra.F90 rename to config_src/infra/FMS1/MOM_coms_infra.F90 diff --git a/src/framework/MOM_constants.F90 b/config_src/infra/FMS1/MOM_constants.F90 similarity index 100% rename from src/framework/MOM_constants.F90 rename to config_src/infra/FMS1/MOM_constants.F90 diff --git a/src/framework/MOM_couplertype_infra.F90 b/config_src/infra/FMS1/MOM_couplertype_infra.F90 similarity index 100% rename from src/framework/MOM_couplertype_infra.F90 rename to config_src/infra/FMS1/MOM_couplertype_infra.F90 diff --git a/src/framework/MOM_cpu_clock_infra.F90 b/config_src/infra/FMS1/MOM_cpu_clock_infra.F90 similarity index 100% rename from src/framework/MOM_cpu_clock_infra.F90 rename to config_src/infra/FMS1/MOM_cpu_clock_infra.F90 diff --git a/src/framework/MOM_data_override_infra.F90 b/config_src/infra/FMS1/MOM_data_override_infra.F90 similarity index 100% rename from src/framework/MOM_data_override_infra.F90 rename to config_src/infra/FMS1/MOM_data_override_infra.F90 diff --git a/src/framework/MOM_diag_manager_infra.F90 b/config_src/infra/FMS1/MOM_diag_manager_infra.F90 similarity index 100% rename from src/framework/MOM_diag_manager_infra.F90 rename to config_src/infra/FMS1/MOM_diag_manager_infra.F90 diff --git a/src/framework/MOM_domain_infra.F90 b/config_src/infra/FMS1/MOM_domain_infra.F90 similarity index 100% rename from src/framework/MOM_domain_infra.F90 rename to config_src/infra/FMS1/MOM_domain_infra.F90 diff --git a/src/framework/MOM_ensemble_manager_infra.F90 b/config_src/infra/FMS1/MOM_ensemble_manager_infra.F90 similarity index 100% rename from src/framework/MOM_ensemble_manager_infra.F90 rename to config_src/infra/FMS1/MOM_ensemble_manager_infra.F90 diff --git a/src/framework/MOM_error_infra.F90 b/config_src/infra/FMS1/MOM_error_infra.F90 similarity index 100% rename from src/framework/MOM_error_infra.F90 rename to config_src/infra/FMS1/MOM_error_infra.F90 diff --git a/src/framework/MOM_interp_infra.F90 b/config_src/infra/FMS1/MOM_interp_infra.F90 similarity index 100% rename from src/framework/MOM_interp_infra.F90 rename to config_src/infra/FMS1/MOM_interp_infra.F90 diff --git a/src/framework/MOM_io_infra.F90 b/config_src/infra/FMS1/MOM_io_infra.F90 similarity index 100% rename from src/framework/MOM_io_infra.F90 rename to config_src/infra/FMS1/MOM_io_infra.F90 diff --git a/src/framework/MOM_time_manager.F90 b/config_src/infra/FMS1/MOM_time_manager.F90 similarity index 100% rename from src/framework/MOM_time_manager.F90 rename to config_src/infra/FMS1/MOM_time_manager.F90 diff --git a/config_src/dynamic/MOM_memory.h b/config_src/memory/dynamic_nonsymmetric/MOM_memory.h similarity index 100% rename from config_src/dynamic/MOM_memory.h rename to config_src/memory/dynamic_nonsymmetric/MOM_memory.h diff --git a/config_src/dynamic_symmetric/MOM_memory.h b/config_src/memory/dynamic_symmetric/MOM_memory.h similarity index 100% rename from config_src/dynamic_symmetric/MOM_memory.h rename to config_src/memory/dynamic_symmetric/MOM_memory.h diff --git a/docs/Doxyfile_nortd b/docs/Doxyfile_nortd index ca18bf49ee..4a81c20bd7 100644 --- a/docs/Doxyfile_nortd +++ b/docs/Doxyfile_nortd @@ -860,10 +860,10 @@ WARN_LOGFILE = _build/doxygen_warn_nortd_log.txt INPUT = ../src \ front_page.md \ - ../config_src/solo_driver \ - ../config_src/dynamic_symmetric \ + ../config_src/drivers/solo_driver \ + ../config_src/memory/dynamic_symmetric \ ../config_src/external \ - ../config_src/coupled_driver + ../config_src/drivers/FMS_cap # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses @@ -2212,7 +2212,7 @@ SEARCH_INCLUDES = YES # This tag requires that the tag SEARCH_INCLUDES is set to YES. INCLUDE_PATH = ../src/framework \ - ../config_src/dynamic_symmetric + ../config_src/memory/dynamic_symmetric # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard # patterns (like *.h and *.hpp) to filter out the header-files in the diff --git a/docs/Doxyfile_nortd_latex b/docs/Doxyfile_nortd_latex index f779d0215d..207e645195 100644 --- a/docs/Doxyfile_nortd_latex +++ b/docs/Doxyfile_nortd_latex @@ -860,10 +860,10 @@ WARN_LOGFILE = _build/doxygen_warn_nortd_latex_log.txt INPUT = ../src \ front_page.md \ - ../config_src/solo_driver \ - ../config_src/dynamic_symmetric \ + ../config_src/drivers/solo_driver \ + ../config_src/memory/dynamic_symmetric \ ../config_src/external \ - ../config_src/coupled_driver + ../config_src/drivers/FMS_cap # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses @@ -2212,7 +2212,7 @@ SEARCH_INCLUDES = YES # This tag requires that the tag SEARCH_INCLUDES is set to YES. INCLUDE_PATH = ../src/framework \ - ../config_src/dynamic_symmetric + ../config_src/memory/dynamic_symmetric # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard # patterns (like *.h and *.hpp) to filter out the header-files in the diff --git a/docs/Doxyfile_rtd b/docs/Doxyfile_rtd index 561de8382d..479c03e1b4 100644 --- a/docs/Doxyfile_rtd +++ b/docs/Doxyfile_rtd @@ -810,10 +810,10 @@ WARN_LOGFILE = _build/doxygen_warn_rtd_log.txt # Note: If this tag is empty the current directory is searched. INPUT = ../src \ - ../config_src/solo_driver \ - ../config_src/dynamic_symmetric \ + ../config_src/drivers/solo_driver \ + ../config_src/memory/dynamic_symmetric \ ../config_src/external \ - ../config_src/coupled_driver + ../config_src/drivers/FMS_cap # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses @@ -2072,7 +2072,7 @@ SEARCH_INCLUDES = YES # preprocessor. # This tag requires that the tag SEARCH_INCLUDES is set to YES. -INCLUDE_PATH = ../src/framework ../config_src/dynamic_symmetric +INCLUDE_PATH = ../src/framework ../config_src/memory/dynamic_symmetric # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard # patterns (like *.h and *.hpp) to filter out the header-files in the diff --git a/docs/Doxyfile_rtd_dox b/docs/Doxyfile_rtd_dox index b9c7c3c0d3..c7919584dd 100644 --- a/docs/Doxyfile_rtd_dox +++ b/docs/Doxyfile_rtd_dox @@ -810,10 +810,10 @@ WARN_LOGFILE = _build/doxygen_rtd_dox_debug.txt # Note: If this tag is empty the current directory is searched. INPUT = ../src \ - ../config_src/solo_driver \ - ../config_src/dynamic_symmetric \ + ../config_src/drivers/solo_driver \ + ../config_src/memory/dynamic_symmetric \ ../config_src/external \ - ../config_src/coupled_driver \ + ../config_src/drivers/FMS_cap \ ../src/ALE/MOM_ALE.F90 \ ../src/ALE/PCM_functions.F90 \ ../src/core/MOM.F90 \ @@ -838,10 +838,10 @@ INPUT = ../src \ #INPUT = ../src/equation_of_state #INPUT = ../src/ALE \ -# ../config_src/solo_driver \ -# ../config_src/dynamic_symmetric \ +# ../config_src/drivers/solo_driver \ +# ../config_src/memory/dynamic_symmetric \ # ../config_src/external \ -# ../config_src/coupled_driver +# ../config_src/drivers/FMS_cap #INPUT = \ # ../src/ALE/_ALE.dox \ @@ -2112,7 +2112,7 @@ SEARCH_INCLUDES = YES # preprocessor. # This tag requires that the tag SEARCH_INCLUDES is set to YES. -INCLUDE_PATH = ../src/framework ../config_src/dynamic_symmetric +INCLUDE_PATH = ../src/framework ../config_src/memory/dynamic_symmetric # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard # patterns (like *.h and *.hpp) to filter out the header-files in the diff --git a/docs/README.md b/docs/README.md index b071ce5927..1bec91f288 100644 --- a/docs/README.md +++ b/docs/README.md @@ -53,15 +53,19 @@ The starting state of directories and files: ``` SRC/ config_src/ - coupled_driver - dynamic - dynamic_symmetric + drivers/ + FMS_cap + ice_solo_driver + mct_cap + nuopc_cap + solo_driver + unit_drivers external - ice_solo_driver - mct_driver - nuopc_driver - solo_driver - unit_drivers + infra/ + FMS1 + memory/ + dynamic + dynamic_symmetric pkg/ CVMix-src GSW-Fortran diff --git a/docs/code_organization.rst b/docs/code_organization.rst index c83997497d..8e5ac39d57 100644 --- a/docs/code_organization.rst +++ b/docs/code_organization.rst @@ -34,17 +34,19 @@ The directory tree is:: MOM6 ├── config_src - │   ├── coupled_driver - │   ├── dynamic - │   ├── dynamic_symmetric + │   ├── drivers + │   │   ├── FMS_cap + │   │   ├── ice_solo_driver + │   │   ├── mct_cap + │   │   ├── nuopc_cap + │   │   ├── solo_driver + │   │   └── unit_drivers │   ├── external │   │   ├── GFDL_ocean_BGC │   │   └── ODA_hooks - │   ├── ice_solo_driver - │   ├── mct_driver - │   ├── nuopc_driver - │   ├── solo_driver - │   └── unit_drivers + │   ├── memory + │   │   ├── dynamic_nonsymmetric + │   │   ├── dynamic_symmetric ├── docs │   └── images ├── pkg @@ -84,11 +86,11 @@ The directory tree is:: `config_src/` ------------- -`dynamic/`, `dynamic_symmetric/` - One or none of `config_src/dynamic/` or `config_src/dynamic_symmetric/` can - be included at compile time. If neither is used then a `MOM_memory.h` file - specific to the model configuration must be present - this is known as a - "static" compile with fixed layout and domain shape. +`memory/dynamic_nonsymmetric/`, `memory/dynamic_symmetric/` + One or none of `config_src/memory/dynamic_nonsymmetric/` or + `config_src/dynamic_symmetric/` can be included at compile time. If neither + is used then a `MOM_memory.h` file specific to the model configuration must be + present - this is known as a"static" compile with fixed layout and domain shape. `external/` Contains "null" modules providing the API to optional components to use @@ -98,12 +100,17 @@ The directory tree is:: To use the actual ODA or BGC, add the appropriate source to the search paths . -`solo_driver/` +`infra/FMS1` + Contains MOM6-specific thin wrappers to all of the FMS types and routines that + are used by MOM6. The code in this directory should only be called by the + infrastructure-agnostic code in src/framework. + +`drivers/solo_driver/` This driver produces an ocean-only executable with no other coupled components (no sea-ice, no atmosphere, etc.). It is the simplest configuration and fastest to compile and thus used for a lot of testing. -`coupled_driver/` +`drivers/FMS_cap/` This driver provides an interface for the GFDL coupler to call. It requires compiling MOM6 along with at least a sea-ice model and possibly all other components in a coupled model.