Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

coupler mixed precision #1353

Merged
merged 42 commits into from
Aug 30, 2023
Merged
Show file tree
Hide file tree
Changes from 22 commits
Commits
Show all changes
42 commits
Select commit Hold shift + click to select a range
46d8e44
Update mixedmode_base branch to main (#1144)
mlee03 Mar 8, 2023
dde0b88
update the mixedmode_base branch to main (#1154)
mlee03 Mar 15, 2023
bc9e4d9
Merge branch 'mixedmode' into mixedmode_base
rem1776 Apr 5, 2023
2977578
rm accidental empty line
Apr 5, 2023
b3374f6
chore: bring mixedmode_base up to date with main (#1173)
mlee03 Apr 5, 2023
cca0c7d
chore: update mixedmode_base to main (#1234)
mlee03 May 24, 2023
712330b
chore: merge main updates into mixedmode_base(#1267)
mlee03 Jul 7, 2023
8c72630
mixed-precision: update mixedmode base (#1289)
mlee03 Jul 26, 2023
19ee83f
readd file
Aug 1, 2023
1a309f4
working compile with type changes
Aug 4, 2023
2c0b45c
finish up ifs for association
Aug 11, 2023
7d23cb8
update existing tests for r4 precision, fix missed bc_types
Aug 16, 2023
baf95ca
add in test changes from other branch
Aug 18, 2023
f693a46
add in mikyung's test
Aug 18, 2023
f6503d7
more tests
Aug 18, 2023
9517433
mixed precision merge main into mixedmode_base (#1342)
mlee03 Aug 23, 2023
e27ec4a
remove added test for pr
Aug 23, 2023
49b3693
Merge remote-tracking branch 'origin/mixedmode_base' into coupler_mp_…
Aug 23, 2023
8c9eabf
update mikyungs ocean fluxes test for both kinds
Aug 23, 2023
9c543de
missed r4 argument + macros for aof test
Aug 23, 2023
24933d7
Add in checks for only one kind associated
Aug 24, 2023
5d8e7ff
Merge branch 'mixedmode' into coupler_mp_notest
rem1776 Aug 24, 2023
1d24387
Review comments + any lingering conversion warnings
Aug 25, 2023
f25e261
Merge branch 'coupler_mp_notest' of github.com:rem1776/FMS into coupl…
Aug 25, 2023
3813ce3
many linter fixes :(
Aug 25, 2023
22a41dc
Merge remote-tracking branch 'origin/mixedmode' into coupler_mp_notest
Aug 25, 2023
346c225
Add in class(*) for aof_set_coupler_flux optional reals
Aug 25, 2023
039e34d
fix issues with checks for only one kind associated
Aug 28, 2023
c41238b
only check association if bc count is >0
Aug 28, 2023
d509e0d
fix the checks again
Aug 28, 2023
d6ae048
cmake build
Aug 29, 2023
fea9409
remove added prints
Aug 29, 2023
60d5bc5
add bc count > 0 to error checking
Aug 29, 2023
298f70b
Merge remote-tracking branch 'origin/mixedmode' into coupler_mp_notest
Aug 29, 2023
67ad65e
Merge remote-tracking branch 'upstream/mixedmode' into coupler_mp_notest
Aug 30, 2023
47ae5f7
remove some other changes that slid in
Aug 30, 2023
27c6e87
take out set check in spawn routines
Aug 30, 2023
b6b1d02
build fixes
Aug 30, 2023
41a5bd7
fix build for real
Aug 30, 2023
c6fc1b4
typo
Aug 30, 2023
0b501bd
another typo
Aug 30, 2023
6b91325
one last thing hoepfully
Aug 30, 2023
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
68 changes: 68 additions & 0 deletions .github/workflows/Dockerfile.gnu
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
#***********************************************************************
#* GNU Lesser General Public License
#*
#* This file is part of the GFDL Flexible Modeling System (FMS).
#*
#* FMS is free software: you can redistribute it and/or modify it under
#* the terms of the GNU Lesser General Public License as published by
#* the Free Software Foundation, either version 3 of the License, or (at
#* your option) any later version.
#*
#* FMS is distributed in the hope that it will be useful, but WITHOUT
#* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
#* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
#* for more details.
#*
#* You should have received a copy of the GNU Lesser General Public
#* License along with FMS. If not, see <http://www.gnu.org/licenses/>.
#***********************************************************************
# FMS CI image recipefile for GNU
# Runs on centos stream (builder has same base from redhat registry)
#
# arguments to specify versions to build can be given to docker or changed here (--build-arg name=val)
FROM spack/rockylinux9:latest as builder

ARG gcc_version=12.3.0
ARG netcdfc_version=4.9.0
ARG netcdff_version=4.6.0
ARG libyaml_version=0.2.5
ARG mpich_version=4.0.2

COPY spack.env /opt/deps/spack.env

# perl's download kept timing out
RUN sed -i 's/connect_timeout: 10/connect_timeout: 600/' /opt/spack/etc/spack/defaults/config.yaml && \
spack install gcc@${gcc_version} && \
source /opt/spack/share/spack/setup-env.sh && \
spack load gcc@${gcc_version} && \
spack compiler find && \
sed "s/COMPILER/gcc@$gcc_version/" /opt/deps/spack.env > spack.yaml && \
sed -i "s/NETCDF_C_VERSION/$netcdfc_version/" spack.yaml && \
sed -i "s/NETCDF_F_VERSION/$netcdff_version/" spack.yaml && \
sed -i "s/LIBYAML_VERSION/$libyaml_version/" spack.yaml && \
sed -i "s/MPI_LIB/mpich@$mpich_version/" spack.yaml && \
spack env activate -d . && \
spack -e . concretize -f > /opt/deps/deps.log && \
spack install --fail-fast

# copy built software to base from first image
FROM rockylinux:9

COPY --from=builder /opt/view/ /opt/view/
COPY --from=builder /opt/deps/ /opt/deps/

# input files used with --enable-input-tests
# need to be on the dev boxes if building
COPY ./fms_test_input /home/unit_tests_input

RUN dnf install -y autoconf make automake m4 libtool pkg-config zip

ENV FC="mpifort"
ENV CC="mpicc"
ENV MPICH_FC="/opt/view/bin/gfortran"
ENV MPICH_CC="/opt/view/bin/gcc"
ENV FCFLAGS="-I/opt/view/include"
ENV CFLAGS="-I/opt/view/include"
ENV LDFLAGS="-L/opt/view/lib"
ENV LD_LIBRARY_PATH="/opt/view/lib:/opt/view/lib64:/usr/local/lib:/usr/local/lib64"
ENV PATH="/opt/view/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin"
39 changes: 39 additions & 0 deletions .github/workflows/github_autotools_gnu.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
# 'main' required ci, does a distcheck (builds, tests, check install)
# image created off dockerfile in repo, compile/link flags are set there
name: Build libFMS test with autotools

on: [push, pull_request]

jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
conf-flag: [ --disable-openmp, --enable-mixed-mode, --disable-setting-flags, --with-mpi=no]
input-flag: [--with-yaml, --enable-test-input=/home/unit_tests_input]
exclude:
- conf-flag: --with-mpi=no
input-flag: --enable-test-input=/home/unit_tests_input
container:
image: noaagfdl/fms-ci-rocky-gnu:12.3.0
env:
TEST_VERBOSE: 1
DISTCHECK_CONFIGURE_FLAGS: "${{ matrix.conf-flag }} ${{ matrix.input-flag }} ${{ matrix.io-flag }}"
SKIP_TESTS: "test_yaml_parser.5" # temporary till fixes are in
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Prepare GNU autoconf for build
run: autoreconf -if
- name: Configure the build
if: ${{ matrix.conf-flag != '--disable-setting-flags' }}
run: ./configure ${DISTCHECK_CONFIGURE_FLAGS} || cat config.log
- name: Configure the build with compiler flags
if: ${{ matrix.conf-flag == '--disable-setting-flags' }}
run: ./configure ${DISTCHECK_CONFIGURE_FLAGS} FCFLAGS="-fdefault-real-8 -fdefault-double-8 -fcray-pointer -ffree-line-length-none -I/usr/include $FCFLAGS" || cat config.log
- name: Build the library
run: make distcheck
if: ${{ matrix.conf-flag != '--with-mpi=no' }}
- name: Build the library (without test suite for serial build)
run: make
if: ${{ matrix.conf-flag == '--with-mpi=no' }}
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,16 @@ on: pull_request
jobs:
intel-autotools:
runs-on: ubuntu-latest
strategy:
matrix:
io-flag: ["--disable-deprecated-io", "--enable-deprecated-io"]
container:
image: intel/oneapi-hpckit:2023.1.0-devel-ubuntu20.04
env:
CC: mpiicc
FC: mpiifort
CFLAGS: "-I/libs/include"
FCFLAGS: "-I/libs/include -g -traceback"
FCFLAGS: "-I/libs/include -g -traceback ${{ matrix.io-flag }}"
LDFLAGS: "-L/libs/lib"
TEST_VERBOSE: 1
I_MPI_FABRICS: "shm" # needed for mpi in image
Expand Down
File renamed without changes.
File renamed without changes.
17 changes: 17 additions & 0 deletions .github/workflows/spack.env
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# template for spack environment yaml
# uppercase words get replaced before activating
spack:
specs:
- COMPILER
- MPI_LIB
- netcdf-c@NETCDF_C_VERSION ^MPI_LIB
- netcdf-fortran@NETCDF_F_VERSION
- libyaml@LIBYAML_VERSION
concretizer:
unify: true
packages:
all:
compiler: [ COMPILER ]
config:
install_tree: /opt/deps
view: /opt/view
4 changes: 3 additions & 1 deletion .github/workflows/version.yml
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
# appends -dev to the version upon release and opens pr
# CI won't run on generated PR, easiest workaround is to close + reopen
on:
release:
types: [published]
Expand All @@ -16,4 +18,4 @@ jobs:
branch-suffix: timestamp # add a timestamp to branch name
delete-branch: true # delete afer merge
title: Append dev to version number post-release
body: automated change, adds '-dev' to the version number upon releases
body: automated change, adds '-dev' to the version number upon releases. This PR will need to be closed and reopened to run CI testing.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -92,3 +92,4 @@ settings.json
*.code-workspace
# Local History for Visual Studio Code
.history/
*.i90
39 changes: 39 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,45 @@ and this project uses `yyyy.rr[.pp]`, where `yyyy` is the year a patch is releas
`rr` is a sequential release number (starting from `01`), and an optional two-digit
sequential patch number (starting from `01`).

## [2023.02] - 2023-07-27
### Known Issues
- GCC 11.1.0 is unsupported due to compilation issues with select type. The issue is resolved in later GCC releases.
- When outputting sub-region diagnostics, the current diag_manager does not add "tileX" to the filename when using a cube sphere. This leads to trouble when trying to combine the files and regrid them (if the region is in two different tiles)
- GCC 10 and greater causing io issues when compiled using O2 optimization flags
- GNU compilers prior to the GCC 9.0 release are unsupported for this release due to lack of support for the findloc intrinsic function. This will result in an error saying 'findloc' has no IMPLICIT type and can be resolved by compiling with gcc version 9.0 or greater.

### Added
- MPP/EXCHANGE: Adds association checks before pointer deallocations in mpp includes and xgrid

### Changed
- LIBFMS: The libFMS.F90 file (module name `fms`) meant to provide global access has been updated to include 'fms' and it's module/subdirectory name as prefixes for all names. This will only affect external codes that are already using the global module (via `use fms`) and not individual modules.
- MIXED PRECISION: Updates the axis_utils2, horiz_interp, sat_vapor_pressure, and axis_utils subdirectories to support mixed precision real values.
- FMS2_IO: Added in mpp_scatter and mpp_gather performance changes from the 2023.01.01 patch. See below for more details.
- FMS2_IO: Improved error messages to give more debugging information
- FMS_MOD: Changed fms_init to include a system call to set the stack size to unlimited, removed previously added stack size fixes
- MONIN_OBUKHOV: Restructures the subroutines in `stable_mix` interface so that 1d calls the underlying implementation, and 2 and 3d call it on 1d slices of the data as opposed to passing in mismatched arrays.
- MPP: Updates from JEDI for ajoint version the mpp halo filling (mpp_do_update_ad.fh), adds checkpoint for forward buffer information.

### Fixed
- MPP: mpp_broadcast causing an unintended error message due to checking the wrong pe value
- MPP: Added workaround for GCC 12 issues causing errors with string lengths in fms2_io
- FMS2_IO: Fixed support for 'packed' data when using NF_SHORT variables. Scale_factor and add_offset attributes will now be applied if present.
- DOCS: Improved doxygen comments for tranlon, updated deployment action for site
- TESTS: Workaround added for ICE coming from mpp_alltoall test with intel 2022.3, and fixes for any test scripts missing input.nml creation. Fixes for mpp/test_global_array failures.
- TIME_INTERP: Fixes crashes when calling with a non-existant field
- DIAG_MANAGER: Fixes a module dependency issue causing failures during parallel builds
- AXIS_UTILS2: Fixes an out of bounds memory index

### Removed
- FMS_IO/MPP_IO: The two older io modules, fms_io_mod and mpp_io_mod, have been deprecated and will not be compiled by default. If you wish to compile these modules, you must use the -Duse_deprecated_io CPP flag or the --enable-deprecated-io configure option if building with autotools.

### Tag Commit Hashes
- 2023.02-beta1 2be8aa452ad3e5f43e92c38a64f12d1ae6c43fb8
- 2023.02-alpha3 8c73bd18dc1d580f2ee524c37cf903ff54d40501
- 2023.02-alpha2 783019fdec89a8db2b26247c2f63d4782e1495c0
- 2023.02-alpga1 419c66be31f82ebb13a91ea5e837c707eb54473b


## [2023.01.01] - 2023-06-06
### Changed
- FMS2_IO: Performance changes for domain_reads_2d and domain_reads_3d:
Expand Down
22 changes: 14 additions & 8 deletions CI.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,24 +8,30 @@ Required CI for pull requests are listed first.
## Pull Request CI and checks

### Build libFMS with autotools

Required GNU build test for all pull requests/pushes.
Runs `make distcheck` after configuring via GNU autotools.

Runs on a container image with spack installed dependencies, on top a rocky linux base.

Dockerfile for image is stored at .github/workflows/Dockerfile.gnu for more specific information on the CI environment.

Container environment:
gcc v7.3.0
mpich v3.3a2
netcdf v4.6.0
netcdf-fortran v4.4.4
gcc v12.3.0
mpich v4.0.2
netcdf v4.9.0
netcdf-fortran v4.6.0
autoconf v2.69
libyaml v0.2.5

container hosted at [noaagfdl/ubuntu_libfms_gnu:latest](https://hub.docker.com/r/noaagfdl/ubuntu_libfms_gnu)

`./configure` flags:
- `--enable-openmp`
`./configure` flags tested:
- `--disable-openmp`
- `--enable-mixed-mode`
- `--with-mpi=no` (disables unit testing)
- `--disable-setting-flags`
- `--with-yaml`
- `--enable-test-input=/home/unit_tests_input`


### Build libfms with cmake
Required GNU build test for all pull requests/pushes.
Expand Down
3 changes: 2 additions & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ set(CMAKE_Fortran_FLAGS_DEBUG)

# Define the CMake project
project(FMS
VERSION 2023.01.0
VERSION 2023.02.0
DESCRIPTION "GFDL FMS Library"
HOMEPAGE_URL "https://www.gfdl.noaa.gov/fms"
LANGUAGES C Fortran)
Expand Down Expand Up @@ -196,6 +196,7 @@ list(APPEND fms_fortran_src_files
# Collect FMS C source files
list(APPEND fms_c_src_files
affinity/affinity.c
fms/fms_stacksize.c
mosaic/create_xgrid.c
mosaic/gradient_c2l.c
mosaic/interp.c
Expand Down
3 changes: 2 additions & 1 deletion axis_utils/include/axis_utils2.inc
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hmm, does this need to be merged with the current mixedmode branch?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should be updated, i left that one line deletion in axis utils cause that extra line will mess with the documentation parser.

Original file line number Diff line number Diff line change
Expand Up @@ -177,7 +177,8 @@
!! lon = 0 1 2 3 4 5 ... 358 359; lon_strt = 3
!! ==> lon = 3 4 5 6 7 8 ... 359 360 361 362; istrt = 4
!!

!! lon = 0 1 2 3 4 5 ... 358 359; lon_strt = 0
!! ==> lon = 0 1 2 3 4 5 ... 358 359; istrt = 0
subroutine TRANLON_(lon, lon_start, istrt)
real(kind=FMS_AU_KIND_), intent(inout), dimension(:) :: lon
real(kind=FMS_AU_KIND_), intent(in) :: lon_start
Expand Down
2 changes: 1 addition & 1 deletion configure.ac
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ AC_PREREQ([2.69])

# Initialize with name, version, and support email address.
AC_INIT([GFDL FMS Library],
[2023.01.00-dev],
[2023.02.00-dev],
[[email protected]],
[FMS],
[https://www.github.com/NOAA-GFDL/FMS])
Expand Down
5 changes: 4 additions & 1 deletion coupler/Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,10 @@ noinst_LTLIBRARIES = libcoupler.la
libcoupler_la_SOURCES = \
coupler_types.F90 \
ensemble_manager.F90 \
atmos_ocean_fluxes.F90
atmos_ocean_fluxes.F90 \
include/coupler_types.inc \
include/coupler_types_r4.fh \
include/coupler_types_r8.fh

# Some mods are dependant on other mods in this dir.
atmos_ocean_fluxes_mod.$(FC_MODEXT): coupler_types_mod.$(FC_MODEXT)
Expand Down
Loading
Loading