diff --git a/CMakeLists.txt b/CMakeLists.txt index 0b674ed..407a5d6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,213 +1,218 @@ #################################################### # # # SpecMiCP : CMakeLists.txt # # # #################################################### project(specmicp) cmake_minimum_required(VERSION 2.8.8) # For an explanation of the options see the INSTALL file option(SPECMICP_USE_OPENMP "Thread parallelisation of specmicp instances if available" ON) option(SPECMICP_BUILD_STATIC "Build static libraries" OFF) +option(SPECMICP_BUILD_EXAMPLE "Build the examples" ON) + +set(SPECMICP_VERSION 0.0.3) # External Package ######################################################################### set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${PROJECT_SOURCE_DIR}/cmake/") # OpenMP #------- # not required but recommended find_package(OpenMP) # Boost # ----- find_package(Boost REQUIRED) include_directories(${Boost_INCLUDE_DIR}) # Eigen # ----- find_package(Eigen3 REQUIRED) # This module comes from the Eigen3 Package include_directories(${EIGEN3_INCLUDE_DIR}) # Eigen unsuported # GMRES.h is really the file we are using/looking for # If it doesn't exist then the solver will not be included in the list of the parse solvers if(EXISTS "${EIGEN3_INCLUDE_DIR}/unsupported/Eigen/src/IterativeSolvers/GMRES.h") add_definitions(-DEIGEN_UNSUPPORTED_FOUND) INCLUDE_DIRECTORIES("${EIGEN3_INCLUDE_DIR}/unsupported/") endif() # Compilation flags ######################################################################### # c++11 # ----- include(CheckCXXCompilerFlag) if(NOT CX11_FLAG) check_cxx_compiler_flag("-std=c++11" HAS_CXX11) if(NOT HAS_CXX11) message(FATAL_ERROR "A c++11 compatible compiler is necessary") else() set(CXX11_FLAG "-std=c++11") endif() endif() if(UNIX) # Use ld.gold if it is available and isn't disabled explicitly # Ref : https://bugs.webkit.org/show_bug.cgi?id=137953 option(USE_LD_GOLD "Use GNU gold linker" ON) if (USE_LD_GOLD) execute_process(COMMAND ${CMAKE_C_COMPILER} -fuse-ld=gold -Wl,--version ERROR_QUIET OUTPUT_VARIABLE LD_VERSION) if ("${LD_VERSION}" MATCHES "GNU gold") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fuse-ld=gold") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fuse-ld=gold") else () message(WARNING "GNU gold linker isn't available, using the default system linker.") endif () endif () # Generic options SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CXX11_FLAG}") if (OPENMP_FOUND) SET( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}") SET( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}") endif() SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Wall -pedantic") ##SET(CMAKE_CXX_FLAGS_RELEASE "-O2 -DNDEBUG") message(STATUS "c++ flags ${CMAKE_CXX_FLAGS}") else() message(WARNING "not tested !") endif() # Activate this option to use finite difference jacobian # add_definitions(-DSPECMICP_DEBUG_EQUATION_FD_JACOBIAN) # Directories ######################################################################### # 3rd party # ========= # JsonCPP # ------- set(JSONCPP_DIR ${PROJECT_SOURCE_DIR}/3rdparty/jsoncpp/) add_custom_target(3rdparty_header SOURCES ${JSONCPP_DIR}/json/json.h ${JSONCPP_DIR}/json/json-forwards.h ) include_directories(${JSONCPP_DIR}) # installation dir # ---------------- # http://www.cmake.org/pipermail/cmake/2010-February/035466.html # compute default library install dir +if(UNIX) +# library +# ------ set (_DEFAULT_LIBRARY_INSTALL_DIR lib) if (EXISTS "${CMAKE_INSTALL_PREFIX}/lib32/" AND CMAKE_SIZEOF_VOID_P EQUAL 4) set (_DEFAULT_LIBRARY_INSTALL_DIR lib32) elif (EXISTS "${CMAKE_INSTALL_PREFIX}/lib64/" AND CMAKE_SIZEOF_VOID_P EQUAL 8) set (_DEFAULT_LIBRARY_INSTALL_DIR lib64) endif () # the library install dir set(LIBRARY_INSTALL_DIR "${_DEFAULT_LIBRARY_INSTALL_DIR}" CACHE PATH "Installation directory for libraries") set(STATIC_LIBRARY_INSTALL_DIR "${_DEFAULT_LIBRARY_INSTALL_DIR}/static" CACHE PATH "Installation directory for static libraries") # make the library install dir an absolute path (can be important e.g. when using CONFIGURE_FILE to embed # the library installation directory into a file) if(NOT IS_ABSOLUTE "${LIBRARY_INSTALL_DIR}") set(LIBRARY_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/${LIBRARY_INSTALL_DIR}") endif() if(NOT IS_ABSOLUTE "${STATIC_LIBRARY_INSTALL_DIR}") set(STATIC_LIBRARY_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/${STATIC_LIBRARY_INSTALL_DIR}") endif() +# include +#-------- set(INCLUDE_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/include/specmicp") - +# share +#------ +set(SHARE_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/share/specmicp") +else() + message(WARNING "not tested !") +endif() # Source # ======= # the main source directory - the c++ api set(SPECMICP_CPP_API ${CMAKE_CURRENT_SOURCE_DIR}/src) include_directories(${SPECMICP_CPP_API}) add_subdirectory(${SPECMICP_CPP_API}) # Database ######################################################################### - -# Not code, just necessary data - -set(DATA_DIR ${CMAKE_CURRENT_SOURCE_DIR}/data) - -set(DATABASE_LIST - ${DATA_DIR}/specmicp_database.js - ${DATA_DIR}/cemdata_specmicp.js - ${DATA_DIR}/cemdata.js - ${DATA_DIR}/momas_benchmark.js -) - -add_custom_target(data SOURCES ${DATABASE_LIST}) - -file(INSTALL ${DATABASE_LIST} - DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/data/) +add_subdirectory(data) # Documentation ######################################################################### # "common" documentation # ----------------------- set( DOCS_LIST ${CMAKE_CURRENT_SOURCE_DIR}/README.md ${CMAKE_CURRENT_SOURCE_DIR}/INSTALL ${CMAKE_CURRENT_SOURCE_DIR}/COPYING ) add_custom_target(docs SOURCES ${DOCS_LIST}) +install(FILES ${DOCS_LIST} + DESTINATION ${SHARE_INSTALL_DIR} +) # Doxygen documentation # --------------------- # add a target to generate API documentation with Doxygen find_package(Doxygen) set (SPECMICP_SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR}/src) set (SPECMICP_DOC_DIR ${CMAKE_CURRENT_SOURCE_DIR}/doc) if(DOXYGEN_FOUND) # Configure doxygen configure_file(${CMAKE_CURRENT_SOURCE_DIR}/doc/Doxyfile.in ${CMAKE_CURRENT_BINARY_DIR}/doc/Doxyfile @ONLY) # Citations for the documentations add_custom_target(citations SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/doc/citations.bib) file(INSTALL ${CMAKE_CURRENT_SOURCE_DIR}/doc/citations.bib DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/doc/) # Target to build the documentations - add_custom_target(doc + add_custom_target(doc_html ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/doc/Doxyfile WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} COMMENT "Generating API documentation with Doxygen" VERBATIM ) + install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/html + DESTINATION ${SHARE_INSTALL_DIR} + OPTIONAL + ) endif(DOXYGEN_FOUND) # The following modules have their own CMakeLists.txt # Python interface ######################################################################### add_subdirectory( cython ) # Tests ######################################################################### add_subdirectory( tests ) # Examples ######################################################################### add_subdirectory( examples ) diff --git a/INSTALL b/INSTALL index 6390afc..0819557 100644 --- a/INSTALL +++ b/INSTALL @@ -1,59 +1,73 @@ Building SpecMiCP ----------------- SpecMiCP uses CMAKE as build system, to build it, in the specmicp directory, run : cmake . make To customize build, see the cmake documentation and the following informations : Requirements : ============== - C++11 compiler (tested with gcc 4.8.3 and 4,9.2) - Boost (tested with boost 1.55 and higher) - Eigen (>=3.2) (http://eigen.tuxfamily.org/) Requirements for the documentation : ------------------------------------ - Doxygen The tests require Catch (https://github.com/philsquared/Catch), but it is downloaded automatically by Cmake in the project directory if needed. Configuration Options : ======================= These options are used by CMake to configure the project - SPECMICP_NO_DEBUG - bool - if true, remove assert used in specmicp - SPECMICP_USE_OPENMP : - bool - use OpenMP to parallelize code - SPECMICP_DEBUG_EQUATION_FD_JACOBIAN - bool - use a finite difference jacobian in specmicp - PYTHON_VERSION_3 - bool - if ON, compile cython module for python 3 - SPECMICP_BUILD_STATIC - - bool (default off) + - bool (default OFF) - if ON, build also the static libraries + - SPECMICP_BUILD_EXAMPLE + - bool (default ON) + - if ON, build the examples + Example of configuration : mkdir build; cd build cmake .. -DSPECMICP_USE_OPENMP=ON -DCMAKE_C_COMPILER=[C compiler] -DCMAKE_CXX_COMPILER=[C++11 compiler] -DCMAKE_BUILD_TYPE=Release +other example : +to install specmicp in '/opt/local' + +mkdir build +cd build +cmake .. -DSPECMICP_BUILD_EXAMPLE=ON -DPYTHON_VERSION_3=OFF -DSPECMICP_USE_OPENMP=ON -DCMAKE_INSTALL_PREFIX=/opt/local -DCMAKE_BUILD_TYPE=release +make && make doc_html +make install + + For a custom version of eigen 3: -DEIGEN3_INCLUDE_DIR=[eigen3 directory] For a custom version of boost : -DBoost_NO_BOOST_CMAKE=true -DBOOSTROOT=[boost directory] diff --git a/cython/CMakeLists.txt b/cython/CMakeLists.txt index 5a5861d..06a2766 100644 --- a/cython/CMakeLists.txt +++ b/cython/CMakeLists.txt @@ -1,85 +1,93 @@ # ======================= # # # # Python specmicp lib # # # # ======================= # # Build the cython interface # ========================== # Import the correct version of python option(PYTHON_VERSION_3 "Version of python for cython compilation" ON) if (PYTHON_VERSION_3) +find_package(PythonInterp 3 REQUIRED) find_package(PythonLibs 3 REQUIRED) else() +find_package(PythonInterp 2.7 REQUIRED) find_package(PythonLibs 2.7 REQUIRED) endif() include_directories(${PYTHON_INCLUDE_PATH}) # include cython only once python is configured include(UseCython) # main variables # =============== # directories # ----------- set(PY_SPECMICP_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/specmicp) set(PY_SPECMICP_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/specmicp) set(PY_INCLUDES_DIR ${CMAKE_CURRENT_SOURCE_DIR}/includes) # common includes # =============== add_custom_target(cython_includes SOURCES ${PY_INCLUDES_DIR}/memory.pxd ${PY_INCLUDES_DIR}/eigen_set.hpp ${PY_INCLUDES_DIR}/eigen.pxd ) # SpecMiCP module # =============== add_subdirectory(specmicp) +# setup.py +set(CYTHON_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}) +configure_file(setup.py.in ${CYTHON_BINARY_DIR}/setup.py @ONLY) +configure_file(install_python.cmake.in ${CYTHON_BINARY_DIR}/install_python.cmake @ONLY) +install(SCRIPT "${CYTHON_BINARY_DIR}/install_python.cmake") + # ========== # # # # TEST # # # # ========== # # Prelude # ======= # directories # ----------- set(TEST_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../tests/cython) set(BINARY_TEST_DIR ${CMAKE_CURRENT_BINARY_DIR}/tests) # variables to configure the scripts # ---------------------------------- set(python_module_path ${CMAKE_CURRENT_BINARY_DIR}) set(database_path ${CMAKE_CURRENT_BINARY_DIR}/../data/cemdata_specmicp.js) # macro to configure the scripts # ------------------------------- macro(configure_python_test test_name) configure_file(${TEST_DIR}/${test_name} ${BINARY_TEST_DIR}${CMAKE_FILES_DIRECTORY}/${test_name} @ONLY) file(COPY ${BINARY_TEST_DIR}${CMAKE_FILES_DIRECTORY}/${test_name} DESTINATION ${BINARY_TEST_DIR} FILE_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE) endmacro(configure_python_test) # Scripts # ======= # database unittest configure_python_test(database.py) # test specmicp configure_python_test(test_specmicp.py) diff --git a/cython/install_python.cmake.in b/cython/install_python.cmake.in new file mode 100644 index 0000000..baf2c6e --- /dev/null +++ b/cython/install_python.cmake.in @@ -0,0 +1,9 @@ +execute_process(COMMAND @PYTHON_EXECUTABLE@ setup.py install --prefix @CMAKE_INSTALL_PREFIX@ + RESULT_VARIABLE retcode + ERROR_VARIABLE error_setup_py + OUTPUT_VARIABLE output_setup_py + WORKING_DIRECTORY @CYTHON_BINARY_DIR@ + ) +message(STATUS ${retcode}) +message(STATUS ${output_setup_py}) +message(STATUS ${error_setup_py}) diff --git a/cython/setup.py.in b/cython/setup.py.in new file mode 100644 index 0000000..6226bef --- /dev/null +++ b/cython/setup.py.in @@ -0,0 +1,14 @@ +#!/usr/bin/env python + +from distutils.core import setup + +setup(name='specmicp', + version='@SPECMICP_VERSION@', + description='Python interface for SpecMiCP ', + author='Fabien Georget', + author_email='fabieng@princeton.edu', + url='https://bitbucket.org/specmicp/specmicp', + packages=['specmicp'], + package_dir={'specmicp': 'specmicp'}, + package_data={'specmicp': ['*.so']} + ) \ No newline at end of file diff --git a/cython/specmicp/CMakeLists.txt b/cython/specmicp/CMakeLists.txt index 0b4a6ae..6160f68 100644 --- a/cython/specmicp/CMakeLists.txt +++ b/cython/specmicp/CMakeLists.txt @@ -1,123 +1,123 @@ # Build the python module : SpecMiCP # ================================== set(PY_INCLUDES_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../includes) include_directories(${PY_INCLUDES_DIR}) include_directories(${EIGEN3_INCLUDE_DIR}) include_directories(${PROJECT_SOURCE_DIR}) include_directories(${JSONCPP_DIR}) include_directories(${CMAKE_CURRENT_SOURCE_DIR}) set(cython_specmicp_files __init__.py database.pxd database.pyx solution.pxd solution.pyx constraints.pxd constraints.pyx solver.pxd solver.pyx is_solver_successful.hpp set_units.hpp init_log.hpp logger.pxd logger.pyx cement_hydration.py units.pxd solver_options.pxd ) #add_library(specmicp_cython_database SHARED ${DATABASE_LIBFILE}) #add_library(specmicp_cython_specmicp SHARED ${SPECMICP_LIBFILE}) # database # --------- set_source_files_properties( database.pyx PROPERTIES CYTHON_IS_CXX TRUE ) cython_add_module(database database.pyx) target_link_libraries(database specmicp_database specmicp) # solution # -------- set_source_files_properties( solution.pyx PROPERTIES CYTHON_IS_CXX TRUE ) cython_add_module(solution solution.pyx) target_link_libraries(solution specmicp_database specmicp) # constraints # ----------- set_source_files_properties( constraints.pyx PROPERTIES CYTHON_IS_CXX TRUE ) cython_add_module(constraints constraints.pyx) target_link_libraries(constraints specmicp_database specmicp) # solver # ----- set_source_files_properties( solver.pyx PROPERTIES CYTHON_IS_CXX TRUE ) cython_add_module(solver solver.pyx) target_link_libraries(solver specmicp_database specmicp) # logger # ----- set_source_files_properties( logger.pyx PROPERTIES CYTHON_IS_CXX TRUE ) cython_add_module(logger logger.pyx) # specmicp module # --------------- set(PURE_PYTHON_FILES __init__.py cement_hydration.py ) -add_custom_target(cython_specmicp +add_custom_target(cython_specmicp ALL DEPENDS database solution constraints solver logger ${PURE_PYTHON_FILES} COMMENT "Built the python specmicp module" SOURCES ${cython_specmicp_files} ) macro(COPY_PURE_PYTHON_FILE in_file out_file target) if(${in_file} IS_NEWER_THAN ${out_file}) add_custom_command ( TARGET ${target} COMMAND ${CMAKE_COMMAND} ARGS -E copy ${in_file} ${out_file} ) endif() endmacro(COPY_PURE_PYTHON_FILE) foreach(in_file ${PURE_PYTHON_FILES}) COPY_PURE_PYTHON_FILE(${CMAKE_CURRENT_SOURCE_DIR}/${in_file} ${CMAKE_CURRENT_BINARY_DIR}/${in_file} cython_specmicp) endforeach() diff --git a/data/CMakeLists.txt b/data/CMakeLists.txt new file mode 100644 index 0000000..fb2e89f --- /dev/null +++ b/data/CMakeLists.txt @@ -0,0 +1,20 @@ +# Databases +# ---------- + +set(DATABASE_LIST + specmicp_database.js + cemdata_specmicp.js + cemdata.js + momas_benchmark.js +) + +add_custom_target(data SOURCES ${DATABASE_LIST}) + +# for the tests +file(INSTALL ${DATABASE_LIST} + DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/data/) + +# true install +install(FILES ${DATABASE_LIST} + DESTINATION ${SHARE_INSTALL_DIR}/database +) diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index 64d5dd4..d33bda7 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -1,80 +1,108 @@ -set(PROJECT_EXAMPLE_DIR ${CMAKE_CURRENT_SOURCE_DIR}) +###### Installation ####################### +set(EXAMPLES_INSTALL_DIR ${SHARE_INSTALL_DIR}/examples) -# ========== SpecMiCP ===================================================== +# SpecMiCP +# ======== -# ---------- adimensional system ------------------------------------------ +set (SPECMICP_EXAMPLES + specmicp/adimensional/thermocarbo.cpp + specmicp/adimensional/equilibrium_curve.cpp + specmicp/adimensional/momas_thermo.cpp + specmicp/adimensional/carbofe.cpp +) +install(FILES ${SPECMICP_EXAMPLES} + DESTINATION ${EXAMPLES_INSTALL_DIR}/specmicp +) -# thermocarbo +# ReactMiCP +# ========= -add_executable(ex_adim_thermocarbo - ${PROJECT_EXAMPLE_DIR}/specmicp/adimensional/thermocarbo.cpp +set (REACTMICP_SATURATED_EXAMPLES + reactmicp/equilibrium_curve.cpp + reactmicp/saturated_react/react_leaching.cpp + reactmicp/saturated_react/carbonation.cpp + reactmicp/saturated_react/carbonationfe.cpp ) -target_link_libraries(ex_adim_thermocarbo specmicp specmicp_database) +install(FILES ${REACTMICP_SATURATED_EXAMPLES} + DESTINATION ${EXAMPLES_INSTALL_DIR}/reactmicp/saturated +) -# carbofe +###### Build (optional) #################### -add_executable(ex_adim_carbofe - ${PROJECT_EXAMPLE_DIR}/specmicp/adimensional/carbofe.cpp -) +# SpecMiCP +# ======== -target_link_libraries(ex_adim_carbofe specmicp specmicp_database) +# thermocarbo -# Momas thermodynamic example +if(SPECMICP_BUILD_EXAMPLE) + add_executable(ex_adim_thermocarbo + specmicp/adimensional/thermocarbo.cpp + ) + target_link_libraries(ex_adim_thermocarbo specmicp specmicp_database) -add_executable(ex_adim_momas - ${PROJECT_EXAMPLE_DIR}/specmicp/adimensional/momas_thermo.cpp -) -target_link_libraries(ex_adim_momas specmicp specmicp_database) +# carbofe + + add_executable(ex_adim_carbofe + specmicp/adimensional/carbofe.cpp + ) + target_link_libraries(ex_adim_carbofe specmicp specmicp_database) +# Momas thermodynamic example -# equilibrium curve + add_executable(ex_adim_momas + specmicp/adimensional/momas_thermo.cpp + ) + target_link_libraries(ex_adim_momas specmicp specmicp_database) -add_executable(ex_adim_equilibriumcurve - ${PROJECT_EXAMPLE_DIR}/specmicp/adimensional/equilibrium_curve.cpp -) -target_link_libraries(ex_adim_equilibriumcurve specmicp specmicp_database) +# equilibrium curve -# ========== ReactMiCP ==================================================== + add_executable(ex_adim_equilibriumcurve + specmicp/adimensional/equilibrium_curve.cpp + ) + target_link_libraries(ex_adim_equilibriumcurve specmicp specmicp_database) +endif() -# ---------- EquilibriumCurve ---------------------------------------------------- -add_executable(ex_reactmicp_equilibriumcurve - ${PROJECT_EXAMPLE_DIR}/reactmicp/equilibrium_curve.cpp -) -target_link_libraries(ex_reactmicp_equilibriumcurve reactmicp dfpm specmicp specmicp_database) +# ReactMiCP +# ========= +# EquilibriumCurve -# New flexible reactive transport solver -# ======================================= +if(SPECMICP_BUILD_EXAMPLE) + add_executable(ex_reactmicp_equilibriumcurve + reactmicp/equilibrium_curve.cpp + ) + target_link_libraries(ex_reactmicp_equilibriumcurve reactmicp dfpm specmicp specmicp_database) -# ---------- Leaching ---------------------------------------------------- +# Leaching -add_executable(ex_reactmicp_leaching - ${PROJECT_EXAMPLE_DIR}/reactmicp/saturated_react/react_leaching.cpp -) -target_link_libraries(ex_reactmicp_leaching reactmicp specmicp specmicp_database) + add_executable(ex_reactmicp_leaching + reactmicp/saturated_react/react_leaching.cpp + ) + target_link_libraries(ex_reactmicp_leaching reactmicp specmicp specmicp_database) -# ---------- Momas benchmark --------------------------------------------- +# Momas benchmark -add_executable(ex_reactmicp_momas - ${PROJECT_EXAMPLE_DIR}/reactmicp/saturated_react/momas_benchmark.cpp -) -target_link_libraries(ex_reactmicp_momas reactmicp specmicp specmicp_database) + add_executable(ex_reactmicp_momas + reactmicp/saturated_react/momas_benchmark.cpp + ) + target_link_libraries(ex_reactmicp_momas reactmicp specmicp specmicp_database) -# ---------- Carbonation ------------------------------------------------ +# Carbonation -add_executable(ex_reactmicp_carbo - ${PROJECT_EXAMPLE_DIR}/reactmicp/saturated_react/carbonation.cpp -) -target_link_libraries(ex_reactmicp_carbo reactmicp specmicp specmicp_database) + add_executable(ex_reactmicp_carbo + reactmicp/saturated_react/carbonation.cpp + ) + target_link_libraries(ex_reactmicp_carbo reactmicp specmicp specmicp_database) -# ---------- Carbonation ------------------------------------------------ +# Carbonation with Fe -add_executable(ex_reactmicp_carbofe - ${PROJECT_EXAMPLE_DIR}/reactmicp/saturated_react/carbonationfe.cpp -) -target_link_libraries(ex_reactmicp_carbofe reactmicp specmicp specmicp_database) + add_executable(ex_reactmicp_carbofe + reactmicp/saturated_react/carbonationfe.cpp + ) + target_link_libraries(ex_reactmicp_carbofe reactmicp specmicp specmicp_database) +endif() diff --git a/src/reactmicp/CMakeLists.txt b/src/reactmicp/CMakeLists.txt index c8f73ab..bcff2d3 100644 --- a/src/reactmicp/CMakeLists.txt +++ b/src/reactmicp/CMakeLists.txt @@ -1,124 +1,124 @@ # ReactMiCP # ============= set(REACTMICP_SOLVER_DIR solver) set(REACTMICP_SYSTEMS_DIR systems) set(REACTMICP_EQUILIBRIUMCURVE equilibrium_curve) add_custom_target(reactmicp_incl SOURCES ${REACTMICP_SOLVER_DIR}/reactive_transport_solver_structs.hpp ${REACTMICP_SOLVER_DIR}/staggers_base/variables_base.hpp ${REACTMICP_SOLVER_DIR}/staggers_base/transport_stagger_base.hpp ${REACTMICP_SOLVER_DIR}/staggers_base/chemistry_stagger_base.hpp ${REACTMICP_SOLVER_DIR}/staggers_base/upscaling_stagger_base.hpp ${REACTMICP_SOLVER_DIR}/staggers_base/stagger_structs.hpp ${REACTMICP_SOLVER_DIR}/staggers_base/decl.inl ${REACTMICP_SOLVER_DIR}/staggers_base/staggers_base.hpp ${REACTMICP_SYSTEMS_DIR}/saturated_react/variablesfwd.hpp ) set(REACTMICP_LIBFILES ${REACTMICP_EQUILIBRIUMCURVE}/chemistry.cpp ${REACTMICP_EQUILIBRIUMCURVE}/eqcurve_extractor.cpp ${REACTMICP_EQUILIBRIUMCURVE}/eqcurve_coupler.cpp ${REACTMICP_EQUILIBRIUMCURVE}/eqcurve_solid_transport.cpp # Flexible reactive transport solver # ---------------------------------- ${REACTMICP_SOLVER_DIR}/reactive_transport_solver.cpp ${REACTMICP_SOLVER_DIR}/timestepper.cpp ${REACTMICP_SOLVER_DIR}/runner.cpp # ${REACTMICP_SYSTEMS_DIR}/saturated_react/variables.cpp ${REACTMICP_SYSTEMS_DIR}/saturated_react/transport_program.cpp ${REACTMICP_SYSTEMS_DIR}/saturated_react/transport_stagger.cpp ${REACTMICP_SYSTEMS_DIR}/saturated_react/equilibrium_stagger.cpp ${REACTMICP_SYSTEMS_DIR}/saturated_react/react_solver.cpp ${REACTMICP_SYSTEMS_DIR}/saturated_react/init_variables.cpp ) add_library(reactmicp SHARED ${REACTMICP_LIBFILES}) if(OPENMP_FOUND) if(SPECMICP_USE_OPENMP) SET_TARGET_PROPERTIES(reactmicp PROPERTIES COMPILE_DEFINITIONS "SPECMICP_USE_OPENMP") endif() endif() target_link_libraries(reactmicp dfpm) install(TARGETS reactmicp LIBRARY DESTINATION ${LIBRARY_INSTALL_DIR} ) # include files # ------------- set(REACTMICP_STAGGERBASE_INCLUDE_LIST ${REACTMICP_SOLVER_DIR}/staggers_base/variables_base.hpp ${REACTMICP_SOLVER_DIR}/staggers_base/transport_stagger_base.hpp ${REACTMICP_SOLVER_DIR}/staggers_base/chemistry_stagger_base.hpp ${REACTMICP_SOLVER_DIR}/staggers_base/upscaling_stagger_base.hpp ${REACTMICP_SOLVER_DIR}/staggers_base/stagger_structs.hpp ${REACTMICP_SOLVER_DIR}/staggers_base/decl.inl ${REACTMICP_SOLVER_DIR}/staggers_base/staggers_base.hpp ) set(REACTMICP_SOLVER_INCLUDE_LIST ${REACTMICP_SOLVER_DIR}/reactive_transport_solver_structs.hpp ${REACTMICP_SOLVER_DIR}/reactive_transport_solver.hpp ${REACTMICP_SOLVER_DIR}/timestepper.hpp ${REACTMICP_SOLVER_DIR}/runner.hpp ) set(REACTMICP_SATURATEDREACT_INCLUDE_LIST ${REACTMICP_SYSTEMS_DIR}/saturated_react/variablesfwd.hpp ${REACTMICP_SYSTEMS_DIR}/saturated_react/variables.hpp ${REACTMICP_SYSTEMS_DIR}/saturated_react/transport_program.hpp ${REACTMICP_SYSTEMS_DIR}/saturated_react/transport_stagger.hpp ${REACTMICP_SYSTEMS_DIR}/saturated_react/equilibrium_stagger.hpp ${REACTMICP_SYSTEMS_DIR}/saturated_react/react_solver.hpp ${REACTMICP_SYSTEMS_DIR}/saturated_react/init_variables.hpp ) set(REACTMICP_EQUILIBRIUMCURVE_INCLUDE_LIST ${REACTMICP_EQUILIBRIUMCURVE}/chemistry.cpp ${REACTMICP_EQUILIBRIUMCURVE}/eqcurve_extractor.cpp ${REACTMICP_EQUILIBRIUMCURVE}/eqcurve_coupler.cpp ${REACTMICP_EQUILIBRIUMCURVE}/eqcurve_solid_transport.cpp ) install(FILES ${REACTMICP_STAGGERBASE_INCLUDE_LIST} DESTINATION ${INCLUDE_INSTALL_DIR}/reactmicp/solver/staggers_base ) install(FILES ${REACTMICP_SOLVER_INCLUDE_LIST} DESTINATION ${INCLUDE_INSTALL_DIR}/reactmicp/solver ) install(FILES ${REACTMICP_SATURATEDREACT_INCLUDE_LIST} DESTINATION ${INCLUDE_INSTALL_DIR}/reactmicp/systems/saturated_react ) install(FILES ${REACTMICP_EQUILIBRIUMCURVE_INCLUDE_LIST} DESTINATION ${INCLUDE_INSTALL_DIR}/reactmicp/equilibrium_curve ) # static libraries # ---------------- if(SPECMICP_BUILD_STATIC) - add_library(reactmicp_static STATIC ${DATABASE_LIBFILE}) + add_library(reactmicp_static STATIC ${REACTMICP_LIBFILES}) set_target_properties(reactmicp_static PROPERTIES OUTPUT_NAME reactmicp) if(OPENMP_FOUND) if(SPECMICP_USE_OPENMP) SET_TARGET_PROPERTIES(reactmicp PROPERTIES COMPILE_DEFINITIONS "SPECMICP_USE_OPENMP") endif() endif() target_link_libraries(reactmicp_static dfpm) install(TARGETS reactmicp_static ARCHIVE DESTINATION ${STATIC_LIBRARY_INSTALL_DIR} ) endif() diff --git a/src/specmicp/CMakeLists.txt b/src/specmicp/CMakeLists.txt index b35a053..f8f35b8 100644 --- a/src/specmicp/CMakeLists.txt +++ b/src/specmicp/CMakeLists.txt @@ -1,96 +1,96 @@ # The speciation solver # ===================== # Directories set(ADIMENSIONAL_DIR adimensional) set(ADIMKINETICS_DIR adimensional_kinetics) set(PROBLEM_SOLVER_DIR problem_solver) # Headers file without a source file add_custom_target(specmic_incl SOURCES ${ADIMENSIONAL_DIR}/adimensional_system_structs.hpp ${ADIMENSIONAL_DIR}/adimensional_system_solution.hpp ${ADIMENSIONAL_DIR}/adimensional_system_solver_structs.hpp ${ADIMENSIONAL_DIR}/adimensional_system_numbering.hpp ${ADIMENSIONAL_DIR}/adimensional_system_pcfm_structs.hpp ${PROBLEM_SOLVER_DIR}/formulation.hpp ${ADIMKINETICS_DIR}/kinetic_model.hpp ${ADIMKINETICS_DIR}/kinetic_variables.hpp ${ADIMKINETICS_DIR}/kinetic_system_solver_structs.hpp ) # Source for the library set(SPECMICP_LIBFILE ${ADIMENSIONAL_DIR}/adimensional_system.cpp ${ADIMENSIONAL_DIR}/adimensional_system_solver.cpp ${ADIMENSIONAL_DIR}/adimensional_system_solution_extractor.cpp ${ADIMENSIONAL_DIR}/adimensional_system_pcfm.cpp ${ADIMENSIONAL_DIR}/equilibrium_curve.cpp ${PROBLEM_SOLVER_DIR}/dissolver.cpp # kinetic ${ADIMKINETICS_DIR}/kinetic_system.cpp ${ADIMKINETICS_DIR}/kinetic_system_solver.cpp ${ADIMKINETICS_DIR}/kinetic_system_euler_solver.cpp ) add_library(specmicp SHARED ${SPECMICP_LIBFILE}) install(TARGETS specmicp LIBRARY DESTINATION ${LIBRARY_INSTALL_DIR} ) # include files # -------------- set(SPECMICP_ADIMENSIONAL_INCLUDES ${ADIMENSIONAL_DIR}/adimensional_system_structs.hpp ${ADIMENSIONAL_DIR}/adimensional_system_solution.hpp ${ADIMENSIONAL_DIR}/adimensional_system_solver_structs.hpp ${ADIMENSIONAL_DIR}/adimensional_system_numbering.hpp ${ADIMENSIONAL_DIR}/adimensional_system_pcfm_structs.hpp ${ADIMENSIONAL_DIR}/adimensional_system.hpp ${ADIMENSIONAL_DIR}/adimensional_system_solver.hpp ${ADIMENSIONAL_DIR}/adimensional_system_solution_extractor.hpp ${ADIMENSIONAL_DIR}/adimensional_system_pcfm.hpp ${ADIMENSIONAL_DIR}/equilibrium_curve.hpp ) set(SPECMICP_PROBLEM_SOLVER_INCLUDES ${PROBLEM_SOLVER_DIR}/dissolver.hpp ${PROBLEM_SOLVER_DIR}/formulation.hpp ) set(SPECMICP_ADIMENSIONAL_KINETICS_INCLUDES ${ADIMKINETICS_DIR}/kinetic_model.hpp ${ADIMKINETICS_DIR}/kinetic_variables.hpp ${ADIMKINETICS_DIR}/kinetic_system_solver_structs.hpp ${ADIMKINETICS_DIR}/kinetic_system.hpp ${ADIMKINETICS_DIR}/kinetic_system_solver.hpp ${ADIMKINETICS_DIR}/kinetic_system_euler_solver.hpp ) install(FILES ${SPECMICP_ADIMENSIONAL_INCLUDES} DESTINATION ${INCLUDE_INSTALL_DIR}/specmicp/adimenional ) install(FILES ${SPECMICP_PROBLEM_SOLVER_INCLUDES} DESTINATION ${INCLUDE_INSTALL_DIR}/specmicp/problem_solver ) install(FILES ${SPECMICP_ADIMENSIONAL_KINETICS_INCLUDES} DESTINATION ${INCLUDE_INSTALL_DIR}/specmicp/adimensional_kinetics ) # static libraries # ---------------- if(SPECMICP_BUILD_STATIC) - add_library(specmicp_static STATIC ${DATABASE_LIBFILE}) + add_library(specmicp_static STATIC ${SPECMICP_LIBFILE}) set_target_properties(specmicp_static PROPERTIES OUTPUT_NAME specmicp) install(TARGETS specmicp_static ARCHIVE DESTINATION ${STATIC_LIBRARY_INSTALL_DIR} ) endif()