Skip to content

Commit 942d402

Browse files
committed
Merge branch 'release-v8.2.0'
MPAS Version 8.2.0 This release of MPAS introduces several significant changes to MPAS-Atmosphere. New physics * The Noah-MP v5.0.1 land-surface model is now available by setting config_lsm_scheme = 'sf_noahmp' in the &physics namelist group. - New static files that include the 'soilcomp', 'soilcl1', 'soilcl2', 'soilcl3', and 'soilcl4' fields are required when activating Noah-MP in the model. * The aerosol-aware Thompson microphysics (as in WRF v4.1.4) is available by setting config_microp_scheme = 'mp_thompson_aerosols' in the &physics namelist group. - An aerosol climatology file (QNWFA_QNIFA_SIGMA_MONTHLY.dat) is used when running the init_atmosphere_model program to produce initial and lateral boundary conditions for nifa and nwfa. Physics changes * Physics schemes in the physics_mmm directory are now obtained from a separate, shared MMM-physics repository at compile time using the manage_externals tool. * The revised Monin-Obukhov scheme replaces the Monin-Obukhov scheme in the 'mesoscale_reference' suite. GPU capabilities * The scalar transport code has been ported to GPUs using OpenACC directives. - The atmosphere core must be compiled with OPENACC=true. - Additional timers in the log file capture host-device data transfer times. Infrastructure * The build system no longer requires an intermediate clean step when compiling one core before another.
2 parents f084b36 + 82681e9 commit 942d402

File tree

285 files changed

+40332
-22685
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

285 files changed

+40332
-22685
lines changed

.gitignore

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ restart_timestamp
3737

3838
# Text files (For statistical output from ocean model)
3939
*.txt
40+
!CMakeLists.txt
4041

4142
# Directories with individual .gitignore files are:
4243
# src/external (Externals might have a different compilation method)
@@ -47,8 +48,8 @@ restart_timestamp
4748
*.TBL
4849
*DATA*
4950

50-
# Ignore MPAS core build files.
51-
.mpas_core_*
51+
# Files for detecting whether builds of cores or shared framework can be reused
52+
.build_opts*
5253

5354
# Ignore all runtime config files
5455
namelist.*

CMakeLists.txt

Lines changed: 160 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,160 @@
1+
## MPAS-Model
2+
cmake_minimum_required(VERSION 3.12)
3+
4+
include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/Functions/MPAS_Functions.cmake)
5+
get_mpas_version(MPAS_VERSION)
6+
project(MPAS LANGUAGES C Fortran VERSION ${MPAS_VERSION} DESCRIPTION "MPAS - Model for Prediction Across Scales")
7+
8+
list(INSERT CMAKE_MODULE_PATH 0 ${CMAKE_CURRENT_SOURCE_DIR}/cmake/Modules)
9+
set(CMAKE_DIRECTORY_LABELS ${PROJECT_NAME})
10+
include(GNUInstallDirs)
11+
12+
# Options
13+
set(MPAS_ALL_CORES atmosphere init_atmosphere)
14+
set(MPAS_CORES atmosphere CACHE STRING "MPAS cores to build. Options: ${MPAS_ALL_CORES}")
15+
if(MPAS_CORES MATCHES " ") #Convert strings separated with spaces to CMake list separated with ';'
16+
string(REPLACE " " ";" MPAS_CORES ${MPAS_CORES})
17+
set(MPAS_CORES ${MPAS_CORES} CACHE STRING "MPAS cores to build. Options: ${MPAS_ALL_CORES}" FORCE)
18+
endif()
19+
option(DO_PHYSICS "Use built-in physics schemes." TRUE)
20+
option(MPAS_DOUBLE_PRECISION "Use double precision 64-bit Floating point." TRUE)
21+
option(MPAS_PROFILE "Enable GPTL profiling" OFF)
22+
option(MPAS_OPENMP "Enable OpenMP" OFF)
23+
option(BUILD_SHARED_LIBS "Build shared libraries" ON)
24+
25+
message(STATUS "[OPTION] MPAS_CORES: ${MPAS_CORES}")
26+
message(STATUS "[OPTION] MPAS_DOUBLE_PRECISION: ${MPAS_DOUBLE_PRECISION}")
27+
message(STATUS "[OPTION] MPAS_PROFILE: ${MPAS_PROFILE}")
28+
message(STATUS "[OPTION] MPAS_OPENMP: ${MPAS_OPENMP}")
29+
message(STATUS "[OPTION] BUILD_SHARED_LIBS: ${BUILD_SHARED_LIBS}")
30+
31+
# Build product output locations
32+
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
33+
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
34+
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
35+
36+
# Set default build type to RelWithDebInfo
37+
if(NOT CMAKE_BUILD_TYPE)
38+
message(STATUS "Setting default build type to Release. Specify CMAKE_BUILD_TYPE to override.")
39+
set(CMAKE_BUILD_TYPE "Release" CACHE STRING "CMake Build type" FORCE)
40+
set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" "MinSizeRel" "RelWithDebInfo")
41+
endif()
42+
43+
# Detect MPAS git version
44+
if(NOT MPAS_GIT_VERSION)
45+
find_package(Git QUIET)
46+
if(GIT_FOUND)
47+
execute_process(COMMAND ${GIT_EXECUTABLE} describe --dirty
48+
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
49+
OUTPUT_VARIABLE _mpas_git_version
50+
ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
51+
else()
52+
set(_mpas_git_version "Unknown")
53+
endif()
54+
set(MPAS_GIT_VERSION ${_mpas_git_version} CACHE STRING "MPAS-Model git version")
55+
endif()
56+
57+
### Dependencies
58+
find_package(OpenMP COMPONENTS Fortran)
59+
find_package(MPI REQUIRED COMPONENTS Fortran)
60+
find_package(NetCDF REQUIRED COMPONENTS Fortran C)
61+
find_package(PnetCDF REQUIRED COMPONENTS Fortran)
62+
find_package(PIO REQUIRED COMPONENTS Fortran C)
63+
if(MPAS_PROFILE)
64+
find_package(GPTL REQUIRED)
65+
endif()
66+
67+
# Find C pre-processor
68+
if(CMAKE_C_COMPILER_ID MATCHES GNU)
69+
find_program(CPP_EXECUTABLE NAMES cpp REQUIRED)
70+
set(CPP_EXTRA_FLAGS -traditional)
71+
elseif(CMAKE_C_COMPILER_ID MATCHES "(Apple)?Clang" )
72+
find_program(CPP_EXECUTABLE NAMES cpp REQUIRED)
73+
else()
74+
message(STATUS "Unknown compiler: ${CMAKE_C_COMPILER_ID}")
75+
set(CPP_EXECUTABLE ${CMAKE_C_COMPILER})
76+
endif()
77+
78+
## Common Variables
79+
80+
# Fortran module output directory for build interface
81+
set(MPAS_MODULE_DIR ${PROJECT_NAME}/module/${CMAKE_Fortran_COMPILER_ID}/${CMAKE_Fortran_COMPILER_VERSION})
82+
# Install Fortran module directory
83+
install(DIRECTORY ${CMAKE_BINARY_DIR}/${MPAS_MODULE_DIR}/ DESTINATION ${CMAKE_INSTALL_LIBDIR}/${MPAS_MODULE_DIR}/)
84+
85+
# Location of common subdriver module compiled by each cores
86+
set(MPAS_MAIN_SRC ${CMAKE_CURRENT_SOURCE_DIR}/src/driver/mpas.F)
87+
set(MPAS_SUBDRIVER_SRC ${CMAKE_CURRENT_SOURCE_DIR}/src/driver/mpas_subdriver.F)
88+
89+
## Create targets
90+
add_subdirectory(src/external/ezxml) # Target: MPAS::external::ezxml
91+
if(ESMF_FOUND)
92+
message(STATUS "Configure MPAS for external ESMF")
93+
add_definitions(-DMPAS_EXTERNAL_ESMF_LIB -DMPAS_NO_ESMF_INIT)
94+
add_library(${PROJECT_NAME}::external::esmf ALIAS esmf)
95+
else()
96+
message(STATUS "Configure MPAS for internal ESMF")
97+
add_subdirectory(src/external/esmf_time_f90) # Target: MPAS::external::esmf_time
98+
endif()
99+
add_subdirectory(src/tools/input_gen) # Targets: namelist_gen, streams_gen
100+
add_subdirectory(src/tools/registry) # Targets: mpas_parse_<core_name>
101+
add_subdirectory(src/framework) # Target: MPAS::framework
102+
add_subdirectory(src/operators) # Target: MPAS::operators
103+
104+
foreach(_core IN LISTS MPAS_CORES)
105+
add_subdirectory(src/core_${_core}) # Target: MPAS::core::<core_name>
106+
endforeach()
107+
108+
### Package config
109+
include(CMakePackageConfigHelpers)
110+
111+
# Build-tree target exports
112+
export(EXPORT ${PROJECT_NAME}ExportsExternal NAMESPACE ${PROJECT_NAME}::external:: FILE ${PROJECT_NAME}-targets-external.cmake)
113+
export(EXPORT ${PROJECT_NAME}Exports NAMESPACE ${PROJECT_NAME}:: FILE ${PROJECT_NAME}-targets.cmake)
114+
export(EXPORT ${PROJECT_NAME}ExportsCore NAMESPACE ${PROJECT_NAME}::core:: FILE ${PROJECT_NAME}-targets-core.cmake)
115+
116+
# CMake Config file install location
117+
set(CONFIG_INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME})
118+
# Install MPAS-supplied Find<Pkg>.cmake modules for use by downstream CMake dependencies
119+
install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/cmake/Modules DESTINATION ${CONFIG_INSTALL_DESTINATION})
120+
121+
## <pkgname>-config.cmake: build-tree
122+
# Variables to export for use from build-tree
123+
set(BINDIR ${CMAKE_BINARY_DIR}/bin)
124+
set(CORE_DATADIR_ROOT ${CMAKE_BINARY_DIR}/${PROJECT_NAME})
125+
set(CMAKE_MODULE_INSTALL_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/Modules)
126+
string(TOLOWER ${PROJECT_NAME} PROJECT_NAME_LOWER)
127+
configure_package_config_file(cmake/PackageConfig.cmake.in ${PROJECT_NAME_LOWER}-config.cmake
128+
INSTALL_DESTINATION .
129+
INSTALL_PREFIX ${CMAKE_CURRENT_BINARY_DIR}
130+
PATH_VARS BINDIR CORE_DATADIR_ROOT CMAKE_MODULE_INSTALL_PATH)
131+
132+
## <pkgname>-config.cmake: install-tree
133+
# Variables to export for use from install-tree
134+
set(BINDIR ${CMAKE_INSTALL_BINDIR})
135+
set(CORE_DATADIR_ROOT ${CMAKE_INSTALL_DATADIR}/${PROJECT_NAME})
136+
set(CMAKE_MODULE_INSTALL_PATH ${CONFIG_INSTALL_DESTINATION}/Modules)
137+
configure_package_config_file(cmake/PackageConfig.cmake.in install/${PROJECT_NAME_LOWER}-config.cmake
138+
INSTALL_DESTINATION ${CONFIG_INSTALL_DESTINATION}
139+
PATH_VARS BINDIR CORE_DATADIR_ROOT CMAKE_MODULE_INSTALL_PATH)
140+
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/install/${PROJECT_NAME_LOWER}-config.cmake
141+
DESTINATION ${CONFIG_INSTALL_DESTINATION})
142+
143+
## <pkgname>-config-version.cmake
144+
write_basic_package_version_file(
145+
${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME_LOWER}-config-version.cmake
146+
VERSION ${PROJECT_VERSION}
147+
COMPATIBILITY AnyNewerVersion)
148+
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME_LOWER}-config-version.cmake
149+
DESTINATION ${CONFIG_INSTALL_DESTINATION})
150+
151+
## package-targets.cmake and package-targets-<build-type>.cmake
152+
install(EXPORT ${PROJECT_NAME}ExportsExternal NAMESPACE ${PROJECT_NAME}::external::
153+
FILE ${PROJECT_NAME_LOWER}-targets-external.cmake
154+
DESTINATION ${CONFIG_INSTALL_DESTINATION})
155+
install(EXPORT ${PROJECT_NAME}Exports NAMESPACE ${PROJECT_NAME}::
156+
FILE ${PROJECT_NAME_LOWER}-targets.cmake
157+
DESTINATION ${CONFIG_INSTALL_DESTINATION})
158+
install(EXPORT ${PROJECT_NAME}ExportsCore NAMESPACE ${PROJECT_NAME}::core::
159+
FILE ${PROJECT_NAME_LOWER}-targets-core.cmake
160+
DESTINATION ${CONFIG_INSTALL_DESTINATION})

0 commit comments

Comments
 (0)