@@ -18,10 +18,14 @@ if(BUILD_CI_TESTING)
1818 if (FV3)
1919 project (ufsatm_fv3 VERSION 1.0 LANGUAGES C CXX Fortran )
2020 endif ()
21+ if (MPAS)
22+ project (ufsatm_mpas VERSION 1.0 LANGUAGES C CXX Fortran )
23+ endif ()
2124 include (ci/CMakeLists.txt )
2225endif ()
2326
2427# Set variables for all dycore build options in UFSATM.
28+ set (DYCORE_TARGET_MPAS ufsatm_mpas)
2529set (DYCORE_TARGET_FV3 ufsatm_fv3)
2630
2731###############################################################################
@@ -56,14 +60,38 @@ if(BUILD_CI_TESTING)
5660 add_subdirectory (tests )
5761endif ()
5862
63+ # Not used yet by MPAS in UFSATM, but needed by ufsatm_cap.F90 to work.
64+ list (APPEND coupling_srcs
65+ cpl/module_block_data.F90
66+ cpl/module_cplfields.F90
67+ cpl/module_cap_cpl.F90
68+ cpl/module_cplscalars.F90)
69+
70+ list (APPEND io_srcs
71+ io/module_write_netcdf.F90
72+ io/module_write_restart_netcdf.F90
73+ io/module_fv3_io_def.F90
74+ io/module_write_internal_state.F90
75+ io/module_wrt_grid_comp.F90)
76+
77+ # Eventually these could be shared by MPAS, and merged with {io_srcs} list.
78+ list (APPEND fv3_io_srcs
79+ io/fv3atm_common_io.F90
80+ io/fv3atm_clm_lake_io.F90
81+ io/fv3atm_rrfs_sd_io.F90
82+ io/fv3atm_sfc_io.F90
83+ io/fv3atm_oro_io.F90
84+ io/fv3atm_history_io.F90
85+ io/fv3atm_restart_io.F90)
86+
5987###############################################################################
6088### UFSATM with FV3 dynamical core
6189###############################################################################
6290if (FV3)
91+ add_definitions (-DFV3 )
6392 set (DYCORE_TARGET ${DYCORE_TARGET_FV3}
6493 CACHE INTERNAL "DYCORE_TARGET Options: fv3atm" )
65- set (DYCORE_TARGET_CAP_MOD fv3atm_cap_mod PARENT_SCOPE )
66-
94+ set (DYCORE_TARGET_CAP_MOD ufsatm_cap_mod PARENT_SCOPE )
6795
6896 # These ifdefs need to be turned ON in the dycore.
6997 set (use_WRTCOMP ON )
@@ -83,7 +111,7 @@ if (FV3)
83111 if (INLINE_POST)
84112 set (BUILD_POSTEXEC OFF )
85113 add_subdirectory (upp )
86- set (POST_SRC fv3/ io/post_nems_routines.F90 fv3/ io/post_fv3.F90)
114+ set (POST_SRC io/post_nems_routines.F90 io/post_fv3.F90)
87115 list (APPEND _ufsatm_defs_private INLINE_POST)
88116 endif ()
89117
@@ -130,27 +158,15 @@ if (FV3)
130158
131159 # FV3 drivers and dependencies
132160 add_library (${DYCORE_TARGET}
161+ ufsatm_cap.F90
162+ ufsatm_util.F90
133163 fv3/atmos_model.F90
134- fv3/fv3_cap.F90
135164 fv3/module_fv3_config.F90
136165 fv3/module_fcst_grid_comp.F90
137166 fv3/stochastic_physics/stochastic_physics_wrapper.F90
138- cpl/module_block_data.F90
139- cpl/module_cplfields.F90
140- cpl/module_cap_cpl.F90
141- cpl/module_cplscalars.F90
142- fv3/io/fv3atm_common_io.F90
143- fv3/io/fv3atm_clm_lake_io.F90
144- fv3/io/fv3atm_rrfs_sd_io.F90
145- fv3/io/fv3atm_sfc_io.F90
146- fv3/io/fv3atm_oro_io.F90
147- fv3/io/fv3atm_history_io.F90
148- fv3/io/fv3atm_restart_io.F90
149- fv3/io/module_write_netcdf.F90
150- fv3/io/module_write_restart_netcdf.F90
151- fv3/io/module_fv3_io_def.F90
152- fv3/io/module_write_internal_state.F90
153- fv3/io/module_wrt_grid_comp.F90
167+ ${coupling_srcs}
168+ ${fv3_io_srcs}
169+ ${io_srcs}
154170 ${moving_nest_srcs}
155171 ${POST_SRC}
156172 )
@@ -159,8 +175,75 @@ if (FV3)
159175 list (APPEND _ufsatm_defs_private GFS_PHYS
160176 INTERNAL_FILE_NML
161177 use_WRTCOMP)
178+ else ()
179+ remove_definitions (-DFV3 )
162180endif ()
163181
182+ ###############################################################################
183+ ### UFSATM with MPAS dynamical core.
184+ ###############################################################################
185+ if (MPAS)
186+ add_definitions (-DMPAS )
187+ set (DYCORE_TARGET ${DYCORE_TARGET_MPAS} )
188+
189+ # Include MPAS Cmake tools.
190+ include (${CMAKE_CURRENT_SOURCE_DIR } /mpas/MPAS-Model/cmake/Functions/MPAS_Functions.cmake )
191+
192+ # Set any pre-processor directive needed in MPAS dycore.
193+ get_mpas_version (MPAS_VERSION )
194+ set (MPAS_ALL_CORES atmosphere)
195+ set (MPAS_CORES atmosphere CACHE STRING "MPAS cores to build. Options: ${MPAS_ALL_CORES} " )
196+ if (MPAS_CORES MATCHES " " ) #Convert strings separated with spaces to CMake list separated with ';'
197+ string (REPLACE " " ";" MPAS_CORES ${MPAS_CORES} )
198+ set (MPAS_CORES ${MPAS_CORES} CACHE STRING "MPAS cores to build. Options: ${MPAS_ALL_CORES} " FORCE )
199+ endif ()
200+ set (MPAS_CAM_DYCORE TRUE )
201+ set (MPAS_USE_PIO TRUE )
202+ add_definitions (-DMPAS_USE_MPI_F08 )
203+ add_definitions (-DMPAS_PIO_SUPPORT )
204+ add_definitions (-DMPAS_CAM_DYCORE )
205+ add_definitions (-DMPAS_UFS_DYCORE )
206+ add_definitions (-DSINGLE_PRECISION )
207+
208+ # Source files for MPAS dynamical core drivers.
209+ set (MPAS_MAIN_SRC ${CMAKE_CURRENT_SOURCE_DIR } /mpas/MPAS-Model/src/driver/mpas.F)
210+ set (MPAS_SUBDRIVER_SRC ${CMAKE_CURRENT_SOURCE_DIR } /mpas/MPAS-Model/src/driver/mpas_subdriver.F)
211+
212+ # MPAS dynamical core
213+ add_subdirectory (mpas )
214+
215+ # MPAS drivers and dependencies
216+ add_library (${DYCORE_TARGET}
217+ ufsatm_cap.F90
218+ ufsatm_util.F90
219+ mpas/atmos_model.F90
220+ mpas/module_mpas_config.F90
221+ mpas/module_fcst_grid_comp.F90
222+ mpas/atmos_coupling.F90
223+ mpas/ufs_mpas_subdriver.F90
224+ ${coupling_srcs}
225+ ${io_srcs}
226+ ccpp/data/MPAS_typedefs.F90
227+ ccpp/driver/MPAS_init.F90
228+ )
229+ add_dependencies (${DYCORE_TARGET} mpas mpasccpp )
230+
231+ if (NOT MPAS_GIT_VERSION)
232+ find_package (Git QUIET )
233+ if (GIT_FOUND)
234+ execute_process (COMMAND ${GIT_EXECUTABLE} describe --dirty
235+ WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR } /mpas/MPAS-Model"
236+ OUTPUT_VARIABLE _mpas_git_version
237+ ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE )
238+ else ()
239+ set (_mpas_git_version "Unknown" )
240+ endif ()
241+ set (MPAS_GIT_VERSION ${_mpas_git_version} CACHE STRING "MPAS-Model git version" )
242+ message (STATUS "Setting MPAS_GIT_VERSION ${_mpas_git_version} " )
243+ endif ()
244+ else ()
245+ remove_definitions (-DMPAS )
246+ endif ()
164247
165248###############################################################################
166249### Link libraries
@@ -183,7 +266,11 @@ if (FV3)
183266 endif ()
184267endif ()
185268
186-
269+ if (MPAS)
270+ target_link_libraries (${DYCORE_TARGET} PUBLIC mpas
271+ mpasccpp
272+ fms )
273+ endif ()
187274
188275# Always include EMC libraries in dycore install
189276target_link_libraries (${DYCORE_TARGET} PUBLIC w3emc::w3emc_d
0 commit comments