diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index 1e6f48c6..0036b61c 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -1,296 +1,296 @@ -name: CMake - -on: - push: - - pull_request: - branches: - - master - - schedule: - - cron: '15 14 4,11,18,25 * *' - - workflow_dispatch: - -env: - # Customize the CMake build type here (Release, Debug, RelWithDebInfo, etc.) - BUILD_TYPE: Release - NAME: IPhreeqc - -jobs: - - init: - runs-on: ubuntu-latest - # Map step outputs to job outputs - outputs: - VER: ${{ steps.vars.outputs.VER }} - REL: ${{ steps.vars.outputs.REL }} - DATE: ${{ steps.vars.outputs.DATE }} - DATE_RFC_3339: ${{ steps.vars.outputs.DATE_RFC_3339 }} - steps: - - name: Setup vars - id: vars - run: | - echo VER=$(curl -sS https://raw.githubusercontent.com/usgs-coupled/phreeqc-version/main/next_ver.sh | sh) >> $GITHUB_OUTPUT - echo REL=$(curl -sS https://raw.githubusercontent.com/usgs-coupled/phreeqc-version/main/rel.py | python3) >> $GITHUB_OUTPUT - echo DATE=$(date "+%x") >> $GITHUB_OUTPUT - echo DATE_RFC_3339=$(date --rfc-3339=date) >> $GITHUB_OUTPUT - - - test: - strategy: - fail-fast: false - matrix: - os: [macos-latest, ubuntu-latest, windows-latest] - - runs-on: ${{ matrix.os }} - env: - BUILD_DIR: _ctest # set in ctest.cmake - - steps: - - uses: actions/checkout@v4 - - - name: Install ninja valgrind (Linux) - if: runner.os == 'Linux' - run: sudo apt-get update && sudo apt-get install -y ninja-build valgrind - - - name: Install ninja (macOS) - if: runner.os == 'macOS' - run: brew install ninja - - - name: Set up Visual Studio shell (Windows) - if: runner.os == 'Windows' - uses: egor-tensin/vs-shell@v2 - with: - arch: x64 - - - name: CTest - run: ctest -S ctest.cmake -V --output-on-failure --timeout 900 - - - name: Upload results - uses: actions/upload-artifact@v4 - with: - name: ${{ matrix.os }}-${{ github.job }}-results - path: ${{ github.workspace }}/${{ env.BUILD_DIR }}/Testing/ - - test-shared: - strategy: - fail-fast: false - matrix: - os: [macos-latest, ubuntu-latest, windows-latest] - - runs-on: ${{ matrix.os }} - env: - BUILD_DIR: _ctest_shared # set in ctest-shared.cmake - - steps: - - uses: actions/checkout@v4 - - - name: Install ninja valgrind (Linux) - if: runner.os == 'Linux' - run: sudo apt-get update && sudo apt-get install -y ninja-build valgrind - - - name: Install ninja (macOS) - if: runner.os == 'macOS' - run: brew install ninja - - - name: Set up Visual Studio shell (Windows) - if: runner.os == 'Windows' - uses: egor-tensin/vs-shell@v2 - with: - arch: x64 - - - name: CTest - run: ctest -S ctest-shared.cmake -V --output-on-failure --timeout 900 - - - name: Upload results - uses: actions/upload-artifact@v4 - with: - name: ${{ matrix.os }}-${{ github.job }}-results - path: ${{ github.workspace }}/${{ env.BUILD_DIR }}/Testing/ - - test-clang: - strategy: - fail-fast: false - matrix: - os: [macos-latest, ubuntu-latest, windows-latest] - shared_libs: [OFF, ON] - enable_module: [OFF, ON] - - runs-on: ${{ matrix.os }} - env: - BUILD_DIR: _build - - steps: - - uses: actions/checkout@v4 - - - name: Install ninja valgrind (Linux) - if: runner.os == 'Linux' - run: sudo apt-get update && sudo apt-get install -y ninja-build clang valgrind - - - name: Install ninja (macOS) - if: runner.os == 'macOS' - run: brew install ninja - - - name: Set up Visual Studio shell (Windows) - if: runner.os == 'Windows' - uses: egor-tensin/vs-shell@v2 - with: - arch: x64 - - - name: CMake configure - if: runner.os == 'Linux' - run: CC=clang CXX=clang++ cmake -B ${{ env.BUILD_DIR }} -DBUILD_SHARED_LIBS=${{ matrix.shared_libs }} -DIPHREEQC_ENABLE_MODULE=${{ matrix.enable_module }} -DCMAKE_CXX_STANDARD=20 -DCMAKE_CXX_STANDARD_REQUIRED=ON - - - name: CMake configure - if: runner.os == 'macOS' - run: CC=$(brew --prefix llvm@15)/bin/clang CXX=$(brew --prefix llvm@15)/bin/clang++ cmake -B ${{ env.BUILD_DIR }} -DBUILD_SHARED_LIBS=${{ matrix.shared_libs }} -DIPHREEQC_ENABLE_MODULE=${{ matrix.enable_module }} -DCMAKE_CXX_STANDARD=20 -DCMAKE_CXX_STANDARD_REQUIRED=ON - - - name: CMake configure - if: runner.os == 'Windows' - run: cmake -B ${{ env.BUILD_DIR }} -A x64 -T "ClangCL" -DBUILD_SHARED_LIBS=${{ matrix.shared_libs }} -DIPHREEQC_ENABLE_MODULE=${{ matrix.enable_module }} -DCMAKE_CXX_STANDARD=20 -DCMAKE_CXX_STANDARD_REQUIRED=ON - - - name: CMake build - run: cmake --build ${{ env.BUILD_DIR }} - - - name: CTest - run: ctest --test-dir ${{ env.BUILD_DIR }} - - - name: Upload results - uses: actions/upload-artifact@v4 - with: - name: ${{ matrix.os }}-${{ github.job }}-SHARED=${{ matrix.shared_libs }}-MODULE=${{ matrix.enable_module }}-results - path: ${{ github.workspace }}/${{ env.BUILD_DIR }}/Testing/ - - chm: - runs-on: windows-latest - - steps: - - name: Checkout phreeqc3-HTMLversion - uses: actions/checkout@v4 - with: - repository: usgs-coupled-subtrees/phreeqc3-HTMLversion - ref: master - - - name: cache htmlhelp - id: cache-htmlhelp - uses: actions/cache@v4 - with: - path: "C:/Program Files (x86)/HTML Help Workshop" - key: ${{ runner.os }}-htmlhelp - - - name: install htmlhelp - if: steps.cache-htmlhelp.outputs.cache-hit != 'true' - timeout-minutes: 5 - run: | - curl -L -O --max-time 120 http://web.archive.org/web/20160201063255/http://download.microsoft.com/download/0/A/9/0A939EF6-E31C-430F-A3DF-DFAE7960D564/htmlhelp.exe - cmd /c start /wait .\htmlhelp.exe /q /c /t:$(Get-Location)\tmp - $file = "$(Get-Location)\tmp\htmlhelp.inf" - (Get-Content $file) | Foreach-Object { $_ ` - -replace '^BeginPrompt', ';;BeginPrompt' ` - -replace '^EndPrompt', ';;EndPrompt' ` - -replace '^49000=CustomLDID49000, 1', '49000=CustomLDID49000, 5' ` - -replace '^"hhupd.exe', ';;hhupd.exe' ` - -replace '^DefaultInstallDir="C:\\Program Files\\HTML Help Workshop"', 'DefaultInstallDir="%ProgramFiles%\\HTML Help Workshop"' - } | Set-Content $file - cmd /c start /wait .\tmp\setup.exe - Remove-Item -Recurse -Force .\tmp - Remove-Item -Recurse -Force .\htmlhelp.exe - # the next line doesn't seem to work (supposed to set the path) - # echo 'C:\Program Files (x86)\HTML Help Workshop' >> $GITHUB_PATH - - - name: compile chm - shell: bash - run: | - pushd HTML - bash fixup_html.bash - popd - # hhc returns 1 on success - set +e - 'C:\Program Files (x86)\HTML Help Workshop\hhc' phreeqc3.hhp | tee hhc.out - status=${PIPESTATUS[0]} - set -e - if [ "$status" -eq 1 ]; then - echo "[OK]" - exit 0 - else - echo "[FAILED]" - exit 1 - fi - - - uses: actions/upload-artifact@v4 - with: - name: chm - path: ${{github.workspace}}/phreeqc3.chm - - - R-CMD-check: - needs: [init] - runs-on: ${{ matrix.config.os }} - - name: ${{ matrix.config.os }} (${{ matrix.config.r }}) - - strategy: - fail-fast: false - matrix: - config: - - {os: macos-latest, r: 'release'} - - {os: windows-latest, r: 'release'} - - {os: ubuntu-latest, r: 'devel', http-user-agent: 'release'} - - {os: ubuntu-latest, r: 'release'} - - {os: ubuntu-latest, r: 'oldrel-1'} - - steps: - - uses: actions/checkout@v4 - - - name: versioning - run: ./jenkins-dist.sh -v ${{ needs.init.outputs.VER }} -r ${{ needs.init.outputs.REL }} -d ${{ needs.init.outputs.DATE }} - - - name: Setup R - uses: r-lib/actions/setup-r@v2 - with: - r-version: ${{ matrix.config.r }} - http-user-agent: ${{ matrix.config.http-user-agent }} - use-public-rspm: true - - - name: create source - working-directory: R - run: make VERSION=${{ needs.init.outputs.VER }} RELEASE_DATE=${{ needs.init.outputs.DATE_RFC_3339 }} source - - - name: Install dependencies - uses: r-lib/actions/setup-r-dependencies@v2 - with: - extra-packages: any::roxygen2, any::pkgbuild, any::rcmdcheck - needs: roxygen2, pkgbuild, check - working-directory: R/phreeqc - - - name: Display sessionInfo() - run: sessionInfo() - working-directory: R/phreeqc - shell: Rscript {0} - - - name: roxygen2::roxygenise() - run: roxygen2::roxygenise() - working-directory: R/phreeqc - shell: Rscript {0} - - - name: Check - uses: r-lib/actions/check-r-package@v2 - with: - working-directory: R/phreeqc - - - name: List files - if: matrix.config.os == 'ubuntu-latest' && matrix.config.r == 'release' - run: | - pwd - ls -lR - find -name "*.tar.gz" - - - uses: actions/upload-artifact@v4 - if: matrix.config.os == 'ubuntu-latest' && matrix.config.r == 'release' - with: - name: cran - path: ${{ github.workspace }}/R/phreeqc/check/phreeqc_*.tar.gz +# name: CMake +# +# on: +# push: +# +# pull_request: +# branches: +# - master +# +# schedule: +# - cron: '15 14 4,11,18,25 * *' +# +# workflow_dispatch: +# +# env: +# # Customize the CMake build type here (Release, Debug, RelWithDebInfo, etc.) +# BUILD_TYPE: Release +# NAME: IPhreeqc +# +# jobs: +# +# init: +# runs-on: ubuntu-latest +# # Map step outputs to job outputs +# outputs: +# VER: ${{ steps.vars.outputs.VER }} +# REL: ${{ steps.vars.outputs.REL }} +# DATE: ${{ steps.vars.outputs.DATE }} +# DATE_RFC_3339: ${{ steps.vars.outputs.DATE_RFC_3339 }} +# steps: +# - name: Setup vars +# id: vars +# run: | +# echo VER=$(curl -sS https://raw.githubusercontent.com/usgs-coupled/phreeqc-version/main/next_ver.sh | sh) >> $GITHUB_OUTPUT +# echo REL=$(curl -sS https://raw.githubusercontent.com/usgs-coupled/phreeqc-version/main/rel.py | python3) >> $GITHUB_OUTPUT +# echo DATE=$(date "+%x") >> $GITHUB_OUTPUT +# echo DATE_RFC_3339=$(date --rfc-3339=date) >> $GITHUB_OUTPUT +# +# +# test: +# strategy: +# fail-fast: false +# matrix: +# os: [macos-latest, ubuntu-latest, windows-latest] +# +# runs-on: ${{ matrix.os }} +# env: +# BUILD_DIR: _ctest # set in ctest.cmake +# +# steps: +# - uses: actions/checkout@v4 +# +# - name: Install ninja valgrind (Linux) +# if: runner.os == 'Linux' +# run: sudo apt-get update && sudo apt-get install -y ninja-build valgrind +# +# - name: Install ninja (macOS) +# if: runner.os == 'macOS' +# run: brew install ninja +# +# - name: Set up Visual Studio shell (Windows) +# if: runner.os == 'Windows' +# uses: egor-tensin/vs-shell@v2 +# with: +# arch: x64 +# +# - name: CTest +# run: ctest -S ctest.cmake -V --output-on-failure --timeout 900 +# +# - name: Upload results +# uses: actions/upload-artifact@v4 +# with: +# name: ${{ matrix.os }}-${{ github.job }}-results +# path: ${{ github.workspace }}/${{ env.BUILD_DIR }}/Testing/ +# +# test-shared: +# strategy: +# fail-fast: false +# matrix: +# os: [macos-latest, ubuntu-latest, windows-latest] +# +# runs-on: ${{ matrix.os }} +# env: +# BUILD_DIR: _ctest_shared # set in ctest-shared.cmake +# +# steps: +# - uses: actions/checkout@v4 +# +# - name: Install ninja valgrind (Linux) +# if: runner.os == 'Linux' +# run: sudo apt-get update && sudo apt-get install -y ninja-build valgrind +# +# - name: Install ninja (macOS) +# if: runner.os == 'macOS' +# run: brew install ninja +# +# - name: Set up Visual Studio shell (Windows) +# if: runner.os == 'Windows' +# uses: egor-tensin/vs-shell@v2 +# with: +# arch: x64 +# +# - name: CTest +# run: ctest -S ctest-shared.cmake -V --output-on-failure --timeout 900 +# +# - name: Upload results +# uses: actions/upload-artifact@v4 +# with: +# name: ${{ matrix.os }}-${{ github.job }}-results +# path: ${{ github.workspace }}/${{ env.BUILD_DIR }}/Testing/ +# +# test-clang: +# strategy: +# fail-fast: false +# matrix: +# os: [macos-latest, ubuntu-latest, windows-latest] +# shared_libs: [OFF, ON] +# enable_module: [OFF, ON] +# +# runs-on: ${{ matrix.os }} +# env: +# BUILD_DIR: _build +# +# steps: +# - uses: actions/checkout@v4 +# +# - name: Install ninja valgrind (Linux) +# if: runner.os == 'Linux' +# run: sudo apt-get update && sudo apt-get install -y ninja-build clang valgrind +# +# - name: Install ninja (macOS) +# if: runner.os == 'macOS' +# run: brew install ninja +# +# - name: Set up Visual Studio shell (Windows) +# if: runner.os == 'Windows' +# uses: egor-tensin/vs-shell@v2 +# with: +# arch: x64 +# +# - name: CMake configure +# if: runner.os == 'Linux' +# run: CC=clang CXX=clang++ cmake -B ${{ env.BUILD_DIR }} -DBUILD_SHARED_LIBS=${{ matrix.shared_libs }} -DIPHREEQC_ENABLE_MODULE=${{ matrix.enable_module }} -DCMAKE_CXX_STANDARD=20 -DCMAKE_CXX_STANDARD_REQUIRED=ON +# +# - name: CMake configure +# if: runner.os == 'macOS' +# run: CC=$(brew --prefix llvm@15)/bin/clang CXX=$(brew --prefix llvm@15)/bin/clang++ cmake -B ${{ env.BUILD_DIR }} -DBUILD_SHARED_LIBS=${{ matrix.shared_libs }} -DIPHREEQC_ENABLE_MODULE=${{ matrix.enable_module }} -DCMAKE_CXX_STANDARD=20 -DCMAKE_CXX_STANDARD_REQUIRED=ON +# +# - name: CMake configure +# if: runner.os == 'Windows' +# run: cmake -B ${{ env.BUILD_DIR }} -A x64 -T "ClangCL" -DBUILD_SHARED_LIBS=${{ matrix.shared_libs }} -DIPHREEQC_ENABLE_MODULE=${{ matrix.enable_module }} -DCMAKE_CXX_STANDARD=20 -DCMAKE_CXX_STANDARD_REQUIRED=ON +# +# - name: CMake build +# run: cmake --build ${{ env.BUILD_DIR }} +# +# - name: CTest +# run: ctest --test-dir ${{ env.BUILD_DIR }} +# +# - name: Upload results +# uses: actions/upload-artifact@v4 +# with: +# name: ${{ matrix.os }}-${{ github.job }}-SHARED=${{ matrix.shared_libs }}-MODULE=${{ matrix.enable_module }}-results +# path: ${{ github.workspace }}/${{ env.BUILD_DIR }}/Testing/ +# +# chm: +# runs-on: windows-latest +# +# steps: +# - name: Checkout phreeqc3-HTMLversion +# uses: actions/checkout@v4 +# with: +# repository: usgs-coupled-subtrees/phreeqc3-HTMLversion +# ref: master +# +# - name: cache htmlhelp +# id: cache-htmlhelp +# uses: actions/cache@v4 +# with: +# path: "C:/Program Files (x86)/HTML Help Workshop" +# key: ${{ runner.os }}-htmlhelp +# +# - name: install htmlhelp +# if: steps.cache-htmlhelp.outputs.cache-hit != 'true' +# timeout-minutes: 5 +# run: | +# curl -L -O --max-time 120 http://web.archive.org/web/20160201063255/http://download.microsoft.com/download/0/A/9/0A939EF6-E31C-430F-A3DF-DFAE7960D564/htmlhelp.exe +# cmd /c start /wait .\htmlhelp.exe /q /c /t:$(Get-Location)\tmp +# $file = "$(Get-Location)\tmp\htmlhelp.inf" +# (Get-Content $file) | Foreach-Object { $_ ` +# -replace '^BeginPrompt', ';;BeginPrompt' ` +# -replace '^EndPrompt', ';;EndPrompt' ` +# -replace '^49000=CustomLDID49000, 1', '49000=CustomLDID49000, 5' ` +# -replace '^"hhupd.exe', ';;hhupd.exe' ` +# -replace '^DefaultInstallDir="C:\\Program Files\\HTML Help Workshop"', 'DefaultInstallDir="%ProgramFiles%\\HTML Help Workshop"' +# } | Set-Content $file +# cmd /c start /wait .\tmp\setup.exe +# Remove-Item -Recurse -Force .\tmp +# Remove-Item -Recurse -Force .\htmlhelp.exe +# # the next line doesn't seem to work (supposed to set the path) +# # echo 'C:\Program Files (x86)\HTML Help Workshop' >> $GITHUB_PATH +# +# - name: compile chm +# shell: bash +# run: | +# pushd HTML +# bash fixup_html.bash +# popd +# # hhc returns 1 on success +# set +e +# 'C:\Program Files (x86)\HTML Help Workshop\hhc' phreeqc3.hhp | tee hhc.out +# status=${PIPESTATUS[0]} +# set -e +# if [ "$status" -eq 1 ]; then +# echo "[OK]" +# exit 0 +# else +# echo "[FAILED]" +# exit 1 +# fi +# +# - uses: actions/upload-artifact@v4 +# with: +# name: chm +# path: ${{github.workspace}}/phreeqc3.chm +# +# +# R-CMD-check: +# needs: [init] +# runs-on: ${{ matrix.config.os }} +# +# name: ${{ matrix.config.os }} (${{ matrix.config.r }}) +# +# strategy: +# fail-fast: false +# matrix: +# config: +# - {os: macos-latest, r: 'release'} +# - {os: windows-latest, r: 'release'} +# - {os: ubuntu-latest, r: 'devel', http-user-agent: 'release'} +# - {os: ubuntu-latest, r: 'release'} +# - {os: ubuntu-latest, r: 'oldrel-1'} +# +# steps: +# - uses: actions/checkout@v4 +# +# - name: versioning +# run: ./jenkins-dist.sh -v ${{ needs.init.outputs.VER }} -r ${{ needs.init.outputs.REL }} -d ${{ needs.init.outputs.DATE }} +# +# - name: Setup R +# uses: r-lib/actions/setup-r@v2 +# with: +# r-version: ${{ matrix.config.r }} +# http-user-agent: ${{ matrix.config.http-user-agent }} +# use-public-rspm: true +# +# - name: create source +# working-directory: R +# run: make VERSION=${{ needs.init.outputs.VER }} RELEASE_DATE=${{ needs.init.outputs.DATE_RFC_3339 }} source +# +# - name: Install dependencies +# uses: r-lib/actions/setup-r-dependencies@v2 +# with: +# extra-packages: any::roxygen2, any::pkgbuild, any::rcmdcheck +# needs: roxygen2, pkgbuild, check +# working-directory: R/phreeqc +# +# - name: Display sessionInfo() +# run: sessionInfo() +# working-directory: R/phreeqc +# shell: Rscript {0} +# +# - name: roxygen2::roxygenise() +# run: roxygen2::roxygenise() +# working-directory: R/phreeqc +# shell: Rscript {0} +# +# - name: Check +# uses: r-lib/actions/check-r-package@v2 +# with: +# working-directory: R/phreeqc +# +# - name: List files +# if: matrix.config.os == 'ubuntu-latest' && matrix.config.r == 'release' +# run: | +# pwd +# ls -lR +# find -name "*.tar.gz" +# +# - uses: actions/upload-artifact@v4 +# if: matrix.config.os == 'ubuntu-latest' && matrix.config.r == 'release' +# with: +# name: cran +# path: ${{ github.workspace }}/R/phreeqc/check/phreeqc_*.tar.gz # r-build: @@ -373,140 +373,140 @@ jobs: # path: ${{github.workspace}}/R/valgrind.full.out - distcheck: - needs: [init, chm] - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - - uses: actions/download-artifact@v4 - with: - name: chm - - - name: mv chm - run: mv phreeqc3.chm doc/. - - - name: versioning - run: ./jenkins-dist.sh -v ${{ needs.init.outputs.VER }} -r ${{ needs.init.outputs.REL }} -d ${{ needs.init.outputs.DATE }} - - - name: doxygen - run: sudo apt-get install -y doxygen && cd doc && doxygen - - - name: autoreconf - run: autoreconf -fvi - - - name: mkdir - run: mkdir _build - - - name: configure - working-directory: ${{github.workspace}}/_build - run: ../configure --prefix=$(pwd)/INSTALL - - - name: make - working-directory: ${{github.workspace}}/_build - run: make -j2 distcheck - - - name: convert - run: | - sudo apt install -y dos2unix - native=" - doc/Makefile \ - doc/examples/AccumulateLine.c \ - doc/examples/CreateIPhreeqc.c \ - doc/examples/F90ClearAccumulatedLines.f90 \ - doc/examples/F90CreateIPhreeqc.f90 \ - doc/examples/F90DestroyIPhreeqc.f90 \ - doc/examples/F90GetComponent.f90 \ - doc/examples/F90GetDumpStringLine.f90 \ - doc/examples/F90GetSelectedOutputValue.f90 \ - doc/examples/F90GetVersionString.f90 \ - doc/examples/GetComponent.c \ - doc/examples/GetDumpString.c \ - doc/examples/GetSelectedOutputValue.c \ - doc/examples/GetVersionString.c \ - doc/examples/IPhreeqc.cpp \ - doc/examples/Makefile \ - doc/examples/phreeqc.dat \ - src/CSelectedOutput.cpp \ - src/CSelectedOutput.hxx \ - src/CVar.hxx \ - src/Debug.h \ - src/ErrorReporter.hxx \ - src/IPhreeqc.cpp \ - src/IPhreeqc.f.inc \ - src/IPhreeqc.f90.inc \ - src/IPhreeqc.h \ - src/IPhreeqc.hpp \ - src/IPhreeqcCallbacks.h \ - src/IPhreeqcF.f \ - src/IPhreeqcLib.cpp \ - src/IPhreeqc_interface.F90 \ - src/IPhreeqc_interface_F.cpp \ - src/IPhreeqc_interface_F.h \ - src/Var.c \ - src/Var.h \ - src/Version.h \ - src/fimpl.h \ - src/fwrap.cpp \ - src/fwrap.h \ - src/fwrap1.cpp \ - src/fwrap2.cpp \ - src/fwrap3.cpp \ - src/fwrap4.cpp \ - src/fwrap5.cpp \ - src/fwrap6.cpp \ - src/fwrap7.cpp \ - src/fwrap8.cpp \ - src/pp_sys.cpp \ - src/thread.h \ - test/llnl.dat \ - test/phreeqc.dat \ - test2/Makefile \ - test2/wateq4f.dat \ - test5/Makefile \ - test5/phreeqc.dat \ - test5/test5.c \ - tests/main_fortran.cxx \ - tests/test_c.c \ - tests/test_cxx.cxx \ - tests/test_f90.F90 \ - unit/TestCVar.cpp \ - unit/TestCVar.h \ - unit/TestInterface.cpp \ - unit/TestInterface.h \ - unit/TestSelectedOutput.cpp \ - unit/TestSelectedOutput.h \ - unit/TestVar.cpp \ - unit/TestVar.h \ - unit/llnl.dat.old \ - unit/missing_e.dat \ - unit/phreeqc.dat.old \ - unit/unit.cpp" - for f in ${native}; do - unix2dos "${f}" - done - - - name: dist-zip - working-directory: ${{github.workspace}}/_build - run: make dist-zip - - - name: copy - run: cp doc/README IPhreeqc_ReadMe.txt - - - uses: actions/upload-artifact@v4 - with: - name: readme - path: ${{github.workspace}}/IPhreeqc_ReadMe.txt - - - uses: actions/upload-artifact@v4 - with: - name: tarball - path: ${{github.workspace}}/_build/*.tar.gz - - - uses: actions/upload-artifact@v4 - with: - name: zipball - path: ${{github.workspace}}/_build/*.zip + # distcheck: + # needs: [init, chm] + # runs-on: ubuntu-latest + # steps: + # - uses: actions/checkout@v4 + # + # - uses: actions/download-artifact@v4 + # with: + # name: chm + # + # - name: mv chm + # run: mv phreeqc3.chm doc/. + # + # - name: versioning + # run: ./jenkins-dist.sh -v ${{ needs.init.outputs.VER }} -r ${{ needs.init.outputs.REL }} -d ${{ needs.init.outputs.DATE }} + # + # - name: doxygen + # run: sudo apt-get install -y doxygen && cd doc && doxygen + # + # - name: autoreconf + # run: autoreconf -fvi + # + # - name: mkdir + # run: mkdir _build + # + # - name: configure + # working-directory: ${{github.workspace}}/_build + # run: ../configure --prefix=$(pwd)/INSTALL + # + # - name: make + # working-directory: ${{github.workspace}}/_build + # run: make -j2 distcheck + # + # - name: convert + # run: | + # sudo apt install -y dos2unix + # native=" + # doc/Makefile \ + # doc/examples/AccumulateLine.c \ + # doc/examples/CreateIPhreeqc.c \ + # doc/examples/F90ClearAccumulatedLines.f90 \ + # doc/examples/F90CreateIPhreeqc.f90 \ + # doc/examples/F90DestroyIPhreeqc.f90 \ + # doc/examples/F90GetComponent.f90 \ + # doc/examples/F90GetDumpStringLine.f90 \ + # doc/examples/F90GetSelectedOutputValue.f90 \ + # doc/examples/F90GetVersionString.f90 \ + # doc/examples/GetComponent.c \ + # doc/examples/GetDumpString.c \ + # doc/examples/GetSelectedOutputValue.c \ + # doc/examples/GetVersionString.c \ + # doc/examples/IPhreeqc.cpp \ + # doc/examples/Makefile \ + # doc/examples/phreeqc.dat \ + # src/CSelectedOutput.cpp \ + # src/CSelectedOutput.hxx \ + # src/CVar.hxx \ + # src/Debug.h \ + # src/ErrorReporter.hxx \ + # src/IPhreeqc.cpp \ + # src/IPhreeqc.f.inc \ + # src/IPhreeqc.f90.inc \ + # src/IPhreeqc.h \ + # src/IPhreeqc.hpp \ + # src/IPhreeqcCallbacks.h \ + # src/IPhreeqcF.f \ + # src/IPhreeqcLib.cpp \ + # src/IPhreeqc_interface.F90 \ + # src/IPhreeqc_interface_F.cpp \ + # src/IPhreeqc_interface_F.h \ + # src/Var.c \ + # src/Var.h \ + # src/Version.h \ + # src/fimpl.h \ + # src/fwrap.cpp \ + # src/fwrap.h \ + # src/fwrap1.cpp \ + # src/fwrap2.cpp \ + # src/fwrap3.cpp \ + # src/fwrap4.cpp \ + # src/fwrap5.cpp \ + # src/fwrap6.cpp \ + # src/fwrap7.cpp \ + # src/fwrap8.cpp \ + # src/pp_sys.cpp \ + # src/thread.h \ + # test/llnl.dat \ + # test/phreeqc.dat \ + # test2/Makefile \ + # test2/wateq4f.dat \ + # test5/Makefile \ + # test5/phreeqc.dat \ + # test5/test5.c \ + # tests/main_fortran.cxx \ + # tests/test_c.c \ + # tests/test_cxx.cxx \ + # tests/test_f90.F90 \ + # unit/TestCVar.cpp \ + # unit/TestCVar.h \ + # unit/TestInterface.cpp \ + # unit/TestInterface.h \ + # unit/TestSelectedOutput.cpp \ + # unit/TestSelectedOutput.h \ + # unit/TestVar.cpp \ + # unit/TestVar.h \ + # unit/llnl.dat.old \ + # unit/missing_e.dat \ + # unit/phreeqc.dat.old \ + # unit/unit.cpp" + # for f in ${native}; do + # unix2dos "${f}" + # done + # + # - name: dist-zip + # working-directory: ${{github.workspace}}/_build + # run: make dist-zip + # + # - name: copy + # run: cp doc/README IPhreeqc_ReadMe.txt + # + # - uses: actions/upload-artifact@v4 + # with: + # name: readme + # path: ${{github.workspace}}/IPhreeqc_ReadMe.txt + # + # - uses: actions/upload-artifact@v4 + # with: + # name: tarball + # path: ${{github.workspace}}/_build/*.tar.gz + # + # - uses: actions/upload-artifact@v4 + # with: + # name: zipball + # path: ${{github.workspace}}/_build/*.zip # build: # needs: [init] diff --git a/CMakeLists.txt b/CMakeLists.txt index 8e0d83e0..0bfcf738 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,47 +2,28 @@ cmake_minimum_required(VERSION 3.20) project ( - IPhreeqc + litephreeqc VERSION 3.8.5 LANGUAGES CXX C ) -# check if this is the root project -if (CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME) - set(STANDALONE_BUILD 1) -else() - set(STANDALONE_BUILD 0) +if (WIN32) + message(FATAL_ERROR "litephreeqc cannot be built on Windows systems.") endif() -if (STANDALONE_BUILD) - # Set a default build type if none was specified - set(default_build_type "Release") - if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) - set(CMAKE_BUILD_TYPE "${default_build_type}" CACHE - STRING "Choose the type of build." FORCE) - # Set the possible values of build type for cmake-gui - set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS - "Debug" "Release" "MinSizeRel" "RelWithDebInfo") - endif() -endif() - -# overide docdir on windows -if (WIN32 AND NOT CMAKE_INSTALL_DOCDIR) - set(CMAKE_INSTALL_DOCDIR "" CACHE PATH "documentation root (doc)") - set(CMAKE_INSTALL_DOCDIR "doc") +# Set a default build type if none was specified +set(default_build_type "Release") +if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + set(CMAKE_BUILD_TYPE "${default_build_type}" CACHE + STRING "Choose the type of build." FORCE) + # Set the possible values of build type for cmake-gui + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS + "Debug" "Release" "MinSizeRel" "RelWithDebInfo") endif() # set standard directory locations include(GNUInstallDirs) -if (STANDALONE_BUILD AND MSVC) - option (IPHREEQC_STATIC_RUNTIME "Build with a static runtime" OFF) - if (IPHREEQC_STATIC_RUNTIME) - # compile with static runtime - set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>") - endif() -endif() - # Fortran option (IPHREEQC_ENABLE_MODULE "Enable Fortran module" ON) if (STANDALONE_BUILD) @@ -60,22 +41,7 @@ endif() # compile Var.c as c++ set_source_files_properties(src/Var.c PROPERTIES LANGUAGE CXX) -if (STANDALONE_BUILD) - option(BUILD_SHARED_LIBS "Build Shared Libraries" OFF) - set(LIB_TYPE STATIC) -endif() - -if (STANDALONE_BUILD) - if (MSVC) - option(BUILD_CLR_LIBS "Build CLR Libraries" OFF) - endif() -endif() - -if (BUILD_SHARED_LIBS) - set(LIB_TYPE SHARED) -endif() - -add_library(IPhreeqc ${LIB_TYPE} src/IPhreeqc.cpp) +add_library(IPhreeqc STATIC src/IPhreeqc.cpp) target_sources(IPhreeqc PRIVATE @@ -220,7 +186,7 @@ target_sources(IPhreeqc src/phreeqcpp/UserPunch.cpp src/phreeqcpp/UserPunch.h src/phreeqcpp/utilities.cpp - src/phreeqcpp/GFZ.cpp + src/phreeqcpp/litephreeqc_funcs.cpp src/thread.h src/Var.c src/Var.h @@ -229,10 +195,10 @@ target_sources(IPhreeqc target_include_directories(IPhreeqc PUBLIC - $ - $ - $ - $ + $ + $ + $ + $ $ ) @@ -260,37 +226,6 @@ if (NOT IPHREEQC_ENABLE_MODULE) ) endif() -if (${CMAKE_CXX_COMPILER_ID} STREQUAL MSVC) - target_compile_options(IPhreeqc PRIVATE /wd4251 /wd4275 /wd4793) -endif() - -# Disable deprecation warnings for standard C and STL functions in VS2005 -# and later -if (MSVC_VERSION EQUAL 1400 OR MSVC_VERSION GREATER 1400) - target_compile_definitions(IPhreeqc PUBLIC _CRT_SECURE_NO_DEPRECATE) - target_compile_definitions(IPhreeqc PUBLIC _SCL_SECURE_NO_WARNINGS) -endif() - -if (WIN32 AND BUILD_SHARED_LIBS) - # Required to build IMPLIB - # (Seems to be automatically set when using Visual Studio as the generator) - target_compile_definitions(IPhreeqc PRIVATE _WINDLL) -endif() - -# Allow user to override POSTFIX properties (but mandate them so that -# all builds can be installed to the same directory) -if (NOT CMAKE_DEBUG_POSTFIX) - set_target_properties(IPhreeqc PROPERTIES DEBUG_POSTFIX "d") -endif() - -if (NOT CMAKE_MINSIZEREL_POSTFIX) - set_target_properties(IPhreeqc PROPERTIES MINSIZEREL_POSTFIX "msr") -endif() - -if (NOT CMAKE_RELWITHDEBINFO_POSTFIX) - set_target_properties(IPhreeqc PROPERTIES RELWITHDEBINFO_POSTFIX "rwd") -endif() - set(IPhreeqc_Headers ${PROJECT_SOURCE_DIR}/src/IPhreeqc.h ${PROJECT_SOURCE_DIR}/src/IPhreeqc.hpp @@ -319,158 +254,94 @@ else() ) endif() -# Setup references for /CLR -if (MSVC AND BUILD_SHARED_LIBS AND BUILD_CLR_LIBS) - if (MSVC_VERSION LESS 1600) - message(FATAL_ERROR "CLR options must be set manually for versions prior to Visual Studio 2010") - endif() - set_target_properties(IPhreeqc PROPERTIES VS_DOTNET_REFERENCES "System;System.Drawing;System.Windows.Forms;${CMAKE_CURRENT_SOURCE_DIR}/src/phreeqcpp/ZedGraph.dll") - set_target_properties(IPhreeqc PROPERTIES COMMON_LANGUAGE_RUNTIME "") - target_compile_definitions(IPhreeqc PRIVATE "MULTICHART") -endif() - set_target_properties(IPhreeqc PROPERTIES VERSION "${IPhreeqc_VERSION}" SOVERSION "${IPhreeqc_VERSION_MAJOR}" ) # install -if (STANDALONE_BUILD) +include(CMakePackageConfigHelpers) - include(CMakePackageConfigHelpers) - - configure_package_config_file(IPhreeqcConfig.cmake.in - ${CMAKE_CURRENT_BINARY_DIR}/IPhreeqcConfig.cmake - INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/IPhreeqc - ) - - write_basic_package_version_file("IPhreeqcConfigVersion.cmake" - VERSION ${IPhreeqc_VERSION} - COMPATIBILITY SameMajorVersion - ) - - install(FILES ${CMAKE_CURRENT_BINARY_DIR}/IPhreeqcConfig.cmake ${CMAKE_CURRENT_BINARY_DIR}/IPhreeqcConfigVersion.cmake - DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/IPhreeqc - ) - - install(TARGETS IPhreeqc - EXPORT IPhreeqcTargets - LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} - ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} - RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} - INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} - ) - install(EXPORT IPhreeqcTargets - FILE IPhreeqcTargets.cmake - NAMESPACE IPhreeqc:: - DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/IPhreeqc - ) - - install(FILES ${IPhreeqc_Headers} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) - if (WIN32) - install(FILES ${IPhreeqc_SRC} DESTINATION src) - else() - install(FILES ${IPhreeqc_SRC} DESTINATION ${CMAKE_INSTALL_DOCDIR}/src) - endif() - if (BUILD_CLR_LIBS) - install(FILES "${PROJECT_SOURCE_DIR}/src/phreeqcpp/ZedGraph.dll" DESTINATION ${CMAKE_INSTALL_BINDIR}) - endif() -endif() - -if (BUILD_CLR_LIBS) - if (NOT BUILD_SHARED_LIBS) - message(FATAL_ERROR "BUILD_CLR_LIBS requires that BUILD_SHARED_LIBS be set") - endif() - - if (IPHREEQC_STATIC_RUNTIME) - message(FATAL_ERROR "BUILD_CLR_LIBS and IPHREEQC_STATIC_RUNTIME are mutually exclusive") - endif() - - # CLR files - target_sources(IPhreeqc - PRIVATE - src/phreeqcpp/ChartHandler.cpp - src/phreeqcpp/ChartHandler.h - src/phreeqcpp/ChartObject.cpp - src/phreeqcpp/ChartObject.h - src/phreeqcpp/CurveObject.cpp - src/phreeqcpp/CurveObject.h +configure_package_config_file(IPhreeqcConfig.cmake.in + ${CMAKE_CURRENT_BINARY_DIR}/IPhreeqcConfig.cmake + INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/IPhreeqc ) +write_basic_package_version_file("IPhreeqcConfigVersion.cmake" + VERSION ${IPhreeqc_VERSION} + COMPATIBILITY SameMajorVersion + ) + +install(FILES ${CMAKE_CURRENT_BINARY_DIR}/IPhreeqcConfig.cmake ${CMAKE_CURRENT_BINARY_DIR}/IPhreeqcConfigVersion.cmake + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/IPhreeqc + ) + +install(TARGETS IPhreeqc + EXPORT IPhreeqcTargets + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} + INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} + ) +install(EXPORT IPhreeqcTargets + FILE IPhreeqcTargets.cmake + NAMESPACE IPhreeqc:: + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/IPhreeqc + ) + +install(FILES ${IPhreeqc_Headers} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) +if (WIN32) + install(FILES ${IPhreeqc_SRC} DESTINATION src) +else() + install(FILES ${IPhreeqc_SRC} DESTINATION ${CMAKE_INSTALL_DOCDIR}/src) endif() +if (BUILD_CLR_LIBS) + install(FILES "${PROJECT_SOURCE_DIR}/src/phreeqcpp/ZedGraph.dll" DESTINATION ${CMAKE_INSTALL_BINDIR}) +endif() + include (CTest) -if (STANDALONE_BUILD) +# add_subdirectory(database) +# add_subdirectory(doc) +# add_subdirectory(examples) - add_subdirectory(database) - add_subdirectory(doc) - add_subdirectory(examples) - - if (BUILD_TESTING) - add_subdirectory(tests) - endif() - - - if (BUILD_TESTING) # may need to add MSVC version check - include(FetchContent) - - # Avoid warning about DOWNLOAD_EXTRACT_TIMESTAMP in CMake 3.24: - if (CMAKE_VERSION VERSION_GREATER_EQUAL "3.24.0") - cmake_policy(SET CMP0135 NEW) - endif() - - FetchContent_Declare( - googletest - URL https://github.com/google/googletest/archive/release-1.12.1.tar.gz - ) - - mark_as_advanced( - FETCHCONTENT_BASE_DIR - FETCHCONTENT_FULLY_DISCONNECTED - FETCHCONTENT_QUIET - FETCHCONTENT_SOURCE_DIR_GOOGLETEST - FETCHCONTENT_UPDATES_DISCONNECTED - FETCHCONTENT_UPDATES_DISCONNECTED_GOOGLETEST - ) - - # Prevent GoogleTest from overriding our compiler/linker options - # when building with Visual Studio - set(gtest_force_shared_crt ON CACHE BOOL "" FORCE) - - set(BUILD_GTEST ON CACHE BOOL "" FORCE) - set(BUILD_GMOCK ON CACHE BOOL "" FORCE) - - set(INSTALL_GTEST OFF CACHE BOOL "" FORCE) - set(INSTALL_GMOCK OFF CACHE BOOL "" FORCE) - - mark_as_advanced( - BUILD_GTEST - BUILD_GMOCK - INSTALL_GTEST - INSTALL_GMOCK - gmock_build_tests - gtest_build_tests - gtest_build_samples - gtest_disable_pthreads - gtest_force_shared_crt - gtest_hide_internal_symbols - ) - - FetchContent_MakeAvailable(googletest) - if (NOT googletest_POPULATED) - # Always build googletest static - set(SAVE_BUILD_SHARED_LIBS ${BUILD_SHARED_LIBS}) - set(BUILD_SHARED_LIBS OFF) - FetchContent_MakeAvailable(googletest) - set(BUILD_SHARED_LIBS ${SAVE_BUILD_SHARED_LIBS}) - endif() - - add_subdirectory(gtest) - endif() +if (BUILD_TESTING) + add_subdirectory(tests) endif() -add_subdirectory(poet) + +if (BUILD_TESTING) # may need to add MSVC version check + include(FetchContent) + + # Avoid warning about DOWNLOAD_EXTRACT_TIMESTAMP in CMake 3.24: + if (CMAKE_VERSION VERSION_GREATER_EQUAL "3.24.0") + cmake_policy(SET CMP0135 NEW) + endif() + + FetchContent_Declare( + googletest + GIT_REPOSITORY https://github.com/google/googletest.git + GIT_TAG v1.17.0 + ) + + # Prevent GoogleTest from overriding our compiler/linker options + # when building with Visual Studio + set(gtest_force_shared_crt ON CACHE BOOL "" FORCE) + + FetchContent_MakeAvailable(googletest) + if (NOT googletest_POPULATED) + # Always build googletest static + set(SAVE_BUILD_SHARED_LIBS ${BUILD_SHARED_LIBS}) + set(BUILD_SHARED_LIBS OFF) + FetchContent_MakeAvailable(googletest) + set(BUILD_SHARED_LIBS ${SAVE_BUILD_SHARED_LIBS}) + endif() + + add_subdirectory(gtest) +endif() + +add_subdirectory(litephreeqc) # get_cmake_property(_variableNames VARIABLES) # list (SORT _variableNames) diff --git a/poet/CMakeLists.txt b/litephreeqc/CMakeLists.txt similarity index 70% rename from poet/CMakeLists.txt rename to litephreeqc/CMakeLists.txt index 5050dca7..3e75ae34 100644 --- a/poet/CMakeLists.txt +++ b/litephreeqc/CMakeLists.txt @@ -1,4 +1,5 @@ -set(POET_SOURCE_FILES + +set(LPQC_SOURCE_FILES src/Engine.cpp src/Runner.cpp src/Knobs.cpp @@ -20,19 +21,19 @@ set(POET_SOURCE_FILES src/PhreeqcMatrix/Misc.cpp ) -add_library(IPhreeqcPOET ${POET_SOURCE_FILES}) -target_link_libraries(IPhreeqcPOET PUBLIC IPhreeqc) -target_include_directories(IPhreeqcPOET PUBLIC +add_library(litephreeqc STATIC ${LPQC_SOURCE_FILES}) +target_link_libraries(litephreeqc PUBLIC IPhreeqc) +target_include_directories(litephreeqc PUBLIC $ $) # Set C++20 standard -target_compile_features(IPhreeqcPOET PUBLIC cxx_std_20) +target_compile_features(litephreeqc PUBLIC cxx_std_20) if (BUILD_TESTING AND STANDALONE_BUILD) enable_testing() - set(POET_TEST_SOURCE_FILES + set(LPQC_TEST_SOURCE_FILES test/testPhreeqcEngine.cpp test/testPhreeqcMatrix.cpp test/testPhreeqcRunner.cpp @@ -41,15 +42,15 @@ if (BUILD_TESTING AND STANDALONE_BUILD) test/IPhreeqcReader.cpp ) - add_executable(poet_test ${POET_TEST_SOURCE_FILES}) + add_executable(litephreeqc_test ${LPQC_TEST_SOURCE_FILES}) target_link_libraries( - poet_test - IPhreeqcPOET + litephreeqc_test + litephreeqc GTest::gtest_main ) - target_include_directories(poet_test PRIVATE ${CMAKE_CURRENT_BINARY_DIR}) + target_include_directories(litephreeqc_test PRIVATE ${CMAKE_CURRENT_BINARY_DIR}) # read file and store in variable file(REAL_PATH "${PROJECT_SOURCE_DIR}/database/phreeqc.dat" POET_PHREEQCDAT_DB) @@ -59,11 +60,11 @@ if (BUILD_TESTING AND STANDALONE_BUILD) configure_file("${CMAKE_CURRENT_SOURCE_DIR}/test/testInput.hpp.in" "${CMAKE_CURRENT_BINARY_DIR}/testInput.hpp") include(GoogleTest) - gtest_discover_tests(poet_test) + gtest_discover_tests(litephreeqc_test) endif() -add_executable(testGolemRunner test/testGolemRunner.cpp) -target_link_libraries(testGolemRunner IPhreeqcPOET) +add_executable(golemrunner test/testGolemRunner.cpp) +target_link_libraries(golemrunner litephreeqc) add_executable(testGetters test/testGetters.cpp) -target_link_libraries(testGetters IPhreeqcPOET) +target_link_libraries(testGetters litephreeqc) diff --git a/litephreeqc/LICENSE.txt b/litephreeqc/LICENSE.txt new file mode 100644 index 00000000..7a9f35de --- /dev/null +++ b/litephreeqc/LICENSE.txt @@ -0,0 +1,10 @@ +This project is subject to the original PHREEQC license. `litephreeqc` is a +version of the PHREEQC code that has been modified to be used as a library. + +It adds a C++ interface on top of the original PHREEQC code, with small changes +to the original code base. + +Authors of Modifications: +- Max Luebke (mluebke@uni-potsdam.de) - University of Potsdam +- Marco De Lucia (delucia@gfz.de) - GFZ Helmholz Centre for Geosciences + diff --git a/poet/include/PhreeqcEngine.hpp b/litephreeqc/include/PhreeqcEngine.hpp similarity index 73% rename from poet/include/PhreeqcEngine.hpp rename to litephreeqc/include/PhreeqcEngine.hpp index 5bb3132c..86936450 100644 --- a/poet/include/PhreeqcEngine.hpp +++ b/litephreeqc/include/PhreeqcEngine.hpp @@ -1,3 +1,16 @@ +/* + * This project is subject to the original PHREEQC license. `litephreeqc` is a + * version of the PHREEQC code that has been modified to be used as a library. + * + * It adds a C++ interface on top of the original PHREEQC code, with small + * changes to the original code base. + * + * Authors of Modifications: + * - Max Luebke (mluebke@uni-potsdam.de) - University of Potsdam + * - Marco De Lucia (delucia@gfz.de) - GFZ Helmholz Centre for Geosciences + * + */ + #pragma once #include "PhreeqcMatrix.hpp" diff --git a/poet/include/PhreeqcKnobs.hpp b/litephreeqc/include/PhreeqcKnobs.hpp similarity index 84% rename from poet/include/PhreeqcKnobs.hpp rename to litephreeqc/include/PhreeqcKnobs.hpp index ff599e9f..62a060d1 100644 --- a/poet/include/PhreeqcKnobs.hpp +++ b/litephreeqc/include/PhreeqcKnobs.hpp @@ -1,3 +1,16 @@ +/* + * This project is subject to the original PHREEQC license. `litephreeqc` is a + * version of the PHREEQC code that has been modified to be used as a library. + * + * It adds a C++ interface on top of the original PHREEQC code, with small + * changes to the original code base. + * + * Authors of Modifications: + * - Max Luebke (mluebke@uni-potsdam.de) - University of Potsdam + * - Marco De Lucia (delucia@gfz.de) - GFZ Helmholz Centre for Geosciences + * + */ + #pragma once #include diff --git a/poet/include/PhreeqcMatrix.hpp b/litephreeqc/include/PhreeqcMatrix.hpp similarity index 96% rename from poet/include/PhreeqcMatrix.hpp rename to litephreeqc/include/PhreeqcMatrix.hpp index d95b71a7..3632dc57 100644 --- a/poet/include/PhreeqcMatrix.hpp +++ b/litephreeqc/include/PhreeqcMatrix.hpp @@ -1,3 +1,16 @@ +/* + * This project is subject to the original PHREEQC license. `litephreeqc` is a + * version of the PHREEQC code that has been modified to be used as a library. + * + * It adds a C++ interface on top of the original PHREEQC code, with small + * changes to the original code base. + * + * Authors of Modifications: + * - Max Luebke (mluebke@uni-potsdam.de) - University of Potsdam + * - Marco De Lucia (delucia@gfz.de) - GFZ Helmholz Centre for Geosciences + * + */ + #pragma once #include diff --git a/poet/include/PhreeqcRunner.hpp b/litephreeqc/include/PhreeqcRunner.hpp similarity index 85% rename from poet/include/PhreeqcRunner.hpp rename to litephreeqc/include/PhreeqcRunner.hpp index ef95a5c3..77c9c1bb 100644 --- a/poet/include/PhreeqcRunner.hpp +++ b/litephreeqc/include/PhreeqcRunner.hpp @@ -1,3 +1,16 @@ +/* + * This project is subject to the original PHREEQC license. `litephreeqc` is a + * version of the PHREEQC code that has been modified to be used as a library. + * + * It adds a C++ interface on top of the original PHREEQC code, with small + * changes to the original code base. + * + * Authors of Modifications: + * - Max Luebke (mluebke@uni-potsdam.de) - University of Potsdam + * - Marco De Lucia (delucia@gfz.de) - GFZ Helmholz Centre for Geosciences + * + */ + #pragma once #include "PhreeqcEngine.hpp" diff --git a/poet/src/Engine.cpp b/litephreeqc/src/Engine.cpp similarity index 94% rename from poet/src/Engine.cpp rename to litephreeqc/src/Engine.cpp index 7c81b3c3..cc36466d 100644 --- a/poet/src/Engine.cpp +++ b/litephreeqc/src/Engine.cpp @@ -1,3 +1,16 @@ +/* + * This project is subject to the original PHREEQC license. `litephreeqc` is a + * version of the PHREEQC code that has been modified to be used as a library. + * + * It adds a C++ interface on top of the original PHREEQC code, with small + * changes to the original code base. + * + * Authors of Modifications: + * - Max Luebke (mluebke@uni-potsdam.de) - University of Potsdam + * - Marco De Lucia (delucia@gfz.de) - GFZ Helmholz Centre for Geosciences + * + */ + #include "PhreeqcEngine.hpp" #include #include diff --git a/poet/src/Knobs.cpp b/litephreeqc/src/Knobs.cpp similarity index 68% rename from poet/src/Knobs.cpp rename to litephreeqc/src/Knobs.cpp index f77d4294..fc969003 100644 --- a/poet/src/Knobs.cpp +++ b/litephreeqc/src/Knobs.cpp @@ -1,3 +1,16 @@ +/* + * This project is subject to the original PHREEQC license. `litephreeqc` is a + * version of the PHREEQC code that has been modified to be used as a library. + * + * It adds a C++ interface on top of the original PHREEQC code, with small + * changes to the original code base. + * + * Authors of Modifications: + * - Max Luebke (mluebke@uni-potsdam.de) - University of Potsdam + * - Marco De Lucia (delucia@gfz.de) - GFZ Helmholz Centre for Geosciences + * + */ + #include "PhreeqcKnobs.hpp" #include diff --git a/poet/src/PhreeqcMatrix/Access.cpp b/litephreeqc/src/PhreeqcMatrix/Access.cpp similarity index 95% rename from poet/src/PhreeqcMatrix/Access.cpp rename to litephreeqc/src/PhreeqcMatrix/Access.cpp index 01d77b49..87387d16 100644 --- a/poet/src/PhreeqcMatrix/Access.cpp +++ b/litephreeqc/src/PhreeqcMatrix/Access.cpp @@ -1,3 +1,16 @@ +/* + * This project is subject to the original PHREEQC license. `litephreeqc` is a + * version of the PHREEQC code that has been modified to be used as a library. + * + * It adds a C++ interface on top of the original PHREEQC code, with small + * changes to the original code base. + * + * Authors of Modifications: + * - Max Luebke (mluebke@uni-potsdam.de) - University of Potsdam + * - Marco De Lucia (delucia@gfz.de) - GFZ Helmholz Centre for Geosciences + * + */ + #include #include #include diff --git a/poet/src/PhreeqcMatrix/Ctor.cpp b/litephreeqc/src/PhreeqcMatrix/Ctor.cpp similarity index 81% rename from poet/src/PhreeqcMatrix/Ctor.cpp rename to litephreeqc/src/PhreeqcMatrix/Ctor.cpp index 0c0b4ad0..a5b6e9fb 100644 --- a/poet/src/PhreeqcMatrix/Ctor.cpp +++ b/litephreeqc/src/PhreeqcMatrix/Ctor.cpp @@ -1,3 +1,16 @@ +/* + * This project is subject to the original PHREEQC license. `litephreeqc` is a + * version of the PHREEQC code that has been modified to be used as a library. + * + * It adds a C++ interface on top of the original PHREEQC code, with small + * changes to the original code base. + * + * Authors of Modifications: + * - Max Luebke (mluebke@uni-potsdam.de) - University of Potsdam + * - Marco De Lucia (delucia@gfz.de) - GFZ Helmholz Centre for Geosciences + * + */ + #include "IPhreeqc.hpp" #include "PhreeqcKnobs.hpp" #include "PhreeqcMatrix.hpp" diff --git a/poet/src/PhreeqcMatrix/Init.cpp b/litephreeqc/src/PhreeqcMatrix/Init.cpp similarity index 94% rename from poet/src/PhreeqcMatrix/Init.cpp rename to litephreeqc/src/PhreeqcMatrix/Init.cpp index 5fdc9bd7..82b359f3 100644 --- a/poet/src/PhreeqcMatrix/Init.cpp +++ b/litephreeqc/src/PhreeqcMatrix/Init.cpp @@ -1,3 +1,16 @@ +/* + * This project is subject to the original PHREEQC license. `litephreeqc` is a + * version of the PHREEQC code that has been modified to be used as a library. + * + * It adds a C++ interface on top of the original PHREEQC code, with small + * changes to the original code base. + * + * Authors of Modifications: + * - Max Luebke (mluebke@uni-potsdam.de) - University of Potsdam + * - Marco De Lucia (delucia@gfz.de) - GFZ Helmholz Centre for Geosciences + * + */ + #include "PhreeqcMatrix.hpp" #include "../Wrapper/EquilibriumWrapper.hpp" diff --git a/poet/src/PhreeqcMatrix/Misc.cpp b/litephreeqc/src/PhreeqcMatrix/Misc.cpp similarity index 75% rename from poet/src/PhreeqcMatrix/Misc.cpp rename to litephreeqc/src/PhreeqcMatrix/Misc.cpp index d953c71d..fdb0b09e 100644 --- a/poet/src/PhreeqcMatrix/Misc.cpp +++ b/litephreeqc/src/PhreeqcMatrix/Misc.cpp @@ -1,3 +1,16 @@ +/* + * This project is subject to the original PHREEQC license. `litephreeqc` is a + * version of the PHREEQC code that has been modified to be used as a library. + * + * It adds a C++ interface on top of the original PHREEQC code, with small + * changes to the original code base. + * + * Authors of Modifications: + * - Max Luebke (mluebke@uni-potsdam.de) - University of Potsdam + * - Marco De Lucia (delucia@gfz.de) - GFZ Helmholz Centre for Geosciences + * + */ + #include "PhreeqcMatrix.hpp" #include diff --git a/poet/src/Runner.cpp b/litephreeqc/src/Runner.cpp similarity index 85% rename from poet/src/Runner.cpp rename to litephreeqc/src/Runner.cpp index 3d9e7cf6..15cecf40 100644 --- a/poet/src/Runner.cpp +++ b/litephreeqc/src/Runner.cpp @@ -1,3 +1,16 @@ +/* + * This project is subject to the original PHREEQC license. `litephreeqc` is a + * version of the PHREEQC code that has been modified to be used as a library. + * + * It adds a C++ interface on top of the original PHREEQC code, with small + * changes to the original code base. + * + * Authors of Modifications: + * - Max Luebke (mluebke@uni-potsdam.de) - University of Potsdam + * - Marco De Lucia (delucia@gfz.de) - GFZ Helmholz Centre for Geosciences + * + */ + #include "PhreeqcEngine.hpp" #include "PhreeqcMatrix.hpp" #include "PhreeqcRunner.hpp" diff --git a/poet/src/Wrapper/EquilibriumCompWrapper.cpp b/litephreeqc/src/Wrapper/EquilibriumCompWrapper.cpp similarity index 63% rename from poet/src/Wrapper/EquilibriumCompWrapper.cpp rename to litephreeqc/src/Wrapper/EquilibriumCompWrapper.cpp index e2dee0a0..3d4c2324 100644 --- a/poet/src/Wrapper/EquilibriumCompWrapper.cpp +++ b/litephreeqc/src/Wrapper/EquilibriumCompWrapper.cpp @@ -1,3 +1,16 @@ +/* + * This project is subject to the original PHREEQC license. `litephreeqc` is a + * version of the PHREEQC code that has been modified to be used as a library. + * + * It adds a C++ interface on top of the original PHREEQC code, with small + * changes to the original code base. + * + * Authors of Modifications: + * - Max Luebke (mluebke@uni-potsdam.de) - University of Potsdam + * - Marco De Lucia (delucia@gfz.de) - GFZ Helmholz Centre for Geosciences + * + */ + #include "EquilibriumWrapper.hpp" EquilibriumWrapper::EquilibriumCompWrapper::EquilibriumCompWrapper( diff --git a/poet/src/Wrapper/EquilibriumWrapper.cpp b/litephreeqc/src/Wrapper/EquilibriumWrapper.cpp similarity index 85% rename from poet/src/Wrapper/EquilibriumWrapper.cpp rename to litephreeqc/src/Wrapper/EquilibriumWrapper.cpp index 007203bb..3e2bd617 100644 --- a/poet/src/Wrapper/EquilibriumWrapper.cpp +++ b/litephreeqc/src/Wrapper/EquilibriumWrapper.cpp @@ -1,3 +1,16 @@ +/* + * This project is subject to the original PHREEQC license. `litephreeqc` is a + * version of the PHREEQC code that has been modified to be used as a library. + * + * It adds a C++ interface on top of the original PHREEQC code, with small + * changes to the original code base. + * + * Authors of Modifications: + * - Max Luebke (mluebke@uni-potsdam.de) - University of Potsdam + * - Marco De Lucia (delucia@gfz.de) - GFZ Helmholz Centre for Geosciences + * + */ + #include "EquilibriumWrapper.hpp" #include diff --git a/poet/src/Wrapper/EquilibriumWrapper.hpp b/litephreeqc/src/Wrapper/EquilibriumWrapper.hpp similarity index 71% rename from poet/src/Wrapper/EquilibriumWrapper.hpp rename to litephreeqc/src/Wrapper/EquilibriumWrapper.hpp index be3efb03..e3cf5e28 100644 --- a/poet/src/Wrapper/EquilibriumWrapper.hpp +++ b/litephreeqc/src/Wrapper/EquilibriumWrapper.hpp @@ -1,3 +1,16 @@ +/* + * This project is subject to the original PHREEQC license. `litephreeqc` is a + * version of the PHREEQC code that has been modified to be used as a library. + * + * It adds a C++ interface on top of the original PHREEQC code, with small + * changes to the original code base. + * + * Authors of Modifications: + * - Max Luebke (mluebke@uni-potsdam.de) - University of Potsdam + * - Marco De Lucia (delucia@gfz.de) - GFZ Helmholz Centre for Geosciences + * + */ + #pragma once #include "PPassemblage.h" diff --git a/poet/src/Wrapper/ExchangeCompWrapper.cpp b/litephreeqc/src/Wrapper/ExchangeCompWrapper.cpp similarity index 74% rename from poet/src/Wrapper/ExchangeCompWrapper.cpp rename to litephreeqc/src/Wrapper/ExchangeCompWrapper.cpp index 57689420..2b20e368 100644 --- a/poet/src/Wrapper/ExchangeCompWrapper.cpp +++ b/litephreeqc/src/Wrapper/ExchangeCompWrapper.cpp @@ -1,3 +1,16 @@ +/* + * This project is subject to the original PHREEQC license. `litephreeqc` is a + * version of the PHREEQC code that has been modified to be used as a library. + * + * It adds a C++ interface on top of the original PHREEQC code, with small + * changes to the original code base. + * + * Authors of Modifications: + * - Max Luebke (mluebke@uni-potsdam.de) - University of Potsdam + * - Marco De Lucia (delucia@gfz.de) - GFZ Helmholz Centre for Geosciences + * + */ + #include "ExchangeWrapper.hpp" ExchangeWrapper::ExchangeCompWrapper::ExchangeCompWrapper(cxxExchComp &comp) diff --git a/poet/src/Wrapper/ExchangeWrapper.cpp b/litephreeqc/src/Wrapper/ExchangeWrapper.cpp similarity index 57% rename from poet/src/Wrapper/ExchangeWrapper.cpp rename to litephreeqc/src/Wrapper/ExchangeWrapper.cpp index 378e10e0..26002ce2 100644 --- a/poet/src/Wrapper/ExchangeWrapper.cpp +++ b/litephreeqc/src/Wrapper/ExchangeWrapper.cpp @@ -1,3 +1,16 @@ +/* + * This project is subject to the original PHREEQC license. `litephreeqc` is a + * version of the PHREEQC code that has been modified to be used as a library. + * + * It adds a C++ interface on top of the original PHREEQC code, with small + * changes to the original code base. + * + * Authors of Modifications: + * - Max Luebke (mluebke@uni-potsdam.de) - University of Potsdam + * - Marco De Lucia (delucia@gfz.de) - GFZ Helmholz Centre for Geosciences + * + */ + #include "ExchangeWrapper.hpp" ExchangeWrapper::ExchangeWrapper(cxxExchange *exch, @@ -21,36 +34,36 @@ ExchangeWrapper::ExchangeWrapper(cxxExchange *exch, num_elements += exchange_comps.back()->size(); } - // const std::size_t defined_comps = exchange->Get_exchange_comps().size(); + // const std::size_t defined_comps = exchange->Get_exchange_comps().size(); - // auto header_it = remaining_field_header.begin(); + // auto header_it = remaining_field_header.begin(); - // while (header_it != remaining_field_header.end() && - // exchange_comps.size() < defined_comps) { - // const std::string formular = *header_it; + // while (header_it != remaining_field_header.end() && + // exchange_comps.size() < defined_comps) { + // const std::string formular = *header_it; - // auto it = std::find_if(exchange->Get_exchange_comps().begin(), - // exchange->Get_exchange_comps().end(), - // [&](const cxxExchComp &comp) { - // return comp.Get_formula() == formular; - // }); + // auto it = std::find_if(exchange->Get_exchange_comps().begin(), + // exchange->Get_exchange_comps().end(), + // [&](const cxxExchComp &comp) { + // return comp.Get_formula() == formular; + // }); - // if (it != exchange->Get_exchange_comps().end()) { - // const size_t i = this->exchange_comps.size(); + // if (it != exchange->Get_exchange_comps().end()) { + // const size_t i = this->exchange_comps.size(); - // exchange_comps.push_back(std::make_unique(*it)); - // header_it += this->exchange_comps[i]->size(); - // num_elements += this->exchange_comps[i]->size(); - // continue; - // } + // exchange_comps.push_back(std::make_unique(*it)); + // header_it += this->exchange_comps[i]->size(); + // num_elements += this->exchange_comps[i]->size(); + // continue; + // } - // header_it++; - // } + // header_it++; + // } - // if (exchange_comps.size() != defined_comps) { - // throw std::runtime_error( - // "Not all exchange components found in Phreeqc variables"); - // } + // if (exchange_comps.size() != defined_comps) { + // throw std::runtime_error( + // "Not all exchange components found in Phreeqc variables"); + // } } void ExchangeWrapper::get(std::span &exchange) const { diff --git a/poet/src/Wrapper/ExchangeWrapper.hpp b/litephreeqc/src/Wrapper/ExchangeWrapper.hpp similarity index 67% rename from poet/src/Wrapper/ExchangeWrapper.hpp rename to litephreeqc/src/Wrapper/ExchangeWrapper.hpp index dd4824cf..2c9f8e00 100644 --- a/poet/src/Wrapper/ExchangeWrapper.hpp +++ b/litephreeqc/src/Wrapper/ExchangeWrapper.hpp @@ -1,3 +1,16 @@ +/* + * This project is subject to the original PHREEQC license. `litephreeqc` is a + * version of the PHREEQC code that has been modified to be used as a library. + * + * It adds a C++ interface on top of the original PHREEQC code, with small + * changes to the original code base. + * + * Authors of Modifications: + * - Max Luebke (mluebke@uni-potsdam.de) - University of Potsdam + * - Marco De Lucia (delucia@gfz.de) - GFZ Helmholz Centre for Geosciences + * + */ + #pragma once #include "ExchComp.h" diff --git a/poet/src/Wrapper/KineticCompWrapper.cpp b/litephreeqc/src/Wrapper/KineticCompWrapper.cpp similarity index 70% rename from poet/src/Wrapper/KineticCompWrapper.cpp rename to litephreeqc/src/Wrapper/KineticCompWrapper.cpp index ff601977..a0d32be8 100644 --- a/poet/src/Wrapper/KineticCompWrapper.cpp +++ b/litephreeqc/src/Wrapper/KineticCompWrapper.cpp @@ -1,3 +1,16 @@ +/* + * This project is subject to the original PHREEQC license. `litephreeqc` is a + * version of the PHREEQC code that has been modified to be used as a library. + * + * It adds a C++ interface on top of the original PHREEQC code, with small + * changes to the original code base. + * + * Authors of Modifications: + * - Max Luebke (mluebke@uni-potsdam.de) - University of Potsdam + * - Marco De Lucia (delucia@gfz.de) - GFZ Helmholz Centre for Geosciences + * + */ + #include "KineticWrapper.hpp" #include #include diff --git a/poet/src/Wrapper/KineticWrapper.cpp b/litephreeqc/src/Wrapper/KineticWrapper.cpp similarity index 83% rename from poet/src/Wrapper/KineticWrapper.cpp rename to litephreeqc/src/Wrapper/KineticWrapper.cpp index f77396b1..97565af1 100644 --- a/poet/src/Wrapper/KineticWrapper.cpp +++ b/litephreeqc/src/Wrapper/KineticWrapper.cpp @@ -1,3 +1,16 @@ +/* + * This project is subject to the original PHREEQC license. `litephreeqc` is a + * version of the PHREEQC code that has been modified to be used as a library. + * + * It adds a C++ interface on top of the original PHREEQC code, with small + * changes to the original code base. + * + * Authors of Modifications: + * - Max Luebke (mluebke@uni-potsdam.de) - University of Potsdam + * - Marco De Lucia (delucia@gfz.de) - GFZ Helmholz Centre for Geosciences + * + */ + #include "KineticWrapper.hpp" #include diff --git a/poet/src/Wrapper/KineticWrapper.hpp b/litephreeqc/src/Wrapper/KineticWrapper.hpp similarity index 67% rename from poet/src/Wrapper/KineticWrapper.hpp rename to litephreeqc/src/Wrapper/KineticWrapper.hpp index ba1aeda7..f7a67b89 100644 --- a/poet/src/Wrapper/KineticWrapper.hpp +++ b/litephreeqc/src/Wrapper/KineticWrapper.hpp @@ -1,3 +1,16 @@ +/* + * This project is subject to the original PHREEQC license. `litephreeqc` is a + * version of the PHREEQC code that has been modified to be used as a library. + * + * It adds a C++ interface on top of the original PHREEQC code, with small + * changes to the original code base. + * + * Authors of Modifications: + * - Max Luebke (mluebke@uni-potsdam.de) - University of Potsdam + * - Marco De Lucia (delucia@gfz.de) - GFZ Helmholz Centre for Geosciences + * + */ + #pragma once #include "KineticsComp.h" diff --git a/poet/src/Wrapper/SolutionWrapper.cpp b/litephreeqc/src/Wrapper/SolutionWrapper.cpp similarity index 85% rename from poet/src/Wrapper/SolutionWrapper.cpp rename to litephreeqc/src/Wrapper/SolutionWrapper.cpp index 0f8e1c34..9156b382 100644 --- a/poet/src/Wrapper/SolutionWrapper.cpp +++ b/litephreeqc/src/Wrapper/SolutionWrapper.cpp @@ -1,3 +1,16 @@ +/* + * This project is subject to the original PHREEQC license. `litephreeqc` is a + * version of the PHREEQC code that has been modified to be used as a library. + * + * It adds a C++ interface on top of the original PHREEQC code, with small + * changes to the original code base. + * + * Authors of Modifications: + * - Max Luebke (mluebke@uni-potsdam.de) - University of Potsdam + * - Marco De Lucia (delucia@gfz.de) - GFZ Helmholz Centre for Geosciences + * + */ + #include "SolutionWrapper.hpp" #include "NameDouble.h" #include diff --git a/poet/src/Wrapper/SolutionWrapper.hpp b/litephreeqc/src/Wrapper/SolutionWrapper.hpp similarity index 67% rename from poet/src/Wrapper/SolutionWrapper.hpp rename to litephreeqc/src/Wrapper/SolutionWrapper.hpp index 26521fd0..ee909aec 100644 --- a/poet/src/Wrapper/SolutionWrapper.hpp +++ b/litephreeqc/src/Wrapper/SolutionWrapper.hpp @@ -1,3 +1,16 @@ +/* + * This project is subject to the original PHREEQC license. `litephreeqc` is a + * version of the PHREEQC code that has been modified to be used as a library. + * + * It adds a C++ interface on top of the original PHREEQC code, with small + * changes to the original code base. + * + * Authors of Modifications: + * - Max Luebke (mluebke@uni-potsdam.de) - University of Potsdam + * - Marco De Lucia (delucia@gfz.de) - GFZ Helmholz Centre for Geosciences + * + */ + #pragma once #include "Solution.h" diff --git a/poet/src/Wrapper/SurfaceChargeWrapper.cpp b/litephreeqc/src/Wrapper/SurfaceChargeWrapper.cpp similarity index 83% rename from poet/src/Wrapper/SurfaceChargeWrapper.cpp rename to litephreeqc/src/Wrapper/SurfaceChargeWrapper.cpp index 1eccfe7e..a173a5ee 100644 --- a/poet/src/Wrapper/SurfaceChargeWrapper.cpp +++ b/litephreeqc/src/Wrapper/SurfaceChargeWrapper.cpp @@ -1,3 +1,16 @@ +/* + * This project is subject to the original PHREEQC license. `litephreeqc` is a + * version of the PHREEQC code that has been modified to be used as a library. + * + * It adds a C++ interface on top of the original PHREEQC code, with small + * changes to the original code base. + * + * Authors of Modifications: + * - Max Luebke (mluebke@uni-potsdam.de) - University of Potsdam + * - Marco De Lucia (delucia@gfz.de) - GFZ Helmholz Centre for Geosciences + * + */ + #include "SurfaceWrapper.hpp" SurfaceWrapper::SurfaceChargeWrapper::SurfaceChargeWrapper( diff --git a/poet/src/Wrapper/SurfaceCompWrapper.cpp b/litephreeqc/src/Wrapper/SurfaceCompWrapper.cpp similarity index 77% rename from poet/src/Wrapper/SurfaceCompWrapper.cpp rename to litephreeqc/src/Wrapper/SurfaceCompWrapper.cpp index 2bc45d1d..410d965f 100644 --- a/poet/src/Wrapper/SurfaceCompWrapper.cpp +++ b/litephreeqc/src/Wrapper/SurfaceCompWrapper.cpp @@ -1,3 +1,16 @@ +/* + * This project is subject to the original PHREEQC license. `litephreeqc` is a + * version of the PHREEQC code that has been modified to be used as a library. + * + * It adds a C++ interface on top of the original PHREEQC code, with small + * changes to the original code base. + * + * Authors of Modifications: + * - Max Luebke (mluebke@uni-potsdam.de) - University of Potsdam + * - Marco De Lucia (delucia@gfz.de) - GFZ Helmholz Centre for Geosciences + * + */ + #include "SurfaceWrapper.hpp" SurfaceWrapper::SurfaceCompWrapper::SurfaceCompWrapper(cxxSurfaceComp &comp) diff --git a/poet/src/Wrapper/SurfaceWrapper.cpp b/litephreeqc/src/Wrapper/SurfaceWrapper.cpp similarity index 88% rename from poet/src/Wrapper/SurfaceWrapper.cpp rename to litephreeqc/src/Wrapper/SurfaceWrapper.cpp index 6fe396a9..c85bebc7 100644 --- a/poet/src/Wrapper/SurfaceWrapper.cpp +++ b/litephreeqc/src/Wrapper/SurfaceWrapper.cpp @@ -1,3 +1,16 @@ +/* + * This project is subject to the original PHREEQC license. `litephreeqc` is a + * version of the PHREEQC code that has been modified to be used as a library. + * + * It adds a C++ interface on top of the original PHREEQC code, with small + * changes to the original code base. + * + * Authors of Modifications: + * - Max Luebke (mluebke@uni-potsdam.de) - University of Potsdam + * - Marco De Lucia (delucia@gfz.de) - GFZ Helmholz Centre for Geosciences + * + */ + #include "SurfaceWrapper.hpp" #include "SurfaceComp.h" diff --git a/poet/src/Wrapper/SurfaceWrapper.hpp b/litephreeqc/src/Wrapper/SurfaceWrapper.hpp similarity index 81% rename from poet/src/Wrapper/SurfaceWrapper.hpp rename to litephreeqc/src/Wrapper/SurfaceWrapper.hpp index b96b902a..9b9b5a5e 100644 --- a/poet/src/Wrapper/SurfaceWrapper.hpp +++ b/litephreeqc/src/Wrapper/SurfaceWrapper.hpp @@ -1,3 +1,16 @@ +/* + * This project is subject to the original PHREEQC license. `litephreeqc` is a + * version of the PHREEQC code that has been modified to be used as a library. + * + * It adds a C++ interface on top of the original PHREEQC code, with small + * changes to the original code base. + * + * Authors of Modifications: + * - Max Luebke (mluebke@uni-potsdam.de) - University of Potsdam + * - Marco De Lucia (delucia@gfz.de) - GFZ Helmholz Centre for Geosciences + * + */ + #pragma once #include "Surface.h" diff --git a/litephreeqc/src/Wrapper/WrapperBase.hpp b/litephreeqc/src/Wrapper/WrapperBase.hpp new file mode 100644 index 00000000..40311942 --- /dev/null +++ b/litephreeqc/src/Wrapper/WrapperBase.hpp @@ -0,0 +1,31 @@ +/* + * This project is subject to the original PHREEQC license. `litephreeqc` is a + * version of the PHREEQC code that has been modified to be used as a library. + * + * It adds a C++ interface on top of the original PHREEQC code, with small + * changes to the original code base. + * + * Authors of Modifications: + * - Max Luebke (mluebke@uni-potsdam.de) - University of Potsdam + * - Marco De Lucia (delucia@gfz.de) - GFZ Helmholz Centre for Geosciences + * + */ + +#pragma once + +#include +#include + +class WrapperBase { +public: + virtual ~WrapperBase() = default; + + std::size_t size() const { return this->num_elements; }; + + virtual void get(std::span &data) const = 0; + + virtual void set(const std::span &data) = 0; + +protected: + std::size_t num_elements = 0; +}; \ No newline at end of file diff --git a/poet/test/IPhreeqcReader.cpp b/litephreeqc/test/IPhreeqcReader.cpp similarity index 100% rename from poet/test/IPhreeqcReader.cpp rename to litephreeqc/test/IPhreeqcReader.cpp diff --git a/poet/test/IPhreeqcReader.hpp b/litephreeqc/test/IPhreeqcReader.hpp similarity index 100% rename from poet/test/IPhreeqcReader.hpp rename to litephreeqc/test/IPhreeqcReader.hpp diff --git a/poet/test/barite_db.dat b/litephreeqc/test/barite_db.dat similarity index 100% rename from poet/test/barite_db.dat rename to litephreeqc/test/barite_db.dat diff --git a/poet/test/barite_het.pqi b/litephreeqc/test/barite_het.pqi similarity index 100% rename from poet/test/barite_het.pqi rename to litephreeqc/test/barite_het.pqi diff --git a/poet/test/dolo.pqi b/litephreeqc/test/dolo.pqi similarity index 100% rename from poet/test/dolo.pqi rename to litephreeqc/test/dolo.pqi diff --git a/poet/test/phreeqc_kin.dat b/litephreeqc/test/phreeqc_kin.dat similarity index 100% rename from poet/test/phreeqc_kin.dat rename to litephreeqc/test/phreeqc_kin.dat diff --git a/poet/test/run_kin_cor_end2.pqi b/litephreeqc/test/run_kin_cor_end2.pqi similarity index 100% rename from poet/test/run_kin_cor_end2.pqi rename to litephreeqc/test/run_kin_cor_end2.pqi diff --git a/poet/test/testGetters.cpp b/litephreeqc/test/testGetters.cpp similarity index 100% rename from poet/test/testGetters.cpp rename to litephreeqc/test/testGetters.cpp diff --git a/litephreeqc/test/testGolemRunner.cpp b/litephreeqc/test/testGolemRunner.cpp new file mode 100644 index 00000000..ecabbe07 --- /dev/null +++ b/litephreeqc/test/testGolemRunner.cpp @@ -0,0 +1,147 @@ +// Time-stamp: "Last modified 2025-07-28 13:03:01 delucia" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "PhreeqcEngine.hpp" +#include "PhreeqcMatrix.hpp" +#include "PhreeqcRunner.hpp" + +std::string readFile(const std::string &path) { + std::string string_rpath(PATH_MAX, '\0'); + + if (realpath(path.c_str(), string_rpath.data()) == nullptr) { + throw std::runtime_error(":: Failed to resolve the realpath to file " + + path); + } + + std::ifstream file(string_rpath); + + if (!file.is_open()) { + throw std::runtime_error(":: Failed to open file: " + path); + } + + std::stringstream buffer; + buffer << file.rdbuf(); + + return buffer.str(); +} + +// pretty print a vector, standard implementation from stackoverflow +template +std::ostream &operator<<(std::ostream &os, std::vector vec) { + os << "{ "; + std::copy(vec.begin(), vec.end(), std::ostream_iterator(os, ", ")); + os << " }"; + return os; +} + +int main(int argc, char *argv[]) { + + if (argc < 3) { + std::cout << "::" << argv[0] << ": two args needed, script and database\n"; + return 1; + } + + ////// INITIALISATION + // read Script and Database and put it in a std::string + auto script = readFile(argv[1]); + auto db = readFile(argv[2]); + + // Create the matrix directly from database and init script + PhreeqcMatrix pqc_mat(db, script, true, true); + + // How many different SOLUTIONS ("CELLS") are defined in the script? + const auto ids = pqc_mat.getIds(); + + int n = ids.size(); + + std::cout << ":: Found " << n << " distinct PHREEQC problems \n"; + std::cout << ids << "\n"; + + const auto solutes = pqc_mat.getSolutionNames(); + std::cout << ":: These are the common solutes across all the " << n + << " problems: \n"; + std::cout << solutes << "\n"; + + // iterate on the ids (THEY start at 1!!) + for (const auto &i : ids) { + auto pphases = pqc_mat.getEquilibriumNames(i); + if (!pphases.empty()) { + std::cout << ":: Equilibrium phases [" << (int)i << "]: \n"; + std::cout << pphases << "\n"; + } + + auto kinetics = pqc_mat.getKineticsNames(i); + if (!kinetics.empty()) { + std::cout << ":: Kinetics [" << i << "]: \n"; + std::cout << kinetics << "\n"; + } + } + + // The exported data type holds the matrix in a "STL format" with + // a "header" of names and their accompanying values. The values + // are stored in a row-major order per default. + auto exported_mat = pqc_mat.get(); + // Get the total number of solutes + const int len = exported_mat.names.size(); + // Get the values as reference to modify them in place + std::vector &cell_values = exported_mat.values; + + std::cout << ":: Values in the PhreeqcMatrix: \n"; + + //// Phreeqc RUN through the new Runner class + + // optional SUBSET the matrix (i.e., the unique ids defined in + // golem map as input) + // const auto subsetted_pqc_mat = pqc_mat.subset({1, 2}); + PhreeqcRunner runner(pqc_mat); + + const auto stl_mat = pqc_mat.get(); + const auto matrix_values = stl_mat.values; + const auto num_columns = stl_mat.names.size(); + const auto spec_names = stl_mat.names; + + // container to pass in/out + std::vector> simulationInOut; + + // copy the values to the InOut vector. We replicate cell 1 + for (std::size_t index = 0; index < n; ++index) { + simulationInOut.push_back( + std::vector(matrix_values.begin() + num_columns * index, + matrix_values.begin() + num_columns * (index + 1))); + } + + const double timestep = 100.; + + // compute 1 timestep + runner.run(simulationInOut, timestep); + + for (std::size_t cell_index = 0; cell_index < simulationInOut.size(); + ++cell_index) { + + std::cout << "Grid element: " << cell_index << " \n"; + for (std::size_t spec = 0; spec < num_columns; ++spec) { + std::cout << ":" << spec_names[spec] << "=" + << simulationInOut[cell_index][spec]; + } + std::cout << "\n"; + } + + return 0; +} + +// Oneliner for rz-vm278 relative to iphreeqc/poet/test!! + +// g++ testGolemRunner.cpp -o testG -Wall -I../../poet/include -I../../src +// -I../../src/phreeqcpp -I../../src/phreeqcpp/common +// -I../../src/phreeqcpp/PhreeqcKeywords -lIPhreeqc -lIPhreeqcPOET +// -L../../bbuild/ -L../../bbuild/poet diff --git a/poet/test/testInput.hpp.in b/litephreeqc/test/testInput.hpp.in similarity index 98% rename from poet/test/testInput.hpp.in rename to litephreeqc/test/testInput.hpp.in index 2f47bb05..fc0970bd 100644 --- a/poet/test/testInput.hpp.in +++ b/litephreeqc/test/testInput.hpp.in @@ -6,7 +6,7 @@ #include -#define POET_TEST(name) TEST(TestPOET, name) +#define POET_TEST(name) TEST(litephreeqc, name) namespace base_test { const std::string script = R"(SOLUTION 1 diff --git a/poet/test/testPhreeqcEngine.cpp b/litephreeqc/test/testPhreeqcEngine.cpp similarity index 76% rename from poet/test/testPhreeqcEngine.cpp rename to litephreeqc/test/testPhreeqcEngine.cpp index 631dc789..d50969ce 100644 --- a/poet/test/testPhreeqcEngine.cpp +++ b/litephreeqc/test/testPhreeqcEngine.cpp @@ -1,3 +1,16 @@ +/* + * This project is subject to the original PHREEQC license. `litephreeqc` is a + * version of the PHREEQC code that has been modified to be used as a library. + * + * It adds a C++ interface on top of the original PHREEQC code, with small + * changes to the original code base. + * + * Authors of Modifications: + * - Max Luebke (mluebke@uni-potsdam.de) - University of Potsdam + * - Marco De Lucia (delucia@gfz.de) - GFZ Helmholz Centre for Geosciences + * + */ + #include #include diff --git a/poet/test/testPhreeqcKnobs.cpp b/litephreeqc/test/testPhreeqcKnobs.cpp similarity index 82% rename from poet/test/testPhreeqcKnobs.cpp rename to litephreeqc/test/testPhreeqcKnobs.cpp index dce39e52..4e1dd427 100644 --- a/poet/test/testPhreeqcKnobs.cpp +++ b/litephreeqc/test/testPhreeqcKnobs.cpp @@ -1,3 +1,16 @@ +/* + * This project is subject to the original PHREEQC license. `litephreeqc` is a + * version of the PHREEQC code that has been modified to be used as a library. + * + * It adds a C++ interface on top of the original PHREEQC code, with small + * changes to the original code base. + * + * Authors of Modifications: + * - Max Luebke (mluebke@uni-potsdam.de) - University of Potsdam + * - Marco De Lucia (delucia@gfz.de) - GFZ Helmholz Centre for Geosciences + * + */ + #include #include diff --git a/poet/test/testPhreeqcMatrix.cpp b/litephreeqc/test/testPhreeqcMatrix.cpp similarity index 94% rename from poet/test/testPhreeqcMatrix.cpp rename to litephreeqc/test/testPhreeqcMatrix.cpp index 987295ef..f3151e8a 100644 --- a/poet/test/testPhreeqcMatrix.cpp +++ b/litephreeqc/test/testPhreeqcMatrix.cpp @@ -1,3 +1,16 @@ +/* + * This project is subject to the original PHREEQC license. `litephreeqc` is a + * version of the PHREEQC code that has been modified to be used as a library. + * + * It adds a C++ interface on top of the original PHREEQC code, with small + * changes to the original code base. + * + * Authors of Modifications: + * - Max Luebke (mluebke@uni-potsdam.de) - University of Potsdam + * - Marco De Lucia (delucia@gfz.de) - GFZ Helmholz Centre for Geosciences + * + */ + #include #include #include diff --git a/poet/test/testPhreeqcRunner.cpp b/litephreeqc/test/testPhreeqcRunner.cpp similarity index 87% rename from poet/test/testPhreeqcRunner.cpp rename to litephreeqc/test/testPhreeqcRunner.cpp index a00c627b..3ee54676 100644 --- a/poet/test/testPhreeqcRunner.cpp +++ b/litephreeqc/test/testPhreeqcRunner.cpp @@ -1,3 +1,16 @@ +/* + * This project is subject to the original PHREEQC license. `litephreeqc` is a + * version of the PHREEQC code that has been modified to be used as a library. + * + * It adds a C++ interface on top of the original PHREEQC code, with small + * changes to the original code base. + * + * Authors of Modifications: + * - Max Luebke (mluebke@uni-potsdam.de) - University of Potsdam + * - Marco De Lucia (delucia@gfz.de) - GFZ Helmholz Centre for Geosciences + * + */ + #include "PhreeqcRunner.hpp" #include "utils.hpp" diff --git a/poet/test/utils.cpp b/litephreeqc/test/utils.cpp similarity index 54% rename from poet/test/utils.cpp rename to litephreeqc/test/utils.cpp index 53ed1563..79de1123 100644 --- a/poet/test/utils.cpp +++ b/litephreeqc/test/utils.cpp @@ -1,3 +1,16 @@ +/* + * This project is subject to the original PHREEQC license. `litephreeqc` is a + * version of the PHREEQC code that has been modified to be used as a library. + * + * It adds a C++ interface on top of the original PHREEQC code, with small + * changes to the original code base. + * + * Authors of Modifications: + * - Max Luebke (mluebke@uni-potsdam.de) - University of Potsdam + * - Marco De Lucia (delucia@gfz.de) - GFZ Helmholz Centre for Geosciences + * + */ + #include "utils.hpp" #include diff --git a/litephreeqc/test/utils.hpp b/litephreeqc/test/utils.hpp new file mode 100644 index 00000000..b532767e --- /dev/null +++ b/litephreeqc/test/utils.hpp @@ -0,0 +1,18 @@ +/* + * This project is subject to the original PHREEQC license. `litephreeqc` is a + * version of the PHREEQC code that has been modified to be used as a library. + * + * It adds a C++ interface on top of the original PHREEQC code, with small + * changes to the original code base. + * + * Authors of Modifications: + * - Max Luebke (mluebke@uni-potsdam.de) - University of Potsdam + * - Marco De Lucia (delucia@gfz.de) - GFZ Helmholz Centre for Geosciences + * + */ + +#pragma once + +#include + +std::string readFile(const std::string &path); \ No newline at end of file diff --git a/poet/src/Wrapper/WrapperBase.hpp b/poet/src/Wrapper/WrapperBase.hpp deleted file mode 100644 index b12d36eb..00000000 --- a/poet/src/Wrapper/WrapperBase.hpp +++ /dev/null @@ -1,18 +0,0 @@ -#pragma once - -#include -#include - -class WrapperBase { -public: - virtual ~WrapperBase() = default; - - std::size_t size() const { return this->num_elements; }; - - virtual void get(std::span &data) const = 0; - - virtual void set(const std::span &data) = 0; - -protected: - std::size_t num_elements = 0; -}; \ No newline at end of file diff --git a/poet/test/testGolemRunner.cpp b/poet/test/testGolemRunner.cpp deleted file mode 100644 index 103e1a58..00000000 --- a/poet/test/testGolemRunner.cpp +++ /dev/null @@ -1,144 +0,0 @@ -// Time-stamp: "Last modified 2025-07-28 13:03:01 delucia" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "PhreeqcMatrix.hpp" -#include "PhreeqcEngine.hpp" -#include "PhreeqcRunner.hpp" - - -std::string readFile(const std::string &path) { - std::string string_rpath(PATH_MAX, '\0'); - - if (realpath(path.c_str(), string_rpath.data()) == nullptr) { - throw std::runtime_error(":: Failed to resolve the realpath to file " + path); - } - - std::ifstream file(string_rpath); - - if (!file.is_open()) { - throw std::runtime_error(":: Failed to open file: " + path); - } - - std::stringstream buffer; - buffer << file.rdbuf(); - - return buffer.str(); -} - -// pretty print a vector, standard implementation from stackoverflow -template -std::ostream & operator<<(std::ostream & os, std::vector vec) -{ - os << "{ "; - std::copy(vec.begin(), vec.end(), std::ostream_iterator(os, ", ")); - os << " }"; - return os; -} - - -int main(int argc, char *argv[]) { - - if (argc < 3) { - std::cout << "::" << argv[0] << ": two args needed, script and database\n"; - return 1; - } - - - ////// INITIALISATION - // read Script and Database and put it in a std::string - auto script = readFile(argv[1]); - auto db = readFile(argv[2]); - - // Create the matrix directly from database and init script - PhreeqcMatrix pqc_mat(db, script, true, true); - - // How many different SOLUTIONS ("CELLS") are defined in the script? - const auto ids = pqc_mat.getIds(); - - int n = ids.size(); - - std::cout << ":: Found " << n << " distinct PHREEQC problems \n"; - std::cout << ids << "\n"; - - const auto solutes = pqc_mat.getSolutionNames(); - std::cout << ":: These are the common solutes across all the " << n << " problems: \n"; - std::cout << solutes << "\n"; - - // iterate on the ids (THEY start at 1!!) - for (const auto & i : ids) { - auto pphases = pqc_mat.getEquilibriumNames(i); - if (!pphases.empty()) { - std::cout << ":: Equilibrium phases [" << (int) i << "]: \n"; - std::cout << pphases << "\n"; - } - - auto kinetics = pqc_mat.getKineticsNames(i); - if (!kinetics.empty()) { - std::cout << ":: Kinetics [" << i << "]: \n"; - std::cout << kinetics << "\n"; - } - } - - // The exported data type holds the matrix in a "STL format" with - // a "header" of names and their accompanying values. The values - // are stored in a row-major order per default. - auto exported_mat = pqc_mat.get(); - // Get the total number of solutes - const int len = exported_mat.names.size(); - // Get the values as reference to modify them in place - std::vector &cell_values = exported_mat.values; - - std::cout << ":: Values in the PhreeqcMatrix: \n"; - - //// Phreeqc RUN through the new Runner class - - // optional SUBSET the matrix (i.e., the unique ids defined in - // golem map as input) - // const auto subsetted_pqc_mat = pqc_mat.subset({1, 2}); - PhreeqcRunner runner(pqc_mat); - - const auto stl_mat = pqc_mat.get(); - const auto matrix_values = stl_mat.values; - const auto num_columns = stl_mat.names.size(); - const auto spec_names = stl_mat.names; - - // container to pass in/out - std::vector> simulationInOut; - - // copy the values to the InOut vector. We replicate cell 1 - for (std::size_t index = 0; index < n; ++index) { - simulationInOut.push_back(std::vector( - matrix_values.begin() + num_columns*index, matrix_values.begin() + num_columns*(index +1))); - } - - const double timestep = 100.; - - // compute 1 timestep - runner.run(simulationInOut, timestep); - - for (std::size_t cell_index = 0; cell_index < simulationInOut.size(); ++cell_index) { - - std::cout << "Grid element: " << cell_index << " \n"; - for (std::size_t spec = 0; spec < num_columns; ++spec) { - std::cout << ":" << spec_names[spec] << "=" << simulationInOut[cell_index][spec]; - } - std::cout << "\n"; - } - - - return 0; -} - -// Oneliner for rz-vm278 relative to iphreeqc/poet/test!! - -// g++ testGolemRunner.cpp -o testG -Wall -I../../poet/include -I../../src -I../../src/phreeqcpp -I../../src/phreeqcpp/common -I../../src/phreeqcpp/PhreeqcKeywords -lIPhreeqc -lIPhreeqcPOET -L../../bbuild/ -L../../bbuild/poet diff --git a/poet/test/utils.hpp b/poet/test/utils.hpp deleted file mode 100644 index 4266c3f0..00000000 --- a/poet/test/utils.hpp +++ /dev/null @@ -1,5 +0,0 @@ -#pragma once - -#include - -std::string readFile(const std::string &path); \ No newline at end of file diff --git a/src/phreeqcpp/GFZ.cpp b/src/phreeqcpp/litephreeqc_funcs.cpp similarity index 86% rename from src/phreeqcpp/GFZ.cpp rename to src/phreeqcpp/litephreeqc_funcs.cpp index d3412546..a68103b9 100644 --- a/src/phreeqcpp/GFZ.cpp +++ b/src/phreeqcpp/litephreeqc_funcs.cpp @@ -1,3 +1,16 @@ +/* + * This project is subject to the original PHREEQC license. `litephreeqc` is a + * version of the PHREEQC code that has been modified to be used as a library. + * + * It adds a C++ interface on top of the original PHREEQC code, with small + * changes to the original code base. + * + * Authors of Modifications: + * - Max Luebke (mluebke@uni-potsdam.de) - University of Potsdam + * - Marco De Lucia (delucia@gfz.de) - GFZ Helmholz Centre for Geosciences + * + */ + #include "Phreeqc.h" #include