Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
49 commits
Select commit Hold shift + click to select a range
fe93817
Initial commit
dustinswales Jul 29, 2025
feabe8c
Some changes to physics scheme metadata
dustinswales Jul 29, 2025
ce99167
Revert some changes
dustinswales Jul 29, 2025
e44d0d2
Update ccpp_driver logic
dustinswales Jul 29, 2025
c079d4e
Revert "Update ccpp_driver logic"
dustinswales Jul 29, 2025
0ee249c
Fix typo in physics metadata
dustinswales Jul 29, 2025
a66c10b
Cleanup whitespace changes
dustinswales Jul 30, 2025
d8b5962
Some small changes. Running now
dustinswales Jul 31, 2025
01b61fe
Merge branch 'develop' of https://github.com/NOAA-EMC/fv3atm into fea…
dustinswales Aug 6, 2025
2256bef
Update framework hash
dustinswales Aug 7, 2025
27a8509
Sync physics
dustinswales Aug 18, 2025
5049c52
Merge branch 'develop' of https://github.com/NOAA-EMC/fv3atm into fea…
dustinswales Aug 18, 2025
cc0638e
Update framework hash
dustinswales Aug 21, 2025
4170e6b
Update .gitmodules
dustinswales Aug 21, 2025
c8bb71e
Add grid mask for regional domains to speed up nearest n. interpolati…
DusanJovic-NOAA Aug 25, 2025
9044c70
Merge branch 'develop' of https://github.com/NOAA-EMC/fv3atm into fea…
dustinswales Aug 27, 2025
2f7f432
MPAS dycore + Atmosphere Generalization (#982)
dustinswales Aug 29, 2025
50e7e1a
Update physics
dustinswales Sep 8, 2025
ea4b896
Merge branch 'develop' of https://github.com/NOAA-EMC/fv3atm into fea…
dustinswales Sep 8, 2025
22ffc20
Scale-aware 3DTKE EDMF and TTE-EDMF GFS PBL related modifications (#993)
BinLiu-NOAA Sep 8, 2025
51181af
Move interstitial needed by radiation into different data container.
dustinswales Sep 8, 2025
0f8456b
Merge branch 'develop' of https://github.com/NOAA-EMC/fv3atm into HEAD
dustinswales Sep 8, 2025
7422b8b
Addline removed during merge conflict
dustinswales Sep 8, 2025
346727b
Revert incorrect ccpp framework hash
dustinswales Sep 8, 2025
e782616
Introduce tuning parameter for convective cloud liquid for GFSv17/GEF…
lisa-bengtsson Sep 10, 2025
4b457b4
Sync physics
dustinswales Sep 15, 2025
e2f14cd
Merge branch 'develop' of https://github.com/NOAA-EMC/fv3atm into HEAD
dustinswales Sep 15, 2025
0e381d5
Replace icplocn2atm (integer) with use_oceanuv (logical) (#1001)
DeniseWorthen Sep 17, 2025
225a765
Updated physics
dustinswales Sep 19, 2025
85e45e0
Merge branch 'develop' of https://github.com/NOAA-EMC/fv3atm into HEAD
dustinswales Sep 19, 2025
a19dcd8
Glacier modifications in NoahMP to address GFSv17 biases (#1010)
barlage Sep 29, 2025
67961c1
Fix initialization of Atmos%iau_offset (#1015)
dpsarmie Oct 2, 2025
e526aac
Merge branch 'develop' into feature/ccpp_framework_update
grantfirl Oct 3, 2025
12be1f2
Update calculation of time-averaged radiation variables (#941)
grantfirl Oct 7, 2025
c230e5c
Update rte-rrtmgp to v1.8 (#995)
dustinswales Oct 10, 2025
e3d536f
Sync from NCAR/main + Thompson params (#1007)
grantfirl Oct 16, 2025
062acd6
Update inline post for GFS v17 (#1021)
WenMeng-NOAA Oct 24, 2025
25f0376
Cloud cover parameter changes for GFSv17 (#1027)
RuiyuSun Oct 27, 2025
0ba2916
Noahmp no stcslcadj at0inc (#1028)
tsga Oct 29, 2025
aa83abf
Add compiler flags for cmake -DFASTER build option (#1029)
DusanJovic-NOAA Oct 30, 2025
f4d191e
Correct diagnostic of the accumulated fields, averaged cloud cover an…
RuiyuSun Nov 3, 2025
6277c9e
Address some compiler warnings in UFSATM (#1025)
NickSzapiro-NOAA Nov 4, 2025
437e17c
Merge branch 'develop' into feature/ccpp_framework_update
grantfirl Nov 5, 2025
c122cfe
Replace GFS_interstitial phys_reset and rad_reset routines with combi…
climbfuji Nov 6, 2025
ab2295e
Merge branch 'develop' into feature/ccpp_framework_update
grantfirl Nov 7, 2025
b667c11
Add 'file_version' global attribute to sfc_data restart files (#997)
DusanJovic-NOAA Nov 10, 2025
e3754fe
Merge branch 'develop' into feature/ccpp_framework_update
grantfirl Nov 10, 2025
964091c
update MPAS code to follow PR#1006 changes to FV3
grantfirl Nov 11, 2025
152db86
update ccpp physics after merge
grantfirl Nov 13, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
Expand Up @@ -14,3 +14,7 @@
path = upp
url = https://github.com/NOAA-EMC/UPP
branch = develop
[submodule "mpas/MPAS-Model"]
path = mpas/MPAS-Model
url = https://github.com/ufs-community/MPAS-Model.git
branch = feature/mpas-in-ufs
129 changes: 108 additions & 21 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,14 @@ if(BUILD_CI_TESTING)
if (FV3)
project(ufsatm_fv3 VERSION 1.0 LANGUAGES C CXX Fortran)
endif()
if (MPAS)
project(ufsatm_mpas VERSION 1.0 LANGUAGES C CXX Fortran)
endif()
include(ci/CMakeLists.txt)
endif()

# Set variables for all dycore build options in UFSATM.
set(DYCORE_TARGET_MPAS ufsatm_mpas)
set(DYCORE_TARGET_FV3 ufsatm_fv3)

###############################################################################
Expand Down Expand Up @@ -56,14 +60,38 @@ if(BUILD_CI_TESTING)
add_subdirectory(tests)
endif()

# Not used yet by MPAS in UFSATM, but needed by ufsatm_cap.F90 to work.
list(APPEND coupling_srcs
cpl/module_block_data.F90
cpl/module_cplfields.F90
cpl/module_cap_cpl.F90
cpl/module_cplscalars.F90)

list(APPEND io_srcs
io/module_write_netcdf.F90
io/module_write_restart_netcdf.F90
io/module_fv3_io_def.F90
io/module_write_internal_state.F90
io/module_wrt_grid_comp.F90)

# Eventually these could be shared by MPAS, and merged with {io_srcs} list.
list(APPEND fv3_io_srcs
io/fv3atm_common_io.F90
io/fv3atm_clm_lake_io.F90
io/fv3atm_rrfs_sd_io.F90
io/fv3atm_sfc_io.F90
io/fv3atm_oro_io.F90
io/fv3atm_history_io.F90
io/fv3atm_restart_io.F90)

###############################################################################
### UFSATM with FV3 dynamical core
###############################################################################
if (FV3)
add_definitions(-DFV3)
set(DYCORE_TARGET ${DYCORE_TARGET_FV3}
CACHE INTERNAL "DYCORE_TARGET Options: fv3atm")
set(DYCORE_TARGET_CAP_MOD fv3atm_cap_mod PARENT_SCOPE)

set(DYCORE_TARGET_CAP_MOD ufsatm_cap_mod PARENT_SCOPE)

# These ifdefs need to be turned ON in the dycore.
set(use_WRTCOMP ON)
Expand All @@ -83,7 +111,7 @@ if (FV3)
if(INLINE_POST)
set(BUILD_POSTEXEC OFF)
add_subdirectory(upp)
set(POST_SRC fv3/io/post_nems_routines.F90 fv3/io/post_fv3.F90)
set(POST_SRC io/post_nems_routines.F90 io/post_fv3.F90)
list(APPEND _ufsatm_defs_private INLINE_POST)
endif()

Expand Down Expand Up @@ -130,27 +158,15 @@ if (FV3)

# FV3 drivers and dependencies
add_library(${DYCORE_TARGET}
ufsatm_cap.F90
ufsatm_util.F90
fv3/atmos_model.F90
fv3/fv3_cap.F90
fv3/module_fv3_config.F90
fv3/module_fcst_grid_comp.F90
fv3/stochastic_physics/stochastic_physics_wrapper.F90
cpl/module_block_data.F90
cpl/module_cplfields.F90
cpl/module_cap_cpl.F90
cpl/module_cplscalars.F90
fv3/io/fv3atm_common_io.F90
fv3/io/fv3atm_clm_lake_io.F90
fv3/io/fv3atm_rrfs_sd_io.F90
fv3/io/fv3atm_sfc_io.F90
fv3/io/fv3atm_oro_io.F90
fv3/io/fv3atm_history_io.F90
fv3/io/fv3atm_restart_io.F90
fv3/io/module_write_netcdf.F90
fv3/io/module_write_restart_netcdf.F90
fv3/io/module_fv3_io_def.F90
fv3/io/module_write_internal_state.F90
fv3/io/module_wrt_grid_comp.F90
${coupling_srcs}
${fv3_io_srcs}
${io_srcs}
${moving_nest_srcs}
${POST_SRC}
)
Expand All @@ -159,8 +175,75 @@ if (FV3)
list(APPEND _ufsatm_defs_private GFS_PHYS
INTERNAL_FILE_NML
use_WRTCOMP)
else()
remove_definitions(-DFV3)
endif()

###############################################################################
### UFSATM with MPAS dynamical core.
###############################################################################
if (MPAS)
add_definitions(-DMPAS)
set(DYCORE_TARGET ${DYCORE_TARGET_MPAS})

# Include MPAS Cmake tools.
include(${CMAKE_CURRENT_SOURCE_DIR}/mpas/MPAS-Model/cmake/Functions/MPAS_Functions.cmake)

# Set any pre-processor directive needed in MPAS dycore.
get_mpas_version(MPAS_VERSION)
set(MPAS_ALL_CORES atmosphere)
set(MPAS_CORES atmosphere CACHE STRING "MPAS cores to build. Options: ${MPAS_ALL_CORES}")
if(MPAS_CORES MATCHES " ") #Convert strings separated with spaces to CMake list separated with ';'
string(REPLACE " " ";" MPAS_CORES ${MPAS_CORES})
set(MPAS_CORES ${MPAS_CORES} CACHE STRING "MPAS cores to build. Options: ${MPAS_ALL_CORES}" FORCE)
endif()
set(MPAS_CAM_DYCORE TRUE)
set(MPAS_USE_PIO TRUE)
add_definitions(-DMPAS_USE_MPI_F08)
add_definitions(-DMPAS_PIO_SUPPORT)
add_definitions(-DMPAS_CAM_DYCORE)
add_definitions(-DMPAS_UFS_DYCORE)
add_definitions(-DSINGLE_PRECISION)

# Source files for MPAS dynamical core drivers.
set(MPAS_MAIN_SRC ${CMAKE_CURRENT_SOURCE_DIR}/mpas/MPAS-Model/src/driver/mpas.F)
set(MPAS_SUBDRIVER_SRC ${CMAKE_CURRENT_SOURCE_DIR}/mpas/MPAS-Model/src/driver/mpas_subdriver.F)

# MPAS dynamical core
add_subdirectory(mpas)

# MPAS drivers and dependencies
add_library(${DYCORE_TARGET}
ufsatm_cap.F90
ufsatm_util.F90
mpas/atmos_model.F90
mpas/module_mpas_config.F90
mpas/module_fcst_grid_comp.F90
mpas/atmos_coupling.F90
mpas/ufs_mpas_subdriver.F90
${coupling_srcs}
${io_srcs}
ccpp/data/MPAS_typedefs.F90
ccpp/driver/MPAS_init.F90
)
add_dependencies(${DYCORE_TARGET} mpas mpasccpp)

if(NOT MPAS_GIT_VERSION)
find_package(Git QUIET)
if(GIT_FOUND)
execute_process(COMMAND ${GIT_EXECUTABLE} describe --dirty
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/mpas/MPAS-Model"
OUTPUT_VARIABLE _mpas_git_version
ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
else()
set(_mpas_git_version "Unknown")
endif()
set(MPAS_GIT_VERSION ${_mpas_git_version} CACHE STRING "MPAS-Model git version")
message(STATUS "Setting MPAS_GIT_VERSION ${_mpas_git_version}")
endif()
else()
remove_definitions(-DMPAS)
endif()

###############################################################################
### Link libraries
Expand All @@ -183,7 +266,11 @@ if (FV3)
endif()
endif()


if (MPAS)
target_link_libraries(${DYCORE_TARGET} PUBLIC mpas
mpasccpp
fms)
endif()

# Always include EMC libraries in dycore install
target_link_libraries(${DYCORE_TARGET} PUBLIC w3emc::w3emc_d
Expand Down
32 changes: 20 additions & 12 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,25 +1,33 @@

# fv3atm
# ufsatm

This repository contains a driver and key subcomponents of the
atmospheric component of the NOAA's [Unified Forecast System
(UFS)](https://ufscommunity.org/) weather model.

The subcomponents include:

- The Finite-Volume Cubed-Sphere (FV3) dynamical core, originally
from the [Geophysical Fluid Dynamics
Laboratory](https://www.gfdl.noaa.gov/).
- The Common Community Physics Package (CCPP) supported by the
- The Finite-Volume Cubed-Sphere (FV3) dynamical core, originally
from the [Geophysical Fluid Dynamics Laboratory](https://www.gfdl.noaa.gov/).

- The Model for Prediction Across Scales - Atmosphere (MPAS-A) dynamical
core developed by [NSF-NCAR Mesoscale and Micrometeorology Laboratory (MMM)](https://www.mmm.ucar.edu).
- [MPAS Model](https://github.com/ufs-community/MPAS-Model)
- [MPAS documentation](https://www.mmm.ucar.edu/models/mpas)

- The Common Community Physics Package (CCPP) supported by the
[Developmental Testbed Center
(DTC)](https://dtcenter.org/community-code/common-community-physics-package-ccpp),
including:
- [CCPP Framework](https://github.com/NCAR/ccpp-framework).
- [CCPP Physics](https://github.com/NCAR/ccpp-physics)
- wrapper code to call [UFS stochastic

- wrapper code to call [UFS stochastic
physics](https://stochastic-physics.readthedocs.io/en/latest/)
- The io code handles netCDF I/O.
- The cpl coupler code connects the different components and allows

- The io code handles netCDF I/O.

- The cpl coupler code connects the different components and allows
them to communicate.

## Prerequisites
Expand All @@ -41,13 +49,13 @@ This package also requires the following external packages:
- [ESMF](https://github.com/esmf-org/esmf)
- [GFDL's Flexible Modeling System](https://github.com/NOAA-GFDL/FMS)

## Obtaining fv3atm
## Obtaining ufsatm

To obtain fv3atm, clone the git repository, and update the submodules:
To obtain ufsatm, clone the git repository, and update the submodules:

```
git clone https://github.com/NOAA-EMC/fv3atm.git
cd fv3atm
git clone https://github.com/NOAA-EMC/ufsatm.git
cd ufsatm
git submodule update --init --recursive
```

Expand Down
Loading