Skip to content

Commit

Permalink
Update FV3 dynamic core to the GFDL 201912 released version (NCAR#58)
Browse files Browse the repository at this point in the history
* Update FMS to the 2020.02 version
* Add -DENABLE_QUAD_PRECISION in the compiling flag when QUAD_PRECISION=Y (DEFAULT). Starting with FMS 2019.01.01, quad-precision arithmetic is enabled it the ENABLE_QUAD_PRECISION macro. This is used to determine whether certain grid metric terms code within FMS/FV3-dycore use quad-precision arithmetic.
* Revise CMakeList to work with FMS 2020.02
* Use write component instead of FMS2 IO for ccpp_regional_c768
  • Loading branch information
XiaqiongZhou-NOAA authored Jun 10, 2020
1 parent 1150bf5 commit 9e3aedc
Show file tree
Hide file tree
Showing 58 changed files with 2,105 additions and 1,967 deletions.
35 changes: 19 additions & 16 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -101,89 +101,92 @@ add_library(
FMS/amip_interp/amip_interp.F90
FMS/astronomy/astronomy.F90
FMS/axis_utils/axis_utils.F90
FMS/axis_utils/axis_utils2.F90
FMS/block_control/block_control.F90
FMS/column_diagnostics/column_diagnostics.F90
FMS/constants/constants.F90
FMS/coupler/atmos_ocean_fluxes.F90
FMS/coupler/coupler_types.F90
FMS/coupler/ensemble_manager.F90
FMS/data_override/data_override.F90
FMS/diag_integral/diag_integral.F90
FMS/diag_manager/diag_axis.F90
FMS/diag_manager/diag_data.F90
FMS/diag_manager/diag_grid.F90
FMS/diag_manager/diag_manager.F90
FMS/diag_manager/diag_manifest.F90
FMS/diag_manager/diag_output.F90
FMS/diag_manager/diag_table.F90
FMS/diag_manager/diag_util.F90
FMS/drifters/cloud_interpolator.F90
FMS/drifters/drifters.F90
FMS/drifters/drifters_comm.F90
FMS/drifters/drifters_core.F90
FMS/drifters/drifters.F90
FMS/drifters/drifters_input.F90
FMS/drifters/drifters_io.F90
FMS/drifters/quicksort.F90
FMS/exchange/stock_constants.F90
FMS/exchange/xgrid.F90
FMS/fft/fft99.F90
FMS/fft/fft.F90
FMS/field_manager/field_manager.F90
FMS/field_manager/fm_util.F90
FMS/fms/fms.F90
FMS/fms/fms_io.F90
FMS/fms2_io/blackboxio.F90
FMS/fms2_io/fms2_io.F90
FMS/fms2_io/fms_io_utils.F90
FMS/fms2_io/fms_netcdf_domain_io.F90
FMS/fms2_io/fms_netcdf_unstructured_domain_io.F90
FMS/fms2_io/netcdf_io.F90
FMS/horiz_interp/horiz_interp.F90
FMS/horiz_interp/horiz_interp_bicubic.F90
FMS/horiz_interp/horiz_interp_bilinear.F90
FMS/horiz_interp/horiz_interp_conserve.F90
FMS/horiz_interp/horiz_interp.F90
FMS/horiz_interp/horiz_interp_spherical.F90
FMS/horiz_interp/horiz_interp_type.F90
FMS/interpolator/interpolator.F90
FMS/memutils/memutils.F90
FMS/monin_obukhov/monin_obukhov.F90
FMS/monin_obukhov/monin_obukhov_kernel.F90
FMS/mosaic/gradient.F90
FMS/mosaic/grid.F90
FMS/mosaic/mosaic.F90
FMS/mosaic/mosaic2.F90
FMS/mpp/mpp.F90
FMS/mpp/mpp_data.F90
FMS/mpp/mpp_domains.F90
FMS/mpp/mpp_efp.F90
FMS/mpp/mpp.F90
FMS/mpp/mpp_io.F90
FMS/mpp/mpp_memutils.F90
FMS/mpp/mpp_parameter.F90
FMS/mpp/mpp_pset.F90
FMS/mpp/mpp_utilities.F90
FMS/oda_tools/oda_core_ecda.F90
FMS/oda_tools/oda_core.F90
FMS/oda_tools/oda_types.F90
FMS/oda_tools/write_ocean_data.F90
FMS/oda_tools/xbt_drop_rate_adjust.f90
FMS/platform/platform.F90
FMS/random_numbers/MersenneTwister.F90
FMS/random_numbers/random_numbers.F90
FMS/sat_vapor_pres/sat_vapor_pres.F90
FMS/sat_vapor_pres/sat_vapor_pres_k.F90
FMS/station_data/station_data.F90
FMS/time_interp/time_interp_external.F90
FMS/time_interp/time_interp.F90
FMS/time_interp/time_interp_external.F90
FMS/time_interp/time_interp_external2.F90
FMS/time_manager/get_cal_time.F90
FMS/time_manager/time_manager.F90
FMS/topography/gaussian_topog.F90
FMS/topography/topography.F90
FMS/tracer_manager/tracer_manager.F90
FMS/tridiagonal/tridiagonal.F90
FMS/memutils/memuse.c

FMS/mosaic/create_xgrid.c
FMS/mosaic/gradient_c2l.c
FMS/mosaic/interp.c
FMS/mosaic/mosaic_util.c
FMS/mosaic/read_mosaic.c
FMS/affinity/affinity.c
FMS/mpp/mpp_memuse.c
FMS/mpp/nsclock.c
FMS/mpp/threadloc.c
)
# stupid cmake can not figure out dependency of fft.F90 on fft99.F90 because 'use fft99_mod' is inside ifdefs
set_property(SOURCE FMS/fft/fft.F90 APPEND_STRING PROPERTY COMPILE_FLAGS "-DSGICRAY=0 -DNAGFFT=0")

target_include_directories(fms PUBLIC ${PROJECT_SOURCE_DIR}/FMS/include FMS/include FMS/fms FMS/mpp/include)
target_include_directories(fms PUBLIC ${PROJECT_SOURCE_DIR}/FMS/include FMS/include FMS/fms FMS/fms2_io/include FMS/mpp/include)
target_include_directories(fms PRIVATE ${NETCDF_INC_DIR})

set_target_properties(fms PROPERTIES ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/FMS)
Expand Down
2 changes: 1 addition & 1 deletion FMS
Submodule FMS updated 292 files
2 changes: 1 addition & 1 deletion FV3
7 changes: 7 additions & 0 deletions cmake/GNU.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -61,3 +61,10 @@ if(INLINE_POST)
else()
message("INLINE_POST is disabled")
endif()

if(QUAD_PRECISION)
message("QUAD_PRECISION is ENABLED")
add_definitions(-DENABLE_QUAD_PRECISION)
else()
message("QUAD_PRECISION is disabled")
endif()
9 changes: 9 additions & 0 deletions cmake/Intel.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,10 @@ if(OPENMP)
add_definitions(-DOPENMP)
endif()

if(QUAD_PRECISION)
add_definitions(-DENABLE_QUAD_PRECISION)
endif()


set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D__IFC -sox -fp-model source")

Expand Down Expand Up @@ -90,3 +94,8 @@ if(INLINE_POST)
else()
message("INLINE_POST is disabled")
endif()
if(QUAD_PRECISION)
message("QUAD_PRECISION is ENABLED")
else()
message("QUAD_PRECISION is disabled")
endif()
7 changes: 7 additions & 0 deletions cmake/PGI.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -60,3 +60,10 @@ if(INLINE_POST)
else()
message("INLINE_POST is disabled")
endif()

if(QUAD_PRECISION)
message("QUAD_PRECISION is ENABLED")
add_definitions(-DENABLE_QUAD_PRECISION)
else()
message("QUAD_PRECISION is disabled")
endif()
1 change: 1 addition & 0 deletions cmake/configure_cheyenne.gnu.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ option(VERBOSE "Enable VERBOSE mode" OFF)
option(32BIT "Enable 32BIT (single precision arithmetic in dycore)" OFF)
option(OPENMP "Enable OpenMP threading" ON)
option(AVX2 "Enable AVX2 instruction set" OFF)
option(QUAD_PRECISION "Enable QUAD_PRECISION (for certain grid metric terms in dycore)" ON)

option(INLINE_POST "Enable inline post" OFF)

Expand Down
1 change: 1 addition & 0 deletions cmake/configure_cheyenne.intel-impi.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ option(VERBOSE "Enable VERBOSE mode" OFF)
option(32BIT "Enable 32BIT (single precision arithmetic in dycore)" OFF)
option(OPENMP "Enable OpenMP threading" ON)
option(AVX2 "Enable AVX2 instruction set" ON)
option(QUAD_PRECISION "Enable QUAD_PRECISION (for certain grid metric terms in dycore)" ON)

option(INLINE_POST "Enable inline post" OFF)

Expand Down
1 change: 1 addition & 0 deletions cmake/configure_cheyenne.intel.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ option(VERBOSE "Enable VERBOSE mode" OFF)
option(32BIT "Enable 32BIT (single precision arithmetic in dycore)" OFF)
option(OPENMP "Enable OpenMP threading" ON)
option(AVX2 "Enable AVX2 instruction set" ON)
option(QUAD_PRECISION "Enable QUAD_PRECISION (for certain grid metric terms in dycore)" ON)

option(INLINE_POST "Enable inline post" OFF)

Expand Down
1 change: 1 addition & 0 deletions cmake/configure_gaea.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ option(VERBOSE "Enable VERBOSE mode" OFF)
option(32BIT "Enable 32BIT (single precision arithmetic in dycore)" OFF)
option(OPENMP "Enable OpenMP threading" ON)
option(AVX2 "Enable AVX2 instruction set" ON)
option(QUAD_PRECISION "Enable QUAD_PRECISION (for certain grid metric terms in dycore)" ON)

option(INLINE_POST "Enable inline post" OFF)

Expand Down
1 change: 1 addition & 0 deletions cmake/configure_hera.gnu.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ option(VERBOSE "Enable VERBOSE mode" OFF)
option(32BIT "Enable 32BIT (single precision arithmetic in dycore)" OFF)
option(OPENMP "Enable OpenMP threading" ON)
option(AVX2 "Enable AVX2 instruction set" OFF)
option(QUAD_PRECISION "Enable QUAD_PRECISION (for certain grid metric terms in dycore)" ON)

option(INLINE_POST "Enable inline post" OFF)

Expand Down
1 change: 1 addition & 0 deletions cmake/configure_hera.intel.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ option(VERBOSE "Enable VERBOSE mode" OFF)
option(32BIT "Enable 32BIT (single precision arithmetic in dycore)" OFF)
option(OPENMP "Enable OpenMP threading" ON)
option(AVX2 "Enable AVX2 instruction set" ON)
option(QUAD_PRECISION "Enable QUAD_PRECISION (for certain grid metric terms in dycore)" ON)

option(INLINE_POST "Enable inline post" ON)

Expand Down
1 change: 1 addition & 0 deletions cmake/configure_jet.intel.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ option(VERBOSE "Enable VERBOSE mode" OFF)
option(32BIT "Enable 32BIT (single precision arithmetic in dycore)" OFF)
option(OPENMP "Enable OpenMP threading" ON)
option(AVX2 "Enable AVX2 instruction set" OFF)
option(QUAD_PRECISION "Enable QUAD_PRECISION (for certain grid metric terms in dycore)" ON)

option(INLINE_POST "Enable inline post" OFF)

Expand Down
1 change: 1 addition & 0 deletions cmake/configure_linux.gnu.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ option(VERBOSE "Enable VERBOSE mode" OFF)
option(32BIT "Enable 32BIT (single precision arithmetic in dycore)" OFF)
option(OPENMP "Enable OpenMP threading" ON)
option(AVX2 "Enable AVX2 instruction set" OFF)
option(QUAD_PRECISION "Enable QUAD_PRECISION (for certain grid metric terms in dycore)" ON)

option(INLINE_POST "Enable inline post" OFF)

Expand Down
1 change: 1 addition & 0 deletions cmake/configure_linux.intel.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ option(VERBOSE "Enable VERBOSE mode" OFF)
option(32BIT "Enable 32BIT (single precision arithmetic in dycore)" OFF)
option(OPENMP "Enable OpenMP threading" ON)
option(AVX2 "Enable AVX2 instruction set" OFF)
option(QUAD_PRECISION "Enable QUAD_PRECISION (for certain grid metric terms in dycore)" ON)

option(INLINE_POST "Enable inline post" OFF)

Expand Down
1 change: 1 addition & 0 deletions cmake/configure_macosx.gnu.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ else()
option(OPENMP "Enable OpenMP threading" ON)
endif()
option(AVX2 "Enable AVX2 instruction set" OFF)
option(QUAD_PRECISION "Enable QUAD_PRECISION (for certain grid metric terms in dycore)" ON)

option(INLINE_POST "Enable inline post" OFF)

Expand Down
1 change: 1 addition & 0 deletions cmake/configure_orion.intel.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ option(VERBOSE "Enable VERBOSE mode" OFF)
option(32BIT "Enable 32BIT (single precision arithmetic in dycore)" OFF)
option(OPENMP "Enable OpenMP threading" ON)
option(AVX2 "Enable AVX2 instruction set" ON)
option(QUAD_PRECISION "Enable QUAD_PRECISION (for certain grid metric terms in dycore)" ON)

option(INLINE_POST "Enable inline post" ON)

Expand Down
1 change: 1 addition & 0 deletions cmake/configure_wcoss_cray.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ option(VERBOSE "Enable VERBOSE mode" OFF)
option(32BIT "Enable 32BIT (single precision arithmetic in dycore)" OFF)
option(OPENMP "Enable OpenMP threading" ON)
option(AVX2 "Enable AVX2 instruction set" ON)
option(QUAD_PRECISION "Enable QUAD_PRECISION (for certain grid metric terms in dycore)" ON)

option(INLINE_POST "Enable inline post" ON)

Expand Down
1 change: 1 addition & 0 deletions cmake/configure_wcoss_dell_p3.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ option(VERBOSE "Enable VERBOSE mode" OFF)
option(32BIT "Enable 32BIT (single precision arithmetic in dycore)" OFF)
option(OPENMP "Enable OpenMP threading" ON)
option(AVX2 "Enable AVX2 instruction set" OFF)
option(QUAD_PRECISION "Enable QUAD_PRECISION (for certain grid metric terms in dycore)" ON)

option(INLINE_POST "Enable inline post" ON)

Expand Down
5 changes: 5 additions & 0 deletions conf/configure.fv3.cheyenne.gnu
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ AVX2 = Y
HYDRO = N
CCPP = N
SION = N
QUAD_PRECISION = Y

include $(ESMFMKFILE)
ESMF_INC = $(ESMF_F90COMPILEPATHS)
Expand Down Expand Up @@ -118,6 +119,10 @@ ifeq ($(MULTI_GASES),Y)
CPPDEFS += -DMULTI_GASES
endif

ifeq ($(QUAD_PRECISION),Y)
CPPDEFS += -DENABLE_QUAD_PRECISION
endif

FFLAGS_OPT = -O2 -fno-range-check
FFLAGS_REPRO = -O2 -g -fbacktrace -fno-range-check
FFLAGS_DEBUG = -g -O0 -fno-unsafe-math-optimizations -frounding-math -fsignaling-nans -ffpe-trap=invalid,zero,overflow -fbounds-check -fbacktrace -fno-range-check -Wall
Expand Down
5 changes: 5 additions & 0 deletions conf/configure.fv3.cheyenne.intel
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ AVX2 = Y
HYDRO = N
CCPP = N
SION = N
QUAD_PRECISION = Y

include $(ESMFMKFILE)
ESMF_INC = $(ESMF_F90COMPILEPATHS)
Expand Down Expand Up @@ -127,6 +128,10 @@ ifeq ($(MULTI_GASES),Y)
CPPDEFS += -DMULTI_GASES
endif

ifeq ($(QUAD_PRECISION),Y)
CPPDEFS += -DENABLE_QUAD_PRECISION
endif

FFLAGS_OPT = -O2 -debug minimal -fp-model source -qoverride-limits -qopt-prefetch=3
FFLAGS_REPRO = -O2 -debug minimal -fp-model consistent -qoverride-limits -g -traceback
FFLAGS_DEBUG = -g -O0 -check all -check noarg_temp_created -check nopointer -warn -warn noerrors -fp-stack-check -fstack-protector-all -fpe0 -debug -traceback -ftrapuv
Expand Down
5 changes: 5 additions & 0 deletions conf/configure.fv3.cheyenne.intel-impi
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ AVX2 = Y
HYDRO = N
CCPP = N
SION = N
QUAD_PRECISION = Y

include $(ESMFMKFILE)
ESMF_INC = $(ESMF_F90COMPILEPATHS)
Expand Down Expand Up @@ -123,6 +124,10 @@ ifeq ($(MULTI_GASES),Y)
CPPDEFS += -DMULTI_GASES
endif

ifeq ($(QUAD_PRECISION),Y)
CPPDEFS += -DENABLE_QUAD_PRECISION
endif

FFLAGS_OPT = -O2 -debug minimal -fp-model source -qoverride-limits -qopt-prefetch=3
FFLAGS_REPRO = -O2 -debug minimal -fp-model consistent -qoverride-limits -g -traceback
FFLAGS_DEBUG = -g -O0 -check all -check noarg_temp_created -check nopointer -warn -warn noerrors -fp-stack-check -fstack-protector-all -fpe0 -debug -traceback -ftrapuv
Expand Down
5 changes: 5 additions & 0 deletions conf/configure.fv3.endeavor.intel
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ AVX2 = Y
HYDRO = N
CCPP = N
SION = N
QUAD_PRECISION = Y

include $(ESMFMKFILE)
ESMF_INC = $(ESMF_F90COMPILEPATHS)
Expand Down Expand Up @@ -123,6 +124,10 @@ ifeq ($(MULTI_GASES),Y)
CPPDEFS += -DMULTI_GASES
endif

ifeq ($(QUAD_PRECISION),Y)
CPPDEFS += -DENABLE_QUAD_PRECISION
endif

FFLAGS_OPT = -O2 -debug minimal -fp-model source -qoverride-limits -qopt-prefetch=3
FFLAGS_REPRO = -O2 -debug minimal -fp-model consistent -qoverride-limits -g -traceback
FFLAGS_DEBUG = -g -O0 -check all -check noarg_temp_created -check nopointer -warn -warn noerrors -fp-stack-check -fstack-protector-all -fpe0 -debug -traceback -ftrapuv
Expand Down
5 changes: 5 additions & 0 deletions conf/configure.fv3.gaea.intel
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ OPENMP = Y
AVX2 = Y
HYDRO = N
CCPP = N
QUAD_PRECISION = Y

include $(ESMFMKFILE)
ESMF_INC = $(ESMF_F90COMPILEPATHS)
Expand Down Expand Up @@ -96,6 +97,10 @@ ifeq ($(MULTI_GASES),Y)
CPPDEFS += -DMULTI_GASES
endif

ifeq ($(QUAD_PRECISION),Y)
CPPDEFS += -DENABLE_QUAD_PRECISION
endif

FFLAGS_OPT = -O2 -debug minimal -fp-model source -qoverride-limits -qopt-prefetch=3
FFLAGS_REPRO = -O2 -debug minimal -fp-model consistent -qoverride-limits -g -traceback
FFLAGS_DEBUG = -g -O0 -check all -check noarg_temp_created -check nopointer -warn -warn noerrors -fp-stack-check -fstack-protector-all -fpe0 -debug -traceback -ftrapuv
Expand Down
5 changes: 5 additions & 0 deletions conf/configure.fv3.hera.gnu
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ OPENMP = Y
AVX2 = Y
HYDRO = N
CCPP = N
QUAD_PRECISION = Y

include $(ESMFMKFILE)
ESMF_INC = $(ESMF_F90COMPILEPATHS)
Expand Down Expand Up @@ -93,6 +94,10 @@ ifeq ($(MULTI_GASES),Y)
CPPDEFS += -DMULTI_GASES
endif

ifeq ($(QUAD_PRECISION),Y)
CPPDEFS += -DENABLE_QUAD_PRECISION
endif

FFLAGS_OPT = -O2 -fno-range-check
FFLAGS_REPRO = -O2 -g -fbacktrace -fno-range-check
FFLAGS_DEBUG = -g -O0 -fno-unsafe-math-optimizations -frounding-math -fsignaling-nans -ffpe-trap=invalid,zero,overflow -fbounds-check -fbacktrace -fno-range-check -Wall
Expand Down
6 changes: 6 additions & 0 deletions conf/configure.fv3.hera.intel
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ OPENMP = Y
AVX2 = Y
HYDRO = N
CCPP = N
QUAD_PRECISION = Y

include $(ESMFMKFILE)
ESMF_INC = $(ESMF_F90COMPILEPATHS)
Expand Down Expand Up @@ -105,6 +106,11 @@ ifeq ($(MULTI_GASES),Y)
CPPDEFS += -DMULTI_GASES
endif

ifeq ($(QUAD_PRECISION),Y)
CPPDEFS += -DENABLE_QUAD_PRECISION
endif


FFLAGS_OPT = -O2 -debug minimal -fp-model source -qoverride-limits -qopt-prefetch=3
FFLAGS_REPRO = -O2 -debug minimal -fp-model consistent -qoverride-limits -g -traceback
FFLAGS_DEBUG = -g -O0 -check all -check noarg_temp_created -check nopointer -warn -warn noerrors -fp-stack-check -fstack-protector-all -fpe0 -debug -traceback -ftrapuv
Expand Down
Loading

0 comments on commit 9e3aedc

Please sign in to comment.