-
Notifications
You must be signed in to change notification settings - Fork 64
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'main' into no_arg_mismatch
- Loading branch information
Showing
13 changed files
with
929 additions
and
81 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,90 @@ | ||
#------------------------------------------------------------------------------ | ||
cmake_minimum_required(VERSION 3.0) | ||
|
||
project(ccpp_chunked_data | ||
VERSION 1.0.0 | ||
LANGUAGES Fortran) | ||
|
||
#------------------------------------------------------------------------------ | ||
# Request a static build | ||
option(BUILD_SHARED_LIBS "Build a shared library" OFF) | ||
|
||
#------------------------------------------------------------------------------ | ||
# Set the sources: physics type definitions | ||
set(TYPEDEFS $ENV{CCPP_TYPEDEFS}) | ||
if(TYPEDEFS) | ||
message(STATUS "Got CCPP TYPEDEFS from environment variable: ${TYPEDEFS}") | ||
else(TYPEDEFS) | ||
include(${CMAKE_CURRENT_BINARY_DIR}/CCPP_TYPEDEFS.cmake) | ||
message(STATUS "Got CCPP TYPEDEFS from cmakefile include file: ${TYPEDEFS}") | ||
endif(TYPEDEFS) | ||
|
||
# Generate list of Fortran modules from the CCPP type | ||
# definitions that need need to be installed | ||
foreach(typedef_module ${TYPEDEFS}) | ||
list(APPEND MODULES_F90 ${CMAKE_CURRENT_BINARY_DIR}/${typedef_module}) | ||
endforeach() | ||
|
||
#------------------------------------------------------------------------------ | ||
# Set the sources: physics schemes | ||
set(SCHEMES $ENV{CCPP_SCHEMES}) | ||
if(SCHEMES) | ||
message(STATUS "Got CCPP SCHEMES from environment variable: ${SCHEMES}") | ||
else(SCHEMES) | ||
include(${CMAKE_CURRENT_BINARY_DIR}/CCPP_SCHEMES.cmake) | ||
message(STATUS "Got CCPP SCHEMES from cmakefile include file: ${SCHEMES}") | ||
endif(SCHEMES) | ||
|
||
# Set the sources: physics scheme caps | ||
set(CAPS $ENV{CCPP_CAPS}) | ||
if(CAPS) | ||
message(STATUS "Got CCPP CAPS from environment variable: ${CAPS}") | ||
else(CAPS) | ||
include(${CMAKE_CURRENT_BINARY_DIR}/CCPP_CAPS.cmake) | ||
message(STATUS "Got CCPP CAPS from cmakefile include file: ${CAPS}") | ||
endif(CAPS) | ||
|
||
# Set the sources: physics scheme caps | ||
set(API $ENV{CCPP_API}) | ||
if(API) | ||
message(STATUS "Got CCPP API from environment variable: ${API}") | ||
else(API) | ||
include(${CMAKE_CURRENT_BINARY_DIR}/CCPP_API.cmake) | ||
message(STATUS "Got CCPP API from cmakefile include file: ${API}") | ||
endif(API) | ||
|
||
set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -O0 -fno-unsafe-math-optimizations -frounding-math -fsignaling-nans -ffpe-trap=invalid,zero,overflow -fbounds-check -ggdb -fbacktrace -ffree-line-length-none") | ||
|
||
#------------------------------------------------------------------------------ | ||
add_library(ccpp_chunked_data STATIC ${SCHEMES} ${CAPS} ${API}) | ||
# Generate list of Fortran modules from defined sources | ||
foreach(source_f90 ${CAPS} ${API}) | ||
get_filename_component(tmp_source_f90 ${source_f90} NAME) | ||
string(REGEX REPLACE ".F90" ".mod" tmp_module_f90 ${tmp_source_f90}) | ||
string(TOLOWER ${tmp_module_f90} module_f90) | ||
list(APPEND MODULES_F90 ${CMAKE_CURRENT_BINARY_DIR}/${module_f90}) | ||
endforeach() | ||
|
||
set_target_properties(ccpp_chunked_data PROPERTIES VERSION ${PROJECT_VERSION} | ||
SOVERSION ${PROJECT_VERSION_MAJOR}) | ||
|
||
add_executable(test_chunked_data.x main.F90) | ||
add_dependencies(test_chunked_data.x ccpp_chunked_data) | ||
target_link_libraries(test_chunked_data.x ccpp_chunked_data) | ||
set_target_properties(test_chunked_data.x PROPERTIES LINKER_LANGUAGE Fortran) | ||
|
||
# Define where to install the library | ||
install(TARGETS ccpp_chunked_data | ||
EXPORT ccpp_chunked_data-targets | ||
ARCHIVE DESTINATION lib | ||
LIBRARY DESTINATION lib | ||
RUNTIME DESTINATION lib | ||
) | ||
# Export our configuration | ||
install(EXPORT ccpp_chunked_data-targets | ||
FILE ccpp_chunked_data-config.cmake | ||
DESTINATION lib/cmake | ||
) | ||
# Define where to install the C headers and Fortran modules | ||
#install(FILES ${HEADERS_C} DESTINATION include) | ||
install(FILES ${MODULES_F90} DESTINATION include) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
# How to build the chunked data test | ||
|
||
1. Set compiler environment as appropriate for your system | ||
2. Run the following commands: | ||
``` | ||
cd test_prebuild/test_chunked_data/ | ||
rm -fr build | ||
mkdir build | ||
../../scripts/ccpp_prebuild.py --config=ccpp_prebuild_config.py --builddir=build | ||
cd build | ||
cmake .. 2>&1 | tee log.cmake | ||
make 2>&1 | tee log.make | ||
``` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,81 @@ | ||
#!/usr/bin/env python | ||
|
||
# CCPP prebuild config for GFDL Finite-Volume Cubed-Sphere Model (FV3) | ||
|
||
############################################################################### | ||
# Definitions # | ||
############################################################################### | ||
|
||
HOST_MODEL_IDENTIFIER = "FV3" | ||
|
||
# Add all files with metadata tables on the host model side and in CCPP, | ||
# relative to basedir = top-level directory of host model. This includes | ||
# kind and type definitions used in CCPP physics. Also add any internal | ||
# dependencies of these files to the list. | ||
VARIABLE_DEFINITION_FILES = [ | ||
# actual variable definition files | ||
'../../src/ccpp_types.F90', | ||
'data.F90', | ||
] | ||
|
||
TYPEDEFS_NEW_METADATA = { | ||
'ccpp_types' : { | ||
'ccpp_t' : 'cdata', | ||
'ccpp_types' : '', | ||
}, | ||
'data' : { | ||
'chunked_data_type' : 'chunked_data_instance', | ||
'data' : '', | ||
}, | ||
} | ||
|
||
# Add all physics scheme files relative to basedir | ||
SCHEME_FILES = [ | ||
'chunked_data_scheme.F90', | ||
] | ||
|
||
# Default build dir, relative to current working directory, | ||
# if not specified as command-line argument | ||
DEFAULT_BUILD_DIR = 'build' | ||
|
||
# Auto-generated makefile/cmakefile snippets that contain all type definitions | ||
TYPEDEFS_MAKEFILE = '{build_dir}/CCPP_TYPEDEFS.mk' | ||
TYPEDEFS_CMAKEFILE = '{build_dir}/CCPP_TYPEDEFS.cmake' | ||
TYPEDEFS_SOURCEFILE = '{build_dir}/CCPP_TYPEDEFS.sh' | ||
|
||
# Auto-generated makefile/cmakefile snippets that contain all schemes | ||
SCHEMES_MAKEFILE = '{build_dir}/CCPP_SCHEMES.mk' | ||
SCHEMES_CMAKEFILE = '{build_dir}/CCPP_SCHEMES.cmake' | ||
SCHEMES_SOURCEFILE = '{build_dir}/CCPP_SCHEMES.sh' | ||
|
||
# Auto-generated makefile/cmakefile snippets that contain all caps | ||
CAPS_MAKEFILE = '{build_dir}/CCPP_CAPS.mk' | ||
CAPS_CMAKEFILE = '{build_dir}/CCPP_CAPS.cmake' | ||
CAPS_SOURCEFILE = '{build_dir}/CCPP_CAPS.sh' | ||
|
||
# Directory where to put all auto-generated physics caps | ||
CAPS_DIR = '{build_dir}' | ||
|
||
# Directory where the suite definition files are stored | ||
SUITES_DIR = '.' | ||
|
||
# Optional arguments - only required for schemes that use | ||
# optional arguments. ccpp_prebuild.py will throw an exception | ||
# if it encounters a scheme subroutine with optional arguments | ||
# if no entry is made here. Possible values are: 'all', 'none', | ||
# or a list of standard_names: [ 'var1', 'var3' ]. | ||
OPTIONAL_ARGUMENTS = {} | ||
|
||
# Directory where to write static API to | ||
STATIC_API_DIR = '{build_dir}' | ||
STATIC_API_CMAKEFILE = '{build_dir}/CCPP_API.cmake' | ||
STATIC_API_SOURCEFILE = '{build_dir}/CCPP_API.sh' | ||
|
||
# Directory for writing HTML pages generated from metadata files | ||
METADATA_HTML_OUTPUT_DIR = '{build_dir}' | ||
|
||
# HTML document containing the model-defined CCPP variables | ||
HTML_VARTABLE_FILE = '{build_dir}/CCPP_VARIABLES_CHUNKED_DATA.html' | ||
|
||
# LaTeX document containing the provided vs requested CCPP variables | ||
LATEX_VARTABLE_FILE = '{build_dir}/CCPP_VARIABLES_CHUNKED_DATA.tex' |
118 changes: 118 additions & 0 deletions
118
test_prebuild/test_chunked_data/chunked_data_scheme.F90
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,118 @@ | ||
!>\file chunked_data_scheme.F90 | ||
!! This file contains a chunked_data_scheme CCPP scheme that does nothing | ||
!! except requesting the minimum, mandatory variables. | ||
|
||
module chunked_data_scheme | ||
|
||
use, intrinsic :: iso_fortran_env, only: error_unit | ||
implicit none | ||
|
||
private | ||
public :: chunked_data_scheme_init, & | ||
chunked_data_scheme_timestep_init, & | ||
chunked_data_scheme_run, & | ||
chunked_data_scheme_timestep_finalize, & | ||
chunked_data_scheme_finalize | ||
|
||
! This is for unit testing only | ||
integer, parameter, dimension(4) :: data_array_sizes = (/6,6,6,3/) | ||
|
||
contains | ||
|
||
!! \section arg_table_chunked_data_scheme_init Argument Table | ||
!! \htmlinclude chunked_data_scheme_init.html | ||
!! | ||
subroutine chunked_data_scheme_init(data_array, errmsg, errflg) | ||
character(len=*), intent(out) :: errmsg | ||
integer, intent(out) :: errflg | ||
integer, intent(in) :: data_array(:) | ||
! Initialize CCPP error handling variables | ||
errmsg = '' | ||
errflg = 0 | ||
! Check size of data array | ||
write(error_unit,'(a,i3)') 'In chunked_data_scheme_init: checking size of data array to be', sum(data_array_sizes) | ||
if (size(data_array)/=sum(data_array_sizes)) then | ||
write(errmsg,'(2(a,i3))') "Error, expected size(data_array)==", sum(data_array_sizes), "but got ", size(data_array) | ||
errflg = 1 | ||
return | ||
end if | ||
end subroutine chunked_data_scheme_init | ||
|
||
!! \section arg_table_chunked_data_scheme_timestep_init Argument Table | ||
!! \htmlinclude chunked_data_scheme_timestep_init.html | ||
!! | ||
subroutine chunked_data_scheme_timestep_init(data_array, errmsg, errflg) | ||
character(len=*), intent(out) :: errmsg | ||
integer, intent(out) :: errflg | ||
integer, intent(in) :: data_array(:) | ||
! Initialize CCPP error handling variables | ||
errmsg = '' | ||
errflg = 0 | ||
! Check size of data array | ||
write(error_unit,'(a,i3)') 'In chunked_data_scheme_timestep_init: checking size of data array to be', sum(data_array_sizes) | ||
if (size(data_array)/=sum(data_array_sizes)) then | ||
write(errmsg,'(2(a,i3))') "Error, expected size(data_array)==", sum(data_array_sizes), " but got ", size(data_array) | ||
errflg = 1 | ||
return | ||
end if | ||
end subroutine chunked_data_scheme_timestep_init | ||
|
||
!! \section arg_table_chunked_data_scheme_run Argument Table | ||
!! \htmlinclude chunked_data_scheme_run.html | ||
!! | ||
subroutine chunked_data_scheme_run(nchunk, data_array, errmsg, errflg) | ||
character(len=*), intent(out) :: errmsg | ||
integer, intent(out) :: errflg | ||
integer, intent(in) :: nchunk | ||
integer, intent(in) :: data_array(:) | ||
! Initialize CCPP error handling variables | ||
errmsg = '' | ||
errflg = 0 | ||
! Check size of data array | ||
write(error_unit,'(2(a,i3))') 'In chunked_data_scheme_run: checking size of data array for chunk', nchunk, ' to be', data_array_sizes(nchunk) | ||
if (size(data_array)/=data_array_sizes(nchunk)) then | ||
write(errmsg,'(a,i4)') "Error in chunked_data_scheme_run, expected size(data_array)==6, got ", size(data_array) | ||
errflg = 1 | ||
return | ||
end if | ||
end subroutine chunked_data_scheme_run | ||
|
||
!! \section arg_table_chunked_data_scheme_timestep_finalize Argument Table | ||
!! \htmlinclude chunked_data_scheme_timestep_finalize.html | ||
!! | ||
subroutine chunked_data_scheme_timestep_finalize(data_array, errmsg, errflg) | ||
character(len=*), intent(out) :: errmsg | ||
integer, intent(out) :: errflg | ||
integer, intent(in) :: data_array(:) | ||
! Initialize CCPP error handling variables | ||
errmsg = '' | ||
errflg = 0 | ||
! Check size of data array | ||
write(error_unit,'(a,i3)') 'In chunked_data_scheme_timestep_finalize: checking size of data array to be', sum(data_array_sizes) | ||
if (size(data_array)/=sum(data_array_sizes)) then | ||
write(errmsg,'(2(a,i3))') "Error, expected size(data_array)==", sum(data_array_sizes), "but got ", size(data_array) | ||
errflg = 1 | ||
return | ||
end if | ||
end subroutine chunked_data_scheme_timestep_finalize | ||
|
||
!! \section arg_table_chunked_data_scheme_finalize Argument Table | ||
!! \htmlinclude chunked_data_scheme_finalize.html | ||
!! | ||
subroutine chunked_data_scheme_finalize(data_array, errmsg, errflg) | ||
character(len=*), intent(out) :: errmsg | ||
integer, intent(out) :: errflg | ||
integer, intent(in) :: data_array(:) | ||
! Initialize CCPP error handling variables | ||
errmsg = '' | ||
errflg = 0 | ||
! Check size of data array | ||
write(error_unit,'(a,i3)') 'In chunked_data_scheme_finalize: checking size of data array to be', sum(data_array_sizes) | ||
if (size(data_array)/=sum(data_array_sizes)) then | ||
write(errmsg,'(2(a,i3))') "Error, expected size(data_array)==", sum(data_array_sizes), "but got ", size(data_array) | ||
errflg = 1 | ||
return | ||
end if | ||
end subroutine chunked_data_scheme_finalize | ||
|
||
end module chunked_data_scheme |
Oops, something went wrong.