Skip to content

Commit

Permalink
merge to head of main
Browse files Browse the repository at this point in the history
  • Loading branch information
Courtney Peverley committed Apr 22, 2024
2 parents 930c3db + 0f416a2 commit 86ddbce
Show file tree
Hide file tree
Showing 18 changed files with 156 additions and 18 deletions.
11 changes: 11 additions & 0 deletions .github/workflows/prebuild.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,17 @@ jobs:
python -m pip install --upgrade pip
pip install flake8 pytest
if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
- name: Install open mpi
run: |
wget https://github.com/open-mpi/ompi/archive/refs/tags/v4.1.6.tar.gz
tar -xvf v4.1.6.tar.gz
cd ompi-4.1.6
./autogen.pl
./configure --prefix=/home/runner/ompi-4.1.6
make -j4
make install
echo "LD_LIBRARY_PATH=/home/runner/ompi-4.1.6/lib:$LD_LIBRARY_PATH" >> $GITHUB_ENV
echo "PATH=/home/runner/ompi-4.1.6/bin:$PATH" >> $GITHUB_ENV
- name: ccpp-prebuild unit tests
run: |
export PYTHONPATH=$(pwd)/scripts:$(pwd)/scripts/parse_tools
Expand Down
9 changes: 8 additions & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.0)
cmake_minimum_required(VERSION 3.10)

project(ccpp_framework
VERSION 5.0.0
Expand All @@ -10,6 +10,13 @@ set(PACKAGE "ccpp-framework")
set(AUTHORS "Dom Heinzeller" "Grant Firl" "Mike Kavulich" "Dustin Swales" "Courtney Peverley")
string(TIMESTAMP YEAR "%Y")

#------------------------------------------------------------------------------
# Set MPI flags for Fortran with MPI F08 interface
find_package(MPI REQUIRED Fortran)
if(NOT MPI_Fortran_HAVE_F08_MODULE)
message(FATAL_ERROR "MPI implementation does not support the Fortran 2008 mpi_f08 interface")
endif()

#------------------------------------------------------------------------------
# Set OpenMP flags for C/C++/Fortran
if (OPENMP)
Expand Down
3 changes: 3 additions & 0 deletions scripts/ccpp_datafile.py
Original file line number Diff line number Diff line change
Expand Up @@ -994,6 +994,9 @@ def _new_scheme_entry(parent, scheme, group_name, scheme_headers):
emsg = "Scheme entry already exists for {} but name is {}"
raise CCPPDatatableError(emsg.format(sch_name, pname))
# end if
# Special case: Scheme w/o run phase.
if not scheme._has_run_phase:
return
else:
phase_entry = ET.SubElement(sch_entry, sch_tag)
phase_entry.set("name", sch_name)
Expand Down
16 changes: 11 additions & 5 deletions scripts/suite_objects.py
Original file line number Diff line number Diff line change
Expand Up @@ -1098,6 +1098,7 @@ def __init__(self, scheme_xml, context, parent, run_env):
self.__var_debug_checks = list()
self.__forward_transforms = list()
self.__reverse_transforms = list()
self._has_run_phase = True
self.__optional_vars = list()
super().__init__(name, context, parent, run_env, active_call_list=True)

Expand Down Expand Up @@ -1143,6 +1144,9 @@ def analyze(self, phase, group, scheme_library, suite_vars, level):
if phase in func:
my_header = func[phase]
self.__subroutine_name = my_header.title
else:
self._has_run_phase = False
return set()
# end if
else:
estr = 'No schemes found for {}'
Expand Down Expand Up @@ -1727,11 +1731,13 @@ def write(self, outfile, errcode, errmsg, indent):
#
# Write the scheme call.
#
stmt = 'call {}({})'
outfile.write('',indent+1)
outfile.write('! Call scheme', indent+1)
outfile.write(stmt.format(self.subroutine_name, my_args), indent+1)
outfile.write('',indent+1)
if self._has_run_phase:
stmt = 'call {}({})'
outfile.write('',indent+1)
outfile.write('! Call scheme', indent+1)
outfile.write(stmt.format(self.subroutine_name, my_args), indent+1)
outfile.write('',indent+1)
# end if
#
# Copy any local pointers.
#
Expand Down
3 changes: 3 additions & 0 deletions src/ccpp_types.F90
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@
!
module ccpp_types

use mpi_f08, only: MPI_Comm

!! \section arg_table_ccpp_types
!! \htmlinclude ccpp_types.html
!!
Expand All @@ -27,6 +29,7 @@ module ccpp_types

private
public :: ccpp_t, one
public :: MPI_Comm

!> @var Definition of constant one
integer, parameter :: one = 1
Expand Down
16 changes: 16 additions & 0 deletions src/ccpp_types.meta
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,16 @@
dimensions = ()
type = integer

########################################################################
[ccpp-table-properties]
name = MPI_Comm
type = ddt
dependencies =

[ccpp-arg-table]
name = MPI_Comm
type = ddt

########################################################################

[ccpp-table-properties]
Expand All @@ -79,3 +89,9 @@
units = 1
dimensions = ()
type = integer
[MPI_Comm]
standard_name = MPI_Comm
long_name = definition of type MPI_Comm
units = DDT
dimensions = ()
type = MPI_Comm
13 changes: 9 additions & 4 deletions test/capgen_test/run_test
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,7 @@ ccpp_files="${ccpp_files},${build_dir}/ccpp/test_host_ccpp_cap.F90"
ccpp_files="${ccpp_files},${build_dir}/ccpp/ccpp_ddt_suite_cap.F90"
ccpp_files="${ccpp_files},${build_dir}/ccpp/ccpp_temp_suite_cap.F90"
process_list="adjusting=temp_calc_adjust,setter=temp_set"
module_list="environ_conditions,make_ddt,temp_adjust,temp_calc_adjust,temp_set"
module_list="environ_conditions,make_ddt,setup_coeffs,temp_adjust,temp_calc_adjust,temp_set"
dependencies="bar.F90,foo.F90,qux.F90"
suite_list="ddt_suite;temp_suite"
required_vars_ddt="ccpp_error_code,ccpp_error_message,horizontal_dimension"
Expand All @@ -145,7 +145,9 @@ input_vars_ddt="${input_vars_ddt},model_times,number_of_model_times"
input_vars_ddt="${input_vars_ddt},surface_air_pressure"
output_vars_ddt="ccpp_error_code,ccpp_error_message"
output_vars_ddt="${output_vars_ddt},model_times,number_of_model_times"
required_vars_temp="ccpp_error_code,ccpp_error_message,horizontal_dimension"
required_vars_temp="ccpp_error_code,ccpp_error_message"
required_vars_temp="${required_vars_temp},coefficients_for_interpolation"
required_vars_temp="${required_vars_temp},horizontal_dimension"
required_vars_temp="${required_vars_temp},horizontal_loop_begin"
required_vars_temp="${required_vars_temp},horizontal_loop_end"
required_vars_temp="${required_vars_temp},index_of_water_vapor_specific_humidity"
Expand All @@ -157,7 +159,8 @@ required_vars_temp="${required_vars_temp},time_step_for_physics"
required_vars_temp="${required_vars_temp},vertical_interface_dimension"
required_vars_temp="${required_vars_temp},vertical_layer_dimension"
required_vars_temp="${required_vars_temp},water_vapor_specific_humidity"
input_vars_temp="horizontal_dimension"
input_vars_temp="coefficients_for_interpolation"
input_vars_temp="${input_vars_temp},horizontal_dimension"
input_vars_temp="${input_vars_temp},horizontal_loop_begin"
input_vars_temp="${input_vars_temp},horizontal_loop_end"
input_vars_temp="${input_vars_temp},index_of_water_vapor_specific_humidity"
Expand All @@ -168,7 +171,9 @@ input_vars_temp="${input_vars_temp},surface_air_pressure,time_step_for_physics"
input_vars_temp="${input_vars_temp},vertical_interface_dimension"
input_vars_temp="${input_vars_temp},vertical_layer_dimension"
input_vars_temp="${input_vars_temp},water_vapor_specific_humidity"
output_vars_temp="ccpp_error_code,ccpp_error_message,potential_temperature"
output_vars_temp="ccpp_error_code,ccpp_error_message"
output_vars_temp="${output_vars_temp},coefficients_for_interpolation"
output_vars_temp="${output_vars_temp},potential_temperature"
output_vars_temp="${output_vars_temp},potential_temperature_at_interface"
output_vars_temp="${output_vars_temp},surface_air_pressure"
output_vars_temp="${output_vars_temp},water_vapor_specific_humidity"
Expand Down
24 changes: 24 additions & 0 deletions test/capgen_test/setup_coeffs.F90
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
module setup_coeffs
use ccpp_kinds, ONLY: kind_phys
implicit none

public :: setup_coeffs_timestep_init

contains
!> \section arg_table_setup_coeffs_timestep_init Argument Table
!! \htmlinclude arg_table_setup_coeffs_timestep_init.html
!!
subroutine setup_coeffs_timestep_init(coeffs, errmsg, errflg)

real(kind_phys), intent(inout) :: coeffs(:)
character(len=512), intent(out) :: errmsg
integer, intent(out) :: errflg

errmsg = ''
errflg = 0

coeffs(:) = 1._kind_phys

end subroutine setup_coeffs_timestep_init

end module setup_coeffs
29 changes: 29 additions & 0 deletions test/capgen_test/setup_coeffs.meta
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
[ccpp-table-properties]
name = setup_coeffs
type = scheme
[ccpp-arg-table]
name = setup_coeffs_timestep_init
type = scheme
[ coeffs ]
standard_name = coefficients_for_interpolation
long_name = coefficients for interpolation
units = none
dimensions = (horizontal_dimension)
type = real
kind = kind_phys
intent = inout
[ errmsg ]
standard_name = ccpp_error_message
long_name = Error message for error handling in CCPP
units = none
dimensions = ()
type = character
kind = len=512
intent = out
[ errflg ]
standard_name = ccpp_error_code
long_name = Error flag for error handling in CCPP
units = 1
dimensions = ()
type = integer
intent = out
1 change: 1 addition & 0 deletions test/capgen_test/temp_scheme_files.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
setup_coeffs.meta
temp_set.meta
temp_adjust.meta
temp_calc_adjust.meta
1 change: 1 addition & 0 deletions test/capgen_test/temp_suite.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

<suite name="temp_suite" version="1.0">
<group name="physics1">
<scheme>setup_coeffs</scheme>
<scheme>temp_set</scheme>
</group>
<group name="physics2">
Expand Down
9 changes: 6 additions & 3 deletions test/capgen_test/test_host.F90
Original file line number Diff line number Diff line change
Expand Up @@ -358,23 +358,26 @@ program test
character(len=cs), target :: test_parts1(2) = (/ 'physics1 ', &
'physics2 ' /)
character(len=cs), target :: test_parts2(1) = (/ 'data_prep ' /)
character(len=cm), target :: test_invars1(6) = (/ &
character(len=cm), target :: test_invars1(7) = (/ &
'potential_temperature ', &
'potential_temperature_at_interface ', &
'coefficients_for_interpolation ', &
'surface_air_pressure ', &
'water_vapor_specific_humidity ', &
'potential_temperature_increment ', &
'time_step_for_physics ' /)
character(len=cm), target :: test_outvars1(6) = (/ &
character(len=cm), target :: test_outvars1(7) = (/ &
'potential_temperature ', &
'potential_temperature_at_interface ', &
'coefficients_for_interpolation ', &
'surface_air_pressure ', &
'water_vapor_specific_humidity ', &
'ccpp_error_code ', &
'ccpp_error_message ' /)
character(len=cm), target :: test_reqvars1(8) = (/ &
character(len=cm), target :: test_reqvars1(9) = (/ &
'potential_temperature ', &
'potential_temperature_at_interface ', &
'coefficients_for_interpolation ', &
'surface_air_pressure ', &
'water_vapor_specific_humidity ', &
'potential_temperature_increment ', &
Expand Down
1 change: 1 addition & 0 deletions test/capgen_test/test_host_mod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ module test_host_mod
integer, parameter :: index_qv = 1
real(kind_phys), allocatable :: temp_midpoints(:,:)
real(kind_phys) :: temp_interfaces(ncols, pverP)
real(kind_phys) :: coeffs(ncols)
real(kind_phys), dimension(DiagDimStart:ncols, DiagDimStart:pver) :: &
diag1, &
diag2
Expand Down
6 changes: 6 additions & 0 deletions test/capgen_test/test_host_mod.meta
Original file line number Diff line number Diff line change
Expand Up @@ -90,3 +90,9 @@
dimensions = (number_of_model_times)
type = integer
allocatable = True
[ coeffs ]
standard_name = coefficients_for_interpolation
long_name = coefficients for interpolation
units = none
dimensions = (horizontal_dimension)
type = real | kind = kind_phys
5 changes: 4 additions & 1 deletion test/capgen_test/test_reports.py
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ def usage(errmsg=None):
os.path.join(_BUILD_DIR, "ccpp", "ccpp_ddt_suite_cap.F90"),
os.path.join(_BUILD_DIR, "ccpp", "ccpp_temp_suite_cap.F90")]
_PROCESS_LIST = ["setter=temp_set", "adjusting=temp_calc_adjust"]
_MODULE_LIST = ["environ_conditions", "make_ddt", "temp_adjust",
_MODULE_LIST = ["environ_conditions", "make_ddt", "setup_coeffs", "temp_adjust",
"temp_calc_adjust", "temp_set"]
_SUITE_LIST = ["ddt_suite", "temp_suite"]
_INPUT_VARS_DDT = ["model_times", "number_of_model_times",
Expand All @@ -85,17 +85,20 @@ def usage(errmsg=None):
_REQUIRED_VARS_TEMP = ["ccpp_error_code", "ccpp_error_message",
"potential_temperature",
"potential_temperature_at_interface",
"coefficients_for_interpolation",
"potential_temperature_increment",
"surface_air_pressure", "time_step_for_physics",
"water_vapor_specific_humidity"]
_INPUT_VARS_TEMP = ["potential_temperature",
"potential_temperature_at_interface",
"coefficients_for_interpolation",
"potential_temperature_increment",
"surface_air_pressure", "time_step_for_physics",
"water_vapor_specific_humidity"]
_OUTPUT_VARS_TEMP = ["ccpp_error_code", "ccpp_error_message",
"potential_temperature",
"potential_temperature_at_interface",
"coefficients_for_interpolation",
"surface_air_pressure", "water_vapor_specific_humidity"]

def fields_string(field_type, field_list, sep):
Expand Down
12 changes: 10 additions & 2 deletions test_prebuild/test_blocked_data/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,14 +1,21 @@
#------------------------------------------------------------------------------
cmake_minimum_required(VERSION 3.0)
cmake_minimum_required(VERSION 3.10)

project(ccpp_blocked_data
VERSION 1.0.0
LANGUAGES Fortran)
LANGUAGES C Fortran)

#------------------------------------------------------------------------------
# Request a static build
option(BUILD_SHARED_LIBS "Build a shared library" OFF)

#------------------------------------------------------------------------------
# Set MPI flags for C/C++/Fortran with MPI F08 interface
find_package(MPI REQUIRED C Fortran)
if(NOT MPI_Fortran_HAVE_F08_MODULE)
message(FATAL_ERROR "MPI implementation does not support the Fortran 2008 mpi_f08 interface")
endif()

#------------------------------------------------------------------------------
# Set the sources: physics type definitions
set(TYPEDEFS $ENV{CCPP_TYPEDEFS})
Expand Down Expand Up @@ -57,6 +64,7 @@ set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -O0 -fno-unsafe-math-optimizatio

#------------------------------------------------------------------------------
add_library(ccpp_blocked_data STATIC ${SCHEMES} ${CAPS} ${API})
target_link_libraries(ccpp_blocked_data PRIVATE MPI::MPI_Fortran)
# Generate list of Fortran modules from defined sources
foreach(source_f90 ${CAPS} ${API})
get_filename_component(tmp_source_f90 ${source_f90} NAME)
Expand Down
12 changes: 10 additions & 2 deletions test_prebuild/test_chunked_data/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,14 +1,21 @@
#------------------------------------------------------------------------------
cmake_minimum_required(VERSION 3.0)
cmake_minimum_required(VERSION 3.10)

project(ccpp_chunked_data
VERSION 1.0.0
LANGUAGES Fortran)
LANGUAGES C Fortran)

#------------------------------------------------------------------------------
# Request a static build
option(BUILD_SHARED_LIBS "Build a shared library" OFF)

#------------------------------------------------------------------------------
# Set MPI flags for C/C++/Fortran with MPI F08 interface
find_package(MPI REQUIRED C Fortran)
if(NOT MPI_Fortran_HAVE_F08_MODULE)
message(FATAL_ERROR "MPI implementation does not support the Fortran 2008 mpi_f08 interface")
endif()

#------------------------------------------------------------------------------
# Set the sources: physics type definitions
set(TYPEDEFS $ENV{CCPP_TYPEDEFS})
Expand Down Expand Up @@ -57,6 +64,7 @@ set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -O0 -fno-unsafe-math-optimizatio

#------------------------------------------------------------------------------
add_library(ccpp_chunked_data STATIC ${SCHEMES} ${CAPS} ${API})
target_link_libraries(ccpp_chunked_data PRIVATE MPI::MPI_Fortran)
# Generate list of Fortran modules from defined sources
foreach(source_f90 ${CAPS} ${API})
get_filename_component(tmp_source_f90 ${source_f90} NAME)
Expand Down
3 changes: 3 additions & 0 deletions test_prebuild/test_chunked_data/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,7 @@ mkdir build
cd build
cmake .. 2>&1 | tee log.cmake
make 2>&1 | tee log.make
./test_chunked_data.x
# On systems where linking against the MPI library requires a parallel launcher,
# use 'mpirun -np 1 ./test_chunked_data.x' or 'srun -n 1 ./test_chunked_data.x' etc.
```

0 comments on commit 86ddbce

Please sign in to comment.