From 6e49a91fd1d7e5f9cb49f6124272c621c5e3b285 Mon Sep 17 00:00:00 2001 From: Robert Hallberg Date: Thu, 25 Feb 2021 08:42:29 -0500 Subject: [PATCH 1/6] +New config_src directory structure Created the new config_src directory tree structure, as agreed upon at https://github.com/NOAA-GFDL/MOM6/discussions/1286, to eventually accomodate the selection of different infrastructures. No .F90 files are changed but there are small changes to ac/configure.ac to accomodate the new structure while also allowing for the old target to use the old structure. All answers are bitwise identical, and all MOM6-examples and TC tests are passing. --- .testing/Makefile | 3 ++- ac/configure.ac | 11 +++++++---- .../FMS_cap}/MOM_surface_forcing_gfdl.F90 | 0 .../FMS_cap}/ocean_model_MOM.F90 | 0 .../ice_solo_driver/atmos_ocean_fluxes.F90 | 0 .../ice_solo_driver/ice_shelf_driver.F90 | 0 .../mct_cap}/mom_ocean_model_mct.F90 | 0 .../mct_cap}/mom_surface_forcing_mct.F90 | 0 .../mct_cap}/ocn_cap_methods.F90 | 0 .../{mct_driver => drivers/mct_cap}/ocn_comp_mct.F90 | 0 .../mct_cap}/ocn_cpl_indices.F90 | 0 .../{nuopc_driver => drivers/nuopc_cap}/mom_cap.F90 | 0 .../nuopc_cap}/mom_cap_methods.F90 | 0 .../nuopc_cap}/mom_cap_time.F90 | 0 .../nuopc_cap}/mom_ocean_model_nuopc.F90 | 0 .../nuopc_cap}/mom_surface_forcing_nuopc.F90 | 0 .../nuopc_cap}/ocn_comp_NUOPC.F90 | 0 .../nuopc_cap}/time_utils.F90 | 0 .../solo_driver/MESO_surface_forcing.F90 | 0 config_src/{ => drivers}/solo_driver/MOM_driver.F90 | 0 .../{ => drivers}/solo_driver/MOM_surface_forcing.F90 | 0 .../{ => drivers}/solo_driver/atmos_ocean_fluxes.F90 | 0 .../solo_driver/user_surface_forcing.F90 | 0 .../{ => drivers}/unit_drivers/MOM_sum_driver.F90 | 0 .../infra/FMS1}/MOM_coms_infra.F90 | 0 .../infra/FMS1}/MOM_constants.F90 | 0 .../infra/FMS1}/MOM_couplertype_infra.F90 | 0 .../infra/FMS1}/MOM_cpu_clock_infra.F90 | 0 .../infra/FMS1}/MOM_data_override_infra.F90 | 0 .../infra/FMS1}/MOM_diag_manager_infra.F90 | 0 .../infra/FMS1}/MOM_domain_infra.F90 | 0 .../infra/FMS1}/MOM_ensemble_manager_infra.F90 | 0 .../infra/FMS1}/MOM_error_infra.F90 | 0 .../infra/FMS1}/MOM_interp_infra.F90 | 0 .../infra/FMS1}/MOM_io_infra.F90 | 0 .../infra/FMS1}/MOM_time_manager.F90 | 0 .../dynamic_nonsymmetric}/MOM_memory.h | 0 .../{ => memory}/dynamic_symmetric/MOM_memory.h | 0 38 files changed, 9 insertions(+), 5 deletions(-) rename config_src/{coupled_driver => drivers/FMS_cap}/MOM_surface_forcing_gfdl.F90 (100%) rename config_src/{coupled_driver => drivers/FMS_cap}/ocean_model_MOM.F90 (100%) rename config_src/{ => drivers}/ice_solo_driver/atmos_ocean_fluxes.F90 (100%) rename config_src/{ => drivers}/ice_solo_driver/ice_shelf_driver.F90 (100%) rename config_src/{mct_driver => drivers/mct_cap}/mom_ocean_model_mct.F90 (100%) rename config_src/{mct_driver => drivers/mct_cap}/mom_surface_forcing_mct.F90 (100%) rename config_src/{mct_driver => drivers/mct_cap}/ocn_cap_methods.F90 (100%) rename config_src/{mct_driver => drivers/mct_cap}/ocn_comp_mct.F90 (100%) rename config_src/{mct_driver => drivers/mct_cap}/ocn_cpl_indices.F90 (100%) rename config_src/{nuopc_driver => drivers/nuopc_cap}/mom_cap.F90 (100%) rename config_src/{nuopc_driver => drivers/nuopc_cap}/mom_cap_methods.F90 (100%) rename config_src/{nuopc_driver => drivers/nuopc_cap}/mom_cap_time.F90 (100%) rename config_src/{nuopc_driver => drivers/nuopc_cap}/mom_ocean_model_nuopc.F90 (100%) rename config_src/{nuopc_driver => drivers/nuopc_cap}/mom_surface_forcing_nuopc.F90 (100%) rename config_src/{nuopc_driver => drivers/nuopc_cap}/ocn_comp_NUOPC.F90 (100%) rename config_src/{nuopc_driver => drivers/nuopc_cap}/time_utils.F90 (100%) rename config_src/{ => drivers}/solo_driver/MESO_surface_forcing.F90 (100%) rename config_src/{ => drivers}/solo_driver/MOM_driver.F90 (100%) rename config_src/{ => drivers}/solo_driver/MOM_surface_forcing.F90 (100%) rename config_src/{ => drivers}/solo_driver/atmos_ocean_fluxes.F90 (100%) rename config_src/{ => drivers}/solo_driver/user_surface_forcing.F90 (100%) rename config_src/{ => drivers}/unit_drivers/MOM_sum_driver.F90 (100%) rename {src/framework => config_src/infra/FMS1}/MOM_coms_infra.F90 (100%) rename {src/framework => config_src/infra/FMS1}/MOM_constants.F90 (100%) rename {src/framework => config_src/infra/FMS1}/MOM_couplertype_infra.F90 (100%) rename {src/framework => config_src/infra/FMS1}/MOM_cpu_clock_infra.F90 (100%) rename {src/framework => config_src/infra/FMS1}/MOM_data_override_infra.F90 (100%) rename {src/framework => config_src/infra/FMS1}/MOM_diag_manager_infra.F90 (100%) rename {src/framework => config_src/infra/FMS1}/MOM_domain_infra.F90 (100%) rename {src/framework => config_src/infra/FMS1}/MOM_ensemble_manager_infra.F90 (100%) rename {src/framework => config_src/infra/FMS1}/MOM_error_infra.F90 (100%) rename {src/framework => config_src/infra/FMS1}/MOM_interp_infra.F90 (100%) rename {src/framework => config_src/infra/FMS1}/MOM_io_infra.F90 (100%) rename {src/framework => config_src/infra/FMS1}/MOM_time_manager.F90 (100%) rename config_src/{dynamic => memory/dynamic_nonsymmetric}/MOM_memory.h (100%) rename config_src/{ => memory}/dynamic_symmetric/MOM_memory.h (100%) diff --git a/.testing/Makefile b/.testing/Makefile index 2806d54130..dfe6959b16 100644 --- a/.testing/Makefile +++ b/.testing/Makefile @@ -154,7 +154,8 @@ 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) \ diff --git a/ac/configure.ac b/ac/configure.ac index 487230beb8..135fb44025 100644 --- a/ac/configure.ac +++ b/ac/configure.ac @@ -42,18 +42,20 @@ 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_CHECK_FILE($MEM_LAYOUT, [MEM_LAYOUT=$MEM_LAYOUT], [MEM_LAYOUT=${srcdir}/config_src/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_CHECK_FILE($DRIVER_DIR, [DRIVER_DIR=$DRIVER_DIR], [DRIVER_DIR=${srcdir}/config_src/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 +218,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 From 0d22f32b70db0f109c38857d4529c0eaff335a69 Mon Sep 17 00:00:00 2001 From: Robert Hallberg Date: Thu, 25 Feb 2021 09:54:47 -0500 Subject: [PATCH 2/6] +MOM6/docs reflects the new directory structure Updated the MOM6/docs files and .gitlab-ci.yml to reflect the new config_src directory structure. --- .gitlab-ci.yml | 4 ++-- docs/Doxyfile_nortd | 8 ++++---- docs/Doxyfile_nortd_latex | 8 ++++---- docs/Doxyfile_rtd | 8 ++++---- docs/Doxyfile_rtd_dox | 14 +++++++------- docs/README.md | 20 ++++++++++++-------- docs/code_organization.rst | 37 ++++++++++++++++++++++--------------- 7 files changed, 55 insertions(+), 44 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 1f9768a6a8..ceeea5ed3b 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -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/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. From c0ddee0048e9e8ce841ddf55cca7982007197338 Mon Sep 17 00:00:00 2001 From: Alistair Adcroft Date: Thu, 25 Feb 2021 14:07:32 -0500 Subject: [PATCH 3/6] Update build scripts for new dir structure - Use a new branch of MRS in the gitlab pipelines --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index ceeea5ed3b..eb76171702 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) From 95ed51faf47829d05bbb847311d159576cb15b29 Mon Sep 17 00:00:00 2001 From: Alistair Adcroft Date: Thu, 25 Feb 2021 14:52:37 -0500 Subject: [PATCH 4/6] Correct path to FMS_cap in gnu:ice-ocean-nolibs job - The job within the gitlab pipeline gnu:ice-ocean-nolibs had a modified search path but a "," instead of a "/" led to al caps being compiled and thus failure. --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index eb76171702..befac14642 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -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/{drivers,FMS_cap,memory/dynamic_nonsymmetric,infra/FMS1,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) From efb3612aa78a88281bbd87b68e8d393a6ffc65cd Mon Sep 17 00:00:00 2001 From: Marshall Ward Date: Thu, 25 Feb 2021 16:11:27 -0500 Subject: [PATCH 5/6] Remove AC_CHECK_FILE for legacy MOM_memory.h This patch removes the AC_CHECK_FILE autoconf macro which assigns a default path to the MOM_memory.h file path. This path was defaulting back to the old directory, and was added to support the regression verification testing, but this is a regression problem with should be handled by the regression, not the autoconf configuration. This will produce a regression test fail, but it not a cause for concern. --- ac/configure.ac | 1 - 1 file changed, 1 deletion(-) diff --git a/ac/configure.ac b/ac/configure.ac index 135fb44025..61fdbe888b 100644 --- a/ac/configure.ac +++ b/ac/configure.ac @@ -43,7 +43,6 @@ srcdir=$srcdir/.. # 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/memory/dynamic_symmetric -AC_CHECK_FILE($MEM_LAYOUT, [MEM_LAYOUT=$MEM_LAYOUT], [MEM_LAYOUT=${srcdir}/config_src/dynamic_symmetric]) AC_ARG_ENABLE([asymmetric], AS_HELP_STRING([--enable-asymmetric], [Use the asymmetric grid])) AS_IF([test "$enable_asymmetric" = yes], From 3b8cc9cf3d877fcb6f593b07ed7d0120c45fa95e Mon Sep 17 00:00:00 2001 From: Marshall Ward Date: Fri, 26 Feb 2021 10:33:21 -0500 Subject: [PATCH 6/6] Testing: Target uses local autoconf This patch removes two lines where the target build (used for regression testing) were using the active branch's configure.ac, which caused path mismatches. We now use our local autoconf configuration files. This patch also fixes a typo in the source code dependencies of the target repository. The AC_CHECK_FILE for the solo driver has also beed removed, for the same reason as the MOM_memory.h check. Some comments were also added or reformatted to undocumented flags. --- .testing/Makefile | 17 +++++++---------- ac/configure.ac | 1 - 2 files changed, 7 insertions(+), 11 deletions(-) diff --git a/.testing/Makefile b/.testing/Makefile index dfe6959b16..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 @@ -158,7 +157,8 @@ MOM_SOURCE = $(call SOURCE,../src) \ $(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) @@ -250,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 @@ -287,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 61fdbe888b..6ff4ae5e8b 100644 --- a/ac/configure.ac +++ b/ac/configure.ac @@ -50,7 +50,6 @@ AS_IF([test "$enable_asymmetric" = yes], # Default to solo_driver DRIVER_DIR=${srcdir}/config_src/drivers/solo_driver -AC_CHECK_FILE($DRIVER_DIR, [DRIVER_DIR=$DRIVER_DIR], [DRIVER_DIR=${srcdir}/config_src/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"],