From e857752ac15d594bdd1fa9c856a233196254650c Mon Sep 17 00:00:00 2001 From: Kyle <kyle.c.klenk@gmail.com> Date: Tue, 14 Feb 2023 22:51:32 +0000 Subject: [PATCH] added options to compile with Kinsol --- .gitignore | 1 + build/cmake/CMakeLists.txt | 499 +------------------------------------ build/cmake/be.cmake | 238 ++++++++++++++++++ build/cmake/ida.cmake | 247 ++++++++++++++++++ build/cmake/kinsol.cmake | 287 +++++++++++++++++++++ build/summa_sundials | 1 + 6 files changed, 785 insertions(+), 488 deletions(-) create mode 100644 build/cmake/be.cmake create mode 100644 build/cmake/ida.cmake create mode 100644 build/cmake/kinsol.cmake create mode 160000 build/summa_sundials diff --git a/.gitignore b/.gitignore index 23a1edd..fffe29d 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,7 @@ bin/summa_actors build/cmake/build build/summa build/summa-sundials +build/.vscode .vscode/settings.json .DS_Store laugh_tests \ No newline at end of file diff --git a/build/cmake/CMakeLists.txt b/build/cmake/CMakeLists.txt index 19a479f..f230387 100644 --- a/build/cmake/CMakeLists.txt +++ b/build/cmake/CMakeLists.txt @@ -12,9 +12,12 @@ FortranCInterface_VERIFY(CXX) option(SUNDIALS "Use SUNDIALS" OFF) +include(kinsol.cmake) + ######### SET THE PATHS TO THE SUNDIALS LIBRARIES AND INCLUDE FILES ######### ############################################################################# -set(DIR_SUNDIALS "/home/kklenk/projects/rpp-kshook/CompHydCore/SummaSundials/sundials/sundials/instdir") +# set(DIR_SUNDIALS "/home/kklenk/projects/rpp-kshook/CompHydCore/SummaSundials/sundials/sundials/instdir") +set(DIR_SUNDIALS "/usr/local/sundials") ############################################################################# # Set default build type to Release @@ -23,10 +26,10 @@ if(NOT CMAKE_BUILD_TYPE) endif() # Add options for build type -set(CMAKE_CONFIGURATION_TYPES Debug Release Cluster Cluster_Debug) +set(CMAKE_CONFIGURATION_TYPES Debug Release Cluster Cluster_Debug Kinsol Kinsol_Debug) # Set compiler flags -if(CMAKE_BUILD_TYPE MATCHES Debug OR CMAKE_BUILD_TYPE MATCHES Cluster_Debug) +if(CMAKE_BUILD_TYPE MATCHES Debug OR CMAKE_BUILD_TYPE MATCHES Cluster_Debug OR CMAKE_BUILD_TYPE MATCHES Kinsol_Debug) message("Debug build.") add_definitions(-DDEBUG) set(SUMMA_NOAHMP_OPTIONS -g -O0 -ffree-form -ffree-line-length-none -fmax-errors=0 -fPIC -Wfatal-errors) @@ -34,7 +37,6 @@ if(CMAKE_BUILD_TYPE MATCHES Debug OR CMAKE_BUILD_TYPE MATCHES Cluster_Debug) set(CMAKE_CXX_FLAGS "-g -O0 -Wfatal-errors -std=c++17") else() message("Release build.") - add_definitions(-DNDEBUG) set(SUMMA_NOAHMP_OPTIONS -O3 -ffree-form -ffree-line-length-none -fmax-errors=0 -fPIC -Wfatal-errors) set(SUMMA_ALL_OPTIONS -O3 -ffree-line-length-none -fmax-errors=0 -fPIC -Wfatal-errors) set(CMAKE_CXX_FLAGS "-O3 -Wfatal-errors -std=c++17") @@ -61,7 +63,7 @@ if (CMAKE_BUILD_TYPE MATCHES Cluster OR CMAKE_BUILD_TYPE MATCHES Cluster_Debug) "${DIR_SUNDIALS}/fortran" ${netCDF_INCLUDES} ${LAPACK_INCLUDES}) - + set(SUMMA_LIBS -lsundials_fnvecmanyvector_mod -lsundials_fida_mod @@ -136,8 +138,11 @@ if (CMAKE_BUILD_TYPE MATCHES Cluster OR CMAKE_BUILD_TYPE MATCHES Cluster_Debug) endif() -else() +elseif(CMAKE_BUILD_TYPE MATCHES Kinsol OR CMAKE_BUILD_TYPE MATCHES Kinsol_Debug) + message("\nBuilding Kinsol\n") + compile_with_kinsol(PARENT_DIR, ${DIR_SUNDIALS}) +else() find_package(CAF REQUIRED) find_package(netCDF REQUIRED) find_package(LAPACK REQUIRED) @@ -222,485 +227,3 @@ else() endif() endif() - -if (SUNDIALS) - set(ACTORS_DIR ${PARENT_DIR}/build/source/actors) - set(DRIVER_DIR ${PARENT_DIR}/build/source/driver) - set(DSHARE_DIR ${PARENT_DIR}/build/source/dshare) - set(ENGINE_DIR ${PARENT_DIR}/build/source/engine) - set(HOOKUP_DIR ${PARENT_DIR}/build/source/hookup) - set(NETCDF_DIR ${PARENT_DIR}/build/source/netcdf) - set(NOAHMP_DIR ${PARENT_DIR}/build/source/noah-mp) - set(FILE_ACCESS_DIR ${ACTORS_DIR}/file_access_actor) - set(JOB_ACTOR_DIR ${ACTORS_DIR}/job_actor) - set(HRU_ACTOR_DIR ${ACTORS_DIR}/hru_actor) - set(GRU_ACTOR_DIR ${ACTORS_DIR}/gru_actor) - set(SUMMA_DSHARE_DIR ${PARENT_DIR}/build/summa-sundials/build/source/dshare) - set(SUMMA_ENGINE_DIR ${PARENT_DIR}/build/summa-sundials/build/source/engine) - set(SUMMA_NOAHMP_DIR ${PARENT_DIR}/build/summa-sundials/build/source/noah-mp) - - set(NRUTIL - ${SUMMA_ENGINE_DIR}/nrtype.f90 - ${SUMMA_ENGINE_DIR}/f2008funcs.f90 - ${SUMMA_ENGINE_DIR}/nr_utility.f90) - - set(NRPROC - ${SUMMA_ENGINE_DIR}/expIntegral.f90 - ${SUMMA_ENGINE_DIR}/spline_int.f90) - - SET(HOOKUP - ${HOOKUP_DIR}/ascii_util.f90 - ${HOOKUP_DIR}/summaActors_FileManager.f90) - - SET(DATAMS - ${SUMMA_DSHARE_DIR}/multiconst.f90 - ${SUMMA_DSHARE_DIR}/var_lookup.f90 - ${DSHARE_DIR}/data_types.f90 - ${DSHARE_DIR}/globalData.f90 - ${SUMMA_DSHARE_DIR}/flxMapping.f90) - - SET(DEPENDS_ON_FILEMANAGER - ${SUMMA_DSHARE_DIR}/get_ixname.f90 - ${SUMMA_DSHARE_DIR}/popMetadat.f90 - ${SUMMA_DSHARE_DIR}/outpt_stat.f90) - - SET(UTILMS - ${SUMMA_ENGINE_DIR}/time_utils.f90 - ${ENGINE_DIR}/sundials/mDecisions.f90 - ${SUMMA_ENGINE_DIR}/snow_utils.f90 - ${SUMMA_ENGINE_DIR}/soil_utils.f90 - ${SUMMA_ENGINE_DIR}/soil_utilsAddSundials.f90 - ${SUMMA_ENGINE_DIR}/updatState.f90 - ${SUMMA_ENGINE_DIR}/updatStateSundials.f90 - ${SUMMA_ENGINE_DIR}/matrixOper.f90) - - set(SOLVER - ${ENGINE_DIR}/vegPhenlgy.f90 - ${SUMMA_ENGINE_DIR}/diagn_evar.f90 - ${SUMMA_ENGINE_DIR}/stomResist.f90 - ${SUMMA_ENGINE_DIR}/groundwatr.f90 - ${SUMMA_ENGINE_DIR}/vegSWavRad.f90 - ${SUMMA_ENGINE_DIR}/vegNrgFlux.f90 - ${SUMMA_ENGINE_DIR}/ssdNrgFlux.f90 - ${SUMMA_ENGINE_DIR}/vegLiqFlux.f90 - ${SUMMA_ENGINE_DIR}/snowLiqFlx.f90 - ${SUMMA_ENGINE_DIR}/soilLiqFlx.f90 - ${SUMMA_ENGINE_DIR}/bigAquifer.f90 - ${SUMMA_ENGINE_DIR}/computFlux.f90 - ${SUMMA_ENGINE_DIR}/type4IDA.f90 - ${SUMMA_ENGINE_DIR}/tol4IDA.f90 - ${SUMMA_ENGINE_DIR}/computEnthalpy.f90 - ${SUMMA_ENGINE_DIR}/computHeatCap.f90 - ${SUMMA_ENGINE_DIR}/computThermConduct.f90 - ${SUMMA_ENGINE_DIR}/computResid.f90 - ${SUMMA_ENGINE_DIR}/computJacob.f90 - ${SUMMA_ENGINE_DIR}/eval8summa.f90 - ${SUMMA_ENGINE_DIR}/summaSolve.f90 - ${SUMMA_ENGINE_DIR}/systemSolv.f90 - ${SUMMA_ENGINE_DIR}/computResidSundials.f90 - ${SUMMA_ENGINE_DIR}/eval8summaSundials.f90 - ${SUMMA_ENGINE_DIR}/computJacobSundials.f90 - ${SUMMA_ENGINE_DIR}/computSnowDepth.f90 - ${SUMMA_ENGINE_DIR}/summaSolveSundialsIDA.f90 - ${SUMMA_ENGINE_DIR}/systemSolvSundials.f90 - ${SUMMA_ENGINE_DIR}/varSubstep.f90 - ${SUMMA_ENGINE_DIR}/varSubstepSundials.f90 - ${SUMMA_ENGINE_DIR}/opSplittin.f90 - ${ENGINE_DIR}/sundials/coupled_em.f90) - - set(INTERFACE - ${ACTORS_DIR}/global/cppwrap_datatypes.f90 - ${ACTORS_DIR}/global/cppwrap_auxiliary.f90 - ${ACTORS_DIR}/global/cppwrap_metadata.f90) - - set(FILE_ACCESS_INTERFACE - ${FILE_ACCESS_DIR}/fortran_code/output_structure.f90 - ${FILE_ACCESS_DIR}/fortran_code/cppwrap_fileAccess.f90 - ${FILE_ACCESS_DIR}/fortran_code/read_attribute.f90 - ${FILE_ACCESS_DIR}/fortran_code/read_forcing.f90 - ${FILE_ACCESS_DIR}/fortran_code/read_param.f90 - ${FILE_ACCESS_DIR}/fortran_code/read_initcond.f90 - ${FILE_ACCESS_DIR}/fortran_code/writeOutputFromOutputStructure.f90 - ${FILE_ACCESS_DIR}/fortran_code/write_to_netcdf.f90) - - set(JOB_INTERFACE - ${JOB_ACTOR_DIR}/job_actor.f90) - - set(HRU_INTERFACE - ${HRU_ACTOR_DIR}/fortran_code/model_run.f90 - ${HRU_ACTOR_DIR}/fortran_code/setup_hru.f90 - ${HRU_ACTOR_DIR}/fortran_code/restart.f90 - ${HRU_ACTOR_DIR}/fortran_code/hru_actor.f90 - ${HRU_ACTOR_DIR}/fortran_code/init_hru_actor.f90 - ${HRU_ACTOR_DIR}/fortran_code/outputStrucWrite.f90 - ${HRU_ACTOR_DIR}/fortran_code/hru_writeOutput.f90) - - set(PRELIM - ${SUMMA_ENGINE_DIR}/conv_funcs.f90 - ${SUMMA_ENGINE_DIR}/sunGeomtry.f90 - ${SUMMA_ENGINE_DIR}/convE2Temp.f90 - ${ENGINE_DIR}/allocspaceActors.f90 - ${ENGINE_DIR}/alloc_fileAccess.f90 - ${SUMMA_ENGINE_DIR}/checkStruc.f90 - ${SUMMA_ENGINE_DIR}/childStruc.f90 - ${ENGINE_DIR}/ffile_info.f90 - ${ENGINE_DIR}/read_dimension.f90 - ${ENGINE_DIR}/read_pinit.f90 - ${SUMMA_ENGINE_DIR}/pOverwrite.f90 - ${SUMMA_ENGINE_DIR}/paramCheck.f90 - ${ENGINE_DIR}/check_icondActors.f90) - - set(NOAHMP - ${SUMMA_NOAHMP_DIR}/module_model_constants.F - ${SUMMA_NOAHMP_DIR}/module_sf_noahutl.F - ${SUMMA_NOAHMP_DIR}/module_sf_noahlsm.F - ${SUMMA_NOAHMP_DIR}/module_sf_noahmplsm.F) - - set(MODRUN - ${SUMMA_ENGINE_DIR}/indexState.f90 - ${SUMMA_ENGINE_DIR}/getVectorz.f90 - ${SUMMA_ENGINE_DIR}/t2enthalpy.f90 - ${SUMMA_ENGINE_DIR}/updateVars.f90 - ${SUMMA_ENGINE_DIR}/updateVarsSundials.f90 - ${SUMMA_ENGINE_DIR}/var_derive.f90 - ${ENGINE_DIR}/derivforce.f90 - ${SUMMA_ENGINE_DIR}/snowAlbedo.f90 - ${SUMMA_ENGINE_DIR}/canopySnow.f90 - ${SUMMA_ENGINE_DIR}/tempAdjust.f90 - ${SUMMA_ENGINE_DIR}/snwCompact.f90 - ${SUMMA_ENGINE_DIR}/layerMerge.f90 - ${SUMMA_ENGINE_DIR}/layerDivide.f90 - ${SUMMA_ENGINE_DIR}/volicePack.f90 - ${SUMMA_ENGINE_DIR}/qTimeDelay.f90) - - set(NETCDF - ${NETCDF_DIR}/netcdf_util.f90 - ${NETCDF_DIR}/def_output.f90 - ${NETCDF_DIR}/writeOutput.f90 - ${NETCDF_DIR}/read_icondActors.f90) - - set(DRIVER - ${DRIVER_DIR}/summaActors_type.f90 - ${DRIVER_DIR}/summaActors_util.f90 - ${DRIVER_DIR}/summaActors_globalData.f90 - ${DRIVER_DIR}/summaActors_alarms.f90) - - set(COMM_ALL - ${NRPROC} - ${DATAMS} - ${INTERFACE} - ${HOOKUP} - ${DEPENDS_ON_FILEMANAGER} - ${UTILMS}) - - set(SUMMA_ALL - ${NETCDF} - ${PRELIM} - ${MODRUN} - ${SOLVER} - ${DRIVER} - ${JOB_INTERFACE} - ${FILE_ACCESS_INTERFACE} - ${HRU_INTERFACE} - ${GRU_INTERFACE}) - - set(ACTORS_GLOBAL - ${ACTORS_DIR}/global/global.cpp - ${ACTORS_DIR}/global/timing_info.cpp - ${ACTORS_DIR}/global/message_atoms.cpp - ${ACTORS_DIR}/global/settings_functions.cpp - ${ACTORS_DIR}/global/auxiliary.cpp) - - set(SUMMA_ACTOR - ${ACTORS_DIR}/summa_actor/summa_actor.cpp - ${ACTORS_DIR}/summa_actor/summa_client.cpp - ${ACTORS_DIR}/summa_actor/summa_server.cpp - ${ACTORS_DIR}/summa_actor/summa_backup_server.cpp - ${ACTORS_DIR}/summa_actor/batch/batch.cpp - ${ACTORS_DIR}/summa_actor/batch/batch_container.cpp - ${ACTORS_DIR}/summa_actor/client/client.cpp - ${ACTORS_DIR}/summa_actor/client/client_container.cpp) - - set(HRU_ACTOR - ${ACTORS_DIR}/hru_actor/cpp_code/hru_actor.cpp) - - set(FILE_ACCESS_ACTOR - ${ACTORS_DIR}/file_access_actor/cpp_code/file_access_actor.cpp - ${ACTORS_DIR}/file_access_actor/cpp_code/forcing_file_info.cpp - ${ACTORS_DIR}/file_access_actor/cpp_code/output_container.cpp) - - set(JOB_ACTOR - ${ACTORS_DIR}/job_actor/job_actor.cpp - ${ACTORS_DIR}/job_actor/GRUinfo.cpp) - - set(MAIN - ${ACTORS_DIR}/main.cpp) - - add_library(SUMMA_NOAHMP OBJECT - ${NOAHMP} - ${NRUTIL}) - target_compile_options(SUMMA_NOAHMP PRIVATE ${SUMMA_NOAHMP_OPTIONS}) - add_library(SUMMA_COMM OBJECT - ${COMM_ALL}) - target_compile_options(SUMMA_COMM PRIVATE ${SUMMA_ALL_OPTIONS}) - target_include_directories(SUMMA_COMM PRIVATE ${SUMMA_INCLUDES}) - target_link_libraries(SUMMA_COMM PUBLIC ${SUMMA_LIBS}) - - # Build SUMMA Shared Library - add_library(summa SHARED - ${SUMMA_ALL}) - target_compile_options(summa PRIVATE ${SUMMA_ALL_OPTIONS}) - target_include_directories(summa PUBLIC ${SUMMA_INCLUDES}) - target_link_libraries(summa PUBLIC ${SUMMA_LIBS} SUMMA_COMM) - - # Build Summa-Actors executable - add_executable(${EXEC_NAME} - ${ACTORS_GLOBAL} - ${HRU_ACTOR} - ${FILE_ACCESS_ACTOR} - ${JOB_ACTOR} - ${SUMMA_ACTOR} - ${SUMMA_CLIENT} - ${SUMMA_SERVER} - ${MAIN}) - set_property(TARGET ${EXEC_NAME} PROPERTY LINKER_LANGUAGE Fortran) - target_include_directories(${EXEC_NAME} PUBLIC ${SUMMA_ACTORS_INCLUDES}) - target_link_libraries( ${EXEC_NAME} ${SUMMA_ACTORS_LIBS}) - -else() - set(ACTORS_DIR ${PARENT_DIR}/build/source/actors) - set(DRIVER_DIR ${PARENT_DIR}/build/source/driver) - set(DSHARE_DIR ${PARENT_DIR}/build/source/dshare) - set(ENGINE_DIR ${PARENT_DIR}/build/source/engine) - set(HOOKUP_DIR ${PARENT_DIR}/build/source/hookup) - set(NETCDF_DIR ${PARENT_DIR}/build/source/netcdf) - set(NOAHMP_DIR ${PARENT_DIR}/build/source/noah-mp) - set(FILE_ACCESS_DIR ${ACTORS_DIR}/file_access_actor) - set(JOB_ACTOR_DIR ${ACTORS_DIR}/job_actor) - set(HRU_ACTOR_DIR ${ACTORS_DIR}/hru_actor) - set(GRU_ACTOR_DIR ${ACTORS_DIR}/gru_actor) - set(SUMMA_DSHARE_DIR ${PARENT_DIR}/build/summa/build/source/dshare) - set(SUMMA_ENGINE_DIR ${PARENT_DIR}/build/summa/build/source/engine) - set(SUMMA_NOAHMP_DIR ${PARENT_DIR}/build/summa/build/source/noah-mp) - - set(NRUTIL - ${SUMMA_ENGINE_DIR}/nrtype.f90 - ${SUMMA_ENGINE_DIR}/f2008funcs.f90 - ${SUMMA_ENGINE_DIR}/nr_utility.f90) - - set(NRPROC - ${SUMMA_ENGINE_DIR}/expIntegral.f90 - ${SUMMA_ENGINE_DIR}/spline_int.f90) - - SET(HOOKUP - ${HOOKUP_DIR}/ascii_util.f90 - ${HOOKUP_DIR}/summaActors_FileManager.f90) - - SET(DATAMS - ${SUMMA_DSHARE_DIR}/multiconst.f90 - ${DSHARE_DIR}/var_lookup.f90 - ${DSHARE_DIR}/data_types.f90 - ${DSHARE_DIR}/globalData.f90 - ${SUMMA_DSHARE_DIR}/flxMapping.f90) - - SET(DEPENDS_ON_FILEMANAGER - ${SUMMA_DSHARE_DIR}/get_ixname.f90 - ${SUMMA_DSHARE_DIR}/popMetadat.f90 - ${SUMMA_DSHARE_DIR}/outpt_stat.f90) - - SET(UTILMS - ${SUMMA_ENGINE_DIR}/time_utils.f90 - ${ENGINE_DIR}/mDecisions.f90 - ${SUMMA_ENGINE_DIR}/snow_utils.f90 - ${SUMMA_ENGINE_DIR}/soil_utils.f90 - ${SUMMA_ENGINE_DIR}/updatState.f90 - ${SUMMA_ENGINE_DIR}/matrixOper.f90) - - set(SOLVER - ${ENGINE_DIR}/vegPhenlgy.f90 - ${SUMMA_ENGINE_DIR}/diagn_evar.f90 - ${SUMMA_ENGINE_DIR}/stomResist.f90 - ${SUMMA_ENGINE_DIR}/groundwatr.f90 - ${SUMMA_ENGINE_DIR}/vegSWavRad.f90 - ${SUMMA_ENGINE_DIR}/vegNrgFlux.f90 - ${SUMMA_ENGINE_DIR}/ssdNrgFlux.f90 - ${SUMMA_ENGINE_DIR}/vegLiqFlux.f90 - ${SUMMA_ENGINE_DIR}/snowLiqFlx.f90 - ${SUMMA_ENGINE_DIR}/soilLiqFlx.f90 - ${SUMMA_ENGINE_DIR}/bigAquifer.f90 - ${SUMMA_ENGINE_DIR}/computFlux.f90 - ${SUMMA_ENGINE_DIR}/computResid.f90 - ${SUMMA_ENGINE_DIR}/computJacob.f90 - ${SUMMA_ENGINE_DIR}/eval8summa.f90 - ${SUMMA_ENGINE_DIR}/summaSolve.f90 - ${SUMMA_ENGINE_DIR}/systemSolv.f90 - ${SUMMA_ENGINE_DIR}/varSubstep.f90 - ${SUMMA_ENGINE_DIR}/opSplittin.f90 - ${ENGINE_DIR}/coupled_em.f90) - - set(INTERFACE - ${ACTORS_DIR}/global/cppwrap_datatypes.f90 - ${ACTORS_DIR}/global/cppwrap_auxiliary.f90 - ${ACTORS_DIR}/global/cppwrap_metadata.f90) - - set(FILE_ACCESS_INTERFACE - ${FILE_ACCESS_DIR}/fortran_code/output_structure.f90 - ${FILE_ACCESS_DIR}/fortran_code/cppwrap_fileAccess.f90 - ${FILE_ACCESS_DIR}/fortran_code/read_attribute.f90 - ${FILE_ACCESS_DIR}/fortran_code/read_forcing.f90 - ${FILE_ACCESS_DIR}/fortran_code/read_param.f90 - ${FILE_ACCESS_DIR}/fortran_code/read_initcond.f90 - ${FILE_ACCESS_DIR}/fortran_code/writeOutputFromOutputStructure.f90 - ${FILE_ACCESS_DIR}/fortran_code/write_to_netcdf.f90) - - set(JOB_INTERFACE - ${JOB_ACTOR_DIR}/job_actor.f90) - - set(HRU_INTERFACE - ${HRU_ACTOR_DIR}/fortran_code/model_run.f90 - ${HRU_ACTOR_DIR}/fortran_code/setup_hru.f90 - ${HRU_ACTOR_DIR}/fortran_code/restart.f90 - ${HRU_ACTOR_DIR}/fortran_code/hru_actor.f90 - ${HRU_ACTOR_DIR}/fortran_code/init_hru_actor.f90 - ${HRU_ACTOR_DIR}/fortran_code/outputStrucWrite.f90 - ${HRU_ACTOR_DIR}/fortran_code/hru_writeOutput.f90) - - set(GRU_INTERFACE - ${GRU_ACTOR_DIR}/gru_actor.f90) - - set(PRELIM - ${SUMMA_ENGINE_DIR}/conv_funcs.f90 - ${SUMMA_ENGINE_DIR}/sunGeomtry.f90 - ${SUMMA_ENGINE_DIR}/convE2Temp.f90 - ${ENGINE_DIR}/allocspaceActors.f90 - ${ENGINE_DIR}/alloc_fileAccess.f90 - ${ENGINE_DIR}/checkStruc.f90 - ${SUMMA_ENGINE_DIR}/childStruc.f90 - ${ENGINE_DIR}/ffile_info.f90 - ${ENGINE_DIR}/read_dimension.f90 - ${ENGINE_DIR}/read_pinit.f90 - ${SUMMA_ENGINE_DIR}/pOverwrite.f90 - ${SUMMA_ENGINE_DIR}/paramCheck.f90 - ${ENGINE_DIR}/check_icondActors.f90) - - set(NOAHMP - ${SUMMA_NOAHMP_DIR}/module_model_constants.F - ${SUMMA_NOAHMP_DIR}/module_sf_noahutl.F - ${SUMMA_NOAHMP_DIR}/module_sf_noahlsm.F - ${SUMMA_NOAHMP_DIR}/module_sf_noahmplsm.F) - - set(MODRUN - ${SUMMA_ENGINE_DIR}/indexState.f90 - ${SUMMA_ENGINE_DIR}/getVectorz.f90 - ${SUMMA_ENGINE_DIR}/updateVars.f90 - ${SUMMA_ENGINE_DIR}/var_derive.f90 - ${ENGINE_DIR}/derivforce.f90 - ${ENGINE_DIR}/sundials/t2enthalpy.f90 - ${SUMMA_ENGINE_DIR}/snowAlbedo.f90 - ${SUMMA_ENGINE_DIR}/canopySnow.f90 - ${SUMMA_ENGINE_DIR}/tempAdjust.f90 - ${SUMMA_ENGINE_DIR}/snwCompact.f90 - ${SUMMA_ENGINE_DIR}/layerMerge.f90 - ${SUMMA_ENGINE_DIR}/layerDivide.f90 - ${SUMMA_ENGINE_DIR}/volicePack.f90 - ${SUMMA_ENGINE_DIR}/qTimeDelay.f90) - - set(NETCDF - ${NETCDF_DIR}/netcdf_util.f90 - ${NETCDF_DIR}/def_output.f90 - ${NETCDF_DIR}/writeOutput.f90 - ${NETCDF_DIR}/read_icondActors.f90) - - set(DRIVER - ${DRIVER_DIR}/summaActors_type.f90 - ${DRIVER_DIR}/summaActors_util.f90 - ${DRIVER_DIR}/summaActors_globalData.f90 - ${DRIVER_DIR}/summaActors_alarms.f90) - - set(COMM_ALL - ${NRPROC} - ${DATAMS} - ${INTERFACE} - ${HOOKUP} - ${DEPENDS_ON_FILEMANAGER} - ${UTILMS}) - - set(SUMMA_ALL - ${NETCDF} - ${PRELIM} - ${MODRUN} - ${SOLVER} - ${DRIVER} - ${JOB_INTERFACE} - ${FILE_ACCESS_INTERFACE} - ${HRU_INTERFACE} - ${GRU_INTERFACE}) - - set(ACTORS_GLOBAL - ${ACTORS_DIR}/global/global.cpp - ${ACTORS_DIR}/global/timing_info.cpp - ${ACTORS_DIR}/global/message_atoms.cpp - ${ACTORS_DIR}/global/settings_functions.cpp - ${ACTORS_DIR}/global/auxiliary.cpp) - - set(SUMMA_ACTOR - ${ACTORS_DIR}/summa_actor/summa_actor.cpp - ${ACTORS_DIR}/summa_actor/summa_client.cpp - ${ACTORS_DIR}/summa_actor/summa_server.cpp - ${ACTORS_DIR}/summa_actor/summa_backup_server.cpp - ${ACTORS_DIR}/summa_actor/batch/batch.cpp - ${ACTORS_DIR}/summa_actor/batch/batch_container.cpp - ${ACTORS_DIR}/summa_actor/client/client.cpp - ${ACTORS_DIR}/summa_actor/client/client_container.cpp) - - set(HRU_ACTOR - ${ACTORS_DIR}/hru_actor/cpp_code/hru_actor.cpp) - - set(GRU_ACTOR - ${ACTORS_DIR}/gru_actor/gru_actor.cpp) - - set(FILE_ACCESS_ACTOR - ${ACTORS_DIR}/file_access_actor/cpp_code/file_access_actor.cpp - ${ACTORS_DIR}/file_access_actor/cpp_code/forcing_file_info.cpp - ${ACTORS_DIR}/file_access_actor/cpp_code/output_container.cpp) - - set(JOB_ACTOR - ${ACTORS_DIR}/job_actor/job_actor.cpp - ${ACTORS_DIR}/job_actor/GRUinfo.cpp) - - set(MAIN - ${ACTORS_DIR}/main.cpp) - - ####################### START OF COMPILATION ########################################### - # Build NOAH_MP Object - add_library(SUMMA_NOAHMP OBJECT - ${NOAHMP} - ${NRUTIL}) - target_compile_options(SUMMA_NOAHMP PRIVATE ${SUMMA_NOAHMP_OPTIONS}) - # Build SUMMA_COMM Object - add_library(SUMMA_COMM OBJECT - ${COMM_ALL}) - target_compile_options(SUMMA_COMM PRIVATE ${SUMMA_ALL_OPTIONS}) - target_include_directories(SUMMA_COMM PRIVATE ${SUMMA_INCLUDES}) - target_link_libraries(SUMMA_COMM PUBLIC ${SUMMA_LIBS}) - # Build SUMMA Shared Library - add_library(summa SHARED - ${SUMMA_ALL}) - target_compile_options(summa PRIVATE ${SUMMA_ALL_OPTIONS}) - target_include_directories(summa PUBLIC ${SUMMA_INCLUDES}) - target_link_libraries(summa PUBLIC ${SUMMA_LIBS} SUMMA_COMM) - # Build SUMMA Executable - add_executable(${EXEC_NAME} - ${ACTORS_GLOBAL} - ${HRU_ACTOR} - ${GRU_ACTOR} - ${FILE_ACCESS_ACTOR} - ${JOB_ACTOR} - ${SUMMA_ACTOR} - ${SUMMA_CLIENT} - ${SUMMA_SERVER} - ${MAIN}) - set_property(TARGET ${EXEC_NAME} PROPERTY LINKER_LANGUAGE Fortran) - target_include_directories(${EXEC_NAME} PUBLIC ${SUMMA_ACTORS_INCLUDES}) - target_link_libraries( ${EXEC_NAME} ${SUMMA_ACTORS_LIBS}) -endif() \ No newline at end of file diff --git a/build/cmake/be.cmake b/build/cmake/be.cmake new file mode 100644 index 0000000..e716dea --- /dev/null +++ b/build/cmake/be.cmake @@ -0,0 +1,238 @@ +function compile_summa_original() + set(ACTORS_DIR ${PARENT_DIR}/build/source/actors) + set(DRIVER_DIR ${PARENT_DIR}/build/source/driver) + set(DSHARE_DIR ${PARENT_DIR}/build/source/dshare) + set(ENGINE_DIR ${PARENT_DIR}/build/source/engine) + set(HOOKUP_DIR ${PARENT_DIR}/build/source/hookup) + set(NETCDF_DIR ${PARENT_DIR}/build/source/netcdf) + set(NOAHMP_DIR ${PARENT_DIR}/build/source/noah-mp) + set(FILE_ACCESS_DIR ${ACTORS_DIR}/file_access_actor) + set(JOB_ACTOR_DIR ${ACTORS_DIR}/job_actor) + set(HRU_ACTOR_DIR ${ACTORS_DIR}/hru_actor) + set(GRU_ACTOR_DIR ${ACTORS_DIR}/gru_actor) + set(SUMMA_DSHARE_DIR ${PARENT_DIR}/build/summa/build/source/dshare) + set(SUMMA_ENGINE_DIR ${PARENT_DIR}/build/summa/build/source/engine) + set(SUMMA_NOAHMP_DIR ${PARENT_DIR}/build/summa/build/source/noah-mp) + + set(NRUTIL + ${SUMMA_ENGINE_DIR}/nrtype.f90 + ${SUMMA_ENGINE_DIR}/f2008funcs.f90 + ${SUMMA_ENGINE_DIR}/nr_utility.f90) + + set(NRPROC + ${SUMMA_ENGINE_DIR}/expIntegral.f90 + ${SUMMA_ENGINE_DIR}/spline_int.f90) + + SET(HOOKUP + ${HOOKUP_DIR}/ascii_util.f90 + ${HOOKUP_DIR}/summaActors_FileManager.f90) + + SET(DATAMS + ${SUMMA_DSHARE_DIR}/multiconst.f90 + ${DSHARE_DIR}/var_lookup.f90 + ${DSHARE_DIR}/data_types.f90 + ${DSHARE_DIR}/globalData.f90 + ${SUMMA_DSHARE_DIR}/flxMapping.f90) + + SET(DEPENDS_ON_FILEMANAGER + ${SUMMA_DSHARE_DIR}/get_ixname.f90 + ${SUMMA_DSHARE_DIR}/popMetadat.f90 + ${SUMMA_DSHARE_DIR}/outpt_stat.f90) + + SET(UTILMS + ${SUMMA_ENGINE_DIR}/time_utils.f90 + ${ENGINE_DIR}/mDecisions.f90 + ${SUMMA_ENGINE_DIR}/snow_utils.f90 + ${SUMMA_ENGINE_DIR}/soil_utils.f90 + ${SUMMA_ENGINE_DIR}/updatState.f90 + ${SUMMA_ENGINE_DIR}/matrixOper.f90) + + set(SOLVER + ${ENGINE_DIR}/vegPhenlgy.f90 + ${SUMMA_ENGINE_DIR}/diagn_evar.f90 + ${SUMMA_ENGINE_DIR}/stomResist.f90 + ${SUMMA_ENGINE_DIR}/groundwatr.f90 + ${SUMMA_ENGINE_DIR}/vegSWavRad.f90 + ${SUMMA_ENGINE_DIR}/vegNrgFlux.f90 + ${SUMMA_ENGINE_DIR}/ssdNrgFlux.f90 + ${SUMMA_ENGINE_DIR}/vegLiqFlux.f90 + ${SUMMA_ENGINE_DIR}/snowLiqFlx.f90 + ${SUMMA_ENGINE_DIR}/soilLiqFlx.f90 + ${SUMMA_ENGINE_DIR}/bigAquifer.f90 + ${SUMMA_ENGINE_DIR}/computFlux.f90 + ${SUMMA_ENGINE_DIR}/computResid.f90 + ${SUMMA_ENGINE_DIR}/computJacob.f90 + ${SUMMA_ENGINE_DIR}/eval8summa.f90 + ${SUMMA_ENGINE_DIR}/summaSolve.f90 + ${SUMMA_ENGINE_DIR}/systemSolv.f90 + ${SUMMA_ENGINE_DIR}/varSubstep.f90 + ${SUMMA_ENGINE_DIR}/opSplittin.f90 + ${ENGINE_DIR}/coupled_em.f90) + + set(INTERFACE + ${ACTORS_DIR}/global/cppwrap_datatypes.f90 + ${ACTORS_DIR}/global/cppwrap_auxiliary.f90 + ${ACTORS_DIR}/global/cppwrap_metadata.f90) + + set(FILE_ACCESS_INTERFACE + ${FILE_ACCESS_DIR}/fortran_code/output_structure.f90 + ${FILE_ACCESS_DIR}/fortran_code/cppwrap_fileAccess.f90 + ${FILE_ACCESS_DIR}/fortran_code/read_attribute.f90 + ${FILE_ACCESS_DIR}/fortran_code/read_forcing.f90 + ${FILE_ACCESS_DIR}/fortran_code/read_param.f90 + ${FILE_ACCESS_DIR}/fortran_code/read_initcond.f90 + ${FILE_ACCESS_DIR}/fortran_code/writeOutputFromOutputStructure.f90 + ${FILE_ACCESS_DIR}/fortran_code/write_to_netcdf.f90) + + set(JOB_INTERFACE + ${JOB_ACTOR_DIR}/job_actor.f90) + + set(HRU_INTERFACE + ${HRU_ACTOR_DIR}/fortran_code/model_run.f90 + ${HRU_ACTOR_DIR}/fortran_code/setup_hru.f90 + ${HRU_ACTOR_DIR}/fortran_code/restart.f90 + ${HRU_ACTOR_DIR}/fortran_code/hru_actor.f90 + ${HRU_ACTOR_DIR}/fortran_code/init_hru_actor.f90 + ${HRU_ACTOR_DIR}/fortran_code/outputStrucWrite.f90 + ${HRU_ACTOR_DIR}/fortran_code/hru_writeOutput.f90) + + set(GRU_INTERFACE + ${GRU_ACTOR_DIR}/gru_actor.f90) + + set(PRELIM + ${SUMMA_ENGINE_DIR}/conv_funcs.f90 + ${SUMMA_ENGINE_DIR}/sunGeomtry.f90 + ${SUMMA_ENGINE_DIR}/convE2Temp.f90 + ${ENGINE_DIR}/allocspaceActors.f90 + ${ENGINE_DIR}/alloc_fileAccess.f90 + ${ENGINE_DIR}/checkStruc.f90 + ${SUMMA_ENGINE_DIR}/childStruc.f90 + ${ENGINE_DIR}/ffile_info.f90 + ${ENGINE_DIR}/read_dimension.f90 + ${ENGINE_DIR}/read_pinit.f90 + ${SUMMA_ENGINE_DIR}/pOverwrite.f90 + ${SUMMA_ENGINE_DIR}/paramCheck.f90 + ${ENGINE_DIR}/check_icondActors.f90) + + set(NOAHMP + ${SUMMA_NOAHMP_DIR}/module_model_constants.F + ${SUMMA_NOAHMP_DIR}/module_sf_noahutl.F + ${SUMMA_NOAHMP_DIR}/module_sf_noahlsm.F + ${SUMMA_NOAHMP_DIR}/module_sf_noahmplsm.F) + + set(MODRUN + ${SUMMA_ENGINE_DIR}/indexState.f90 + ${SUMMA_ENGINE_DIR}/getVectorz.f90 + ${SUMMA_ENGINE_DIR}/updateVars.f90 + ${SUMMA_ENGINE_DIR}/var_derive.f90 + ${ENGINE_DIR}/derivforce.f90 + ${ENGINE_DIR}/sundials/t2enthalpy.f90 + ${SUMMA_ENGINE_DIR}/snowAlbedo.f90 + ${SUMMA_ENGINE_DIR}/canopySnow.f90 + ${SUMMA_ENGINE_DIR}/tempAdjust.f90 + ${SUMMA_ENGINE_DIR}/snwCompact.f90 + ${SUMMA_ENGINE_DIR}/layerMerge.f90 + ${SUMMA_ENGINE_DIR}/layerDivide.f90 + ${SUMMA_ENGINE_DIR}/volicePack.f90 + ${SUMMA_ENGINE_DIR}/qTimeDelay.f90) + + set(NETCDF + ${NETCDF_DIR}/netcdf_util.f90 + ${NETCDF_DIR}/def_output.f90 + ${NETCDF_DIR}/writeOutput.f90 + ${NETCDF_DIR}/read_icondActors.f90) + + set(DRIVER + ${DRIVER_DIR}/summaActors_type.f90 + ${DRIVER_DIR}/summaActors_util.f90 + ${DRIVER_DIR}/summaActors_globalData.f90 + ${DRIVER_DIR}/summaActors_alarms.f90) + + set(COMM_ALL + ${NRPROC} + ${DATAMS} + ${INTERFACE} + ${HOOKUP} + ${DEPENDS_ON_FILEMANAGER} + ${UTILMS}) + + set(SUMMA_ALL + ${NETCDF} + ${PRELIM} + ${MODRUN} + ${SOLVER} + ${DRIVER} + ${JOB_INTERFACE} + ${FILE_ACCESS_INTERFACE} + ${HRU_INTERFACE} + ${GRU_INTERFACE}) + + set(ACTORS_GLOBAL + ${ACTORS_DIR}/global/global.cpp + ${ACTORS_DIR}/global/timing_info.cpp + ${ACTORS_DIR}/global/message_atoms.cpp + ${ACTORS_DIR}/global/settings_functions.cpp + ${ACTORS_DIR}/global/auxiliary.cpp) + + set(SUMMA_ACTOR + ${ACTORS_DIR}/summa_actor/summa_actor.cpp + ${ACTORS_DIR}/summa_actor/summa_client.cpp + ${ACTORS_DIR}/summa_actor/summa_server.cpp + ${ACTORS_DIR}/summa_actor/summa_backup_server.cpp + ${ACTORS_DIR}/summa_actor/batch/batch.cpp + ${ACTORS_DIR}/summa_actor/batch/batch_container.cpp + ${ACTORS_DIR}/summa_actor/client/client.cpp + ${ACTORS_DIR}/summa_actor/client/client_container.cpp) + + set(HRU_ACTOR + ${ACTORS_DIR}/hru_actor/cpp_code/hru_actor.cpp) + + set(GRU_ACTOR + ${ACTORS_DIR}/gru_actor/gru_actor.cpp) + + set(FILE_ACCESS_ACTOR + ${ACTORS_DIR}/file_access_actor/cpp_code/file_access_actor.cpp + ${ACTORS_DIR}/file_access_actor/cpp_code/forcing_file_info.cpp + ${ACTORS_DIR}/file_access_actor/cpp_code/output_container.cpp) + + set(JOB_ACTOR + ${ACTORS_DIR}/job_actor/job_actor.cpp + ${ACTORS_DIR}/job_actor/GRUinfo.cpp) + + set(MAIN + ${ACTORS_DIR}/main.cpp) + + ####################### START OF COMPILATION ########################################### + # Build NOAH_MP Object + add_library(SUMMA_NOAHMP OBJECT + ${NOAHMP} + ${NRUTIL}) + target_compile_options(SUMMA_NOAHMP PRIVATE ${SUMMA_NOAHMP_OPTIONS}) + # Build SUMMA_COMM Object + add_library(SUMMA_COMM OBJECT + ${COMM_ALL}) + target_compile_options(SUMMA_COMM PRIVATE ${SUMMA_ALL_OPTIONS}) + target_include_directories(SUMMA_COMM PRIVATE ${SUMMA_INCLUDES}) + target_link_libraries(SUMMA_COMM PUBLIC ${SUMMA_LIBS}) + # Build SUMMA Shared Library + add_library(summa SHARED + ${SUMMA_ALL}) + target_compile_options(summa PRIVATE ${SUMMA_ALL_OPTIONS}) + target_include_directories(summa PUBLIC ${SUMMA_INCLUDES}) + target_link_libraries(summa PUBLIC ${SUMMA_LIBS} SUMMA_COMM) + # Build SUMMA Executable + add_executable(${EXEC_NAME} + ${ACTORS_GLOBAL} + ${HRU_ACTOR} + ${GRU_ACTOR} + ${FILE_ACCESS_ACTOR} + ${JOB_ACTOR} + ${SUMMA_ACTOR} + ${SUMMA_CLIENT} + ${SUMMA_SERVER} + ${MAIN}) + set_property(TARGET ${EXEC_NAME} PROPERTY LINKER_LANGUAGE Fortran) + target_include_directories(${EXEC_NAME} PUBLIC ${SUMMA_ACTORS_INCLUDES}) + target_link_libraries( ${EXEC_NAME} ${SUMMA_ACTORS_LIBS}) + +endfunction() \ No newline at end of file diff --git a/build/cmake/ida.cmake b/build/cmake/ida.cmake new file mode 100644 index 0000000..03830f5 --- /dev/null +++ b/build/cmake/ida.cmake @@ -0,0 +1,247 @@ +function(compile_with_ida) + + + + set(ACTORS_DIR ${PARENT_DIR}/build/source/actors) + set(DRIVER_DIR ${PARENT_DIR}/build/source/driver) + set(DSHARE_DIR ${PARENT_DIR}/build/source/dshare) + set(ENGINE_DIR ${PARENT_DIR}/build/source/engine) + set(HOOKUP_DIR ${PARENT_DIR}/build/source/hookup) + set(NETCDF_DIR ${PARENT_DIR}/build/source/netcdf) + set(NOAHMP_DIR ${PARENT_DIR}/build/source/noah-mp) + set(FILE_ACCESS_DIR ${ACTORS_DIR}/file_access_actor) + set(JOB_ACTOR_DIR ${ACTORS_DIR}/job_actor) + set(HRU_ACTOR_DIR ${ACTORS_DIR}/hru_actor) + set(GRU_ACTOR_DIR ${ACTORS_DIR}/gru_actor) + set(SUMMA_DSHARE_DIR ${PARENT_DIR}/build/summa-sundials/build/source/dshare) + set(SUMMA_ENGINE_DIR ${PARENT_DIR}/build/summa-sundials/build/source/engine) + set(SUMMA_NOAHMP_DIR ${PARENT_DIR}/build/summa-sundials/build/source/noah-mp) + + set(NRUTIL + ${SUMMA_ENGINE_DIR}/nrtype.f90 + ${SUMMA_ENGINE_DIR}/f2008funcs.f90 + ${SUMMA_ENGINE_DIR}/nr_utility.f90) + + set(NRPROC + ${SUMMA_ENGINE_DIR}/expIntegral.f90 + ${SUMMA_ENGINE_DIR}/spline_int.f90) + + SET(HOOKUP + ${HOOKUP_DIR}/ascii_util.f90 + ${HOOKUP_DIR}/summaActors_FileManager.f90) + + SET(DATAMS + ${SUMMA_DSHARE_DIR}/multiconst.f90 + ${SUMMA_DSHARE_DIR}/var_lookup.f90 + ${DSHARE_DIR}/data_types.f90 + ${DSHARE_DIR}/globalData.f90 + ${SUMMA_DSHARE_DIR}/flxMapping.f90) + + SET(DEPENDS_ON_FILEMANAGER + ${SUMMA_DSHARE_DIR}/get_ixname.f90 + ${SUMMA_DSHARE_DIR}/popMetadat.f90 + ${SUMMA_DSHARE_DIR}/outpt_stat.f90) + + SET(UTILMS + ${SUMMA_ENGINE_DIR}/time_utils.f90 + ${ENGINE_DIR}/sundials/mDecisions.f90 + ${SUMMA_ENGINE_DIR}/snow_utils.f90 + ${SUMMA_ENGINE_DIR}/soil_utils.f90 + ${SUMMA_ENGINE_DIR}/soil_utilsAddSundials.f90 + ${SUMMA_ENGINE_DIR}/updatState.f90 + ${SUMMA_ENGINE_DIR}/updatStateSundials.f90 + ${SUMMA_ENGINE_DIR}/matrixOper.f90) + + set(SOLVER + ${ENGINE_DIR}/vegPhenlgy.f90 + ${SUMMA_ENGINE_DIR}/diagn_evar.f90 + ${SUMMA_ENGINE_DIR}/stomResist.f90 + ${SUMMA_ENGINE_DIR}/groundwatr.f90 + ${SUMMA_ENGINE_DIR}/vegSWavRad.f90 + ${SUMMA_ENGINE_DIR}/vegNrgFlux.f90 + ${SUMMA_ENGINE_DIR}/ssdNrgFlux.f90 + ${SUMMA_ENGINE_DIR}/vegLiqFlux.f90 + ${SUMMA_ENGINE_DIR}/snowLiqFlx.f90 + ${SUMMA_ENGINE_DIR}/soilLiqFlx.f90 + ${SUMMA_ENGINE_DIR}/bigAquifer.f90 + ${SUMMA_ENGINE_DIR}/computFlux.f90 + ${SUMMA_ENGINE_DIR}/type4IDA.f90 + ${SUMMA_ENGINE_DIR}/tol4IDA.f90 + ${SUMMA_ENGINE_DIR}/computEnthalpy.f90 + ${SUMMA_ENGINE_DIR}/computHeatCap.f90 + ${SUMMA_ENGINE_DIR}/computThermConduct.f90 + ${SUMMA_ENGINE_DIR}/computResid.f90 + ${SUMMA_ENGINE_DIR}/computJacob.f90 + ${SUMMA_ENGINE_DIR}/eval8summa.f90 + ${SUMMA_ENGINE_DIR}/summaSolve.f90 + ${SUMMA_ENGINE_DIR}/systemSolv.f90 + ${SUMMA_ENGINE_DIR}/computResidSundials.f90 + ${SUMMA_ENGINE_DIR}/eval8summaSundials.f90 + ${SUMMA_ENGINE_DIR}/computJacobSundials.f90 + ${SUMMA_ENGINE_DIR}/computSnowDepth.f90 + ${SUMMA_ENGINE_DIR}/summaSolveSundialsIDA.f90 + ${SUMMA_ENGINE_DIR}/systemSolvSundials.f90 + ${SUMMA_ENGINE_DIR}/varSubstep.f90 + ${SUMMA_ENGINE_DIR}/varSubstepSundials.f90 + ${SUMMA_ENGINE_DIR}/opSplittin.f90 + ${ENGINE_DIR}/sundials/coupled_em.f90) + + set(INTERFACE + ${ACTORS_DIR}/global/cppwrap_datatypes.f90 + ${ACTORS_DIR}/global/cppwrap_auxiliary.f90 + ${ACTORS_DIR}/global/cppwrap_metadata.f90) + + set(FILE_ACCESS_INTERFACE + ${FILE_ACCESS_DIR}/fortran_code/output_structure.f90 + ${FILE_ACCESS_DIR}/fortran_code/cppwrap_fileAccess.f90 + ${FILE_ACCESS_DIR}/fortran_code/read_attribute.f90 + ${FILE_ACCESS_DIR}/fortran_code/read_forcing.f90 + ${FILE_ACCESS_DIR}/fortran_code/read_param.f90 + ${FILE_ACCESS_DIR}/fortran_code/read_initcond.f90 + ${FILE_ACCESS_DIR}/fortran_code/writeOutputFromOutputStructure.f90 + ${FILE_ACCESS_DIR}/fortran_code/write_to_netcdf.f90) + + set(JOB_INTERFACE + ${JOB_ACTOR_DIR}/job_actor.f90) + + set(HRU_INTERFACE + ${HRU_ACTOR_DIR}/fortran_code/model_run.f90 + ${HRU_ACTOR_DIR}/fortran_code/setup_hru.f90 + ${HRU_ACTOR_DIR}/fortran_code/restart.f90 + ${HRU_ACTOR_DIR}/fortran_code/hru_actor.f90 + ${HRU_ACTOR_DIR}/fortran_code/init_hru_actor.f90 + ${HRU_ACTOR_DIR}/fortran_code/outputStrucWrite.f90 + ${HRU_ACTOR_DIR}/fortran_code/hru_writeOutput.f90) + + set(PRELIM + ${SUMMA_ENGINE_DIR}/conv_funcs.f90 + ${SUMMA_ENGINE_DIR}/sunGeomtry.f90 + ${SUMMA_ENGINE_DIR}/convE2Temp.f90 + ${ENGINE_DIR}/allocspaceActors.f90 + ${ENGINE_DIR}/alloc_fileAccess.f90 + ${SUMMA_ENGINE_DIR}/checkStruc.f90 + ${SUMMA_ENGINE_DIR}/childStruc.f90 + ${ENGINE_DIR}/ffile_info.f90 + ${ENGINE_DIR}/read_dimension.f90 + ${ENGINE_DIR}/read_pinit.f90 + ${SUMMA_ENGINE_DIR}/pOverwrite.f90 + ${SUMMA_ENGINE_DIR}/paramCheck.f90 + ${ENGINE_DIR}/check_icondActors.f90) + + set(NOAHMP + ${SUMMA_NOAHMP_DIR}/module_model_constants.F + ${SUMMA_NOAHMP_DIR}/module_sf_noahutl.F + ${SUMMA_NOAHMP_DIR}/module_sf_noahlsm.F + ${SUMMA_NOAHMP_DIR}/module_sf_noahmplsm.F) + + set(MODRUN + ${SUMMA_ENGINE_DIR}/indexState.f90 + ${SUMMA_ENGINE_DIR}/getVectorz.f90 + ${SUMMA_ENGINE_DIR}/t2enthalpy.f90 + ${SUMMA_ENGINE_DIR}/updateVars.f90 + ${SUMMA_ENGINE_DIR}/updateVarsSundials.f90 + ${SUMMA_ENGINE_DIR}/var_derive.f90 + ${ENGINE_DIR}/derivforce.f90 + ${SUMMA_ENGINE_DIR}/snowAlbedo.f90 + ${SUMMA_ENGINE_DIR}/canopySnow.f90 + ${SUMMA_ENGINE_DIR}/tempAdjust.f90 + ${SUMMA_ENGINE_DIR}/snwCompact.f90 + ${SUMMA_ENGINE_DIR}/layerMerge.f90 + ${SUMMA_ENGINE_DIR}/layerDivide.f90 + ${SUMMA_ENGINE_DIR}/volicePack.f90 + ${SUMMA_ENGINE_DIR}/qTimeDelay.f90) + + set(NETCDF + ${NETCDF_DIR}/netcdf_util.f90 + ${NETCDF_DIR}/def_output.f90 + ${NETCDF_DIR}/writeOutput.f90 + ${NETCDF_DIR}/read_icondActors.f90) + + set(DRIVER + ${DRIVER_DIR}/summaActors_type.f90 + ${DRIVER_DIR}/summaActors_util.f90 + ${DRIVER_DIR}/summaActors_globalData.f90 + ${DRIVER_DIR}/summaActors_alarms.f90) + + set(COMM_ALL + ${NRPROC} + ${DATAMS} + ${INTERFACE} + ${HOOKUP} + ${DEPENDS_ON_FILEMANAGER} + ${UTILMS}) + + set(SUMMA_ALL + ${NETCDF} + ${PRELIM} + ${MODRUN} + ${SOLVER} + ${DRIVER} + ${JOB_INTERFACE} + ${FILE_ACCESS_INTERFACE} + ${HRU_INTERFACE} + ${GRU_INTERFACE}) + + set(ACTORS_GLOBAL + ${ACTORS_DIR}/global/global.cpp + ${ACTORS_DIR}/global/timing_info.cpp + ${ACTORS_DIR}/global/message_atoms.cpp + ${ACTORS_DIR}/global/settings_functions.cpp + ${ACTORS_DIR}/global/auxiliary.cpp) + + set(SUMMA_ACTOR + ${ACTORS_DIR}/summa_actor/summa_actor.cpp + ${ACTORS_DIR}/summa_actor/summa_client.cpp + ${ACTORS_DIR}/summa_actor/summa_server.cpp + ${ACTORS_DIR}/summa_actor/summa_backup_server.cpp + ${ACTORS_DIR}/summa_actor/batch/batch.cpp + ${ACTORS_DIR}/summa_actor/batch/batch_container.cpp + ${ACTORS_DIR}/summa_actor/client/client.cpp + ${ACTORS_DIR}/summa_actor/client/client_container.cpp) + + set(HRU_ACTOR + ${ACTORS_DIR}/hru_actor/cpp_code/hru_actor.cpp) + + set(FILE_ACCESS_ACTOR + ${ACTORS_DIR}/file_access_actor/cpp_code/file_access_actor.cpp + ${ACTORS_DIR}/file_access_actor/cpp_code/forcing_file_info.cpp + ${ACTORS_DIR}/file_access_actor/cpp_code/output_container.cpp) + + set(JOB_ACTOR + ${ACTORS_DIR}/job_actor/job_actor.cpp + ${ACTORS_DIR}/job_actor/GRUinfo.cpp) + + set(MAIN + ${ACTORS_DIR}/main.cpp) + + add_library(SUMMA_NOAHMP OBJECT + ${NOAHMP} + ${NRUTIL}) + target_compile_options(SUMMA_NOAHMP PRIVATE ${SUMMA_NOAHMP_OPTIONS}) + add_library(SUMMA_COMM OBJECT + ${COMM_ALL}) + target_compile_options(SUMMA_COMM PRIVATE ${SUMMA_ALL_OPTIONS}) + target_include_directories(SUMMA_COMM PRIVATE ${SUMMA_INCLUDES}) + target_link_libraries(SUMMA_COMM PUBLIC ${SUMMA_LIBS}) + + # Build SUMMA Shared Library + add_library(summa SHARED + ${SUMMA_ALL}) + target_compile_options(summa PRIVATE ${SUMMA_ALL_OPTIONS}) + target_include_directories(summa PUBLIC ${SUMMA_INCLUDES}) + target_link_libraries(summa PUBLIC ${SUMMA_LIBS} SUMMA_COMM) + + # Build Summa-Actors executable + add_executable(${EXEC_NAME} + ${ACTORS_GLOBAL} + ${HRU_ACTOR} + ${FILE_ACCESS_ACTOR} + ${JOB_ACTOR} + ${SUMMA_ACTOR} + ${SUMMA_CLIENT} + ${SUMMA_SERVER} + ${MAIN}) + set_property(TARGET ${EXEC_NAME} PROPERTY LINKER_LANGUAGE Fortran) + target_include_directories(${EXEC_NAME} PUBLIC ${SUMMA_ACTORS_INCLUDES}) + target_link_libraries( ${EXEC_NAME} ${SUMMA_ACTORS_LIBS}) +endfunction() \ No newline at end of file diff --git a/build/cmake/kinsol.cmake b/build/cmake/kinsol.cmake new file mode 100644 index 0000000..c3e9ffb --- /dev/null +++ b/build/cmake/kinsol.cmake @@ -0,0 +1,287 @@ +##################################################################### +# Summa-Actors 2023 - Builds the Summa-Actors executable for Kinsol +##################################################################### +function(compile_with_kinsol PARENT_DIR, DIR_SUNDIALS) + message("DIR_SUNDIALS: ${DIR_SUNDIALS}") + # Building Summa with sundials on local machine + link_directories(${DIR_SUNDIALS}/lib) + set(CMAKE_BUILD_RPATH "${DIR_SUNDIALS}/lib:/usr/local/lib") + set(SUMMA_INCLUDES + "/usr/include" + "${DIR_SUNDIALS}/include" + "${DIR_SUNDIALS}/fortran" + ${netCDF_INCLUDES} + ${LAPACK_INCLUDES}) + + set(SUMMA_LIBS + -lsundials_fkinsol_mod + -lsundials_fnvecserial_mod + -lsundials_fsunmatrixdense_mod + -lsundials_fsunlinsoldense_mod + -lsundials_fsunnonlinsolnewton_mod + -lnetcdff + -lopenblas + SUMMA_NOAHMP) + + set(SUMMA_ACTORS_INCLUDES + ${CAF_INCLUDES} + ${netCDF_INCLUDES} + ${LAPACK_INCLUDES} + "${DIR_SUNDIALS}/include" + "${PARENT_DIR}/build/includes/global" + "${PARENT_DIR}/build/includes/summa_actor" + "${PARENT_DIR}/build/includes/gru_actor" + "${PARENT_DIR}/build/includes/job_actor" + "${PARENT_DIR}/build/includes/file_access_actor" + "${PARENT_DIR}/build/includes/hru_actor") + + set(SUMMA_ACTORS_LIBS + -lopenblas + -lcaf_core + -lcaf_io + summa + -lnetcdff + -lsundials_fkinsol_mod + -lsundials_fnvecserial_mod + -lsundials_fsunmatrixdense_mod + -lsundials_fsunlinsoldense_mod + -lsundials_fsunnonlinsolnewton_mod) + + + set(ACTORS_DIR ${PARENT_DIR}/build/source/actors) + set(DRIVER_DIR ${PARENT_DIR}/build/source/driver) + set(DSHARE_DIR ${PARENT_DIR}/build/source/dshare) + set(ENGINE_DIR ${PARENT_DIR}/build/source/engine) + set(HOOKUP_DIR ${PARENT_DIR}/build/source/hookup) + set(NETCDF_DIR ${PARENT_DIR}/build/source/netcdf) + set(NOAHMP_DIR ${PARENT_DIR}/build/source/noah-mp) + set(FILE_ACCESS_DIR ${ACTORS_DIR}/file_access_actor) + set(JOB_ACTOR_DIR ${ACTORS_DIR}/job_actor) + set(HRU_ACTOR_DIR ${ACTORS_DIR}/hru_actor) + set(GRU_ACTOR_DIR ${ACTORS_DIR}/gru_actor) + set(SUMMA_DSHARE_DIR ${PARENT_DIR}/build/summa/build/source/dshare) + set(SUMMA_ENGINE_DIR ${PARENT_DIR}/build/summa/build/source/engine) + set(SUMMA_NOAHMP_DIR ${PARENT_DIR}/build/summa/build/source/noah-mp) + + set(NRUTIL + ${SUMMA_ENGINE_DIR}/nrtype.f90 + ${SUMMA_ENGINE_DIR}/f2008funcs.f90 + ${SUMMA_ENGINE_DIR}/nr_utility.f90) + + set(NRPROC + ${SUMMA_ENGINE_DIR}/expIntegral.f90 + ${SUMMA_ENGINE_DIR}/spline_int.f90) + + SET(HOOKUP + ${HOOKUP_DIR}/ascii_util.f90 + ${HOOKUP_DIR}/summaActors_FileManager.f90) + + SET(DATAMS + ${SUMMA_DSHARE_DIR}/multiconst.f90 + ${DSHARE_DIR}/var_lookup.f90 + ${DSHARE_DIR}/data_types.f90 + ${DSHARE_DIR}/globalData.f90 + ${SUMMA_DSHARE_DIR}/flxMapping.f90 + ${SUMMA_DSHARE_DIR}/kinsol_user_data_type.f90) + + SET(DEPENDS_ON_FILEMANAGER + ${SUMMA_DSHARE_DIR}/get_ixname.f90 + ${SUMMA_DSHARE_DIR}/popMetadat.f90 + ${SUMMA_DSHARE_DIR}/outpt_stat.f90) + + SET(UTILMS + ${SUMMA_ENGINE_DIR}/time_utils.f90 + ${ENGINE_DIR}/mDecisions.f90 + ${SUMMA_ENGINE_DIR}/snow_utils.f90 + ${SUMMA_ENGINE_DIR}/soil_utils.f90 + ${SUMMA_ENGINE_DIR}/updatState.f90 + ${SUMMA_ENGINE_DIR}/matrixOper.f90) + + set(SOLVER + ${ENGINE_DIR}/vegPhenlgy.f90 + ${SUMMA_ENGINE_DIR}/diagn_evar.f90 + ${SUMMA_ENGINE_DIR}/stomResist.f90 + ${SUMMA_ENGINE_DIR}/groundwatr.f90 + ${SUMMA_ENGINE_DIR}/vegSWavRad.f90 + ${SUMMA_ENGINE_DIR}/vegNrgFlux.f90 + ${SUMMA_ENGINE_DIR}/ssdNrgFlux.f90 + ${SUMMA_ENGINE_DIR}/vegLiqFlux.f90 + ${SUMMA_ENGINE_DIR}/snowLiqFlx.f90 + ${SUMMA_ENGINE_DIR}/soilLiqFlx.f90 + ${SUMMA_ENGINE_DIR}/bigAquifer.f90 + ${SUMMA_ENGINE_DIR}/computFlux.f90 + ${SUMMA_ENGINE_DIR}/computResid.f90 + ${SUMMA_ENGINE_DIR}/computJacob.f90 + ${SUMMA_ENGINE_DIR}/eval8summa.f90 + ${SUMMA_ENGINE_DIR}/summaSolve.f90 + ${SUMMA_ENGINE_DIR}/systemSolv.f90 + ${SUMMA_ENGINE_DIR}/varSubstep.f90 + ${SUMMA_ENGINE_DIR}/opSplittin.f90 + ${ENGINE_DIR}/coupled_em.f90) + + set(INTERFACE + ${ACTORS_DIR}/global/cppwrap_datatypes.f90 + ${ACTORS_DIR}/global/cppwrap_auxiliary.f90 + ${ACTORS_DIR}/global/cppwrap_metadata.f90) + + set(FILE_ACCESS_INTERFACE + ${FILE_ACCESS_DIR}/fortran_code/output_structure.f90 + ${FILE_ACCESS_DIR}/fortran_code/cppwrap_fileAccess.f90 + ${FILE_ACCESS_DIR}/fortran_code/read_attribute.f90 + ${FILE_ACCESS_DIR}/fortran_code/read_forcing.f90 + ${FILE_ACCESS_DIR}/fortran_code/read_param.f90 + ${FILE_ACCESS_DIR}/fortran_code/read_initcond.f90 + ${FILE_ACCESS_DIR}/fortran_code/writeOutputFromOutputStructure.f90 + ${FILE_ACCESS_DIR}/fortran_code/write_to_netcdf.f90) + + set(JOB_INTERFACE + ${JOB_ACTOR_DIR}/job_actor.f90) + + set(HRU_INTERFACE + ${HRU_ACTOR_DIR}/fortran_code/model_run.f90 + ${HRU_ACTOR_DIR}/fortran_code/setup_hru.f90 + ${HRU_ACTOR_DIR}/fortran_code/restart.f90 + ${HRU_ACTOR_DIR}/fortran_code/hru_actor.f90 + ${HRU_ACTOR_DIR}/fortran_code/init_hru_actor.f90 + ${HRU_ACTOR_DIR}/fortran_code/outputStrucWrite.f90 + ${HRU_ACTOR_DIR}/fortran_code/hru_writeOutput.f90) + + set(GRU_INTERFACE + ${GRU_ACTOR_DIR}/gru_actor.f90) + + set(PRELIM + ${SUMMA_ENGINE_DIR}/conv_funcs.f90 + ${SUMMA_ENGINE_DIR}/sunGeomtry.f90 + ${SUMMA_ENGINE_DIR}/convE2Temp.f90 + ${ENGINE_DIR}/allocspaceActors.f90 + ${ENGINE_DIR}/alloc_fileAccess.f90 + ${ENGINE_DIR}/checkStruc.f90 + ${SUMMA_ENGINE_DIR}/childStruc.f90 + ${ENGINE_DIR}/ffile_info.f90 + ${ENGINE_DIR}/read_dimension.f90 + ${ENGINE_DIR}/read_pinit.f90 + ${SUMMA_ENGINE_DIR}/pOverwrite.f90 + ${SUMMA_ENGINE_DIR}/paramCheck.f90 + ${ENGINE_DIR}/check_icondActors.f90) + + set(NOAHMP + ${SUMMA_NOAHMP_DIR}/module_model_constants.F + ${SUMMA_NOAHMP_DIR}/module_sf_noahutl.F + ${SUMMA_NOAHMP_DIR}/module_sf_noahlsm.F + ${SUMMA_NOAHMP_DIR}/module_sf_noahmplsm.F) + + set(MODRUN + ${SUMMA_ENGINE_DIR}/indexState.f90 + ${SUMMA_ENGINE_DIR}/getVectorz.f90 + ${SUMMA_ENGINE_DIR}/updateVars.f90 + ${SUMMA_ENGINE_DIR}/var_derive.f90 + ${ENGINE_DIR}/derivforce.f90 + ${ENGINE_DIR}/sundials/t2enthalpy.f90 + ${SUMMA_ENGINE_DIR}/snowAlbedo.f90 + ${SUMMA_ENGINE_DIR}/canopySnow.f90 + ${SUMMA_ENGINE_DIR}/tempAdjust.f90 + ${SUMMA_ENGINE_DIR}/snwCompact.f90 + ${SUMMA_ENGINE_DIR}/layerMerge.f90 + ${SUMMA_ENGINE_DIR}/layerDivide.f90 + ${SUMMA_ENGINE_DIR}/volicePack.f90 + ${SUMMA_ENGINE_DIR}/qTimeDelay.f90) + + set(NETCDF + ${NETCDF_DIR}/netcdf_util.f90 + ${NETCDF_DIR}/def_output.f90 + ${NETCDF_DIR}/writeOutput.f90 + ${NETCDF_DIR}/read_icondActors.f90) + + set(DRIVER + ${DRIVER_DIR}/summaActors_type.f90 + ${DRIVER_DIR}/summaActors_util.f90 + ${DRIVER_DIR}/summaActors_globalData.f90 + ${DRIVER_DIR}/summaActors_alarms.f90) + + set(COMM_ALL + ${NRPROC} + ${DATAMS} + ${INTERFACE} + ${HOOKUP} + ${DEPENDS_ON_FILEMANAGER} + ${UTILMS}) + + set(SUMMA_ALL + ${NETCDF} + ${PRELIM} + ${MODRUN} + ${SOLVER} + ${DRIVER} + ${JOB_INTERFACE} + ${FILE_ACCESS_INTERFACE} + ${HRU_INTERFACE} + ${GRU_INTERFACE}) + + set(ACTORS_GLOBAL + ${ACTORS_DIR}/global/global.cpp + ${ACTORS_DIR}/global/timing_info.cpp + ${ACTORS_DIR}/global/message_atoms.cpp + ${ACTORS_DIR}/global/settings_functions.cpp + ${ACTORS_DIR}/global/auxiliary.cpp) + + set(SUMMA_ACTOR + ${ACTORS_DIR}/summa_actor/summa_actor.cpp + ${ACTORS_DIR}/summa_actor/summa_client.cpp + ${ACTORS_DIR}/summa_actor/summa_server.cpp + ${ACTORS_DIR}/summa_actor/summa_backup_server.cpp + ${ACTORS_DIR}/summa_actor/batch/batch.cpp + ${ACTORS_DIR}/summa_actor/batch/batch_container.cpp + ${ACTORS_DIR}/summa_actor/client/client.cpp + ${ACTORS_DIR}/summa_actor/client/client_container.cpp) + + set(HRU_ACTOR + ${ACTORS_DIR}/hru_actor/cpp_code/hru_actor.cpp) + + set(GRU_ACTOR + ${ACTORS_DIR}/gru_actor/gru_actor.cpp) + + set(FILE_ACCESS_ACTOR + ${ACTORS_DIR}/file_access_actor/cpp_code/file_access_actor.cpp + ${ACTORS_DIR}/file_access_actor/cpp_code/forcing_file_info.cpp + ${ACTORS_DIR}/file_access_actor/cpp_code/output_container.cpp) + + set(JOB_ACTOR + ${ACTORS_DIR}/job_actor/job_actor.cpp + ${ACTORS_DIR}/job_actor/GRUinfo.cpp) + + set(MAIN + ${ACTORS_DIR}/main.cpp) + + ####################### START OF COMPILATION ########################################### + # Build NOAH_MP Object + add_library(SUMMA_NOAHMP OBJECT + ${NOAHMP} + ${NRUTIL}) + target_compile_options(SUMMA_NOAHMP PRIVATE ${SUMMA_NOAHMP_OPTIONS}) + # Build SUMMA_COMM Object + add_library(SUMMA_COMM OBJECT + ${COMM_ALL}) + target_compile_options(SUMMA_COMM PRIVATE ${SUMMA_ALL_OPTIONS}) + target_include_directories(SUMMA_COMM PRIVATE ${SUMMA_INCLUDES}) + target_link_libraries(SUMMA_COMM PUBLIC ${SUMMA_LIBS}) + # Build SUMMA Shared Library + add_library(summa SHARED + ${SUMMA_ALL}) + target_compile_options(summa PRIVATE ${SUMMA_ALL_OPTIONS}) + target_include_directories(summa PUBLIC ${SUMMA_INCLUDES}) + target_link_libraries(summa PUBLIC ${SUMMA_LIBS} SUMMA_COMM) + # Build SUMMA Executable + add_executable(${EXEC_NAME} + ${ACTORS_GLOBAL} + ${HRU_ACTOR} + ${GRU_ACTOR} + ${FILE_ACCESS_ACTOR} + ${JOB_ACTOR} + ${SUMMA_ACTOR} + ${SUMMA_CLIENT} + ${SUMMA_SERVER} + ${MAIN}) + set_property(TARGET ${EXEC_NAME} PROPERTY LINKER_LANGUAGE Fortran) + target_include_directories(${EXEC_NAME} PUBLIC ${SUMMA_ACTORS_INCLUDES}) + target_link_libraries( ${EXEC_NAME} ${SUMMA_ACTORS_LIBS}) +endfunction() \ No newline at end of file diff --git a/build/summa_sundials b/build/summa_sundials new file mode 160000 index 0000000..482a9b5 --- /dev/null +++ b/build/summa_sundials @@ -0,0 +1 @@ +Subproject commit 482a9b5cfa03b2b5fe54ea99308cd05417bd8d8e -- GitLab