From 5e9cb97013abfcabcc8696ade31e4f176b03c5e0 Mon Sep 17 00:00:00 2001 From: Micael Oliveira Date: Mon, 16 Oct 2023 12:25:58 +1100 Subject: [PATCH 1/5] Reorganize main CMakeLists.txt file into sections. --- CMakeLists.txt | 66 +++++++++++++++++++++++++++++++++++++------------- 1 file changed, 49 insertions(+), 17 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index b911e80..06737d3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,12 +1,18 @@ cmake_minimum_required(VERSION 3.18) +# CMake version compatibility -project(ACCESS-OM3 - VERSION 0.1 - LANGUAGES C Fortran) +#[==============================================================================[ +# Basic project definition # +#]==============================================================================] -list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake) -include(${CMAKE_SOURCE_DIR}/cmake/FortranLib.cmake) -include(${CMAKE_SOURCE_DIR}/cmake/AddPatchedSource.cmake) +project(ACCESS-OM3 VERSION 0.2.0 + HOMEPAGE_URL https://github.com/COSIMA/access-om3 + DESCRIPTION "Global coupled ocean - sea ice - wave model" + LANGUAGES C Fortran) + +#[==============================================================================[ +# Options # +#]==============================================================================] # Configurations to build list(APPEND KNOWN_CONFIGURATIONS MOM6 CICE6 WW3 MOM6-CICE6 CICE6-WW3 MOM6-WW3 MOM6-CICE6-WW3) @@ -28,6 +34,25 @@ message(STATUS " - CICE6-WW3 ${ENABLE_CICE6-WW3}") message(STATUS " - MOM6-WW3 ${ENABLE_MOM6-WW3}") message(STATUS " - MOM6-CICE6-WW3 ${ENABLE_MOM6-CICE6-WW3}") +# Build options +set(OPENMP OFF CACHE BOOL "Enable OpenMP threading") + +message(STATUS "Build options") +message(STATUS " - OPENMP ${OPENMP}") + +#[==============================================================================[ +# Project configuration # +#]==============================================================================] + +list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake) +include(GNUInstallDirs) + +# Include some custom cmake modules +include(FortranLib) +include(AddPatchedSource) + +## Configure project variables + # Do not build components that are not going to be used if(ENABLE_MOM6 OR ENABLE_MOM6-CICE6 OR ENABLE_MOM6-WW3 OR ENABLE_MOM6-CICE6-WW3) set(MOM6 ON FORCE) @@ -45,17 +70,7 @@ else() set(WW3 OFF FORCE) endif() -# Build options -set(OPENMP OFF CACHE BOOL "Enable OpenMP threading") - -message(STATUS "Build options") -message(STATUS " - OPENMP ${OPENMP}") - # Common compiler flags and definitions -add_compile_definitions( - CESMCOUPLED -) - if(CMAKE_Fortran_COMPILER_ID MATCHES "GNU") set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -fbacktrace -fconvert=big-endian -ffree-line-length-none -ffixed-line-length-none") if(${CMAKE_Fortran_COMPILER_VERSION} VERSION_GREATER_EQUAL 10) @@ -83,6 +98,13 @@ else() message(WARNING "C compiler with ID ${CMAKE_C_COMPILER_ID} will be used with CMake default options") endif() +add_compile_definitions( + CESMCOUPLED +) + +#[==============================================================================[ +# External packages # +#]==============================================================================] # Find dependencies find_package(MPI REQUIRED) @@ -94,6 +116,10 @@ find_package(ESMF 8.3.0 MODULE REQUIRED) find_package(fms COMPONENTS R8 REQUIRED) find_package(PIO 2.5.3 REQUIRED COMPONENTS C Fortran) +#[==============================================================================[ +# Main definitions # +#]==============================================================================] + # Some code shared by several components add_subdirectory(share) @@ -120,7 +146,7 @@ endif() # Mediator component (CMEPS) add_subdirectory(CMEPS) -# Build executable for each enabled configuration +# Add executable for each enabled configuration foreach(CONF IN LISTS KNOWN_CONFIGURATIONS) if(NOT ENABLE_${CONF}) continue() @@ -162,3 +188,9 @@ foreach(CONF IN LISTS KNOWN_CONFIGURATIONS) add_executable(access-om3-${CONF} CMEPS/CMEPS/cesm/driver/esmApp.F90) target_link_libraries(access-om3-${CONF} PRIVATE cesm_driver_${CONF} esmf PIO::PIO_Fortran NetCDF::NetCDF_Fortran) endforeach() + +#[==============================================================================[ +# Install or Export # +#]==============================================================================] + +# TODO From 6ade4a82fea9fd78cbffe36bab5f6d553332e17c Mon Sep 17 00:00:00 2001 From: Micael Oliveira Date: Mon, 16 Oct 2023 13:40:55 +1100 Subject: [PATCH 2/5] Prepend OM3_ to all CMake targets and options. --- CDEPS/CMakeLists.txt | 14 +++--- CICE/CMakeLists.txt | 28 ++++++------ CMEPS/CMakeLists.txt | 10 ++--- CMakeLists.txt | 104 ++++++++++++++++++++++--------------------- MOM6/CMakeLists.txt | 24 +++++----- WW3/CMakeLists.txt | 8 ++-- share/CMakeLists.txt | 12 ++--- 7 files changed, 102 insertions(+), 98 deletions(-) diff --git a/CDEPS/CMakeLists.txt b/CDEPS/CMakeLists.txt index 635080b..1081cf8 100644 --- a/CDEPS/CMakeLists.txt +++ b/CDEPS/CMakeLists.txt @@ -47,14 +47,14 @@ list(APPEND cdeps_dwav_src_files CDEPS/dwav/wav_comp_nuopc.F90 ) -add_fortran_library(cdeps_common mod STATIC ${cdeps_common_src_files}) -target_include_directories(cdeps_common PUBLIC $) -target_link_libraries(cdeps_common PUBLIC share cmeps esmf PIO::PIO_Fortran FoX_dom) +add_fortran_library(OM3_cdeps_common mod STATIC ${cdeps_common_src_files}) +target_include_directories(OM3_cdeps_common PUBLIC $) +target_link_libraries(OM3_cdeps_common PUBLIC OM3_share OM3_cmeps esmf PIO::PIO_Fortran FoX_dom) foreach(LIB cdeps_docn cdeps_dice cdeps_dwav cdeps_drof cdeps_datm) - add_fortran_library(${LIB} ${LIB}/mod STATIC ${${LIB}_src_files}) - target_include_directories(${LIB} PUBLIC $) - target_link_libraries(${LIB} PUBLIC share cmeps esmf PIO::PIO_Fortran FoX_dom cdeps_common) + add_fortran_library(OM3_${LIB} OM3_${LIB}/mod STATIC ${${LIB}_src_files}) + target_include_directories(OM3_${LIB} PUBLIC $) + target_link_libraries(OM3_${LIB} PUBLIC OM3_share OM3_cmeps esmf PIO::PIO_Fortran FoX_dom OM3_cdeps_common) endforeach() -add_patched_source(cdeps_datm CDEPS/datm/atm_comp_nuopc.F90) +add_patched_source(OM3_cdeps_datm CDEPS/datm/atm_comp_nuopc.F90) diff --git a/CICE/CMakeLists.txt b/CICE/CMakeLists.txt index 16f2c8a..7b3f207 100644 --- a/CICE/CMakeLists.txt +++ b/CICE/CMakeLists.txt @@ -1,6 +1,6 @@ # Configuration Options -set(CICE_IO "PIO" CACHE STRING "CICE OPTIONS: Choose IO options.") -set_property(CACHE CICE_IO PROPERTY STRINGS "NetCDF" "PIO" "Binary") +set(OM3_CICE_IO "PIO" CACHE STRING "CICE OPTIONS: Choose IO options.") +set_property(CACHE OM3_CICE_IO PROPERTY STRINGS "NetCDF" "PIO" "Binary") # Too many files to list, so include them via this file include("cice_files.cmake") @@ -17,28 +17,28 @@ list(APPEND _cice_defs FORTRANUNDERSCORE ncdf) # Select IO source files based on CICE_IO -if(CICE_IO MATCHES "NetCDF") +if(OM3_CICE_IO MATCHES "NetCDF") list(APPEND lib_src_files ${cice_netcdf_io_files}) list(APPEND _cice_defs USE_NETCDF) -elseif(CICE_IO MATCHES "PIO") +elseif(OM3_CICE_IO MATCHES "PIO") list(APPEND lib_src_files ${cice_pio2_io_files}) list(APPEND _cice_defs USE_NETCDF) -elseif(CICE_IO MATCHES "Binary") +elseif(OM3_CICE_IO MATCHES "Binary") list(APPEND lib_src_files ${cice_binary_io_files}) endif() ### Create target library and set PUBLIC interfaces on the library -add_fortran_library(cice mod STATIC ${lib_src_files}) -target_compile_definitions(cice PUBLIC "${_cice_defs}") -target_link_libraries(cice PUBLIC share cdeps_common esmf) -add_patched_source(cice CICE/cicecore/drivers/nuopc/cmeps/ice_mesh_mod.F90) +add_fortran_library(OM3_cice mod STATIC ${lib_src_files}) +target_compile_definitions(OM3_cice PUBLIC "${_cice_defs}") +target_link_libraries(OM3_cice PUBLIC OM3_share OM3_cdeps_common esmf) +add_patched_source(OM3_cice CICE/cicecore/drivers/nuopc/cmeps/ice_mesh_mod.F90) -if(CICE_IO MATCHES "^(NetCDF|PIO)$") - target_link_libraries(cice PUBLIC NetCDF::NetCDF_Fortran) - if(CICE_IO MATCHES "PIO") - target_link_libraries(cice PUBLIC PIO::PIO_Fortran) +if(OM3_CICE_IO MATCHES "^(NetCDF|PIO)$") + target_link_libraries(OM3_cice PUBLIC NetCDF::NetCDF_Fortran) + if(OM3_CICE_IO MATCHES "PIO") + target_link_libraries(OM3_cice PUBLIC PIO::PIO_Fortran) endif() endif() if(OpenMP_Fortran_FOUND) - target_link_libraries(cice PRIVATE OpenMP::OpenMP_Fortran) + target_link_libraries(OM3_cice PRIVATE OpenMP::OpenMP_Fortran) endif() diff --git a/CMEPS/CMakeLists.txt b/CMEPS/CMakeLists.txt index 762c42e..686b45d 100644 --- a/CMEPS/CMakeLists.txt +++ b/CMEPS/CMakeLists.txt @@ -52,11 +52,11 @@ list(APPEND _nuopc_cap_share_files ############################################################################### ### Create target library -add_fortran_library(cmeps mod STATIC ${_mediator_files} ${_nuopc_cap_share_files}) -target_link_libraries(cmeps PUBLIC share - FMS::fms_r8 - esmf - PIO::PIO_Fortran) +add_fortran_library(OM3_cmeps mod STATIC ${_mediator_files} ${_nuopc_cap_share_files}) +target_link_libraries(OM3_cmeps PUBLIC OM3_share + FMS::fms_r8 + esmf + PIO::PIO_Fortran) if(OpenMP_Fortran_FOUND) target_link_libraries(cmeps PRIVATE OpenMP::OpenMP_Fortran) endif() diff --git a/CMakeLists.txt b/CMakeLists.txt index 06737d3..214ecf8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -17,28 +17,28 @@ project(ACCESS-OM3 VERSION 0.2.0 # Configurations to build list(APPEND KNOWN_CONFIGURATIONS MOM6 CICE6 WW3 MOM6-CICE6 CICE6-WW3 MOM6-WW3 MOM6-CICE6-WW3) -set(ENABLE_MOM6 OFF CACHE BOOL "Build MOM6 configuration") -set(ENABLE_CICE6 OFF CACHE BOOL "Build CICE6 configuration") -set(ENABLE_WW3 OFF CACHE BOOL "Build WW3 configuration") -set(ENABLE_MOM6-CICE6 ON CACHE BOOL "Build MOM6-CICE6 configuration") -set(ENABLE_CICE6-WW3 ON CACHE BOOL "Build CICE6-WW3 configuration") -set(ENABLE_MOM6-WW3 OFF CACHE BOOL "Build MOM6-WW3 configuration") -set(ENABLE_MOM6-CICE6-WW3 ON CACHE BOOL "Build MOM6-CICE6-WW3 configuration") +set(OM3_ENABLE_MOM6 OFF CACHE BOOL "Build MOM6 configuration") +set(OM3_ENABLE_CICE6 OFF CACHE BOOL "Build CICE6 configuration") +set(OM3_ENABLE_WW3 OFF CACHE BOOL "Build WW3 configuration") +set(OM3_ENABLE_MOM6-CICE6 ON CACHE BOOL "Build MOM6-CICE6 configuration") +set(OM3_ENABLE_CICE6-WW3 ON CACHE BOOL "Build CICE6-WW3 configuration") +set(OM3_ENABLE_MOM6-WW3 OFF CACHE BOOL "Build MOM6-WW3 configuration") +set(OM3_ENABLE_MOM6-CICE6-WW3 ON CACHE BOOL "Build MOM6-CICE6-WW3 configuration") message(STATUS "Configurations") -message(STATUS " - MOM6 ${ENABLE_MOM6}") -message(STATUS " - CICE6 ${ENABLE_CICE6}") -message(STATUS " - WW3 ${ENABLE_WW3}") -message(STATUS " - MOM6-CICE6 ${ENABLE_MOM6-CICE6}") -message(STATUS " - CICE6-WW3 ${ENABLE_CICE6-WW3}") -message(STATUS " - MOM6-WW3 ${ENABLE_MOM6-WW3}") -message(STATUS " - MOM6-CICE6-WW3 ${ENABLE_MOM6-CICE6-WW3}") +message(STATUS " - MOM6 ${OM3_ENABLE_MOM6}") +message(STATUS " - CICE6 ${OM3_ENABLE_CICE6}") +message(STATUS " - WW3 ${OM3_ENABLE_WW3}") +message(STATUS " - MOM6-CICE6 ${OM3_ENABLE_MOM6-CICE6}") +message(STATUS " - CICE6-WW3 ${OM3_ENABLE_CICE6-WW3}") +message(STATUS " - MOM6-WW3 ${OM3_ENABLE_MOM6-WW3}") +message(STATUS " - MOM6-CICE6-WW3 ${OM3_ENABLE_MOM6-CICE6-WW3}") # Build options -set(OPENMP OFF CACHE BOOL "Enable OpenMP threading") +set(OM3_OPENMP OFF CACHE BOOL "Enable OpenMP threading") message(STATUS "Build options") -message(STATUS " - OPENMP ${OPENMP}") +message(STATUS " - OPENMP ${OM3_OPENMP}") #[==============================================================================[ # Project configuration # @@ -54,20 +54,20 @@ include(AddPatchedSource) ## Configure project variables # Do not build components that are not going to be used -if(ENABLE_MOM6 OR ENABLE_MOM6-CICE6 OR ENABLE_MOM6-WW3 OR ENABLE_MOM6-CICE6-WW3) - set(MOM6 ON FORCE) +if(OM3_ENABLE_MOM6 OR OM3_ENABLE_MOM6-CICE6 OR OM3_ENABLE_MOM6-WW3 OR OM3_ENABLE_MOM6-CICE6-WW3) + set(OM3_MOM6 ON FORCE) else() - set(MOM6 OFF FORCE) + set(OM3_MOM6 OFF FORCE) endif() -if(ENABLE_CICE6 OR ENABLE_MOM6-CICE6 OR ENABLE_CICE6-WW3 OR ENABLE_MOM6-CICE6-WW3) - set(CICE6 ON FORCE) +if(OM3_ENABLE_CICE6 OR OM3_ENABLE_MOM6-CICE6 OR OM3_ENABLE_CICE6-WW3 OR OM3_ENABLE_MOM6-CICE6-WW3) + set(OM3_CICE6 ON FORCE) else() - set(CICE6 OFF FORCE) + set(OM3_CICE6 OFF FORCE) endif() -if(ENABLE_WW3 OR ENABLE_MOM6-WW3 OR ENABLE_CICE6-WW3 OR ENABLE_MOM6-CICE6-WW3) - set(WW3 ON FORCE) +if(OM3_ENABLE_WW3 OR OM3_ENABLE_MOM6-WW3 OR OM3_ENABLE_CICE6-WW3 OR OM3_ENABLE_MOM6-CICE6-WW3) + set(OM3_WW3 ON FORCE) else() - set(WW3 OFF FORCE) + set(OM3_WW3 OFF FORCE) endif() # Common compiler flags and definitions @@ -108,7 +108,7 @@ add_compile_definitions( # Find dependencies find_package(MPI REQUIRED) -if(OPENMP) +if(OM3_OPENMP) find_package(OpenMP REQUIRED) endif() find_package(NetCDF 4.7.3 REQUIRED Fortran) @@ -129,17 +129,17 @@ add_subdirectory(share) add_subdirectory(CDEPS) # Ocean component (MOM6) -if(MOM6) +if(OM3_MOM6) add_subdirectory(MOM6) endif() # Sea-ice component (CICE6) -if(CICE6) +if(OM3_CICE6) add_subdirectory(CICE) endif() # Wave component (WW3) -if(WW3) +if(OM3_WW3) add_subdirectory(WW3) endif() @@ -148,45 +148,49 @@ add_subdirectory(CMEPS) # Add executable for each enabled configuration foreach(CONF IN LISTS KNOWN_CONFIGURATIONS) - if(NOT ENABLE_${CONF}) + if(NOT OM3_ENABLE_${CONF}) continue() endif() set(COMPONENTS_TARGETS "") - if(${CONF} MATCHES MOM6) - list(APPEND COMPONENTS_TARGETS mom6) + if(OM3_${CONF} MATCHES MOM6) + list(APPEND COMPONENTS_TARGETS OM3_mom6) else() - list(APPEND COMPONENTS_TARGETS cdeps_docn) + list(APPEND COMPONENTS_TARGETS OM3_cdeps_docn) endif() - if(${CONF} MATCHES CICE6) - list(APPEND COMPONENTS_TARGETS cice) + if(OM3_${CONF} MATCHES CICE6) + list(APPEND COMPONENTS_TARGETS OM3_cice) else() - list(APPEND COMPONENTS_TARGETS cdeps_dice) + list(APPEND COMPONENTS_TARGETS OM3_cdeps_dice) endif() - if(${CONF} MATCHES WW3) - list(APPEND COMPONENTS_TARGETS ww3) + if(OM3_${CONF} MATCHES WW3) + list(APPEND COMPONENTS_TARGETS OM3_ww3) else() - list(APPEND COMPONENTS_TARGETS cdeps_dwav) + list(APPEND COMPONENTS_TARGETS OM3_cdeps_dwav) endif() # We use the CESM driver from CMEPS - add_fortran_library(cesm_driver_${CONF} cesm_driver/${CONF}/mod STATIC + add_fortran_library(OM3_cesm_driver_${CONF} OM3_cesm_driver_${CONF}/mod STATIC CMEPS/CMEPS/cesm/driver/esm.F90 CMEPS/CMEPS/cesm/driver/ensemble_driver.F90 CMEPS/CMEPS/cesm/driver/esm_time_mod.F90 ) - target_link_libraries(cesm_driver_${CONF} PUBLIC share ${COMPONENTS_TARGETS} cmeps cdeps_common cdeps_drof cdeps_datm esmf PIO::PIO_Fortran) - target_compile_definitions(cesm_driver_${CONF} PRIVATE MED_PRESENT - ATM_PRESENT - ICE_PRESENT - OCN_PRESENT - WAV_PRESENT - ROF_PRESENT - $<$:DEBUG> + target_link_libraries(OM3_cesm_driver_${CONF} PUBLIC OM3_share ${COMPONENTS_TARGETS} OM3_cmeps OM3_cdeps_common OM3_cdeps_drof OM3_cdeps_datm esmf PIO::PIO_Fortran) + target_compile_definitions(OM3_cesm_driver_${CONF} PRIVATE MED_PRESENT + ATM_PRESENT + ICE_PRESENT + OCN_PRESENT + WAV_PRESENT + ROF_PRESENT + $<$:DEBUG> ) - add_executable(access-om3-${CONF} CMEPS/CMEPS/cesm/driver/esmApp.F90) - target_link_libraries(access-om3-${CONF} PRIVATE cesm_driver_${CONF} esmf PIO::PIO_Fortran NetCDF::NetCDF_Fortran) + add_executable(OM3_${CONF} CMEPS/CMEPS/cesm/driver/esmApp.F90) + target_link_libraries(OM3_${CONF} PRIVATE OM3_cesm_driver_${CONF} esmf PIO::PIO_Fortran NetCDF::NetCDF_Fortran) + + set_target_properties(OM3_${CONF} PROPERTIES + OUTPUT_NAME access-om3-${CONF} + ) endforeach() #[==============================================================================[ diff --git a/MOM6/CMakeLists.txt b/MOM6/CMakeLists.txt index 277e792..9ee7547 100644 --- a/MOM6/CMakeLists.txt +++ b/MOM6/CMakeLists.txt @@ -5,8 +5,8 @@ elseif(CMAKE_Fortran_COMPILER_ID MATCHES "Intel") set(fortran_compile_flags -r8) endif() -option(SYMMETRIC "Use symmetric memory" OFF) -if(SYMMETRIC) +option(OM3_MOM_SYMMETRIC "Use symmetric memory" OFF) +if(OM3_MOM_SYMMETRIC) set(MOM_memory "dynamic_symmetric") else() set(MOM_memory "dynamic_nonsymmetric") @@ -15,13 +15,13 @@ endif() include("mom6_files.cmake") ### Create target library and set PUBLIC interfaces on the library -add_fortran_library(mom6 mod STATIC ${mom6_src_files}) -target_include_directories(mom6 PUBLIC $ - $) -target_compile_options(mom6 PRIVATE "$<$:${fortran_compile_flags}>") -target_link_libraries(mom6 PUBLIC share - cmeps - FMS::fms_r8 - esmf - NetCDF::NetCDF_Fortran) -add_patched_source(mom6 MOM6/config_src/drivers/nuopc_cap/mom_cap.F90) +add_fortran_library(OM3_mom6 mod STATIC ${mom6_src_files}) +target_include_directories(OM3_mom6 PUBLIC $ + $) +target_compile_options(OM3_mom6 PRIVATE "$<$:${fortran_compile_flags}>") +target_link_libraries(OM3_mom6 PUBLIC OM3_share + OM3_cmeps + FMS::fms_r8 + esmf + NetCDF::NetCDF_Fortran) +add_patched_source(OM3_mom6 MOM6/config_src/drivers/nuopc_cap/mom_cap.F90) diff --git a/WW3/CMakeLists.txt b/WW3/CMakeLists.txt index 090cf4f..5abd1cf 100644 --- a/WW3/CMakeLists.txt +++ b/WW3/CMakeLists.txt @@ -25,12 +25,12 @@ message(VERBOSE "WW3 common source files : ${ww3_src_files}") message(VERBOSE "WW3 switch files: ${switch_files}") ### Create target library and set PUBLIC interfaces on the library -add_fortran_library(ww3 mod STATIC ${ww3_src_files} ${switch_files}) -target_link_libraries(ww3 PUBLIC esmf - NetCDF::NetCDF_Fortran) +add_fortran_library(OM3_ww3 mod STATIC ${ww3_src_files} ${switch_files}) +target_link_libraries(OM3_ww3 PUBLIC esmf + NetCDF::NetCDF_Fortran) # WW3 executables foreach(EXE ww3_grid ww3_strt ww3_ounf ww3_outf ww3_outp) add_executable(${EXE} ${${EXE}_src_files}) - target_link_libraries(${EXE} PRIVATE ww3) + target_link_libraries(${EXE} PRIVATE OM3_ww3) endforeach() diff --git a/share/CMakeLists.txt b/share/CMakeLists.txt index a768d9d..d92dd6e 100644 --- a/share/CMakeLists.txt +++ b/share/CMakeLists.txt @@ -58,18 +58,18 @@ endif() # Collect source files for library -add_library(share STATIC ${timing_src_files} ${stubs_src_files} ${cesm_share_generated_files} ${cesm_share_src_files}) +add_library(OM3_share STATIC ${timing_src_files} ${stubs_src_files} ${cesm_share_generated_files} ${cesm_share_src_files}) add_compile_definitions(NUOPC_INTERFACE HAVE_MPI) if(CMAKE_Fortran_COMPILER_ID MATCHES "GNU") - target_compile_definitions(share PRIVATE CPRGNU NAMING=_ADD_UNDERSCORE FORTRANUNDERSCORE) + target_compile_definitions(OM3_share PRIVATE CPRGNU NAMING=_ADD_UNDERSCORE FORTRANUNDERSCORE) elseif(CMAKE_Fortran_COMPILER_ID MATCHES "Intel") - target_compile_definitions(share PRIVATE CPRINTEL NAMING=_ADD_UNDERSCORE FORTRANUNDERSCORE) + target_compile_definitions(OM3_share PRIVATE CPRINTEL NAMING=_ADD_UNDERSCORE FORTRANUNDERSCORE) endif() -set_target_properties(share PROPERTIES Fortran_MODULE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/mod) -target_include_directories(share PUBLIC $ +set_target_properties(OM3_share PROPERTIES Fortran_MODULE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/mod) +target_include_directories(OM3_share PUBLIC $ $ CESM_share/include ) -target_link_libraries(share PUBLIC esmf PIO::PIO_Fortran) +target_link_libraries(OM3_share PUBLIC esmf PIO::PIO_Fortran) From c564d2b640ddbd5a7a91f8dca09beabb66927c93 Mon Sep 17 00:00:00 2001 From: Micael Oliveira Date: Tue, 17 Oct 2023 14:09:19 +1100 Subject: [PATCH 3/5] Reorganize CMakeLists: - adopt a more uniform style - try to only declare link libraries as public if really necessary - declare compile definitions as private and use as much as possible target_compile_definitions over add_compile_definitions - list sources in the CMakeLists files - split share library into share and timing in order to make it clear where timing is used/needed - declare the linker language for our executables --- CDEPS/CMakeLists.txt | 73 +++++++--- CICE/CMakeLists.txt | 179 ++++++++++++++++++----- CICE/cice_files.cmake | 151 -------------------- CMEPS/CMakeLists.txt | 32 ++--- CMakeLists.txt | 34 +++-- MOM6/CMakeLists.txt | 324 ++++++++++++++++++++++++++++++++++++++++-- MOM6/mom6_files.cmake | 308 --------------------------------------- WW3/CMakeLists.txt | 176 ++++++++++++++++++----- WW3/ww3_files.cmake | 88 ------------ share/CMakeLists.txt | 71 +++++---- 10 files changed, 720 insertions(+), 716 deletions(-) delete mode 100644 CICE/cice_files.cmake delete mode 100644 MOM6/mom6_files.cmake delete mode 100644 WW3/ww3_files.cmake diff --git a/CDEPS/CMakeLists.txt b/CDEPS/CMakeLists.txt index 1081cf8..3db3b24 100644 --- a/CDEPS/CMakeLists.txt +++ b/CDEPS/CMakeLists.txt @@ -1,6 +1,13 @@ -add_subdirectory(fox) +### Targets -list(APPEND cdeps_common_src_files +## Common library +add_fortran_library(OM3_cdeps_common mod/common STATIC) +target_include_directories(OM3_cdeps_common PRIVATE $) +target_link_libraries(OM3_cdeps_common + PUBLIC esmf + PRIVATE OM3_share OM3_cmeps FoX_dom PIO::PIO_Fortran +) +target_sources(OM3_cdeps_common PRIVATE CDEPS/streams/dshr_methods_mod.F90 CDEPS/streams/dshr_strdata_mod.F90 CDEPS/streams/dshr_stream_mod.F90 @@ -11,11 +18,14 @@ list(APPEND cdeps_common_src_files CDEPS/dshr/dshr_mod.F90 ) -list(APPEND cdeps_drof_src_files - CDEPS/drof/rof_comp_nuopc.F90 +## DATM +add_fortran_library(OM3_cdeps_datm mod/datm STATIC) +target_include_directories(OM3_cdeps_datm PRIVATE $) +target_link_libraries(OM3_cdeps_datm + PUBLIC esmf + PRIVATE OM3_share OM3_cmeps FoX_dom OM3_cdeps_common PIO::PIO_Fortran ) - -list(APPEND cdeps_datm_src_files +target_sources(OM3_cdeps_datm PRIVATE CDEPS/datm/datm_datamode_cfsr_mod.F90 CDEPS/datm/datm_datamode_clmncep_mod.F90 CDEPS/datm/datm_datamode_core2_mod.F90 @@ -25,9 +35,16 @@ list(APPEND cdeps_datm_src_files CDEPS/datm/datm_datamode_jra_mod.F90 extra_sources/datm_datamode_jra55do_mod.F90 ) +add_patched_source(OM3_cdeps_datm CDEPS/datm/atm_comp_nuopc.F90) - -list(APPEND cdeps_docn_src_files +## DOCN +add_fortran_library(OM3_cdeps_docn mod/docn STATIC) +target_include_directories(OM3_cdeps_docn PRIVATE $) +target_link_libraries(OM3_cdeps_docn + PUBLIC esmf + PRIVATE OM3_share OM3_cmeps FoX_dom OM3_cdeps_common PIO::PIO_Fortran +) +target_sources(OM3_cdeps_docn PRIVATE CDEPS/docn/docn_datamode_aquaplanet_mod.F90 CDEPS/docn/docn_datamode_copyall_mod.F90 CDEPS/docn/docn_datamode_cplhist_mod.F90 @@ -37,24 +54,42 @@ list(APPEND cdeps_docn_src_files CDEPS/docn/ocn_comp_nuopc.F90 ) -list(APPEND cdeps_dice_src_files +## DICE +add_fortran_library(OM3_cdeps_dice mod/dice STATIC) +target_include_directories(OM3_cdeps_dice PRIVATE $) +target_link_libraries(OM3_cdeps_dice + PUBLIC esmf + PRIVATE OM3_share OM3_cmeps FoX_dom OM3_cdeps_common PIO::PIO_Fortran +) +target_sources(OM3_cdeps_dice PRIVATE CDEPS/dice/dice_datamode_ssmi_mod.F90 CDEPS/dice/dice_flux_atmice_mod.F90 CDEPS/dice/ice_comp_nuopc.F90 ) -list(APPEND cdeps_dwav_src_files +## DWAV +add_fortran_library(OM3_cdeps_dwav mod/dwav STATIC) +target_include_directories(OM3_cdeps_dwav PRIVATE $) +target_link_libraries(OM3_cdeps_dwav + PUBLIC esmf + PRIVATE OM3_share OM3_cmeps FoX_dom OM3_cdeps_common PIO::PIO_Fortran +) +target_sources(OM3_cdeps_dwav PRIVATE CDEPS/dwav/wav_comp_nuopc.F90 ) -add_fortran_library(OM3_cdeps_common mod STATIC ${cdeps_common_src_files}) -target_include_directories(OM3_cdeps_common PUBLIC $) -target_link_libraries(OM3_cdeps_common PUBLIC OM3_share OM3_cmeps esmf PIO::PIO_Fortran FoX_dom) +## DROF +add_fortran_library(OM3_cdeps_drof mod/drof STATIC) +target_include_directories(OM3_cdeps_drof PRIVATE $) +target_link_libraries(OM3_cdeps_drof + PUBLIC esmf + PRIVATE OM3_share OM3_cmeps FoX_dom OM3_cdeps_common PIO::PIO_Fortran +) +target_sources(OM3_cdeps_drof PRIVATE + CDEPS/drof/rof_comp_nuopc.F90 +) -foreach(LIB cdeps_docn cdeps_dice cdeps_dwav cdeps_drof cdeps_datm) - add_fortran_library(OM3_${LIB} OM3_${LIB}/mod STATIC ${${LIB}_src_files}) - target_include_directories(OM3_${LIB} PUBLIC $) - target_link_libraries(OM3_${LIB} PUBLIC OM3_share OM3_cmeps esmf PIO::PIO_Fortran FoX_dom OM3_cdeps_common) -endforeach() +### Subdirectories -add_patched_source(OM3_cdeps_datm CDEPS/datm/atm_comp_nuopc.F90) +## Build FoX +add_subdirectory(fox) diff --git a/CICE/CMakeLists.txt b/CICE/CMakeLists.txt index 7b3f207..62518a8 100644 --- a/CICE/CMakeLists.txt +++ b/CICE/CMakeLists.txt @@ -1,44 +1,159 @@ -# Configuration Options +### Global definitions, flags, etc + +## Configuration Options set(OM3_CICE_IO "PIO" CACHE STRING "CICE OPTIONS: Choose IO options.") set_property(CACHE OM3_CICE_IO PROPERTY STRINGS "NetCDF" "PIO" "Binary") -# Too many files to list, so include them via this file -include("cice_files.cmake") - -# Collect source files for library -list(APPEND lib_src_files - ${cice_shared_files} - ${cice_shared_files_c} - ${icepack_files} - ${cice_mpi_comm_files} - ${cice_nuopc_cmeps_driver_files}) +### Targets -list(APPEND _cice_defs FORTRANUNDERSCORE - ncdf) - -# Select IO source files based on CICE_IO -if(OM3_CICE_IO MATCHES "NetCDF") - list(APPEND lib_src_files ${cice_netcdf_io_files}) - list(APPEND _cice_defs USE_NETCDF) -elseif(OM3_CICE_IO MATCHES "PIO") - list(APPEND lib_src_files ${cice_pio2_io_files}) - list(APPEND _cice_defs USE_NETCDF) -elseif(OM3_CICE_IO MATCHES "Binary") - list(APPEND lib_src_files ${cice_binary_io_files}) +## CICE library +add_fortran_library(OM3_cice mod STATIC) +target_compile_definitions(OM3_cice PRIVATE FORTRANUNDERSCORE ncdf) +if(OM3_CICE_IO MATCHES "^(NetCDF|PIO)$") + target_compile_definitions(OM3_cice PRIVATE USE_NETCDF) endif() - -### Create target library and set PUBLIC interfaces on the library -add_fortran_library(OM3_cice mod STATIC ${lib_src_files}) -target_compile_definitions(OM3_cice PUBLIC "${_cice_defs}") -target_link_libraries(OM3_cice PUBLIC OM3_share OM3_cdeps_common esmf) -add_patched_source(OM3_cice CICE/cicecore/drivers/nuopc/cmeps/ice_mesh_mod.F90) - +target_link_libraries(OM3_cice + PUBLIC esmf + PRIVATE OM3_share OM3_timing OM3_cdeps_common OM3_cmeps +) if(OM3_CICE_IO MATCHES "^(NetCDF|PIO)$") - target_link_libraries(OM3_cice PUBLIC NetCDF::NetCDF_Fortran) + target_link_libraries(OM3_cice PRIVATE NetCDF::NetCDF_Fortran) if(OM3_CICE_IO MATCHES "PIO") - target_link_libraries(OM3_cice PUBLIC PIO::PIO_Fortran) + target_link_libraries(OM3_cice PRIVATE PIO::PIO_Fortran) endif() endif() if(OpenMP_Fortran_FOUND) target_link_libraries(OM3_cice PRIVATE OpenMP::OpenMP_Fortran) endif() + +target_sources(OM3_cice PRIVATE + # Shared List: + CICE/cicecore/shared/ice_arrays_column.F90 + CICE/cicecore/shared/ice_calendar.F90 + CICE/cicecore/shared/ice_constants.F90 + CICE/cicecore/shared/ice_distribution.F90 + CICE/cicecore/shared/ice_domain_size.F90 + CICE/cicecore/shared/ice_fileunits.F90 + CICE/cicecore/shared/ice_init_column.F90 + CICE/cicecore/shared/ice_kinds_mod.F90 + CICE/cicecore/shared/ice_restart_column.F90 + CICE/cicecore/shared/ice_restart_shared.F90 + CICE/cicecore/shared/ice_spacecurve.F90 + + # Analysis + CICE/cicecore/cicedynB/analysis/ice_diagnostics.F90 + CICE/cicecore/cicedynB/analysis/ice_diagnostics_bgc.F90 + CICE/cicecore/cicedynB/analysis/ice_history.F90 + CICE/cicecore/cicedynB/analysis/ice_history_bgc.F90 + CICE/cicecore/cicedynB/analysis/ice_history_drag.F90 + CICE/cicecore/cicedynB/analysis/ice_history_fsd.F90 + CICE/cicecore/cicedynB/analysis/ice_history_mechred.F90 + CICE/cicecore/cicedynB/analysis/ice_history_pond.F90 + CICE/cicecore/cicedynB/analysis/ice_history_shared.F90 + CICE/cicecore/cicedynB/analysis/ice_history_snow.F90 + + # Dynamics + CICE/cicecore/cicedynB/dynamics/ice_dyn_eap.F90 + CICE/cicecore/cicedynB/dynamics/ice_dyn_evp.F90 + CICE/cicecore/cicedynB/dynamics/ice_dyn_evp_1d.F90 + CICE/cicecore/cicedynB/dynamics/ice_dyn_shared.F90 + CICE/cicecore/cicedynB/dynamics/ice_dyn_vp.F90 + CICE/cicecore/cicedynB/dynamics/ice_transport_driver.F90 + CICE/cicecore/cicedynB/dynamics/ice_transport_remap.F90 + + # General + CICE/cicecore/cicedynB/general/ice_flux.F90 + CICE/cicecore/cicedynB/general/ice_flux_bgc.F90 + CICE/cicecore/cicedynB/general/ice_forcing.F90 + CICE/cicecore/cicedynB/general/ice_forcing_bgc.F90 + CICE/cicecore/cicedynB/general/ice_init.F90 + CICE/cicecore/cicedynB/general/ice_state.F90 + CICE/cicecore/cicedynB/general/ice_step_mod.F90 + + # Infrastructure + CICE/cicecore/cicedynB/infrastructure/ice_blocks.F90 + CICE/cicecore/cicedynB/infrastructure/ice_domain.F90 + CICE/cicecore/cicedynB/infrastructure/ice_grid.F90 + CICE/cicecore/cicedynB/infrastructure/ice_memusage.F90 + CICE/cicecore/cicedynB/infrastructure/ice_memusage_gptl.c + CICE/cicecore/cicedynB/infrastructure/ice_read_write.F90 + CICE/cicecore/cicedynB/infrastructure/ice_restart_driver.F90 + CICE/cicecore/cicedynB/infrastructure/ice_restoring.F90 + + # Icepack + CICE/icepack/columnphysics/icepack_aerosol.F90 + CICE/icepack/columnphysics/icepack_age.F90 + CICE/icepack/columnphysics/icepack_algae.F90 + CICE/icepack/columnphysics/icepack_atmo.F90 + CICE/icepack/columnphysics/icepack_brine.F90 + CICE/icepack/columnphysics/icepack_firstyear.F90 + CICE/icepack/columnphysics/icepack_flux.F90 + CICE/icepack/columnphysics/icepack_fsd.F90 + CICE/icepack/columnphysics/icepack_intfc.F90 + CICE/icepack/columnphysics/icepack_isotope.F90 + CICE/icepack/columnphysics/icepack_itd.F90 + CICE/icepack/columnphysics/icepack_kinds.F90 + CICE/icepack/columnphysics/icepack_mechred.F90 + CICE/icepack/columnphysics/icepack_meltpond_lvl.F90 + CICE/icepack/columnphysics/icepack_meltpond_topo.F90 + CICE/icepack/columnphysics/icepack_mushy_physics.F90 + CICE/icepack/columnphysics/icepack_ocean.F90 + CICE/icepack/columnphysics/icepack_orbital.F90 + CICE/icepack/columnphysics/icepack_parameters.F90 + CICE/icepack/columnphysics/icepack_shortwave.F90 + CICE/icepack/columnphysics/icepack_snow.F90 + CICE/icepack/columnphysics/icepack_therm_bl99.F90 + CICE/icepack/columnphysics/icepack_therm_itd.F90 + CICE/icepack/columnphysics/icepack_therm_mushy.F90 + CICE/icepack/columnphysics/icepack_therm_shared.F90 + CICE/icepack/columnphysics/icepack_therm_vertical.F90 + CICE/icepack/columnphysics/icepack_tracers.F90 + CICE/icepack/columnphysics/icepack_warnings.F90 + CICE/icepack/columnphysics/icepack_wavefracspec.F90 + CICE/icepack/columnphysics/icepack_zbgc.F90 + CICE/icepack/columnphysics/icepack_zbgc_shared.F90 + CICE/icepack/columnphysics/icepack_zsalinity.F90 + + # Shared C + CICE/cicecore/cicedynB/infrastructure/ice_shr_reprosum86.c + + # MPI + CICE/cicecore/cicedynB/infrastructure/comm/mpi/ice_boundary.F90 + CICE/cicecore/cicedynB/infrastructure/comm/mpi/ice_broadcast.F90 + CICE/cicecore/cicedynB/infrastructure/comm/mpi/ice_communicate.F90 + CICE/cicecore/cicedynB/infrastructure/comm/mpi/ice_exit.F90 + CICE/cicecore/cicedynB/infrastructure/comm/mpi/ice_gather_scatter.F90 + CICE/cicecore/cicedynB/infrastructure/comm/mpi/ice_global_reductions.F90 + CICE/cicecore/cicedynB/infrastructure/comm/mpi/ice_reprosum.F90 + CICE/cicecore/cicedynB/infrastructure/comm/mpi/ice_timers.F90 + + # NUOPC CMEPS driver + CICE/cicecore/drivers/nuopc/cmeps/CICE_FinalMod.F90 + CICE/cicecore/drivers/nuopc/cmeps/CICE_InitMod.F90 + CICE/cicecore/drivers/nuopc/cmeps/CICE_RunMod.F90 + CICE/cicecore/drivers/nuopc/cmeps/cice_wrapper_mod.F90 + CICE/cicecore/drivers/nuopc/cmeps/ice_comp_nuopc.F90 + CICE/cicecore/drivers/nuopc/cmeps/ice_import_export.F90 + CICE/cicecore/drivers/nuopc/cmeps/ice_prescribed_mod.F90 + CICE/cicecore/drivers/nuopc/cmeps/ice_scam.F90 + CICE/cicecore/drivers/nuopc/cmeps/ice_shr_methods.F90 +) +add_patched_source(OM3_cice CICE/cicecore/drivers/nuopc/cmeps/ice_mesh_mod.F90) +# Select IO source files based on CICE_IO +if(OM3_CICE_IO MATCHES "NetCDF") + target_sources(OM3_cice PRIVATE + CICE/cicecore/cicedynB/infrastructure/io/io_netcdf/ice_history_write.F90 + CICE/cicecore/cicedynB/infrastructure/io/io_netcdf/ice_restart.F90 + ) +elseif(OM3_CICE_IO MATCHES "PIO") + target_sources(OM3_cice PRIVATE + CICE/cicecore/cicedynB/infrastructure/io/io_pio2/ice_history_write.F90 + CICE/cicecore/cicedynB/infrastructure/io/io_pio2/ice_pio.F90 + CICE/cicecore/cicedynB/infrastructure/io/io_pio2/ice_restart.F90 + ) +elseif(OM3_CICE_IO MATCHES "Binary") + target_sources(OM3_cice PRIVATE + CICE/cicecore/cicedynB/infrastructure/io/io_binary/ice_history_write.F90 + CICE/cicecore/cicedynB/infrastructure/io/io_binary/ice_restart.F90 + ) +endif() diff --git a/CICE/cice_files.cmake b/CICE/cice_files.cmake deleted file mode 100644 index b95b1a6..0000000 --- a/CICE/cice_files.cmake +++ /dev/null @@ -1,151 +0,0 @@ -list(APPEND cice_shared_files - #Shared List: - CICE/cicecore/shared/ice_arrays_column.F90 - CICE/cicecore/shared/ice_calendar.F90 - CICE/cicecore/shared/ice_constants.F90 - CICE/cicecore/shared/ice_distribution.F90 - CICE/cicecore/shared/ice_domain_size.F90 - CICE/cicecore/shared/ice_fileunits.F90 - CICE/cicecore/shared/ice_init_column.F90 - CICE/cicecore/shared/ice_kinds_mod.F90 - CICE/cicecore/shared/ice_restart_column.F90 - CICE/cicecore/shared/ice_restart_shared.F90 - CICE/cicecore/shared/ice_spacecurve.F90 - - #Analysis List: - CICE/cicecore/cicedynB/analysis/ice_diagnostics.F90 - CICE/cicecore/cicedynB/analysis/ice_diagnostics_bgc.F90 - CICE/cicecore/cicedynB/analysis/ice_history.F90 - CICE/cicecore/cicedynB/analysis/ice_history_bgc.F90 - CICE/cicecore/cicedynB/analysis/ice_history_drag.F90 - CICE/cicecore/cicedynB/analysis/ice_history_fsd.F90 - CICE/cicecore/cicedynB/analysis/ice_history_mechred.F90 - CICE/cicecore/cicedynB/analysis/ice_history_pond.F90 - CICE/cicecore/cicedynB/analysis/ice_history_shared.F90 - CICE/cicecore/cicedynB/analysis/ice_history_snow.F90 - - #Dynamics List: - CICE/cicecore/cicedynB/dynamics/ice_dyn_eap.F90 - CICE/cicecore/cicedynB/dynamics/ice_dyn_evp.F90 - CICE/cicecore/cicedynB/dynamics/ice_dyn_evp_1d.F90 - CICE/cicecore/cicedynB/dynamics/ice_dyn_shared.F90 - CICE/cicecore/cicedynB/dynamics/ice_dyn_vp.F90 - CICE/cicecore/cicedynB/dynamics/ice_transport_driver.F90 - CICE/cicecore/cicedynB/dynamics/ice_transport_remap.F90 - - #General List: - CICE/cicecore/cicedynB/general/ice_flux.F90 - CICE/cicecore/cicedynB/general/ice_flux_bgc.F90 - CICE/cicecore/cicedynB/general/ice_forcing.F90 - CICE/cicecore/cicedynB/general/ice_forcing_bgc.F90 - CICE/cicecore/cicedynB/general/ice_init.F90 - CICE/cicecore/cicedynB/general/ice_state.F90 - CICE/cicecore/cicedynB/general/ice_step_mod.F90 - - #Infrastructure List - CICE/cicecore/cicedynB/infrastructure/ice_blocks.F90 - CICE/cicecore/cicedynB/infrastructure/ice_domain.F90 - CICE/cicecore/cicedynB/infrastructure/ice_grid.F90 - CICE/cicecore/cicedynB/infrastructure/ice_memusage.F90 - CICE/cicecore/cicedynB/infrastructure/ice_memusage_gptl.c - CICE/cicecore/cicedynB/infrastructure/ice_read_write.F90 - CICE/cicecore/cicedynB/infrastructure/ice_restart_driver.F90 - CICE/cicecore/cicedynB/infrastructure/ice_restoring.F90 -) - - -#Icepack List: -list(APPEND icepack_files - CICE/icepack/columnphysics/icepack_aerosol.F90 - CICE/icepack/columnphysics/icepack_age.F90 - CICE/icepack/columnphysics/icepack_algae.F90 - CICE/icepack/columnphysics/icepack_atmo.F90 - CICE/icepack/columnphysics/icepack_brine.F90 - CICE/icepack/columnphysics/icepack_firstyear.F90 - CICE/icepack/columnphysics/icepack_flux.F90 - CICE/icepack/columnphysics/icepack_fsd.F90 - CICE/icepack/columnphysics/icepack_intfc.F90 - CICE/icepack/columnphysics/icepack_isotope.F90 - CICE/icepack/columnphysics/icepack_itd.F90 - CICE/icepack/columnphysics/icepack_kinds.F90 - CICE/icepack/columnphysics/icepack_mechred.F90 - CICE/icepack/columnphysics/icepack_meltpond_lvl.F90 - CICE/icepack/columnphysics/icepack_meltpond_topo.F90 - CICE/icepack/columnphysics/icepack_mushy_physics.F90 - CICE/icepack/columnphysics/icepack_ocean.F90 - CICE/icepack/columnphysics/icepack_orbital.F90 - CICE/icepack/columnphysics/icepack_parameters.F90 - CICE/icepack/columnphysics/icepack_shortwave.F90 - CICE/icepack/columnphysics/icepack_snow.F90 - CICE/icepack/columnphysics/icepack_therm_bl99.F90 - CICE/icepack/columnphysics/icepack_therm_itd.F90 - CICE/icepack/columnphysics/icepack_therm_mushy.F90 - CICE/icepack/columnphysics/icepack_therm_shared.F90 - CICE/icepack/columnphysics/icepack_therm_vertical.F90 - CICE/icepack/columnphysics/icepack_tracers.F90 - CICE/icepack/columnphysics/icepack_warnings.F90 - CICE/icepack/columnphysics/icepack_wavefracspec.F90 - CICE/icepack/columnphysics/icepack_zbgc.F90 - CICE/icepack/columnphysics/icepack_zbgc_shared.F90 - CICE/icepack/columnphysics/icepack_zsalinity.F90 -) - -list(APPEND cice_shared_files_c - CICE/cicecore/cicedynB/infrastructure/ice_shr_reprosum86.c -) - -#-- Using MPI -list(APPEND cice_mpi_comm_files - CICE/cicecore/cicedynB/infrastructure/comm/mpi/ice_boundary.F90 - CICE/cicecore/cicedynB/infrastructure/comm/mpi/ice_broadcast.F90 - CICE/cicecore/cicedynB/infrastructure/comm/mpi/ice_communicate.F90 - CICE/cicecore/cicedynB/infrastructure/comm/mpi/ice_exit.F90 - CICE/cicecore/cicedynB/infrastructure/comm/mpi/ice_gather_scatter.F90 - CICE/cicecore/cicedynB/infrastructure/comm/mpi/ice_global_reductions.F90 - CICE/cicecore/cicedynB/infrastructure/comm/mpi/ice_reprosum.F90 - CICE/cicecore/cicedynB/infrastructure/comm/mpi/ice_timers.F90 -) - -#-- Using Serial -list(APPEND cice_serial_comm_files - CICE/cicecore/cicedynB/infrastructure/comm/serial/ice_boundary.F90 - CICE/cicecore/cicedynB/infrastructure/comm/serial/ice_broadcast.F90 - CICE/cicecore/cicedynB/infrastructure/comm/serial/ice_communicate.F90 - CICE/cicecore/cicedynB/infrastructure/comm/serial/ice_exit.F90 - CICE/cicecore/cicedynB/infrastructure/comm/serial/ice_gather_scatter.F90 - CICE/cicecore/cicedynB/infrastructure/comm/serial/ice_global_reductions.F90 - CICE/cicecore/cicedynB/infrastructure/comm/serial/ice_reprosum.F90 - CICE/cicecore/cicedynB/infrastructure/comm/serial/ice_timers.F90 -) - -#-- Using binary IO -list(APPEND cice_binary_io_files - CICE/cicecore/cicedynB/infrastructure/io/io_binary/ice_history_write.F90 - CICE/cicecore/cicedynB/infrastructure/io/io_binary/ice_restart.F90 -) - -#-- Using NetCDF IO -list(APPEND cice_netcdf_io_files - CICE/cicecore/cicedynB/infrastructure/io/io_netcdf/ice_history_write.F90 - CICE/cicecore/cicedynB/infrastructure/io/io_netcdf/ice_restart.F90 -) - -#PIO2 I/O List: -list(APPEND cice_pio2_io_files - CICE/cicecore/cicedynB/infrastructure/io/io_pio2/ice_history_write.F90 - CICE/cicecore/cicedynB/infrastructure/io/io_pio2/ice_pio.F90 - CICE/cicecore/cicedynB/infrastructure/io/io_pio2/ice_restart.F90 -) - -#-- Using NUOPC CMEPS driver -list(APPEND cice_nuopc_cmeps_driver_files - CICE/cicecore/drivers/nuopc/cmeps/CICE_FinalMod.F90 - CICE/cicecore/drivers/nuopc/cmeps/CICE_InitMod.F90 - CICE/cicecore/drivers/nuopc/cmeps/CICE_RunMod.F90 - CICE/cicecore/drivers/nuopc/cmeps/cice_wrapper_mod.F90 - CICE/cicecore/drivers/nuopc/cmeps/ice_comp_nuopc.F90 - CICE/cicecore/drivers/nuopc/cmeps/ice_import_export.F90 - CICE/cicecore/drivers/nuopc/cmeps/ice_prescribed_mod.F90 - CICE/cicecore/drivers/nuopc/cmeps/ice_scam.F90 - CICE/cicecore/drivers/nuopc/cmeps/ice_shr_methods.F90 -) diff --git a/CMEPS/CMakeLists.txt b/CMEPS/CMakeLists.txt index 686b45d..ff6f610 100644 --- a/CMEPS/CMakeLists.txt +++ b/CMEPS/CMakeLists.txt @@ -1,8 +1,15 @@ -############################################################################### -### Source files -############################################################################### +### Targets -list(APPEND _mediator_files +## CMEPS library +add_fortran_library(OM3_cmeps mod STATIC) +target_link_libraries(OM3_cmeps + PUBLIC esmf + PRIVATE OM3_share OM3_timing PIO::PIO_Fortran +) +if(OpenMP_Fortran_FOUND) + target_link_libraries(OM3_cmeps PRIVATE OpenMP::OpenMP_Fortran) +endif() +target_sources(OM3_cmeps PRIVATE CMEPS/cesm/flux_atmocn/shr_flux_mod.F90 CMEPS/mediator/med_phases_restart_mod.F90 CMEPS/mediator/med_map_mod.F90 @@ -38,25 +45,10 @@ list(APPEND _mediator_files CMEPS/mediator/med_phases_post_lnd_mod.F90 CMEPS/mediator/med_phases_post_glc_mod.F90 CMEPS/mediator/med_phases_post_rof_mod.F90 - CMEPS/mediator/med_phases_post_wav_mod.F90) + CMEPS/mediator/med_phases_post_wav_mod.F90 -list(APPEND _nuopc_cap_share_files CMEPS/cesm/nuopc_cap_share/driver_pio_mod.F90 CMEPS/cesm/nuopc_cap_share/esm_utils_mod.F90 CMEPS/cesm/nuopc_cap_share/glc_elevclass_mod.F90 CMEPS/cesm/nuopc_cap_share/nuopc_shr_methods.F90 ) - -############################################################################### -### Libraries -############################################################################### - -### Create target library -add_fortran_library(OM3_cmeps mod STATIC ${_mediator_files} ${_nuopc_cap_share_files}) -target_link_libraries(OM3_cmeps PUBLIC OM3_share - FMS::fms_r8 - esmf - PIO::PIO_Fortran) -if(OpenMP_Fortran_FOUND) - target_link_libraries(cmeps PRIVATE OpenMP::OpenMP_Fortran) -endif() diff --git a/CMakeLists.txt b/CMakeLists.txt index 214ecf8..b6a25be 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,7 +5,7 @@ cmake_minimum_required(VERSION 3.18) # Basic project definition # #]==============================================================================] -project(ACCESS-OM3 VERSION 0.2.0 +project(ACCESS-OM3 VERSION "0.2.0" HOMEPAGE_URL https://github.com/COSIMA/access-om3 DESCRIPTION "Global coupled ocean - sea ice - wave model" LANGUAGES C Fortran) @@ -15,7 +15,7 @@ project(ACCESS-OM3 VERSION 0.2.0 #]==============================================================================] # Configurations to build -list(APPEND KNOWN_CONFIGURATIONS MOM6 CICE6 WW3 MOM6-CICE6 CICE6-WW3 MOM6-WW3 MOM6-CICE6-WW3) +list(APPEND KnownConfigurations MOM6 CICE6 WW3 MOM6-CICE6 CICE6-WW3 MOM6-WW3 MOM6-CICE6-WW3) set(OM3_ENABLE_MOM6 OFF CACHE BOOL "Build MOM6 configuration") set(OM3_ENABLE_CICE6 OFF CACHE BOOL "Build CICE6 configuration") @@ -123,7 +123,7 @@ find_package(PIO 2.5.3 REQUIRED COMPONENTS C Fortran) # Some code shared by several components add_subdirectory(share) -# Components +## Components # Data component (CDEPS) add_subdirectory(CDEPS) @@ -147,26 +147,26 @@ endif() add_subdirectory(CMEPS) # Add executable for each enabled configuration -foreach(CONF IN LISTS KNOWN_CONFIGURATIONS) +foreach(CONF IN LISTS KnownConfigurations) if(NOT OM3_ENABLE_${CONF}) continue() endif() - set(COMPONENTS_TARGETS "") + set(ComponentsTargets "") if(OM3_${CONF} MATCHES MOM6) - list(APPEND COMPONENTS_TARGETS OM3_mom6) + list(APPEND ComponentsTargets OM3_mom6) else() - list(APPEND COMPONENTS_TARGETS OM3_cdeps_docn) + list(APPEND ComponentsTargets OM3_cdeps_docn) endif() if(OM3_${CONF} MATCHES CICE6) - list(APPEND COMPONENTS_TARGETS OM3_cice) + list(APPEND ComponentsTargets OM3_cice) else() - list(APPEND COMPONENTS_TARGETS OM3_cdeps_dice) + list(APPEND ComponentsTargets OM3_cdeps_dice) endif() if(OM3_${CONF} MATCHES WW3) - list(APPEND COMPONENTS_TARGETS OM3_ww3) + list(APPEND ComponentsTargets OM3_ww3) else() - list(APPEND COMPONENTS_TARGETS OM3_cdeps_dwav) + list(APPEND ComponentsTargets OM3_cdeps_dwav) endif() # We use the CESM driver from CMEPS @@ -175,7 +175,10 @@ foreach(CONF IN LISTS KNOWN_CONFIGURATIONS) CMEPS/CMEPS/cesm/driver/ensemble_driver.F90 CMEPS/CMEPS/cesm/driver/esm_time_mod.F90 ) - target_link_libraries(OM3_cesm_driver_${CONF} PUBLIC OM3_share ${COMPONENTS_TARGETS} OM3_cmeps OM3_cdeps_common OM3_cdeps_drof OM3_cdeps_datm esmf PIO::PIO_Fortran) + target_link_libraries(OM3_cesm_driver_${CONF} + PUBLIC esmf + PRIVATE OM3_share OM3_timing ${ComponentsTargets} OM3_cmeps OM3_cdeps_common OM3_cdeps_drof OM3_cdeps_datm PIO::PIO_Fortran + ) target_compile_definitions(OM3_cesm_driver_${CONF} PRIVATE MED_PRESENT ATM_PRESENT ICE_PRESENT @@ -186,11 +189,12 @@ foreach(CONF IN LISTS KNOWN_CONFIGURATIONS) ) add_executable(OM3_${CONF} CMEPS/CMEPS/cesm/driver/esmApp.F90) - target_link_libraries(OM3_${CONF} PRIVATE OM3_cesm_driver_${CONF} esmf PIO::PIO_Fortran NetCDF::NetCDF_Fortran) + target_link_libraries(OM3_${CONF} PRIVATE OM3_cesm_driver_${CONF} OM3_share esmf) set_target_properties(OM3_${CONF} PROPERTIES - OUTPUT_NAME access-om3-${CONF} - ) + LINKER_LANGUAGE Fortran + OUTPUT_NAME access-om3-${CONF} + ) endforeach() #[==============================================================================[ diff --git a/MOM6/CMakeLists.txt b/MOM6/CMakeLists.txt index 9ee7547..e199e7b 100644 --- a/MOM6/CMakeLists.txt +++ b/MOM6/CMakeLists.txt @@ -1,10 +1,13 @@ -### MOM6 Fortran compiler flags +### Global definitions, flags, etc + +## MOM6 Fortran compiler flags if(CMAKE_Fortran_COMPILER_ID MATCHES "GNU") set(fortran_compile_flags -fdefault-real-8 -fdefault-double-8) elseif(CMAKE_Fortran_COMPILER_ID MATCHES "Intel") set(fortran_compile_flags -r8) endif() +## Configuration options option(OM3_MOM_SYMMETRIC "Use symmetric memory" OFF) if(OM3_MOM_SYMMETRIC) set(MOM_memory "dynamic_symmetric") @@ -12,16 +15,315 @@ else() set(MOM_memory "dynamic_nonsymmetric") endif() -include("mom6_files.cmake") +### Targets -### Create target library and set PUBLIC interfaces on the library -add_fortran_library(OM3_mom6 mod STATIC ${mom6_src_files}) -target_include_directories(OM3_mom6 PUBLIC $ - $) +## MOM6 library +add_fortran_library(OM3_mom6 mod STATIC) +target_include_directories(OM3_mom6 PRIVATE $ + $) target_compile_options(OM3_mom6 PRIVATE "$<$:${fortran_compile_flags}>") -target_link_libraries(OM3_mom6 PUBLIC OM3_share - OM3_cmeps - FMS::fms_r8 - esmf - NetCDF::NetCDF_Fortran) +target_link_libraries(OM3_mom6 + PUBLIC esmf + PRIVATE OM3_share OM3_cmeps FMS::fms_r8 NetCDF::NetCDF_Fortran +) +target_sources(OM3_mom6 PRIVATE + MOM6/src/ALE/coord_adapt.F90 + MOM6/src/ALE/coord_hycom.F90 + MOM6/src/ALE/coord_rho.F90 + MOM6/src/ALE/coord_sigma.F90 + MOM6/src/ALE/coord_slight.F90 + MOM6/src/ALE/coord_zlike.F90 + MOM6/src/ALE/MOM_ALE.F90 + MOM6/src/ALE/MOM_hybgen_regrid.F90 + MOM6/src/ALE/MOM_hybgen_remap.F90 + MOM6/src/ALE/MOM_hybgen_unmix.F90 + MOM6/src/ALE/MOM_regridding.F90 + MOM6/src/ALE/MOM_remapping.F90 + MOM6/src/ALE/P1M_functions.F90 + MOM6/src/ALE/P3M_functions.F90 + MOM6/src/ALE/PCM_functions.F90 + MOM6/src/ALE/PLM_functions.F90 + MOM6/src/ALE/polynomial_functions.F90 + MOM6/src/ALE/PPM_functions.F90 + MOM6/src/ALE/PQM_functions.F90 + MOM6/src/ALE/regrid_consts.F90 + MOM6/src/ALE/regrid_edge_values.F90 + MOM6/src/ALE/regrid_interp.F90 + MOM6/src/ALE/regrid_solvers.F90 + + MOM6/src/core/MOM_barotropic.F90 + MOM6/src/core/MOM_boundary_update.F90 + MOM6/src/core/MOM_check_scaling.F90 + MOM6/src/core/MOM_checksum_packages.F90 + MOM6/src/core/MOM_continuity.F90 + MOM6/src/core/MOM_continuity_PPM.F90 + MOM6/src/core/MOM_CoriolisAdv.F90 + MOM6/src/core/MOM_density_integrals.F90 + MOM6/src/core/MOM_dynamics_split_RK2.F90 + MOM6/src/core/MOM_dynamics_unsplit.F90 + MOM6/src/core/MOM_dynamics_unsplit_RK2.F90 + MOM6/src/core/MOM.F90 + MOM6/src/core/MOM_forcing_type.F90 + MOM6/src/core/MOM_grid.F90 + MOM6/src/core/MOM_interface_heights.F90 + MOM6/src/core/MOM_isopycnal_slopes.F90 + MOM6/src/core/MOM_open_boundary.F90 + MOM6/src/core/MOM_porous_barriers.F90 + MOM6/src/core/MOM_PressureForce.F90 + MOM6/src/core/MOM_PressureForce_FV.F90 + MOM6/src/core/MOM_PressureForce_Montgomery.F90 + MOM6/src/core/MOM_stoch_eos.F90 + MOM6/src/core/MOM_transcribe_grid.F90 + MOM6/src/core/MOM_unit_tests.F90 + MOM6/src/core/MOM_variables.F90 + MOM6/src/core/MOM_verticalGrid.F90 + + MOM6/src/diagnostics/MOM_debugging.F90 + MOM6/src/diagnostics/MOM_diagnostics.F90 + MOM6/src/diagnostics/MOM_obsolete_diagnostics.F90 + MOM6/src/diagnostics/MOM_obsolete_params.F90 + MOM6/src/diagnostics/MOM_PointAccel.F90 + MOM6/src/diagnostics/MOM_spatial_means.F90 + MOM6/src/diagnostics/MOM_sum_output.F90 + MOM6/src/diagnostics/MOM_wave_speed.F90 + MOM6/src/diagnostics/MOM_wave_structure.F90 + + MOM6/src/equation_of_state/MOM_EOS.F90 + MOM6/src/equation_of_state/MOM_EOS_linear.F90 + MOM6/src/equation_of_state/MOM_EOS_NEMO.F90 + MOM6/src/equation_of_state/MOM_EOS_TEOS10.F90 + MOM6/src/equation_of_state/MOM_EOS_UNESCO.F90 + MOM6/src/equation_of_state/MOM_EOS_Wright.F90 + MOM6/src/equation_of_state/MOM_TFreeze.F90 + + MOM6/src/equation_of_state/TEOS10/gsw_chem_potential_water_t_exact.f90 + MOM6/src/equation_of_state/TEOS10/gsw_ct_freezing_exact.f90 + MOM6/src/equation_of_state/TEOS10/gsw_ct_freezing_poly.f90 + MOM6/src/equation_of_state/TEOS10/gsw_ct_from_pt.f90 + MOM6/src/equation_of_state/TEOS10/gsw_ct_from_t.f90 + MOM6/src/equation_of_state/TEOS10/gsw_entropy_part.f90 + MOM6/src/equation_of_state/TEOS10/gsw_entropy_part_zerop.f90 + MOM6/src/equation_of_state/TEOS10/gsw_gibbs.f90 + MOM6/src/equation_of_state/TEOS10/gsw_gibbs_ice.f90 + MOM6/src/equation_of_state/TEOS10/gsw_gibbs_pt0_pt0.f90 + MOM6/src/equation_of_state/TEOS10/gsw_mod_error_functions.f90 + MOM6/src/equation_of_state/TEOS10/gsw_mod_freezing_poly_coefficients.f90 + MOM6/src/equation_of_state/TEOS10/gsw_mod_gibbs_ice_coefficients.f90 + MOM6/src/equation_of_state/TEOS10/gsw_mod_kinds.f90 + MOM6/src/equation_of_state/TEOS10/gsw_mod_specvol_coefficients.f90 + MOM6/src/equation_of_state/TEOS10/gsw_mod_teos10_constants.f90 + MOM6/src/equation_of_state/TEOS10/gsw_mod_toolbox.f90 + MOM6/src/equation_of_state/TEOS10/gsw_pt0_from_t.f90 + MOM6/src/equation_of_state/TEOS10/gsw_pt_from_ct.f90 + MOM6/src/equation_of_state/TEOS10/gsw_pt_from_t.f90 + MOM6/src/equation_of_state/TEOS10/gsw_rho.f90 + MOM6/src/equation_of_state/TEOS10/gsw_rho_first_derivatives.f90 + MOM6/src/equation_of_state/TEOS10/gsw_rho_second_derivatives.f90 + MOM6/src/equation_of_state/TEOS10/gsw_sp_from_sr.f90 + MOM6/src/equation_of_state/TEOS10/gsw_sr_from_sp.f90 + MOM6/src/equation_of_state/TEOS10/gsw_specvol.f90 + MOM6/src/equation_of_state/TEOS10/gsw_specvol_first_derivatives.f90 + MOM6/src/equation_of_state/TEOS10/gsw_specvol_second_derivatives.f90 + MOM6/src/equation_of_state/TEOS10/gsw_t_deriv_chem_potential_water_t_exact.f90 + MOM6/src/equation_of_state/TEOS10/gsw_t_freezing_exact.f90 + MOM6/src/equation_of_state/TEOS10/gsw_t_freezing_poly.f90 + MOM6/src/equation_of_state/TEOS10/gsw_t_from_ct.f90 + + MOM6/src/framework/MOM_array_transform.F90 + MOM6/src/framework/MOM_checksums.F90 + MOM6/src/framework/MOM_coms.F90 + MOM6/src/framework/MOM_coupler_types.F90 + MOM6/src/framework/MOM_cpu_clock.F90 + MOM6/src/framework/MOM_data_override.F90 + MOM6/src/framework/MOM_diag_mediator.F90 + MOM6/src/framework/MOM_diag_remap.F90 + MOM6/src/framework/MOM_diag_vkernels.F90 + MOM6/src/framework/MOM_document.F90 + MOM6/src/framework/MOM_domains.F90 + MOM6/src/framework/MOM_dyn_horgrid.F90 + MOM6/src/framework/MOM_ensemble_manager.F90 + MOM6/src/framework/MOM_error_handler.F90 + MOM6/src/framework/MOM_file_parser.F90 + MOM6/src/framework/MOM_get_input.F90 + MOM6/src/framework/MOM_hor_index.F90 + MOM6/src/framework/MOM_horizontal_regridding.F90 + MOM6/src/framework/MOM_interpolate.F90 + MOM6/src/framework/MOM_intrinsic_functions.F90 + MOM6/src/framework/MOM_io.F90 + MOM6/src/framework/MOM_memory_macros.h + MOM6/src/framework/MOM_random.F90 + MOM6/src/framework/MOM_restart.F90 + MOM6/src/framework/MOM_safe_alloc.F90 + MOM6/src/framework/MOM_string_functions.F90 + MOM6/src/framework/MOM_unique_scales.F90 + MOM6/src/framework/MOM_unit_scaling.F90 + MOM6/src/framework/MOM_write_cputime.F90 + MOM6/src/framework/posix.F90 + + MOM6/src/ice_shelf/MOM_ice_shelf_diag_mediator.F90 + MOM6/src/ice_shelf/MOM_ice_shelf_dynamics.F90 + MOM6/src/ice_shelf/MOM_ice_shelf.F90 + MOM6/src/ice_shelf/MOM_ice_shelf_initialize.F90 + MOM6/src/ice_shelf/MOM_ice_shelf_state.F90 + MOM6/src/ice_shelf/MOM_marine_ice.F90 + MOM6/src/ice_shelf/user_shelf_init.F90 + + MOM6/src/initialization/MOM_coord_initialization.F90 + MOM6/src/initialization/MOM_fixed_initialization.F90 + MOM6/src/initialization/MOM_grid_initialize.F90 + MOM6/src/initialization/MOM_shared_initialization.F90 + MOM6/src/initialization/MOM_state_initialization.F90 + MOM6/src/initialization/MOM_tracer_initialization_from_Z.F90 + + MOM6/src/ocean_data_assim/MOM_oda_driver.F90 + MOM6/src/ocean_data_assim/MOM_oda_incupd.F90 + + MOM6/src/parameterizations/CVmix/cvmix_background.F90 + MOM6/src/parameterizations/CVmix/cvmix_convection.F90 + MOM6/src/parameterizations/CVmix/cvmix_ddiff.F90 + MOM6/src/parameterizations/CVmix/cvmix_kinds_and_types.F90 + MOM6/src/parameterizations/CVmix/cvmix_kpp.F90 + MOM6/src/parameterizations/CVmix/cvmix_math.F90 + MOM6/src/parameterizations/CVmix/cvmix_put_get.F90 + MOM6/src/parameterizations/CVmix/cvmix_shear.F90 + MOM6/src/parameterizations/CVmix/cvmix_tidal.F90 + MOM6/src/parameterizations/CVmix/cvmix_utils.F90 + + MOM6/src/parameterizations/lateral/MOM_hor_visc.F90 + MOM6/src/parameterizations/lateral/MOM_interface_filter.F90 + MOM6/src/parameterizations/lateral/MOM_internal_tides.F90 + MOM6/src/parameterizations/lateral/MOM_lateral_mixing_coeffs.F90 + MOM6/src/parameterizations/lateral/MOM_load_love_numbers.F90 + MOM6/src/parameterizations/lateral/MOM_MEKE.F90 + MOM6/src/parameterizations/lateral/MOM_MEKE_types.F90 + MOM6/src/parameterizations/lateral/MOM_mixed_layer_restrat.F90 + MOM6/src/parameterizations/lateral/MOM_spherical_harmonics.F90 + MOM6/src/parameterizations/lateral/MOM_thickness_diffuse.F90 + MOM6/src/parameterizations/lateral/MOM_tidal_forcing.F90 + + MOM6/src/parameterizations/stochastic/MOM_stochastics.F90 + + MOM6/src/parameterizations/vertical/MOM_ALE_sponge.F90 + MOM6/src/parameterizations/vertical/MOM_bkgnd_mixing.F90 + MOM6/src/parameterizations/vertical/MOM_bulk_mixed_layer.F90 + MOM6/src/parameterizations/vertical/MOM_CVMix_conv.F90 + MOM6/src/parameterizations/vertical/MOM_CVMix_ddiff.F90 + MOM6/src/parameterizations/vertical/MOM_CVMix_KPP.F90 + MOM6/src/parameterizations/vertical/MOM_CVMix_shear.F90 + MOM6/src/parameterizations/vertical/MOM_diabatic_aux.F90 + MOM6/src/parameterizations/vertical/MOM_diabatic_driver.F90 + MOM6/src/parameterizations/vertical/MOM_diapyc_energy_req.F90 + MOM6/src/parameterizations/vertical/MOM_energetic_PBL.F90 + MOM6/src/parameterizations/vertical/MOM_entrain_diffusive.F90 + MOM6/src/parameterizations/vertical/MOM_full_convection.F90 + MOM6/src/parameterizations/vertical/MOM_geothermal.F90 + MOM6/src/parameterizations/vertical/MOM_internal_tide_input.F90 + MOM6/src/parameterizations/vertical/MOM_kappa_shear.F90 + MOM6/src/parameterizations/vertical/MOM_opacity.F90 + MOM6/src/parameterizations/vertical/MOM_regularize_layers.F90 + MOM6/src/parameterizations/vertical/MOM_set_diffusivity.F90 + MOM6/src/parameterizations/vertical/MOM_set_viscosity.F90 + MOM6/src/parameterizations/vertical/MOM_sponge.F90 + MOM6/src/parameterizations/vertical/MOM_tidal_mixing.F90 + MOM6/src/parameterizations/vertical/MOM_vert_friction.F90 + + MOM6/src/tracer/advection_test_tracer.F90 + MOM6/src/tracer/boundary_impulse_tracer.F90 + MOM6/src/tracer/DOME_tracer.F90 + MOM6/src/tracer/dyed_obc_tracer.F90 + MOM6/src/tracer/dye_example.F90 + MOM6/src/tracer/ideal_age_example.F90 + MOM6/src/tracer/ISOMIP_tracer.F90 + MOM6/src/tracer/MOM_CFC_cap.F90 + MOM6/src/tracer/MOM_generic_tracer.F90 + MOM6/src/tracer/MOM_hor_bnd_diffusion.F90 + MOM6/src/tracer/MOM_neutral_diffusion.F90 + MOM6/src/tracer/MOM_OCMIP2_CFC.F90 + MOM6/src/tracer/MOM_offline_aux.F90 + MOM6/src/tracer/MOM_offline_main.F90 + MOM6/src/tracer/MOM_tracer_advect.F90 + MOM6/src/tracer/MOM_tracer_diabatic.F90 + MOM6/src/tracer/MOM_tracer_flow_control.F90 + MOM6/src/tracer/MOM_tracer_hor_diff.F90 + MOM6/src/tracer/MOM_tracer_registry.F90 + MOM6/src/tracer/MOM_tracer_types.F90 + MOM6/src/tracer/MOM_tracer_Z_init.F90 + MOM6/src/tracer/nw2_tracers.F90 + MOM6/src/tracer/oil_tracer.F90 + MOM6/src/tracer/pseudo_salt_tracer.F90 + MOM6/src/tracer/RGC_tracer.F90 + MOM6/src/tracer/tracer_example.F90 + + MOM6/src/user/adjustment_initialization.F90 + MOM6/src/user/baroclinic_zone_initialization.F90 + MOM6/src/user/basin_builder.F90 + MOM6/src/user/benchmark_initialization.F90 + MOM6/src/user/BFB_initialization.F90 + MOM6/src/user/BFB_surface_forcing.F90 + MOM6/src/user/circle_obcs_initialization.F90 + MOM6/src/user/dense_water_initialization.F90 + MOM6/src/user/DOME2d_initialization.F90 + MOM6/src/user/DOME_initialization.F90 + MOM6/src/user/dumbbell_initialization.F90 + MOM6/src/user/dumbbell_surface_forcing.F90 + MOM6/src/user/dyed_channel_initialization.F90 + MOM6/src/user/dyed_obcs_initialization.F90 + MOM6/src/user/external_gwave_initialization.F90 + MOM6/src/user/Idealized_Hurricane.F90 + MOM6/src/user/ISOMIP_initialization.F90 + MOM6/src/user/Kelvin_initialization.F90 + MOM6/src/user/lock_exchange_initialization.F90 + MOM6/src/user/MOM_controlled_forcing.F90 + MOM6/src/user/MOM_wave_interface.F90 + MOM6/src/user/Neverworld_initialization.F90 + MOM6/src/user/Phillips_initialization.F90 + MOM6/src/user/RGC_initialization.F90 + MOM6/src/user/Rossby_front_2d_initialization.F90 + MOM6/src/user/SCM_CVMix_tests.F90 + MOM6/src/user/seamount_initialization.F90 + MOM6/src/user/shelfwave_initialization.F90 + MOM6/src/user/sloshing_initialization.F90 + MOM6/src/user/soliton_initialization.F90 + MOM6/src/user/supercritical_initialization.F90 + MOM6/src/user/tidal_bay_initialization.F90 + MOM6/src/user/user_change_diffusivity.F90 + MOM6/src/user/user_initialization.F90 + MOM6/src/user/user_revise_forcing.F90 + + MOM6/config_src/external/database_comms/MOM_database_comms.F90 + MOM6/config_src/external/database_comms/database_client_interface.F90 + + MOM6/config_src/external/drifters/MOM_particles.F90 + MOM6/config_src/external/drifters/MOM_particles_types.F90 + MOM6/config_src/external/GFDL_ocean_BGC/FMS_coupler_util.F90 + MOM6/config_src/external/GFDL_ocean_BGC/generic_tracer.F90 + MOM6/config_src/external/GFDL_ocean_BGC/generic_tracer_utils.F90 + MOM6/config_src/external/ODA_hooks/kdtree.f90 + MOM6/config_src/external/ODA_hooks/ocean_da_core.F90 + MOM6/config_src/external/ODA_hooks/ocean_da_types.F90 + MOM6/config_src/external/ODA_hooks/write_ocean_obs.F90 + + MOM6/config_src/external/stochastic_physics/get_stochy_pattern.F90 + MOM6/config_src/external/stochastic_physics/stochastic_physics.F90 + + MOM6/config_src/infra/FMS1/MOM_coms_infra.F90 + MOM6/config_src/infra/FMS1/MOM_constants.F90 + MOM6/config_src/infra/FMS1/MOM_couplertype_infra.F90 + MOM6/config_src/infra/FMS1/MOM_cpu_clock_infra.F90 + MOM6/config_src/infra/FMS1/MOM_data_override_infra.F90 + MOM6/config_src/infra/FMS1/MOM_diag_manager_infra.F90 + MOM6/config_src/infra/FMS1/MOM_domain_infra.F90 + MOM6/config_src/infra/FMS1/MOM_ensemble_manager_infra.F90 + MOM6/config_src/infra/FMS1/MOM_error_infra.F90 + MOM6/config_src/infra/FMS1/MOM_interp_infra.F90 + MOM6/config_src/infra/FMS1/MOM_io_infra.F90 + MOM6/config_src/infra/FMS1/MOM_time_manager.F90 + + MOM6/config_src/drivers/nuopc_cap/mom_cap_methods.F90 + MOM6/config_src/drivers/nuopc_cap/mom_cap_time.F90 + MOM6/config_src/drivers/nuopc_cap/mom_ocean_model_nuopc.F90 + MOM6/config_src/drivers/nuopc_cap/mom_surface_forcing_nuopc.F90 + MOM6/config_src/drivers/nuopc_cap/ocn_comp_NUOPC.F90 + MOM6/config_src/drivers/nuopc_cap/time_utils.F90 +) add_patched_source(OM3_mom6 MOM6/config_src/drivers/nuopc_cap/mom_cap.F90) diff --git a/MOM6/mom6_files.cmake b/MOM6/mom6_files.cmake deleted file mode 100644 index a3f6baa..0000000 --- a/MOM6/mom6_files.cmake +++ /dev/null @@ -1,308 +0,0 @@ -list(APPEND mom6_src_files - MOM6/src/ALE/coord_adapt.F90 - MOM6/src/ALE/coord_hycom.F90 - MOM6/src/ALE/coord_rho.F90 - MOM6/src/ALE/coord_sigma.F90 - MOM6/src/ALE/coord_slight.F90 - MOM6/src/ALE/coord_zlike.F90 - MOM6/src/ALE/MOM_ALE.F90 - MOM6/src/ALE/MOM_hybgen_regrid.F90 - MOM6/src/ALE/MOM_hybgen_remap.F90 - MOM6/src/ALE/MOM_hybgen_unmix.F90 - MOM6/src/ALE/MOM_regridding.F90 - MOM6/src/ALE/MOM_remapping.F90 - MOM6/src/ALE/P1M_functions.F90 - MOM6/src/ALE/P3M_functions.F90 - MOM6/src/ALE/PCM_functions.F90 - MOM6/src/ALE/PLM_functions.F90 - MOM6/src/ALE/polynomial_functions.F90 - MOM6/src/ALE/PPM_functions.F90 - MOM6/src/ALE/PQM_functions.F90 - MOM6/src/ALE/regrid_consts.F90 - MOM6/src/ALE/regrid_edge_values.F90 - MOM6/src/ALE/regrid_interp.F90 - MOM6/src/ALE/regrid_solvers.F90 - - MOM6/src/core/MOM_barotropic.F90 - MOM6/src/core/MOM_boundary_update.F90 - MOM6/src/core/MOM_check_scaling.F90 - MOM6/src/core/MOM_checksum_packages.F90 - MOM6/src/core/MOM_continuity.F90 - MOM6/src/core/MOM_continuity_PPM.F90 - MOM6/src/core/MOM_CoriolisAdv.F90 - MOM6/src/core/MOM_density_integrals.F90 - MOM6/src/core/MOM_dynamics_split_RK2.F90 - MOM6/src/core/MOM_dynamics_unsplit.F90 - MOM6/src/core/MOM_dynamics_unsplit_RK2.F90 - MOM6/src/core/MOM.F90 - MOM6/src/core/MOM_forcing_type.F90 - MOM6/src/core/MOM_grid.F90 - MOM6/src/core/MOM_interface_heights.F90 - MOM6/src/core/MOM_isopycnal_slopes.F90 - MOM6/src/core/MOM_open_boundary.F90 - MOM6/src/core/MOM_porous_barriers.F90 - MOM6/src/core/MOM_PressureForce.F90 - MOM6/src/core/MOM_PressureForce_FV.F90 - MOM6/src/core/MOM_PressureForce_Montgomery.F90 - MOM6/src/core/MOM_stoch_eos.F90 - MOM6/src/core/MOM_transcribe_grid.F90 - MOM6/src/core/MOM_unit_tests.F90 - MOM6/src/core/MOM_variables.F90 - MOM6/src/core/MOM_verticalGrid.F90 - - MOM6/src/diagnostics/MOM_debugging.F90 - MOM6/src/diagnostics/MOM_diagnostics.F90 - MOM6/src/diagnostics/MOM_obsolete_diagnostics.F90 - MOM6/src/diagnostics/MOM_obsolete_params.F90 - MOM6/src/diagnostics/MOM_PointAccel.F90 - MOM6/src/diagnostics/MOM_spatial_means.F90 - MOM6/src/diagnostics/MOM_sum_output.F90 - MOM6/src/diagnostics/MOM_wave_speed.F90 - MOM6/src/diagnostics/MOM_wave_structure.F90 - - MOM6/src/equation_of_state/MOM_EOS.F90 - MOM6/src/equation_of_state/MOM_EOS_linear.F90 - MOM6/src/equation_of_state/MOM_EOS_NEMO.F90 - MOM6/src/equation_of_state/MOM_EOS_TEOS10.F90 - MOM6/src/equation_of_state/MOM_EOS_UNESCO.F90 - MOM6/src/equation_of_state/MOM_EOS_Wright.F90 - MOM6/src/equation_of_state/MOM_TFreeze.F90 - - MOM6/src/equation_of_state/TEOS10/gsw_chem_potential_water_t_exact.f90 - MOM6/src/equation_of_state/TEOS10/gsw_ct_freezing_exact.f90 - MOM6/src/equation_of_state/TEOS10/gsw_ct_freezing_poly.f90 - MOM6/src/equation_of_state/TEOS10/gsw_ct_from_pt.f90 - MOM6/src/equation_of_state/TEOS10/gsw_ct_from_t.f90 - MOM6/src/equation_of_state/TEOS10/gsw_entropy_part.f90 - MOM6/src/equation_of_state/TEOS10/gsw_entropy_part_zerop.f90 - MOM6/src/equation_of_state/TEOS10/gsw_gibbs.f90 - MOM6/src/equation_of_state/TEOS10/gsw_gibbs_ice.f90 - MOM6/src/equation_of_state/TEOS10/gsw_gibbs_pt0_pt0.f90 - MOM6/src/equation_of_state/TEOS10/gsw_mod_error_functions.f90 - MOM6/src/equation_of_state/TEOS10/gsw_mod_freezing_poly_coefficients.f90 - MOM6/src/equation_of_state/TEOS10/gsw_mod_gibbs_ice_coefficients.f90 - MOM6/src/equation_of_state/TEOS10/gsw_mod_kinds.f90 - MOM6/src/equation_of_state/TEOS10/gsw_mod_specvol_coefficients.f90 - MOM6/src/equation_of_state/TEOS10/gsw_mod_teos10_constants.f90 - MOM6/src/equation_of_state/TEOS10/gsw_mod_toolbox.f90 - MOM6/src/equation_of_state/TEOS10/gsw_pt0_from_t.f90 - MOM6/src/equation_of_state/TEOS10/gsw_pt_from_ct.f90 - MOM6/src/equation_of_state/TEOS10/gsw_pt_from_t.f90 - MOM6/src/equation_of_state/TEOS10/gsw_rho.f90 - MOM6/src/equation_of_state/TEOS10/gsw_rho_first_derivatives.f90 - MOM6/src/equation_of_state/TEOS10/gsw_rho_second_derivatives.f90 - MOM6/src/equation_of_state/TEOS10/gsw_sp_from_sr.f90 - MOM6/src/equation_of_state/TEOS10/gsw_sr_from_sp.f90 - MOM6/src/equation_of_state/TEOS10/gsw_specvol.f90 - MOM6/src/equation_of_state/TEOS10/gsw_specvol_first_derivatives.f90 - MOM6/src/equation_of_state/TEOS10/gsw_specvol_second_derivatives.f90 - MOM6/src/equation_of_state/TEOS10/gsw_t_deriv_chem_potential_water_t_exact.f90 - MOM6/src/equation_of_state/TEOS10/gsw_t_freezing_exact.f90 - MOM6/src/equation_of_state/TEOS10/gsw_t_freezing_poly.f90 - MOM6/src/equation_of_state/TEOS10/gsw_t_from_ct.f90 - - MOM6/src/framework/MOM_array_transform.F90 - MOM6/src/framework/MOM_checksums.F90 - MOM6/src/framework/MOM_coms.F90 - MOM6/src/framework/MOM_coupler_types.F90 - MOM6/src/framework/MOM_cpu_clock.F90 - MOM6/src/framework/MOM_data_override.F90 - MOM6/src/framework/MOM_diag_mediator.F90 - MOM6/src/framework/MOM_diag_remap.F90 - MOM6/src/framework/MOM_diag_vkernels.F90 - MOM6/src/framework/MOM_document.F90 - MOM6/src/framework/MOM_domains.F90 - MOM6/src/framework/MOM_dyn_horgrid.F90 - MOM6/src/framework/MOM_ensemble_manager.F90 - MOM6/src/framework/MOM_error_handler.F90 - MOM6/src/framework/MOM_file_parser.F90 - MOM6/src/framework/MOM_get_input.F90 - MOM6/src/framework/MOM_hor_index.F90 - MOM6/src/framework/MOM_horizontal_regridding.F90 - MOM6/src/framework/MOM_interpolate.F90 - MOM6/src/framework/MOM_intrinsic_functions.F90 - MOM6/src/framework/MOM_io.F90 - MOM6/src/framework/MOM_memory_macros.h - MOM6/src/framework/MOM_random.F90 - MOM6/src/framework/MOM_restart.F90 - MOM6/src/framework/MOM_safe_alloc.F90 - MOM6/src/framework/MOM_string_functions.F90 - MOM6/src/framework/MOM_unique_scales.F90 - MOM6/src/framework/MOM_unit_scaling.F90 - MOM6/src/framework/MOM_write_cputime.F90 - MOM6/src/framework/posix.F90 - - MOM6/src/ice_shelf/MOM_ice_shelf_diag_mediator.F90 - MOM6/src/ice_shelf/MOM_ice_shelf_dynamics.F90 - MOM6/src/ice_shelf/MOM_ice_shelf.F90 - MOM6/src/ice_shelf/MOM_ice_shelf_initialize.F90 - MOM6/src/ice_shelf/MOM_ice_shelf_state.F90 - MOM6/src/ice_shelf/MOM_marine_ice.F90 - MOM6/src/ice_shelf/user_shelf_init.F90 - - MOM6/src/initialization/MOM_coord_initialization.F90 - MOM6/src/initialization/MOM_fixed_initialization.F90 - MOM6/src/initialization/MOM_grid_initialize.F90 - MOM6/src/initialization/MOM_shared_initialization.F90 - MOM6/src/initialization/MOM_state_initialization.F90 - MOM6/src/initialization/MOM_tracer_initialization_from_Z.F90 - - MOM6/src/ocean_data_assim/MOM_oda_driver.F90 - MOM6/src/ocean_data_assim/MOM_oda_incupd.F90 - - MOM6/src/parameterizations/CVmix/cvmix_background.F90 - MOM6/src/parameterizations/CVmix/cvmix_convection.F90 - MOM6/src/parameterizations/CVmix/cvmix_ddiff.F90 - MOM6/src/parameterizations/CVmix/cvmix_kinds_and_types.F90 - MOM6/src/parameterizations/CVmix/cvmix_kpp.F90 - MOM6/src/parameterizations/CVmix/cvmix_math.F90 - MOM6/src/parameterizations/CVmix/cvmix_put_get.F90 - MOM6/src/parameterizations/CVmix/cvmix_shear.F90 - MOM6/src/parameterizations/CVmix/cvmix_tidal.F90 - MOM6/src/parameterizations/CVmix/cvmix_utils.F90 - - MOM6/src/parameterizations/lateral/MOM_hor_visc.F90 - MOM6/src/parameterizations/lateral/MOM_interface_filter.F90 - MOM6/src/parameterizations/lateral/MOM_internal_tides.F90 - MOM6/src/parameterizations/lateral/MOM_lateral_mixing_coeffs.F90 - MOM6/src/parameterizations/lateral/MOM_load_love_numbers.F90 - MOM6/src/parameterizations/lateral/MOM_MEKE.F90 - MOM6/src/parameterizations/lateral/MOM_MEKE_types.F90 - MOM6/src/parameterizations/lateral/MOM_mixed_layer_restrat.F90 - MOM6/src/parameterizations/lateral/MOM_spherical_harmonics.F90 - MOM6/src/parameterizations/lateral/MOM_thickness_diffuse.F90 - MOM6/src/parameterizations/lateral/MOM_tidal_forcing.F90 - - MOM6/src/parameterizations/stochastic/MOM_stochastics.F90 - - MOM6/src/parameterizations/vertical/MOM_ALE_sponge.F90 - MOM6/src/parameterizations/vertical/MOM_bkgnd_mixing.F90 - MOM6/src/parameterizations/vertical/MOM_bulk_mixed_layer.F90 - MOM6/src/parameterizations/vertical/MOM_CVMix_conv.F90 - MOM6/src/parameterizations/vertical/MOM_CVMix_ddiff.F90 - MOM6/src/parameterizations/vertical/MOM_CVMix_KPP.F90 - MOM6/src/parameterizations/vertical/MOM_CVMix_shear.F90 - MOM6/src/parameterizations/vertical/MOM_diabatic_aux.F90 - MOM6/src/parameterizations/vertical/MOM_diabatic_driver.F90 - MOM6/src/parameterizations/vertical/MOM_diapyc_energy_req.F90 - MOM6/src/parameterizations/vertical/MOM_energetic_PBL.F90 - MOM6/src/parameterizations/vertical/MOM_entrain_diffusive.F90 - MOM6/src/parameterizations/vertical/MOM_full_convection.F90 - MOM6/src/parameterizations/vertical/MOM_geothermal.F90 - MOM6/src/parameterizations/vertical/MOM_internal_tide_input.F90 - MOM6/src/parameterizations/vertical/MOM_kappa_shear.F90 - MOM6/src/parameterizations/vertical/MOM_opacity.F90 - MOM6/src/parameterizations/vertical/MOM_regularize_layers.F90 - MOM6/src/parameterizations/vertical/MOM_set_diffusivity.F90 - MOM6/src/parameterizations/vertical/MOM_set_viscosity.F90 - MOM6/src/parameterizations/vertical/MOM_sponge.F90 - MOM6/src/parameterizations/vertical/MOM_tidal_mixing.F90 - MOM6/src/parameterizations/vertical/MOM_vert_friction.F90 - - MOM6/src/tracer/advection_test_tracer.F90 - MOM6/src/tracer/boundary_impulse_tracer.F90 - MOM6/src/tracer/DOME_tracer.F90 - MOM6/src/tracer/dyed_obc_tracer.F90 - MOM6/src/tracer/dye_example.F90 - MOM6/src/tracer/ideal_age_example.F90 - MOM6/src/tracer/ISOMIP_tracer.F90 - MOM6/src/tracer/MOM_CFC_cap.F90 - MOM6/src/tracer/MOM_generic_tracer.F90 - MOM6/src/tracer/MOM_hor_bnd_diffusion.F90 - MOM6/src/tracer/MOM_neutral_diffusion.F90 - MOM6/src/tracer/MOM_OCMIP2_CFC.F90 - MOM6/src/tracer/MOM_offline_aux.F90 - MOM6/src/tracer/MOM_offline_main.F90 - MOM6/src/tracer/MOM_tracer_advect.F90 - MOM6/src/tracer/MOM_tracer_diabatic.F90 - MOM6/src/tracer/MOM_tracer_flow_control.F90 - MOM6/src/tracer/MOM_tracer_hor_diff.F90 - MOM6/src/tracer/MOM_tracer_registry.F90 - MOM6/src/tracer/MOM_tracer_types.F90 - MOM6/src/tracer/MOM_tracer_Z_init.F90 - MOM6/src/tracer/nw2_tracers.F90 - MOM6/src/tracer/oil_tracer.F90 - MOM6/src/tracer/pseudo_salt_tracer.F90 - MOM6/src/tracer/RGC_tracer.F90 - MOM6/src/tracer/tracer_example.F90 - - MOM6/src/user/adjustment_initialization.F90 - MOM6/src/user/baroclinic_zone_initialization.F90 - MOM6/src/user/basin_builder.F90 - MOM6/src/user/benchmark_initialization.F90 - MOM6/src/user/BFB_initialization.F90 - MOM6/src/user/BFB_surface_forcing.F90 - MOM6/src/user/circle_obcs_initialization.F90 - MOM6/src/user/dense_water_initialization.F90 - MOM6/src/user/DOME2d_initialization.F90 - MOM6/src/user/DOME_initialization.F90 - MOM6/src/user/dumbbell_initialization.F90 - MOM6/src/user/dumbbell_surface_forcing.F90 - MOM6/src/user/dyed_channel_initialization.F90 - MOM6/src/user/dyed_obcs_initialization.F90 - MOM6/src/user/external_gwave_initialization.F90 - MOM6/src/user/Idealized_Hurricane.F90 - MOM6/src/user/ISOMIP_initialization.F90 - MOM6/src/user/Kelvin_initialization.F90 - MOM6/src/user/lock_exchange_initialization.F90 - MOM6/src/user/MOM_controlled_forcing.F90 - MOM6/src/user/MOM_wave_interface.F90 - MOM6/src/user/Neverworld_initialization.F90 - MOM6/src/user/Phillips_initialization.F90 - MOM6/src/user/RGC_initialization.F90 - MOM6/src/user/Rossby_front_2d_initialization.F90 - MOM6/src/user/SCM_CVMix_tests.F90 - MOM6/src/user/seamount_initialization.F90 - MOM6/src/user/shelfwave_initialization.F90 - MOM6/src/user/sloshing_initialization.F90 - MOM6/src/user/soliton_initialization.F90 - MOM6/src/user/supercritical_initialization.F90 - MOM6/src/user/tidal_bay_initialization.F90 - MOM6/src/user/user_change_diffusivity.F90 - MOM6/src/user/user_initialization.F90 - MOM6/src/user/user_revise_forcing.F90 - - MOM6/config_src/external/database_comms/MOM_database_comms.F90 - MOM6/config_src/external/database_comms/database_client_interface.F90 - - MOM6/config_src/external/drifters/MOM_particles.F90 - MOM6/config_src/external/drifters/MOM_particles_types.F90 - MOM6/config_src/external/GFDL_ocean_BGC/FMS_coupler_util.F90 - MOM6/config_src/external/GFDL_ocean_BGC/generic_tracer.F90 - MOM6/config_src/external/GFDL_ocean_BGC/generic_tracer_utils.F90 - MOM6/config_src/external/ODA_hooks/kdtree.f90 - MOM6/config_src/external/ODA_hooks/ocean_da_core.F90 - MOM6/config_src/external/ODA_hooks/ocean_da_types.F90 - MOM6/config_src/external/ODA_hooks/write_ocean_obs.F90 - - MOM6/config_src/external/stochastic_physics/get_stochy_pattern.F90 - MOM6/config_src/external/stochastic_physics/stochastic_physics.F90 - - MOM6/config_src/infra/FMS1/MOM_coms_infra.F90 - MOM6/config_src/infra/FMS1/MOM_constants.F90 - MOM6/config_src/infra/FMS1/MOM_couplertype_infra.F90 - MOM6/config_src/infra/FMS1/MOM_cpu_clock_infra.F90 - MOM6/config_src/infra/FMS1/MOM_data_override_infra.F90 - MOM6/config_src/infra/FMS1/MOM_diag_manager_infra.F90 - MOM6/config_src/infra/FMS1/MOM_domain_infra.F90 - MOM6/config_src/infra/FMS1/MOM_ensemble_manager_infra.F90 - MOM6/config_src/infra/FMS1/MOM_error_infra.F90 - MOM6/config_src/infra/FMS1/MOM_interp_infra.F90 - MOM6/config_src/infra/FMS1/MOM_io_infra.F90 - MOM6/config_src/infra/FMS1/MOM_time_manager.F90 - - MOM6/config_src/drivers/nuopc_cap/mom_cap_methods.F90 - MOM6/config_src/drivers/nuopc_cap/mom_cap_time.F90 - MOM6/config_src/drivers/nuopc_cap/mom_ocean_model_nuopc.F90 - MOM6/config_src/drivers/nuopc_cap/mom_surface_forcing_nuopc.F90 - MOM6/config_src/drivers/nuopc_cap/ocn_comp_NUOPC.F90 - MOM6/config_src/drivers/nuopc_cap/time_utils.F90 -) - -list(APPEND mom6_solo_src_files - MOM6/config_src/drivers/solo_driver/MESO_surface_forcing.F90 - MOM6/config_src/drivers/solo_driver/MOM_driver.F90 - MOM6/config_src/drivers/solo_driver/MOM_surface_forcing.F90 - MOM6/config_src/drivers/solo_driver/atmos_ocean_fluxes.F90 - MOM6/config_src/drivers/solo_driver/user_surface_forcing.F90 -) diff --git a/WW3/CMakeLists.txt b/WW3/CMakeLists.txt index 5abd1cf..18efa8a 100644 --- a/WW3/CMakeLists.txt +++ b/WW3/CMakeLists.txt @@ -1,36 +1,140 @@ -# Commom source files. Too many files to list, so include them via this file -include("ww3_files.cmake") - -# List of switches -list(APPEND switches "CESMCOUPLED" "NCO" "DIST" "MPI" "PR3" "UQ" "FLX4" "SEED" "ST6" "STAB0" "NL1" "BT1" "DB1" "MLIM" "TR0" "BS0" "RWND" "WNX1" "WNT1" "CRX1" "CRT1" "O0" "O1" "O2" "O3" "O4" "O5" "O6" "O7" "O14" "O15" "IS0" "REF0" "NOGRB" "IC0") - -# Process switches and get list of extra source files -include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/check_switches.cmake) -check_switches("${switches}" switch_files) - -# Compile definitions -foreach(switch ${switches}) - add_compile_definitions(W3_${switch}) -endforeach() - -add_compile_definitions(ENDIANNESS="big_endian") - -set_property(SOURCE WW3/model/src/w3initmd.F90 - APPEND - PROPERTY COMPILE_DEFINITIONS - "__WW3_SWITCHES__=\'\'" -) - -message(VERBOSE "WW3 common source files : ${ww3_src_files}") -message(VERBOSE "WW3 switch files: ${switch_files}") - -### Create target library and set PUBLIC interfaces on the library -add_fortran_library(OM3_ww3 mod STATIC ${ww3_src_files} ${switch_files}) -target_link_libraries(OM3_ww3 PUBLIC esmf - NetCDF::NetCDF_Fortran) - -# WW3 executables -foreach(EXE ww3_grid ww3_strt ww3_ounf ww3_outf ww3_outp) - add_executable(${EXE} ${${EXE}_src_files}) - target_link_libraries(${EXE} PRIVATE OM3_ww3) -endforeach() +### Global definitions, flags, etc + +## List of switches +list(APPEND switches "CESMCOUPLED" "NCO" "DIST" "MPI" "PR3" "UQ" "FLX4" "SEED" "ST6" "STAB0" "NL1" "BT1" "DB1" "MLIM" "TR0" "BS0" "RWND" "WNX1" "WNT1" "CRX1" "CRT1" "O0" "O1" "O2" "O3" "O4" "O5" "O6" "O7" "O14" "O15" "IS0" "REF0" "NOGRB" "IC0") + +## Global compile definitions +foreach(switch ${switches}) + add_compile_definitions(W3_${switch}) +endforeach() + +### Targets + +## WW3 library +add_fortran_library(OM3_ww3 mod STATIC) +target_compile_definitions(OM3_ww3 PRIVATE ENDIANNESS="big_endian") +set_property(SOURCE WW3/model/src/w3initmd.F90 + APPEND + PROPERTY COMPILE_DEFINITIONS + "__WW3_SWITCHES__=\'\'" +) +target_link_libraries(OM3_ww3 + PUBLIC esmf + PRIVATE NetCDF::NetCDF_Fortran +) +# Process switches and get list of extra source files +include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/check_switches.cmake) +check_switches("${switches}" switch_files) +message(VERBOSE "WW3 switch files: ${switch_files}") +target_sources(OM3_ww3 PRIVATE + WW3/model/src/constants.F90 + WW3/model/src/w3adatmd.F90 + WW3/model/src/w3arrymd.F90 + WW3/model/src/w3bullmd.F90 + WW3/model/src/w3cspcmd.F90 + WW3/model/src/w3dispmd.F90 + WW3/model/src/w3fldsmd.F90 + WW3/model/src/w3gdatmd.F90 + WW3/model/src/w3gridmd.F90 + WW3/model/src/w3gsrumd.F90 + WW3/model/src/w3idatmd.F90 + WW3/model/src/w3initmd.F90 + WW3/model/src/w3iobcmd.F90 + WW3/model/src/w3iogomd.F90 + WW3/model/src/w3iogrmd.F90 + WW3/model/src/w3iopomd.F90 + WW3/model/src/w3iorsmd.F90 + WW3/model/src/w3iosfmd.F90 + WW3/model/src/w3iotrmd.F90 + WW3/model/src/w3macros.h + WW3/model/src/w3metamd.F90 + WW3/model/src/w3nmlbouncmd.F90 + WW3/model/src/w3nmlboundmd.F90 + WW3/model/src/w3nmlgridmd.F90 + WW3/model/src/w3nmlmultimd.F90 + WW3/model/src/w3nmlounfmd.F90 + WW3/model/src/w3nmlounpmd.F90 + WW3/model/src/w3nmlprncmd.F90 + WW3/model/src/w3nmlshelmd.F90 + WW3/model/src/w3nmltrncmd.F90 + WW3/model/src/w3nmluprstrmd.F90 + WW3/model/src/w3odatmd.F90 + WW3/model/src/w3parall.F90 + WW3/model/src/w3partmd.F90 + WW3/model/src/w3servmd.F90 + WW3/model/src/w3srcemd.F90 + WW3/model/src/w3strkmd.F90 + WW3/model/src/w3timemd.F90 + WW3/model/src/w3triamd.F90 + WW3/model/src/w3updtmd.F90 + WW3/model/src/w3wavemd.F90 + WW3/model/src/w3wdasmd.F90 + WW3/model/src/w3wdatmd.F90 + WW3/model/src/wmfinlmd.F90 + WW3/model/src/wmgridmd.F90 + WW3/model/src/wminiomd.F90 + WW3/model/src/wminitmd.F90 + WW3/model/src/wmiopomd.F90 + WW3/model/src/wmmdatmd.F90 + WW3/model/src/wmunitmd.F90 + WW3/model/src/wmupdtmd.F90 + WW3/model/src/wmwavemd.F90 + WW3/model/src/w3tidemd.F90 + WW3/model/src/wav_grdout.F90 + WW3/model/src/w3iogoncdmd.F90 + WW3/model/src/wav_shr_flags.F90 + + WW3/model/src/wav_kind_mod.F90 + WW3/model/src/wav_shr_mod.F90 + WW3/model/src/wav_shel_inp.F90 + WW3/model/src/wav_comp_nuopc.F90 + WW3/model/src/wav_import_export.F90 + + ${switch_files} +) + +## Utilities + +# ww3_grid +add_executable(OM3_ww3_grid WW3/model/src/ww3_grid.F90) +set_target_properties(OM3_ww3_grid PROPERTIES + LINKER_LANGUAGE Fortran + OUTPUT_NAME ww3_grid +) +target_link_libraries(OM3_ww3_grid PRIVATE OM3_ww3) + +# ww3_strt +add_executable(OM3_ww3_strt WW3/model/src/ww3_strt.F90) +set_target_properties(OM3_ww3_strt PROPERTIES + LINKER_LANGUAGE Fortran + OUTPUT_NAME ww3_strt +) +target_link_libraries(OM3_ww3_strt PRIVATE OM3_ww3) + +# ww3_outf +add_executable(OM3_ww3_outf WW3/model/src/ww3_outf.F90) +set_target_properties(OM3_ww3_outf PROPERTIES + LINKER_LANGUAGE Fortran + OUTPUT_NAME ww3_outf +) +target_link_libraries(OM3_ww3_outf PRIVATE OM3_ww3) + +# ww3_ounf +add_executable(OM3_ww3_ounf) +target_sources(OM3_ww3_ounf PRIVATE + WW3/model/src/ww3_ounf.F90 + WW3/model/src/w3ounfmetamd.F90 +) +set_target_properties(OM3_ww3_ounf PROPERTIES + LINKER_LANGUAGE Fortran + OUTPUT_NAME ww3_ounf +) +target_link_libraries(OM3_ww3_ounf PRIVATE OM3_ww3) + +# ww3_outp +add_executable(OM3_ww3_outp WW3/model/src/ww3_outp.F90) +set_target_properties(OM3_ww3_outp PROPERTIES + LINKER_LANGUAGE Fortran + OUTPUT_NAME ww3_outp +) +target_link_libraries(OM3_ww3_outp PRIVATE OM3_ww3) diff --git a/WW3/ww3_files.cmake b/WW3/ww3_files.cmake deleted file mode 100644 index 37d77b3..0000000 --- a/WW3/ww3_files.cmake +++ /dev/null @@ -1,88 +0,0 @@ -# Common sources -list(APPEND ww3_src_files - WW3/model/src/constants.F90 - WW3/model/src/w3adatmd.F90 - WW3/model/src/w3arrymd.F90 - WW3/model/src/w3bullmd.F90 - WW3/model/src/w3cspcmd.F90 - WW3/model/src/w3dispmd.F90 - WW3/model/src/w3fldsmd.F90 - WW3/model/src/w3gdatmd.F90 - WW3/model/src/w3gridmd.F90 - WW3/model/src/w3gsrumd.F90 - WW3/model/src/w3idatmd.F90 - WW3/model/src/w3initmd.F90 - WW3/model/src/w3iobcmd.F90 - WW3/model/src/w3iogomd.F90 - WW3/model/src/w3iogrmd.F90 - WW3/model/src/w3iopomd.F90 - WW3/model/src/w3iorsmd.F90 - WW3/model/src/w3iosfmd.F90 - WW3/model/src/w3iotrmd.F90 - WW3/model/src/w3macros.h - WW3/model/src/w3metamd.F90 - WW3/model/src/w3nmlbouncmd.F90 - WW3/model/src/w3nmlboundmd.F90 - WW3/model/src/w3nmlgridmd.F90 - WW3/model/src/w3nmlmultimd.F90 - WW3/model/src/w3nmlounfmd.F90 - WW3/model/src/w3nmlounpmd.F90 - WW3/model/src/w3nmlprncmd.F90 - WW3/model/src/w3nmlshelmd.F90 - WW3/model/src/w3nmltrncmd.F90 - WW3/model/src/w3nmluprstrmd.F90 - WW3/model/src/w3odatmd.F90 - WW3/model/src/w3parall.F90 - WW3/model/src/w3partmd.F90 - WW3/model/src/w3servmd.F90 - WW3/model/src/w3srcemd.F90 - WW3/model/src/w3strkmd.F90 - WW3/model/src/w3timemd.F90 - WW3/model/src/w3triamd.F90 - WW3/model/src/w3updtmd.F90 - WW3/model/src/w3wavemd.F90 - WW3/model/src/w3wdasmd.F90 - WW3/model/src/w3wdatmd.F90 - WW3/model/src/wmfinlmd.F90 - WW3/model/src/wmgridmd.F90 - WW3/model/src/wminiomd.F90 - WW3/model/src/wminitmd.F90 - WW3/model/src/wmiopomd.F90 - WW3/model/src/wmmdatmd.F90 - WW3/model/src/wmunitmd.F90 - WW3/model/src/wmupdtmd.F90 - WW3/model/src/wmwavemd.F90 - WW3/model/src/w3tidemd.F90 - WW3/model/src/wav_grdout.F90 - WW3/model/src/w3iogoncdmd.F90 - WW3/model/src/wav_shr_flags.F90 - - # NUOPC cap sources - WW3/model/src/wav_kind_mod.F90 - WW3/model/src/wav_shr_mod.F90 - WW3/model/src/wav_shel_inp.F90 - WW3/model/src/wav_comp_nuopc.F90 - WW3/model/src/wav_import_export.F90 -) - -# Utilities sources -list(APPEND ww3_grid_src_files - WW3/model/src/ww3_grid.F90 -) - -list(APPEND ww3_strt_src_files - WW3/model/src/ww3_strt.F90 -) - -list(APPEND ww3_outf_src_files - WW3/model/src/ww3_outf.F90 -) - -list(APPEND ww3_ounf_src_files - WW3/model/src/ww3_ounf.F90 - WW3/model/src/w3ounfmetamd.F90 -) - -list(APPEND ww3_outp_src_files - WW3/model/src/ww3_outp.F90 -) diff --git a/share/CMakeLists.txt b/share/CMakeLists.txt index d92dd6e..481694f 100644 --- a/share/CMakeLists.txt +++ b/share/CMakeLists.txt @@ -1,14 +1,26 @@ -# The following files are generated with a script acting on templates -# We include pre-generated files that are committed to the repository -list(APPEND cesm_share_generated_files +### Targets + +## share library +add_fortran_library(OM3_share mod/share STATIC) +target_include_directories(OM3_share PUBLIC CESM_share/include) +if(CMAKE_Fortran_COMPILER_ID MATCHES "GNU") + target_compile_definitions(OM3_share PRIVATE CPRGNU NAMING=_ADD_UNDERSCORE FORTRANUNDERSCORE) +elseif(CMAKE_Fortran_COMPILER_ID MATCHES "Intel") + target_compile_definitions(OM3_share PRIVATE CPRINTEL NAMING=_ADD_UNDERSCORE FORTRANUNDERSCORE) +endif() +target_link_libraries(OM3_share + PUBLIC esmf PIO::PIO_Fortran + PRIVATE OM3_timing +) +target_sources(OM3_share PRIVATE + # The following files are generated with a script acting on templates + # We include pre-generated files that are committed to the repository src/shr_assert_mod.F90 src/shr_frz_mod.F90 src/shr_infnan_mod.F90 src/dtypes.h -) -# Modules shared among several components -list(APPEND cesm_share_src_files + # Modules shared among several components CESM_share/include/shr_assert.h CESM_share/src/shr_abort_mod.F90 CESM_share/src/shr_cal_mod.F90 @@ -30,10 +42,25 @@ list(APPEND cesm_share_src_files CESM_share/src/shr_timer_mod.F90 CESM_share/src/shr_wv_sat_mod.F90 CESM_share/src/water_isotopes/water_isotopes.F90 + + # The following file is a stub. + stubs/mct_mod.F90 ) +if(CMAKE_Fortran_COMPILER_ID MATCHES "Intel") + # CESM reduces the precision and increases speed for the following file + set_source_files_properties(CESM_share/src/shr_wv_sat_mod.F90 PROPERTIES COMPILE_FLAGS "-fimf-precision=low -fp-model fast") +endif() -# GPTL timing library srcs -list(APPEND timing_src_files +## GPTL timing library +add_fortran_library(OM3_timing mod/timing STATIC) +target_compile_definitions(OM3_timing PRIVATE NUOPC_INTERFACE HAVE_MPI) +if(CMAKE_Fortran_COMPILER_ID MATCHES "GNU") + target_compile_definitions(OM3_timing PRIVATE CPRGNU NAMING=_ADD_UNDERSCORE FORTRANUNDERSCORE) +elseif(CMAKE_Fortran_COMPILER_ID MATCHES "Intel") + target_compile_definitions(OM3_timing PRIVATE CPRINTEL NAMING=_ADD_UNDERSCORE FORTRANUNDERSCORE) +endif() +target_link_libraries(OM3_timing PRIVATE esmf) +target_sources(OM3_timing PRIVATE timing/f_wrappers.c timing/gptl.c timing/GPTLget_memusage.c @@ -45,31 +72,3 @@ list(APPEND timing_src_files timing/perf_mod.F90 timing/perf_utils.F90 ) - -# The following file is a stub. -list(APPEND stubs_src_files - stubs/mct_mod.F90 -) - -if(CMAKE_Fortran_COMPILER_ID MATCHES "Intel") - # CESM reduces the precision and increases speed for the following file - set_source_files_properties(CESM_share/src/shr_wv_sat_mod.F90 PROPERTIES COMPILE_FLAGS "-fimf-precision=low -fp-model fast") -endif() - - -# Collect source files for library -add_library(OM3_share STATIC ${timing_src_files} ${stubs_src_files} ${cesm_share_generated_files} ${cesm_share_src_files}) - -add_compile_definitions(NUOPC_INTERFACE HAVE_MPI) -if(CMAKE_Fortran_COMPILER_ID MATCHES "GNU") - target_compile_definitions(OM3_share PRIVATE CPRGNU NAMING=_ADD_UNDERSCORE FORTRANUNDERSCORE) -elseif(CMAKE_Fortran_COMPILER_ID MATCHES "Intel") - target_compile_definitions(OM3_share PRIVATE CPRINTEL NAMING=_ADD_UNDERSCORE FORTRANUNDERSCORE) -endif() - -set_target_properties(OM3_share PROPERTIES Fortran_MODULE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/mod) -target_include_directories(OM3_share PUBLIC $ - $ - CESM_share/include -) -target_link_libraries(OM3_share PUBLIC esmf PIO::PIO_Fortran) From d9136913da250055e34dbc06ced5cc867bf6da08 Mon Sep 17 00:00:00 2001 From: Micael Oliveira Date: Tue, 17 Oct 2023 15:13:40 +1100 Subject: [PATCH 4/5] Collect all configuration options in the main CMakeLists file and make sure all of them are printed to stdout. --- CICE/CMakeLists.txt | 6 ------ CMakeLists.txt | 38 ++++++++++++++++++++++---------------- MOM6/CMakeLists.txt | 16 ++++++---------- 3 files changed, 28 insertions(+), 32 deletions(-) diff --git a/CICE/CMakeLists.txt b/CICE/CMakeLists.txt index 62518a8..9163186 100644 --- a/CICE/CMakeLists.txt +++ b/CICE/CMakeLists.txt @@ -1,9 +1,3 @@ -### Global definitions, flags, etc - -## Configuration Options -set(OM3_CICE_IO "PIO" CACHE STRING "CICE OPTIONS: Choose IO options.") -set_property(CACHE OM3_CICE_IO PROPERTY STRINGS "NetCDF" "PIO" "Binary") - ### Targets ## CICE library diff --git a/CMakeLists.txt b/CMakeLists.txt index b6a25be..157a025 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -17,28 +17,34 @@ project(ACCESS-OM3 VERSION "0.2.0" # Configurations to build list(APPEND KnownConfigurations MOM6 CICE6 WW3 MOM6-CICE6 CICE6-WW3 MOM6-WW3 MOM6-CICE6-WW3) -set(OM3_ENABLE_MOM6 OFF CACHE BOOL "Build MOM6 configuration") -set(OM3_ENABLE_CICE6 OFF CACHE BOOL "Build CICE6 configuration") -set(OM3_ENABLE_WW3 OFF CACHE BOOL "Build WW3 configuration") -set(OM3_ENABLE_MOM6-CICE6 ON CACHE BOOL "Build MOM6-CICE6 configuration") -set(OM3_ENABLE_CICE6-WW3 ON CACHE BOOL "Build CICE6-WW3 configuration") -set(OM3_ENABLE_MOM6-WW3 OFF CACHE BOOL "Build MOM6-WW3 configuration") -set(OM3_ENABLE_MOM6-CICE6-WW3 ON CACHE BOOL "Build MOM6-CICE6-WW3 configuration") +option(OM3_ENABLE_MOM6 "Build MOM6 configuration" OFF) +option(OM3_ENABLE_CICE6 "Build CICE6 configuration" OFF) +option(OM3_ENABLE_WW3 "Build WW3 configuration" OFF) +option(OM3_ENABLE_MOM6-WW3 "Build MOM6-WW3 configuration" OFF) +option(OM3_ENABLE_MOM6-CICE6 "Build MOM6-CICE6 configuration" ON) +option(OM3_ENABLE_CICE6-WW3 "Build CICE6-WW3 configuration" ON) +option(OM3_ENABLE_MOM6-CICE6-WW3 "Build MOM6-CICE6-WW3 configuration" ON) message(STATUS "Configurations") -message(STATUS " - MOM6 ${OM3_ENABLE_MOM6}") -message(STATUS " - CICE6 ${OM3_ENABLE_CICE6}") -message(STATUS " - WW3 ${OM3_ENABLE_WW3}") -message(STATUS " - MOM6-CICE6 ${OM3_ENABLE_MOM6-CICE6}") -message(STATUS " - CICE6-WW3 ${OM3_ENABLE_CICE6-WW3}") -message(STATUS " - MOM6-WW3 ${OM3_ENABLE_MOM6-WW3}") -message(STATUS " - MOM6-CICE6-WW3 ${OM3_ENABLE_MOM6-CICE6-WW3}") +message(STATUS " - MOM6 ${OM3_ENABLE_MOM6}") +message(STATUS " - CICE6 ${OM3_ENABLE_CICE6}") +message(STATUS " - WW3 ${OM3_ENABLE_WW3}") +message(STATUS " - MOM6-WW3 ${OM3_ENABLE_MOM6-WW3}") +message(STATUS " - MOM6-CICE6 ${OM3_ENABLE_MOM6-CICE6}") +message(STATUS " - CICE6-WW3 ${OM3_ENABLE_CICE6-WW3}") +message(STATUS " - MOM6-CICE6-WW3 ${OM3_ENABLE_MOM6-CICE6-WW3}") # Build options -set(OM3_OPENMP OFF CACHE BOOL "Enable OpenMP threading") +option(OM3_OPENMP "Enable OpenMP threading" OFF) +option(OM3_MOM_SYMMETRIC "Use symmetric memory" OFF) +set(OM3_CICE_IO "PIO" CACHE STRING "CICE OPTIONS: Choose IO options.") +set_property(CACHE OM3_CICE_IO PROPERTY STRINGS "NetCDF" "PIO" "Binary") message(STATUS "Build options") -message(STATUS " - OPENMP ${OM3_OPENMP}") +message(STATUS " - OM3_OPENMP ${OM3_OPENMP}") +message(STATUS " - OM3_MOM_SYMMETRIC ${OM3_MOM_SYMMETRIC}") +message(STATUS " - OM3_CICE_IO ${OM3_CICE_IO}") + #[==============================================================================[ # Project configuration # diff --git a/MOM6/CMakeLists.txt b/MOM6/CMakeLists.txt index e199e7b..f0619f0 100644 --- a/MOM6/CMakeLists.txt +++ b/MOM6/CMakeLists.txt @@ -7,20 +7,16 @@ elseif(CMAKE_Fortran_COMPILER_ID MATCHES "Intel") set(fortran_compile_flags -r8) endif() -## Configuration options -option(OM3_MOM_SYMMETRIC "Use symmetric memory" OFF) -if(OM3_MOM_SYMMETRIC) - set(MOM_memory "dynamic_symmetric") -else() - set(MOM_memory "dynamic_nonsymmetric") -endif() - ### Targets ## MOM6 library add_fortran_library(OM3_mom6 mod STATIC) -target_include_directories(OM3_mom6 PRIVATE $ - $) +target_include_directories(OM3_mom6 PRIVATE $) +if(OM3_MOM_SYMMETRIC) + target_include_directories(OM3_mom6 PRIVATE $) +else() + target_include_directories(OM3_mom6 PRIVATE $) +endif() target_compile_options(OM3_mom6 PRIVATE "$<$:${fortran_compile_flags}>") target_link_libraries(OM3_mom6 PUBLIC esmf From 27f95904c39cf072c379605ff66c5917695cd92e Mon Sep 17 00:00:00 2001 From: Micael Oliveira Date: Tue, 17 Oct 2023 14:59:36 +1100 Subject: [PATCH 5/5] Add installation of OM3 executables and WW3 utilities to CMakeLists. Update build script to use "cmake --install" and rename all executables. --- CMakeLists.txt | 15 ++++++++++++++- WW3/CMakeLists.txt | 7 +++++++ build.sh | 10 +++++----- 3 files changed, 26 insertions(+), 6 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 157a025..a9333bd 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -35,12 +35,14 @@ message(STATUS " - CICE6-WW3 ${OM3_ENABLE_CICE6-WW3}") message(STATUS " - MOM6-CICE6-WW3 ${OM3_ENABLE_MOM6-CICE6-WW3}") # Build options +option(OM3_BIN_INSTALL "Instal ACCESS-OM3 executables" ${PROJECT_IS_TOP_LEVEL}) option(OM3_OPENMP "Enable OpenMP threading" OFF) option(OM3_MOM_SYMMETRIC "Use symmetric memory" OFF) set(OM3_CICE_IO "PIO" CACHE STRING "CICE OPTIONS: Choose IO options.") set_property(CACHE OM3_CICE_IO PROPERTY STRINGS "NetCDF" "PIO" "Binary") message(STATUS "Build options") +message(STATUS " - OM3_BIN_INSTALL ${OM3_BIN_INSTALL}") message(STATUS " - OM3_OPENMP ${OM3_OPENMP}") message(STATUS " - OM3_MOM_SYMMETRIC ${OM3_MOM_SYMMETRIC}") message(STATUS " - OM3_CICE_IO ${OM3_CICE_IO}") @@ -207,4 +209,15 @@ endforeach() # Install or Export # #]==============================================================================] -# TODO +## Installs +if(OM3_BIN_INSTALL) + foreach(CONF IN LISTS KnownConfigurations) + if(NOT OM3_ENABLE_${CONF}) + continue() + endif() + + install(TARGETS OM3_${CONF} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} + ) + endforeach() +endif() diff --git a/WW3/CMakeLists.txt b/WW3/CMakeLists.txt index 18efa8a..2b5e687 100644 --- a/WW3/CMakeLists.txt +++ b/WW3/CMakeLists.txt @@ -138,3 +138,10 @@ set_target_properties(OM3_ww3_outp PROPERTIES OUTPUT_NAME ww3_outp ) target_link_libraries(OM3_ww3_outp PRIVATE OM3_ww3) + + +## Installs +if(OM3_BIN_INSTALL) + install(TARGETS OM3_ww3_grid OM3_ww3_strt OM3_ww3_ounf OM3_ww3_outp + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) +endif() diff --git a/build.sh b/build.sh index 429ba3f..3fea3cf 100755 --- a/build.sh +++ b/build.sh @@ -25,24 +25,24 @@ module load esmf/8.4.2 fms/git.2021.03.01=2021.03.01 parallelio/2.5.10 module load intel-compiler/${COMPILER_VERSION} openmpi/${OPENMPI_VERSION} cd ${SCRIPT_DIR} +INSTALL_DIR=${SCRIPT_DIR} hash=`git rev-parse --short=7 HEAD` test -z "$(git status --porcelain)" || hash=${hash}-modified # uncommitted changes or untracked files -mkdir -p bin - for BUILD_TYPE in "${BUILD_TYPES[@]}"; do echo "BUILD_TYPE = "${BUILD_TYPE} rm -r build || true cmake -S . -B build --preset=gadi -DCMAKE_BUILD_TYPE=${BUILD_TYPE} -DCMAKE_VERBOSE_MAKEFILE=ON cmake --build build -j 4 + cmake --install build --prefix=${INSTALL_DIR} - for exec in build/access-om3*; do - dest=bin/$(basename ${exec}) + for exec in ${INSTALL_DIR}/bin/*; do + dest=${INSTALL_DIR}/bin/$(basename ${exec}) if [[ ${BUILD_TYPE} != "Release" ]] ; then dest=${dest}-${BUILD_TYPE}; fi dest=${dest}-${hash} - cp -p ${exec} ${dest} + mv ${exec} ${dest} echo "Successfully built ${dest}" done done