From 2103bae4961e54f34a418f5967e6462ba59c2ee9 Mon Sep 17 00:00:00 2001 From: Kyle Shores Date: Wed, 12 Jul 2023 13:47:51 -0500 Subject: [PATCH 01/59] util only build of musica core --- CMakeLists.txt | 1 + Dockerfile | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index f08e2710..25120bb5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -121,6 +121,7 @@ add_subdirectory(src) # MUSICA-core add_library(musicacore_object) add_library(musica::musicacore ALIAS musicacore_object) +set(ENABLE_UTIL_ONLY ON) add_subdirectory(lib/musica-core/src) set_target_properties(musicacore_object PROPERTIES diff --git a/Dockerfile b/Dockerfile index cdd6b1b3..a5c1ffd2 100644 --- a/Dockerfile +++ b/Dockerfile @@ -12,11 +12,12 @@ RUN dnf -y update \ valgrind \ && dnf clean all +ENV FC=gfortran + # install json-fortran RUN curl -LO https://github.com/jacobwilliams/json-fortran/archive/8.2.0.tar.gz \ && tar -zxvf 8.2.0.tar.gz \ && cd json-fortran-8.2.0 \ - && export FC=gfortran \ && mkdir build \ && cd build \ && cmake -D SKIP_DOC_GEN:BOOL=TRUE .. \ From 9e66a766a0f282ae992b56fffa4f991cc2af6e80 Mon Sep 17 00:00:00 2001 From: Jiwon Gim Date: Thu, 20 Jul 2023 13:34:34 -0600 Subject: [PATCH 02/59] update docker ignore --- .dockerignore | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.dockerignore b/.dockerignore index dea25df8..373b5255 100644 --- a/.dockerignore +++ b/.dockerignore @@ -15,4 +15,6 @@ !lib !packaging !src -!test \ No newline at end of file +!test +!.gitmodules +!.git \ No newline at end of file From 1c778c147a9bd67d08f3aa9de42ae7b3a7e53cd0 Mon Sep 17 00:00:00 2001 From: Jiwon Gim Date: Thu, 20 Jul 2023 13:38:49 -0600 Subject: [PATCH 03/59] update readme --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 67d699c2..39c49bda 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,9 @@ At present the project encompasses these components - [TUV-x](https://github.com/NCAR/tuv-x) - A photolysis rate calculator +- [MICM](https://github.com/NCAR/micm) + - Model Independent Chemical Mechanisms + ## Available grids Pre-made grids for use in MUSICA are available [here](https://wiki.ucar.edu/display/MUSICA/Available+Grids). From 9ad6b6b2807356b6f9647e98b2430d354550d19b Mon Sep 17 00:00:00 2001 From: Jiwon Gim Date: Thu, 20 Jul 2023 17:09:44 -0600 Subject: [PATCH 04/59] add fortran interface for micm --- src/CMakeLists.txt | 3 ++- src/fortran_interface/CMakeLists.txt | 1 + src/fortran_interface/micm/CMakeLists.txt | 0 src/fortran_interface/micm/interface.F90 | 18 ++++++++++++++++++ 4 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 src/fortran_interface/CMakeLists.txt create mode 100644 src/fortran_interface/micm/CMakeLists.txt create mode 100644 src/fortran_interface/micm/interface.F90 diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index cfc67e2a..f48d8a31 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -7,4 +7,5 @@ target_sources(musica ${CMAKE_BINARY_DIR}/version.c ) -add_subdirectory(cxx_interface) \ No newline at end of file +add_subdirectory(cxx_interface) +add_subdirectory(fortran_interface) \ No newline at end of file diff --git a/src/fortran_interface/CMakeLists.txt b/src/fortran_interface/CMakeLists.txt new file mode 100644 index 00000000..d3a7ab7d --- /dev/null +++ b/src/fortran_interface/CMakeLists.txt @@ -0,0 +1 @@ +add_subdirectory(micm) \ No newline at end of file diff --git a/src/fortran_interface/micm/CMakeLists.txt b/src/fortran_interface/micm/CMakeLists.txt new file mode 100644 index 00000000..e69de29b diff --git a/src/fortran_interface/micm/interface.F90 b/src/fortran_interface/micm/interface.F90 new file mode 100644 index 00000000..d646beca --- /dev/null +++ b/src/fortran_interface/micm/interface.F90 @@ -0,0 +1,18 @@ +!< \section arg_table_micm +!! \htmlinclude micm.html + + interface + + type(c_funptr) function get_solver(filepath) bind(c) + import :: c_char, c_funptr + character(len=1, kind=c_char), dimension(*), intent(in) :: filepath + end function get_solver + + subroutine solver(state, state_size, time_step) bind(c) + import :: c_ptr, c_double, c_int64_t + real(c_double), dimension(*) :: state + integer(c_int64_t), value :: state_size + integer(c_int64_t), value :: time_step + end subroutine + + end interface \ No newline at end of file From d666e1d3db736db4dbe65be34df0e5b966c53004 Mon Sep 17 00:00:00 2001 From: Jiwon Gim Date: Thu, 20 Jul 2023 17:11:33 -0600 Subject: [PATCH 05/59] remove ccpp --- CMakeLists.txt | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 25120bb5..4fb4b9f4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -33,8 +33,6 @@ option( ENABLE_TESTS "Builds tests that ensures each enabled MUSICA component ca option( ENABLE_TUVX "Builds TUV-x, a photolysis calculator library" ON ) option( ENABLE_MICM "Adds MICM, a model independent chemical mechanism solver" ON ) -option( ENABLE_CCPP "Builds the CCPP library" OFF ) - option( ENABLE_MPI "Enable MPI parallel support" OFF) option( ENABLE_OPENMP "Enable OpemMP support" OFF ) @@ -198,14 +196,6 @@ if (ENABLE_MICM) ) endif() -#################### -# CCPP - -if(ENABLE_CCPP) - add_subdirectory(ccpp) -endif() - - ################################################################################ # Tests From 8dac202e300c99476518540bebcdc3dc31758169 Mon Sep 17 00:00:00 2001 From: Jiwon Gim Date: Thu, 20 Jul 2023 18:06:24 -0600 Subject: [PATCH 06/59] fixed the acroynom --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 39c49bda..2b7d0452 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ At present the project encompasses these components - A photolysis rate calculator - [MICM](https://github.com/NCAR/micm) - - Model Independent Chemical Mechanisms + - Model Independent Chemical Module ## Available grids From 3736ddc2c93cd7d54e37f9328a23f35beb82dc86 Mon Sep 17 00:00:00 2001 From: Jiwon Gim Date: Fri, 21 Jul 2023 17:44:33 -0600 Subject: [PATCH 07/59] add fortran interface --- CMakeLists.txt | 35 ++++++++++++++++++++++- src/fortran_interface/micm/CMakeLists.txt | 4 +++ src/fortran_interface/micm/interface.F90 | 27 ++++++++--------- 3 files changed, 52 insertions(+), 14 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 4fb4b9f4..1f0eaa51 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -113,7 +113,39 @@ target_include_directories(musica $ ) -add_subdirectory(src) +# add_subdirectory(src) + +# +# jiwon 7/21 - in progress +# +#################### +# MUSICA - fortran +add_library(musica-fortran STATIC) +add_library(musica::musica-fortran ALIAS musica-fortran) +add_subdirectory(src/fortran_interface) + +set_target_properties(musica-fortran PROPERTIES + ARCHIVE_OUTPUT_DIRECTORY ${MUSICA_LIB_DIR} + Fortran_MODULE_DIRECTORY ${MUSICA_MOD_DIR} +) + +target_link_libraries(musica-fortran + PUBLIC + PkgConfig::netcdff + ${JSON_LIB} +) + +target_include_directories(musica-fortran + PUBLIC + $ + $ +) + +# add the sources to musica +target_sources(musica + PRIVATE + $ +) #################### # MUSICA-core @@ -144,6 +176,7 @@ target_sources(musica $ ) + #################### # TUV-x if (ENABLE_TUVX) diff --git a/src/fortran_interface/micm/CMakeLists.txt b/src/fortran_interface/micm/CMakeLists.txt index e69de29b..cf3eaf51 100644 --- a/src/fortran_interface/micm/CMakeLists.txt +++ b/src/fortran_interface/micm/CMakeLists.txt @@ -0,0 +1,4 @@ +target_sources(musica + PRIVATE + interface.F90 +) \ No newline at end of file diff --git a/src/fortran_interface/micm/interface.F90 b/src/fortran_interface/micm/interface.F90 index d646beca..c010a266 100644 --- a/src/fortran_interface/micm/interface.F90 +++ b/src/fortran_interface/micm/interface.F90 @@ -1,18 +1,19 @@ -!< \section arg_table_micm -!! \htmlinclude micm.html +module micm interface - type(c_funptr) function get_solver(filepath) bind(c) - import :: c_char, c_funptr - character(len=1, kind=c_char), dimension(*), intent(in) :: filepath - end function get_solver +! type(c_funptr) function get_solver(filepath) bind(c) +! import :: c_char, c_funptr +! character(len=1, kind=c_char), dimension(*), intent(in) :: filepath +! end function get_solver - subroutine solver(state, state_size, time_step) bind(c) - import :: c_ptr, c_double, c_int64_t - real(c_double), dimension(*) :: state - integer(c_int64_t), value :: state_size - integer(c_int64_t), value :: time_step - end subroutine +! subroutine solver(state, state_size, time_step) bind(c) +! import :: c_ptr, c_double, c_int64_t +! real(c_double), dimension(*) :: state +! integer(c_int64_t), value :: state_size +! integer(c_int64_t), value :: time_step +! end subroutine - end interface \ No newline at end of file + end interface + +end module micm \ No newline at end of file From f74d19fa496b649268a5ad2c521ae135cb61c17e Mon Sep 17 00:00:00 2001 From: Kyle Shores Date: Mon, 24 Jul 2023 13:13:32 -0500 Subject: [PATCH 08/59] adding direct link to the musica paper --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 67d699c2..2d1327cf 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,7 @@ to see how you can contribute new science to MUSICA software. ## Citing MUSICA -MUSICA can be cited in at least two ways. The first is to cite the paper that defines the vision +MUSICA can be cited in at least two ways. The first is to cite [the paper](https://doi.org/10.1175/BAMS-D-19-0331.1) that defines the vision of the MUSICA software. The bibtex entry below can be used to generate a citaiton for this. ``` From c68e3df2ceee7672b49309dec8035771d31cf152 Mon Sep 17 00:00:00 2001 From: Jiwon Gim Date: Mon, 24 Jul 2023 12:38:38 -0600 Subject: [PATCH 09/59] add the source --- CMakeLists.txt | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 1f0eaa51..4134c346 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -83,7 +83,7 @@ include(cmake/dependencies.cmake) ############################################################################## # MUSICA targets -#################### +# #################### # MUSICA add_library(musica STATIC) add_library(musica::musica ALIAS musica) @@ -113,16 +113,15 @@ target_include_directories(musica $ ) -# add_subdirectory(src) +add_subdirectory(src) # # jiwon 7/21 - in progress # #################### # MUSICA - fortran -add_library(musica-fortran STATIC) +add_library(musica-fortran STATIC src/fortran_interface/micm/interface.F90) add_library(musica::musica-fortran ALIAS musica-fortran) -add_subdirectory(src/fortran_interface) set_target_properties(musica-fortran PROPERTIES ARCHIVE_OUTPUT_DIRECTORY ${MUSICA_LIB_DIR} From 9a5c5e90e421f3e9629e6b5ddcd31f462402fb57 Mon Sep 17 00:00:00 2001 From: Jiwon Gim Date: Mon, 24 Jul 2023 12:51:36 -0600 Subject: [PATCH 10/59] fix the spacing --- CMakeLists.txt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 4134c346..3be30494 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -83,7 +83,7 @@ include(cmake/dependencies.cmake) ############################################################################## # MUSICA targets -# #################### +#################### # MUSICA add_library(musica STATIC) add_library(musica::musica ALIAS musica) @@ -175,7 +175,6 @@ target_sources(musica $ ) - #################### # TUV-x if (ENABLE_TUVX) From 6efa7be8777c92eb0b02a41337ac0baf3a319e5f Mon Sep 17 00:00:00 2001 From: Jiwon Gim <55209567+boulderdaze@users.noreply.github.com> Date: Mon, 24 Jul 2023 14:24:29 -0600 Subject: [PATCH 11/59] Remove linking Co-authored-by: Kyle Shores --- CMakeLists.txt | 5 ----- 1 file changed, 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 3be30494..9ed4a5b7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -128,11 +128,6 @@ set_target_properties(musica-fortran PROPERTIES Fortran_MODULE_DIRECTORY ${MUSICA_MOD_DIR} ) -target_link_libraries(musica-fortran - PUBLIC - PkgConfig::netcdff - ${JSON_LIB} -) target_include_directories(musica-fortran PUBLIC From 403dac0a2b082b39014790bb2a726c4c5af024bf Mon Sep 17 00:00:00 2001 From: Jiwon Gim <55209567+boulderdaze@users.noreply.github.com> Date: Mon, 24 Jul 2023 14:33:45 -0600 Subject: [PATCH 12/59] Update CMakeLists.txt Co-authored-by: Kyle Shores --- CMakeLists.txt | 6 ------ 1 file changed, 6 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9ed4a5b7..637d1c09 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -135,12 +135,6 @@ target_include_directories(musica-fortran $ ) -# add the sources to musica -target_sources(musica - PRIVATE - $ -) - #################### # MUSICA-core add_library(musicacore_object) From 284d5e96e36d6fe640cdc125993f62cba17b0877 Mon Sep 17 00:00:00 2001 From: Jiwon Gim <55209567+boulderdaze@users.noreply.github.com> Date: Mon, 24 Jul 2023 14:34:00 -0600 Subject: [PATCH 13/59] Update src/fortran_interface/micm/interface.F90 Co-authored-by: Kyle Shores --- src/fortran_interface/micm/interface.F90 | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/fortran_interface/micm/interface.F90 b/src/fortran_interface/micm/interface.F90 index c010a266..5674f4d9 100644 --- a/src/fortran_interface/micm/interface.F90 +++ b/src/fortran_interface/micm/interface.F90 @@ -1,5 +1,8 @@ module micm + use iso_c_binding + implicit none + interface ! type(c_funptr) function get_solver(filepath) bind(c) From c6b72b834aae6c02ca24e96a9a4a6522f30cb5d3 Mon Sep 17 00:00:00 2001 From: Jiwon Gim Date: Mon, 24 Jul 2023 14:35:46 -0600 Subject: [PATCH 14/59] remove file path --- src/fortran_interface/micm/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/fortran_interface/micm/CMakeLists.txt b/src/fortran_interface/micm/CMakeLists.txt index cf3eaf51..aea3d125 100644 --- a/src/fortran_interface/micm/CMakeLists.txt +++ b/src/fortran_interface/micm/CMakeLists.txt @@ -1,4 +1,4 @@ -target_sources(musica +target_sources(musica-fortran PRIVATE interface.F90 ) \ No newline at end of file From 16e12e660a2abb255becffd517605be1788f6972 Mon Sep 17 00:00:00 2001 From: Jiwon Gim Date: Mon, 24 Jul 2023 14:47:25 -0600 Subject: [PATCH 15/59] remove file path --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 637d1c09..f9dadc4f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -120,7 +120,7 @@ add_subdirectory(src) # #################### # MUSICA - fortran -add_library(musica-fortran STATIC src/fortran_interface/micm/interface.F90) +add_library(musica-fortran STATIC) add_library(musica::musica-fortran ALIAS musica-fortran) set_target_properties(musica-fortran PROPERTIES From 0897f8292db5868b445881e575ddb0e4139bc598 Mon Sep 17 00:00:00 2001 From: Jiwon Gim Date: Mon, 24 Jul 2023 17:00:31 -0600 Subject: [PATCH 16/59] relocate the adding src directory after musica fortran --- CMakeLists.txt | 11 +++++------ src/fortran_interface/micm/CMakeLists.txt | 2 +- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index f9dadc4f..ae363738 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -113,28 +113,27 @@ target_include_directories(musica $ ) -add_subdirectory(src) - -# -# jiwon 7/21 - in progress -# #################### # MUSICA - fortran add_library(musica-fortran STATIC) add_library(musica::musica-fortran ALIAS musica-fortran) +# We might want these to be new cmake variables set_target_properties(musica-fortran PROPERTIES ARCHIVE_OUTPUT_DIRECTORY ${MUSICA_LIB_DIR} Fortran_MODULE_DIRECTORY ${MUSICA_MOD_DIR} ) - +# We might not need these target_include_directories(musica-fortran PUBLIC $ $ ) +# Add source directory after adding the library from sources +add_subdirectory(src) + #################### # MUSICA-core add_library(musicacore_object) diff --git a/src/fortran_interface/micm/CMakeLists.txt b/src/fortran_interface/micm/CMakeLists.txt index aea3d125..a4ca9eb3 100644 --- a/src/fortran_interface/micm/CMakeLists.txt +++ b/src/fortran_interface/micm/CMakeLists.txt @@ -1,4 +1,4 @@ target_sources(musica-fortran PRIVATE - interface.F90 + interface.F90 ) \ No newline at end of file From e3635614dd274722d3fc7b01f6c765a49429202e Mon Sep 17 00:00:00 2001 From: Jiwon Gim Date: Mon, 24 Jul 2023 17:03:00 -0600 Subject: [PATCH 17/59] add fortran interface --- src/fortran_interface/micm/interface.F90 | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/fortran_interface/micm/interface.F90 b/src/fortran_interface/micm/interface.F90 index 5674f4d9..171bc740 100644 --- a/src/fortran_interface/micm/interface.F90 +++ b/src/fortran_interface/micm/interface.F90 @@ -1,21 +1,21 @@ module micm - use iso_c_binding + use iso_c_binding - implicit none + implicit none interface -! type(c_funptr) function get_solver(filepath) bind(c) -! import :: c_char, c_funptr -! character(len=1, kind=c_char), dimension(*), intent(in) :: filepath -! end function get_solver + type(c_funptr) function get_solver(filepath) bind(c) + import :: c_char, c_funptr + character(len=1, kind=c_char), dimension(*), intent(in) :: filepath + end function get_solver -! subroutine solver(state, state_size, time_step) bind(c) -! import :: c_ptr, c_double, c_int64_t -! real(c_double), dimension(*) :: state -! integer(c_int64_t), value :: state_size -! integer(c_int64_t), value :: time_step -! end subroutine + subroutine solver(state, state_size, time_step) bind(c) + import :: c_ptr, c_double, c_int64_t + real(c_double), dimension(*) :: state + integer(c_int64_t), value :: state_size + integer(c_int64_t), value :: time_step + end subroutine end interface From 9a89a52fd943213e3ecd1ac601ba35beb4fc9666 Mon Sep 17 00:00:00 2001 From: Jiwon Gim Date: Fri, 28 Jul 2023 17:55:12 -0600 Subject: [PATCH 18/59] scaffold for separating musica from fortran interface --- .gitmodules | 12 +- musica-fortran/CMakeLists.txt | 9 + musica-fortran/src/CMakeLists.txt | 1 + musica-fortran/src/micm/CMakeLists.txt | 4 + musica-fortran/src/micm/interface.F90 | 22 +++ musica/.gitmodules | 9 + musica/CMakeLists.txt | 213 +++++++++++++++++++++ musica/cmake/SetDefaults.cmake | 4 + musica/cmake/cmake_uninstall.cmake.in | 37 ++++ musica/cmake/dependencies.cmake | 39 ++++ musica/cmake/musicaConfig.cmake.in | 5 + musica/cmake/musica_util.cmake | 43 +++++ musica/cmake/test_util.cmake | 86 +++++++++ musica/include/micm/interface.hpp | 24 +++ musica/include/musica/component_versions.h | 11 ++ musica/include/musica/version.h | 15 ++ musica/packaging/CMakeLists.txt | 97 ++++++++++ musica/packaging/modulefile.lua.in | 26 +++ musica/src/CMakeLists.txt | 1 + musica/src/component_versions.c | 57 ++++++ musica/src/micm/CMakeLists.txt | 4 + musica/src/micm/interface.cpp | 41 ++++ musica/src/version.c.in | 24 +++ 23 files changed, 778 insertions(+), 6 deletions(-) create mode 100644 musica-fortran/CMakeLists.txt create mode 100644 musica-fortran/src/CMakeLists.txt create mode 100644 musica-fortran/src/micm/CMakeLists.txt create mode 100644 musica-fortran/src/micm/interface.F90 create mode 100644 musica/.gitmodules create mode 100644 musica/CMakeLists.txt create mode 100644 musica/cmake/SetDefaults.cmake create mode 100644 musica/cmake/cmake_uninstall.cmake.in create mode 100644 musica/cmake/dependencies.cmake create mode 100644 musica/cmake/musicaConfig.cmake.in create mode 100644 musica/cmake/musica_util.cmake create mode 100644 musica/cmake/test_util.cmake create mode 100644 musica/include/micm/interface.hpp create mode 100644 musica/include/musica/component_versions.h create mode 100644 musica/include/musica/version.h create mode 100644 musica/packaging/CMakeLists.txt create mode 100644 musica/packaging/modulefile.lua.in create mode 100644 musica/src/CMakeLists.txt create mode 100644 musica/src/component_versions.c create mode 100644 musica/src/micm/CMakeLists.txt create mode 100644 musica/src/micm/interface.cpp create mode 100644 musica/src/version.c.in diff --git a/.gitmodules b/.gitmodules index f52ce418..dc7cbe40 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,9 +1,9 @@ -[submodule "lib/tuv-x"] - path = lib/tuv-x +[submodule "musica/lib/tuv-x"] + path = musica/lib/tuv-x url = https://github.com/NCAR/tuv-x.git -[submodule "lib/musica-core"] - path = lib/musica-core +[submodule "musica/lib/musica-core"] + path = musica/lib/musica-core url = https://github.com/NCAR/musica-core.git -[submodule "lib/micm"] - path = lib/micm +[submodule "musica/lib/micm"] + path = musica/lib/micm url = https://github.com/NCAR/micm.git diff --git a/musica-fortran/CMakeLists.txt b/musica-fortran/CMakeLists.txt new file mode 100644 index 00000000..2c3fe24a --- /dev/null +++ b/musica-fortran/CMakeLists.txt @@ -0,0 +1,9 @@ +cmake_minimum_required(VERSION 3.21) + +project( + musica-fortran + VERSION 0.0.0 + LANGUAGES Fortran +) + +add_subdirectory(src) \ No newline at end of file diff --git a/musica-fortran/src/CMakeLists.txt b/musica-fortran/src/CMakeLists.txt new file mode 100644 index 00000000..d3a7ab7d --- /dev/null +++ b/musica-fortran/src/CMakeLists.txt @@ -0,0 +1 @@ +add_subdirectory(micm) \ No newline at end of file diff --git a/musica-fortran/src/micm/CMakeLists.txt b/musica-fortran/src/micm/CMakeLists.txt new file mode 100644 index 00000000..a4ca9eb3 --- /dev/null +++ b/musica-fortran/src/micm/CMakeLists.txt @@ -0,0 +1,4 @@ +target_sources(musica-fortran + PRIVATE + interface.F90 +) \ No newline at end of file diff --git a/musica-fortran/src/micm/interface.F90 b/musica-fortran/src/micm/interface.F90 new file mode 100644 index 00000000..171bc740 --- /dev/null +++ b/musica-fortran/src/micm/interface.F90 @@ -0,0 +1,22 @@ +module micm + use iso_c_binding + + implicit none + + interface + + type(c_funptr) function get_solver(filepath) bind(c) + import :: c_char, c_funptr + character(len=1, kind=c_char), dimension(*), intent(in) :: filepath + end function get_solver + + subroutine solver(state, state_size, time_step) bind(c) + import :: c_ptr, c_double, c_int64_t + real(c_double), dimension(*) :: state + integer(c_int64_t), value :: state_size + integer(c_int64_t), value :: time_step + end subroutine + + end interface + +end module micm \ No newline at end of file diff --git a/musica/.gitmodules b/musica/.gitmodules new file mode 100644 index 00000000..dc7cbe40 --- /dev/null +++ b/musica/.gitmodules @@ -0,0 +1,9 @@ +[submodule "musica/lib/tuv-x"] + path = musica/lib/tuv-x + url = https://github.com/NCAR/tuv-x.git +[submodule "musica/lib/musica-core"] + path = musica/lib/musica-core + url = https://github.com/NCAR/musica-core.git +[submodule "musica/lib/micm"] + path = musica/lib/micm + url = https://github.com/NCAR/micm.git diff --git a/musica/CMakeLists.txt b/musica/CMakeLists.txt new file mode 100644 index 00000000..cd2ab39a --- /dev/null +++ b/musica/CMakeLists.txt @@ -0,0 +1,213 @@ +################################################################################ +# Preamble + +cmake_minimum_required(VERSION 3.21) +set(CMAKE_USER_MAKE_RULES_OVERRIDE "cmake/SetDefaults.cmake") + +project( + musica + VERSION 0.3.0 + LANGUAGES Fortran CXX C +) + +set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) +set(CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH};${PROJECT_SOURCE_DIR}/cmake") + +if(NOT CMAKE_BUILD_TYPE) + set(CMAKE_BUILD_TYPE "Release" CACHE STRING + "Choose the type of build, options are: Debug Release RelWithDebInfo MinSizeRel." + FORCE) +endif(NOT CMAKE_BUILD_TYPE) + +message (STATUS "CMake build configuration for musica(${CMAKE_BUILD_TYPE}) ${PROJECT_VERSION}") + +include(musica_util) +checkout_submodules() + +################################################################################ +# Projet wide setup options +include(CMakeDependentOption) + +option( ENABLE_TESTS "Builds tests that ensures each enabled MUSICA component can be used" OFF ) + +option( ENABLE_TUVX "Builds TUV-x, a photolysis calculator library" ON ) +option( ENABLE_MICM "Adds MICM, a model independent chemical mechanism solver" ON ) + +option( ENABLE_MPI "Enable MPI parallel support" OFF) +option( ENABLE_OPENMP "Enable OpemMP support" OFF ) + +option( CREATE_ENVIRONMENT_MODULE "Creates an Lmod environment module file that can be installed on the same machine this library is installed to." OFF ) + +if(CREATE_ENVIRONMENT_MODULE) + set(INSTALL_MODULE_FILE_PATH "" CACHE STRING "This is the path of the modulefiles location that the Lmod files should be installed to.") +endif() + +# Set up include and lib directories +set( MUSICA_MOD_DIR "${PROJECT_BINARY_DIR}/include" ) +set( MUSICA_LIB_DIR "${PROJECT_BINARY_DIR}/libs" ) + +include(GNUInstallDirs) +set(INSTALL_PREFIX "musica-${PROJECT_VERSION}") +set(INSTALL_MOD_DIR "${INSTALL_PREFIX}/${CMAKE_INSTALL_INCLUDEDIR}") + +# MPI +if(ENABLE_MPI) + add_definitions(-DMUSICA_USE_MPI) +endif() + +# OpenMP +if(ENABLE_OPENMP) + find_package(OpenMP) + if(OpenMP_Fortran_FOUND) + message(STATUS "Compiling with OpenMP support") + add_definitions(-DMUSICA_USE_OPENMP) + else() + message(FATAL_ERROR "OpenMP package not found") + endif() +endif() + +# Add flags for various compilers +if(${CMAKE_Fortran_COMPILER_ID} MATCHES "Intel") + add_definitions(-DMUSICA_USING_INTEL) +elseif(${CMAKE_Fortran_COMPILER_ID} MATCHES "GNU") + add_definitions(-DMUSICA_USING_GNU) +elseif(${CMAKE_Fortran_COMPILER_ID} MATCHES "PGI") + add_definitions(-DMUSICA_USING_PGI) +endif() + +################################################################################ +# Dependencies + +include(cmake/dependencies.cmake) + +############################################################################## +# MUSICA targets + +#################### +# MUSICA +add_library(musica STATIC) +add_library(musica::musica ALIAS musica) + +set_target_properties(musica PROPERTIES + ARCHIVE_OUTPUT_DIRECTORY ${MUSICA_LIB_DIR} + Fortran_MODULE_DIRECTORY ${MUSICA_MOD_DIR} + VERSION ${PROJECT_VERSION} + SOVERSION ${PROJECT_VERSION_MAJOR} +) + +target_link_libraries(musica + PUBLIC + PkgConfig::netcdff + ${JSON_LIB} +) + +target_include_directories(musica + PUBLIC + $ + $ +) + +target_include_directories(musica + PUBLIC + $ + $ +) + +#################### +# MUSICA-core +add_library(musicacore_object) +add_library(musica::musicacore ALIAS musicacore_object) +set(ENABLE_UTIL_ONLY ON) + +add_subdirectory(lib/musica-core/src) + +# set_target_properties(musicacore_object PROPERTIES +# ARCHIVE_OUTPUT_DIRECTORY ${MUSICA_LIB_DIR} +# Fortran_MODULE_DIRECTORY ${MUSICA_MOD_DIR} +# ) + +# target_include_directories(musicacore_object +# PUBLIC +# $ +# $ +# ) + +# target_link_libraries(musicacore_object +# PUBLIC +# PkgConfig::netcdff +# ) + +# # add the sources to musica +# target_sources(musica +# PRIVATE +# $ +# ) + +# #################### +# # TUV-x +# if (ENABLE_TUVX) +# add_definitions(-DMUSICA_USE_TUVX) + +# set(TUVX_MOD_DIR ${MUSICA_MOD_DIR}) +# set(TUVX_LIB_DIR ${MUSICA_LIB_DIR}) +# add_subdirectory(lib/tuv-x/src) + +# set_target_properties(tuvx_object PROPERTIES +# ARCHIVE_OUTPUT_DIRECTORY ${MUSICA_LIB_DIR} +# Fortran_MODULE_DIRECTORY ${MUSICA_MOD_DIR} +# ) + +# target_include_directories(tuvx_object +# PUBLIC +# $ +# $ +# ) + +# target_link_libraries(tuvx_object +# PUBLIC +# musicacore_object +# ) + +# # add the sources to musica +# target_sources(musica +# PRIVATE +# $ +# ) +# endif() + +# #################### +# # MICM +# if (ENABLE_MICM) +# add_definitions(-DMUSICA_USE_MICM) +# target_compile_features(musica PUBLIC cxx_std_20) + +# target_include_directories(musica +# PUBLIC +# $ +# $ +# ) + +# install( +# DIRECTORY +# ${PROJECT_SOURCE_DIR}/lib/micm/include/micm +# DESTINATION +# ${INSTALL_MOD_DIR} +# ) +# endif() + +# ################################################################################ +# # Tests + +# # only include packaging if we are the top level project being built +# if(PROJECT_IS_TOP_LEVEL AND ENABLE_TESTS) +# enable_testing() +# add_subdirectory(test) +# endif() + +# ################################################################################ +# # Packaging + +# # only include packaging if we are the top level project being built +# if(PROJECT_IS_TOP_LEVEL) +# add_subdirectory(packaging) +# endif() \ No newline at end of file diff --git a/musica/cmake/SetDefaults.cmake b/musica/cmake/SetDefaults.cmake new file mode 100644 index 00000000..d39f7b1a --- /dev/null +++ b/musica/cmake/SetDefaults.cmake @@ -0,0 +1,4 @@ +# Overwrite the init values choosen by CMake +if (CMAKE_Fortran_COMPILER_ID MATCHES "GNU") + set(CMAKE_Fortran_FLAGS_DEBUG_INIT "-g") +endif() \ No newline at end of file diff --git a/musica/cmake/cmake_uninstall.cmake.in b/musica/cmake/cmake_uninstall.cmake.in new file mode 100644 index 00000000..66e6b1d2 --- /dev/null +++ b/musica/cmake/cmake_uninstall.cmake.in @@ -0,0 +1,37 @@ +# https://gitlab.kitware.com/cmake/community/-/wikis/FAQ#can-i-do-make-uninstall-with-cmake + +if(NOT EXISTS "@CMAKE_BINARY_DIR@/install_manifest.txt") + message(FATAL_ERROR "Cannot find install manifest: @CMAKE_BINARY_DIR@/install_manifest.txt") +endif() + +file(READ "@CMAKE_BINARY_DIR@/install_manifest.txt" files) +string(REGEX REPLACE "\n" ";" files "${files}") +foreach(file ${files}) + message(STATUS "Uninstalling $ENV{DESTDIR}${file}") + if(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}") + exec_program( + "@CMAKE_COMMAND@" ARGS "-E remove \"$ENV{DESTDIR}${file}\"" + OUTPUT_VARIABLE rm_out + RETURN_VALUE rm_retval + ) + if(NOT "${rm_retval}" STREQUAL 0) + message(FATAL_ERROR "Problem when removing $ENV{DESTDIR}${file}") + endif() + else(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}") + message(STATUS "File $ENV{DESTDIR}${file} does not exist.") + endif() +endforeach() + +set(uninstall_dirs "@INSTALL_PREFIX@;@cmake_config_install_location@") + +foreach(dir IN LISTS uninstall_dirs) + message(STATUS "Uninstalling ${dir}") + exec_program( + "@CMAKE_COMMAND@" ARGS "-E remove_directory ${dir}" + OUTPUT_VARIABLE rm_out + RETURN_VALUE rm_retval + ) + if(NOT "${rm_retval}" STREQUAL 0) + message(FATAL_ERROR "Problem when removing ${dir}") + endif() +endforeach() \ No newline at end of file diff --git a/musica/cmake/dependencies.cmake b/musica/cmake/dependencies.cmake new file mode 100644 index 00000000..eb539e2e --- /dev/null +++ b/musica/cmake/dependencies.cmake @@ -0,0 +1,39 @@ +find_package(PkgConfig REQUIRED) + +################################################################################ +# json-fortran library +find_path(JSON_INCLUDE_DIR json_module.mod + DOC "json-fortran include directory (must include json_*.mod files)" + PATHS + $ENV{JSON_FORTRAN_HOME}/lib + /opt/local/lib + /usr/local/lib + /usr/local/lib64) +find_library(JSON_LIB jsonfortran + DOC "json-fortran library" + PATHS + $ENV{JSON_FORTRAN_HOME}/lib + /opt/local/lib + /usr/local/lib + /usr/local/lib64) +include_directories(${JSON_INCLUDE_DIR}) + +################################################################################ +# NetCDF library +pkg_check_modules(netcdff IMPORTED_TARGET REQUIRED netcdf-fortran) + +################################################################################ +# google test +if(ENABLE_TESTS) + include(FetchContent) + FetchContent_Declare(googletest + GIT_REPOSITORY https://github.com/google/googletest.git + GIT_TAG release-1.12.1 + FIND_PACKAGE_ARGS NAMES GTest + ) + + set(INSTALL_GTEST OFF CACHE BOOL "" FORCE) + set(BUILD_GMOCK OFF CACHE BOOL "" FORCE) + + FetchContent_MakeAvailable(googletest) +endif() \ No newline at end of file diff --git a/musica/cmake/musicaConfig.cmake.in b/musica/cmake/musicaConfig.cmake.in new file mode 100644 index 00000000..3cc6a433 --- /dev/null +++ b/musica/cmake/musicaConfig.cmake.in @@ -0,0 +1,5 @@ +@PACKAGE_INIT@ + +include("${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@_Exports.cmake") + +check_required_components("@PROJECT_NAME@") \ No newline at end of file diff --git a/musica/cmake/musica_util.cmake b/musica/cmake/musica_util.cmake new file mode 100644 index 00000000..25e8ae45 --- /dev/null +++ b/musica/cmake/musica_util.cmake @@ -0,0 +1,43 @@ +function(checkout_submodules) + find_package(Git QUIET) +# if(GIT_FOUND AND EXISTS "${PROJECT_SOURCE_DIR}/.git") TODO: jiwon 7/28 .git dir is in the parent directory + if(GIT_FOUND) + # Update submodules as needed + option(GIT_SUBMODULE "Check submodules during build" ON) + if(GIT_SUBMODULE) + message(STATUS "Submodule update") + message(" * ${CMAKE_CURRENT_SOURCE_DIR} : current") + execute_process(COMMAND ${GIT_EXECUTABLE} submodule update --init --recursive + # WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + # WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} + RESULT_VARIABLE GIT_SUBMOD_RESULT) + if(NOT GIT_SUBMOD_RESULT EQUAL "0") + message(FATAL_ERROR "git submodule update --init failed with ${GIT_SUBMOD_RESULT}, please checkout submodules") + endif() + endif() + else() + message(FATAL_ERROR "Git was not found") + endif() +endfunction(checkout_submodules) + +function(combine_archives output_archive list_of_input_archives) + set(mri_file ${CMAKE_BINARY_DIR}/${output_archive}.mri) + set(FULL_OUTPUT_PATH ${CMAKE_ARCHIVE_OUTPUT_DIRECTORY}/lib${output_archive}.a) + file(WRITE ${mri_file} "create ${FULL_OUTPUT_PATH}\n") + FOREACH(in_archive ${list_of_input_archives}) + file(APPEND ${mri_file} "addlib ${CMAKE_ARCHIVE_OUTPUT_DIRECTORY}/lib${in_archive}.a\n") + ENDFOREACH() + file(APPEND ${mri_file} "save\n") + file(APPEND ${mri_file} "end\n") + + set(output_archive_dummy_file ${CMAKE_BINARY_DIR}/${output_archive}.dummy) + add_custom_command(OUTPUT ${output_archive_dummy_file} + COMMAND touch ${output_archive_dummy_file} + DEPENDS ${list_of_input_archives}) + + add_library(${output_archive} STATIC ${output_archive_dummy_file}) + set_target_properties(${output_archive} PROPERTIES LINKER_LANGUAGE Fortran) + add_custom_command(TARGET ${output_archive} + POST_BUILD + COMMAND ar -M < ${mri_file}) +endfunction(combine_archives) \ No newline at end of file diff --git a/musica/cmake/test_util.cmake b/musica/cmake/test_util.cmake new file mode 100644 index 00000000..a588456e --- /dev/null +++ b/musica/cmake/test_util.cmake @@ -0,0 +1,86 @@ +################################################################################ +# Utility functions for creating tests + +if(ENABLE_MEMCHECK) + find_program(MEMORYCHECK_COMMAND "valgrind") +endif() + +################################################################################ +# build and add a standard test linked to musica + +function(create_standard_test) + set(prefix TEST) + set(singleValues NAME WORKING_DIRECTORY) + set(multiValues SOURCES LIBRARIES) + include(CMakeParseArguments) + cmake_parse_arguments(${prefix} " " "${singleValues}" "${multiValues}" ${ARGN}) + + add_executable(test_${TEST_NAME} ${TEST_SOURCES}) + target_link_libraries(test_${TEST_NAME} PUBLIC musica::musica) + + # link additional libraries + foreach(library ${TEST_LIBRARIES}) + target_link_libraries(test_${TEST_NAME} PUBLIC ${library}) + endforeach() + + if(ENABLE_OPENMP) + target_link_libraries(test_${TEST_NAME} PUBLIC OpenMP::OpenMP_Fortran) + endif() + + if(NOT DEFINED TEST_WORKING_DIRECTORY) + set(TEST_WORKING_DIRECTORY "${CMAKE_BINARY_DIR}") + endif() + + add_musica_test(${TEST_NAME} test_${TEST_NAME} "" ${TEST_WORKING_DIRECTORY}) +endfunction(create_standard_test) + +function(create_standard_test_cxx) + set(prefix TEST) + set(singleValues NAME WORKING_DIRECTORY) + set(multiValues SOURCES) + include(CMakeParseArguments) + cmake_parse_arguments(${prefix} " " "${singleValues}" "${multiValues}" ${ARGN}) + add_executable(test_${TEST_NAME} ${TEST_SOURCES}) + target_link_libraries(test_${TEST_NAME} PUBLIC musica::musica GTest::gtest_main) + if(ENABLE_OPENMP) + target_link_libraries(test_${TEST_NAME} PUBLIC OpenMP::OpenMP_CXX OpenMP::OpenMP_Fortran) + endif() + if(NOT DEFINED TEST_WORKING_DIRECTORY) + set(TEST_WORKING_DIRECTORY "${CMAKE_BINARY_DIR}") + endif() + add_musica_test(${TEST_NAME} test_${TEST_NAME} "" ${TEST_WORKING_DIRECTORY}) +endfunction(create_standard_test_cxx) + +################################################################################ +# Add a test + +function(add_musica_test test_name test_binary test_args working_dir) + if(ENABLE_MPI) + add_test(NAME ${test_name} + COMMAND mpirun -v -np 2 ${CMAKE_BINARY_DIR}/${test_binary} ${test_args} + WORKING_DIRECTORY ${working_dir}) + else() + add_test(NAME ${test_name} + COMMAND ${test_binary} ${test_args} + WORKING_DIRECTORY ${working_dir}) + endif() + set(MEMORYCHECK_COMMAND_OPTIONS "--error-exitcode=1 --trace-children=yes --leak-check=full --gen-suppressions=all ${MEMCHECK_SUPPRESS}") + set(memcheck "${MEMORYCHECK_COMMAND} ${MEMORYCHECK_COMMAND_OPTIONS}") + separate_arguments(memcheck) + if(ENABLE_MPI AND MEMORYCHECK_COMMAND AND ENABLE_MEMCHECK) + add_test(NAME memcheck_${test_name} + COMMAND mpirun -v -np 2 ${memcheck} ${CMAKE_BINARY_DIR}/${test_binary} ${test_args} + WORKING_DIRECTORY ${working_dir}) + + # add dependency between memcheck and previous test + # https://stackoverflow.com/a/66931930/5217293 + set_tests_properties(${test_name} PROPERTIES FIXTURES_SETUP f_${test_name}) + set_tests_properties(memcheck_${test_name} PROPERTIES FIXTURES_REQUIRED f_${test_name}) + elseif(MEMORYCHECK_COMMAND AND ENABLE_MEMCHECK) + add_test(NAME memcheck_${test_name} + COMMAND ${memcheck} ${CMAKE_BINARY_DIR}/${test_binary} ${test_args} + WORKING_DIRECTORY ${working_dir}) + endif() +endfunction(add_musica_test) + +################################################################################ diff --git a/musica/include/micm/interface.hpp b/musica/include/micm/interface.hpp new file mode 100644 index 00000000..74c9bd40 --- /dev/null +++ b/musica/include/micm/interface.hpp @@ -0,0 +1,24 @@ +#include + +#include +#include +#include + +class MICM { + public: + micm::RosenbrockSolver* solver_; +}; + +#ifdef __cplusplus + extern "C" + { +#endif + + typedef void (*FuncPtr)(double[], int64_t, int64_t); + + FuncPtr get_solver(char filepath[]); + +#ifdef __cplusplus + } // extern "C" +#endif + diff --git a/musica/include/musica/component_versions.h b/musica/include/musica/component_versions.h new file mode 100644 index 00000000..119f5dba --- /dev/null +++ b/musica/include/musica/component_versions.h @@ -0,0 +1,11 @@ +#pragma once + +#ifdef __cplusplus +extern "C" { +#endif + +char* getAllComponentVersions(); + +#ifdef __cplusplus +} +#endif \ No newline at end of file diff --git a/musica/include/musica/version.h b/musica/include/musica/version.h new file mode 100644 index 00000000..caa53615 --- /dev/null +++ b/musica/include/musica/version.h @@ -0,0 +1,15 @@ +#pragma once + +#ifdef __cplusplus +extern "C" { +#endif + +const char* getMusicaVersion(); +unsigned getMusicaVersionMajor(); +unsigned getMusicaVersionMinor(); +unsigned getMusicaVersionPatch(); +unsigned getMusicaVersionTweak(); + +#ifdef __cplusplus +} +#endif diff --git a/musica/packaging/CMakeLists.txt b/musica/packaging/CMakeLists.txt new file mode 100644 index 00000000..08b272ca --- /dev/null +++ b/musica/packaging/CMakeLists.txt @@ -0,0 +1,97 @@ +include(CMakePackageConfigHelpers) + +install( + TARGETS + musica musicacore_object + EXPORT + musica_Exports + LIBRARY DESTINATION ${INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR} + ARCHIVE DESTINATION ${INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR} +) + +# install the mod files +install( + DIRECTORY + ${MUSICA_MOD_DIR}/ + DESTINATION + ${INSTALL_MOD_DIR} + FILES_MATCHING PATTERN "*.mod" +) + +# install the cmake config files +set(cmake_config_install_location ${INSTALL_PREFIX}/cmake) + +install( + EXPORT + musica_Exports + DESTINATION + ${cmake_config_install_location} + NAMESPACE musica:: +) + +configure_package_config_file( + "${PROJECT_SOURCE_DIR}/cmake/musicaConfig.cmake.in" + "${PROJECT_BINARY_DIR}/musicaConfig.cmake" + INSTALL_DESTINATION + ${cmake_config_install_location} +) + +write_basic_package_version_file( + "${PROJECT_BINARY_DIR}/musicaConfigVersion.cmake" + VERSION ${PROJECT_VERSION} + COMPATIBILITY SameMajorVersion +) + +install( + FILES + ${PROJECT_BINARY_DIR}/musicaConfig.cmake + ${PROJECT_BINARY_DIR}/musicaConfigVersion.cmake + DESTINATION + ${cmake_config_install_location} +) + +###################################################################### +# uninstall target + +# https://gitlab.kitware.com/cmake/community/-/wikis/FAQ#can-i-do-make-uninstall-with-cmake +if(NOT TARGET uninstall) + configure_file( + "${PROJECT_SOURCE_DIR}/cmake/cmake_uninstall.cmake.in" + "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake" + IMMEDIATE @ONLY) + + add_custom_target(uninstall + COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake) +endif() + +###################################################################### +# Environment module + +if (CREATE_ENVIRONMENT_MODULE) + # Define the paths and environment variables for the module + set(MODULE_NAME ${PROJECT_VERSION}.lua) + set(MODULE_FILE_PATH ${CMAKE_BINARY_DIR}/modulefiles/${PROJECT_NAME}/${MODULE_NAME}) + set(MODULE_INSTALL_PATH ${CMAKE_INSTALL_PREFIX}/${INSTALL_PREFIX}) + + message(STATUS "MODULE NAME ${MODULE_NAME}") + message(STATUS "MODULE PATH ${MODULE_FILE_PATH}") + + # Generate the module file using the template + configure_file(${CMAKE_CURRENT_SOURCE_DIR}/modulefile.lua.in + ${MODULE_FILE_PATH} + @ONLY) + + if(INSTALL_MODULE_FILE_PATH) + # Create a custom target for installing the module file + add_custom_target(install_lmod_module + COMMAND ${CMAKE_COMMAND} -E copy + ${MODULE_FILE_PATH} + ${INSTALL_MODULE_FILE_PATH}/${PROJECT_NAME}/${MODULE_NAME}) + + # Add the install_lmod_module target to the "install" target + install(CODE "execute_process(COMMAND ${CMAKE_COMMAND} --build . --target install_lmod_module)") + + # Add a message to inform users how to trigger the installation + message(STATUS "To install the Lmod module, run: make install") + endif() +endif() \ No newline at end of file diff --git a/musica/packaging/modulefile.lua.in b/musica/packaging/modulefile.lua.in new file mode 100644 index 00000000..1fa6e11a --- /dev/null +++ b/musica/packaging/modulefile.lua.in @@ -0,0 +1,26 @@ +-- The message printed by the module whatis command +whatis("@PROJECT_NAME@ v@PROJECT_VERSION@") + +-- The message printed by the module help command +help([[ +MUSICA: Mulitscale Interface for Chemistry and Aerosols +For more information, visit https://github.com/NCAR/musica + +Example usage of `find_package` in a CMakeLists.txt file: + +find_package(musica @PROJECT_VERSION@ REQUIRED) +target_link_libraries(my_target musica::musica) +]]) + +-- Set paths +local base = "@MODULE_INSTALL_PATH@" +local libpath = pathJoin(base, "/lib") -- libraries +local incpath = pathJoin(base, "/include") -- include files + +always_load("cmake/3.22.0", "json-fortran/8.3.0") + +-- Set variables to use with cmake +setenv("musica_ROOT", base) +setenv("MUSICA_ROOT", base) +setenv("MUSICA_INC", incpath) +setenv("MUSICA_LIB", libpath) \ No newline at end of file diff --git a/musica/src/CMakeLists.txt b/musica/src/CMakeLists.txt new file mode 100644 index 00000000..d3a7ab7d --- /dev/null +++ b/musica/src/CMakeLists.txt @@ -0,0 +1 @@ +add_subdirectory(micm) \ No newline at end of file diff --git a/musica/src/component_versions.c b/musica/src/component_versions.c new file mode 100644 index 00000000..1bc3cbc8 --- /dev/null +++ b/musica/src/component_versions.c @@ -0,0 +1,57 @@ +#include +#include +#include +#include + +#include +#ifdef MUSICA_USE_MICM +#include +#endif + +char* add_name_and_version(char* pos, const char* name, const char* version, const char* sep) { + size_t name_length = strlen(name); + size_t version_length = strlen(version); + size_t sep_length = strlen(sep); + + memcpy(pos, name, name_length); + pos += name_length; + + memcpy(pos, version, version_length); + pos += version_length; + + memcpy(pos, sep, sep_length); + pos += sep_length; + + return pos; +} + +char* getAllComponentVersions() { + const char* sep = "\n"; + size_t sep_size = strlen(sep); + size_t buf_size = 0; + + const char* musica_name = "musica: "; + const char* musica_version = getMusicaVersion(); + buf_size += strlen(musica_name) + strlen(musica_version) + sep_size; + +#ifdef MUSICA_USE_MICM + const char* micm_name = "micm: "; + const char* micm_version = getMicmVersion(); + buf_size += strlen(micm_name) + strlen(micm_name) + sep_size; +#endif + + char* buf = (char*)malloc(sizeof(char) * (buf_size + 1)); + + if (buf) { + char* pos = buf; + + pos = add_name_and_version(pos, musica_name, musica_version, sep); +#ifdef MUSICA_USE_MICM + pos = add_name_and_version(pos, micm_name, micm_version, sep); +#endif + + *pos = '\0'; + } + + return buf; +} \ No newline at end of file diff --git a/musica/src/micm/CMakeLists.txt b/musica/src/micm/CMakeLists.txt new file mode 100644 index 00000000..964ff510 --- /dev/null +++ b/musica/src/micm/CMakeLists.txt @@ -0,0 +1,4 @@ +target_sources(musica + PRIVATE + interface.cpp +) \ No newline at end of file diff --git a/musica/src/micm/interface.cpp b/musica/src/micm/interface.cpp new file mode 100644 index 00000000..6fcb42ea --- /dev/null +++ b/musica/src/micm/interface.cpp @@ -0,0 +1,41 @@ +#include + +#include + +// assumes that photo_rates, matches order in c++ already +void fortran_solve(void *micm_address, double time_start, double time_end, double *concentrations, double temperature, double pressure, double *photo_rates) +{ + MICM *micm = static_cast(micm_address); + micm::State state = micm->solver_->GetState(); + + for (auto param : state.custom_rate_parameters_[0]) + { + param = *(photo_rates++); + } + state.conditions_[0].pressure_ = pressure; + state.conditions_[0].temperature_ = temperature; + + auto result = micm->solver_->Solve(time_start, time_end, state); +} + +void solver( + double state[], // NOLINT(misc-unused-parameters,cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays) + int64_t state_size, + int64_t + timestep) +{ + std::cout << "state size: " << state_size << std::endl; + std::cout << "timestep: " << timestep << std::endl; + + for (int64_t i{}; i < state_size; ++i) + { + std::cout << "state[" << i << "] = " << state[i] << std::endl; + } +} + +FuncPtr get_solver( + char filepath[]) // NOLINT(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays) +{ + std::cout << "file path: " << filepath << "\n"; + return &solver; +} \ No newline at end of file diff --git a/musica/src/version.c.in b/musica/src/version.c.in new file mode 100644 index 00000000..b7437266 --- /dev/null +++ b/musica/src/version.c.in @@ -0,0 +1,24 @@ +const char* getMusicaVersion() +{ + return "@musica_VERSION@"; +} + +unsigned getMusicaVersionMajor() +{ + return @musica_VERSION_MAJOR@; +} + +unsigned getMusicaVersionMinor() +{ + return @musica_VERSION_MINOR@ + 0; +} + +unsigned getMusicaVersionPatch() +{ + return @musica_VERSION_PATCH@ + 0; +} + +unsigned getMusicaVersionTweak() +{ + return @musica_VERSION_TWEAK@ + 0; +} From abf9370a0685af8482fd278b3aa3fd840897732a Mon Sep 17 00:00:00 2001 From: Jiwon Gim Date: Mon, 31 Jul 2023 14:58:50 -0600 Subject: [PATCH 19/59] update musica/musica cmake --- .gitmodules | 12 +- CMakeLists.txt | 2 +- Dockerfile.fortran | 67 ++++++++++ ccpp/CMakeLists.txt | 41 ------ cmake/SetDefaults.cmake | 4 - cmake/cmake_uninstall.cmake.in | 37 ------ cmake/dependencies.cmake | 39 ------ cmake/musicaConfig.cmake.in | 5 - cmake/musica_util.cmake | 38 ------ cmake/test_util.cmake | 86 ------------- include/micm/interface.hpp | 24 ---- include/musica/component_versions.h | 11 -- include/musica/version.h | 15 --- musica/.gitmodules | 9 -- musica/CMakeLists.txt | 147 ++++++++++++---------- musica/cmake/musica_util.cmake | 4 +- musica/src/CMakeLists.txt | 9 ++ packaging/CMakeLists.txt | 97 -------------- packaging/modulefile.lua.in | 26 ---- src/component_versions.c | 57 --------- src/cxx_interface/CMakeLists.txt | 1 - src/cxx_interface/micm/CMakeLists.txt | 4 - src/cxx_interface/micm/interface.cpp | 41 ------ src/fortran_interface/CMakeLists.txt | 1 - src/fortran_interface/micm/CMakeLists.txt | 4 - src/fortran_interface/micm/interface.F90 | 22 ---- src/version.c.in | 24 ---- test/ccpp/integration/CMakeLists.txt | 2 +- 28 files changed, 165 insertions(+), 664 deletions(-) create mode 100644 Dockerfile.fortran delete mode 100644 ccpp/CMakeLists.txt delete mode 100644 cmake/SetDefaults.cmake delete mode 100644 cmake/cmake_uninstall.cmake.in delete mode 100644 cmake/dependencies.cmake delete mode 100644 cmake/musicaConfig.cmake.in delete mode 100644 cmake/musica_util.cmake delete mode 100644 cmake/test_util.cmake delete mode 100644 include/micm/interface.hpp delete mode 100644 include/musica/component_versions.h delete mode 100644 include/musica/version.h delete mode 100644 musica/.gitmodules delete mode 100644 packaging/CMakeLists.txt delete mode 100644 packaging/modulefile.lua.in delete mode 100644 src/component_versions.c delete mode 100644 src/cxx_interface/CMakeLists.txt delete mode 100644 src/cxx_interface/micm/CMakeLists.txt delete mode 100644 src/cxx_interface/micm/interface.cpp delete mode 100644 src/fortran_interface/CMakeLists.txt delete mode 100644 src/fortran_interface/micm/CMakeLists.txt delete mode 100644 src/fortran_interface/micm/interface.F90 delete mode 100644 src/version.c.in diff --git a/.gitmodules b/.gitmodules index dc7cbe40..f52ce418 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,9 +1,9 @@ -[submodule "musica/lib/tuv-x"] - path = musica/lib/tuv-x +[submodule "lib/tuv-x"] + path = lib/tuv-x url = https://github.com/NCAR/tuv-x.git -[submodule "musica/lib/musica-core"] - path = musica/lib/musica-core +[submodule "lib/musica-core"] + path = lib/musica-core url = https://github.com/NCAR/musica-core.git -[submodule "musica/lib/micm"] - path = musica/lib/micm +[submodule "lib/micm"] + path = lib/micm url = https://github.com/NCAR/micm.git diff --git a/CMakeLists.txt b/CMakeLists.txt index ae363738..2ca881d8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -19,7 +19,7 @@ if(NOT CMAKE_BUILD_TYPE) FORCE) endif(NOT CMAKE_BUILD_TYPE) -message ( STATUS "CMake build configuration for musica(${CMAKE_BUILD_TYPE}) ${PROJECT_VERSION}" ) +message (STATUS "CMake build configuration for musica(${CMAKE_BUILD_TYPE}) ${PROJECT_VERSION}") include(musica_util) checkout_submodules() diff --git a/Dockerfile.fortran b/Dockerfile.fortran new file mode 100644 index 00000000..43fb3e5d --- /dev/null +++ b/Dockerfile.fortran @@ -0,0 +1,67 @@ +# on macOS this image requires rosetta 2 support for virtualization +# the intel compilers do not support the arm architecture so you must build +# on an amd platform, or virtualize +FROM --platform=linux/amd64 fedora:35 + +RUN dnf -y update \ + && dnf -y install \ + cmake \ + gcc-c++ \ + gcc-gfortran \ + gdb \ + git \ + lcov \ + make \ + netcdf-fortran-devel \ + wget \ + glibc-devel \ + && dnf clean all + +# Basekit +RUN wget https://registrationcenter-download.intel.com/akdlm/IRC_NAS/7deeaac4-f605-4bcf-a81b-ea7531577c61/l_BaseKit_p_2023.1.0.46401_offline.sh +RUN chmod +x l_BaseKit_p_2023.1.0.46401_offline.sh +RUN ./l_BaseKit_p_2023.1.0.46401_offline.sh -a -s --eula accept + +# HPC toolkit +RUN wget https://registrationcenter-download.intel.com/akdlm/IRC_NAS/1ff1b38a-8218-4c53-9956-f0b264de35a4/l_HPCKit_p_2023.1.0.46346_offline.sh +RUN chmod +x l_HPCKit_p_2023.1.0.46346_offline.sh +RUN ./l_HPCKit_p_2023.1.0.46346_offline.sh -a -s --eula accept + +# Set environment variables for intel compilers +ENV ONEAPI_VERSION=2021.4 +ENV ONEAPI_ROOT=/opt/intel/oneapi +ENV PATH=$PATH:$ONEAPI_ROOT/compiler/latest/linux/bin +ENV PATH=$PATH:$ONEAPI_ROOT/compiler/latest/linux/bin/intel64 +ENV LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ONEAPI_ROOT/compiler/latest/linux/compiler/lib/intel64 + +# install json-fortran using GCC +RUN curl -LO https://github.com/jacobwilliams/json-fortran/archive/8.2.0.tar.gz \ + && tar -zxvf 8.2.0.tar.gz \ + && cd json-fortran-8.2.0 \ + && mkdir build \ + && cd build \ + && FC=gfortran cmake -D SKIP_DOC_GEN:BOOL=TRUE .. \ + && make install + +# copy the musica library +COPY . /musica/ + +ENV JSON_FORTRAN_HOME="/usr/local/jsonfortran-gnu-8.2.0" + +RUN mkdir -p /build/musica /build/ccpp-integration + +# Build musica with GCC +RUN cd /build/musica \ + && FC=gfortran CC=gcc CXX=g++ cmake \ + -D ENABLE_TESTS=ON \ + /musica \ + && make install -j 8 + +# Build musica::ccpp with ifort and link to musica::musica that was built with GCC +RUN cd /build/ccpp-integration \ + && FC=ifort cmake \ + -DCMAKE_BUILD_TYPE=Debug \ + /musica/test/ccpp/integration \ + && make + +WORKDIR /build/ccpp-integration \ No newline at end of file diff --git a/ccpp/CMakeLists.txt b/ccpp/CMakeLists.txt deleted file mode 100644 index ed73d864..00000000 --- a/ccpp/CMakeLists.txt +++ /dev/null @@ -1,41 +0,0 @@ -#################### -# CCPP library - -add_library(ccpp STATIC) -add_library(musica::ccpp ALIAS ccpp) - -target_link_libraries(ccpp musica::musica) - -# Overwrite the init values choosen by CMake -if (CMAKE_Fortran_COMPILER_ID MATCHES "Intel") - set(CMAKE_Fortran_FLAGS "-fpp") -endif() - -# Set up include and lib directories -set(CCPP_MOD_DIR "${PROJECT_BINARY_DIR}/include/ccpp" ) -set(CCPP_LIB_DIR "${PROJECT_BINARY_DIR}/libs/ccpp" ) - -set(CCPP_INSTALL_PREFIX "musica-ccpp-${PROJECT_VERSION}") -set(CCPP_INSTALL_MOD_DIR "${INSTALL_PREFIX}/${CMAKE_INSTALL_INCLUDEDIR}") - -set_target_properties(ccpp PROPERTIES - Fortran_MODULE_DIRECTORY ${CCPP_MOD_DIR} -) - -set_target_properties(ccpp PROPERTIES - ARCHIVE_OUTPUT_DIRECTORY ${CCPP_LIB_DIR} - VERSION ${PROJECT_VERSION} - SOVERSION ${PROJECT_VERSION_MAJOR} -) - -target_include_directories(ccpp - PUBLIC - $ - $ -) - - -#################### -# micm ccpp api - -add_subdirectory(micm) \ No newline at end of file diff --git a/cmake/SetDefaults.cmake b/cmake/SetDefaults.cmake deleted file mode 100644 index d39f7b1a..00000000 --- a/cmake/SetDefaults.cmake +++ /dev/null @@ -1,4 +0,0 @@ -# Overwrite the init values choosen by CMake -if (CMAKE_Fortran_COMPILER_ID MATCHES "GNU") - set(CMAKE_Fortran_FLAGS_DEBUG_INIT "-g") -endif() \ No newline at end of file diff --git a/cmake/cmake_uninstall.cmake.in b/cmake/cmake_uninstall.cmake.in deleted file mode 100644 index 66e6b1d2..00000000 --- a/cmake/cmake_uninstall.cmake.in +++ /dev/null @@ -1,37 +0,0 @@ -# https://gitlab.kitware.com/cmake/community/-/wikis/FAQ#can-i-do-make-uninstall-with-cmake - -if(NOT EXISTS "@CMAKE_BINARY_DIR@/install_manifest.txt") - message(FATAL_ERROR "Cannot find install manifest: @CMAKE_BINARY_DIR@/install_manifest.txt") -endif() - -file(READ "@CMAKE_BINARY_DIR@/install_manifest.txt" files) -string(REGEX REPLACE "\n" ";" files "${files}") -foreach(file ${files}) - message(STATUS "Uninstalling $ENV{DESTDIR}${file}") - if(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}") - exec_program( - "@CMAKE_COMMAND@" ARGS "-E remove \"$ENV{DESTDIR}${file}\"" - OUTPUT_VARIABLE rm_out - RETURN_VALUE rm_retval - ) - if(NOT "${rm_retval}" STREQUAL 0) - message(FATAL_ERROR "Problem when removing $ENV{DESTDIR}${file}") - endif() - else(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}") - message(STATUS "File $ENV{DESTDIR}${file} does not exist.") - endif() -endforeach() - -set(uninstall_dirs "@INSTALL_PREFIX@;@cmake_config_install_location@") - -foreach(dir IN LISTS uninstall_dirs) - message(STATUS "Uninstalling ${dir}") - exec_program( - "@CMAKE_COMMAND@" ARGS "-E remove_directory ${dir}" - OUTPUT_VARIABLE rm_out - RETURN_VALUE rm_retval - ) - if(NOT "${rm_retval}" STREQUAL 0) - message(FATAL_ERROR "Problem when removing ${dir}") - endif() -endforeach() \ No newline at end of file diff --git a/cmake/dependencies.cmake b/cmake/dependencies.cmake deleted file mode 100644 index eb539e2e..00000000 --- a/cmake/dependencies.cmake +++ /dev/null @@ -1,39 +0,0 @@ -find_package(PkgConfig REQUIRED) - -################################################################################ -# json-fortran library -find_path(JSON_INCLUDE_DIR json_module.mod - DOC "json-fortran include directory (must include json_*.mod files)" - PATHS - $ENV{JSON_FORTRAN_HOME}/lib - /opt/local/lib - /usr/local/lib - /usr/local/lib64) -find_library(JSON_LIB jsonfortran - DOC "json-fortran library" - PATHS - $ENV{JSON_FORTRAN_HOME}/lib - /opt/local/lib - /usr/local/lib - /usr/local/lib64) -include_directories(${JSON_INCLUDE_DIR}) - -################################################################################ -# NetCDF library -pkg_check_modules(netcdff IMPORTED_TARGET REQUIRED netcdf-fortran) - -################################################################################ -# google test -if(ENABLE_TESTS) - include(FetchContent) - FetchContent_Declare(googletest - GIT_REPOSITORY https://github.com/google/googletest.git - GIT_TAG release-1.12.1 - FIND_PACKAGE_ARGS NAMES GTest - ) - - set(INSTALL_GTEST OFF CACHE BOOL "" FORCE) - set(BUILD_GMOCK OFF CACHE BOOL "" FORCE) - - FetchContent_MakeAvailable(googletest) -endif() \ No newline at end of file diff --git a/cmake/musicaConfig.cmake.in b/cmake/musicaConfig.cmake.in deleted file mode 100644 index 3cc6a433..00000000 --- a/cmake/musicaConfig.cmake.in +++ /dev/null @@ -1,5 +0,0 @@ -@PACKAGE_INIT@ - -include("${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@_Exports.cmake") - -check_required_components("@PROJECT_NAME@") \ No newline at end of file diff --git a/cmake/musica_util.cmake b/cmake/musica_util.cmake deleted file mode 100644 index 1682e03f..00000000 --- a/cmake/musica_util.cmake +++ /dev/null @@ -1,38 +0,0 @@ -function(checkout_submodules) - find_package(Git QUIET) - if(GIT_FOUND AND EXISTS "${PROJECT_SOURCE_DIR}/.git") - # Update submodules as needed - option(GIT_SUBMODULE "Check submodules during build" ON) - if(GIT_SUBMODULE) - message(STATUS "Submodule update") - execute_process(COMMAND ${GIT_EXECUTABLE} submodule update --init --recursive - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} - RESULT_VARIABLE GIT_SUBMOD_RESULT) - if(NOT GIT_SUBMOD_RESULT EQUAL "0") - message(FATAL_ERROR "git submodule update --init failed with ${GIT_SUBMOD_RESULT}, please checkout submodules") - endif() - endif() - endif() -endfunction(checkout_submodules) - -function(combine_archives output_archive list_of_input_archives) - set(mri_file ${CMAKE_BINARY_DIR}/${output_archive}.mri) - set(FULL_OUTPUT_PATH ${CMAKE_ARCHIVE_OUTPUT_DIRECTORY}/lib${output_archive}.a) - file(WRITE ${mri_file} "create ${FULL_OUTPUT_PATH}\n") - FOREACH(in_archive ${list_of_input_archives}) - file(APPEND ${mri_file} "addlib ${CMAKE_ARCHIVE_OUTPUT_DIRECTORY}/lib${in_archive}.a\n") - ENDFOREACH() - file(APPEND ${mri_file} "save\n") - file(APPEND ${mri_file} "end\n") - - set(output_archive_dummy_file ${CMAKE_BINARY_DIR}/${output_archive}.dummy) - add_custom_command(OUTPUT ${output_archive_dummy_file} - COMMAND touch ${output_archive_dummy_file} - DEPENDS ${list_of_input_archives}) - - add_library(${output_archive} STATIC ${output_archive_dummy_file}) - set_target_properties(${output_archive} PROPERTIES LINKER_LANGUAGE Fortran) - add_custom_command(TARGET ${output_archive} - POST_BUILD - COMMAND ar -M < ${mri_file}) -endfunction(combine_archives) \ No newline at end of file diff --git a/cmake/test_util.cmake b/cmake/test_util.cmake deleted file mode 100644 index a588456e..00000000 --- a/cmake/test_util.cmake +++ /dev/null @@ -1,86 +0,0 @@ -################################################################################ -# Utility functions for creating tests - -if(ENABLE_MEMCHECK) - find_program(MEMORYCHECK_COMMAND "valgrind") -endif() - -################################################################################ -# build and add a standard test linked to musica - -function(create_standard_test) - set(prefix TEST) - set(singleValues NAME WORKING_DIRECTORY) - set(multiValues SOURCES LIBRARIES) - include(CMakeParseArguments) - cmake_parse_arguments(${prefix} " " "${singleValues}" "${multiValues}" ${ARGN}) - - add_executable(test_${TEST_NAME} ${TEST_SOURCES}) - target_link_libraries(test_${TEST_NAME} PUBLIC musica::musica) - - # link additional libraries - foreach(library ${TEST_LIBRARIES}) - target_link_libraries(test_${TEST_NAME} PUBLIC ${library}) - endforeach() - - if(ENABLE_OPENMP) - target_link_libraries(test_${TEST_NAME} PUBLIC OpenMP::OpenMP_Fortran) - endif() - - if(NOT DEFINED TEST_WORKING_DIRECTORY) - set(TEST_WORKING_DIRECTORY "${CMAKE_BINARY_DIR}") - endif() - - add_musica_test(${TEST_NAME} test_${TEST_NAME} "" ${TEST_WORKING_DIRECTORY}) -endfunction(create_standard_test) - -function(create_standard_test_cxx) - set(prefix TEST) - set(singleValues NAME WORKING_DIRECTORY) - set(multiValues SOURCES) - include(CMakeParseArguments) - cmake_parse_arguments(${prefix} " " "${singleValues}" "${multiValues}" ${ARGN}) - add_executable(test_${TEST_NAME} ${TEST_SOURCES}) - target_link_libraries(test_${TEST_NAME} PUBLIC musica::musica GTest::gtest_main) - if(ENABLE_OPENMP) - target_link_libraries(test_${TEST_NAME} PUBLIC OpenMP::OpenMP_CXX OpenMP::OpenMP_Fortran) - endif() - if(NOT DEFINED TEST_WORKING_DIRECTORY) - set(TEST_WORKING_DIRECTORY "${CMAKE_BINARY_DIR}") - endif() - add_musica_test(${TEST_NAME} test_${TEST_NAME} "" ${TEST_WORKING_DIRECTORY}) -endfunction(create_standard_test_cxx) - -################################################################################ -# Add a test - -function(add_musica_test test_name test_binary test_args working_dir) - if(ENABLE_MPI) - add_test(NAME ${test_name} - COMMAND mpirun -v -np 2 ${CMAKE_BINARY_DIR}/${test_binary} ${test_args} - WORKING_DIRECTORY ${working_dir}) - else() - add_test(NAME ${test_name} - COMMAND ${test_binary} ${test_args} - WORKING_DIRECTORY ${working_dir}) - endif() - set(MEMORYCHECK_COMMAND_OPTIONS "--error-exitcode=1 --trace-children=yes --leak-check=full --gen-suppressions=all ${MEMCHECK_SUPPRESS}") - set(memcheck "${MEMORYCHECK_COMMAND} ${MEMORYCHECK_COMMAND_OPTIONS}") - separate_arguments(memcheck) - if(ENABLE_MPI AND MEMORYCHECK_COMMAND AND ENABLE_MEMCHECK) - add_test(NAME memcheck_${test_name} - COMMAND mpirun -v -np 2 ${memcheck} ${CMAKE_BINARY_DIR}/${test_binary} ${test_args} - WORKING_DIRECTORY ${working_dir}) - - # add dependency between memcheck and previous test - # https://stackoverflow.com/a/66931930/5217293 - set_tests_properties(${test_name} PROPERTIES FIXTURES_SETUP f_${test_name}) - set_tests_properties(memcheck_${test_name} PROPERTIES FIXTURES_REQUIRED f_${test_name}) - elseif(MEMORYCHECK_COMMAND AND ENABLE_MEMCHECK) - add_test(NAME memcheck_${test_name} - COMMAND ${memcheck} ${CMAKE_BINARY_DIR}/${test_binary} ${test_args} - WORKING_DIRECTORY ${working_dir}) - endif() -endfunction(add_musica_test) - -################################################################################ diff --git a/include/micm/interface.hpp b/include/micm/interface.hpp deleted file mode 100644 index 74c9bd40..00000000 --- a/include/micm/interface.hpp +++ /dev/null @@ -1,24 +0,0 @@ -#include - -#include -#include -#include - -class MICM { - public: - micm::RosenbrockSolver* solver_; -}; - -#ifdef __cplusplus - extern "C" - { -#endif - - typedef void (*FuncPtr)(double[], int64_t, int64_t); - - FuncPtr get_solver(char filepath[]); - -#ifdef __cplusplus - } // extern "C" -#endif - diff --git a/include/musica/component_versions.h b/include/musica/component_versions.h deleted file mode 100644 index 119f5dba..00000000 --- a/include/musica/component_versions.h +++ /dev/null @@ -1,11 +0,0 @@ -#pragma once - -#ifdef __cplusplus -extern "C" { -#endif - -char* getAllComponentVersions(); - -#ifdef __cplusplus -} -#endif \ No newline at end of file diff --git a/include/musica/version.h b/include/musica/version.h deleted file mode 100644 index caa53615..00000000 --- a/include/musica/version.h +++ /dev/null @@ -1,15 +0,0 @@ -#pragma once - -#ifdef __cplusplus -extern "C" { -#endif - -const char* getMusicaVersion(); -unsigned getMusicaVersionMajor(); -unsigned getMusicaVersionMinor(); -unsigned getMusicaVersionPatch(); -unsigned getMusicaVersionTweak(); - -#ifdef __cplusplus -} -#endif diff --git a/musica/.gitmodules b/musica/.gitmodules deleted file mode 100644 index dc7cbe40..00000000 --- a/musica/.gitmodules +++ /dev/null @@ -1,9 +0,0 @@ -[submodule "musica/lib/tuv-x"] - path = musica/lib/tuv-x - url = https://github.com/NCAR/tuv-x.git -[submodule "musica/lib/musica-core"] - path = musica/lib/musica-core - url = https://github.com/NCAR/musica-core.git -[submodule "musica/lib/micm"] - path = musica/lib/micm - url = https://github.com/NCAR/micm.git diff --git a/musica/CMakeLists.txt b/musica/CMakeLists.txt index cd2ab39a..a1332b93 100644 --- a/musica/CMakeLists.txt +++ b/musica/CMakeLists.txt @@ -22,6 +22,8 @@ endif(NOT CMAKE_BUILD_TYPE) message (STATUS "CMake build configuration for musica(${CMAKE_BUILD_TYPE}) ${PROJECT_VERSION}") include(musica_util) + +# Add submodules checkout_submodules() ################################################################################ @@ -46,6 +48,9 @@ endif() set( MUSICA_MOD_DIR "${PROJECT_BINARY_DIR}/include" ) set( MUSICA_LIB_DIR "${PROJECT_BINARY_DIR}/libs" ) +# Set parent directory to get submodules +cmake_path(GET PROJECT_SOURCE_DIR PARENT_PATH PARENT_DIR) + include(GNUInstallDirs) set(INSTALL_PREFIX "musica-${PROJECT_VERSION}") set(INSTALL_MOD_DIR "${INSTALL_PREFIX}/${CMAKE_INSTALL_INCLUDEDIR}") @@ -88,6 +93,8 @@ include(cmake/dependencies.cmake) add_library(musica STATIC) add_library(musica::musica ALIAS musica) +add_subdirectory(src) + set_target_properties(musica PROPERTIES ARCHIVE_OUTPUT_DIRECTORY ${MUSICA_LIB_DIR} Fortran_MODULE_DIRECTORY ${MUSICA_MOD_DIR} @@ -117,83 +124,89 @@ target_include_directories(musica # MUSICA-core add_library(musicacore_object) add_library(musica::musicacore ALIAS musicacore_object) + set(ENABLE_UTIL_ONLY ON) -add_subdirectory(lib/musica-core/src) +# In case of absolute source path, build directory needs to be explicitly provided +add_subdirectory(${PARENT_DIR}/lib/musica-core/src ${MUSICA_LIB_DIR}/musica-core/src) -# set_target_properties(musicacore_object PROPERTIES -# ARCHIVE_OUTPUT_DIRECTORY ${MUSICA_LIB_DIR} -# Fortran_MODULE_DIRECTORY ${MUSICA_MOD_DIR} -# ) +set_target_properties(musicacore_object PROPERTIES + ARCHIVE_OUTPUT_DIRECTORY ${MUSICA_LIB_DIR} + Fortran_MODULE_DIRECTORY ${MUSICA_MOD_DIR} +) -# target_include_directories(musicacore_object -# PUBLIC -# $ -# $ -# ) +target_include_directories(musicacore_object + PUBLIC + $ + $ +) -# target_link_libraries(musicacore_object -# PUBLIC -# PkgConfig::netcdff -# ) +target_link_libraries(musicacore_object + PUBLIC + PkgConfig::netcdff +) -# # add the sources to musica -# target_sources(musica -# PRIVATE -# $ -# ) +# add the sources to musica +target_sources(musica + PRIVATE + $ +) # #################### -# # TUV-x -# if (ENABLE_TUVX) -# add_definitions(-DMUSICA_USE_TUVX) - -# set(TUVX_MOD_DIR ${MUSICA_MOD_DIR}) -# set(TUVX_LIB_DIR ${MUSICA_LIB_DIR}) -# add_subdirectory(lib/tuv-x/src) - -# set_target_properties(tuvx_object PROPERTIES -# ARCHIVE_OUTPUT_DIRECTORY ${MUSICA_LIB_DIR} -# Fortran_MODULE_DIRECTORY ${MUSICA_MOD_DIR} -# ) - -# target_include_directories(tuvx_object -# PUBLIC -# $ -# $ -# ) - -# target_link_libraries(tuvx_object -# PUBLIC -# musicacore_object -# ) - -# # add the sources to musica -# target_sources(musica -# PRIVATE -# $ -# ) -# endif() +# TUV-x +if (ENABLE_TUVX) + add_definitions(-DMUSICA_USE_TUVX) + + set(TUVX_MOD_DIR ${MUSICA_MOD_DIR}) + set(TUVX_LIB_DIR ${MUSICA_LIB_DIR}) + + # In case of absolute source path, build directory needs to be explicitly provided + add_subdirectory(${PARENT_DIR}/lib/tuv-x/src ${MUSICA_LIB_DIR}/tuv-x/src) + + set_target_properties(tuvx_object PROPERTIES + ARCHIVE_OUTPUT_DIRECTORY ${MUSICA_LIB_DIR} + Fortran_MODULE_DIRECTORY ${MUSICA_MOD_DIR} + ) + + target_include_directories(tuvx_object + PUBLIC + $ + $ + ) + + target_link_libraries(tuvx_object + PUBLIC + musicacore_object + ) + + # add the sources to musica + target_sources(musica + PRIVATE + $ + ) +endif() # #################### -# # MICM -# if (ENABLE_MICM) -# add_definitions(-DMUSICA_USE_MICM) -# target_compile_features(musica PUBLIC cxx_std_20) - -# target_include_directories(musica -# PUBLIC -# $ -# $ -# ) - -# install( -# DIRECTORY -# ${PROJECT_SOURCE_DIR}/lib/micm/include/micm -# DESTINATION -# ${INSTALL_MOD_DIR} -# ) -# endif() +# MICM +if (ENABLE_MICM) + add_definitions(-DMUSICA_USE_MICM) + target_compile_features(musica PUBLIC cxx_std_20) + + target_include_directories(musica + PUBLIC + $ + $ + ) + + message("what is install interface: ${INSTALL_MOD_DIR}") + + install( + DIRECTORY + ${PARENT_DIR}/lib/micm/include/micm + DESTINATION + ${INSTALL_MOD_DIR} + ) +endif() # ################################################################################ # # Tests diff --git a/musica/cmake/musica_util.cmake b/musica/cmake/musica_util.cmake index 25e8ae45..9daedb63 100644 --- a/musica/cmake/musica_util.cmake +++ b/musica/cmake/musica_util.cmake @@ -6,10 +6,8 @@ function(checkout_submodules) option(GIT_SUBMODULE "Check submodules during build" ON) if(GIT_SUBMODULE) message(STATUS "Submodule update") - message(" * ${CMAKE_CURRENT_SOURCE_DIR} : current") execute_process(COMMAND ${GIT_EXECUTABLE} submodule update --init --recursive - # WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} - # WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} RESULT_VARIABLE GIT_SUBMOD_RESULT) if(NOT GIT_SUBMOD_RESULT EQUAL "0") message(FATAL_ERROR "git submodule update --init failed with ${GIT_SUBMOD_RESULT}, please checkout submodules") diff --git a/musica/src/CMakeLists.txt b/musica/src/CMakeLists.txt index d3a7ab7d..752e230b 100644 --- a/musica/src/CMakeLists.txt +++ b/musica/src/CMakeLists.txt @@ -1 +1,10 @@ +# version +configure_file(version.c.in ${CMAKE_BINARY_DIR}/version.c @ONLY) + +target_sources(musica + PRIVATE + component_versions.c + ${CMAKE_BINARY_DIR}/version.c +) + add_subdirectory(micm) \ No newline at end of file diff --git a/packaging/CMakeLists.txt b/packaging/CMakeLists.txt deleted file mode 100644 index 08b272ca..00000000 --- a/packaging/CMakeLists.txt +++ /dev/null @@ -1,97 +0,0 @@ -include(CMakePackageConfigHelpers) - -install( - TARGETS - musica musicacore_object - EXPORT - musica_Exports - LIBRARY DESTINATION ${INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR} - ARCHIVE DESTINATION ${INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR} -) - -# install the mod files -install( - DIRECTORY - ${MUSICA_MOD_DIR}/ - DESTINATION - ${INSTALL_MOD_DIR} - FILES_MATCHING PATTERN "*.mod" -) - -# install the cmake config files -set(cmake_config_install_location ${INSTALL_PREFIX}/cmake) - -install( - EXPORT - musica_Exports - DESTINATION - ${cmake_config_install_location} - NAMESPACE musica:: -) - -configure_package_config_file( - "${PROJECT_SOURCE_DIR}/cmake/musicaConfig.cmake.in" - "${PROJECT_BINARY_DIR}/musicaConfig.cmake" - INSTALL_DESTINATION - ${cmake_config_install_location} -) - -write_basic_package_version_file( - "${PROJECT_BINARY_DIR}/musicaConfigVersion.cmake" - VERSION ${PROJECT_VERSION} - COMPATIBILITY SameMajorVersion -) - -install( - FILES - ${PROJECT_BINARY_DIR}/musicaConfig.cmake - ${PROJECT_BINARY_DIR}/musicaConfigVersion.cmake - DESTINATION - ${cmake_config_install_location} -) - -###################################################################### -# uninstall target - -# https://gitlab.kitware.com/cmake/community/-/wikis/FAQ#can-i-do-make-uninstall-with-cmake -if(NOT TARGET uninstall) - configure_file( - "${PROJECT_SOURCE_DIR}/cmake/cmake_uninstall.cmake.in" - "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake" - IMMEDIATE @ONLY) - - add_custom_target(uninstall - COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake) -endif() - -###################################################################### -# Environment module - -if (CREATE_ENVIRONMENT_MODULE) - # Define the paths and environment variables for the module - set(MODULE_NAME ${PROJECT_VERSION}.lua) - set(MODULE_FILE_PATH ${CMAKE_BINARY_DIR}/modulefiles/${PROJECT_NAME}/${MODULE_NAME}) - set(MODULE_INSTALL_PATH ${CMAKE_INSTALL_PREFIX}/${INSTALL_PREFIX}) - - message(STATUS "MODULE NAME ${MODULE_NAME}") - message(STATUS "MODULE PATH ${MODULE_FILE_PATH}") - - # Generate the module file using the template - configure_file(${CMAKE_CURRENT_SOURCE_DIR}/modulefile.lua.in - ${MODULE_FILE_PATH} - @ONLY) - - if(INSTALL_MODULE_FILE_PATH) - # Create a custom target for installing the module file - add_custom_target(install_lmod_module - COMMAND ${CMAKE_COMMAND} -E copy - ${MODULE_FILE_PATH} - ${INSTALL_MODULE_FILE_PATH}/${PROJECT_NAME}/${MODULE_NAME}) - - # Add the install_lmod_module target to the "install" target - install(CODE "execute_process(COMMAND ${CMAKE_COMMAND} --build . --target install_lmod_module)") - - # Add a message to inform users how to trigger the installation - message(STATUS "To install the Lmod module, run: make install") - endif() -endif() \ No newline at end of file diff --git a/packaging/modulefile.lua.in b/packaging/modulefile.lua.in deleted file mode 100644 index 1fa6e11a..00000000 --- a/packaging/modulefile.lua.in +++ /dev/null @@ -1,26 +0,0 @@ --- The message printed by the module whatis command -whatis("@PROJECT_NAME@ v@PROJECT_VERSION@") - --- The message printed by the module help command -help([[ -MUSICA: Mulitscale Interface for Chemistry and Aerosols -For more information, visit https://github.com/NCAR/musica - -Example usage of `find_package` in a CMakeLists.txt file: - -find_package(musica @PROJECT_VERSION@ REQUIRED) -target_link_libraries(my_target musica::musica) -]]) - --- Set paths -local base = "@MODULE_INSTALL_PATH@" -local libpath = pathJoin(base, "/lib") -- libraries -local incpath = pathJoin(base, "/include") -- include files - -always_load("cmake/3.22.0", "json-fortran/8.3.0") - --- Set variables to use with cmake -setenv("musica_ROOT", base) -setenv("MUSICA_ROOT", base) -setenv("MUSICA_INC", incpath) -setenv("MUSICA_LIB", libpath) \ No newline at end of file diff --git a/src/component_versions.c b/src/component_versions.c deleted file mode 100644 index 1bc3cbc8..00000000 --- a/src/component_versions.c +++ /dev/null @@ -1,57 +0,0 @@ -#include -#include -#include -#include - -#include -#ifdef MUSICA_USE_MICM -#include -#endif - -char* add_name_and_version(char* pos, const char* name, const char* version, const char* sep) { - size_t name_length = strlen(name); - size_t version_length = strlen(version); - size_t sep_length = strlen(sep); - - memcpy(pos, name, name_length); - pos += name_length; - - memcpy(pos, version, version_length); - pos += version_length; - - memcpy(pos, sep, sep_length); - pos += sep_length; - - return pos; -} - -char* getAllComponentVersions() { - const char* sep = "\n"; - size_t sep_size = strlen(sep); - size_t buf_size = 0; - - const char* musica_name = "musica: "; - const char* musica_version = getMusicaVersion(); - buf_size += strlen(musica_name) + strlen(musica_version) + sep_size; - -#ifdef MUSICA_USE_MICM - const char* micm_name = "micm: "; - const char* micm_version = getMicmVersion(); - buf_size += strlen(micm_name) + strlen(micm_name) + sep_size; -#endif - - char* buf = (char*)malloc(sizeof(char) * (buf_size + 1)); - - if (buf) { - char* pos = buf; - - pos = add_name_and_version(pos, musica_name, musica_version, sep); -#ifdef MUSICA_USE_MICM - pos = add_name_and_version(pos, micm_name, micm_version, sep); -#endif - - *pos = '\0'; - } - - return buf; -} \ No newline at end of file diff --git a/src/cxx_interface/CMakeLists.txt b/src/cxx_interface/CMakeLists.txt deleted file mode 100644 index d3a7ab7d..00000000 --- a/src/cxx_interface/CMakeLists.txt +++ /dev/null @@ -1 +0,0 @@ -add_subdirectory(micm) \ No newline at end of file diff --git a/src/cxx_interface/micm/CMakeLists.txt b/src/cxx_interface/micm/CMakeLists.txt deleted file mode 100644 index 964ff510..00000000 --- a/src/cxx_interface/micm/CMakeLists.txt +++ /dev/null @@ -1,4 +0,0 @@ -target_sources(musica - PRIVATE - interface.cpp -) \ No newline at end of file diff --git a/src/cxx_interface/micm/interface.cpp b/src/cxx_interface/micm/interface.cpp deleted file mode 100644 index 6fcb42ea..00000000 --- a/src/cxx_interface/micm/interface.cpp +++ /dev/null @@ -1,41 +0,0 @@ -#include - -#include - -// assumes that photo_rates, matches order in c++ already -void fortran_solve(void *micm_address, double time_start, double time_end, double *concentrations, double temperature, double pressure, double *photo_rates) -{ - MICM *micm = static_cast(micm_address); - micm::State state = micm->solver_->GetState(); - - for (auto param : state.custom_rate_parameters_[0]) - { - param = *(photo_rates++); - } - state.conditions_[0].pressure_ = pressure; - state.conditions_[0].temperature_ = temperature; - - auto result = micm->solver_->Solve(time_start, time_end, state); -} - -void solver( - double state[], // NOLINT(misc-unused-parameters,cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays) - int64_t state_size, - int64_t - timestep) -{ - std::cout << "state size: " << state_size << std::endl; - std::cout << "timestep: " << timestep << std::endl; - - for (int64_t i{}; i < state_size; ++i) - { - std::cout << "state[" << i << "] = " << state[i] << std::endl; - } -} - -FuncPtr get_solver( - char filepath[]) // NOLINT(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays) -{ - std::cout << "file path: " << filepath << "\n"; - return &solver; -} \ No newline at end of file diff --git a/src/fortran_interface/CMakeLists.txt b/src/fortran_interface/CMakeLists.txt deleted file mode 100644 index d3a7ab7d..00000000 --- a/src/fortran_interface/CMakeLists.txt +++ /dev/null @@ -1 +0,0 @@ -add_subdirectory(micm) \ No newline at end of file diff --git a/src/fortran_interface/micm/CMakeLists.txt b/src/fortran_interface/micm/CMakeLists.txt deleted file mode 100644 index a4ca9eb3..00000000 --- a/src/fortran_interface/micm/CMakeLists.txt +++ /dev/null @@ -1,4 +0,0 @@ -target_sources(musica-fortran - PRIVATE - interface.F90 -) \ No newline at end of file diff --git a/src/fortran_interface/micm/interface.F90 b/src/fortran_interface/micm/interface.F90 deleted file mode 100644 index 171bc740..00000000 --- a/src/fortran_interface/micm/interface.F90 +++ /dev/null @@ -1,22 +0,0 @@ -module micm - use iso_c_binding - - implicit none - - interface - - type(c_funptr) function get_solver(filepath) bind(c) - import :: c_char, c_funptr - character(len=1, kind=c_char), dimension(*), intent(in) :: filepath - end function get_solver - - subroutine solver(state, state_size, time_step) bind(c) - import :: c_ptr, c_double, c_int64_t - real(c_double), dimension(*) :: state - integer(c_int64_t), value :: state_size - integer(c_int64_t), value :: time_step - end subroutine - - end interface - -end module micm \ No newline at end of file diff --git a/src/version.c.in b/src/version.c.in deleted file mode 100644 index b7437266..00000000 --- a/src/version.c.in +++ /dev/null @@ -1,24 +0,0 @@ -const char* getMusicaVersion() -{ - return "@musica_VERSION@"; -} - -unsigned getMusicaVersionMajor() -{ - return @musica_VERSION_MAJOR@; -} - -unsigned getMusicaVersionMinor() -{ - return @musica_VERSION_MINOR@ + 0; -} - -unsigned getMusicaVersionPatch() -{ - return @musica_VERSION_PATCH@ + 0; -} - -unsigned getMusicaVersionTweak() -{ - return @musica_VERSION_TWEAK@ + 0; -} diff --git a/test/ccpp/integration/CMakeLists.txt b/test/ccpp/integration/CMakeLists.txt index 4aab90e4..5a3a4f5c 100644 --- a/test/ccpp/integration/CMakeLists.txt +++ b/test/ccpp/integration/CMakeLists.txt @@ -20,7 +20,7 @@ find_library(LIBSTDCXX_PATH NAMES libstdc++.so.6 ) # NetCDF library -pkg_check_modules(netcdff IMPORTED_TARGET REQUIRED netcdf-fortran) +pkg_check_modules(netcdff REQUIRED IMPORTED_TARGET netcdf-fortran) # this path is the one expected in the docker image set(MUSICA_CCPP_WRAPPER "/musica/ccpp" CACHE STRING "The location of the MUSICA ccpp fortran wrapper code") From 618974cbfd084278d70bf790983fab4071943576 Mon Sep 17 00:00:00 2001 From: Jiwon Gim Date: Mon, 31 Jul 2023 16:21:47 -0600 Subject: [PATCH 20/59] enable test --- CMakeLists.txt | 2 +- musica/CMakeLists.txt | 30 +++++----- test/connections/CMakeLists.txt | 29 --------- test/connections/micm.cpp | 7 --- test/connections/musica_core.F90 | 19 ------ test/connections/musica_core_mpi.F90 | 37 ------------ test/connections/musica_core_openmp.F90 | 34 ----------- test/connections/tuvx.F90 | 45 -------------- test/connections/tuvx_mpi.F90 | 80 ------------------------- test/connections/tuvx_openmp.F90 | 61 ------------------- 10 files changed, 15 insertions(+), 329 deletions(-) delete mode 100644 test/connections/CMakeLists.txt delete mode 100644 test/connections/micm.cpp delete mode 100644 test/connections/musica_core.F90 delete mode 100644 test/connections/musica_core_mpi.F90 delete mode 100644 test/connections/musica_core_openmp.F90 delete mode 100644 test/connections/tuvx.F90 delete mode 100644 test/connections/tuvx_mpi.F90 delete mode 100644 test/connections/tuvx_openmp.F90 diff --git a/CMakeLists.txt b/CMakeLists.txt index 2ca881d8..c089bcf4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -28,7 +28,7 @@ checkout_submodules() # Projet wide setup options include(CMakeDependentOption) -option( ENABLE_TESTS "Builds tests that ensures each enabled MUSICA component can be used" OFF ) +option( ENABLE_TESTS "Builds tests that ensures each enabled MUSICA component can be used" ON ) option( ENABLE_TUVX "Builds TUV-x, a photolysis calculator library" ON ) option( ENABLE_MICM "Adds MICM, a model independent chemical mechanism solver" ON ) diff --git a/musica/CMakeLists.txt b/musica/CMakeLists.txt index a1332b93..5b7a482d 100644 --- a/musica/CMakeLists.txt +++ b/musica/CMakeLists.txt @@ -30,7 +30,7 @@ checkout_submodules() # Projet wide setup options include(CMakeDependentOption) -option( ENABLE_TESTS "Builds tests that ensures each enabled MUSICA component can be used" OFF ) +option( ENABLE_TESTS "Builds tests that ensures each enabled MUSICA component can be used" ON ) option( ENABLE_TUVX "Builds TUV-x, a photolysis calculator library" ON ) option( ENABLE_MICM "Adds MICM, a model independent chemical mechanism solver" ON ) @@ -198,8 +198,6 @@ if (ENABLE_MICM) $ ) - message("what is install interface: ${INSTALL_MOD_DIR}") - install( DIRECTORY ${PARENT_DIR}/lib/micm/include/micm @@ -208,19 +206,19 @@ if (ENABLE_MICM) ) endif() -# ################################################################################ -# # Tests +################################################################################ +# Tests -# # only include packaging if we are the top level project being built -# if(PROJECT_IS_TOP_LEVEL AND ENABLE_TESTS) -# enable_testing() -# add_subdirectory(test) -# endif() +# only include packaging if we are the top level project being built +if(PROJECT_IS_TOP_LEVEL AND ENABLE_TESTS) + enable_testing() + add_subdirectory(test) +endif() -# ################################################################################ -# # Packaging +################################################################################ +# Packaging -# # only include packaging if we are the top level project being built -# if(PROJECT_IS_TOP_LEVEL) -# add_subdirectory(packaging) -# endif() \ No newline at end of file +# only include packaging if we are the top level project being built +if(PROJECT_IS_TOP_LEVEL) + add_subdirectory(packaging) +endif() \ No newline at end of file diff --git a/test/connections/CMakeLists.txt b/test/connections/CMakeLists.txt deleted file mode 100644 index 0e741fb7..00000000 --- a/test/connections/CMakeLists.txt +++ /dev/null @@ -1,29 +0,0 @@ -################################################################################ -# Test utilities - -include(test_util) - -################################################################################ -# Tests - -create_standard_test(NAME connect_to_musica_core SOURCES musica_core.F90) -if (ENABLE_OPENMP) - create_standard_test(NAME connect_to_musica_core_openmp SOURCES musica_core_openmp.F90) -endif() -if (ENABLE_MPI) - create_standard_test(NAME connect_to_musica_core_mpi SOURCES musica_core_mpi.F90) -endif() - -if (ENABLE_TUVX) - create_standard_test(NAME connect_to_tuvx SOURCES tuvx.F90) - if (ENABLE_OPENMP) - create_standard_test(NAME connect_to_tuvx_openmp SOURCES tuvx_openmp.F90) - endif() - if (ENABLE_MPI) - create_standard_test(NAME connect_to_tuvx_mpi SOURCES tuvx_mpi.F90) - endif() -endif() - -if (ENABLE_MICM) - create_standard_test_cxx(NAME connect_to_micm SOURCES micm.cpp) -endif() \ No newline at end of file diff --git a/test/connections/micm.cpp b/test/connections/micm.cpp deleted file mode 100644 index abd65c47..00000000 --- a/test/connections/micm.cpp +++ /dev/null @@ -1,7 +0,0 @@ -#include - -#include - -TEST(ConnectToMICM, Version) { - std::string version = micm::getMicmVersion(); -} \ No newline at end of file diff --git a/test/connections/musica_core.F90 b/test/connections/musica_core.F90 deleted file mode 100644 index 31545505..00000000 --- a/test/connections/musica_core.F90 +++ /dev/null @@ -1,19 +0,0 @@ -! Copyright (C) 2022 National Center for Atmospheric Research -! SPDX-License-Identifier: Apache-2.0 -! -!> \file -!> Tests for that we can connect to tuvx using the monolith static library for musica - -!> Test module for the tuvx connection -program test_musica_connection - use musica_assert - - implicit none - - call assert(1234312, 1 == 1) - -contains - -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - -end program test_musica_connection diff --git a/test/connections/musica_core_mpi.F90 b/test/connections/musica_core_mpi.F90 deleted file mode 100644 index 70bc11e7..00000000 --- a/test/connections/musica_core_mpi.F90 +++ /dev/null @@ -1,37 +0,0 @@ -! Copyright (C) 2022 National Center for Atmospheric Research -! SPDX-License-Identifier: Apache-2.0 -! -!> \file -!> Tests for that we can connect to tuvx using the monolith static library for musica - -!> Test module for the tuvx connection -program test_musica_connection - use musica_assert - use musica_mpi - - implicit none - - call musica_mpi_init( ) - call test_musicacore( ) - call musica_mpi_finalize( ) - -contains - - subroutine test_musicacore() - integer, parameter :: comm = MPI_COMM_WORLD - integer :: send_integer, recv_integer - - call assert( 357761664, musica_mpi_support( ) ) - call assert( 455191678, musica_mpi_size( comm ) > 1 ) - - call musica_mpi_barrier( comm ) - - send_integer = 0 - if( musica_mpi_rank( comm ) == 0 ) send_integer = 42 - call musica_mpi_bcast( send_integer, comm ) - call assert( 353714667, send_integer == 42 ) - end subroutine test_musicacore - -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - -end program test_musica_connection diff --git a/test/connections/musica_core_openmp.F90 b/test/connections/musica_core_openmp.F90 deleted file mode 100644 index 5a81cb39..00000000 --- a/test/connections/musica_core_openmp.F90 +++ /dev/null @@ -1,34 +0,0 @@ -! Copyright (C) 2022 National Center for Atmospheric Research -! SPDX-License-Identifier: Apache-2.0 -! -!> \file -!> Tests for that we can connect to tuvx using the monolith static library for musica - -!> Test module for the tuvx connection -program test_musica_connection - use musica_assert -#ifdef MUSICA_USE_OPENMP - use omp_lib -#endif - - implicit none - -#ifdef MUSICA_USE_OPENMP - write(*,*) "Testing with ", omp_get_max_threads( ), " threads" -#else - write(*,*) "Testing without OpenMP support" -#endif - - !$omp parallel - call test_musicacore( ) - !$omp end parallel - -contains - - subroutine test_musicacore() - call assert(1234312, 1 == 1) - end subroutine test_musicacore - -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - -end program test_musica_connection diff --git a/test/connections/tuvx.F90 b/test/connections/tuvx.F90 deleted file mode 100644 index b5f8f6d7..00000000 --- a/test/connections/tuvx.F90 +++ /dev/null @@ -1,45 +0,0 @@ -! Copyright (C) 2022 National Center for Atmospheric Research -! SPDX-License-Identifier: Apache-2.0 -! -!> \file -!> Tests for that we can connect to tuvx using the monolith static library for musica - -!> Test module for the tuvx connection -program test_tuvx_connection - use musica_assert - - implicit none - - call test_tuvx() - -contains - -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - - !> Test tuvx connection - subroutine test_tuvx( ) - use tuvx_grid, only : grid_t - use tuvx_grid_equal_delta, only : grid_equal_delta_t - use musica_config, only : config_t - - character(len=*), parameter :: my_name = "tuvx connection tests" - type(config_t) :: config - class(grid_t), pointer :: new_grid_t => null() - - config = '{'// & - ' "name": "eq_int",' // & - ' "type": "equal interval",' // & - ' "units": "km",' // & - ' "begins at": 0.0,' // & - ' "ends at": 120.0,' // & - ' "cell delta": 1.0' // & - '}' - - new_grid_t => grid_equal_delta_t( config ) - call assert(412348394, new_grid_t%ncells_ == 120) - - end subroutine test_tuvx - -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - -end program test_tuvx_connection diff --git a/test/connections/tuvx_mpi.F90 b/test/connections/tuvx_mpi.F90 deleted file mode 100644 index be4a61dc..00000000 --- a/test/connections/tuvx_mpi.F90 +++ /dev/null @@ -1,80 +0,0 @@ -! Copyright (C) 2022 National Center for Atmospheric Research -! SPDX-License-Identifier: Apache-2.0 -! -!> \file -!> Tests for that we can connect to tuvx using the monolith static library for musica - -!> Test module for the tuvx connection -program test_tuvx_connection - use musica_assert - use musica_mpi - - implicit none - - call musica_mpi_init( ) - call test_tuvx( ) - call musica_mpi_finalize( ) - -contains - -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - - !> Test tuvx connection - subroutine test_tuvx( ) - use tuvx_grid, only : grid_t - use tuvx_grid_equal_delta, only : grid_equal_delta_t - use tuvx_grid_factory, only : grid_type_name, grid_allocate - use musica_config, only : config_t - use musica_string, only : string_t - - character(len=*), parameter :: my_name = "tuvx connection tests" - type(config_t) :: config - class(grid_t), pointer :: new_grid_t => null() - type(string_t) :: type_name - character, allocatable :: buffer(:) - integer :: pos, pack_size - integer, parameter :: comm = MPI_COMM_WORLD - - config = '{'// & - ' "name": "eq_int",' // & - ' "type": "equal interval",' // & - ' "units": "km",' // & - ' "begins at": 0.0,' // & - ' "ends at": 120.0,' // & - ' "cell delta": 1.0' // & - '}' - - - if( musica_mpi_rank( comm ) == 0 ) then - new_grid_t => grid_equal_delta_t( config ) - call assert(412348394, new_grid_t%ncells_ == 120) - - type_name = grid_type_name( new_grid_t ) - pack_size = type_name%pack_size( comm ) + new_grid_t%pack_size( comm ) - - allocate( buffer( pack_size ) ) - pos = 0 - - call type_name%mpi_pack( buffer, pos , comm ) - call new_grid_t%mpi_pack( buffer, pos , comm ) - - call assert( 319321152, pos <= pack_size ) - end if - - call musica_mpi_bcast( pack_size , comm ) - if( musica_mpi_rank( comm ) .ne. 0 ) allocate( buffer( pack_size ) ) - call musica_mpi_bcast( buffer , comm ) - - if( musica_mpi_rank( comm ) .ne. 0 ) then - pos = 0 - call type_name%mpi_unpack( buffer, pos , comm ) - new_grid_t => grid_allocate( type_name ) - call new_grid_t%mpi_unpack( buffer, pos , comm ) - end if - - - end subroutine test_tuvx - -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - -end program test_tuvx_connection diff --git a/test/connections/tuvx_openmp.F90 b/test/connections/tuvx_openmp.F90 deleted file mode 100644 index 087a60c6..00000000 --- a/test/connections/tuvx_openmp.F90 +++ /dev/null @@ -1,61 +0,0 @@ -! Copyright (C) 2022 National Center for Atmospheric Research -! SPDX-License-Identifier: Apache-2.0 -! -!> \file -!> Tests for that we can connect to tuvx using the monolith static library for musica - -!> Test module for the tuvx connection -program test_tuvx_connection - use musica_assert - use tuvx_grid, only : grid_t - use tuvx_grid_equal_delta, only : grid_equal_delta_t - use musica_config, only : config_t - -#ifdef MUSICA_USE_OPENMP - use omp_lib -#endif - - implicit none - - type(config_t) :: config - class(grid_t), pointer :: new_grid_t => null() - -#ifdef MUSICA_USE_OPENMP - write(*,*) "Testing with ", omp_get_max_threads( ), " threads" -#else - write(*,*) "Testing without OpenMP support" -#endif - - - config = '{'// & - ' "name": "eq_int",' // & - ' "type": "equal interval",' // & - ' "units": "km",' // & - ' "begins at": 0.0,' // & - ' "ends at": 120.0,' // & - ' "cell delta": 1.0' // & - '}' - - new_grid_t => grid_equal_delta_t( config ) - - !$omp parallel - call test_tuvx( new_grid_t ) - !$omp end parallel - -contains - -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - - !> Test tuvx connection - subroutine test_tuvx(a_grid_t) - use tuvx_grid, only : grid_t - - class(grid_t), pointer :: a_grid_t - - call assert(412348394, a_grid_t%ncells_ == 120) - - end subroutine test_tuvx - -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - -end program test_tuvx_connection From 51d90820d2dffb68950e734272c6787f3f0ea104 Mon Sep 17 00:00:00 2001 From: Jiwon Gim Date: Mon, 31 Jul 2023 16:22:35 -0600 Subject: [PATCH 21/59] add test for musica' --- musica/test/CMakeLists.txt | 4 + musica/test/connections/CMakeLists.txt | 29 +++++++ musica/test/connections/micm.cpp | 7 ++ musica/test/connections/musica_core.F90 | 19 +++++ musica/test/connections/musica_core_mpi.F90 | 37 +++++++++ .../test/connections/musica_core_openmp.F90 | 34 ++++++++ musica/test/connections/tuvx.F90 | 45 +++++++++++ musica/test/connections/tuvx_mpi.F90 | 80 +++++++++++++++++++ musica/test/connections/tuvx_openmp.F90 | 61 ++++++++++++++ 9 files changed, 316 insertions(+) create mode 100644 musica/test/CMakeLists.txt create mode 100644 musica/test/connections/CMakeLists.txt create mode 100644 musica/test/connections/micm.cpp create mode 100644 musica/test/connections/musica_core.F90 create mode 100644 musica/test/connections/musica_core_mpi.F90 create mode 100644 musica/test/connections/musica_core_openmp.F90 create mode 100644 musica/test/connections/tuvx.F90 create mode 100644 musica/test/connections/tuvx_mpi.F90 create mode 100644 musica/test/connections/tuvx_openmp.F90 diff --git a/musica/test/CMakeLists.txt b/musica/test/CMakeLists.txt new file mode 100644 index 00000000..b54cd8d1 --- /dev/null +++ b/musica/test/CMakeLists.txt @@ -0,0 +1,4 @@ +################################################################################ +# Add subdirectories containing tests + +add_subdirectory(connections) \ No newline at end of file diff --git a/musica/test/connections/CMakeLists.txt b/musica/test/connections/CMakeLists.txt new file mode 100644 index 00000000..0e741fb7 --- /dev/null +++ b/musica/test/connections/CMakeLists.txt @@ -0,0 +1,29 @@ +################################################################################ +# Test utilities + +include(test_util) + +################################################################################ +# Tests + +create_standard_test(NAME connect_to_musica_core SOURCES musica_core.F90) +if (ENABLE_OPENMP) + create_standard_test(NAME connect_to_musica_core_openmp SOURCES musica_core_openmp.F90) +endif() +if (ENABLE_MPI) + create_standard_test(NAME connect_to_musica_core_mpi SOURCES musica_core_mpi.F90) +endif() + +if (ENABLE_TUVX) + create_standard_test(NAME connect_to_tuvx SOURCES tuvx.F90) + if (ENABLE_OPENMP) + create_standard_test(NAME connect_to_tuvx_openmp SOURCES tuvx_openmp.F90) + endif() + if (ENABLE_MPI) + create_standard_test(NAME connect_to_tuvx_mpi SOURCES tuvx_mpi.F90) + endif() +endif() + +if (ENABLE_MICM) + create_standard_test_cxx(NAME connect_to_micm SOURCES micm.cpp) +endif() \ No newline at end of file diff --git a/musica/test/connections/micm.cpp b/musica/test/connections/micm.cpp new file mode 100644 index 00000000..abd65c47 --- /dev/null +++ b/musica/test/connections/micm.cpp @@ -0,0 +1,7 @@ +#include + +#include + +TEST(ConnectToMICM, Version) { + std::string version = micm::getMicmVersion(); +} \ No newline at end of file diff --git a/musica/test/connections/musica_core.F90 b/musica/test/connections/musica_core.F90 new file mode 100644 index 00000000..31545505 --- /dev/null +++ b/musica/test/connections/musica_core.F90 @@ -0,0 +1,19 @@ +! Copyright (C) 2022 National Center for Atmospheric Research +! SPDX-License-Identifier: Apache-2.0 +! +!> \file +!> Tests for that we can connect to tuvx using the monolith static library for musica + +!> Test module for the tuvx connection +program test_musica_connection + use musica_assert + + implicit none + + call assert(1234312, 1 == 1) + +contains + +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +end program test_musica_connection diff --git a/musica/test/connections/musica_core_mpi.F90 b/musica/test/connections/musica_core_mpi.F90 new file mode 100644 index 00000000..70bc11e7 --- /dev/null +++ b/musica/test/connections/musica_core_mpi.F90 @@ -0,0 +1,37 @@ +! Copyright (C) 2022 National Center for Atmospheric Research +! SPDX-License-Identifier: Apache-2.0 +! +!> \file +!> Tests for that we can connect to tuvx using the monolith static library for musica + +!> Test module for the tuvx connection +program test_musica_connection + use musica_assert + use musica_mpi + + implicit none + + call musica_mpi_init( ) + call test_musicacore( ) + call musica_mpi_finalize( ) + +contains + + subroutine test_musicacore() + integer, parameter :: comm = MPI_COMM_WORLD + integer :: send_integer, recv_integer + + call assert( 357761664, musica_mpi_support( ) ) + call assert( 455191678, musica_mpi_size( comm ) > 1 ) + + call musica_mpi_barrier( comm ) + + send_integer = 0 + if( musica_mpi_rank( comm ) == 0 ) send_integer = 42 + call musica_mpi_bcast( send_integer, comm ) + call assert( 353714667, send_integer == 42 ) + end subroutine test_musicacore + +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +end program test_musica_connection diff --git a/musica/test/connections/musica_core_openmp.F90 b/musica/test/connections/musica_core_openmp.F90 new file mode 100644 index 00000000..5a81cb39 --- /dev/null +++ b/musica/test/connections/musica_core_openmp.F90 @@ -0,0 +1,34 @@ +! Copyright (C) 2022 National Center for Atmospheric Research +! SPDX-License-Identifier: Apache-2.0 +! +!> \file +!> Tests for that we can connect to tuvx using the monolith static library for musica + +!> Test module for the tuvx connection +program test_musica_connection + use musica_assert +#ifdef MUSICA_USE_OPENMP + use omp_lib +#endif + + implicit none + +#ifdef MUSICA_USE_OPENMP + write(*,*) "Testing with ", omp_get_max_threads( ), " threads" +#else + write(*,*) "Testing without OpenMP support" +#endif + + !$omp parallel + call test_musicacore( ) + !$omp end parallel + +contains + + subroutine test_musicacore() + call assert(1234312, 1 == 1) + end subroutine test_musicacore + +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +end program test_musica_connection diff --git a/musica/test/connections/tuvx.F90 b/musica/test/connections/tuvx.F90 new file mode 100644 index 00000000..b5f8f6d7 --- /dev/null +++ b/musica/test/connections/tuvx.F90 @@ -0,0 +1,45 @@ +! Copyright (C) 2022 National Center for Atmospheric Research +! SPDX-License-Identifier: Apache-2.0 +! +!> \file +!> Tests for that we can connect to tuvx using the monolith static library for musica + +!> Test module for the tuvx connection +program test_tuvx_connection + use musica_assert + + implicit none + + call test_tuvx() + +contains + +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + + !> Test tuvx connection + subroutine test_tuvx( ) + use tuvx_grid, only : grid_t + use tuvx_grid_equal_delta, only : grid_equal_delta_t + use musica_config, only : config_t + + character(len=*), parameter :: my_name = "tuvx connection tests" + type(config_t) :: config + class(grid_t), pointer :: new_grid_t => null() + + config = '{'// & + ' "name": "eq_int",' // & + ' "type": "equal interval",' // & + ' "units": "km",' // & + ' "begins at": 0.0,' // & + ' "ends at": 120.0,' // & + ' "cell delta": 1.0' // & + '}' + + new_grid_t => grid_equal_delta_t( config ) + call assert(412348394, new_grid_t%ncells_ == 120) + + end subroutine test_tuvx + +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +end program test_tuvx_connection diff --git a/musica/test/connections/tuvx_mpi.F90 b/musica/test/connections/tuvx_mpi.F90 new file mode 100644 index 00000000..be4a61dc --- /dev/null +++ b/musica/test/connections/tuvx_mpi.F90 @@ -0,0 +1,80 @@ +! Copyright (C) 2022 National Center for Atmospheric Research +! SPDX-License-Identifier: Apache-2.0 +! +!> \file +!> Tests for that we can connect to tuvx using the monolith static library for musica + +!> Test module for the tuvx connection +program test_tuvx_connection + use musica_assert + use musica_mpi + + implicit none + + call musica_mpi_init( ) + call test_tuvx( ) + call musica_mpi_finalize( ) + +contains + +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + + !> Test tuvx connection + subroutine test_tuvx( ) + use tuvx_grid, only : grid_t + use tuvx_grid_equal_delta, only : grid_equal_delta_t + use tuvx_grid_factory, only : grid_type_name, grid_allocate + use musica_config, only : config_t + use musica_string, only : string_t + + character(len=*), parameter :: my_name = "tuvx connection tests" + type(config_t) :: config + class(grid_t), pointer :: new_grid_t => null() + type(string_t) :: type_name + character, allocatable :: buffer(:) + integer :: pos, pack_size + integer, parameter :: comm = MPI_COMM_WORLD + + config = '{'// & + ' "name": "eq_int",' // & + ' "type": "equal interval",' // & + ' "units": "km",' // & + ' "begins at": 0.0,' // & + ' "ends at": 120.0,' // & + ' "cell delta": 1.0' // & + '}' + + + if( musica_mpi_rank( comm ) == 0 ) then + new_grid_t => grid_equal_delta_t( config ) + call assert(412348394, new_grid_t%ncells_ == 120) + + type_name = grid_type_name( new_grid_t ) + pack_size = type_name%pack_size( comm ) + new_grid_t%pack_size( comm ) + + allocate( buffer( pack_size ) ) + pos = 0 + + call type_name%mpi_pack( buffer, pos , comm ) + call new_grid_t%mpi_pack( buffer, pos , comm ) + + call assert( 319321152, pos <= pack_size ) + end if + + call musica_mpi_bcast( pack_size , comm ) + if( musica_mpi_rank( comm ) .ne. 0 ) allocate( buffer( pack_size ) ) + call musica_mpi_bcast( buffer , comm ) + + if( musica_mpi_rank( comm ) .ne. 0 ) then + pos = 0 + call type_name%mpi_unpack( buffer, pos , comm ) + new_grid_t => grid_allocate( type_name ) + call new_grid_t%mpi_unpack( buffer, pos , comm ) + end if + + + end subroutine test_tuvx + +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +end program test_tuvx_connection diff --git a/musica/test/connections/tuvx_openmp.F90 b/musica/test/connections/tuvx_openmp.F90 new file mode 100644 index 00000000..087a60c6 --- /dev/null +++ b/musica/test/connections/tuvx_openmp.F90 @@ -0,0 +1,61 @@ +! Copyright (C) 2022 National Center for Atmospheric Research +! SPDX-License-Identifier: Apache-2.0 +! +!> \file +!> Tests for that we can connect to tuvx using the monolith static library for musica + +!> Test module for the tuvx connection +program test_tuvx_connection + use musica_assert + use tuvx_grid, only : grid_t + use tuvx_grid_equal_delta, only : grid_equal_delta_t + use musica_config, only : config_t + +#ifdef MUSICA_USE_OPENMP + use omp_lib +#endif + + implicit none + + type(config_t) :: config + class(grid_t), pointer :: new_grid_t => null() + +#ifdef MUSICA_USE_OPENMP + write(*,*) "Testing with ", omp_get_max_threads( ), " threads" +#else + write(*,*) "Testing without OpenMP support" +#endif + + + config = '{'// & + ' "name": "eq_int",' // & + ' "type": "equal interval",' // & + ' "units": "km",' // & + ' "begins at": 0.0,' // & + ' "ends at": 120.0,' // & + ' "cell delta": 1.0' // & + '}' + + new_grid_t => grid_equal_delta_t( config ) + + !$omp parallel + call test_tuvx( new_grid_t ) + !$omp end parallel + +contains + +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + + !> Test tuvx connection + subroutine test_tuvx(a_grid_t) + use tuvx_grid, only : grid_t + + class(grid_t), pointer :: a_grid_t + + call assert(412348394, a_grid_t%ncells_ == 120) + + end subroutine test_tuvx + +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +end program test_tuvx_connection From 0cebe9368e42741999a33e5d5127334745860938 Mon Sep 17 00:00:00 2001 From: Jiwon Gim Date: Tue, 1 Aug 2023 17:24:34 -0600 Subject: [PATCH 22/59] update docker file for musica (disable building tuvx) --- .dockerignore | 6 ++---- Dockerfile | 19 +++++++++---------- musica/CMakeLists.txt | 2 +- 3 files changed, 12 insertions(+), 15 deletions(-) diff --git a/.dockerignore b/.dockerignore index 373b5255..8a336a72 100644 --- a/.dockerignore +++ b/.dockerignore @@ -8,12 +8,10 @@ !Dockerfile.mpi !Dockerfile.mpi_openmp !Dockerfile.openmp -!ccpp -!cmake +!musica +!musica-fortran !docs -!include !lib -!packaging !src !test !.gitmodules diff --git a/Dockerfile b/Dockerfile index a5c1ffd2..79a6a8d0 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,8 @@ FROM fedora:35 +# copy the musica core code +COPY . musica + RUN dnf -y update \ && dnf -y install \ cmake \ @@ -23,16 +26,12 @@ RUN curl -LO https://github.com/jacobwilliams/json-fortran/archive/8.2.0.tar.gz && cmake -D SKIP_DOC_GEN:BOOL=TRUE .. \ && make install -# copy the musica core code -COPY . /musica/ - # get a tag and build the model -RUN mkdir /build \ - && cd /build \ +RUN cd musica \ && export JSON_FORTRAN_HOME="/usr/local/jsonfortran-gnu-8.2.0" \ - && cmake \ + && cmake -S ./musica \ -D ENABLE_TESTS=ON \ - ../musica \ - && make install -j 8 - -WORKDIR /build \ No newline at end of file + -B ../build \ + && cd ../build \ + && make install -j 8 +WORKDIR ./build \ No newline at end of file diff --git a/musica/CMakeLists.txt b/musica/CMakeLists.txt index 5b7a482d..83b0c097 100644 --- a/musica/CMakeLists.txt +++ b/musica/CMakeLists.txt @@ -32,7 +32,7 @@ include(CMakeDependentOption) option( ENABLE_TESTS "Builds tests that ensures each enabled MUSICA component can be used" ON ) -option( ENABLE_TUVX "Builds TUV-x, a photolysis calculator library" ON ) +option( ENABLE_TUVX "Builds TUV-x, a photolysis calculator library" OFF ) option( ENABLE_MICM "Adds MICM, a model independent chemical mechanism solver" ON ) option( ENABLE_MPI "Enable MPI parallel support" OFF) From cfcaf77d2f6b448f60c513e721b4ebc9f5cb1b67 Mon Sep 17 00:00:00 2001 From: Jiwon Gim Date: Tue, 1 Aug 2023 17:45:17 -0600 Subject: [PATCH 23/59] add a new line --- Dockerfile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 79a6a8d0..ba4762c1 100644 --- a/Dockerfile +++ b/Dockerfile @@ -33,5 +33,6 @@ RUN cd musica \ -D ENABLE_TESTS=ON \ -B ../build \ && cd ../build \ - && make install -j 8 + && make install -j 8 + WORKDIR ./build \ No newline at end of file From b74ca117b513d141ae8233a0d236a8ca28c0b095 Mon Sep 17 00:00:00 2001 From: Jiwon Gim Date: Fri, 4 Aug 2023 15:50:15 -0600 Subject: [PATCH 24/59] add musica-fortran --- Dockerfile | 15 ++++---- musica-fortran/CMakeLists.txt | 46 +++++++++++++++++++++++-- musica-fortran/src/micm/CMakeLists.txt | 2 +- musica-fortran/src/micm/interface.F90 | 4 +-- musica-fortran/test/CMakeLists.txt | 27 +++++++++++++++ musica-fortran/test/test_musica_api.F90 | 10 ++++++ musica/CMakeLists.txt | 4 +-- 7 files changed, 94 insertions(+), 14 deletions(-) create mode 100644 musica-fortran/test/CMakeLists.txt create mode 100644 musica-fortran/test/test_musica_api.F90 diff --git a/Dockerfile b/Dockerfile index ba4762c1..8df67929 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,6 @@ FROM fedora:35 -# copy the musica core code +# Copy the musica core code COPY . musica RUN dnf -y update \ @@ -15,9 +15,7 @@ RUN dnf -y update \ valgrind \ && dnf clean all -ENV FC=gfortran - -# install json-fortran +# Install json-fortran RUN curl -LO https://github.com/jacobwilliams/json-fortran/archive/8.2.0.tar.gz \ && tar -zxvf 8.2.0.tar.gz \ && cd json-fortran-8.2.0 \ @@ -26,12 +24,15 @@ RUN curl -LO https://github.com/jacobwilliams/json-fortran/archive/8.2.0.tar.gz && cmake -D SKIP_DOC_GEN:BOOL=TRUE .. \ && make install -# get a tag and build the model +# Set environment variables +ENV FC=gfortran +ENV JSON_FORTRAN_HOME="/usr/local/jsonfortran-gnu-8.2.0" + +# Build RUN cd musica \ - && export JSON_FORTRAN_HOME="/usr/local/jsonfortran-gnu-8.2.0" \ && cmake -S ./musica \ - -D ENABLE_TESTS=ON \ -B ../build \ + -D ENABLE_TESTS=ON \ && cd ../build \ && make install -j 8 diff --git a/musica-fortran/CMakeLists.txt b/musica-fortran/CMakeLists.txt index 2c3fe24a..31258207 100644 --- a/musica-fortran/CMakeLists.txt +++ b/musica-fortran/CMakeLists.txt @@ -3,7 +3,49 @@ cmake_minimum_required(VERSION 3.21) project( musica-fortran VERSION 0.0.0 - LANGUAGES Fortran + LANGUAGES Fortran C CXX ) -add_subdirectory(src) \ No newline at end of file +add_library(musica-fortran STATIC) +add_library(musica::musica-fortran ALIAS musica-fortran) + +# Set up include and lib directories +set( MUSICA_FORTRAN_MOD_DIR "${PROJECT_BINARY_DIR}/include" ) +set( MUSICA_FORTRAN_LIB_DIR "${PROJECT_BINARY_DIR}/libs" ) + +set_target_properties(musica-fortran +PROPERTIES + ARCHIVE_OUTPUT_DIRECTORY ${MUSICA_FORTRAN_LIB_DIR} + Fortran_MODULE_DIRECTORY ${MUSICA_FORTRAN_MOD_DIR} +) + +find_package(PkgConfig REQUIRED) +pkg_check_modules(netcdff IMPORTED_TARGET REQUIRED netcdf-fortran) + +# TODO: jiwon +# 1. Find pkg for musica +find_package(musica 0.3.0 REQUIRED) + +# TODO: jiwon +# 2. Use FetchContent to get musica +# include(FetchContent) + +# FetchContent_Declare(musica-fortran +# GIT_REPOSITORY https://github.com/NCAR/musica.git +# GIT_TAG 0cebe9368e42741999a33e5d5127334745860938 +# ) + +# FetchContent_MakeAvailable(musica-fortran) + +target_link_libraries(musica-fortran + PUBLIC + musica::musica) + +target_include_directories(musica-fortran + PUBLIC + $ + $ +) + +add_subdirectory(src) +add_subdirectory(test) \ No newline at end of file diff --git a/musica-fortran/src/micm/CMakeLists.txt b/musica-fortran/src/micm/CMakeLists.txt index a4ca9eb3..7e743d8f 100644 --- a/musica-fortran/src/micm/CMakeLists.txt +++ b/musica-fortran/src/micm/CMakeLists.txt @@ -1,4 +1,4 @@ target_sources(musica-fortran - PRIVATE + PUBLIC interface.F90 ) \ No newline at end of file diff --git a/musica-fortran/src/micm/interface.F90 b/musica-fortran/src/micm/interface.F90 index 171bc740..355f69c9 100644 --- a/musica-fortran/src/micm/interface.F90 +++ b/musica-fortran/src/micm/interface.F90 @@ -7,7 +7,7 @@ module micm type(c_funptr) function get_solver(filepath) bind(c) import :: c_char, c_funptr - character(len=1, kind=c_char), dimension(*), intent(in) :: filepath + character(len=*, kind=c_char), dimension(*), intent(in) :: filepath end function get_solver subroutine solver(state, state_size, time_step) bind(c) @@ -16,7 +16,7 @@ subroutine solver(state, state_size, time_step) bind(c) integer(c_int64_t), value :: state_size integer(c_int64_t), value :: time_step end subroutine - + end interface end module micm \ No newline at end of file diff --git a/musica-fortran/test/CMakeLists.txt b/musica-fortran/test/CMakeLists.txt new file mode 100644 index 00000000..75c9060a --- /dev/null +++ b/musica-fortran/test/CMakeLists.txt @@ -0,0 +1,27 @@ +cmake_minimum_required(VERSION 3.21) + +project( + test_musica_fortran_wrapper + VERSION 0.0.0 + LANGUAGES Fortran C CXX +) + +set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) + +find_package(musica 0.3.0 REQUIRED) + +################################################################################ +# Tests +add_executable(test_musica_api test_musica_api.F90) + +target_link_libraries(test_musica_api + PUBLIC + musica::musica + musica::musica-fortran +) +enable_testing() + +add_test( + NAME test_musica_api + COMMAND $ + ) \ No newline at end of file diff --git a/musica-fortran/test/test_musica_api.F90 b/musica-fortran/test/test_musica_api.F90 new file mode 100644 index 00000000..8ec61ac8 --- /dev/null +++ b/musica-fortran/test/test_musica_api.F90 @@ -0,0 +1,10 @@ +program test_musica_api + use iso_c_binding + use micm + + character(len=5, kind=c_char) :: c_filepath + type(c_funptr) :: csolver_func_pointer + c_filepath = 'asdf' + csolver_func_pointer = get_solver(c_filepath) + +end program test_musica_api diff --git a/musica/CMakeLists.txt b/musica/CMakeLists.txt index 83b0c097..728a9dfc 100644 --- a/musica/CMakeLists.txt +++ b/musica/CMakeLists.txt @@ -103,7 +103,7 @@ set_target_properties(musica PROPERTIES ) target_link_libraries(musica - PUBLIC + PRIVATE PkgConfig::netcdff ${JSON_LIB} ) @@ -142,7 +142,7 @@ target_include_directories(musicacore_object ) target_link_libraries(musicacore_object - PUBLIC + PRIVATE PkgConfig::netcdff ) From 01d5305a96e23474ef25c2e46854e691dd9081a3 Mon Sep 17 00:00:00 2001 From: Jiwon Gim Date: Fri, 4 Aug 2023 17:48:35 -0600 Subject: [PATCH 25/59] docker for musica-fortran --- .github/workflows/test.yml | 13 +++- Dockerfile.fortran | 120 +++++++++++++++++++++++++------------ 2 files changed, 93 insertions(+), 40 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 631dc000..5bf5707e 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -46,4 +46,15 @@ jobs: - name: build Docker image run: docker build -t musica-mpi-openmp -f Dockerfile.mpi_openmp . - name: run tests in container - run: docker run --name test-container -t musica-mpi-openmp bash -c 'make test' \ No newline at end of file + run: docker run --name test-container -t musica-mpi-openmp bash -c 'make test' + build_test_connections_musica-fortran: + runs-on: ubuntu-latest + if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name != github.event.pull_request.base.repo.full_name + steps: + - uses: actions/checkout@v2 + with: + submodules: recursive + - name: build Docker image + run: docker build -t musica-fortran -f Dockerfile.fotran . + - name: run tests in container + run: docker run --name test-container -t musica-fortran bash -c 'cd musica/musica-fortran/build/test; ctest' diff --git a/Dockerfile.fortran b/Dockerfile.fortran index 43fb3e5d..57f8239c 100644 --- a/Dockerfile.fortran +++ b/Dockerfile.fortran @@ -1,67 +1,109 @@ # on macOS this image requires rosetta 2 support for virtualization # the intel compilers do not support the arm architecture so you must build # on an amd platform, or virtualize -FROM --platform=linux/amd64 fedora:35 +# FROM --platform=linux/amd64 fedora:35 +FROM fedora:35 RUN dnf -y update \ && dnf -y install \ cmake \ gcc-c++ \ gcc-gfortran \ - gdb \ + # gdb \ git \ lcov \ make \ netcdf-fortran-devel \ - wget \ - glibc-devel \ + # wget \ + # glibc-devel \ + valgrind \ && dnf clean all -# Basekit -RUN wget https://registrationcenter-download.intel.com/akdlm/IRC_NAS/7deeaac4-f605-4bcf-a81b-ea7531577c61/l_BaseKit_p_2023.1.0.46401_offline.sh -RUN chmod +x l_BaseKit_p_2023.1.0.46401_offline.sh -RUN ./l_BaseKit_p_2023.1.0.46401_offline.sh -a -s --eula accept - -# HPC toolkit -RUN wget https://registrationcenter-download.intel.com/akdlm/IRC_NAS/1ff1b38a-8218-4c53-9956-f0b264de35a4/l_HPCKit_p_2023.1.0.46346_offline.sh -RUN chmod +x l_HPCKit_p_2023.1.0.46346_offline.sh -RUN ./l_HPCKit_p_2023.1.0.46346_offline.sh -a -s --eula accept - -# Set environment variables for intel compilers -ENV ONEAPI_VERSION=2021.4 -ENV ONEAPI_ROOT=/opt/intel/oneapi -ENV PATH=$PATH:$ONEAPI_ROOT/compiler/latest/linux/bin -ENV PATH=$PATH:$ONEAPI_ROOT/compiler/latest/linux/bin/intel64 -ENV LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ONEAPI_ROOT/compiler/latest/linux/compiler/lib/intel64 - -# install json-fortran using GCC +# Install json-fortran RUN curl -LO https://github.com/jacobwilliams/json-fortran/archive/8.2.0.tar.gz \ && tar -zxvf 8.2.0.tar.gz \ && cd json-fortran-8.2.0 \ && mkdir build \ && cd build \ - && FC=gfortran cmake -D SKIP_DOC_GEN:BOOL=TRUE .. \ + && cmake -D SKIP_DOC_GEN:BOOL=TRUE .. \ && make install -# copy the musica library -COPY . /musica/ - +# Set environment variables +ENV FC=gfortran ENV JSON_FORTRAN_HOME="/usr/local/jsonfortran-gnu-8.2.0" -RUN mkdir -p /build/musica /build/ccpp-integration +# Copy the musica core code +COPY . musica -# Build musica with GCC -RUN cd /build/musica \ - && FC=gfortran CC=gcc CXX=g++ cmake \ +# Build +RUN cd musica/musica \ + && cmake -S. \ + -Bbuild \ -D ENABLE_TESTS=ON \ - /musica \ - && make install -j 8 - -# Build musica::ccpp with ifort and link to musica::musica that was built with GCC -RUN cd /build/ccpp-integration \ - && FC=ifort cmake \ - -DCMAKE_BUILD_TYPE=Debug \ - /musica/test/ccpp/integration \ + && cd build \ + && make install -j 8 + +# Build +RUN cd musica/musica-fortran \ + && cmake -S . \ + -Bbuild \ + -D ENABLE_TESTS=ON \ + && cd build \ && make -WORKDIR /build/ccpp-integration \ No newline at end of file +###### +###### +# TODO: jiwon 8/4 - We need these but it takes too long time to build so I will skip for now +###### +###### +# # Basekit +# RUN wget https://registrationcenter-download.intel.com/akdlm/IRC_NAS/7deeaac4-f605-4bcf-a81b-ea7531577c61/l_BaseKit_p_2023.1.0.46401_offline.sh +# RUN chmod +x l_BaseKit_p_2023.1.0.46401_offline.sh +# RUN ./l_BaseKit_p_2023.1.0.46401_offline.sh -a -s --eula accept + +# # HPC toolkit +# RUN wget https://registrationcenter-download.intel.com/akdlm/IRC_NAS/1ff1b38a-8218-4c53-9956-f0b264de35a4/l_HPCKit_p_2023.1.0.46346_offline.sh +# RUN chmod +x l_HPCKit_p_2023.1.0.46346_offline.sh +# RUN ./l_HPCKit_p_2023.1.0.46346_offline.sh -a -s --eula accept + +# # Set environment variables for intel compilers +# ENV ONEAPI_VERSION=2021.4d +# ENV ONEAPI_ROOT=/opt/intel/oneapi +# ENV PATH=$PATH:$ONEAPI_ROOT/compiler/latest/linux/bin +# ENV PATH=$PATH:$ONEAPI_ROOT/compiler/latest/linux/bin/intel64 +# ENV LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ONEAPI_ROOT/compiler/latest/linux/compiler/lib/intel64 + +# # Install json-fortran using GCC +# RUN curl -LO https://github.com/jacobwilliams/json-fortran/archive/8.2.0.tar.gz \ +# && tar -zxvf 8.2.0.tar.gz \ +# && cd json-fortran-8.2.0 \ +# && mkdir build \ +# && cd build \ +# && FC=gfortran cmake -D SKIP_DOC_GEN:BOOL=TRUE .. \ +# && make install + +# # Copy the musica library +# COPY . /musica/ + +# ENV JSON_FORTRAN_HOME="/usr/local/jsonfortran-gnu-8.2.0" + +# RUN mkdir -p /build/musica /build/ccpp-integration + +# # Build musica with GCC +# RUN cd /build/musica \ +# && FC=gfortran CC=gcc CXX=g++ cmake \ +# -D ENABLE_TESTS=ON \ +# /musica \ +# && make install -j 8 + +# # Build musica::ccpp with ifort and link to musica::musica that was built with GCC +# RUN cd /build/ccpp-integration \ +# && FC=ifort cmake \ +# -DCMAKE_BUILD_TYPE=Debug \ +# /musica/test/ccpp/integration \ +# && make + +# WORKDIR /build/ccpp-integration + +##### +##### \ No newline at end of file From 86c93578082a8c2f124a6692ef3eb2187f663088 Mon Sep 17 00:00:00 2001 From: Jiwon Gim Date: Fri, 4 Aug 2023 17:52:59 -0600 Subject: [PATCH 26/59] fix a typo --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 5bf5707e..c7bb7111 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -55,6 +55,6 @@ jobs: with: submodules: recursive - name: build Docker image - run: docker build -t musica-fortran -f Dockerfile.fotran . + run: docker build -t musica-fortran -f Dockerfile.fortran . - name: run tests in container run: docker run --name test-container -t musica-fortran bash -c 'cd musica/musica-fortran/build/test; ctest' From 914ce1ec238e3d66ee6943efe4904260a213705d Mon Sep 17 00:00:00 2001 From: Jiwon Gim Date: Mon, 7 Aug 2023 11:18:14 -0600 Subject: [PATCH 27/59] testing test yml --- .github/workflows/test.yml | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index c7bb7111..b3c32ff7 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -1,7 +1,11 @@ name: build -on: [push, pull_request] - +# on: [push, pull_request] +on: + push: + branches: + - fortran_wrapper + jobs: build_test_connections: runs-on: ubuntu-latest From 6541ef66df9c7d2ca760afe59318dcedd6cab5df Mon Sep 17 00:00:00 2001 From: Jiwon Gim Date: Mon, 7 Aug 2023 14:10:32 -0600 Subject: [PATCH 28/59] update docker for mpi --- Dockerfile | 6 +++--- Dockerfile.mpi | 30 ++++++++++++++++-------------- 2 files changed, 19 insertions(+), 17 deletions(-) diff --git a/Dockerfile b/Dockerfile index 8df67929..ccb091e9 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,8 +1,5 @@ FROM fedora:35 -# Copy the musica core code -COPY . musica - RUN dnf -y update \ && dnf -y install \ cmake \ @@ -28,6 +25,9 @@ RUN curl -LO https://github.com/jacobwilliams/json-fortran/archive/8.2.0.tar.gz ENV FC=gfortran ENV JSON_FORTRAN_HOME="/usr/local/jsonfortran-gnu-8.2.0" +# Copy the musica core code +COPY . musica + # Build RUN cd musica \ && cmake -S ./musica \ diff --git a/Dockerfile.mpi b/Dockerfile.mpi index fe47a9d1..73f5fc73 100644 --- a/Dockerfile.mpi +++ b/Dockerfile.mpi @@ -20,36 +20,38 @@ RUN sudo dnf -y install \ openmpi-devel \ valgrind-openmpi \ && dnf clean all -ENV PATH="${PATH}:/usr/lib64/openmpi/bin/" # install json-fortran RUN curl -LO https://github.com/jacobwilliams/json-fortran/archive/8.2.0.tar.gz \ && tar -zxvf 8.2.0.tar.gz \ && cd json-fortran-8.2.0 \ - && export FC=gfortran \ && mkdir build \ && cd build \ && cmake -D SKIP_DOC_GEN:BOOL=TRUE .. \ && sudo make install +# Set environment variables +ENV PATH="${PATH}:/usr/lib64/openmpi/bin/" +ENV OMP_NUM_THREADS=3 +ENV FC=gfortran +ENV JSON_FORTRAN_HOME="/usr/local/jsonfortran-gnu-8.2.0" + # copy the MusicBox code COPY . musica/ -ENV OMP_NUM_THREADS=3 - RUN git config --global --add safe.directory '*' RUN sudo chown -R test_user.test_user musica -# get a tag and build the model -RUN mkdir build \ - && cd build \ - && export JSON_FORTRAN_HOME="/usr/local/jsonfortran-gnu-8.2.0" \ - && cmake -D CMAKE_BUILD_TYPE=debug \ + +# Build +RUN cd musica \ + && cmake -S ./musica \ + -B ../build \ + -D CMAKE_BUILD_TYPE=debug \ -D ENABLE_MPI:BOOL=TRUE \ -D ENABLE_TESTS=ON \ -D CMAKE_Fortran_COMPILER=/usr/lib64/openmpi/bin/mpif90 \ - ../musica \ - && make \ - && sudo make install \ - && sudo chown -R test_user:test_user . + && cd ../build \ + && sudo make install -j 8 \ + && sudo chown -R test_user:test_user . -WORKDIR /home/test_user/build \ No newline at end of file +WORKDIR /home/test_user/build \ No newline at end of file From ee93d4b6b5931d3850261af1f18fe286a4921f87 Mon Sep 17 00:00:00 2001 From: Jiwon Gim Date: Mon, 7 Aug 2023 14:22:59 -0600 Subject: [PATCH 29/59] update dockerfile for mpi and openmp --- Dockerfile.mpi_openmp | 28 +++++++++++++++------------- Dockerfile.openmp | 24 +++++++++++++----------- 2 files changed, 28 insertions(+), 24 deletions(-) diff --git a/Dockerfile.mpi_openmp b/Dockerfile.mpi_openmp index 83305b7e..861d60e2 100644 --- a/Dockerfile.mpi_openmp +++ b/Dockerfile.mpi_openmp @@ -20,37 +20,39 @@ RUN sudo dnf -y install \ openmpi-devel \ valgrind-openmpi \ && dnf clean all -ENV PATH="${PATH}:/usr/lib64/openmpi/bin/" # install json-fortran RUN curl -LO https://github.com/jacobwilliams/json-fortran/archive/8.2.0.tar.gz \ && tar -zxvf 8.2.0.tar.gz \ && cd json-fortran-8.2.0 \ - && export FC=gfortran \ && mkdir build \ && cd build \ && cmake -D SKIP_DOC_GEN:BOOL=TRUE .. \ && sudo make install +# Set environment variables +ENV PATH="${PATH}:/usr/lib64/openmpi/bin/" +ENV OMP_NUM_THREADS=3 +ENV FC=gfortran +ENV JSON_FORTRAN_HOME="/usr/local/jsonfortran-gnu-8.2.0" + # copy the MusicBox code COPY . musica/ -ENV OMP_NUM_THREADS=3 - RUN git config --global --add safe.directory '*' RUN sudo chown -R test_user.test_user musica + # get a tag and build the model -RUN mkdir build \ - && cd build \ - && export JSON_FORTRAN_HOME="/usr/local/jsonfortran-gnu-8.2.0" \ - && cmake -D CMAKE_BUILD_TYPE=debug \ +RUN cd musica \ + && cmake -S ./musica \ + -B ../build \ + -D CMAKE_BUILD_TYPE=debug \ -D ENABLE_MPI:BOOL=TRUE \ - -D ENABLE_TESTS=ON \ -D ENABLE_OPENMP:BOOL=TRUE \ + -D ENABLE_TESTS=ON \ -D CMAKE_Fortran_COMPILER=/usr/lib64/openmpi/bin/mpif90 \ - ../musica \ - && make \ - && sudo make install \ - && sudo chown -R test_user:test_user . + && cd ../build \ + && sudo make install \ + && sudo chown -R test_user:test_user . WORKDIR /home/test_user/build \ No newline at end of file diff --git a/Dockerfile.openmp b/Dockerfile.openmp index 165204ce..05765b32 100644 --- a/Dockerfile.openmp +++ b/Dockerfile.openmp @@ -20,38 +20,40 @@ RUN sudo dnf -y install \ openmpi-devel \ valgrind-openmpi \ && dnf clean all -ENV PATH="${PATH}:/usr/lib64/openmpi/bin/" # install json-fortran RUN curl -LO https://github.com/jacobwilliams/json-fortran/archive/8.2.0.tar.gz \ && tar -zxvf 8.2.0.tar.gz \ && cd json-fortran-8.2.0 \ - && export FC=gfortran \ && mkdir build \ && cd build \ && cmake -D SKIP_DOC_GEN:BOOL=TRUE .. \ && sudo make install +# Set environment variables +ENV PATH="${PATH}:/usr/lib64/openmpi/bin/" +ENV OMP_NUM_THREADS=3 +ENV FC=gfortran +ENV JSON_FORTRAN_HOME="/usr/local/jsonfortran-gnu-8.2.0" + # copy the MusicBox code COPY . musica/ -ENV OMP_NUM_THREADS=3 - RUN git config --global --add safe.directory '*' RUN sudo chown -R test_user.test_user musica + # get a tag and build the model -RUN mkdir build \ - && cd build \ - && export JSON_FORTRAN_HOME="/usr/local/jsonfortran-gnu-8.2.0" \ - && cmake -D CMAKE_BUILD_TYPE=debug \ +RUN cd musica \ + && cmake -S ./musica \ + -B ../build \ + -D CMAKE_BUILD_TYPE=debug \ -D ENABLE_OPENMP:BOOL=TRUE \ -D ENABLE_TESTS=ON \ -D CMAKE_Fortran_COMPILER=/usr/lib64/openmpi/bin/mpif90 \ -D CMAKE_CXX_COMPILER=/usr/lib64/openmpi/bin/mpic++ \ - ../musica \ + && cd ../build \ && make VERBOSE=1 \ - && sudo make install \ + && sudo make install -j 8 \ && sudo chown -R test_user:test_user . - WORKDIR /home/test_user/build \ No newline at end of file From 48e8ce8ab78edf45f2ebab92d27e167f2b35ced1 Mon Sep 17 00:00:00 2001 From: Jiwon Gim Date: Mon, 7 Aug 2023 14:35:16 -0600 Subject: [PATCH 30/59] roll back test yml --- .github/workflows/test.yml | 8 +- CMakeLists.txt | 457 ++++++++++++++++++------------------- 2 files changed, 226 insertions(+), 239 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index b3c32ff7..c7bb7111 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -1,11 +1,7 @@ name: build -# on: [push, pull_request] -on: - push: - branches: - - fortran_wrapper - +on: [push, pull_request] + jobs: build_test_connections: runs-on: ubuntu-latest diff --git a/CMakeLists.txt b/CMakeLists.txt index c089bcf4..02f2323c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,233 +1,224 @@ -################################################################################ -# Preamble - -cmake_minimum_required(VERSION 3.21) -set(CMAKE_USER_MAKE_RULES_OVERRIDE "cmake/SetDefaults.cmake") - -project( - musica - VERSION 0.3.0 - LANGUAGES Fortran CXX C -) - -set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) -set(CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH};${PROJECT_SOURCE_DIR}/cmake") - -if(NOT CMAKE_BUILD_TYPE) - set(CMAKE_BUILD_TYPE "Release" CACHE STRING - "Choose the type of build, options are: Debug Release RelWithDebInfo MinSizeRel." - FORCE) -endif(NOT CMAKE_BUILD_TYPE) - -message (STATUS "CMake build configuration for musica(${CMAKE_BUILD_TYPE}) ${PROJECT_VERSION}") - -include(musica_util) -checkout_submodules() - -################################################################################ -# Projet wide setup options -include(CMakeDependentOption) - -option( ENABLE_TESTS "Builds tests that ensures each enabled MUSICA component can be used" ON ) - -option( ENABLE_TUVX "Builds TUV-x, a photolysis calculator library" ON ) -option( ENABLE_MICM "Adds MICM, a model independent chemical mechanism solver" ON ) - -option( ENABLE_MPI "Enable MPI parallel support" OFF) -option( ENABLE_OPENMP "Enable OpemMP support" OFF ) - -option( CREATE_ENVIRONMENT_MODULE "Creates an Lmod environment module file that can be installed on the same machine this library is installed to." OFF ) - -if(CREATE_ENVIRONMENT_MODULE) - set(INSTALL_MODULE_FILE_PATH "" CACHE STRING "This is the path of the modulefiles location that the Lmod files should be installed to.") -endif() - -# Set up include and lib directories -set( MUSICA_MOD_DIR "${PROJECT_BINARY_DIR}/include" ) -set( MUSICA_LIB_DIR "${PROJECT_BINARY_DIR}/libs" ) - -include(GNUInstallDirs) -set(INSTALL_PREFIX "musica-${PROJECT_VERSION}") -set(INSTALL_MOD_DIR "${INSTALL_PREFIX}/${CMAKE_INSTALL_INCLUDEDIR}") - -# MPI -if(ENABLE_MPI) - add_definitions(-DMUSICA_USE_MPI) -endif() - -# OpenMP -if(ENABLE_OPENMP) - find_package(OpenMP) - if(OpenMP_Fortran_FOUND) - message(STATUS "Compiling with OpenMP support") - add_definitions(-DMUSICA_USE_OPENMP) - else() - message(FATAL_ERROR "OpenMP package not found") - endif() -endif() - -# Add flags for various compilers -if(${CMAKE_Fortran_COMPILER_ID} MATCHES "Intel") - add_definitions(-DMUSICA_USING_INTEL) -elseif(${CMAKE_Fortran_COMPILER_ID} MATCHES "GNU") - add_definitions(-DMUSICA_USING_GNU) -elseif(${CMAKE_Fortran_COMPILER_ID} MATCHES "PGI") - add_definitions(-DMUSICA_USING_PGI) -endif() - -################################################################################ -# Dependencies - -include(cmake/dependencies.cmake) - -############################################################################## -# MUSICA targets - -#################### -# MUSICA -add_library(musica STATIC) -add_library(musica::musica ALIAS musica) - -set_target_properties(musica PROPERTIES - ARCHIVE_OUTPUT_DIRECTORY ${MUSICA_LIB_DIR} - Fortran_MODULE_DIRECTORY ${MUSICA_MOD_DIR} - VERSION ${PROJECT_VERSION} - SOVERSION ${PROJECT_VERSION_MAJOR} -) - -target_link_libraries(musica - PUBLIC - PkgConfig::netcdff - ${JSON_LIB} -) - -target_include_directories(musica - PUBLIC - $ - $ -) - -target_include_directories(musica - PUBLIC - $ - $ -) - -#################### -# MUSICA - fortran -add_library(musica-fortran STATIC) -add_library(musica::musica-fortran ALIAS musica-fortran) - -# We might want these to be new cmake variables -set_target_properties(musica-fortran PROPERTIES - ARCHIVE_OUTPUT_DIRECTORY ${MUSICA_LIB_DIR} - Fortran_MODULE_DIRECTORY ${MUSICA_MOD_DIR} -) - -# We might not need these -target_include_directories(musica-fortran - PUBLIC - $ - $ -) - -# Add source directory after adding the library from sources -add_subdirectory(src) - -#################### -# MUSICA-core -add_library(musicacore_object) -add_library(musica::musicacore ALIAS musicacore_object) -set(ENABLE_UTIL_ONLY ON) -add_subdirectory(lib/musica-core/src) - -set_target_properties(musicacore_object PROPERTIES - ARCHIVE_OUTPUT_DIRECTORY ${MUSICA_LIB_DIR} - Fortran_MODULE_DIRECTORY ${MUSICA_MOD_DIR} -) - -target_include_directories(musicacore_object - PUBLIC - $ - $ -) - -target_link_libraries(musicacore_object - PUBLIC - PkgConfig::netcdff -) - -# add the sources to musica -target_sources(musica - PRIVATE - $ -) - -#################### -# TUV-x -if (ENABLE_TUVX) - add_definitions(-DMUSICA_USE_TUVX) - - set(TUVX_MOD_DIR ${MUSICA_MOD_DIR}) - set(TUVX_LIB_DIR ${MUSICA_LIB_DIR}) - add_subdirectory(lib/tuv-x/src) - - set_target_properties(tuvx_object PROPERTIES - ARCHIVE_OUTPUT_DIRECTORY ${MUSICA_LIB_DIR} - Fortran_MODULE_DIRECTORY ${MUSICA_MOD_DIR} - ) - - target_include_directories(tuvx_object - PUBLIC - $ - $ - ) - - target_link_libraries(tuvx_object - PUBLIC - musicacore_object - ) - - # add the sources to musica - target_sources(musica - PRIVATE - $ - ) -endif() - -#################### -# MICM -if (ENABLE_MICM) - add_definitions(-DMUSICA_USE_MICM) - target_compile_features(musica PUBLIC cxx_std_20) - - target_include_directories(musica - PUBLIC - $ - $ - ) - - install( - DIRECTORY - ${PROJECT_SOURCE_DIR}/lib/micm/include/micm - DESTINATION - ${INSTALL_MOD_DIR} - ) -endif() - -################################################################################ -# Tests - -# only include packaging if we are the top level project being built -if(PROJECT_IS_TOP_LEVEL AND ENABLE_TESTS) - enable_testing() - add_subdirectory(test) -endif() - -################################################################################ -# Packaging - -# only include packaging if we are the top level project being built -if(PROJECT_IS_TOP_LEVEL) - add_subdirectory(packaging) -endif() \ No newline at end of file +# ################################################################################ +# # Preamble + +# cmake_minimum_required(VERSION 3.21) +# set(CMAKE_USER_MAKE_RULES_OVERRIDE "cmake/SetDefaults.cmake") + +# project( +# musica +# VERSION 0.3.0 +# LANGUAGES Fortran CXX C +# ) + +# set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) +# set(CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH};${PROJECT_SOURCE_DIR}/cmake") + +# if(NOT CMAKE_BUILD_TYPE) +# set(CMAKE_BUILD_TYPE "Release" CACHE STRING +# "Choose the type of build, options are: Debug Release RelWithDebInfo MinSizeRel." +# FORCE) +# endif(NOT CMAKE_BUILD_TYPE) + +# message ( STATUS "CMake build configuration for musica(${CMAKE_BUILD_TYPE}) ${PROJECT_VERSION}" ) + +# include(musica_util) +# checkout_submodules() + +# ################################################################################ +# # Projet wide setup options +# include(CMakeDependentOption) + +# option( ENABLE_TESTS "Builds tests that ensures each enabled MUSICA component can be used" OFF) + +# option( ENABLE_TUVX "Builds TUV-x, a photolysis calculator library" OFF ) +# option( ENABLE_MICM "Adds MICM, a model independent chemical mechanism solver" ON ) + +# option( ENABLE_CCPP "Builds the CCPP library" OFF ) + +# option( ENABLE_MPI "Enable MPI parallel support" OFF) +# option( ENABLE_OPENMP "Enable OpemMP support" OFF ) + +# option( CREATE_ENVIRONMENT_MODULE "Creates an Lmod environment module file that can be installed on the same machine this library is installed to." OFF ) + +# if(CREATE_ENVIRONMENT_MODULE) +# set(INSTALL_MODULE_FILE_PATH "" CACHE STRING "This is the path of the modulefiles location that the Lmod files should be installed to.") +# endif() + +# # Set up include and lib directories +# set( MUSICA_MOD_DIR "${PROJECT_BINARY_DIR}/include" ) +# set( MUSICA_LIB_DIR "${PROJECT_BINARY_DIR}/libs" ) + +# include(GNUInstallDirs) +# set(INSTALL_PREFIX "musica-${PROJECT_VERSION}") +# set(INSTALL_MOD_DIR "${INSTALL_PREFIX}/${CMAKE_INSTALL_INCLUDEDIR}") + +# # MPI +# if(ENABLE_MPI) +# add_definitions(-DMUSICA_USE_MPI) +# endif() + +# # OpenMP +# if(ENABLE_OPENMP) +# find_package(OpenMP) +# if(OpenMP_Fortran_FOUND) +# message(STATUS "Compiling with OpenMP support") +# add_definitions(-DMUSICA_USE_OPENMP) +# else() +# message(FATAL_ERROR "OpenMP package not found") +# endif() +# endif() + +# # Add flags for various compilers +# if(${CMAKE_Fortran_COMPILER_ID} MATCHES "Intel") +# add_definitions(-DMUSICA_USING_INTEL) +# elseif(${CMAKE_Fortran_COMPILER_ID} MATCHES "GNU") +# add_definitions(-DMUSICA_USING_GNU) +# elseif(${CMAKE_Fortran_COMPILER_ID} MATCHES "PGI") +# add_definitions(-DMUSICA_USING_PGI) +# endif() + +# ################################################################################ +# # Dependencies + +# include(cmake/dependencies.cmake) + +# ############################################################################## +# # MUSICA targets + +# #################### +# # MUSICA +# add_library(musica STATIC) +# add_library(musica::musica ALIAS musica) + +# set_target_properties(musica PROPERTIES +# ARCHIVE_OUTPUT_DIRECTORY ${MUSICA_LIB_DIR} +# Fortran_MODULE_DIRECTORY ${MUSICA_MOD_DIR} +# VERSION ${PROJECT_VERSION} +# SOVERSION ${PROJECT_VERSION_MAJOR} +# ) + +# target_link_libraries(musica +# PUBLIC +# PkgConfig::netcdff +# ${JSON_LIB} +# ) + +# target_include_directories(musica +# PUBLIC +# $ +# $ +# ) + +# target_include_directories(musica +# PUBLIC +# $ +# $ +# ) + +# add_subdirectory(src) + +# #################### +# # MUSICA-core +# add_library(musicacore_object) +# add_library(musica::musicacore ALIAS musicacore_object) +# set(ENABLE_UTIL_ONLY ON) +# add_subdirectory(lib/musica-core/src) + +# set_target_properties(musicacore_object PROPERTIES +# ARCHIVE_OUTPUT_DIRECTORY ${MUSICA_LIB_DIR} +# Fortran_MODULE_DIRECTORY ${MUSICA_MOD_DIR} +# ) + +# target_include_directories(musicacore_object +# PUBLIC +# $ +# $ +# ) + +# target_link_libraries(musicacore_object +# PUBLIC +# PkgConfig::netcdff +# ) + +# # add the sources to musica +# target_sources(musica +# PRIVATE +# $ +# ) + +# #################### +# # TUV-x +# if (ENABLE_TUVX) +# add_definitions(-DMUSICA_USE_TUVX) + +# set(TUVX_MOD_DIR ${MUSICA_MOD_DIR}) +# set(TUVX_LIB_DIR ${MUSICA_LIB_DIR}) +# add_subdirectory(lib/tuv-x/src) + +# set_target_properties(tuvx_object PROPERTIES +# ARCHIVE_OUTPUT_DIRECTORY ${MUSICA_LIB_DIR} +# Fortran_MODULE_DIRECTORY ${MUSICA_MOD_DIR} +# ) + +# target_include_directories(tuvx_object +# PUBLIC +# $ +# $ +# ) + +# target_link_libraries(tuvx_object +# PUBLIC +# musicacore_object +# ) + +# # add the sources to musica +# target_sources(musica +# PRIVATE +# $ +# ) +# endif() + +# #################### +# # MICM +# if (ENABLE_MICM) +# add_definitions(-DMUSICA_USE_MICM) +# target_compile_features(musica PUBLIC cxx_std_20) + +# target_include_directories(musica +# PUBLIC +# $ +# $ +# ) + +# install( +# DIRECTORY +# ${PROJECT_SOURCE_DIR}/lib/micm/include/micm +# DESTINATION +# ${INSTALL_MOD_DIR} +# ) +# endif() + +# #################### +# # CCPP + +# if(ENABLE_CCPP) +# add_subdirectory(ccpp) +# endif() + + +# ################################################################################ +# # Tests + +# # only include packaging if we are the top level project being built +# if(PROJECT_IS_TOP_LEVEL AND ENABLE_TESTS) +# enable_testing() +# add_subdirectory(test) +# endif() + +# ################################################################################ +# # Packaging + +# # only include packaging if we are the top level project being built +# if(PROJECT_IS_TOP_LEVEL) +# add_subdirectory(packaging) +# endif() \ No newline at end of file From 146078c31804455b4e74164d12388e3f2b03de29 Mon Sep 17 00:00:00 2001 From: Jiwon Gim Date: Mon, 7 Aug 2023 14:45:28 -0600 Subject: [PATCH 31/59] modify test yml --- .github/workflows/test.yml | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index c7bb7111..4c6b0264 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -1,6 +1,14 @@ name: build -on: [push, pull_request] +# on: [push, pull_request] # TODO: jiwon 8/7 this doesn't work for the feature branchs +on: + push: + branches: + - '*' + - '!main' + pull_request: + branches: + - 'main' jobs: build_test_connections: From a1e3d758217eaeddb36b05be7e68a917d5e96d39 Mon Sep 17 00:00:00 2001 From: Jiwon Gim Date: Mon, 7 Aug 2023 15:01:54 -0600 Subject: [PATCH 32/59] add tuvx --- .github/workflows/test.yml | 5 ++--- musica/CMakeLists.txt | 2 +- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 4c6b0264..facfd488 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -1,14 +1,13 @@ name: build -# on: [push, pull_request] # TODO: jiwon 8/7 this doesn't work for the feature branchs +# on: [push, pull_request] # TODO: jiwon 8/7 this doesn't work for the feature branches on: push: branches: - '*' - - '!main' pull_request: branches: - - 'main' + - '*' jobs: build_test_connections: diff --git a/musica/CMakeLists.txt b/musica/CMakeLists.txt index 728a9dfc..d5d84523 100644 --- a/musica/CMakeLists.txt +++ b/musica/CMakeLists.txt @@ -32,7 +32,7 @@ include(CMakeDependentOption) option( ENABLE_TESTS "Builds tests that ensures each enabled MUSICA component can be used" ON ) -option( ENABLE_TUVX "Builds TUV-x, a photolysis calculator library" OFF ) +option( ENABLE_TUVX "Builds TUV-x, a photolysis calculator library" ON ) option( ENABLE_MICM "Adds MICM, a model independent chemical mechanism solver" ON ) option( ENABLE_MPI "Enable MPI parallel support" OFF) From e745ba2c6da8bbb464878da6ced0752366796c4e Mon Sep 17 00:00:00 2001 From: Jiwon Gim Date: Mon, 7 Aug 2023 15:18:36 -0600 Subject: [PATCH 33/59] test yml --- .github/workflows/test.yml | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index facfd488..c7bb7111 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -1,13 +1,6 @@ name: build -# on: [push, pull_request] # TODO: jiwon 8/7 this doesn't work for the feature branches -on: - push: - branches: - - '*' - pull_request: - branches: - - '*' +on: [push, pull_request] jobs: build_test_connections: From 95374f056387f663660b764638faec8f98a0dbbd Mon Sep 17 00:00:00 2001 From: Jiwon Gim Date: Wed, 9 Aug 2023 17:41:09 -0600 Subject: [PATCH 34/59] move cmake file to the top level --- {musica/cmake => cmake}/SetDefaults.cmake | 0 {musica/cmake => cmake}/cmake_uninstall.cmake.in | 0 {musica/cmake => cmake}/dependencies.cmake | 0 {musica/cmake => cmake}/musicaConfig.cmake.in | 0 {musica/cmake => cmake}/musica_util.cmake | 0 {musica/cmake => cmake}/test_util.cmake | 0 musica/CMakeLists.txt | 14 +++++++------- 7 files changed, 7 insertions(+), 7 deletions(-) rename {musica/cmake => cmake}/SetDefaults.cmake (100%) rename {musica/cmake => cmake}/cmake_uninstall.cmake.in (100%) rename {musica/cmake => cmake}/dependencies.cmake (100%) rename {musica/cmake => cmake}/musicaConfig.cmake.in (100%) rename {musica/cmake => cmake}/musica_util.cmake (100%) rename {musica/cmake => cmake}/test_util.cmake (100%) diff --git a/musica/cmake/SetDefaults.cmake b/cmake/SetDefaults.cmake similarity index 100% rename from musica/cmake/SetDefaults.cmake rename to cmake/SetDefaults.cmake diff --git a/musica/cmake/cmake_uninstall.cmake.in b/cmake/cmake_uninstall.cmake.in similarity index 100% rename from musica/cmake/cmake_uninstall.cmake.in rename to cmake/cmake_uninstall.cmake.in diff --git a/musica/cmake/dependencies.cmake b/cmake/dependencies.cmake similarity index 100% rename from musica/cmake/dependencies.cmake rename to cmake/dependencies.cmake diff --git a/musica/cmake/musicaConfig.cmake.in b/cmake/musicaConfig.cmake.in similarity index 100% rename from musica/cmake/musicaConfig.cmake.in rename to cmake/musicaConfig.cmake.in diff --git a/musica/cmake/musica_util.cmake b/cmake/musica_util.cmake similarity index 100% rename from musica/cmake/musica_util.cmake rename to cmake/musica_util.cmake diff --git a/musica/cmake/test_util.cmake b/cmake/test_util.cmake similarity index 100% rename from musica/cmake/test_util.cmake rename to cmake/test_util.cmake diff --git a/musica/CMakeLists.txt b/musica/CMakeLists.txt index d5d84523..3b682e91 100644 --- a/musica/CMakeLists.txt +++ b/musica/CMakeLists.txt @@ -2,7 +2,6 @@ # Preamble cmake_minimum_required(VERSION 3.21) -set(CMAKE_USER_MAKE_RULES_OVERRIDE "cmake/SetDefaults.cmake") project( musica @@ -10,8 +9,12 @@ project( LANGUAGES Fortran CXX C ) +# Set parent directory to get submodules and set cmake module path +cmake_path(GET PROJECT_SOURCE_DIR PARENT_PATH PARENT_DIR) + +set(CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH};${PARENT_DIR}/cmake") +set(CMAKE_USER_MAKE_RULES_OVERRIDE "${CMAKE_MODULE_PATH}/SetDefaults.cmake") set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) -set(CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH};${PROJECT_SOURCE_DIR}/cmake") if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE "Release" CACHE STRING @@ -48,9 +51,6 @@ endif() set( MUSICA_MOD_DIR "${PROJECT_BINARY_DIR}/include" ) set( MUSICA_LIB_DIR "${PROJECT_BINARY_DIR}/libs" ) -# Set parent directory to get submodules -cmake_path(GET PROJECT_SOURCE_DIR PARENT_PATH PARENT_DIR) - include(GNUInstallDirs) set(INSTALL_PREFIX "musica-${PROJECT_VERSION}") set(INSTALL_MOD_DIR "${INSTALL_PREFIX}/${CMAKE_INSTALL_INCLUDEDIR}") @@ -83,7 +83,7 @@ endif() ################################################################################ # Dependencies -include(cmake/dependencies.cmake) +include(dependencies) ############################################################################## # MUSICA targets @@ -210,7 +210,7 @@ endif() # Tests # only include packaging if we are the top level project being built -if(PROJECT_IS_TOP_LEVEL AND ENABLE_TESTS) +if(ENABLE_TESTS) enable_testing() add_subdirectory(test) endif() From 9e76ceafa15b403c4076feed767898a6be31dfdf Mon Sep 17 00:00:00 2001 From: Jiwon Gim Date: Wed, 9 Aug 2023 17:45:24 -0600 Subject: [PATCH 35/59] add cmake at the top level --- CMakeLists.txt | 233 ++-------------------------------- musica-fortran/CMakeLists.txt | 18 +-- 2 files changed, 17 insertions(+), 234 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 02f2323c..50265a2e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,224 +1,19 @@ -# ################################################################################ -# # Preamble +cmake_minimum_required(VERSION 3.21) -# cmake_minimum_required(VERSION 3.21) -# set(CMAKE_USER_MAKE_RULES_OVERRIDE "cmake/SetDefaults.cmake") +# TODO: jiwon 8/9 - how to name this project? +project(musica_build_options) -# project( -# musica -# VERSION 0.3.0 -# LANGUAGES Fortran CXX C -# ) +# Library options to build +option(USE_MUSICA "Use MUSICA" OFF) +message(STATUS "Building MUSICA sources into a library : ${USE_MUSICA}") -# set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) -# set(CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH};${PROJECT_SOURCE_DIR}/cmake") +option(USE_MUSICA_FORTRAN "Use MUSICA Fortran interface" OFF) +message(STATUS "Building MUSICA-Fortran sources into a library : ${USE_MUSICA_FORTRAN}") -# if(NOT CMAKE_BUILD_TYPE) -# set(CMAKE_BUILD_TYPE "Release" CACHE STRING -# "Choose the type of build, options are: Debug Release RelWithDebInfo MinSizeRel." -# FORCE) -# endif(NOT CMAKE_BUILD_TYPE) +if(USE_MUSICA) + add_subdirectory(musica) +endif() -# message ( STATUS "CMake build configuration for musica(${CMAKE_BUILD_TYPE}) ${PROJECT_VERSION}" ) - -# include(musica_util) -# checkout_submodules() - -# ################################################################################ -# # Projet wide setup options -# include(CMakeDependentOption) - -# option( ENABLE_TESTS "Builds tests that ensures each enabled MUSICA component can be used" OFF) - -# option( ENABLE_TUVX "Builds TUV-x, a photolysis calculator library" OFF ) -# option( ENABLE_MICM "Adds MICM, a model independent chemical mechanism solver" ON ) - -# option( ENABLE_CCPP "Builds the CCPP library" OFF ) - -# option( ENABLE_MPI "Enable MPI parallel support" OFF) -# option( ENABLE_OPENMP "Enable OpemMP support" OFF ) - -# option( CREATE_ENVIRONMENT_MODULE "Creates an Lmod environment module file that can be installed on the same machine this library is installed to." OFF ) - -# if(CREATE_ENVIRONMENT_MODULE) -# set(INSTALL_MODULE_FILE_PATH "" CACHE STRING "This is the path of the modulefiles location that the Lmod files should be installed to.") -# endif() - -# # Set up include and lib directories -# set( MUSICA_MOD_DIR "${PROJECT_BINARY_DIR}/include" ) -# set( MUSICA_LIB_DIR "${PROJECT_BINARY_DIR}/libs" ) - -# include(GNUInstallDirs) -# set(INSTALL_PREFIX "musica-${PROJECT_VERSION}") -# set(INSTALL_MOD_DIR "${INSTALL_PREFIX}/${CMAKE_INSTALL_INCLUDEDIR}") - -# # MPI -# if(ENABLE_MPI) -# add_definitions(-DMUSICA_USE_MPI) -# endif() - -# # OpenMP -# if(ENABLE_OPENMP) -# find_package(OpenMP) -# if(OpenMP_Fortran_FOUND) -# message(STATUS "Compiling with OpenMP support") -# add_definitions(-DMUSICA_USE_OPENMP) -# else() -# message(FATAL_ERROR "OpenMP package not found") -# endif() -# endif() - -# # Add flags for various compilers -# if(${CMAKE_Fortran_COMPILER_ID} MATCHES "Intel") -# add_definitions(-DMUSICA_USING_INTEL) -# elseif(${CMAKE_Fortran_COMPILER_ID} MATCHES "GNU") -# add_definitions(-DMUSICA_USING_GNU) -# elseif(${CMAKE_Fortran_COMPILER_ID} MATCHES "PGI") -# add_definitions(-DMUSICA_USING_PGI) -# endif() - -# ################################################################################ -# # Dependencies - -# include(cmake/dependencies.cmake) - -# ############################################################################## -# # MUSICA targets - -# #################### -# # MUSICA -# add_library(musica STATIC) -# add_library(musica::musica ALIAS musica) - -# set_target_properties(musica PROPERTIES -# ARCHIVE_OUTPUT_DIRECTORY ${MUSICA_LIB_DIR} -# Fortran_MODULE_DIRECTORY ${MUSICA_MOD_DIR} -# VERSION ${PROJECT_VERSION} -# SOVERSION ${PROJECT_VERSION_MAJOR} -# ) - -# target_link_libraries(musica -# PUBLIC -# PkgConfig::netcdff -# ${JSON_LIB} -# ) - -# target_include_directories(musica -# PUBLIC -# $ -# $ -# ) - -# target_include_directories(musica -# PUBLIC -# $ -# $ -# ) - -# add_subdirectory(src) - -# #################### -# # MUSICA-core -# add_library(musicacore_object) -# add_library(musica::musicacore ALIAS musicacore_object) -# set(ENABLE_UTIL_ONLY ON) -# add_subdirectory(lib/musica-core/src) - -# set_target_properties(musicacore_object PROPERTIES -# ARCHIVE_OUTPUT_DIRECTORY ${MUSICA_LIB_DIR} -# Fortran_MODULE_DIRECTORY ${MUSICA_MOD_DIR} -# ) - -# target_include_directories(musicacore_object -# PUBLIC -# $ -# $ -# ) - -# target_link_libraries(musicacore_object -# PUBLIC -# PkgConfig::netcdff -# ) - -# # add the sources to musica -# target_sources(musica -# PRIVATE -# $ -# ) - -# #################### -# # TUV-x -# if (ENABLE_TUVX) -# add_definitions(-DMUSICA_USE_TUVX) - -# set(TUVX_MOD_DIR ${MUSICA_MOD_DIR}) -# set(TUVX_LIB_DIR ${MUSICA_LIB_DIR}) -# add_subdirectory(lib/tuv-x/src) - -# set_target_properties(tuvx_object PROPERTIES -# ARCHIVE_OUTPUT_DIRECTORY ${MUSICA_LIB_DIR} -# Fortran_MODULE_DIRECTORY ${MUSICA_MOD_DIR} -# ) - -# target_include_directories(tuvx_object -# PUBLIC -# $ -# $ -# ) - -# target_link_libraries(tuvx_object -# PUBLIC -# musicacore_object -# ) - -# # add the sources to musica -# target_sources(musica -# PRIVATE -# $ -# ) -# endif() - -# #################### -# # MICM -# if (ENABLE_MICM) -# add_definitions(-DMUSICA_USE_MICM) -# target_compile_features(musica PUBLIC cxx_std_20) - -# target_include_directories(musica -# PUBLIC -# $ -# $ -# ) - -# install( -# DIRECTORY -# ${PROJECT_SOURCE_DIR}/lib/micm/include/micm -# DESTINATION -# ${INSTALL_MOD_DIR} -# ) -# endif() - -# #################### -# # CCPP - -# if(ENABLE_CCPP) -# add_subdirectory(ccpp) -# endif() - - -# ################################################################################ -# # Tests - -# # only include packaging if we are the top level project being built -# if(PROJECT_IS_TOP_LEVEL AND ENABLE_TESTS) -# enable_testing() -# add_subdirectory(test) -# endif() - -# ################################################################################ -# # Packaging - -# # only include packaging if we are the top level project being built -# if(PROJECT_IS_TOP_LEVEL) -# add_subdirectory(packaging) -# endif() \ No newline at end of file +if(USE_MUSICA_FORTRAN) + add_subdirectory(musica-fortran) +endif() \ No newline at end of file diff --git a/musica-fortran/CMakeLists.txt b/musica-fortran/CMakeLists.txt index 31258207..182a9880 100644 --- a/musica-fortran/CMakeLists.txt +++ b/musica-fortran/CMakeLists.txt @@ -10,8 +10,8 @@ add_library(musica-fortran STATIC) add_library(musica::musica-fortran ALIAS musica-fortran) # Set up include and lib directories -set( MUSICA_FORTRAN_MOD_DIR "${PROJECT_BINARY_DIR}/include" ) -set( MUSICA_FORTRAN_LIB_DIR "${PROJECT_BINARY_DIR}/libs" ) +set(MUSICA_FORTRAN_MOD_DIR "${PROJECT_BINARY_DIR}/include") +set(MUSICA_FORTRAN_LIB_DIR "${PROJECT_BINARY_DIR}/libs") set_target_properties(musica-fortran PROPERTIES @@ -22,21 +22,9 @@ PROPERTIES find_package(PkgConfig REQUIRED) pkg_check_modules(netcdff IMPORTED_TARGET REQUIRED netcdf-fortran) -# TODO: jiwon -# 1. Find pkg for musica +# Find pkg for musica find_package(musica 0.3.0 REQUIRED) -# TODO: jiwon -# 2. Use FetchContent to get musica -# include(FetchContent) - -# FetchContent_Declare(musica-fortran -# GIT_REPOSITORY https://github.com/NCAR/musica.git -# GIT_TAG 0cebe9368e42741999a33e5d5127334745860938 -# ) - -# FetchContent_MakeAvailable(musica-fortran) - target_link_libraries(musica-fortran PUBLIC musica::musica) From 910739adfda25ea34705755f13ae62ae775eae56 Mon Sep 17 00:00:00 2001 From: Jiwon Gim Date: Thu, 10 Aug 2023 17:41:37 -0600 Subject: [PATCH 36/59] fix bugs --- .dockerignore | 1 + CMakeLists.txt | 10 ++++++++-- Dockerfile | 9 +++++---- cmake/dependencies.cmake | 4 ++-- musica/CMakeLists.txt | 21 +++++---------------- 5 files changed, 21 insertions(+), 24 deletions(-) diff --git a/.dockerignore b/.dockerignore index 8a336a72..c4228aed 100644 --- a/.dockerignore +++ b/.dockerignore @@ -11,6 +11,7 @@ !musica !musica-fortran !docs +!cmake !lib !src !test diff --git a/CMakeLists.txt b/CMakeLists.txt index 50265a2e..11bc7ad9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,7 +1,13 @@ cmake_minimum_required(VERSION 3.21) -# TODO: jiwon 8/9 - how to name this project? -project(musica_build_options) +project( + musica + VERSION 0.3.0 + LANGUAGES Fortran CXX C +) + +set(CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH};${PROJECT_SOURCE_DIR}/cmake") +set(CMAKE_USER_MAKE_RULES_OVERRIDE "${CMAKE_MODULE_PATH}/SetDefaults.cmake") # Library options to build option(USE_MUSICA "Use MUSICA" OFF) diff --git a/Dockerfile b/Dockerfile index ccb091e9..319fdd28 100644 --- a/Dockerfile +++ b/Dockerfile @@ -30,10 +30,11 @@ COPY . musica # Build RUN cd musica \ - && cmake -S ./musica \ - -B ../build \ + && cmake -S . \ + -B build \ + -D USE_MUSICA=ON \ -D ENABLE_TESTS=ON \ - && cd ../build \ + && cd build \ && make install -j 8 -WORKDIR ./build \ No newline at end of file +WORKDIR musica/build diff --git a/cmake/dependencies.cmake b/cmake/dependencies.cmake index eb539e2e..fda10782 100644 --- a/cmake/dependencies.cmake +++ b/cmake/dependencies.cmake @@ -28,8 +28,8 @@ if(ENABLE_TESTS) include(FetchContent) FetchContent_Declare(googletest GIT_REPOSITORY https://github.com/google/googletest.git - GIT_TAG release-1.12.1 - FIND_PACKAGE_ARGS NAMES GTest + GIT_TAG be03d00f5f0cc3a997d1a368bee8a1fe93651f48 + # FIND_PACKAGE_ARGS NAMES GTest ) set(INSTALL_GTEST OFF CACHE BOOL "" FORCE) diff --git a/musica/CMakeLists.txt b/musica/CMakeLists.txt index 3b682e91..858b2844 100644 --- a/musica/CMakeLists.txt +++ b/musica/CMakeLists.txt @@ -1,18 +1,7 @@ ################################################################################ # Preamble -cmake_minimum_required(VERSION 3.21) - -project( - musica - VERSION 0.3.0 - LANGUAGES Fortran CXX C -) - -# Set parent directory to get submodules and set cmake module path -cmake_path(GET PROJECT_SOURCE_DIR PARENT_PATH PARENT_DIR) - -set(CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH};${PARENT_DIR}/cmake") +set(CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH};${PROJECT_SOURCE_DIR}/cmake") set(CMAKE_USER_MAKE_RULES_OVERRIDE "${CMAKE_MODULE_PATH}/SetDefaults.cmake") set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) @@ -128,7 +117,7 @@ add_library(musica::musicacore ALIAS musicacore_object) set(ENABLE_UTIL_ONLY ON) # In case of absolute source path, build directory needs to be explicitly provided -add_subdirectory(${PARENT_DIR}/lib/musica-core/src ${MUSICA_LIB_DIR}/musica-core/src) +add_subdirectory(${PROJECT_SOURCE_DIR}/lib/musica-core/src ${MUSICA_LIB_DIR}/musica-core/src) set_target_properties(musicacore_object PROPERTIES ARCHIVE_OUTPUT_DIRECTORY ${MUSICA_LIB_DIR} @@ -161,7 +150,7 @@ if (ENABLE_TUVX) set(TUVX_LIB_DIR ${MUSICA_LIB_DIR}) # In case of absolute source path, build directory needs to be explicitly provided - add_subdirectory(${PARENT_DIR}/lib/tuv-x/src ${MUSICA_LIB_DIR}/tuv-x/src) + add_subdirectory(${PROJECT_SOURCE_DIR}/lib/tuv-x/src ${MUSICA_LIB_DIR}/tuv-x/src) set_target_properties(tuvx_object PROPERTIES ARCHIVE_OUTPUT_DIRECTORY ${MUSICA_LIB_DIR} @@ -194,13 +183,13 @@ if (ENABLE_MICM) target_include_directories(musica PUBLIC - $ + $ $ ) install( DIRECTORY - ${PARENT_DIR}/lib/micm/include/micm + ${PROJECT_SOURCE_DIR}/lib/micm/include/micm DESTINATION ${INSTALL_MOD_DIR} ) From 8c77d996772ec5ea8022483807da75433a8e2782 Mon Sep 17 00:00:00 2001 From: Jiwon Gim Date: Fri, 11 Aug 2023 17:01:46 -0600 Subject: [PATCH 37/59] add changes --- Dockerfile.fortran | 166 +++++++++++++++++++++++---------------------- src/CMakeLists.txt | 16 ++--- 2 files changed, 93 insertions(+), 89 deletions(-) diff --git a/Dockerfile.fortran b/Dockerfile.fortran index 57f8239c..838f1fc6 100644 --- a/Dockerfile.fortran +++ b/Dockerfile.fortran @@ -1,23 +1,24 @@ -# on macOS this image requires rosetta 2 support for virtualization -# the intel compilers do not support the arm architecture so you must build -# on an amd platform, or virtualize -# FROM --platform=linux/amd64 fedora:35 -FROM fedora:35 - -RUN dnf -y update \ - && dnf -y install \ - cmake \ - gcc-c++ \ - gcc-gfortran \ - # gdb \ - git \ - lcov \ - make \ - netcdf-fortran-devel \ - # wget \ - # glibc-devel \ - valgrind \ - && dnf clean all +# versions and sizes from here: https://hub.docker.com/r/intel/oneapi-hpckit/tags +FROM intel/oneapi-hpckit:latest + +RUN apt update \ + && apt -y install \ + cmake \ + cmake-curses-gui \ + curl \ + libcurl4-openssl-dev \ + libhdf5-dev \ + m4 \ + vim \ + zlib1g-dev \ + git \ + lcov \ + make \ + libnetcdff-dev \ + valgrind \ + gcc \ + gfortran \ + && apt clean # Install json-fortran RUN curl -LO https://github.com/jacobwilliams/json-fortran/archive/8.2.0.tar.gz \ @@ -28,82 +29,85 @@ RUN curl -LO https://github.com/jacobwilliams/json-fortran/archive/8.2.0.tar.gz && cmake -D SKIP_DOC_GEN:BOOL=TRUE .. \ && make install -# Set environment variables +# Set environment variables to install MUSICA ENV FC=gfortran +ENV FFLAGS="-I/usr/include/" ENV JSON_FORTRAN_HOME="/usr/local/jsonfortran-gnu-8.2.0" # Copy the musica core code COPY . musica -# Build -RUN cd musica/musica \ - && cmake -S. \ - -Bbuild \ - -D ENABLE_TESTS=ON \ - && cd build \ - && make install -j 8 - -# Build -RUN cd musica/musica-fortran \ +# Build and install MUSICA first +RUN cd musica \ && cmake -S . \ - -Bbuild \ + -B build \ + -D USE_MUSICA=ON \ -D ENABLE_TESTS=ON \ && cd build \ - && make - -###### -###### -# TODO: jiwon 8/4 - We need these but it takes too long time to build so I will skip for now -###### -###### -# # Basekit -# RUN wget https://registrationcenter-download.intel.com/akdlm/IRC_NAS/7deeaac4-f605-4bcf-a81b-ea7531577c61/l_BaseKit_p_2023.1.0.46401_offline.sh -# RUN chmod +x l_BaseKit_p_2023.1.0.46401_offline.sh -# RUN ./l_BaseKit_p_2023.1.0.46401_offline.sh -a -s --eula accept - -# # HPC toolkit -# RUN wget https://registrationcenter-download.intel.com/akdlm/IRC_NAS/1ff1b38a-8218-4c53-9956-f0b264de35a4/l_HPCKit_p_2023.1.0.46346_offline.sh -# RUN chmod +x l_HPCKit_p_2023.1.0.46346_offline.sh -# RUN ./l_HPCKit_p_2023.1.0.46346_offline.sh -a -s --eula accept - -# # Set environment variables for intel compilers -# ENV ONEAPI_VERSION=2021.4d -# ENV ONEAPI_ROOT=/opt/intel/oneapi -# ENV PATH=$PATH:$ONEAPI_ROOT/compiler/latest/linux/bin -# ENV PATH=$PATH:$ONEAPI_ROOT/compiler/latest/linux/bin/intel64 -# ENV LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ONEAPI_ROOT/compiler/latest/linux/compiler/lib/intel64 - -# # Install json-fortran using GCC -# RUN curl -LO https://github.com/jacobwilliams/json-fortran/archive/8.2.0.tar.gz \ -# && tar -zxvf 8.2.0.tar.gz \ -# && cd json-fortran-8.2.0 \ -# && mkdir build \ + && make install -j 8 + +# Set environment variables to build MUSICA-FORTRAN +ENV CC=icx +ENV CXX=icpx +ENV FC=ifort +# ENV JSON_FORTRAN_HOME="/usr/local/jsonfortran-intel-8.2.0" + +# # Build MUSICA-fortran +# RUN cd musica \ +# && cmake -S . \ +# -B build-musica-fortran \ +# -D USE_MUSICA=OFF \ +# -D USE_MUSICA_FORTRAN=ON \ +# -D ENABLE_TESTS=OFF \ +# && cd build-musica-fortran \ +# && make + + +# # original +# RUN cd musica/musica \ +# && cmake -S . \ +# -Bbuild \ +# -D ENABLE_TESTS=ON \ # && cd build \ -# && FC=gfortran cmake -D SKIP_DOC_GEN:BOOL=TRUE .. \ -# && make install +# && make install -j 8 -# # Copy the musica library -# COPY . /musica/ +# Build +# RUN cd musica/musica-fortran \ +# && cmake -S . \ +# -B build \ +# # -D ENABLE_TESTS=ON \ +# && cd build \ +# && make -# ENV JSON_FORTRAN_HOME="/usr/local/jsonfortran-gnu-8.2.0" -# RUN mkdir -p /build/musica /build/ccpp-integration -# # Build musica with GCC -# RUN cd /build/musica \ -# && FC=gfortran CC=gcc CXX=g++ cmake \ +# # test +# RUN cd musica/musica \ +# && cmake -S . \ +# -Bbuild \ # -D ENABLE_TESTS=ON \ -# /musica \ -# && make install -j 8 - -# # Build musica::ccpp with ifort and link to musica::musica that was built with GCC -# RUN cd /build/ccpp-integration \ -# && FC=ifort cmake \ -# -DCMAKE_BUILD_TYPE=Debug \ -# /musica/test/ccpp/integration \ +# && cd build \ +# && make install -j 8 + +# # Build +# RUN cd musica \ +# && cmake -S . \ +# -Bbuild \ +# # -D ENABLE_TESTS=ON \ +# && cd build \ # && make -# WORKDIR /build/ccpp-integration -##### -##### \ No newline at end of file +# TEST - JIWON +# Build + +# RUN cd musica \ +# && cmake -S . \ +# -B build + # -D ENABLE_TESTS=ON + # && cd build + # && make install -j 8 + +# WORKDIR ./build + +## choose compiler other than gcc diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index f48d8a31..0133e4bb 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,11 +1,11 @@ # micm version -configure_file(version.c.in ${CMAKE_BINARY_DIR}/version.c @ONLY) +# configure_file(version.c.in ${CMAKE_BINARY_DIR}/version.c @ONLY) -target_sources(musica - PRIVATE - component_versions.c - ${CMAKE_BINARY_DIR}/version.c -) +# target_sources(musica +# PRIVATE +# component_versions.c +# ${CMAKE_BINARY_DIR}/version.c +# ) -add_subdirectory(cxx_interface) -add_subdirectory(fortran_interface) \ No newline at end of file +# add_subdirectory(cxx_interface) +# add_subdirectory(fortran_interface) \ No newline at end of file From 1cebf6bb6c504e42f0bc62542ff102cf802f314f Mon Sep 17 00:00:00 2001 From: Jiwon Gim Date: Mon, 14 Aug 2023 15:21:20 -0600 Subject: [PATCH 38/59] musica fortran with intel compilers --- .github/workflows/test.yml | 2 +- Dockerfile.fortran | 101 ++++++++++------------------- musica-fortran/CMakeLists.txt | 2 +- musica-fortran/test/CMakeLists.txt | 17 ++++- musica/CMakeLists.txt | 38 +++++------ src/CMakeLists.txt | 11 ---- 6 files changed, 67 insertions(+), 104 deletions(-) delete mode 100644 src/CMakeLists.txt diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index c7bb7111..c2454699 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -57,4 +57,4 @@ jobs: - name: build Docker image run: docker build -t musica-fortran -f Dockerfile.fortran . - name: run tests in container - run: docker run --name test-container -t musica-fortran bash -c 'cd musica/musica-fortran/build/test; ctest' + run: docker run --name test-container -t musica-fortran bash -c 'cd musica/build-musica-fortran/musica-fortran/test; ctest' diff --git a/Dockerfile.fortran b/Dockerfile.fortran index 838f1fc6..707d3bdf 100644 --- a/Dockerfile.fortran +++ b/Dockerfile.fortran @@ -20,7 +20,11 @@ RUN apt update \ gfortran \ && apt clean -# Install json-fortran +# Set environment variables to install MUSICA using gcc +ENV FC=gfortran +ENV FFLAGS="-I/usr/include/" + +# Install json-fortran for gnu version RUN curl -LO https://github.com/jacobwilliams/json-fortran/archive/8.2.0.tar.gz \ && tar -zxvf 8.2.0.tar.gz \ && cd json-fortran-8.2.0 \ @@ -29,15 +33,13 @@ RUN curl -LO https://github.com/jacobwilliams/json-fortran/archive/8.2.0.tar.gz && cmake -D SKIP_DOC_GEN:BOOL=TRUE .. \ && make install -# Set environment variables to install MUSICA -ENV FC=gfortran -ENV FFLAGS="-I/usr/include/" -ENV JSON_FORTRAN_HOME="/usr/local/jsonfortran-gnu-8.2.0" - -# Copy the musica core code +# Copy the musica code COPY . musica -# Build and install MUSICA first +# Set json-fortran variable to install MUSICA using gcc +ENV JSON_FORTRAN_HOME="/usr/local/jsonfortran-gnu-8.2.0" + +# Build and install MUSICA RUN cd musica \ && cmake -S . \ -B build \ @@ -46,68 +48,37 @@ RUN cd musica \ && cd build \ && make install -j 8 -# Set environment variables to build MUSICA-FORTRAN +# Set environment variables to build MUSICA-Fortran using intel compilers ENV CC=icx ENV CXX=icpx ENV FC=ifort -# ENV JSON_FORTRAN_HOME="/usr/local/jsonfortran-intel-8.2.0" - -# # Build MUSICA-fortran -# RUN cd musica \ -# && cmake -S . \ -# -B build-musica-fortran \ -# -D USE_MUSICA=OFF \ -# -D USE_MUSICA_FORTRAN=ON \ -# -D ENABLE_TESTS=OFF \ -# && cd build-musica-fortran \ -# && make - -# # original -# RUN cd musica/musica \ -# && cmake -S . \ -# -Bbuild \ -# -D ENABLE_TESTS=ON \ -# && cd build \ -# && make install -j 8 - -# Build -# RUN cd musica/musica-fortran \ -# && cmake -S . \ -# -B build \ -# # -D ENABLE_TESTS=ON \ -# && cd build \ -# && make - - - -# # test -# RUN cd musica/musica \ -# && cmake -S . \ -# -Bbuild \ -# -D ENABLE_TESTS=ON \ -# && cd build \ -# && make install -j 8 - -# # Build -# RUN cd musica \ -# && cmake -S . \ -# -Bbuild \ -# # -D ENABLE_TESTS=ON \ -# && cd build \ -# && make +# Install json-fortran for intel version +RUN cd json-fortran-8.2.0 \ + && mkdir build-intel \ + && cd build-intel \ + && cmake -D SKIP_DOC_GEN:BOOL=TRUE .. \ + && make install +# Set json-fortran variable to build MUSICA-Fortran using intel +ENV JSON_FORTRAN_HOME="/usr/local/jsonfortran-intel-8.2.0" -# TEST - JIWON -# Build +RUN cd musica \ + && cmake -S . \ + -B build-musica-fortran \ + -D USE_MUSICA=OFF \ + -D USE_MUSICA_FORTRAN=ON \ + && cd build-musica-fortran \ + && make + +## In progress +## +# ENV JSON_FORTRAN_HOME="/usr/local/jsonfortran-gnu-8.2.0" +# build muscia +# check install musica location +# export CC=icx && export CXX=icpx && export FC=ifort +# build json fortran with intel compiler +# mkdir build-intel && cd build-intel && cmake -D SKIP_DOC_GEN:BOL=TRUE .. && make install +# export JSON_FORTRAN_HOME="/usr/local/jsonfortran-intel-8.2.0" -# RUN cd musica \ -# && cmake -S . \ -# -B build - # -D ENABLE_TESTS=ON - # && cd build - # && make install -j 8 - # WORKDIR ./build - -## choose compiler other than gcc diff --git a/musica-fortran/CMakeLists.txt b/musica-fortran/CMakeLists.txt index 182a9880..f71cd0df 100644 --- a/musica-fortran/CMakeLists.txt +++ b/musica-fortran/CMakeLists.txt @@ -22,7 +22,7 @@ PROPERTIES find_package(PkgConfig REQUIRED) pkg_check_modules(netcdff IMPORTED_TARGET REQUIRED netcdf-fortran) -# Find pkg for musica +# Find MUSICA package find_package(musica 0.3.0 REQUIRED) target_link_libraries(musica-fortran diff --git a/musica-fortran/test/CMakeLists.txt b/musica-fortran/test/CMakeLists.txt index 75c9060a..01a96770 100644 --- a/musica-fortran/test/CMakeLists.txt +++ b/musica-fortran/test/CMakeLists.txt @@ -8,7 +8,14 @@ project( set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) -find_package(musica 0.3.0 REQUIRED) +include(FetchContent) + +FetchContent_Declare(musica + GIT_REPOSITORY https://github.com/NCAR/musica.git + GIT_TAG e745ba2c6da8bbb464878da6ced0752366796c4e ## todo: jiwon update this +) + +FetchContent_MakeAvailable(musica) ################################################################################ # Tests @@ -16,12 +23,16 @@ add_executable(test_musica_api test_musica_api.F90) target_link_libraries(test_musica_api PUBLIC - musica::musica musica::musica-fortran ) + +set_target_properties(test_musica_api +PROPERTIES +LINKER_LANGUAGE Fortran) + enable_testing() add_test( NAME test_musica_api COMMAND $ - ) \ No newline at end of file +) diff --git a/musica/CMakeLists.txt b/musica/CMakeLists.txt index 858b2844..9d7fba16 100644 --- a/musica/CMakeLists.txt +++ b/musica/CMakeLists.txt @@ -1,10 +1,12 @@ ################################################################################ # Preamble -set(CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH};${PROJECT_SOURCE_DIR}/cmake") -set(CMAKE_USER_MAKE_RULES_OVERRIDE "${CMAKE_MODULE_PATH}/SetDefaults.cmake") set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) +# Set up include and lib directories +set(MUSICA_MOD_DIR "${PROJECT_BINARY_DIR}/include") +set(MUSICA_LIB_DIR "${PROJECT_BINARY_DIR}/libs") + if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Choose the type of build, options are: Debug Release RelWithDebInfo MinSizeRel." @@ -22,24 +24,20 @@ checkout_submodules() # Projet wide setup options include(CMakeDependentOption) -option( ENABLE_TESTS "Builds tests that ensures each enabled MUSICA component can be used" ON ) +option(ENABLE_TESTS "Builds tests that ensures each enabled MUSICA component can be used" OFF) -option( ENABLE_TUVX "Builds TUV-x, a photolysis calculator library" ON ) -option( ENABLE_MICM "Adds MICM, a model independent chemical mechanism solver" ON ) +option(ENABLE_TUVX "Builds TUV-x, a photolysis calculator library" ON) +option(ENABLE_MICM "Adds MICM, a model independent chemical mechanism solver" ON) -option( ENABLE_MPI "Enable MPI parallel support" OFF) -option( ENABLE_OPENMP "Enable OpemMP support" OFF ) +option(ENABLE_MPI "Enable MPI parallel support" OFF) +option(ENABLE_OPENMP "Enable OpemMP support" OFF) -option( CREATE_ENVIRONMENT_MODULE "Creates an Lmod environment module file that can be installed on the same machine this library is installed to." OFF ) +option(CREATE_ENVIRONMENT_MODULE "Creates an Lmod environment module file that can be installed on the same machine this library is installed to." OFF) if(CREATE_ENVIRONMENT_MODULE) set(INSTALL_MODULE_FILE_PATH "" CACHE STRING "This is the path of the modulefiles location that the Lmod files should be installed to.") endif() -# Set up include and lib directories -set( MUSICA_MOD_DIR "${PROJECT_BINARY_DIR}/include" ) -set( MUSICA_LIB_DIR "${PROJECT_BINARY_DIR}/libs" ) - include(GNUInstallDirs) set(INSTALL_PREFIX "musica-${PROJECT_VERSION}") set(INSTALL_MOD_DIR "${INSTALL_PREFIX}/${CMAKE_INSTALL_INCLUDEDIR}") @@ -105,7 +103,7 @@ target_include_directories(musica target_include_directories(musica PUBLIC - $ + $ $ ) @@ -116,9 +114,6 @@ add_library(musica::musicacore ALIAS musicacore_object) set(ENABLE_UTIL_ONLY ON) -# In case of absolute source path, build directory needs to be explicitly provided -add_subdirectory(${PROJECT_SOURCE_DIR}/lib/musica-core/src ${MUSICA_LIB_DIR}/musica-core/src) - set_target_properties(musicacore_object PROPERTIES ARCHIVE_OUTPUT_DIRECTORY ${MUSICA_LIB_DIR} Fortran_MODULE_DIRECTORY ${MUSICA_MOD_DIR} @@ -136,11 +131,13 @@ target_link_libraries(musicacore_object ) # add the sources to musica -target_sources(musica +target_sources(musica PRIVATE $ ) +add_subdirectory(${PROJECT_SOURCE_DIR}/lib/musica-core/src ${MUSICA_LIB_DIR}/musica-core/src) + # #################### # TUV-x if (ENABLE_TUVX) @@ -149,7 +146,6 @@ if (ENABLE_TUVX) set(TUVX_MOD_DIR ${MUSICA_MOD_DIR}) set(TUVX_LIB_DIR ${MUSICA_LIB_DIR}) - # In case of absolute source path, build directory needs to be explicitly provided add_subdirectory(${PROJECT_SOURCE_DIR}/lib/tuv-x/src ${MUSICA_LIB_DIR}/tuv-x/src) set_target_properties(tuvx_object PROPERTIES @@ -206,8 +202,4 @@ endif() ################################################################################ # Packaging - -# only include packaging if we are the top level project being built -if(PROJECT_IS_TOP_LEVEL) - add_subdirectory(packaging) -endif() \ No newline at end of file +add_subdirectory(packaging) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt deleted file mode 100644 index 0133e4bb..00000000 --- a/src/CMakeLists.txt +++ /dev/null @@ -1,11 +0,0 @@ -# micm version -# configure_file(version.c.in ${CMAKE_BINARY_DIR}/version.c @ONLY) - -# target_sources(musica -# PRIVATE -# component_versions.c -# ${CMAKE_BINARY_DIR}/version.c -# ) - -# add_subdirectory(cxx_interface) -# add_subdirectory(fortran_interface) \ No newline at end of file From 0522ec9c6103bc11c24ff223f405ddd2a9e282db Mon Sep 17 00:00:00 2001 From: Jiwon Gim Date: Tue, 15 Aug 2023 13:18:54 -0600 Subject: [PATCH 39/59] move options to the top level --- CMakeLists.txt | 70 +++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 67 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 11bc7ad9..85135c26 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,20 +6,84 @@ project( LANGUAGES Fortran CXX C ) -set(CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH};${PROJECT_SOURCE_DIR}/cmake") +set(CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH};${CMAKE_CURRENT_LIST_DIR}/cmake") set(CMAKE_USER_MAKE_RULES_OVERRIDE "${CMAKE_MODULE_PATH}/SetDefaults.cmake") +include(CMakeDependentOption) + # Library options to build -option(USE_MUSICA "Use MUSICA" OFF) +option(USE_MUSICA "Use MUSICA" ON) message(STATUS "Building MUSICA sources into a library : ${USE_MUSICA}") option(USE_MUSICA_FORTRAN "Use MUSICA Fortran interface" OFF) message(STATUS "Building MUSICA-Fortran sources into a library : ${USE_MUSICA_FORTRAN}") +# Projet wide setup options +option(ENABLE_TESTS "Builds tests that ensures each enabled MUSICA component can be used" ON) +message(STATUS "Build tests for MUSICA : ${ENABLE_TESTS}") + +option(ENABLE_TUVX "Builds TUV-x, a photolysis calculator library" OFF) +message(STATUS "Build TUV-x : ${ENABLE_TUVX}") + +option(ENABLE_MICM "Adds MICM, a model independent chemical mechanism solver" ON) +message(STATUS "Build MICM : ${ENABLE_MICM}") + +option(ENABLE_MPI "Enable MPI parallel support" OFF) +message(STATUS "Enable MPI parallel support : ${ENABLE_MPI}") + +option(ENABLE_OPENMP "Enable OpemMP support" OFF) +message(STATUS "Enable OpemMP support : ${ENABLE_OPENMP}") + +option(CREATE_ENVIRONMENT_MODULE "Creates an Lmod environment module file that can be installed on the same machine this library is installed to." OFF) +message(STATUS "Creates an Lmod environment module : ${CREATE_ENVIRONMENT_MODULE}") + +if(CREATE_ENVIRONMENT_MODULE) + set(INSTALL_MODULE_FILE_PATH "" CACHE STRING "This is the path of the modulefiles location that the Lmod files should be installed to.") +endif() + +include(GNUInstallDirs) +set(INSTALL_PREFIX "musica-${PROJECT_VERSION}") +set(INSTALL_MOD_DIR "${INSTALL_PREFIX}/${CMAKE_INSTALL_INCLUDEDIR}") + +# MUSICA if(USE_MUSICA) add_subdirectory(musica) endif() +# MUSICA-Fortran if(USE_MUSICA_FORTRAN) add_subdirectory(musica-fortran) -endif() \ No newline at end of file +endif() + +# MPI +if(ENABLE_MPI) + add_definitions(-DMUSICA_USE_MPI) +endif() + +# OpenMP +if(ENABLE_OPENMP) + find_package(OpenMP) + if(OpenMP_Fortran_FOUND) + message(STATUS "Compiling with OpenMP support") + add_definitions(-DMUSICA_USE_OPENMP) + else() + message(FATAL_ERROR "OpenMP package not found") + endif() +endif() + +# Add flags for various compilers +if(${CMAKE_Fortran_COMPILER_ID} MATCHES "Intel") + add_definitions(-DMUSICA_USING_INTEL) +elseif(${CMAKE_Fortran_COMPILER_ID} MATCHES "GNU") + add_definitions(-DMUSICA_USING_GNU) +elseif(${CMAKE_Fortran_COMPILER_ID} MATCHES "PGI") + add_definitions(-DMUSICA_USING_PGI) +endif() + + +################################################################################ +# Tests +if(ENABLE_TESTS) + enable_testing() + add_subdirectory(musica/test) +endif() From 997279b61d880bc7de51d66a604db4eab1c33bb4 Mon Sep 17 00:00:00 2001 From: Jiwon Gim Date: Tue, 15 Aug 2023 13:40:14 -0600 Subject: [PATCH 40/59] cmake dependent options for musica --- CMakeLists.txt | 40 ++++++++++-------- cmake/dependencies.cmake | 1 - musica/CMakeLists.txt | 56 -------------------------- musica/test/connections/CMakeLists.txt | 7 +--- 4 files changed, 25 insertions(+), 79 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 85135c26..88162ac1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -9,6 +9,7 @@ project( set(CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH};${CMAKE_CURRENT_LIST_DIR}/cmake") set(CMAKE_USER_MAKE_RULES_OVERRIDE "${CMAKE_MODULE_PATH}/SetDefaults.cmake") +################################################################################ include(CMakeDependentOption) # Library options to build @@ -18,23 +19,30 @@ message(STATUS "Building MUSICA sources into a library : ${USE_MUSICA}") option(USE_MUSICA_FORTRAN "Use MUSICA Fortran interface" OFF) message(STATUS "Building MUSICA-Fortran sources into a library : ${USE_MUSICA_FORTRAN}") +################################################################################ # Projet wide setup options -option(ENABLE_TESTS "Builds tests that ensures each enabled MUSICA component can be used" ON) +cmake_dependent_option( + ENABLE_TESTS "Builds tests that ensures each enabled MUSICA component can be used" ON "USE_MUSICA" OFF) message(STATUS "Build tests for MUSICA : ${ENABLE_TESTS}") -option(ENABLE_TUVX "Builds TUV-x, a photolysis calculator library" OFF) +cmake_dependent_option( + ENABLE_TUVX "Builds TUV-x, a photolysis calculator library" OFF "USE_MUSICA" OFF) message(STATUS "Build TUV-x : ${ENABLE_TUVX}") -option(ENABLE_MICM "Adds MICM, a model independent chemical mechanism solver" ON) +cmake_dependent_option( + ENABLE_MICM "Adds MICM, a model independent chemical mechanism solver" ON "USE_MUSICA" OFF) message(STATUS "Build MICM : ${ENABLE_MICM}") -option(ENABLE_MPI "Enable MPI parallel support" OFF) +cmake_dependent_option( + ENABLE_MPI "Enable MPI parallel support" OFF "USE_MUSICA" OFF) message(STATUS "Enable MPI parallel support : ${ENABLE_MPI}") -option(ENABLE_OPENMP "Enable OpemMP support" OFF) +cmake_dependent_option( + ENABLE_OPENMP "Enable OpemMP support" OFF "USE_MUSICA" OFF) message(STATUS "Enable OpemMP support : ${ENABLE_OPENMP}") -option(CREATE_ENVIRONMENT_MODULE "Creates an Lmod environment module file that can be installed on the same machine this library is installed to." OFF) +cmake_dependent_option( + CREATE_ENVIRONMENT_MODULE "Creates an Lmod environment module file that can be installed on the same machine this library is installed to." OFF "USE_MUSICA" OFF) message(STATUS "Creates an Lmod environment module : ${CREATE_ENVIRONMENT_MODULE}") if(CREATE_ENVIRONMENT_MODULE) @@ -45,16 +53,6 @@ include(GNUInstallDirs) set(INSTALL_PREFIX "musica-${PROJECT_VERSION}") set(INSTALL_MOD_DIR "${INSTALL_PREFIX}/${CMAKE_INSTALL_INCLUDEDIR}") -# MUSICA -if(USE_MUSICA) - add_subdirectory(musica) -endif() - -# MUSICA-Fortran -if(USE_MUSICA_FORTRAN) - add_subdirectory(musica-fortran) -endif() - # MPI if(ENABLE_MPI) add_definitions(-DMUSICA_USE_MPI) @@ -80,6 +78,16 @@ elseif(${CMAKE_Fortran_COMPILER_ID} MATCHES "PGI") add_definitions(-DMUSICA_USING_PGI) endif() +################################################################################ +# MUSICA +if(USE_MUSICA) + add_subdirectory(musica) +endif() + +# MUSICA-Fortran +if(USE_MUSICA_FORTRAN) + add_subdirectory(musica-fortran) +endif() ################################################################################ # Tests diff --git a/cmake/dependencies.cmake b/cmake/dependencies.cmake index fda10782..684de281 100644 --- a/cmake/dependencies.cmake +++ b/cmake/dependencies.cmake @@ -29,7 +29,6 @@ if(ENABLE_TESTS) FetchContent_Declare(googletest GIT_REPOSITORY https://github.com/google/googletest.git GIT_TAG be03d00f5f0cc3a997d1a368bee8a1fe93651f48 - # FIND_PACKAGE_ARGS NAMES GTest ) set(INSTALL_GTEST OFF CACHE BOOL "" FORCE) diff --git a/musica/CMakeLists.txt b/musica/CMakeLists.txt index 9d7fba16..b9f62234 100644 --- a/musica/CMakeLists.txt +++ b/musica/CMakeLists.txt @@ -20,53 +20,6 @@ include(musica_util) # Add submodules checkout_submodules() -################################################################################ -# Projet wide setup options -include(CMakeDependentOption) - -option(ENABLE_TESTS "Builds tests that ensures each enabled MUSICA component can be used" OFF) - -option(ENABLE_TUVX "Builds TUV-x, a photolysis calculator library" ON) -option(ENABLE_MICM "Adds MICM, a model independent chemical mechanism solver" ON) - -option(ENABLE_MPI "Enable MPI parallel support" OFF) -option(ENABLE_OPENMP "Enable OpemMP support" OFF) - -option(CREATE_ENVIRONMENT_MODULE "Creates an Lmod environment module file that can be installed on the same machine this library is installed to." OFF) - -if(CREATE_ENVIRONMENT_MODULE) - set(INSTALL_MODULE_FILE_PATH "" CACHE STRING "This is the path of the modulefiles location that the Lmod files should be installed to.") -endif() - -include(GNUInstallDirs) -set(INSTALL_PREFIX "musica-${PROJECT_VERSION}") -set(INSTALL_MOD_DIR "${INSTALL_PREFIX}/${CMAKE_INSTALL_INCLUDEDIR}") - -# MPI -if(ENABLE_MPI) - add_definitions(-DMUSICA_USE_MPI) -endif() - -# OpenMP -if(ENABLE_OPENMP) - find_package(OpenMP) - if(OpenMP_Fortran_FOUND) - message(STATUS "Compiling with OpenMP support") - add_definitions(-DMUSICA_USE_OPENMP) - else() - message(FATAL_ERROR "OpenMP package not found") - endif() -endif() - -# Add flags for various compilers -if(${CMAKE_Fortran_COMPILER_ID} MATCHES "Intel") - add_definitions(-DMUSICA_USING_INTEL) -elseif(${CMAKE_Fortran_COMPILER_ID} MATCHES "GNU") - add_definitions(-DMUSICA_USING_GNU) -elseif(${CMAKE_Fortran_COMPILER_ID} MATCHES "PGI") - add_definitions(-DMUSICA_USING_PGI) -endif() - ################################################################################ # Dependencies @@ -191,15 +144,6 @@ if (ENABLE_MICM) ) endif() -################################################################################ -# Tests - -# only include packaging if we are the top level project being built -if(ENABLE_TESTS) - enable_testing() - add_subdirectory(test) -endif() - ################################################################################ # Packaging add_subdirectory(packaging) diff --git a/musica/test/connections/CMakeLists.txt b/musica/test/connections/CMakeLists.txt index 0e741fb7..50676246 100644 --- a/musica/test/connections/CMakeLists.txt +++ b/musica/test/connections/CMakeLists.txt @@ -1,12 +1,7 @@ -################################################################################ -# Test utilities - include(test_util) -################################################################################ -# Tests - create_standard_test(NAME connect_to_musica_core SOURCES musica_core.F90) + if (ENABLE_OPENMP) create_standard_test(NAME connect_to_musica_core_openmp SOURCES musica_core_openmp.F90) endif() From 5e26fef84a10c6425d7d9badb3bc9fef0880c89e Mon Sep 17 00:00:00 2001 From: Jiwon Gim Date: Tue, 15 Aug 2023 15:58:58 -0600 Subject: [PATCH 41/59] docker files --- .github/workflows/test.yml | 2 +- Dockerfile | 2 +- Dockerfile.fortran | 12 +----------- Dockerfile.mpi_openmp | 2 +- Dockerfile.openmp | 2 +- musica-fortran/CMakeLists.txt | 14 +++++++++++--- musica-fortran/test/CMakeLists.txt | 2 +- 7 files changed, 17 insertions(+), 19 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index c2454699..ca3c9bd6 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -57,4 +57,4 @@ jobs: - name: build Docker image run: docker build -t musica-fortran -f Dockerfile.fortran . - name: run tests in container - run: docker run --name test-container -t musica-fortran bash -c 'cd musica/build-musica-fortran/musica-fortran/test; ctest' + run: docker run --name test-container -t musica-fortran bash -c 'cd musica-fortran/test; ctest' diff --git a/Dockerfile b/Dockerfile index 319fdd28..709e5fe7 100644 --- a/Dockerfile +++ b/Dockerfile @@ -25,7 +25,7 @@ RUN curl -LO https://github.com/jacobwilliams/json-fortran/archive/8.2.0.tar.gz ENV FC=gfortran ENV JSON_FORTRAN_HOME="/usr/local/jsonfortran-gnu-8.2.0" -# Copy the musica core code +# Copy the musica code COPY . musica # Build diff --git a/Dockerfile.fortran b/Dockerfile.fortran index 707d3bdf..1d53724d 100644 --- a/Dockerfile.fortran +++ b/Dockerfile.fortran @@ -71,14 +71,4 @@ RUN cd musica \ && cd build-musica-fortran \ && make -## In progress -## -# ENV JSON_FORTRAN_HOME="/usr/local/jsonfortran-gnu-8.2.0" -# build muscia -# check install musica location -# export CC=icx && export CXX=icpx && export FC=ifort -# build json fortran with intel compiler -# mkdir build-intel && cd build-intel && cmake -D SKIP_DOC_GEN:BOL=TRUE .. && make install -# export JSON_FORTRAN_HOME="/usr/local/jsonfortran-intel-8.2.0" - -# WORKDIR ./build +WORKDIR musica/build-musica-fortran \ No newline at end of file diff --git a/Dockerfile.mpi_openmp b/Dockerfile.mpi_openmp index 861d60e2..0ff6a4d7 100644 --- a/Dockerfile.mpi_openmp +++ b/Dockerfile.mpi_openmp @@ -44,7 +44,7 @@ RUN sudo chown -R test_user.test_user musica # get a tag and build the model RUN cd musica \ - && cmake -S ./musica \ + && cmake -S . \ -B ../build \ -D CMAKE_BUILD_TYPE=debug \ -D ENABLE_MPI:BOOL=TRUE \ diff --git a/Dockerfile.openmp b/Dockerfile.openmp index 05765b32..ffec098c 100644 --- a/Dockerfile.openmp +++ b/Dockerfile.openmp @@ -44,7 +44,7 @@ RUN sudo chown -R test_user.test_user musica # get a tag and build the model RUN cd musica \ - && cmake -S ./musica \ + && cmake -S . \ -B ../build \ -D CMAKE_BUILD_TYPE=debug \ -D ENABLE_OPENMP:BOOL=TRUE \ diff --git a/musica-fortran/CMakeLists.txt b/musica-fortran/CMakeLists.txt index f71cd0df..0d74dfe8 100644 --- a/musica-fortran/CMakeLists.txt +++ b/musica-fortran/CMakeLists.txt @@ -6,13 +6,17 @@ project( LANGUAGES Fortran C CXX ) -add_library(musica-fortran STATIC) -add_library(musica::musica-fortran ALIAS musica-fortran) +# Options +option(ENABLE_WRAPPER_TESTS "Builds tests for MUSICA Fortran wrapper" ON) +message(STATUS "Build tests for MUSICA : ${ENABLE_TESTS}") # Set up include and lib directories set(MUSICA_FORTRAN_MOD_DIR "${PROJECT_BINARY_DIR}/include") set(MUSICA_FORTRAN_LIB_DIR "${PROJECT_BINARY_DIR}/libs") +add_library(musica-fortran STATIC) +add_library(musica::musica-fortran ALIAS musica-fortran) + set_target_properties(musica-fortran PROPERTIES ARCHIVE_OUTPUT_DIRECTORY ${MUSICA_FORTRAN_LIB_DIR} @@ -35,5 +39,9 @@ target_include_directories(musica-fortran $ ) +# Add sources add_subdirectory(src) -add_subdirectory(test) \ No newline at end of file + +if(ENABLE_WRAPPER_TESTS) + add_subdirectory(test) +endif() \ No newline at end of file diff --git a/musica-fortran/test/CMakeLists.txt b/musica-fortran/test/CMakeLists.txt index 01a96770..db83c8c7 100644 --- a/musica-fortran/test/CMakeLists.txt +++ b/musica-fortran/test/CMakeLists.txt @@ -35,4 +35,4 @@ enable_testing() add_test( NAME test_musica_api COMMAND $ -) +) \ No newline at end of file From f8a690be62c4cf865f09291b45d9514e76357b47 Mon Sep 17 00:00:00 2001 From: Jiwon Gim Date: Tue, 15 Aug 2023 18:06:37 -0600 Subject: [PATCH 42/59] changes to make mpi test work --- Dockerfile.mpi | 14 +++-- Dockerfile.mpi_openmp | 11 ++-- Dockerfile.openmp | 6 +- musica/test/connections/CMakeLists.txt | 80 +++++++++++++++++++++----- 4 files changed, 82 insertions(+), 29 deletions(-) diff --git a/Dockerfile.mpi b/Dockerfile.mpi index 73f5fc73..32022476 100644 --- a/Dockerfile.mpi +++ b/Dockerfile.mpi @@ -32,11 +32,12 @@ RUN curl -LO https://github.com/jacobwilliams/json-fortran/archive/8.2.0.tar.gz # Set environment variables ENV PATH="${PATH}:/usr/lib64/openmpi/bin/" +ENV LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/lib64/openmpi/lib" ENV OMP_NUM_THREADS=3 ENV FC=gfortran ENV JSON_FORTRAN_HOME="/usr/local/jsonfortran-gnu-8.2.0" -# copy the MusicBox code +# Copy the musica code COPY . musica/ RUN git config --global --add safe.directory '*' @@ -44,14 +45,15 @@ RUN sudo chown -R test_user.test_user musica # Build RUN cd musica \ - && cmake -S ./musica \ - -B ../build \ + && cmake -S . \ + -B build \ -D CMAKE_BUILD_TYPE=debug \ - -D ENABLE_MPI:BOOL=TRUE \ + -D USE_MUSICA=ON \ -D ENABLE_TESTS=ON \ + -D ENABLE_MPI=ON \ -D CMAKE_Fortran_COMPILER=/usr/lib64/openmpi/bin/mpif90 \ - && cd ../build \ + && cd build \ && sudo make install -j 8 \ && sudo chown -R test_user:test_user . -WORKDIR /home/test_user/build \ No newline at end of file +WORKDIR /home/test_user/musica/build \ No newline at end of file diff --git a/Dockerfile.mpi_openmp b/Dockerfile.mpi_openmp index 0ff6a4d7..1954011e 100644 --- a/Dockerfile.mpi_openmp +++ b/Dockerfile.mpi_openmp @@ -32,6 +32,7 @@ RUN curl -LO https://github.com/jacobwilliams/json-fortran/archive/8.2.0.tar.gz # Set environment variables ENV PATH="${PATH}:/usr/lib64/openmpi/bin/" +ENV LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/lib64/openmpi/lib" ENV OMP_NUM_THREADS=3 ENV FC=gfortran ENV JSON_FORTRAN_HOME="/usr/local/jsonfortran-gnu-8.2.0" @@ -45,14 +46,14 @@ RUN sudo chown -R test_user.test_user musica # get a tag and build the model RUN cd musica \ && cmake -S . \ - -B ../build \ + -B build \ -D CMAKE_BUILD_TYPE=debug \ - -D ENABLE_MPI:BOOL=TRUE \ - -D ENABLE_OPENMP:BOOL=TRUE \ + -D ENABLE_MPI=ON \ + -D ENABLE_OPENMP=ON \ -D ENABLE_TESTS=ON \ -D CMAKE_Fortran_COMPILER=/usr/lib64/openmpi/bin/mpif90 \ - && cd ../build \ + && cd build \ && sudo make install \ && sudo chown -R test_user:test_user . -WORKDIR /home/test_user/build \ No newline at end of file +WORKDIR /home/test_user/musica/build diff --git a/Dockerfile.openmp b/Dockerfile.openmp index ffec098c..b73afd2e 100644 --- a/Dockerfile.openmp +++ b/Dockerfile.openmp @@ -45,15 +45,15 @@ RUN sudo chown -R test_user.test_user musica # get a tag and build the model RUN cd musica \ && cmake -S . \ - -B ../build \ + -B build \ -D CMAKE_BUILD_TYPE=debug \ -D ENABLE_OPENMP:BOOL=TRUE \ -D ENABLE_TESTS=ON \ -D CMAKE_Fortran_COMPILER=/usr/lib64/openmpi/bin/mpif90 \ -D CMAKE_CXX_COMPILER=/usr/lib64/openmpi/bin/mpic++ \ - && cd ../build \ + && cd build \ && make VERBOSE=1 \ && sudo make install -j 8 \ && sudo chown -R test_user:test_user . -WORKDIR /home/test_user/build \ No newline at end of file +WORKDIR /home/test_user/musica/build \ No newline at end of file diff --git a/musica/test/connections/CMakeLists.txt b/musica/test/connections/CMakeLists.txt index 50676246..9c464606 100644 --- a/musica/test/connections/CMakeLists.txt +++ b/musica/test/connections/CMakeLists.txt @@ -1,24 +1,74 @@ -include(test_util) +# include(test_util) -create_standard_test(NAME connect_to_musica_core SOURCES musica_core.F90) +# create_standard_test(NAME connect_to_musica_core SOURCES musica_core.F90 WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}) + +# if (ENABLE_OPENMP) +# create_standard_test(NAME connect_to_musica_core_openmp SOURCES musica_core_openmp.F90) +# endif() + +# if (ENABLE_MPI) +# create_standard_test(NAME connect_to_musica_core_mpi SOURCES musica_core_mpi.F90 WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}) +# endif() + +# if (ENABLE_TUVX) +# create_standard_test(NAME connect_to_tuvx SOURCES tuvx.F90) +# if (ENABLE_OPENMP) +# create_standard_test(NAME connect_to_tuvx_openmp SOURCES tuvx_openmp.F90) +# endif() +# if (ENABLE_MPI) +# create_standard_test(NAME connect_to_tuvx_mpi SOURCES tuvx_mpi.F90) +# endif() +# endif() + +# if (ENABLE_MICM) +# create_standard_test_cxx(NAME connect_to_micm SOURCES micm.cpp) +# endif() + + +add_executable(connect_to_musica_core musica_core.F90) +target_link_libraries(connect_to_musica_core + PUBLIC + musica::musica +) +add_test( + NAME connect_to_musica_core + COMMAND $ +) if (ENABLE_OPENMP) - create_standard_test(NAME connect_to_musica_core_openmp SOURCES musica_core_openmp.F90) -endif() -if (ENABLE_MPI) - create_standard_test(NAME connect_to_musica_core_mpi SOURCES musica_core_mpi.F90) + add_executable(connect_to_musica_core_openmp musica_core_openmp.F90) + target_link_libraries(connect_to_musica_core_openmp + PUBLIC + musica::musica + OpenMP::OpenMP_Fortran + ) + add_test( + NAME connect_to_musica_core_openmp + COMMAND $ + ) endif() -if (ENABLE_TUVX) - create_standard_test(NAME connect_to_tuvx SOURCES tuvx.F90) - if (ENABLE_OPENMP) - create_standard_test(NAME connect_to_tuvx_openmp SOURCES tuvx_openmp.F90) - endif() - if (ENABLE_MPI) - create_standard_test(NAME connect_to_tuvx_mpi SOURCES tuvx_mpi.F90) - endif() +if(ENABLE_MPI) + add_executable(connect_to_musica_core_mpi musica_core_mpi.F90) + target_link_libraries(connect_to_musica_core_mpi + PUBLIC + musica::musica + ) + add_test( + NAME connect_to_musica_core_mpi + COMMAND mpirun -v -np 2 $ + ) endif() if (ENABLE_MICM) - create_standard_test_cxx(NAME connect_to_micm SOURCES micm.cpp) + add_executable(connect_to_micm micm.cpp) + target_link_libraries(connect_to_micm + PUBLIC + musica::musica + GTest::gtest_main + ) + add_test( + NAME connect_to_micm + COMMAND $ + ) endif() \ No newline at end of file From ef9a804ff5b556cb7b98c4e6293755a3d0988800 Mon Sep 17 00:00:00 2001 From: Jiwon Gim Date: Wed, 16 Aug 2023 13:20:11 -0600 Subject: [PATCH 43/59] roll back test setup --- CMakeLists.txt | 1 + musica/CMakeLists.txt | 2 - musica/test/connections/CMakeLists.txt | 81 +++++--------------------- 3 files changed, 17 insertions(+), 67 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 88162ac1..43a511c4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -8,6 +8,7 @@ project( set(CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH};${CMAKE_CURRENT_LIST_DIR}/cmake") set(CMAKE_USER_MAKE_RULES_OVERRIDE "${CMAKE_MODULE_PATH}/SetDefaults.cmake") +set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) ################################################################################ include(CMakeDependentOption) diff --git a/musica/CMakeLists.txt b/musica/CMakeLists.txt index b9f62234..cb556df0 100644 --- a/musica/CMakeLists.txt +++ b/musica/CMakeLists.txt @@ -1,8 +1,6 @@ ################################################################################ # Preamble -set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) - # Set up include and lib directories set(MUSICA_MOD_DIR "${PROJECT_BINARY_DIR}/include") set(MUSICA_LIB_DIR "${PROJECT_BINARY_DIR}/libs") diff --git a/musica/test/connections/CMakeLists.txt b/musica/test/connections/CMakeLists.txt index 9c464606..44350828 100644 --- a/musica/test/connections/CMakeLists.txt +++ b/musica/test/connections/CMakeLists.txt @@ -1,74 +1,25 @@ -# include(test_util) +include(test_util) -# create_standard_test(NAME connect_to_musica_core SOURCES musica_core.F90 WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}) - -# if (ENABLE_OPENMP) -# create_standard_test(NAME connect_to_musica_core_openmp SOURCES musica_core_openmp.F90) -# endif() - -# if (ENABLE_MPI) -# create_standard_test(NAME connect_to_musica_core_mpi SOURCES musica_core_mpi.F90 WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}) -# endif() - -# if (ENABLE_TUVX) -# create_standard_test(NAME connect_to_tuvx SOURCES tuvx.F90) -# if (ENABLE_OPENMP) -# create_standard_test(NAME connect_to_tuvx_openmp SOURCES tuvx_openmp.F90) -# endif() -# if (ENABLE_MPI) -# create_standard_test(NAME connect_to_tuvx_mpi SOURCES tuvx_mpi.F90) -# endif() -# endif() - -# if (ENABLE_MICM) -# create_standard_test_cxx(NAME connect_to_micm SOURCES micm.cpp) -# endif() - - -add_executable(connect_to_musica_core musica_core.F90) -target_link_libraries(connect_to_musica_core - PUBLIC - musica::musica -) -add_test( - NAME connect_to_musica_core - COMMAND $ -) +create_standard_test(NAME connect_to_musica_core SOURCES musica_core.F90) if (ENABLE_OPENMP) - add_executable(connect_to_musica_core_openmp musica_core_openmp.F90) - target_link_libraries(connect_to_musica_core_openmp - PUBLIC - musica::musica - OpenMP::OpenMP_Fortran - ) - add_test( - NAME connect_to_musica_core_openmp - COMMAND $ - ) + create_standard_test(NAME connect_to_musica_core_openmp SOURCES musica_core_openmp.F90) +endif() + +if (ENABLE_MPI) + create_standard_test(NAME connect_to_musica_core_mpi SOURCES musica_core_mpi.F90 WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}) endif() -if(ENABLE_MPI) - add_executable(connect_to_musica_core_mpi musica_core_mpi.F90) - target_link_libraries(connect_to_musica_core_mpi - PUBLIC - musica::musica - ) - add_test( - NAME connect_to_musica_core_mpi - COMMAND mpirun -v -np 2 $ - ) +if (ENABLE_TUVX) + create_standard_test(NAME connect_to_tuvx SOURCES tuvx.F90) + if (ENABLE_OPENMP) + create_standard_test(NAME connect_to_tuvx_openmp SOURCES tuvx_openmp.F90) + endif() + if (ENABLE_MPI) + create_standard_test(NAME connect_to_tuvx_mpi SOURCES tuvx_mpi.F90) + endif() endif() if (ENABLE_MICM) - add_executable(connect_to_micm micm.cpp) - target_link_libraries(connect_to_micm - PUBLIC - musica::musica - GTest::gtest_main - ) - add_test( - NAME connect_to_micm - COMMAND $ - ) + create_standard_test_cxx(NAME connect_to_micm SOURCES micm.cpp) endif() \ No newline at end of file From 4f466acb7e22811f379cfead4f7a425e53543487 Mon Sep 17 00:00:00 2001 From: Jiwon Gim Date: Wed, 16 Aug 2023 13:30:54 -0600 Subject: [PATCH 44/59] remove ccpp --- Dockerfile.ccpp | 67 ------------------- musica/test/CMakeLists.txt | 3 +- {test => musica/test}/unit/CMakeLists.txt | 0 .../test}/unit/component_versions.cpp | 0 test/CMakeLists.txt | 9 --- test/ccpp/CMakeLists.txt | 1 - test/ccpp/integration/CMakeLists.txt | 40 ----------- test/ccpp/integration/test_util.cmake | 36 ---------- test/ccpp/unit/CMakeLists.txt | 9 --- test/ccpp/unit/micm.F90 | 32 --------- 10 files changed, 2 insertions(+), 195 deletions(-) delete mode 100644 Dockerfile.ccpp rename {test => musica/test}/unit/CMakeLists.txt (100%) rename {test => musica/test}/unit/component_versions.cpp (100%) delete mode 100644 test/CMakeLists.txt delete mode 100644 test/ccpp/CMakeLists.txt delete mode 100644 test/ccpp/integration/CMakeLists.txt delete mode 100644 test/ccpp/integration/test_util.cmake delete mode 100644 test/ccpp/unit/CMakeLists.txt delete mode 100644 test/ccpp/unit/micm.F90 diff --git a/Dockerfile.ccpp b/Dockerfile.ccpp deleted file mode 100644 index 43fb3e5d..00000000 --- a/Dockerfile.ccpp +++ /dev/null @@ -1,67 +0,0 @@ -# on macOS this image requires rosetta 2 support for virtualization -# the intel compilers do not support the arm architecture so you must build -# on an amd platform, or virtualize -FROM --platform=linux/amd64 fedora:35 - -RUN dnf -y update \ - && dnf -y install \ - cmake \ - gcc-c++ \ - gcc-gfortran \ - gdb \ - git \ - lcov \ - make \ - netcdf-fortran-devel \ - wget \ - glibc-devel \ - && dnf clean all - -# Basekit -RUN wget https://registrationcenter-download.intel.com/akdlm/IRC_NAS/7deeaac4-f605-4bcf-a81b-ea7531577c61/l_BaseKit_p_2023.1.0.46401_offline.sh -RUN chmod +x l_BaseKit_p_2023.1.0.46401_offline.sh -RUN ./l_BaseKit_p_2023.1.0.46401_offline.sh -a -s --eula accept - -# HPC toolkit -RUN wget https://registrationcenter-download.intel.com/akdlm/IRC_NAS/1ff1b38a-8218-4c53-9956-f0b264de35a4/l_HPCKit_p_2023.1.0.46346_offline.sh -RUN chmod +x l_HPCKit_p_2023.1.0.46346_offline.sh -RUN ./l_HPCKit_p_2023.1.0.46346_offline.sh -a -s --eula accept - -# Set environment variables for intel compilers -ENV ONEAPI_VERSION=2021.4 -ENV ONEAPI_ROOT=/opt/intel/oneapi -ENV PATH=$PATH:$ONEAPI_ROOT/compiler/latest/linux/bin -ENV PATH=$PATH:$ONEAPI_ROOT/compiler/latest/linux/bin/intel64 -ENV LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ONEAPI_ROOT/compiler/latest/linux/compiler/lib/intel64 - -# install json-fortran using GCC -RUN curl -LO https://github.com/jacobwilliams/json-fortran/archive/8.2.0.tar.gz \ - && tar -zxvf 8.2.0.tar.gz \ - && cd json-fortran-8.2.0 \ - && mkdir build \ - && cd build \ - && FC=gfortran cmake -D SKIP_DOC_GEN:BOOL=TRUE .. \ - && make install - -# copy the musica library -COPY . /musica/ - -ENV JSON_FORTRAN_HOME="/usr/local/jsonfortran-gnu-8.2.0" - -RUN mkdir -p /build/musica /build/ccpp-integration - -# Build musica with GCC -RUN cd /build/musica \ - && FC=gfortran CC=gcc CXX=g++ cmake \ - -D ENABLE_TESTS=ON \ - /musica \ - && make install -j 8 - -# Build musica::ccpp with ifort and link to musica::musica that was built with GCC -RUN cd /build/ccpp-integration \ - && FC=ifort cmake \ - -DCMAKE_BUILD_TYPE=Debug \ - /musica/test/ccpp/integration \ - && make - -WORKDIR /build/ccpp-integration \ No newline at end of file diff --git a/musica/test/CMakeLists.txt b/musica/test/CMakeLists.txt index b54cd8d1..0fb7e39c 100644 --- a/musica/test/CMakeLists.txt +++ b/musica/test/CMakeLists.txt @@ -1,4 +1,5 @@ ################################################################################ # Add subdirectories containing tests -add_subdirectory(connections) \ No newline at end of file +add_subdirectory(connections) +add_subdirectory(unit) \ No newline at end of file diff --git a/test/unit/CMakeLists.txt b/musica/test/unit/CMakeLists.txt similarity index 100% rename from test/unit/CMakeLists.txt rename to musica/test/unit/CMakeLists.txt diff --git a/test/unit/component_versions.cpp b/musica/test/unit/component_versions.cpp similarity index 100% rename from test/unit/component_versions.cpp rename to musica/test/unit/component_versions.cpp diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt deleted file mode 100644 index 9221dfc1..00000000 --- a/test/CMakeLists.txt +++ /dev/null @@ -1,9 +0,0 @@ -################################################################################ -# Add subdirectories containing tests - -add_subdirectory(connections) -add_subdirectory(unit) - -if(ENABLE_CCPP) - add_subdirectory(ccpp) -endif() \ No newline at end of file diff --git a/test/ccpp/CMakeLists.txt b/test/ccpp/CMakeLists.txt deleted file mode 100644 index 059f2a25..00000000 --- a/test/ccpp/CMakeLists.txt +++ /dev/null @@ -1 +0,0 @@ -add_subdirectory(unit) \ No newline at end of file diff --git a/test/ccpp/integration/CMakeLists.txt b/test/ccpp/integration/CMakeLists.txt deleted file mode 100644 index 5a3a4f5c..00000000 --- a/test/ccpp/integration/CMakeLists.txt +++ /dev/null @@ -1,40 +0,0 @@ -cmake_minimum_required(VERSION 3.21) - -project( - ccpp_integration - VERSION 0.0.0 - LANGUAGES Fortran -) - -set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) - -find_package(musica 0.2.0 REQUIRED) -find_package(PkgConfig REQUIRED) - -# Find libstdc++ -find_library(LIBSTDCXX_PATH NAMES libstdc++.so.6 - PATHS - /usr/lib - /usr/lib64 - REQUIRED -) - -# NetCDF library -pkg_check_modules(netcdff REQUIRED IMPORTED_TARGET netcdf-fortran) - -# this path is the one expected in the docker image -set(MUSICA_CCPP_WRAPPER "/musica/ccpp" CACHE STRING "The location of the MUSICA ccpp fortran wrapper code") -add_subdirectory(${MUSICA_CCPP_WRAPPER} ${CMAKE_BINARY_DIR}/__ccpp) - -################################################################################ -# Test utilities - -include(test_util.cmake) -enable_testing() - -################################################################################ -# Tests - -create_standard_test(NAME micm_ccpp_api SOURCES ../unit/micm.F90 LIBRARIES musica::ccpp) - -target_link_libraries(test_micm_ccpp_api PRIVATE ${LIBSTDCXX_PATH}) \ No newline at end of file diff --git a/test/ccpp/integration/test_util.cmake b/test/ccpp/integration/test_util.cmake deleted file mode 100644 index aa9e621f..00000000 --- a/test/ccpp/integration/test_util.cmake +++ /dev/null @@ -1,36 +0,0 @@ -################################################################################ -# build and add a standard test (one linked to the tuvx library) - -function(create_standard_test) - set(prefix TEST) - set(singleValues NAME WORKING_DIRECTORY) - set(multiValues SOURCES LIBRARIES) - include(CMakeParseArguments) - cmake_parse_arguments(${prefix} " " "${singleValues}" "${multiValues}" ${ARGN}) - - add_executable(test_${TEST_NAME} ${TEST_SOURCES}) - - # link additional libraries - foreach(library ${TEST_LIBRARIES}) - target_link_libraries(test_${TEST_NAME} PUBLIC ${library}) - endforeach() - - target_link_libraries(test_${TEST_NAME} PUBLIC musica::musica) - - if(NOT DEFINED TEST_WORKING_DIRECTORY) - set(TEST_WORKING_DIRECTORY "${CMAKE_BINARY_DIR}") - endif() - - add_musica_test(${TEST_NAME} test_${TEST_NAME} "" ${TEST_WORKING_DIRECTORY}) -endfunction(create_standard_test) - -################################################################################ -# Add a test - -function(add_musica_test test_name test_binary test_args working_dir) - add_test(NAME ${test_name} - COMMAND ${test_binary} ${test_args} - WORKING_DIRECTORY ${working_dir}) -endfunction(add_musica_test) - -################################################################################ diff --git a/test/ccpp/unit/CMakeLists.txt b/test/ccpp/unit/CMakeLists.txt deleted file mode 100644 index 264d157b..00000000 --- a/test/ccpp/unit/CMakeLists.txt +++ /dev/null @@ -1,9 +0,0 @@ -################################################################################ -# Test utilities - -include(test_util) - -################################################################################ -# Tests - -create_standard_test(NAME micm_ccpp_api SOURCES micm.F90 LIBRARIES musica::ccpp) \ No newline at end of file diff --git a/test/ccpp/unit/micm.F90 b/test/ccpp/unit/micm.F90 deleted file mode 100644 index 7c78bb23..00000000 --- a/test/ccpp/unit/micm.F90 +++ /dev/null @@ -1,32 +0,0 @@ -program micm_ccpp_api_test - - use micm - - implicit none - - ! use ccpp_kinds, only: kind_phys - ! //TODO: figure out how to connect the test to ccpp to use their actual kind - integer, parameter :: kind_phys = kind(8) - - call test_api() - -contains - - subroutine test_api() - character(len=512) :: errmsg - integer :: errflg - - character(len=*), parameter :: filepath = "somepath.json" - - real(kind=kind_phys), dimension(:), allocatable :: state - integer(kind=8) :: state_size = 5 - integer(kind=8) :: time_step = 1 - - allocate(state(state_size)) - state = 1 - - call micm_init(filepath, errmsg, errflg) - call micm_run(state, state_size, time_step, errmsg, errflg) - end subroutine test_api - -end program micm_ccpp_api_test From a8a9ea231c55ee05249b2243d0bf139b42e00bd0 Mon Sep 17 00:00:00 2001 From: Jiwon Gim Date: Wed, 16 Aug 2023 14:16:26 -0600 Subject: [PATCH 45/59] update the git tag --- musica-fortran/CMakeLists.txt | 2 ++ musica-fortran/test/CMakeLists.txt | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/musica-fortran/CMakeLists.txt b/musica-fortran/CMakeLists.txt index 0d74dfe8..20a9dbec 100644 --- a/musica-fortran/CMakeLists.txt +++ b/musica-fortran/CMakeLists.txt @@ -6,6 +6,8 @@ project( LANGUAGES Fortran C CXX ) +set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) + # Options option(ENABLE_WRAPPER_TESTS "Builds tests for MUSICA Fortran wrapper" ON) message(STATUS "Build tests for MUSICA : ${ENABLE_TESTS}") diff --git a/musica-fortran/test/CMakeLists.txt b/musica-fortran/test/CMakeLists.txt index db83c8c7..6868efa1 100644 --- a/musica-fortran/test/CMakeLists.txt +++ b/musica-fortran/test/CMakeLists.txt @@ -12,7 +12,7 @@ include(FetchContent) FetchContent_Declare(musica GIT_REPOSITORY https://github.com/NCAR/musica.git - GIT_TAG e745ba2c6da8bbb464878da6ced0752366796c4e ## todo: jiwon update this + GIT_TAG 48e8ce8ab78edf45f2ebab92d27e167f2b35ced1 ## todo: jiwon update this ) FetchContent_MakeAvailable(musica) From c1648b18146799408935b2ece18241e7470dd5f5 Mon Sep 17 00:00:00 2001 From: Jiwon Gim Date: Wed, 16 Aug 2023 14:29:56 -0600 Subject: [PATCH 46/59] remove unnecessary code --- CMakeLists.txt | 2 +- Dockerfile | 1 - Dockerfile.fortran | 1 - Dockerfile.mpi | 1 - musica/test/connections/CMakeLists.txt | 2 +- 5 files changed, 2 insertions(+), 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 43a511c4..29958f6c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -27,7 +27,7 @@ cmake_dependent_option( message(STATUS "Build tests for MUSICA : ${ENABLE_TESTS}") cmake_dependent_option( - ENABLE_TUVX "Builds TUV-x, a photolysis calculator library" OFF "USE_MUSICA" OFF) + ENABLE_TUVX "Builds TUV-x, a photolysis calculator library" ON "USE_MUSICA" OFF) message(STATUS "Build TUV-x : ${ENABLE_TUVX}") cmake_dependent_option( diff --git a/Dockerfile b/Dockerfile index 709e5fe7..7879439b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -32,7 +32,6 @@ COPY . musica RUN cd musica \ && cmake -S . \ -B build \ - -D USE_MUSICA=ON \ -D ENABLE_TESTS=ON \ && cd build \ && make install -j 8 diff --git a/Dockerfile.fortran b/Dockerfile.fortran index 1d53724d..43703cb0 100644 --- a/Dockerfile.fortran +++ b/Dockerfile.fortran @@ -43,7 +43,6 @@ ENV JSON_FORTRAN_HOME="/usr/local/jsonfortran-gnu-8.2.0" RUN cd musica \ && cmake -S . \ -B build \ - -D USE_MUSICA=ON \ -D ENABLE_TESTS=ON \ && cd build \ && make install -j 8 diff --git a/Dockerfile.mpi b/Dockerfile.mpi index 32022476..c02739f0 100644 --- a/Dockerfile.mpi +++ b/Dockerfile.mpi @@ -48,7 +48,6 @@ RUN cd musica \ && cmake -S . \ -B build \ -D CMAKE_BUILD_TYPE=debug \ - -D USE_MUSICA=ON \ -D ENABLE_TESTS=ON \ -D ENABLE_MPI=ON \ -D CMAKE_Fortran_COMPILER=/usr/lib64/openmpi/bin/mpif90 \ diff --git a/musica/test/connections/CMakeLists.txt b/musica/test/connections/CMakeLists.txt index 44350828..a13cc463 100644 --- a/musica/test/connections/CMakeLists.txt +++ b/musica/test/connections/CMakeLists.txt @@ -7,7 +7,7 @@ if (ENABLE_OPENMP) endif() if (ENABLE_MPI) - create_standard_test(NAME connect_to_musica_core_mpi SOURCES musica_core_mpi.F90 WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}) + create_standard_test(NAME connect_to_musica_core_mpi SOURCES musica_core_mpi.F90) endif() if (ENABLE_TUVX) From 66e727f2d3b657f9cdcb2261888644e93b34aedc Mon Sep 17 00:00:00 2001 From: Jiwon Gim Date: Wed, 16 Aug 2023 14:49:18 -0600 Subject: [PATCH 47/59] remove unnecessary --- .dockerignore | 1 - Dockerfile.mpi | 1 + Dockerfile.mpi_openmp | 1 + cmake/musica_util.cmake | 3 +-- 4 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.dockerignore b/.dockerignore index c4228aed..b35cbab0 100644 --- a/.dockerignore +++ b/.dockerignore @@ -4,7 +4,6 @@ # add things to copy !CMakeLists.txt !Dockerfile -!Dockerfile.ccpp !Dockerfile.mpi !Dockerfile.mpi_openmp !Dockerfile.openmp diff --git a/Dockerfile.mpi b/Dockerfile.mpi index c02739f0..bccbf9ae 100644 --- a/Dockerfile.mpi +++ b/Dockerfile.mpi @@ -52,6 +52,7 @@ RUN cd musica \ -D ENABLE_MPI=ON \ -D CMAKE_Fortran_COMPILER=/usr/lib64/openmpi/bin/mpif90 \ && cd build \ + && make \ && sudo make install -j 8 \ && sudo chown -R test_user:test_user . diff --git a/Dockerfile.mpi_openmp b/Dockerfile.mpi_openmp index 1954011e..a751b1cd 100644 --- a/Dockerfile.mpi_openmp +++ b/Dockerfile.mpi_openmp @@ -53,6 +53,7 @@ RUN cd musica \ -D ENABLE_TESTS=ON \ -D CMAKE_Fortran_COMPILER=/usr/lib64/openmpi/bin/mpif90 \ && cd build \ + && make \ && sudo make install \ && sudo chown -R test_user:test_user . diff --git a/cmake/musica_util.cmake b/cmake/musica_util.cmake index 9daedb63..fde0c037 100644 --- a/cmake/musica_util.cmake +++ b/cmake/musica_util.cmake @@ -1,7 +1,6 @@ function(checkout_submodules) find_package(Git QUIET) -# if(GIT_FOUND AND EXISTS "${PROJECT_SOURCE_DIR}/.git") TODO: jiwon 7/28 .git dir is in the parent directory - if(GIT_FOUND) + if(GIT_FOUND AND EXISTS "${PROJECT_SOURCE_DIR}/.git") # Update submodules as needed option(GIT_SUBMODULE "Check submodules during build" ON) if(GIT_SUBMODULE) From 38c7885cc5f4ec861445f6b301ee2d8cc89ce1ac Mon Sep 17 00:00:00 2001 From: Jiwon Gim Date: Wed, 16 Aug 2023 16:46:33 -0600 Subject: [PATCH 48/59] test freeing up space --- .github/workflows/test.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index ca3c9bd6..3b8a3a69 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -51,6 +51,9 @@ jobs: runs-on: ubuntu-latest if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name != github.event.pull_request.base.repo.full_name steps: + - name: Delete huge unnecessary tools folder + run: rm -rf /opt/hostedtoolcache + - uses: actions/checkout@v2 with: submodules: recursive From 9593eec6982836dbbd552a53c76d344782aeff0d Mon Sep 17 00:00:00 2001 From: Jiwon Gim Date: Wed, 16 Aug 2023 17:57:20 -0600 Subject: [PATCH 49/59] test freeing up space --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 3b8a3a69..4d651846 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -51,7 +51,7 @@ jobs: runs-on: ubuntu-latest if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name != github.event.pull_request.base.repo.full_name steps: - - name: Delete huge unnecessary tools folder + - name: delete unnessary tools to free up space run: rm -rf /opt/hostedtoolcache - uses: actions/checkout@v2 From 29f3d0e6b72c0feb811cf39e1460833a68579f3d Mon Sep 17 00:00:00 2001 From: Kyle Shores Date: Thu, 24 Aug 2023 15:34:39 -0500 Subject: [PATCH 50/59] testing different way to use musica fortran --- CMakeLists.txt | 2 ++ Dockerfile.fortran | 9 +++------ musica-fortran/test/CMakeLists.txt | 3 +++ 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 29958f6c..d5d8810e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -81,11 +81,13 @@ endif() ################################################################################ # MUSICA +message(STATUS "use musica: ${USE_MUSICA}") if(USE_MUSICA) add_subdirectory(musica) endif() # MUSICA-Fortran +message(STATUS "use musica fortran: ${USE_MUSICA_FORTRAN}") if(USE_MUSICA_FORTRAN) add_subdirectory(musica-fortran) endif() diff --git a/Dockerfile.fortran b/Dockerfile.fortran index 43703cb0..3d9abb16 100644 --- a/Dockerfile.fortran +++ b/Dockerfile.fortran @@ -62,12 +62,9 @@ RUN cd json-fortran-8.2.0 \ # Set json-fortran variable to build MUSICA-Fortran using intel ENV JSON_FORTRAN_HOME="/usr/local/jsonfortran-intel-8.2.0" -RUN cd musica \ - && cmake -S . \ - -B build-musica-fortran \ - -D USE_MUSICA=OFF \ - -D USE_MUSICA_FORTRAN=ON \ - && cd build-musica-fortran \ +RUN cd musica/musica-fortran/test \ + && mkdir build && cd build \ + && cmake .. \ && make WORKDIR musica/build-musica-fortran \ No newline at end of file diff --git a/musica-fortran/test/CMakeLists.txt b/musica-fortran/test/CMakeLists.txt index 6868efa1..55539449 100644 --- a/musica-fortran/test/CMakeLists.txt +++ b/musica-fortran/test/CMakeLists.txt @@ -10,6 +10,9 @@ set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) include(FetchContent) +set(USE_MUSICA OFF) +set(USE_MUSICA_FORTRAN ON) + FetchContent_Declare(musica GIT_REPOSITORY https://github.com/NCAR/musica.git GIT_TAG 48e8ce8ab78edf45f2ebab92d27e167f2b35ced1 ## todo: jiwon update this From 0cc0192f317dcc5f47cfd71e321e2c44a273ffc3 Mon Sep 17 00:00:00 2001 From: Kyle Shores Date: Thu, 24 Aug 2023 15:35:48 -0500 Subject: [PATCH 51/59] removing tests --- musica-fortran/CMakeLists.txt | 7 +------ musica-fortran/test/CMakeLists.txt | 2 +- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/musica-fortran/CMakeLists.txt b/musica-fortran/CMakeLists.txt index 20a9dbec..1c7c7a92 100644 --- a/musica-fortran/CMakeLists.txt +++ b/musica-fortran/CMakeLists.txt @@ -9,7 +9,6 @@ project( set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) # Options -option(ENABLE_WRAPPER_TESTS "Builds tests for MUSICA Fortran wrapper" ON) message(STATUS "Build tests for MUSICA : ${ENABLE_TESTS}") # Set up include and lib directories @@ -42,8 +41,4 @@ target_include_directories(musica-fortran ) # Add sources -add_subdirectory(src) - -if(ENABLE_WRAPPER_TESTS) - add_subdirectory(test) -endif() \ No newline at end of file +add_subdirectory(src) \ No newline at end of file diff --git a/musica-fortran/test/CMakeLists.txt b/musica-fortran/test/CMakeLists.txt index 55539449..9454fc18 100644 --- a/musica-fortran/test/CMakeLists.txt +++ b/musica-fortran/test/CMakeLists.txt @@ -15,7 +15,7 @@ set(USE_MUSICA_FORTRAN ON) FetchContent_Declare(musica GIT_REPOSITORY https://github.com/NCAR/musica.git - GIT_TAG 48e8ce8ab78edf45f2ebab92d27e167f2b35ced1 ## todo: jiwon update this + GIT_TAG 29f3d0e ## todo: jiwon update this ) FetchContent_MakeAvailable(musica) From d17209c178d20a84fbf17467aae43170d323b17e Mon Sep 17 00:00:00 2001 From: Kyle Shores Date: Thu, 24 Aug 2023 15:36:38 -0500 Subject: [PATCH 52/59] commit --- musica-fortran/test/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/musica-fortran/test/CMakeLists.txt b/musica-fortran/test/CMakeLists.txt index 9454fc18..9f7eea38 100644 --- a/musica-fortran/test/CMakeLists.txt +++ b/musica-fortran/test/CMakeLists.txt @@ -15,7 +15,7 @@ set(USE_MUSICA_FORTRAN ON) FetchContent_Declare(musica GIT_REPOSITORY https://github.com/NCAR/musica.git - GIT_TAG 29f3d0e ## todo: jiwon update this + GIT_TAG 0cc0192 ## todo: jiwon update this ) FetchContent_MakeAvailable(musica) From f2dddf0912860128039de25b0aa96272a2b01de8 Mon Sep 17 00:00:00 2001 From: Kyle Shores Date: Thu, 24 Aug 2023 15:37:19 -0500 Subject: [PATCH 53/59] removing diagnostic messages --- CMakeLists.txt | 2 -- 1 file changed, 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d5d8810e..29958f6c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -81,13 +81,11 @@ endif() ################################################################################ # MUSICA -message(STATUS "use musica: ${USE_MUSICA}") if(USE_MUSICA) add_subdirectory(musica) endif() # MUSICA-Fortran -message(STATUS "use musica fortran: ${USE_MUSICA_FORTRAN}") if(USE_MUSICA_FORTRAN) add_subdirectory(musica-fortran) endif() From 79e6ae43b7677d1abc14c0e202735ec6dbfb4b12 Mon Sep 17 00:00:00 2001 From: Jiwon Gim Date: Fri, 25 Aug 2023 10:59:54 -0600 Subject: [PATCH 54/59] correct build path --- .github/workflows/test.yml | 2 +- Dockerfile.fortran | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 4d651846..c70d6ee4 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -60,4 +60,4 @@ jobs: - name: build Docker image run: docker build -t musica-fortran -f Dockerfile.fortran . - name: run tests in container - run: docker run --name test-container -t musica-fortran bash -c 'cd musica-fortran/test; ctest' + run: docker run --name test-container -t musica-fortran bash -c 'make test' diff --git a/Dockerfile.fortran b/Dockerfile.fortran index 3d9abb16..73b196cd 100644 --- a/Dockerfile.fortran +++ b/Dockerfile.fortran @@ -67,4 +67,4 @@ RUN cd musica/musica-fortran/test \ && cmake .. \ && make -WORKDIR musica/build-musica-fortran \ No newline at end of file +WORKDIR musica/musica-fortran/test/build \ No newline at end of file From 4f790db142b23ddecaf5d15a9eaad16195523e65 Mon Sep 17 00:00:00 2001 From: Kyle Shores Date: Mon, 25 Sep 2023 15:23:10 -0500 Subject: [PATCH 55/59] udpdated to the new version of the plan --- docs/Software Development Plan.pdf | Bin 294752 -> 300335 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/Software Development Plan.pdf b/docs/Software Development Plan.pdf index 916853d46d0e5417daf476be1125e96938140993..d98f5e3a6d854cf8004442985f4e1d68d73e6bbf 100644 GIT binary patch delta 213683 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 z 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°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

1sJzJ9G)KI~i{c5d#f}PBezm4Ud6h-Uf34 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 K6uhjVMEyS}2~J@E delta 206084 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 z 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

^=!xI}z` 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 LH6^96tjPZZ01PV% From 72405d25751ce1f8e071c287fc362b6d19fd7fb6 Mon Sep 17 00:00:00 2001 From: Kyle Shores Date: Mon, 25 Sep 2023 15:47:13 -0500 Subject: [PATCH 56/59] updating tag numbers for micm and musica core, and cmake version number --- CMakeLists.txt | 2 +- lib/micm | 2 +- lib/musica-core | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 29958f6c..b4184e79 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,7 +2,7 @@ cmake_minimum_required(VERSION 3.21) project( musica - VERSION 0.3.0 + VERSION 0.4.0 LANGUAGES Fortran CXX C ) diff --git a/lib/micm b/lib/micm index fb5efb82..48d3ed14 160000 --- a/lib/micm +++ b/lib/micm @@ -1 +1 @@ -Subproject commit fb5efb82034def032dbc5d9643947e1641df39d1 +Subproject commit 48d3ed14927e65314e5028590a049d6bb4074591 diff --git a/lib/musica-core b/lib/musica-core index f2133112..a0b2da06 160000 --- a/lib/musica-core +++ b/lib/musica-core @@ -1 +1 @@ -Subproject commit f2133112a25aa0dc8ae1a5109003bf72ac5680cf +Subproject commit a0b2da0681a5f7f24721bf7b9997e297cd88f5be From 6aba2906b8b3ba7a96e46a0db061ab22fd6e26dd Mon Sep 17 00:00:00 2001 From: Kyle Shores Date: Mon, 25 Sep 2023 16:05:49 -0500 Subject: [PATCH 57/59] updated tuv-x version --- lib/tuv-x | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/tuv-x b/lib/tuv-x index 35b19b37..aa1fef55 160000 --- a/lib/tuv-x +++ b/lib/tuv-x @@ -1 +1 @@ -Subproject commit 35b19b3716bcce45b0ff93ef7e948a0225ebddd5 +Subproject commit aa1fef550320e2fb3fbd480c11cd473d97cbc02a From bf1b77b4e43ce3ace0178fccad342679e3c68e6c Mon Sep 17 00:00:00 2001 From: Kyle Shores Date: Mon, 25 Sep 2023 16:17:45 -0500 Subject: [PATCH 58/59] commenting out interface --- musica/src/micm/interface.cpp | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/musica/src/micm/interface.cpp b/musica/src/micm/interface.cpp index 6fcb42ea..4ec80500 100644 --- a/musica/src/micm/interface.cpp +++ b/musica/src/micm/interface.cpp @@ -5,17 +5,17 @@ // assumes that photo_rates, matches order in c++ already void fortran_solve(void *micm_address, double time_start, double time_end, double *concentrations, double temperature, double pressure, double *photo_rates) { - MICM *micm = static_cast(micm_address); - micm::State state = micm->solver_->GetState(); + // MICM *micm = static_cast(micm_address); + // micm::State state = micm->solver_->GetState(); - for (auto param : state.custom_rate_parameters_[0]) - { - param = *(photo_rates++); - } - state.conditions_[0].pressure_ = pressure; - state.conditions_[0].temperature_ = temperature; + // for (auto param : state.custom_rate_parameters_[0]) + // { + // param = *(photo_rates++); + // } + // state.conditions_[0].pressure_ = pressure; + // state.conditions_[0].temperature_ = temperature; - auto result = micm->solver_->Solve(time_start, time_end, state); + // auto result = micm->solver_->Solve(time_start, time_end, state); } void solver( From 70fd6bd584d799001936cd5ac2abb6251bf5596d Mon Sep 17 00:00:00 2001 From: Kyle Shores Date: Mon, 25 Sep 2023 16:29:22 -0500 Subject: [PATCH 59/59] updating reference --- musica-fortran/test/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/musica-fortran/test/CMakeLists.txt b/musica-fortran/test/CMakeLists.txt index 9f7eea38..088216ef 100644 --- a/musica-fortran/test/CMakeLists.txt +++ b/musica-fortran/test/CMakeLists.txt @@ -15,7 +15,7 @@ set(USE_MUSICA_FORTRAN ON) FetchContent_Declare(musica GIT_REPOSITORY https://github.com/NCAR/musica.git - GIT_TAG 0cc0192 ## todo: jiwon update this + GIT_TAG bf1b77b ## todo: jiwon update this ) FetchContent_MakeAvailable(musica)