diff --git a/.github/actions/apply-style/checkout.sh b/.github/actions/apply-style/checkout.sh new file mode 100755 index 0000000000..34a6f15b43 --- /dev/null +++ b/.github/actions/apply-style/checkout.sh @@ -0,0 +1,45 @@ +#!/bin/bash + +### +# Attempt to find the branch of the PR from the detached head state +## + +echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" +echo "Attempting to find branch that matches commit..." + +# Get the current commit SHA +current_commit_sha=$(git rev-parse HEAD) +# List all branches containing the current commit SHA +branches=$(git branch -r --contains $current_commit_sha) + +echo "all branches:" +echo "$(git branch -a)" +echo "branches with SHA $current_commit_sha:" +echo "$branches" + +# Loop over the string split by whitespace +branch="" +num_branches_found=0 +for _possible_branch in $branches; do + # Skip items that start with "pull/" + if [[ $_possible_branch == pull/* ]]; then + continue + fi + if [[ $_possible_branch == origin/* ]]; then + _possible_branch=$(echo "$_possible_branch" | sed 's/origin\///') + fi + echo "Possible Branch: $_possible_branch" + branch=$_possible_branch + num_branches_found=$((num_branches_found+1)) +done + +if [ "$num_branches_found" -ne 1 ]; then + echo "Error: Unable to find a single branch that matched git sha $current_commit_sha" + exit 1 +fi + +echo "Found branch: $branch" +echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" + +git checkout $branch +git submodule update --init --recursive diff --git a/.github/dependabot.yml b/.github/dependabot.yml index df4d15b35c..3bc7efbf9d 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -6,3 +6,4 @@ updates: schedule: # Check for updates to GitHub Actions every week interval: "weekly" + target-branch: "develop" diff --git a/.github/workflows/check-format.yml b/.github/workflows/check-format.yml index b3d0850ca9..f96e3cdaf7 100644 --- a/.github/workflows/check-format.yml +++ b/.github/workflows/check-format.yml @@ -3,9 +3,16 @@ name: Checks - formatting on: pull_request: workflow_dispatch: + issue_comment: + types: [created] + +concurrency: + group: ${{ github.workflow }}-${{ github.head_ref || github.ref_name }} + cancel-in-progress: true jobs: format_check: + if: ${{ github.event_name != 'issue_comment' || (github.event_name == 'issue_comment' && startsWith(github.event.comment.body, '/autofix')) }} runs-on: ubuntu-latest container: image: ghcr.io/llnl/sundials_spack_cache:llvm-17.0.4-h4lflucc3v2vage45opbo2didtcuigsn.spack @@ -37,10 +44,18 @@ jobs: run: clang-format --version - name: Check out repository code + if: github.event_name != 'issue_comment' uses: actions/checkout@v4 with: submodules: true + - name: Check out repository code + if: github.event_name == 'issue_comment' + uses: actions/checkout@v4 + with: + ref: refs/pull/${{ github.event.issue.number }}/head + fetch-depth: 0 + - name: Add safe directory run: git config --global --add safe.directory "$GITHUB_WORKSPACE" @@ -56,9 +71,50 @@ jobs: run: /usr/bin/git diff > format.patch - name: Archive diff as a patch if we failed - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 if: failure() with: name: format.patch path: | ${{ github.workspace }}/format.patch + + apply_format: + if: ${{ always() && contains(join(needs.*.result, ','), 'failure') && (github.event_name == 'issue_comment' && startsWith(github.event.comment.body, '/autofix')) }} + needs: format_check + runs-on: ubuntu-latest + steps: + # Checkout the GitHub created reference for the PR. + # The only way to do this is by using the "issue" number + # but that is really the PR number in this context. + # This is due to using an `issue_comment` event which + # is due to the GitHub Actions API that does not have + # a `pull_request_comment` event or something similar. + # This leaves us in a detached head state which is corrected + # in `apply-style/checkout.sh` + - name: Checkout repository code + uses: actions/checkout@v4 + with: + ref: refs/pull/${{ github.event.issue.number }}/head + fetch-depth: 0 + + - name: Checkout the right git ref + run: ./.github/actions/apply-style/checkout.sh + + - name: Download the git diff from format_check + uses: actions/download-artifact@v4 + with: + name: format.patch + + - name: Apply patch + run: | + git apply format.patch + rm format.patch + + - name: Commit fixes + run: | + git config user.name "format-robot" + git config user.email "no-reply@llnl.gov" + if [ -n "$(git status --porcelain)" ]; then + git commit -am 'apply format updates' + git push + fi diff --git a/.github/workflows/check-spelling.yml b/.github/workflows/check-spelling.yml index 8825e58b06..70da910142 100644 --- a/.github/workflows/check-spelling.yml +++ b/.github/workflows/check-spelling.yml @@ -3,9 +3,16 @@ name: Checks - spelling on: pull_request: workflow_dispatch: + issue_comment: + types: [created] + +concurrency: + group: ${{ github.workflow }}-${{ github.head_ref || github.ref_name }} + cancel-in-progress: true jobs: spelling_check: + if: ${{ github.event_name != 'issue_comment' || (github.event_name == 'issue_comment' && startsWith(github.event.comment.body, '/autofix')) }} runs-on: ubuntu-latest steps: - name: Install python3-pip @@ -20,10 +27,18 @@ jobs: run: codespell --version - name: Check out repository code + if: github.event_name != 'issue_comment' uses: actions/checkout@v4 with: submodules: true + - name: Check out repository code + if: github.event_name == 'issue_comment' + uses: actions/checkout@v4 + with: + ref: refs/pull/${{ github.event.issue.number }}/head + fetch-depth: 0 + - name: Run codespell run: | ./scripts/spelling.sh @@ -36,9 +51,50 @@ jobs: run: /usr/bin/git diff > spelling.patch - name: Archive diff as a patch if we failed - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 if: failure() with: name: spelling.patch path: | ${{ github.workspace }}/spelling.patch + + apply_spelling: + if: ${{ always() && contains(join(needs.*.result, ','), 'failure') && (github.event_name == 'issue_comment' && startsWith(github.event.comment.body, '/autofix')) }} + needs: spelling_check + runs-on: ubuntu-latest + steps: + # Checkout the GitHub created reference for the PR. + # The only way to do this is by using the "issue" number + # but that is really the PR number in this context. + # This is due to using an `issue_comment` event which + # is due to the GitHub Actions API that does not have + # a `pull_request_comment` event or something similar. + # This leaves us in a detached head state which is corrected + # in `apply-style/checkout.sh` + - name: Checkout repository code + uses: actions/checkout@v4 + with: + ref: refs/pull/${{ github.event.issue.number }}/head + fetch-depth: 0 + + - name: Checkout the right git ref + run: ./.github/actions/apply-style/checkout.sh + + - name: Download the git diff from spelling_check + uses: actions/download-artifact@v4 + with: + name: spelling.patch + + - name: Apply patch + run: | + git apply spelling.patch + rm spelling.patch + + - name: Commit fixes + run: | + git config user.name "format-robot" + git config user.email "no-reply@llnl.gov" + if [ -n "$(git status --porcelain)" ]; then + git commit -am 'apply spelling updates' + git push + fi diff --git a/.github/workflows/check-swig.yml b/.github/workflows/check-swig.yml index 2a4193a239..2f9fad653d 100644 --- a/.github/workflows/check-swig.yml +++ b/.github/workflows/check-swig.yml @@ -3,11 +3,17 @@ name: Checks - swig on: pull_request: workflow_dispatch: + issue_comment: + types: [created] + +concurrency: + group: ${{ github.workflow }}-${{ github.head_ref || github.ref_name }} + cancel-in-progress: true jobs: - swig: + swig_check: + if: ${{ github.event_name != 'issue_comment' || (github.event_name == 'issue_comment' && startsWith(github.event.comment.body, '/autofix')) }} runs-on: ubuntu-latest - steps: - name: Install swig run: | @@ -15,15 +21,23 @@ jobs: cd swig ./autogen.sh ./configure --prefix=/usr/ - make + make sudo make install swig -version - name: Check out repository code + if: github.event_name != 'issue_comment' uses: actions/checkout@v4 with: submodules: true + - name: Check out repository code + if: github.event_name == 'issue_comment' + uses: actions/checkout@v4 + with: + ref: refs/pull/${{ github.event.issue.number }}/head + fetch-depth: 0 + - name: Add safe directory run: git config --global --add safe.directory "$GITHUB_WORKSPACE" @@ -41,9 +55,50 @@ jobs: run: /usr/bin/git diff > swig.patch - name: Archive diff as a patch if we failed - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 if: failure() with: name: swig.patch path: | ${{ github.workspace }}/swig.patch + + apply_swig: + if: ${{ always() && contains(join(needs.*.result, ','), 'failure') && (github.event_name == 'issue_comment' && startsWith(github.event.comment.body, '/autofix')) }} + needs: swig_check + runs-on: ubuntu-latest + steps: + # Checkout the GitHub created reference for the PR. + # The only way to do this is by using the "issue" number + # but that is really the PR number in this context. + # This is due to using an `issue_comment` event which + # is due to the GitHub Actions API that does not have + # a `pull_request_comment` event or something similar. + # This leaves us in a detached head state which is corrected + # in `apply-style/checkout.sh` + - name: Checkout repository code + uses: actions/checkout@v4 + with: + ref: refs/pull/${{ github.event.issue.number }}/head + fetch-depth: 0 + + - name: Checkout the right git ref + run: ./.github/actions/apply-style/checkout.sh + + - name: Download the git diff from swig_check + uses: actions/download-artifact@v4 + with: + name: swig.patch + + - name: Apply patch + run: | + git apply swig.patch + rm swig.patch + + - name: Commit fixes + run: | + git config user.name "format-robot" + git config user.email "no-reply@llnl.gov" + if [ -n "$(git status --porcelain)" ]; then + git commit -am 'apply swig updates' + git push + fi diff --git a/.github/workflows/spack-develop.yml b/.github/workflows/spack-develop.yml index 41f312164f..adf15d2de3 100644 --- a/.github/workflows/spack-develop.yml +++ b/.github/workflows/spack-develop.yml @@ -33,7 +33,7 @@ jobs: indexsize: ${{ matrix.indexsize }} precision: ${{ matrix.precision }} - name: Archive build files from failed build - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 if: failure() with: name: build_files @@ -41,7 +41,7 @@ jobs: ${{ github.workspace }}/test/build_* !${{ github.workspace }}/test/build_*/Testing/output - name: Archive output files from failed build - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 if: failure() with: name: output_files diff --git a/.github/workflows/ubuntu-latest.yml b/.github/workflows/ubuntu-latest.yml index 0bc9ab7510..9b83c16c30 100644 --- a/.github/workflows/ubuntu-latest.yml +++ b/.github/workflows/ubuntu-latest.yml @@ -52,7 +52,7 @@ jobs: env: CMAKE_BUILD_TYPE: ${{ matrix.buildtype }} - name: Archive build files from failed build - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 if: failure() with: name: build_files @@ -60,7 +60,7 @@ jobs: ${{ github.workspace }}/test/build_* !${{ github.workspace }}/test/build_*/Testing/output - name: Archive output files from failed build - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 if: failure() with: name: output_files diff --git a/CHANGELOG.md b/CHANGELOG.md index 74abb6520e..2aff004841 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,6 +25,10 @@ specific linker flags e.g., MKL. ### Bug Fixes +Fixed a [bug](https://github.com/LLNL/sundials/issues/581) in the sparse matrix +implementation of `SUNMatScaleAddI` which caused out of bounds writes unless +`indexvals` were in ascending order for each row/column. + Fixed `ARKodeResize` not using the default `hscale` when an argument of `0` was provided. @@ -39,8 +43,14 @@ repeatedly. Fixed compilation errors when building the Trilinos Teptra NVector with CUDA support. +Fixed a CMake configuration issue related to aliasing an `ALIAS` target when +using `ENABLE_KLU=ON` in combination with a static-only build of SuiteSparse. + ### Deprecation Notices +The ARKODE stepper specific functions to retrieve the number of right-hand side +function evaluations have been deprecated. Use `ARKodeGetNumRhsEvals` instead. + ## Changes to SUNDIALS in release 7.1.1 ### Bug Fixes diff --git a/benchmarks/advection_reaction_3D/kokkos/arkode_driver.cpp b/benchmarks/advection_reaction_3D/kokkos/arkode_driver.cpp index 4f606bd7bf..8330eafb70 100644 --- a/benchmarks/advection_reaction_3D/kokkos/arkode_driver.cpp +++ b/benchmarks/advection_reaction_3D/kokkos/arkode_driver.cpp @@ -189,8 +189,10 @@ int EvolveProblemDIRK(N_Vector y, UserData* udata, UserOptions* uopt) check_retval(&retval, "ARKodeGetNumSteps", 1, udata->myid); retval = ARKodeGetNumStepAttempts(arkode_mem, &nst_a); check_retval(&retval, "ARKodeGetNumStepAttempts", 1, udata->myid); - retval = ARKStepGetNumRhsEvals(arkode_mem, &nfe, &nfi); - check_retval(&retval, "ARKStepGetNumRhsEvals", 1, udata->myid); + retval = ARKodeGetNumRhsEvals(arkode_mem, 0, &nfe); + check_retval(&retval, "ARKodeGetNumRhsEvals", 1, udata->myid); + retval = ARKodeGetNumRhsEvals(arkode_mem, 1, &nfi); + check_retval(&retval, "ARKodeGetNumRhsEvals", 1, udata->myid); retval = ARKodeGetNumErrTestFails(arkode_mem, &netf); check_retval(&retval, "ARKodeGetNumErrTestFails", 1, udata->myid); retval = ARKodeGetNumNonlinSolvIters(arkode_mem, &nni); @@ -392,8 +394,10 @@ int EvolveProblemIMEX(N_Vector y, UserData* udata, UserOptions* uopt) check_retval(&retval, "ARKodeGetNumSteps", 1, udata->myid); retval = ARKodeGetNumStepAttempts(arkode_mem, &nst_a); check_retval(&retval, "ARKodeGetNumStepAttempts", 1, udata->myid); - retval = ARKStepGetNumRhsEvals(arkode_mem, &nfe, &nfi); - check_retval(&retval, "ARKStepGetNumRhsEvals", 1, udata->myid); + retval = ARKodeGetNumRhsEvals(arkode_mem, 0, &nfe); + check_retval(&retval, "ARKodeGetNumRhsEvals", 1, udata->myid); + retval = ARKodeGetNumRhsEvals(arkode_mem, 1, &nfi); + check_retval(&retval, "ARKodeGetNumRhsEvals", 1, udata->myid); retval = ARKodeGetNumErrTestFails(arkode_mem, &netf); check_retval(&retval, "ARKodeGetNumErrTestFails", 1, udata->myid); retval = ARKodeGetNumNonlinSolvIters(arkode_mem, &nni); @@ -516,8 +520,8 @@ int EvolveProblemExplicit(N_Vector y, UserData* udata, UserOptions* uopt) check_retval(&retval, "ARKodeGetNumSteps", 1, udata->myid); retval = ARKodeGetNumStepAttempts(arkode_mem, &nst_a); check_retval(&retval, "ARKodeGetNumStepAttempts", 1, udata->myid); - retval = ERKStepGetNumRhsEvals(arkode_mem, &nfe); - check_retval(&retval, "ERKStepGetNumRhsEvals", 1, udata->myid); + retval = ARKodeGetNumRhsEvals(arkode_mem, 0, &nfe); + check_retval(&retval, "ARKodeGetNumRhsEvals", 1, udata->myid); retval = ARKodeGetNumErrTestFails(arkode_mem, &netf); check_retval(&retval, "ARKodeGetNumErrTestFails", 1, udata->myid); diff --git a/benchmarks/advection_reaction_3D/raja/arkode_driver.cpp b/benchmarks/advection_reaction_3D/raja/arkode_driver.cpp index 420c9d63c9..fd59c98f87 100644 --- a/benchmarks/advection_reaction_3D/raja/arkode_driver.cpp +++ b/benchmarks/advection_reaction_3D/raja/arkode_driver.cpp @@ -190,8 +190,10 @@ int EvolveProblemDIRK(N_Vector y, UserData* udata, UserOptions* uopt) check_retval(&retval, "ARKodeGetNumSteps", 1, udata->myid); retval = ARKodeGetNumStepAttempts(arkode_mem, &nst_a); check_retval(&retval, "ARKodeGetNumStepAttempts", 1, udata->myid); - retval = ARKStepGetNumRhsEvals(arkode_mem, &nfe, &nfi); - check_retval(&retval, "ARKStepGetNumRhsEvals", 1, udata->myid); + retval = ARKodeGetNumRhsEvals(arkode_mem, 0, &nfe); + check_retval(&retval, "ARKodeGetNumRhsEvals", 1, udata->myid); + retval = ARKodeGetNumRhsEvals(arkode_mem, 1, &nfi); + check_retval(&retval, "ARKodeGetNumRhsEvals", 1, udata->myid); retval = ARKodeGetNumErrTestFails(arkode_mem, &netf); check_retval(&retval, "ARKodeGetNumErrTestFails", 1, udata->myid); retval = ARKodeGetNumNonlinSolvIters(arkode_mem, &nni); @@ -394,8 +396,10 @@ int EvolveProblemIMEX(N_Vector y, UserData* udata, UserOptions* uopt) check_retval(&retval, "ARKodeGetNumSteps", 1, udata->myid); retval = ARKodeGetNumStepAttempts(arkode_mem, &nst_a); check_retval(&retval, "ARKodeGetNumStepAttempts", 1, udata->myid); - retval = ARKStepGetNumRhsEvals(arkode_mem, &nfe, &nfi); - check_retval(&retval, "ARKStepGetNumRhsEvals", 1, udata->myid); + retval = ARKodeGetNumRhsEvals(arkode_mem, 0, &nfe); + check_retval(&retval, "ARKodeGetNumRhsEvals", 1, udata->myid); + retval = ARKodeGetNumRhsEvals(arkode_mem, 1, &nfi); + check_retval(&retval, "ARKodeGetNumRhsEvals", 1, udata->myid); retval = ARKodeGetNumErrTestFails(arkode_mem, &netf); check_retval(&retval, "ARKodeGetNumErrTestFails", 1, udata->myid); retval = ARKodeGetNumNonlinSolvIters(arkode_mem, &nni); @@ -519,8 +523,8 @@ int EvolveProblemExplicit(N_Vector y, UserData* udata, UserOptions* uopt) check_retval(&retval, "ARKodeGetNumSteps", 1, udata->myid); retval = ARKodeGetNumStepAttempts(arkode_mem, &nst_a); check_retval(&retval, "ARKodeGetNumStepAttempts", 1, udata->myid); - retval = ERKStepGetNumRhsEvals(arkode_mem, &nfe); - check_retval(&retval, "ERKStepGetNumRhsEvals", 1, udata->myid); + retval = ARKodeGetNumRhsEvals(arkode_mem, 0, &nfe); + check_retval(&retval, "ARKodeGetNumRhsEvals", 1, udata->myid); retval = ARKodeGetNumErrTestFails(arkode_mem, &netf); check_retval(&retval, "ARKodeGetNumErrTestFails", 1, udata->myid); diff --git a/benchmarks/nvector/test_nvector_performance.c b/benchmarks/nvector/test_nvector_performance.c index 36224a9c38..c0f0870da2 100644 --- a/benchmarks/nvector/test_nvector_performance.c +++ b/benchmarks/nvector/test_nvector_performance.c @@ -43,7 +43,7 @@ static void time_stats(N_Vector X, double* times, int start, int ntimes, int print_time = 0; /* flag for printing timing data */ int nwarmups = 1; /* number of extra tests to perform and ignore in average */ -#if defined(SUNDIALS_HAVE_POSIX_TIMERS) && defined(_POSIX_TIMERS) +#if defined(SUNDIALS_HAVE_POSIX_TIMERS) time_t base_time_tv_sec = 0; /* Base time; makes time values returned by get_time easier to read when printed since they will be zero @@ -2723,7 +2723,7 @@ void SetNumWarmups(int num_warmups) void SetTiming(int onoff, int myid) { -#if defined(SUNDIALS_HAVE_POSIX_TIMERS) && defined(_POSIX_TIMERS) +#if defined(SUNDIALS_HAVE_POSIX_TIMERS) struct timespec spec; clock_gettime(CLOCK_MONOTONIC, &spec); base_time_tv_sec = spec.tv_sec; @@ -2812,7 +2812,7 @@ void rand_realtype_constraints(sunrealtype* data, sunindextype len) static double get_time(void) { double time; -#if defined(SUNDIALS_HAVE_POSIX_TIMERS) && defined(_POSIX_TIMERS) +#if defined(SUNDIALS_HAVE_POSIX_TIMERS) struct timespec spec; clock_gettime(CLOCK_MONOTONIC, &spec); time = (double)(spec.tv_sec - base_time_tv_sec) + diff --git a/cmake/tpl/FindKLU.cmake b/cmake/tpl/FindKLU.cmake index 08b77d3773..0818f31209 100644 --- a/cmake/tpl/FindKLU.cmake +++ b/cmake/tpl/FindKLU.cmake @@ -40,7 +40,14 @@ if(NOT if(TARGET SuiteSparse::KLU) if(NOT TARGET SUNDIALS::KLU) - add_library(SUNDIALS::KLU ALIAS SuiteSparse::KLU) + # For static-only builds of SuiteSparse, SuiteSparse::KLU will itself be + # an ALIAS target which can't be aliased. + get_target_property(klu_aliased_target SuiteSparse::KLU ALIASED_TARGET) + if(klu_aliased_target) + add_library(SUNDIALS::KLU ALIAS ${klu_aliased_target}) + else() + add_library(SUNDIALS::KLU ALIAS SuiteSparse::KLU) + endif() set(KLU_SUITESPARSE_TARGET ON) mark_as_advanced(KLU_SUITESPARSE_TARGET) endif() diff --git a/doc/arkode/guide/source/Usage/ARKStep/User_callable.rst b/doc/arkode/guide/source/Usage/ARKStep/User_callable.rst index 5a21f7ea15..bef540030c 100644 --- a/doc/arkode/guide/source/Usage/ARKStep/User_callable.rst +++ b/doc/arkode/guide/source/Usage/ARKStep/User_callable.rst @@ -3155,6 +3155,9 @@ Main solver optional output functions The *nfi_evals* value does not account for calls made to :math:`f^I` by a linear solver or preconditioner module. + .. deprecated:: x.y.z + + Use :c:func:`ARKodeGetNumRhsEvals` instead. .. c:function:: int ARKStepGetNumErrTestFails(void* arkode_mem, long int* netfails) diff --git a/doc/arkode/guide/source/Usage/ERKStep/User_callable.rst b/doc/arkode/guide/source/Usage/ERKStep/User_callable.rst index 5bbb3e1f63..6c7b7b9cdf 100644 --- a/doc/arkode/guide/source/Usage/ERKStep/User_callable.rst +++ b/doc/arkode/guide/source/Usage/ERKStep/User_callable.rst @@ -1739,6 +1739,9 @@ Main solver optional output functions * *ARK_SUCCESS* if successful * *ARK_MEM_NULL* if the ERKStep memory was ``NULL`` + .. deprecated:: x.y.z + + Use :c:func:`ARKodeGetNumRhsEvals` instead. .. c:function:: int ERKStepGetNumErrTestFails(void* arkode_mem, long int* netfails) diff --git a/doc/arkode/guide/source/Usage/MRIStep/User_callable.rst b/doc/arkode/guide/source/Usage/MRIStep/User_callable.rst index bf00365669..a6354a6037 100644 --- a/doc/arkode/guide/source/Usage/MRIStep/User_callable.rst +++ b/doc/arkode/guide/source/Usage/MRIStep/User_callable.rst @@ -1895,6 +1895,9 @@ Main solver optional output functions * *ARK_MEM_NULL* if the MRIStep memory was ``NULL`` + .. deprecated:: x.y.z + + Use :c:func:`ARKodeGetNumRhsEvals` instead. .. c:function:: int MRIStepGetNumStepSolveFails(void* arkode_mem, long int* ncnf) diff --git a/doc/arkode/guide/source/Usage/SPRKStep/User_callable.rst b/doc/arkode/guide/source/Usage/SPRKStep/User_callable.rst index 7d5950fa77..73bde21f90 100644 --- a/doc/arkode/guide/source/Usage/SPRKStep/User_callable.rst +++ b/doc/arkode/guide/source/Usage/SPRKStep/User_callable.rst @@ -784,6 +784,9 @@ Main solver optional output functions :retval ARK_SUCCESS: if successful :retval ARK_MEM_NULL: if the SPRKStep memory was ``NULL`` + .. deprecated:: x.y.z + + Use :c:func:`ARKodeGetNumRhsEvals` instead. .. c:function:: int SPRKStepGetCurrentMethod(void* arkode_mem, ARKodeSPRKTable *sprk_table) diff --git a/doc/arkode/guide/source/Usage/User_callable.rst b/doc/arkode/guide/source/Usage/User_callable.rst index fd9b572382..98de3a33b6 100644 --- a/doc/arkode/guide/source/Usage/User_callable.rst +++ b/doc/arkode/guide/source/Usage/User_callable.rst @@ -3165,6 +3165,7 @@ Name of constant associated with a return flag :c:func:`ARKodeGetReturnF No. of explicit stability-limited steps :c:func:`ARKodeGetNumExpSteps` No. of accuracy-limited steps :c:func:`ARKodeGetNumAccSteps` No. of attempted steps :c:func:`ARKodeGetNumStepAttempts` +No. of RHS evaluations :c:func:`ARKodeGetNumRhsEvals` No. of local error test failures that have occurred :c:func:`ARKodeGetNumErrTestFails` No. of failed steps due to a nonlinear solver failure :c:func:`ARKodeGetNumStepSolveFails` Estimated local truncation error vector :c:func:`ARKodeGetEstLocalErrors` @@ -3470,6 +3471,39 @@ Retrieve a pointer for user data :c:func:`ARKodeGetUserDat .. versionadded:: 6.1.0 +.. c:function:: int ARKodeGetNumRhsEvals(void* arkode_mem, int partition_index, long int* num_rhs_evals) + + Returns the number of calls to the user's right-hand side function (so far). + For implicit methods or methods with an implicit partition, the count does + not include calls made by a linear solver or preconditioner. + + :param arkode_mem: pointer to the ARKODE memory block. + :param num_partition: the right-hand side partition index: + + * For ERKStep, ``0`` corresponds to :math:`f(t,y)` + + * For ARKStep, ``0`` corresponds to :math:`f^E(t,y)` and + ``1`` to :math:`f^I(t,y)` + + * For MRIStep, ``0`` corresponds to :math:`f^E(t,y)` and + ``1`` to :math:`f^I(t,y)` + + * For SPRKStep, ``0`` corresponds to :math:`f_1(t,p)` and + ``1`` to :math:`f_2(t,q)` + + A negative index will return the sum of the evaluations for + each partition. + + :param num_rhs_evals: the number of right-hand side evaluations. + + :retval ARK_SUCCESS: the function exited successfully. + :retval ARK_MEM_NULL: if ``arkode_mem`` was ``NULL``. + :retval ARK_ILL_INPUT: if ``num_partiton`` was invalid for the stepper or + ``num_rhs_evals`` was ``NULL`` + + .. versionadded:: x.y.z + + .. c:function:: int ARKodeGetNumErrTestFails(void* arkode_mem, long int* netfails) Returns the number of local error test failures that diff --git a/doc/shared/Changelog.rst b/doc/shared/Changelog.rst index bc9d5c1ad9..2824b85a83 100644 --- a/doc/shared/Changelog.rst +++ b/doc/shared/Changelog.rst @@ -31,7 +31,7 @@ Changes to SUNDIALS in release 7.1.1 **Bug Fixes** -Fixed a `bug `_ in v7.1.0 with the +Fixed a `bug `__ in v7.1.0 with the SYCL N_Vector ``N_VSpace`` function. Changes to SUNDIALS in release 7.1.0 @@ -109,11 +109,11 @@ to ``SYCL`` to match Ginkgo's updated naming convention. Changed the CMake version compatibility mode for SUNDIALS to ``AnyNewerVersion`` instead of ``SameMajorVersion``. This fixes the issue seen `here -`_. +`__. Fixed a CMake bug that caused an MPI linking error for our C++ examples in some instances. Fixes `GitHub Issue #464 -`_. +`__. Fixed the runtime library installation path for windows systems. This fix changes the default library installation path from @@ -134,11 +134,11 @@ Fixed a bug in the HIP execution policies where ``WARP_SIZE`` would not be set with ROCm 6.0.0 or newer. Fixed a bug that caused error messages to be cut off in some cases. Fixes -`GitHub Issue #461 `_. +`GitHub Issue #461 `__. Fixed a memory leak when an error handler was added to a :c:type:`SUNContext`. Fixes `GitHub Issue #466 -`_. +`__. Fixed a bug where :c:func:`MRIStepEvolve` would not handle a recoverable error produced from evolving the inner stepper. @@ -187,7 +187,7 @@ be built with additional error checking by default. See SUNDIALS now requires using a compiler that supports a subset of the C99 standard. Note with the Microsoft C/C++ compiler the subset of C99 features utilized by SUNDIALS are available starting with `Visual Studio 2015 -`_. +`__. *Minimum CMake Version* @@ -297,7 +297,7 @@ and a typedef to a ``MPI_Comm`` in builds with MPI. As a result: The change away from type-erased pointers for :c:type:`SUNComm` fixes problems like the one described in -`GitHub Issue #275 `_. +`GitHub Issue #275 `__. The SUNLogger is now always MPI-aware if MPI is enabled in SUNDIALS and the ``SUNDIALS_LOGGING_ENABLE_MPI`` CMake option and macro definition were removed @@ -358,12 +358,12 @@ interface. **Bug Fixes** -Fixed `GitHub Issue #329 `_ so +Fixed `GitHub Issue #329 `__ so that C++20 aggregate initialization can be used. Fixed integer overflow in the internal SUNDIALS hashmap. This resolves -`GitHub Issues #409 `_ and -`#249 `_. +`GitHub Issues #409 `__ and +`#249 `__. **Deprecation Notice** @@ -431,7 +431,7 @@ an :c:type:`MRIStepInnerFullRhsFn` optional. **Bug Fixes** Changed the :c:type:`SUNProfiler` so that it does not rely on ``MPI_WTime`` in -any case. This fixes `GitHub Issue #312 `_. +any case. This fixes `GitHub Issue #312 `__. Fixed scaling bug in ``SUNMatScaleAddI_Sparse`` for non-square matrices. @@ -587,7 +587,7 @@ Added support for the SYCL backend with RAJA 2022.x.y. **Bug Fixes** Fixed an underflow bug during root finding in ARKODE, CVODE, CVODES, IDA and -IDAS. This fixes `GitHub Issue #57 `_. +IDAS. This fixes `GitHub Issue #57 `__. Fixed an issue with finding oneMKL when using the ``icpx`` compiler with the ``-fsycl`` flag as the C++ compiler instead of ``dpcpp``. @@ -624,13 +624,13 @@ e.g., CUDA, HIP, RAJA, Trilinos, SuperLU_DIST, MAGMA, Ginkgo, and Kokkos. **Major Features** -Added support for the `Ginkgo `_ linear +Added support for the `Ginkgo `__ linear algebra library. This support includes new SUNDIALS matrix and linear solver implementations, see the sections :numref:`SUNMatrix.Ginkgo` and :numref:`SUNLinSol.Ginkgo`. Added new SUNDIALS vector, dense matrix, and dense linear solver implementations -utilizing the `Kokkos Ecosystem `_ for performance +utilizing the `Kokkos Ecosystem `__ for performance portability, see sections :numref:`NVectors.Kokkos`, :numref:`SUNMatrix.Kokkos`, and :numref:`SUNLinSol.Kokkos` for more information. @@ -702,7 +702,7 @@ functions when they are available and the user may provide the math library to link to via the advanced CMake option :cmakeop:`SUNDIALS_MATH_LIBRARY`. Changed ``SUNDIALS_LOGGING_ENABLE_MPI`` CMake option default to be ``OFF``. This -fixes `GitHub Issue #177 `_. +fixes `GitHub Issue #177 `__. Changes to SUNDIALS in release 6.2.0 ==================================== @@ -1052,7 +1052,7 @@ namespace. A capability to profile/instrument SUNDIALS library code has been added. This can be enabled with the CMake option :cmakeop:`SUNDIALS_BUILD_WITH_PROFILING`. A built-in profiler will be used by default, but the `Caliper -`_ library can also be used instead with the +`__ library can also be used instead with the CMake option :cmakeop:`ENABLE_CALIPER`. See the documentation section on profiling for more details. @@ -2656,7 +2656,7 @@ these vectors both move all data to the GPU device upon construction, and speedup will only be realized if the user also conducts the right-hand-side function evaluation on the device. In addition, these vectors assume the problem fits on one GPU. For further information about RAJA, users are referred to the -`RAJA web site `_. +`RAJA web site `__. Added the type :c:type:`sunindextype` to support using 32-bit or 64-bit integer types for indexing arrays within all SUNDIALS structures. :c:type:`sunindextype` @@ -2680,11 +2680,11 @@ The file ``include/sundials_fconfig.h`` was added. This file contains SUNDIALS type information for use in Fortran programs. Added support for many xSDK-compliant build system keys. For more information on -on xSDK compliance the `xSDK policies `_. The xSDK +on xSDK compliance the `xSDK policies `__. The xSDK is a movement in scientific software to provide a foundation for the rapid and efficient production of high-quality, sustainable extreme-scale scientific applications. For more information visit the -`xSDK web site `_. +`xSDK web site `__. Added functions :c:func:`SUNDIALSGetVersion` and :c:func:`SUNDIALSGetVersionNumber` to get SUNDIALS release version information diff --git a/doc/shared/RecentChanges.rst b/doc/shared/RecentChanges.rst index fc2568901e..875d45c9b7 100644 --- a/doc/shared/RecentChanges.rst +++ b/doc/shared/RecentChanges.rst @@ -21,8 +21,12 @@ specific linker flags e.g., MKL. **Bug Fixes** -Fixed c:func:`ARKodeResize` not using the default ``hscale`` when an argument of -``0`` was provided. +Fixed a `bug `__ in the sparse +matrix implementation of :c:func:`SUNMatScaleAddI` which caused out of bounds +writes unless ``indexvals`` were in ascending order for each row/column. + +Fixed :c:func:`ARKodeResize` not using the default ``hscale`` when an argument +of ``0`` was provided. Fixed the loading of ARKStep's default first order explicit method. @@ -35,4 +39,11 @@ repeatedly. Fixed compilation errors when building the Trilinos Teptra NVector with CUDA support. +Fixed a CMake configuration issue related to aliasing an ``ALIAS`` target when +using ``ENABLE_KLU=ON`` in combination with a static-only build of SuiteSparse. + **Deprecation Notices** + +The ARKODE stepper specific functions to retrieve the number of right-hand side +function evaluations have been deprecated. Use :c:func:`ARKodeGetNumRhsEvals` +instead. diff --git a/doc/shared/sundials/SUNContext.rst b/doc/shared/sundials/SUNContext.rst index 18b1bf050d..de5c4d05d5 100644 --- a/doc/shared/sundials/SUNContext.rst +++ b/doc/shared/sundials/SUNContext.rst @@ -187,7 +187,7 @@ Applications that need to have *concurrently initialized* SUNDIALS simulations need to take care to understand the following: #. A :c:type:`SUNContext` object must only be associated with *one* SUNDIALS simulation -(a solver object and its associated vectors etc.) at a time. + (a solver object and its associated vectors etc.) at a time. - Concurrently initialized is not the same as concurrently executing. Even if two SUNDIALS simulations execute sequentially, if both are initialized @@ -199,7 +199,7 @@ need to take care to understand the following: destroyed. #. The creation and destruction of a :c:type:`SUNContext` object is cheap, especially -in comparison to the cost of creating/destroying a SUNDIALS solver object. + in comparison to the cost of creating/destroying a SUNDIALS solver object. The following (incomplete) code examples demonstrate these points using CVODE as the example SUNDIALS package. diff --git a/doc/superbuild/source/conf.py b/doc/superbuild/source/conf.py index 2a6fe2431c..5a4a6414b1 100644 --- a/doc/superbuild/source/conf.py +++ b/doc/superbuild/source/conf.py @@ -27,9 +27,14 @@ # Add any Sphinx extension module names here, as strings. They can be extensions # coming with Sphinx (named 'sphinx.ext.*') or your custom ones. extensions = ['sphinx_rtd_theme', 'sphinx.ext.ifconfig', 'sphinx.ext.mathjax', - 'sphinxfortran.fortran_domain', 'sphinxcontrib.bibtex', - 'sphinx_copybutton', 'sphinx.ext.graphviz', 'sphinx_sundials', - 'sphinx_toolbox.collapse'] + 'sphinx.ext.intersphinx', 'sphinxfortran.fortran_domain', + 'sphinxcontrib.bibtex', 'sphinx_copybutton', 'sphinx.ext.graphviz', + 'sphinx_sundials', 'sphinx_toolbox.collapse'] + +intersphinx_mapping = {"sphinx": ("https://www.sphinx-doc.org/en/master/", None),} + +# No non-external references will be resolved by intersphinx +intersphinx_disabled_reftypes = ["*"] # References bibtex_bibfiles = ['../../shared/sundials.bib'] diff --git a/doc/superbuild/source/developers/index.rst b/doc/superbuild/source/developers/index.rst index b0737c8792..9b1d381e1d 100644 --- a/doc/superbuild/source/developers/index.rst +++ b/doc/superbuild/source/developers/index.rst @@ -23,6 +23,12 @@ integration packages CVODE, IDA, and ARKODE, the sensitivity analysis enabled va IDAS, and the nonlinear solver package KINSOL. This is the part of the SUNDIALS documentation is meant for SUNDIALS developers. +.. note:: + + New SUNDIALS developers should review this developer guide. In particular, the + :ref:`Style` section should be *carefully* read. + + .. toctree:: :maxdepth: 1 diff --git a/doc/superbuild/source/developers/pull_requests/OpenPR.rst b/doc/superbuild/source/developers/pull_requests/OpenPR.rst index 71ddd39ee1..f7e4f8e0a8 100644 --- a/doc/superbuild/source/developers/pull_requests/OpenPR.rst +++ b/doc/superbuild/source/developers/pull_requests/OpenPR.rst @@ -45,8 +45,17 @@ merged, delete the local copy the branch: $ git branch -D +.. note:: + + When you open a PR, various "checks" will run on your code. You can see the status of these + checks at the bottom of the PR page on GitHub. Any fixes needed to pass the checks for + formatting, spelling, and SWIG updates can be automatically addressed by leaving a comment + ``/autofix``. Checks that build the code, run more extensive tests, etc., will not automatically + be fixed. + + .. warning:: Almost all pull requests should be issued against the ``develop`` branch. Generally, the only branches we merge to ``main`` are special PRs to synchronize - ``develop`` and ``main``. \ No newline at end of file + ``develop`` and ``main``. diff --git a/doc/superbuild/source/developers/style_guide/Documentation.rst b/doc/superbuild/source/developers/style_guide/Documentation.rst index 63c9b294c1..92b6d02e86 100644 --- a/doc/superbuild/source/developers/style_guide/Documentation.rst +++ b/doc/superbuild/source/developers/style_guide/Documentation.rst @@ -127,28 +127,272 @@ All citations go into `doc/shared/sundials.bib`. TODO: add citation and reference key style. -Documenting Functions -===================== +User-Callable Functions +======================= -Adding New Functions --------------------- +Document user-callable functions with the :external+sphinx:rst:dir:`c:function` +or :external+sphinx:rst:dir:`cpp:function` directives, as appropriate. The +directive is followed by the C/C++ function signature. Under the signature +(skipping a line and indenting 3 spaces) provide a brief description of the +function followed by any information on its usage. When describing the function +parameters use ``:param :``. If the function returns a specific set of +SUNDIALS error codes, describe the possible return values using ``:retval +:`` for each value. Otherwise, use a single ``:returns:`` item to +describe the result of the function. If the function returns ``void``, a return +entry should not be included. Below we give two examples, the first returns an +error code (int) while the second is a constructor that returns an object +(pointer). -The documentation for new functions should include the ``.. versionadded::`` -directive at the end of the documentation text noting the *package version* -number in which the function was added. +.. code-block:: rst -Changes to Existing Functions ------------------------------ + .. c:function:: int SetFoo(param_type p1, param_type p2) -If the signature or behavior of a function changes in any release the -``.. versionchanged::`` directive should be added to the function documentation -noting the *package version* number in which the change happened and describing -the change. + Brief description of what the user-callable function does. -Deprecating Functions ---------------------- + Additional information about the function and its usage. -When a function is deprecated the ``.. deprecated::`` directive should be added -to the function documentation noting the *package version* number in which the -function was deprecated and describing what function should be used instead -if appropriate. + :param p1: description of the first parameter. + :param p2: description of the second parameter. + + :retval SUCCESS: under some conditions. + :retval FAILURE_1: under some other conditions. + :retval FAILURE_2: under yet some other conditions. + +.. code-block:: rst + + .. c:function:: FooObject CreateFooObject(param_type p1, param_type p2) + + Brief description of what the user-callable function does. + + Additional information about the function and its usage. + + :param p1: description of the first parameter. + :param p2: description of the second parameter. + + :returns: If successful some object, otherwise ``NULL``. + +When adding, updating, or deprecating a function, use the +:external+sphinx:rst:dir:`versionadded`, +:external+sphinx:rst:dir:`versionchanged`, or +:external+sphinx:rst:dir:`deprecated` directives with the placeholder version +number ``x.y.z`` after the return description. The release script will find and +replace all instances of ``x.y.z`` in the documentation with the actual release +number. When altering the behavior of a function or deprecating a function +include a description for the change under the directive (skipping a line and +indenting 3 spaces). For example, + +.. code-block:: rst + + .. versionadded:: x.y.z + +.. code-block:: rst + + .. versionchanged:: x.y.z + + Describe how the function behavior has changed from before. + +.. code-block:: rst + + .. deprecated:: x.y.z + + If a replacement function/procedure is available, describe what users + should do to replace the deprecated function e.g., cross reference the + function superseding this one or list the new steps to follow. Otherwise, + note the feature/capability is no longer supported/provided and, if + possible, state why this function was removed. + +If special attention needs to be drawn to some behavior, consideration, or +limitation of a function that could be overlooked in the description, use the +:external+sphinx:rst:dir:`note` or :external+sphinx:rst:dir:`warning` directives +as appropriate. These should be used sparingly to avoid diluting their impact. +For example, + +.. code-block:: rst + + .. note:: + + Something users should not over look e.g., a feature is only compatible + with a subset of methods. + +.. code-block:: rst + + .. warning:: + + Something critical users should be aware of e.g., performance impacts. + +Finally, at the end of the function documentation, you may include (a +non-trivial) example usage of the function and/or a list of example programs +that utilize the function. For example, + +.. code-block:: rst + + **Example usage:** + + .. code-block:: C + + /* Short code block demonstrating typical usage */ + + /* Create the object */ + FooObject foo_obj = CreateFooObject(p1, p2); + if (foo_obj == NULL) { return 1; } + + /* Attach the object to mem */ + int retval = SetFoo(mem, foo_obj); + if (retval != 0) { return 1; } + + /* Perform some actions */ + ... + + /* Destroy the object */ + retval = DestroyFooObject(&foo_obj); + if (retval != 0) { return 1; } + +.. code-block:: rst + + **Examples codes:** + + * ``examples/package/subdir/pkg_some_code.c`` + +Putting it all together, the rendered documentation should look like the +following. + +.. c:function:: int FooSetBar(void* foo_obj, int bar_value) + :nocontentsentry: + :noindexentry: + + This function sets the value of Bar in a FooObject. + + The default value for Bar is :math:`10`. An input value :math:`< 0` will + reset Bar to the default value. + + :param foo_obj: the FooObject. + :param bar_value: the value of Bar. + + :retval SUCCESS: if the value was successfully set. + :retval NULL_OBJ: if the ``foo_obj`` was ``NULL``. + + .. versionadded:: 1.1.0 + + .. versionchanged:: 2.0.0 + + The type of p1 was changed from ``unsigned int`` to ``int`` + + .. note:: + + Utilizing this capability requires building with Bar enabled. + + .. warning:: + + Setting values greater than 100 may degrade performance. + + **Example usage:** + + .. code-block:: C + + /* Create the object */ + void* foo_obj = CreateFooObject(p1, p2); + if (foo_obj == NULL) { return 1; } + + /* Update the value of Bar */ + int retval = FooSetBar(foo_obj, 50); + if (retval != 0) { return 1; } + + /* Perform some actions */ + ... + + **Examples codes:** + + * ``examples/package/subdir/pkg_foo_demo.c`` + + +User-Supplied Functions +======================= + +Document user-supplied functions with the :external+sphinx:rst:dir:`c:type` +directive. The directive is followed by the ``typedef`` for the function +pointer. The description of the function type mirrors the style used for +user-callable function with one exception. As :external+sphinx:rst:dir:`c:type` +does not currently support the ``param``, ``retval``, and ``returns`` fields, +these sections must be manually created. The style that follows is chosen to +reflect that of ``param``, ``retval``, and ``returns`` fields as much as +possible. Function parameters should be listed under a boldface "Parameters:" +section with the parameters in boldface and separated from their description by +an en-dash. As user-supplied functions typically return a ``int``, but specific +values are not required, a description of how the return value is interpreted +should be given under a boldface "Returns:" section (skipping a line and +indenting 2 spaces). If specific return values are required, these should be +documented similarly to the function parameters and listed under a boldface +"Return values:" section. If the function returns ``void``, a return section +should not be included. Below we give, two examples describing user-supplied +functions. + +.. code-block:: rst + + .. c:type:: int (*FooFn)(param_type p1, param_type p2) + + Brief description of what the user-provided function should do. + + Additional information about the function and its usage. + + **Parameters:** + + * **p1** -- description of the first parameter. + * **p2** -- description of the second parameter. + + **Returns:** + + A :c:type:`FooFn` function should return 0 if successful, a positive + value if a recoverable error occurred, or a negative value if an + unrecoverable error occurred. + +.. code-block:: rst + + .. c:type:: int (*BarFn)(param_type p1, param_type p2) + + Brief description of what the user-provided function should do. + + Additional information about the function and its usage. + + **Parameters:** + + * **p1** -- description of the first parameter. + * **p2** -- description of the second parameter. + + **Return values:** + + * **VALUE_1** -- under some circumstances. + * **VALUE_2** -- under some other circumstances. + +Other than the difference in the function parameter and return value sections +the remaining guidelines from the user-callable function documentation are the +same. Putting it all together, the rendered documentation should look like the +following. + +.. c:type:: int (*FooFn)(double* p1, double* p2) + :nocontentsentry: + :noindexentry: + + Brief description of what the user-provided function should do. + + Additional information about the function and its usage. + + **Parameters:** + + * **p1** -- the input array of values. + * **p2** -- the output array of values. + + **Returns:** + + A :c:type:`FooFn` function should return 0 if successful, a positive value + if a recoverable error occurred, or a negative value if an unrecoverable + error occurred. + + .. versionadded:: 2.2.0 + + .. note:: + + This function is required when using the Foo option. + + **Examples codes:** + + * ``examples/package/subdir/pkg_bar_demo.c`` diff --git a/doc/superbuild/source/developers/style_guide/SourceCode.rst b/doc/superbuild/source/developers/style_guide/SourceCode.rst index ba5a9c4ff8..022cffbc7e 100644 --- a/doc/superbuild/source/developers/style_guide/SourceCode.rst +++ b/doc/superbuild/source/developers/style_guide/SourceCode.rst @@ -402,8 +402,8 @@ can run: The output of ``clang-format`` is sensitive to the ``clang-format`` version. We recommend that you use version ``17.0.4``, which can be installed from source or with Spack. Alternatively, when you open a pull request on GitHub, an action will run ``clang-format`` on the code. If any - formatting is required, the action will fail and produce a git patch artifact that you can download - (from the job artifacts section) and apply with ``git apply``. + formatting is required, the action will fail. Commenting with the magic keyword ``/autofix`` will + kick off a GitHub action which will automatically apply the formatting changes needed. If clang-format breaks lines in a way that is unreadable, use ``//`` to break the line. For example, sometimes (mostly in C++ code) you may have code like this: diff --git a/examples/arkode/CXX_parallel/ark_brusselator1D_task_local_nls.cpp b/examples/arkode/CXX_parallel/ark_brusselator1D_task_local_nls.cpp index a44b52ea67..cbf3f23bd4 100644 --- a/examples/arkode/CXX_parallel/ark_brusselator1D_task_local_nls.cpp +++ b/examples/arkode/CXX_parallel/ark_brusselator1D_task_local_nls.cpp @@ -334,8 +334,10 @@ int EvolveProblemIMEX(SUNContext ctx, N_Vector y, UserData* udata, check_retval(&retval, "ARKodeGetNumSteps", 1); retval = ARKodeGetNumStepAttempts(arkode_mem, &nst_a); check_retval(&retval, "ARKodeGetNumStepAttempts", 1); - retval = ARKStepGetNumRhsEvals(arkode_mem, &nfe, &nfi); - check_retval(&retval, "ARKStepGetNumRhsEvals", 1); + retval = ARKodeGetNumRhsEvals(arkode_mem, 0, &nfe); + check_retval(&retval, "ARKodeGetNumRhsEvals", 1); + retval = ARKodeGetNumRhsEvals(arkode_mem, 1, &nfi); + check_retval(&retval, "ARKodeGetNumRhsEvals", 1); retval = ARKodeGetNumErrTestFails(arkode_mem, &netf); check_retval(&retval, "ARKodeGetNumErrTestFails", 1); retval = ARKodeGetNumNonlinSolvIters(arkode_mem, &nni); @@ -443,8 +445,8 @@ int EvolveProblemExplicit(SUNContext ctx, N_Vector y, UserData* udata, check_retval(&retval, "ARKodeGetNumSteps", 1); retval = ARKodeGetNumStepAttempts(arkode_mem, &nst_a); check_retval(&retval, "ARKodeGetNumStepAttempts", 1); - retval = ERKStepGetNumRhsEvals(arkode_mem, &nfe); - check_retval(&retval, "ERKStepGetNumRhsEvals", 1); + retval = ARKodeGetNumRhsEvals(arkode_mem, 0, &nfe); + check_retval(&retval, "ARKodeGetNumRhsEvals", 1); retval = ARKodeGetNumErrTestFails(arkode_mem, &netf); check_retval(&retval, "ARKodeGetNumErrTestFails", 1); diff --git a/examples/arkode/CXX_parallel/ark_diffusion_reaction_p.cpp b/examples/arkode/CXX_parallel/ark_diffusion_reaction_p.cpp index 5643211620..5dd2bbd43b 100644 --- a/examples/arkode/CXX_parallel/ark_diffusion_reaction_p.cpp +++ b/examples/arkode/CXX_parallel/ark_diffusion_reaction_p.cpp @@ -2600,8 +2600,10 @@ static int OutputStatsIMEX(void* arkode_mem, UserData* udata) if (check_flag(&flag, "ARKodeGetNumStepAttempts", 1)) { return -1; } flag = ARKodeGetNumErrTestFails(arkode_mem, &netf); if (check_flag(&flag, "ARKodeGetNumErrTestFails", 1)) { return -1; } - flag = ARKStepGetNumRhsEvals(arkode_mem, &nfe, &nfi); - if (check_flag(&flag, "ARKStepGetNumRhsEvals", 1)) { return -1; } + flag = ARKodeGetNumRhsEvals(arkode_mem, 0, &nfe); + if (check_flag(&flag, "ARKodeGetNumRhsEvals", 1)) { return -1; } + flag = ARKodeGetNumRhsEvals(arkode_mem, 1, &nfi); + if (check_flag(&flag, "ARKodeGetNumRhsEvals", 1)) { return -1; } if (udata->diffusion) { @@ -2675,11 +2677,11 @@ static int OutputStatsMRI(void* arkode_mem, MRIStepInnerStepper stepper, int flag; // Get slow integrator and solver stats - long int nsts, nfse, nfsi, nni, ncfn, nli, nlcf, nsetups, nfi_ls, nJv; + long int nsts, nfsi, nni, ncfn, nli, nlcf, nsetups, nfi_ls, nJv; flag = ARKodeGetNumSteps(arkode_mem, &nsts); if (check_flag(&flag, "ARKodeGetNumSteps", 1)) { return -1; } - flag = MRIStepGetNumRhsEvals(arkode_mem, &nfse, &nfsi); - if (check_flag(&flag, "MRIStepGetNumRhsEvals", 1)) { return -1; } + flag = ARKodeGetNumRhsEvals(arkode_mem, 1, &nfsi); + if (check_flag(&flag, "ARKodeGetNumRhsEvals", 1)) { return -1; } flag = ARKodeGetNumNonlinSolvIters(arkode_mem, &nni); if (check_flag(&flag, "ARKodeGetNumNonlinSolvIters", 1)) { return -1; } flag = ARKodeGetNumNonlinSolvConvFails(arkode_mem, &ncfn); @@ -2736,7 +2738,7 @@ static int OutputStatsMRI(void* arkode_mem, MRIStepInnerStepper stepper, void* inner_arkode_mem; MRIStepInnerStepper_GetContent(stepper, &inner_arkode_mem); - long int nstf, nstf_a, netff, nffe, nffi; + long int nstf, nstf_a, netff, nffe; flag = ARKodeGetNumSteps(inner_arkode_mem, &nstf); if (check_flag(&flag, "ARKodeGetNumSteps", 1)) { return -1; } @@ -2744,8 +2746,8 @@ static int OutputStatsMRI(void* arkode_mem, MRIStepInnerStepper stepper, if (check_flag(&flag, "ARKodeGetNumStepAttempts", 1)) { return -1; } flag = ARKodeGetNumErrTestFails(inner_arkode_mem, &netff); if (check_flag(&flag, "ARKodeGetNumErrTestFails", 1)) { return -1; } - flag = ARKStepGetNumRhsEvals(inner_arkode_mem, &nffe, &nffi); - if (check_flag(&flag, "ARKStepGetNumRhsEvals", 1)) { return -1; } + flag = ARKodeGetNumRhsEvals(inner_arkode_mem, 0, &nffe); + if (check_flag(&flag, "ARKodeGetNumRhsEvals", 1)) { return -1; } cout << "Fast Integrator:" << endl; cout << " Steps = " << nstf << endl; @@ -2763,11 +2765,11 @@ static int OutputStatsMRICVODE(void* arkode_mem, MRIStepInnerStepper stepper, int flag; // Get slow integrator and solver stats - long int nsts, nfse, nfsi, nni, ncfn, nli, nlcf, nsetups, nfi_ls, nJv; + long int nsts, nfsi, nni, ncfn, nli, nlcf, nsetups, nfi_ls, nJv; flag = ARKodeGetNumSteps(arkode_mem, &nsts); if (check_flag(&flag, "ARKodeGetNumSteps", 1)) { return -1; } - flag = MRIStepGetNumRhsEvals(arkode_mem, &nfse, &nfsi); - if (check_flag(&flag, "MRIStepGetNumRhsEvals", 1)) { return -1; } + flag = ARKodeGetNumRhsEvals(arkode_mem, 1, &nfsi); + if (check_flag(&flag, "ARKodeGetNumRhsEvals", 1)) { return -1; } flag = ARKodeGetNumNonlinSolvIters(arkode_mem, &nni); if (check_flag(&flag, "ARKodeGetNumNonlinSolvIters", 1)) { return -1; } flag = ARKodeGetNumNonlinSolvConvFails(arkode_mem, &ncfn); diff --git a/examples/arkode/CXX_parallel/ark_heat2D_p.cpp b/examples/arkode/CXX_parallel/ark_heat2D_p.cpp index 0bf8d97ba7..ed59996da6 100644 --- a/examples/arkode/CXX_parallel/ark_heat2D_p.cpp +++ b/examples/arkode/CXX_parallel/ark_heat2D_p.cpp @@ -1819,15 +1819,15 @@ static int OutputStats(void* arkode_mem, UserData* udata) int flag; // Get integrator and solver stats - long int nst, nst_a, netf, nfe, nfi, nni, ncfn, nli, nlcf, nsetups, nfi_ls, nJv; + long int nst, nst_a, netf, nfi, nni, ncfn, nli, nlcf, nsetups, nfi_ls, nJv; flag = ARKodeGetNumSteps(arkode_mem, &nst); if (check_flag(&flag, "ARKodeGetNumSteps", 1)) { return -1; } flag = ARKodeGetNumStepAttempts(arkode_mem, &nst_a); if (check_flag(&flag, "ARKodeGetNumStepAttempts", 1)) { return -1; } flag = ARKodeGetNumErrTestFails(arkode_mem, &netf); if (check_flag(&flag, "ARKodeGetNumErrTestFails", 1)) { return -1; } - flag = ARKStepGetNumRhsEvals(arkode_mem, &nfe, &nfi); - if (check_flag(&flag, "ARKStepGetNumRhsEvals", 1)) { return -1; } + flag = ARKodeGetNumRhsEvals(arkode_mem, 1, &nfi); + if (check_flag(&flag, "ARKodeGetNumRhsEvals", 1)) { return -1; } flag = ARKodeGetNumNonlinSolvIters(arkode_mem, &nni); if (check_flag(&flag, "ARKodeGetNumNonlinSolvIters", 1)) { return -1; } flag = ARKodeGetNumNonlinSolvConvFails(arkode_mem, &ncfn); diff --git a/examples/arkode/CXX_parhyp/ark_heat2D_hypre_ls.cpp b/examples/arkode/CXX_parhyp/ark_heat2D_hypre_ls.cpp index 14786d9c98..997bd4d787 100644 --- a/examples/arkode/CXX_parhyp/ark_heat2D_hypre_ls.cpp +++ b/examples/arkode/CXX_parhyp/ark_heat2D_hypre_ls.cpp @@ -2111,15 +2111,15 @@ static int OutputStats(void* arkode_mem, UserData* udata) int flag; // Get integrator and solver stats - long int nst, nst_a, netf, nfe, nfi, nni, ncfn, nli, nlcf, nsetups, nJeval; + long int nst, nst_a, netf, nfi, nni, ncfn, nli, nlcf, nsetups, nJeval; flag = ARKodeGetNumSteps(arkode_mem, &nst); if (check_flag(&flag, "ARKodeGetNumSteps", 1)) { return -1; } flag = ARKodeGetNumStepAttempts(arkode_mem, &nst_a); if (check_flag(&flag, "ARKodeGetNumStepAttempts", 1)) { return -1; } flag = ARKodeGetNumErrTestFails(arkode_mem, &netf); if (check_flag(&flag, "ARKodeGetNumErrTestFails", 1)) { return -1; } - flag = ARKStepGetNumRhsEvals(arkode_mem, &nfe, &nfi); - if (check_flag(&flag, "ARKStepGetNumRhsEvals", 1)) { return -1; } + flag = ARKodeGetNumRhsEvals(arkode_mem, 1, &nfi); + if (check_flag(&flag, "ARKodeGetNumRhsEvals", 1)) { return -1; } flag = ARKodeGetNumNonlinSolvIters(arkode_mem, &nni); if (check_flag(&flag, "ARKodeGetNumNonlinSolvIters", 1)) { return -1; } flag = ARKodeGetNumNonlinSolvConvFails(arkode_mem, &ncfn); diff --git a/examples/arkode/CXX_parhyp/ark_heat2D_hypre_pfmg.cpp b/examples/arkode/CXX_parhyp/ark_heat2D_hypre_pfmg.cpp index d408bcdf78..69aa444334 100644 --- a/examples/arkode/CXX_parhyp/ark_heat2D_hypre_pfmg.cpp +++ b/examples/arkode/CXX_parhyp/ark_heat2D_hypre_pfmg.cpp @@ -2647,15 +2647,15 @@ static int OutputStats(void* arkode_mem, UserData* udata) int flag; // Get integrator and solver stats - long int nst, nst_a, netf, nfe, nfi, nni, ncfn, nli, nlcf, nsetups, nfi_ls, nJv; + long int nst, nst_a, netf, nfi, nni, ncfn, nli, nlcf, nsetups, nfi_ls, nJv; flag = ARKodeGetNumSteps(arkode_mem, &nst); if (check_flag(&flag, "ARKodeGetNumSteps", 1)) { return -1; } flag = ARKodeGetNumStepAttempts(arkode_mem, &nst_a); if (check_flag(&flag, "ARKodeGetNumStepAttempts", 1)) { return -1; } flag = ARKodeGetNumErrTestFails(arkode_mem, &netf); if (check_flag(&flag, "ARKodeGetNumErrTestFails", 1)) { return -1; } - flag = ARKStepGetNumRhsEvals(arkode_mem, &nfe, &nfi); - if (check_flag(&flag, "ARKStepGetNumRhsEvals", 1)) { return -1; } + flag = ARKodeGetNumRhsEvals(arkode_mem, 1, &nfi); + if (check_flag(&flag, "ARKodeGetNumRhsEvals", 1)) { return -1; } flag = ARKodeGetNumNonlinSolvIters(arkode_mem, &nni); if (check_flag(&flag, "ARKodeGetNumNonlinSolvIters", 1)) { return -1; } flag = ARKodeGetNumNonlinSolvConvFails(arkode_mem, &ncfn); diff --git a/examples/arkode/CXX_parhyp/ark_heat2D_hypre_pfmg_imex.cpp b/examples/arkode/CXX_parhyp/ark_heat2D_hypre_pfmg_imex.cpp index ddf689ac47..9ca07cbfe1 100644 --- a/examples/arkode/CXX_parhyp/ark_heat2D_hypre_pfmg_imex.cpp +++ b/examples/arkode/CXX_parhyp/ark_heat2D_hypre_pfmg_imex.cpp @@ -2740,8 +2740,10 @@ static int OutputStats(void* arkode_mem, UserData* udata) if (check_flag(&flag, "ARKodeGetNumStepAttempts", 1)) { return -1; } flag = ARKodeGetNumErrTestFails(arkode_mem, &netf); if (check_flag(&flag, "ARKodeGetNumErrTestFails", 1)) { return -1; } - flag = ARKStepGetNumRhsEvals(arkode_mem, &nfe, &nfi); - if (check_flag(&flag, "ARKStepGetNumRhsEvals", 1)) { return -1; } + flag = ARKodeGetNumRhsEvals(arkode_mem, 0, &nfe); + if (check_flag(&flag, "ARKodeGetNumRhsEvals", 1)) { return -1; } + flag = ARKodeGetNumRhsEvals(arkode_mem, 1, &nfi); + if (check_flag(&flag, "ARKodeGetNumRhsEvals", 1)) { return -1; } flag = ARKodeGetNumNonlinSolvIters(arkode_mem, &nni); if (check_flag(&flag, "ARKodeGetNumNonlinSolvIters", 1)) { return -1; } flag = ARKodeGetNumNonlinSolvConvFails(arkode_mem, &ncfn); @@ -2761,7 +2763,8 @@ static int OutputStats(void* arkode_mem, UserData* udata) cout << " Steps = " << nst << endl; cout << " Step attempts = " << nst_a << endl; cout << " Error test fails = " << netf << endl; - cout << " RHS evals = " << nfi << endl; + cout << " Fe RHS evals = " << nfe << endl; + cout << " Fi RHS evals = " << nfi << endl; cout << " NLS iters = " << nni << endl; cout << " NLS fails = " << ncfn << endl; cout << " LS iters = " << nli << endl; diff --git a/examples/arkode/CXX_parhyp/ark_heat2D_hypre_pfmg_imex_--np_2_2.out b/examples/arkode/CXX_parhyp/ark_heat2D_hypre_pfmg_imex_--np_2_2.out index 66fc95aae1..429b9634d9 100644 --- a/examples/arkode/CXX_parhyp/ark_heat2D_hypre_pfmg_imex_--np_2_2.out +++ b/examples/arkode/CXX_parhyp/ark_heat2D_hypre_pfmg_imex_--np_2_2.out @@ -56,7 +56,8 @@ Final fast integrator statistics: Steps = 722 Step attempts = 722 Error test fails = 0 - RHS evals = 5444 + Fe RHS evals = 2890 + Fi RHS evals = 5444 NLS iters = 2554 NLS fails = 0 LS iters = 8545 diff --git a/examples/arkode/CXX_parhyp/ark_heat2D_hypre_pfmg_mri.cpp b/examples/arkode/CXX_parhyp/ark_heat2D_hypre_pfmg_mri.cpp index aa75c8b61c..ab2789c7ef 100644 --- a/examples/arkode/CXX_parhyp/ark_heat2D_hypre_pfmg_mri.cpp +++ b/examples/arkode/CXX_parhyp/ark_heat2D_hypre_pfmg_mri.cpp @@ -2707,15 +2707,15 @@ static int OutputFastStats(void* arkode_mem, UserData* udata) int flag; // Get integrator and solver stats - long int nst, nst_a, netf, nfe, nfi, nni, ncfn, nli, nlcf, nsetups, nJv; + long int nst, nst_a, netf, nfi, nni, ncfn, nli, nlcf, nsetups, nJv; flag = ARKodeGetNumSteps(arkode_mem, &nst); if (check_flag(&flag, "ARKodeGetNumSteps", 1)) { return -1; } flag = ARKodeGetNumStepAttempts(arkode_mem, &nst_a); if (check_flag(&flag, "ARKodeGetNumStepAttempts", 1)) { return -1; } flag = ARKodeGetNumErrTestFails(arkode_mem, &netf); if (check_flag(&flag, "ARKodeGetNumErrTestFails", 1)) { return -1; } - flag = ARKStepGetNumRhsEvals(arkode_mem, &nfe, &nfi); - if (check_flag(&flag, "ARKStepGetNumRhsEvals", 1)) { return -1; } + flag = ARKodeGetNumRhsEvals(arkode_mem, 1, &nfi); + if (check_flag(&flag, "ARKodeGetNumRhsEvals", 1)) { return -1; } flag = ARKodeGetNumNonlinSolvIters(arkode_mem, &nni); if (check_flag(&flag, "ARKodeGetNumNonlinSolvIters", 1)) { return -1; } flag = ARKodeGetNumNonlinSolvConvFails(arkode_mem, &ncfn); @@ -2778,8 +2778,10 @@ static int OutputSlowStats(void* arkode_mem, UserData* udata) long int nst, nfe, nfi, nni, ncfn, nli, nlcf, nsetups, nJv; flag = ARKodeGetNumSteps(arkode_mem, &nst); if (check_flag(&flag, "ARKodeGetNumSteps", 1)) { return -1; } - flag = MRIStepGetNumRhsEvals(arkode_mem, &nfe, &nfi); - if (check_flag(&flag, "MRIStepGetNumRhsEvals", 1)) { return -1; } + flag = ARKodeGetNumRhsEvals(arkode_mem, 0, &nfe); + if (check_flag(&flag, "ARKodeGetNumRhsEvals", 1)) { return -1; } + flag = ARKodeGetNumRhsEvals(arkode_mem, 1, &nfi); + if (check_flag(&flag, "ARKodeGetNumRhsEvals", 1)) { return -1; } flag = ARKodeGetNumNonlinSolvIters(arkode_mem, &nni); if (check_flag(&flag, "ARKodeGetNumNonlinSolvIters", 1)) { return -1; } flag = ARKodeGetNumNonlinSolvConvFails(arkode_mem, &ncfn); @@ -2797,7 +2799,8 @@ static int OutputSlowStats(void* arkode_mem, UserData* udata) cout << setprecision(6); cout << " Steps = " << nst << endl; - cout << " RHS evals = " << nfi << endl; + cout << " Fe RHS evals = " << nfe << endl; + cout << " Fi RHS evals = " << nfi << endl; cout << " NLS iters = " << nni << endl; cout << " NLS fails = " << ncfn << endl; cout << " LS iters = " << nli << endl; diff --git a/examples/arkode/CXX_parhyp/ark_heat2D_hypre_pfmg_mri_--np_2_2.out b/examples/arkode/CXX_parhyp/ark_heat2D_hypre_pfmg_mri_--np_2_2.out index 5c1a518ea8..2a91f4f2ba 100644 --- a/examples/arkode/CXX_parhyp/ark_heat2D_hypre_pfmg_mri_--np_2_2.out +++ b/examples/arkode/CXX_parhyp/ark_heat2D_hypre_pfmg_mri_--np_2_2.out @@ -56,7 +56,8 @@ Final slow integrator statistics: Steps = 1000 - RHS evals = 7355 + Fe RHS evals = 4000 + Fi RHS evals = 7355 NLS iters = 3355 NLS fails = 0 LS iters = 10603 diff --git a/examples/arkode/CXX_serial/ark_advection_diffusion_reaction.hpp b/examples/arkode/CXX_serial/ark_advection_diffusion_reaction.hpp index 9b50109742..59a429f09b 100644 --- a/examples/arkode/CXX_serial/ark_advection_diffusion_reaction.hpp +++ b/examples/arkode/CXX_serial/ark_advection_diffusion_reaction.hpp @@ -297,8 +297,8 @@ static int OutputStatsERK(void* arkode_mem, UserData& udata) if (check_flag(flag, "ARKodeGetNumStepAttempts")) { return -1; } flag = ARKodeGetNumErrTestFails(arkode_mem, &netf); if (check_flag(flag, "ARKodeGetNumErrTestFails")) { return -1; } - flag = ERKStepGetNumRhsEvals(arkode_mem, &nfe); - if (check_flag(flag, "ERKStepGetNumRhsEvals")) { return -1; } + flag = ARKodeGetNumRhsEvals(arkode_mem, 0, &nfe); + if (check_flag(flag, "ARKodeGetNumRhsEvals")) { return -1; } cout << " Steps = " << nst << endl; cout << " Step attempts = " << nst_a << endl; @@ -321,8 +321,10 @@ static int OutputStatsARK(void* arkode_mem, UserData& udata) if (check_flag(flag, "ARKodeGetNumStepAttempts")) { return -1; } flag = ARKodeGetNumErrTestFails(arkode_mem, &netf); if (check_flag(flag, "ARKodeGetNumErrTestFails")) { return -1; } - flag = ARKStepGetNumRhsEvals(arkode_mem, &nfe, &nfi); - if (check_flag(flag, "ARKStepGetNumRhsEvals")) { return -1; } + flag = ARKodeGetNumRhsEvals(arkode_mem, 0, &nfe); + if (check_flag(flag, "ARKodeGetNumRhsEvals")) { return -1; } + flag = ARKodeGetNumRhsEvals(arkode_mem, 1, &nfi); + if (check_flag(flag, "ARKodeGetNumRhsEvals")) { return -1; } cout << fixed << setprecision(6); cout << " Steps = " << nst << endl; @@ -371,8 +373,10 @@ static int OutputStatsMRIARK(void* arkode_mem, MRIStepInnerStepper fast_mem, long int nst, nst_a, netf, nfe, nfi; flag = ARKodeGetNumSteps(arkode_mem, &nst); if (check_flag(flag, "ARKodeGetNumSteps")) { return -1; } - flag = MRIStepGetNumRhsEvals(arkode_mem, &nfe, &nfi); - if (check_flag(flag, "MRIStepGetNumRhsEvals")) { return -1; } + flag = ARKodeGetNumRhsEvals(arkode_mem, 0, &nfe); + if (check_flag(flag, "ARKodeGetNumRhsEvals")) { return -1; } + flag = ARKodeGetNumRhsEvals(arkode_mem, 1, &nfi); + if (check_flag(flag, "ARKodeGetNumRhsEvals")) { return -1; } cout << fixed << setprecision(6); cout << endl << "Slow Integrator:" << endl; @@ -419,8 +423,10 @@ static int OutputStatsMRIARK(void* arkode_mem, MRIStepInnerStepper fast_mem, if (check_flag(flag, "ARKodeGetNumStepAttempts")) { return -1; } flag = ARKodeGetNumErrTestFails(fast_arkode_mem, &netf); if (check_flag(flag, "ARKodeGetNumErrTestFails")) { return -1; } - flag = ARKStepGetNumRhsEvals(fast_arkode_mem, &nfe, &nfi); - if (check_flag(flag, "ARKStepGetNumRhsEvals")) { return -1; } + flag = ARKodeGetNumRhsEvals(fast_arkode_mem, 0, &nfe); + if (check_flag(flag, "ARKodeGetNumRhsEvals")) { return -1; } + flag = ARKodeGetNumRhsEvals(fast_arkode_mem, 1, &nfi); + if (check_flag(flag, "ARKodeGetNumRhsEvals")) { return -1; } cout << fixed << setprecision(6); cout << endl << "Fast Integrator:" << endl; @@ -507,8 +513,10 @@ static int OutputStatsMRICVODE(void* arkode_mem, MRIStepInnerStepper fast_mem, long int nsts, nfse, nfsi; flag = ARKodeGetNumSteps(arkode_mem, &nsts); if (check_flag(flag, "ARKodeGetNumSteps")) { return -1; } - flag = MRIStepGetNumRhsEvals(arkode_mem, &nfse, &nfsi); - if (check_flag(flag, "MRIStepGetNumRhsEvals")) { return -1; } + flag = ARKodeGetNumRhsEvals(arkode_mem, 0, &nfse); + if (check_flag(flag, "ARKodeGetNumRhsEvals")) { return -1; } + flag = ARKodeGetNumRhsEvals(arkode_mem, 1, &nfsi); + if (check_flag(flag, "ARKodeGetNumRhsEvals")) { return -1; } long int nni, ncfn; flag = ARKodeGetNumNonlinSolvIters(arkode_mem, &nni); diff --git a/examples/arkode/CXX_serial/ark_analytic_sys.cpp b/examples/arkode/CXX_serial/ark_analytic_sys.cpp index 944c40be1a..d48ce0abb9 100644 --- a/examples/arkode/CXX_serial/ark_analytic_sys.cpp +++ b/examples/arkode/CXX_serial/ark_analytic_sys.cpp @@ -239,8 +239,10 @@ int main() check_flag(&flag, "ARKodeGetNumSteps", 1); flag = ARKodeGetNumStepAttempts(arkode_mem, &nst_a); check_flag(&flag, "ARKodeGetNumStepAttempts", 1); - flag = ARKStepGetNumRhsEvals(arkode_mem, &nfe, &nfi); - check_flag(&flag, "ARKStepGetNumRhsEvals", 1); + flag = ARKodeGetNumRhsEvals(arkode_mem, 0, &nfe); + check_flag(&flag, "ARKodeGetNumRhsEvals", 1); + flag = ARKodeGetNumRhsEvals(arkode_mem, 1, &nfi); + check_flag(&flag, "ARKodeGetNumRhsEvals", 1); flag = ARKodeGetNumLinSolvSetups(arkode_mem, &nsetups); check_flag(&flag, "ARKodeGetNumLinSolvSetups", 1); flag = ARKodeGetNumErrTestFails(arkode_mem, &netf); diff --git a/examples/arkode/CXX_serial/ark_heat2D.cpp b/examples/arkode/CXX_serial/ark_heat2D.cpp index 3298eac1f9..4b75d703bb 100644 --- a/examples/arkode/CXX_serial/ark_heat2D.cpp +++ b/examples/arkode/CXX_serial/ark_heat2D.cpp @@ -1086,15 +1086,15 @@ static int OutputStats(void* arkode_mem, UserData* udata) int flag; // Get integrator and solver stats - long int nst, nst_a, netf, nfe, nfi, nni, ncfn, nli, nlcf, nsetups, nfi_ls, nJv; + long int nst, nst_a, netf, nfi, nni, ncfn, nli, nlcf, nsetups, nfi_ls, nJv; flag = ARKodeGetNumSteps(arkode_mem, &nst); if (check_flag(&flag, "ARKodeGetNumSteps", 1)) { return -1; } flag = ARKodeGetNumStepAttempts(arkode_mem, &nst_a); if (check_flag(&flag, "ARKodeGetNumStepAttempts", 1)) { return -1; } flag = ARKodeGetNumErrTestFails(arkode_mem, &netf); if (check_flag(&flag, "ARKodeGetNumErrTestFails", 1)) { return -1; } - flag = ARKStepGetNumRhsEvals(arkode_mem, &nfe, &nfi); - if (check_flag(&flag, "ARKStepGetNumRhsEvals", 1)) { return -1; } + flag = ARKodeGetNumRhsEvals(arkode_mem, 1, &nfi); + if (check_flag(&flag, "ARKodeGetNumRhsEvals", 1)) { return -1; } flag = ARKodeGetNumNonlinSolvIters(arkode_mem, &nni); if (check_flag(&flag, "ARKodeGetNumNonlinSolvIters", 1)) { return -1; } flag = ARKodeGetNumNonlinSolvConvFails(arkode_mem, &ncfn); diff --git a/examples/arkode/CXX_serial/ark_kpr_Mt.cpp b/examples/arkode/CXX_serial/ark_kpr_Mt.cpp index bd945fa00b..f48f81bc84 100644 --- a/examples/arkode/CXX_serial/ark_kpr_Mt.cpp +++ b/examples/arkode/CXX_serial/ark_kpr_Mt.cpp @@ -575,8 +575,10 @@ static int adaptive_run(void* arkode_mem, N_Vector y, sunrealtype T0, if (check_retval(&retval, "ARKodeGetNumSteps", 1)) { return 1; } retval = ARKodeGetNumStepAttempts(arkode_mem, &nst_a); if (check_retval(&retval, "ARKodeGetNumStepAttempts", 1)) { return 1; } - retval = ARKStepGetNumRhsEvals(arkode_mem, &nfe, &nfi); - if (check_retval(&retval, "ARKStepGetNumRhsEvals", 1)) { return 1; } + retval = ARKodeGetNumRhsEvals(arkode_mem, 0, &nfe); + if (check_retval(&retval, "ARKodeGetNumRhsEvals", 1)) { return 1; } + retval = ARKodeGetNumRhsEvals(arkode_mem, 1, &nfi); + if (check_retval(&retval, "ARKodeGetNumRhsEvals", 1)) { return 1; } retval = ARKodeGetNumErrTestFails(arkode_mem, &netf); if (check_retval(&retval, "ARKodeGetNumErrTestFails", 1)) { return 1; } retval = ARKodeGetNumMassSetups(arkode_mem, &nmset); diff --git a/examples/arkode/CXX_serial/ark_pendulum.cpp b/examples/arkode/CXX_serial/ark_pendulum.cpp index 57c23ccc99..3cee00125b 100644 --- a/examples/arkode/CXX_serial/ark_pendulum.cpp +++ b/examples/arkode/CXX_serial/ark_pendulum.cpp @@ -300,8 +300,11 @@ int main(int argc, char* argv[]) flag = ARKodeGetNumErrTestFails(arkode_mem, &netf); check_flag(flag, "ARKodeGetNumErrTestFails"); - flag = ARKStepGetNumRhsEvals(arkode_mem, &nfe, &nfi); - check_flag(flag, "ARKStepGetNumRhsEvals"); + flag = ARKodeGetNumRhsEvals(arkode_mem, 0, &nfe); + check_flag(flag, "ARKodeGetNumRhsEvals"); + + flag = ARKodeGetNumRhsEvals(arkode_mem, 1, &nfi); + check_flag(flag, "ARKodeGetNumRhsEvals"); std::cout << std::endl; std::cout << "Final Solver Statistics:\n"; diff --git a/examples/arkode/CXX_superludist/ark_brusselator1D_FEM_sludist.cpp b/examples/arkode/CXX_superludist/ark_brusselator1D_FEM_sludist.cpp index 15f50ea46e..64ffd741a9 100644 --- a/examples/arkode/CXX_superludist/ark_brusselator1D_FEM_sludist.cpp +++ b/examples/arkode/CXX_superludist/ark_brusselator1D_FEM_sludist.cpp @@ -575,8 +575,10 @@ int main(int argc, char* argv[]) check_retval(&retval, "ARKodeGetNumSteps", 1); retval = ARKodeGetNumStepAttempts(arkode_mem, &nst_a); check_retval(&retval, "ARKodeGetNumStepAttempts", 1); - retval = ARKStepGetNumRhsEvals(arkode_mem, &nfe, &nfi); - check_retval(&retval, "ARKStepGetNumRhsEvals", 1); + retval = ARKodeGetNumRhsEvals(arkode_mem, 0, &nfe); + check_retval(&retval, "ARKodeGetNumRhsEvals", 1); + retval = ARKodeGetNumRhsEvals(arkode_mem, 1, &nfi); + check_retval(&retval, "ARKodeGetNumRhsEvals", 1); retval = ARKodeGetNumLinSolvSetups(arkode_mem, &nsetups); check_retval(&retval, "ARKodeGetNumLinSolvSetups", 1); retval = ARKodeGetNumErrTestFails(arkode_mem, &netf); diff --git a/examples/arkode/CXX_xbraid/ark_heat2D_hypre_pfmg_xbraid.cpp b/examples/arkode/CXX_xbraid/ark_heat2D_hypre_pfmg_xbraid.cpp index 987ba94a5d..0c4da9c70e 100644 --- a/examples/arkode/CXX_xbraid/ark_heat2D_hypre_pfmg_xbraid.cpp +++ b/examples/arkode/CXX_xbraid/ark_heat2D_hypre_pfmg_xbraid.cpp @@ -2902,15 +2902,15 @@ static int OutputStats(void* arkode_mem, UserData* udata) bool outproc = (udata->myid_w == 0); // Get integrator and solver stats - long int nst, nst_a, netf, nfe, nfi, nni, ncfn, nli, nlcf, nsetups, nfi_ls, nJv; + long int nst, nst_a, netf, nfi, nni, ncfn, nli, nlcf, nsetups, nfi_ls, nJv; flag = ARKodeGetNumSteps(arkode_mem, &nst); if (check_flag(&flag, "ARKodeGetNumSteps", 1)) { return -1; } flag = ARKodeGetNumStepAttempts(arkode_mem, &nst_a); if (check_flag(&flag, "ARKodeGetNumStepAttempts", 1)) { return -1; } flag = ARKodeGetNumErrTestFails(arkode_mem, &netf); if (check_flag(&flag, "ARKodeGetNumErrTestFails", 1)) { return -1; } - flag = ARKStepGetNumRhsEvals(arkode_mem, &nfe, &nfi); - if (check_flag(&flag, "ARKStepGetNumRhsEvals", 1)) { return -1; } + flag = ARKodeGetNumRhsEvals(arkode_mem, 1, &nfi); + if (check_flag(&flag, "ARKodeGetNumRhsEvals", 1)) { return -1; } flag = ARKodeGetNumNonlinSolvIters(arkode_mem, &nni); if (check_flag(&flag, "ARKodeGetNumNonlinSolvIters", 1)) { return -1; } flag = ARKodeGetNumNonlinSolvConvFails(arkode_mem, &ncfn); diff --git a/examples/arkode/CXX_xbraid/ark_heat2D_p_xbraid.cpp b/examples/arkode/CXX_xbraid/ark_heat2D_p_xbraid.cpp index d6cc3b7319..466b1f7f9c 100644 --- a/examples/arkode/CXX_xbraid/ark_heat2D_p_xbraid.cpp +++ b/examples/arkode/CXX_xbraid/ark_heat2D_p_xbraid.cpp @@ -2052,15 +2052,15 @@ static int OutputStats(void* arkode_mem, UserData* udata) bool outproc = (udata->myid_w == 0); // Get integrator and solver stats - long int nst, nst_a, netf, nfe, nfi, nni, ncfn, nli, nlcf, nsetups, nfi_ls, nJv; + long int nst, nst_a, netf, nfi, nni, ncfn, nli, nlcf, nsetups, nfi_ls, nJv; flag = ARKodeGetNumSteps(arkode_mem, &nst); if (check_flag(&flag, "ARKodeGetNumSteps", 1)) { return -1; } flag = ARKodeGetNumStepAttempts(arkode_mem, &nst_a); if (check_flag(&flag, "ARKodeGetNumStepAttempts", 1)) { return -1; } flag = ARKodeGetNumErrTestFails(arkode_mem, &netf); if (check_flag(&flag, "ARKodeGetNumErrTestFails", 1)) { return -1; } - flag = ARKStepGetNumRhsEvals(arkode_mem, &nfe, &nfi); - if (check_flag(&flag, "ARKStepGetNumRhsEvals", 1)) { return -1; } + flag = ARKodeGetNumRhsEvals(arkode_mem, 1, &nfi); + if (check_flag(&flag, "ARKodeGetNumRhsEvals", 1)) { return -1; } flag = ARKodeGetNumNonlinSolvIters(arkode_mem, &nni); if (check_flag(&flag, "ARKodeGetNumNonlinSolvIters", 1)) { return -1; } flag = ARKodeGetNumNonlinSolvConvFails(arkode_mem, &ncfn); diff --git a/examples/arkode/CXX_xbraid/ark_heat2D_xbraid.cpp b/examples/arkode/CXX_xbraid/ark_heat2D_xbraid.cpp index 3e6cd8b1d5..c330571584 100644 --- a/examples/arkode/CXX_xbraid/ark_heat2D_xbraid.cpp +++ b/examples/arkode/CXX_xbraid/ark_heat2D_xbraid.cpp @@ -1351,15 +1351,15 @@ static int OutputStats(void* arkode_mem, UserData* udata) bool outproc = (udata->myid_w == 0); // Get integrator and solver stats - long int nst, nst_a, netf, nfe, nfi, nni, ncfn, nli, nlcf, nsetups, nfi_ls, nJv; + long int nst, nst_a, netf, nfi, nni, ncfn, nli, nlcf, nsetups, nfi_ls, nJv; flag = ARKodeGetNumSteps(arkode_mem, &nst); if (check_flag(&flag, "ARKodeGetNumSteps", 1)) { return -1; } flag = ARKodeGetNumStepAttempts(arkode_mem, &nst_a); if (check_flag(&flag, "ARKodeGetNumStepAttempts", 1)) { return -1; } flag = ARKodeGetNumErrTestFails(arkode_mem, &netf); if (check_flag(&flag, "ARKodeGetNumErrTestFails", 1)) { return -1; } - flag = ARKStepGetNumRhsEvals(arkode_mem, &nfe, &nfi); - if (check_flag(&flag, "ARKStepGetNumRhsEvals", 1)) { return -1; } + flag = ARKodeGetNumRhsEvals(arkode_mem, 1, &nfi); + if (check_flag(&flag, "ARKodeGetNumRhsEvals", 1)) { return -1; } flag = ARKodeGetNumNonlinSolvIters(arkode_mem, &nni); if (check_flag(&flag, "ARKodeGetNumNonlinSolvIters", 1)) { return -1; } flag = ARKodeGetNumNonlinSolvConvFails(arkode_mem, &ncfn); diff --git a/examples/arkode/C_manyvector/ark_brusselator1D_manyvec.c b/examples/arkode/C_manyvector/ark_brusselator1D_manyvec.c index 45ab77e455..fe21069373 100644 --- a/examples/arkode/C_manyvector/ark_brusselator1D_manyvec.c +++ b/examples/arkode/C_manyvector/ark_brusselator1D_manyvec.c @@ -292,8 +292,10 @@ int main(void) check_flag(&flag, "ARKodeGetNumSteps", 1); flag = ARKodeGetNumStepAttempts(arkode_mem, &nst_a); check_flag(&flag, "ARKodeGetNumStepAttempts", 1); - flag = ARKStepGetNumRhsEvals(arkode_mem, &nfe, &nfi); - check_flag(&flag, "ARKStepGetNumRhsEvals", 1); + flag = ARKodeGetNumRhsEvals(arkode_mem, 0, &nfe); + check_flag(&flag, "ARKodeGetNumRhsEvals", 1); + flag = ARKodeGetNumRhsEvals(arkode_mem, 1, &nfi); + check_flag(&flag, "ARKodeGetNumRhsEvals", 1); flag = ARKodeGetNumLinSolvSetups(arkode_mem, &nsetups); check_flag(&flag, "ARKodeGetNumLinSolvSetups", 1); flag = ARKodeGetNumErrTestFails(arkode_mem, &netf); diff --git a/examples/arkode/C_openmp/ark_brusselator1D_omp.c b/examples/arkode/C_openmp/ark_brusselator1D_omp.c index 1fc53f29d2..81cc915abc 100644 --- a/examples/arkode/C_openmp/ark_brusselator1D_omp.c +++ b/examples/arkode/C_openmp/ark_brusselator1D_omp.c @@ -323,8 +323,10 @@ int main(int argc, char* argv[]) check_flag(&flag, "ARKodeGetNumSteps", 1); flag = ARKodeGetNumStepAttempts(arkode_mem, &nst_a); check_flag(&flag, "ARKodeGetNumStepAttempts", 1); - flag = ARKStepGetNumRhsEvals(arkode_mem, &nfe, &nfi); - check_flag(&flag, "ARKStepGetNumRhsEvals", 1); + flag = ARKodeGetNumRhsEvals(arkode_mem, 0, &nfe); + check_flag(&flag, "ARKodeGetNumRhsEvals", 1); + flag = ARKodeGetNumRhsEvals(arkode_mem, 1, &nfi); + check_flag(&flag, "ARKodeGetNumRhsEvals", 1); flag = ARKodeGetNumLinSolvSetups(arkode_mem, &nsetups); check_flag(&flag, "ARKodeGetNumLinSolvSetups", 1); flag = ARKodeGetNumErrTestFails(arkode_mem, &netf); diff --git a/examples/arkode/C_openmp/ark_heat1D_omp.c b/examples/arkode/C_openmp/ark_heat1D_omp.c index 4fc8eb998b..2bdaa71ea4 100644 --- a/examples/arkode/C_openmp/ark_heat1D_omp.c +++ b/examples/arkode/C_openmp/ark_heat1D_omp.c @@ -215,8 +215,10 @@ int main(int argc, char* argv[]) check_flag(&flag, "ARKodeGetNumSteps", 1); flag = ARKodeGetNumStepAttempts(arkode_mem, &nst_a); check_flag(&flag, "ARKodeGetNumStepAttempts", 1); - flag = ARKStepGetNumRhsEvals(arkode_mem, &nfe, &nfi); - check_flag(&flag, "ARKStepGetNumRhsEvals", 1); + flag = ARKodeGetNumRhsEvals(arkode_mem, 0, &nfe); + check_flag(&flag, "ARKodeGetNumRhsEvals", 1); + flag = ARKodeGetNumRhsEvals(arkode_mem, 1, &nfi); + check_flag(&flag, "ARKodeGetNumRhsEvals", 1); flag = ARKodeGetNumLinSolvSetups(arkode_mem, &nsetups); check_flag(&flag, "ARKodeGetNumLinSolvSetups", 1); flag = ARKodeGetNumErrTestFails(arkode_mem, &netf); diff --git a/examples/arkode/C_openmpdev/ark_analytic_nonlin_ompdev.c b/examples/arkode/C_openmpdev/ark_analytic_nonlin_ompdev.c index 1f847e9dfe..15c909a73f 100644 --- a/examples/arkode/C_openmpdev/ark_analytic_nonlin_ompdev.c +++ b/examples/arkode/C_openmpdev/ark_analytic_nonlin_ompdev.c @@ -140,8 +140,8 @@ int main(void) check_flag(&flag, "ARKodeGetNumSteps", 1); flag = ARKodeGetNumStepAttempts(arkode_mem, &nst_a); check_flag(&flag, "ARKodeGetNumStepAttempts", 1); - flag = ERKStepGetNumRhsEvals(arkode_mem, &nfe); - check_flag(&flag, "ERKStepGetNumRhsEvals", 1); + flag = ARKodeGetNumRhsEvals(arkode_mem, 0, &nfe); + check_flag(&flag, "ARKodeGetNumRhsEvals", 1); flag = ARKodeGetNumErrTestFails(arkode_mem, &netf); check_flag(&flag, "ARKodeGetNumErrTestFails", 1); diff --git a/examples/arkode/C_openmpdev/ark_heat1D_ompdev.c b/examples/arkode/C_openmpdev/ark_heat1D_ompdev.c index c6307e226f..56bad92e9b 100644 --- a/examples/arkode/C_openmpdev/ark_heat1D_ompdev.c +++ b/examples/arkode/C_openmpdev/ark_heat1D_ompdev.c @@ -211,8 +211,10 @@ int main(void) check_flag(&flag, "ARKodeGetNumSteps", 1); flag = ARKodeGetNumStepAttempts(arkode_mem, &nst_a); check_flag(&flag, "ARKodeGetNumStepAttempts", 1); - flag = ARKStepGetNumRhsEvals(arkode_mem, &nfe, &nfi); - check_flag(&flag, "ARKStepGetNumRhsEvals", 1); + flag = ARKodeGetNumRhsEvals(arkode_mem, 0, &nfe); + check_flag(&flag, "ARKodeGetNumRhsEvals", 1); + flag = ARKodeGetNumRhsEvals(arkode_mem, 1, &nfi); + check_flag(&flag, "ARKodeGetNumRhsEvals", 1); flag = ARKodeGetNumLinSolvSetups(arkode_mem, &nsetups); check_flag(&flag, "ARKodeGetNumLinSolvSetups", 1); flag = ARKodeGetNumErrTestFails(arkode_mem, &netf); diff --git a/examples/arkode/C_parallel/ark_brusselator1D_task_local_nls.c b/examples/arkode/C_parallel/ark_brusselator1D_task_local_nls.c index a35437e611..d3a71248c6 100644 --- a/examples/arkode/C_parallel/ark_brusselator1D_task_local_nls.c +++ b/examples/arkode/C_parallel/ark_brusselator1D_task_local_nls.c @@ -458,8 +458,10 @@ static int EvolveProblemIMEX(N_Vector y, UserData udata, UserOptions uopt, check_retval(&retval, "ARKodeGetNumSteps", 1); retval = ARKodeGetNumStepAttempts(arkode_mem, &nst_a); check_retval(&retval, "ARKodeGetNumStepAttempts", 1); - retval = ARKStepGetNumRhsEvals(arkode_mem, &nfe, &nfi); - check_retval(&retval, "ARKStepGetNumRhsEvals", 1); + retval = ARKodeGetNumRhsEvals(arkode_mem, 0, &nfe); + check_retval(&retval, "ARKodeGetNumRhsEvals", 1); + retval = ARKodeGetNumRhsEvals(arkode_mem, 1, &nfi); + check_retval(&retval, "ARKodeGetNumRhsEvals", 1); retval = ARKodeGetNumErrTestFails(arkode_mem, &netf); check_retval(&retval, "ARKodeGetNumErrTestFails", 1); retval = ARKodeGetNumNonlinSolvIters(arkode_mem, &nni); @@ -570,8 +572,8 @@ static int EvolveProblemExplicit(N_Vector y, UserData udata, UserOptions uopt, check_retval(&retval, "ARKodeGetNumSteps", 1); retval = ARKodeGetNumStepAttempts(arkode_mem, &nst_a); check_retval(&retval, "ARKodeGetNumStepAttempts", 1); - retval = ERKStepGetNumRhsEvals(arkode_mem, &nfe); - check_retval(&retval, "ERKStepGetNumRhsEvals", 1); + retval = ARKodeGetNumRhsEvals(arkode_mem, 0, &nfe); + check_retval(&retval, "ARKodeGetNumRhsEvals", 1); retval = ARKodeGetNumErrTestFails(arkode_mem, &netf); check_retval(&retval, "ARKodeGetNumErrTestFails", 1); diff --git a/examples/arkode/C_parallel/ark_diurnal_kry_bbd_p.c b/examples/arkode/C_parallel/ark_diurnal_kry_bbd_p.c index 190b7c40ce..ced0c56894 100644 --- a/examples/arkode/C_parallel/ark_diurnal_kry_bbd_p.c +++ b/examples/arkode/C_parallel/ark_diurnal_kry_bbd_p.c @@ -481,8 +481,10 @@ static void PrintFinalStats(void* arkode_mem) check_flag(&flag, "ARKodeGetWorkSpace", 1, 0); flag = ARKodeGetNumSteps(arkode_mem, &nst); check_flag(&flag, "ARKodeGetNumSteps", 1, 0); - flag = ARKStepGetNumRhsEvals(arkode_mem, &nfe, &nfi); - check_flag(&flag, "ARKStepGetNumRhsEvals", 1, 0); + flag = ARKodeGetNumRhsEvals(arkode_mem, 0, &nfe); + check_flag(&flag, "ARKodeGetNumRhsEvals", 1, 0); + flag = ARKodeGetNumRhsEvals(arkode_mem, 1, &nfi); + check_flag(&flag, "ARKodeGetNumRhsEvals", 1, 0); flag = ARKodeGetNumLinSolvSetups(arkode_mem, &nsetups); check_flag(&flag, "ARKodeGetNumLinSolvSetups", 1, 0); flag = ARKodeGetNumErrTestFails(arkode_mem, &netf); diff --git a/examples/arkode/C_parallel/ark_diurnal_kry_p.c b/examples/arkode/C_parallel/ark_diurnal_kry_p.c index b5d9941480..4f8f39634a 100644 --- a/examples/arkode/C_parallel/ark_diurnal_kry_p.c +++ b/examples/arkode/C_parallel/ark_diurnal_kry_p.c @@ -474,8 +474,10 @@ static void PrintFinalStats(void* arkode_mem) check_flag(&flag, "ARKodeGetWorkSpace", 1, 0); flag = ARKodeGetNumSteps(arkode_mem, &nst); check_flag(&flag, "ARKodeGetNumSteps", 1, 0); - flag = ARKStepGetNumRhsEvals(arkode_mem, &nfe, &nfi); - check_flag(&flag, "ARKStepGetNumRhsEvals", 1, 0); + flag = ARKodeGetNumRhsEvals(arkode_mem, 0, &nfe); + check_flag(&flag, "ARKodeGetNumRhsEvals", 1, 0); + flag = ARKodeGetNumRhsEvals(arkode_mem, 1, &nfi); + check_flag(&flag, "ARKodeGetNumRhsEvals", 1, 0); flag = ARKodeGetNumLinSolvSetups(arkode_mem, &nsetups); check_flag(&flag, "ARKodeGetNumLinSolvSetups", 1, 0); flag = ARKodeGetNumErrTestFails(arkode_mem, &netf); diff --git a/examples/arkode/C_parhyp/ark_diurnal_kry_ph.c b/examples/arkode/C_parhyp/ark_diurnal_kry_ph.c index 59dfc3d0f4..10f88144aa 100644 --- a/examples/arkode/C_parhyp/ark_diurnal_kry_ph.c +++ b/examples/arkode/C_parhyp/ark_diurnal_kry_ph.c @@ -486,8 +486,10 @@ static void PrintFinalStats(void* arkode_mem) check_flag(&flag, "ARKodeGetWorkSpace", 1, 0); flag = ARKodeGetNumSteps(arkode_mem, &nst); check_flag(&flag, "ARKodeGetNumSteps", 1, 0); - flag = ARKStepGetNumRhsEvals(arkode_mem, &nfe, &nfi); - check_flag(&flag, "ARKStepGetNumRhsEvals", 1, 0); + flag = ARKodeGetNumRhsEvals(arkode_mem, 0, &nfe); + check_flag(&flag, "ARKodeGetNumRhsEvals", 1, 0); + flag = ARKodeGetNumRhsEvals(arkode_mem, 1, &nfi); + check_flag(&flag, "ARKodeGetNumRhsEvals", 1, 0); flag = ARKodeGetNumLinSolvSetups(arkode_mem, &nsetups); check_flag(&flag, "ARKodeGetNumLinSolvSetups", 1, 0); flag = ARKodeGetNumErrTestFails(arkode_mem, &netf); diff --git a/examples/arkode/C_serial/ark_KrylovDemo_prec.c b/examples/arkode/C_serial/ark_KrylovDemo_prec.c index 501ff55e80..31ba755240 100644 --- a/examples/arkode/C_serial/ark_KrylovDemo_prec.c +++ b/examples/arkode/C_serial/ark_KrylovDemo_prec.c @@ -643,8 +643,10 @@ static void PrintOutput(void* arkode_mem, sunrealtype t) flag = ARKodeGetNumSteps(arkode_mem, &nst); check_flag(&flag, "ARKodeGetNumSteps", 1); - flag = ARKStepGetNumRhsEvals(arkode_mem, &nfe, &nfi); - check_flag(&flag, "ARKStepGetNumRhsEvals", 1); + flag = ARKodeGetNumRhsEvals(arkode_mem, 0, &nfe); + check_flag(&flag, "ARKodeGetNumRhsEvals", 1); + flag = ARKodeGetNumRhsEvals(arkode_mem, 1, &nfi); + check_flag(&flag, "ARKodeGetNumRhsEvals", 1); flag = ARKodeGetNumNonlinSolvIters(arkode_mem, &nni); check_flag(&flag, "ARKodeGetNumNonlinSolvIters", 1); flag = ARKodeGetLastStep(arkode_mem, &hu); @@ -678,8 +680,10 @@ static void PrintFinalStats(void* arkode_mem) check_flag(&flag, "ARKodeGetWorkSpace", 1); flag = ARKodeGetNumSteps(arkode_mem, &nst); check_flag(&flag, "ARKodeGetNumSteps", 1); - flag = ARKStepGetNumRhsEvals(arkode_mem, &nfe, &nfi); - check_flag(&flag, "ARKStepGetNumRhsEvals", 1); + flag = ARKodeGetNumRhsEvals(arkode_mem, 0, &nfe); + check_flag(&flag, "ARKodeGetNumRhsEvals", 1); + flag = ARKodeGetNumRhsEvals(arkode_mem, 1, &nfi); + check_flag(&flag, "ARKodeGetNumRhsEvals", 1); flag = ARKodeGetNumLinSolvSetups(arkode_mem, &nsetups); check_flag(&flag, "ARKodeGetNumLinSolvSetups", 1); flag = ARKodeGetNumErrTestFails(arkode_mem, &netf); diff --git a/examples/arkode/C_serial/ark_analytic.c b/examples/arkode/C_serial/ark_analytic.c index 152a95133d..a15bde944d 100644 --- a/examples/arkode/C_serial/ark_analytic.c +++ b/examples/arkode/C_serial/ark_analytic.c @@ -169,8 +169,10 @@ int main(void) check_flag(&flag, "ARKodeGetNumSteps", 1); flag = ARKodeGetNumStepAttempts(arkode_mem, &nst_a); check_flag(&flag, "ARKodeGetNumStepAttempts", 1); - flag = ARKStepGetNumRhsEvals(arkode_mem, &nfe, &nfi); - check_flag(&flag, "ARKStepGetNumRhsEvals", 1); + flag = ARKodeGetNumRhsEvals(arkode_mem, 0, &nfe); + check_flag(&flag, "ARKodeGetNumRhsEvals", 1); + flag = ARKodeGetNumRhsEvals(arkode_mem, 1, &nfi); + check_flag(&flag, "ARKodeGetNumRhsEvals", 1); flag = ARKodeGetNumLinSolvSetups(arkode_mem, &nsetups); check_flag(&flag, "ARKodeGetNumLinSolvSetups", 1); flag = ARKodeGetNumErrTestFails(arkode_mem, &netf); diff --git a/examples/arkode/C_serial/ark_analytic_mels.c b/examples/arkode/C_serial/ark_analytic_mels.c index 95dca9fbc2..eaa7236d0f 100644 --- a/examples/arkode/C_serial/ark_analytic_mels.c +++ b/examples/arkode/C_serial/ark_analytic_mels.c @@ -153,8 +153,10 @@ int main(void) check_retval(&retval, "ARKodeGetNumSteps", 1); retval = ARKodeGetNumStepAttempts(arkode_mem, &nst_a); check_retval(&retval, "ARKodeGetNumStepAttempts", 1); - retval = ARKStepGetNumRhsEvals(arkode_mem, &nfe, &nfi); - check_retval(&retval, "ARKStepGetNumRhsEvals", 1); + retval = ARKodeGetNumRhsEvals(arkode_mem, 0, &nfe); + check_retval(&retval, "ARKodeGetNumRhsEvals", 1); + retval = ARKodeGetNumRhsEvals(arkode_mem, 1, &nfi); + check_retval(&retval, "ARKodeGetNumRhsEvals", 1); retval = ARKodeGetNumLinSolvSetups(arkode_mem, &nsetups); check_retval(&retval, "ARKodeGetNumLinSolvSetups", 1); retval = ARKodeGetNumErrTestFails(arkode_mem, &netf); diff --git a/examples/arkode/C_serial/ark_brusselator.c b/examples/arkode/C_serial/ark_brusselator.c index a501f997e2..d766a773d6 100644 --- a/examples/arkode/C_serial/ark_brusselator.c +++ b/examples/arkode/C_serial/ark_brusselator.c @@ -250,8 +250,10 @@ int main(void) check_flag(&flag, "ARKodeGetNumSteps", 1); flag = ARKodeGetNumStepAttempts(arkode_mem, &nst_a); check_flag(&flag, "ARKodeGetNumStepAttempts", 1); - flag = ARKStepGetNumRhsEvals(arkode_mem, &nfe, &nfi); - check_flag(&flag, "ARKStepGetNumRhsEvals", 1); + flag = ARKodeGetNumRhsEvals(arkode_mem, 0, &nfe); + check_flag(&flag, "ARKodeGetNumRhsEvals", 1); + flag = ARKodeGetNumRhsEvals(arkode_mem, 1, &nfi); + check_flag(&flag, "ARKodeGetNumRhsEvals", 1); flag = ARKodeGetNumLinSolvSetups(arkode_mem, &nsetups); check_flag(&flag, "ARKodeGetNumLinSolvSetups", 1); flag = ARKodeGetNumErrTestFails(arkode_mem, &netf); diff --git a/examples/arkode/C_serial/ark_brusselator1D.c b/examples/arkode/C_serial/ark_brusselator1D.c index e0c803561e..28a40201c8 100644 --- a/examples/arkode/C_serial/ark_brusselator1D.c +++ b/examples/arkode/C_serial/ark_brusselator1D.c @@ -299,8 +299,10 @@ int main(void) check_flag(&flag, "ARKodeGetNumSteps", 1); flag = ARKodeGetNumStepAttempts(arkode_mem, &nst_a); check_flag(&flag, "ARKodeGetNumStepAttempts", 1); - flag = ARKStepGetNumRhsEvals(arkode_mem, &nfe, &nfi); - check_flag(&flag, "ARKStepGetNumRhsEvals", 1); + flag = ARKodeGetNumRhsEvals(arkode_mem, 0, &nfe); + check_flag(&flag, "ARKodeGetNumRhsEvals", 1); + flag = ARKodeGetNumRhsEvals(arkode_mem, 1, &nfi); + check_flag(&flag, "ARKodeGetNumRhsEvals", 1); flag = ARKodeGetNumLinSolvSetups(arkode_mem, &nsetups); check_flag(&flag, "ARKodeGetNumLinSolvSetups", 1); flag = ARKodeGetNumErrTestFails(arkode_mem, &netf); diff --git a/examples/arkode/C_serial/ark_brusselator1D_FEM_slu.c b/examples/arkode/C_serial/ark_brusselator1D_FEM_slu.c index 2978d2f77c..d3dcbc36e6 100644 --- a/examples/arkode/C_serial/ark_brusselator1D_FEM_slu.c +++ b/examples/arkode/C_serial/ark_brusselator1D_FEM_slu.c @@ -404,8 +404,10 @@ int main(int argc, char* argv[]) check_retval(&retval, "ARKodeGetNumSteps", 1); retval = ARKodeGetNumStepAttempts(arkode_mem, &nst_a); check_retval(&retval, "ARKodeGetNumStepAttempts", 1); - retval = ARKStepGetNumRhsEvals(arkode_mem, &nfe, &nfi); - check_retval(&retval, "ARKStepGetNumRhsEvals", 1); + retval = ARKodeGetNumRhsEvals(arkode_mem, 0, &nfe); + check_retval(&retval, "ARKodeGetNumRhsEvals", 1); + retval = ARKodeGetNumRhsEvals(arkode_mem, 1, &nfi); + check_retval(&retval, "ARKodeGetNumRhsEvals", 1); retval = ARKodeGetNumLinSolvSetups(arkode_mem, &nsetups); check_retval(&retval, "ARKodeGetNumLinSolvSetups", 1); retval = ARKodeGetNumErrTestFails(arkode_mem, &netf); diff --git a/examples/arkode/C_serial/ark_brusselator1D_imexmri.c b/examples/arkode/C_serial/ark_brusselator1D_imexmri.c index 1d52164719..a779faeb04 100644 --- a/examples/arkode/C_serial/ark_brusselator1D_imexmri.c +++ b/examples/arkode/C_serial/ark_brusselator1D_imexmri.c @@ -752,14 +752,18 @@ int main(int argc, char* argv[]) /* Get some slow integrator statistics */ retval = ARKodeGetNumSteps(arkode_mem, &nsts); check_retval(&retval, "ARKodeGetNumSteps", 1); - retval = MRIStepGetNumRhsEvals(arkode_mem, &nfse, &nfsi); - check_retval(&retval, "MRIStepGetNumRhsEvals", 1); + retval = ARKodeGetNumRhsEvals(arkode_mem, 0, &nfse); + check_retval(&retval, "ARKodeGetNumRhsEvals", 1); + retval = ARKodeGetNumRhsEvals(arkode_mem, 1, &nfsi); + check_retval(&retval, "ARKodeGetNumRhsEvals", 1); /* Get some fast integrator statistics */ retval = ARKodeGetNumSteps(inner_arkode_mem, &nstf); check_retval(&retval, "ARKodeGetNumSteps", 1); - retval = ARKStepGetNumRhsEvals(inner_arkode_mem, &nffe, &nffi); - check_retval(&retval, "ARKStepGetNumRhsEvals", 1); + retval = ARKodeGetNumRhsEvals(inner_arkode_mem, 0, &nffe); + check_retval(&retval, "ARKodeGetNumRhsEvals", 1); + retval = ARKodeGetNumRhsEvals(inner_arkode_mem, 1, &nffi); + check_retval(&retval, "ARKodeGetNumRhsEvals", 1); /* Print some final statistics */ printf("\nFinal Solver Statistics:\n"); diff --git a/examples/arkode/C_serial/ark_brusselator1D_klu.c b/examples/arkode/C_serial/ark_brusselator1D_klu.c index d9831a948a..19d25fc221 100644 --- a/examples/arkode/C_serial/ark_brusselator1D_klu.c +++ b/examples/arkode/C_serial/ark_brusselator1D_klu.c @@ -314,8 +314,10 @@ int main(void) check_flag(&flag, "ARKodeGetNumSteps", 1); flag = ARKodeGetNumStepAttempts(arkode_mem, &nst_a); check_flag(&flag, "ARKodeGetNumStepAttempts", 1); - flag = ARKStepGetNumRhsEvals(arkode_mem, &nfe, &nfi); - check_flag(&flag, "ARKStepGetNumRhsEvals", 1); + flag = ARKodeGetNumRhsEvals(arkode_mem, 0, &nfe); + check_flag(&flag, "ARKodeGetNumRhsEvals", 1); + flag = ARKodeGetNumRhsEvals(arkode_mem, 1, &nfi); + check_flag(&flag, "ARKodeGetNumRhsEvals", 1); flag = ARKodeGetNumLinSolvSetups(arkode_mem, &nsetups); check_flag(&flag, "ARKodeGetNumLinSolvSetups", 1); flag = ARKodeGetNumErrTestFails(arkode_mem, &netf); diff --git a/examples/arkode/C_serial/ark_brusselator_1D_mri.c b/examples/arkode/C_serial/ark_brusselator_1D_mri.c index 54398dcf71..0dc4323bc3 100644 --- a/examples/arkode/C_serial/ark_brusselator_1D_mri.c +++ b/examples/arkode/C_serial/ark_brusselator_1D_mri.c @@ -136,7 +136,7 @@ int main(int argc, char* argv[]) FILE *FID, *UFID, *VFID, *WFID; /* output file pointers */ int iout; /* output counter */ long int nsts, nstf, nstf_a, netf; /* step stats */ - long int nfse, nfsi, nffe, nffi; /* RHS stats */ + long int nfse, nffi; /* RHS stats */ long int nsetups, nje, nfeLS; /* linear solver stats */ long int nni, ncfn; /* nonlinear solver stats */ sunindextype NEQ; /* number of equations */ @@ -349,16 +349,16 @@ int main(int argc, char* argv[]) /* Get some slow integrator statistics */ retval = ARKodeGetNumSteps(arkode_mem, &nsts); check_retval(&retval, "ARKodeGetNumSteps", 1); - retval = MRIStepGetNumRhsEvals(arkode_mem, &nfse, &nfsi); - check_retval(&retval, "MRIStepGetNumRhsEvals", 1); + retval = ARKodeGetNumRhsEvals(arkode_mem, 0, &nfse); + check_retval(&retval, "ARKodeGetNumRhsEvals", 1); /* Get some fast integrator statistics */ retval = ARKodeGetNumSteps(inner_arkode_mem, &nstf); check_retval(&retval, "ARKodeGetNumSteps", 1); retval = ARKodeGetNumStepAttempts(inner_arkode_mem, &nstf_a); check_retval(&retval, "ARKodeGetNumStepAttempts", 1); - retval = ARKStepGetNumRhsEvals(inner_arkode_mem, &nffe, &nffi); - check_retval(&retval, "ARKStepGetNumRhsEvals", 1); + retval = ARKodeGetNumRhsEvals(inner_arkode_mem, 1, &nffi); + check_retval(&retval, "ARKodeGetNumRhsEvals", 1); retval = ARKodeGetNumLinSolvSetups(inner_arkode_mem, &nsetups); check_retval(&retval, "ARKodeGetNumLinSolvSetups", 1); retval = ARKodeGetNumErrTestFails(inner_arkode_mem, &netf); diff --git a/examples/arkode/C_serial/ark_brusselator_fp.c b/examples/arkode/C_serial/ark_brusselator_fp.c index 518eeccdb8..56f93c1423 100644 --- a/examples/arkode/C_serial/ark_brusselator_fp.c +++ b/examples/arkode/C_serial/ark_brusselator_fp.c @@ -249,8 +249,10 @@ int main(int argc, char* argv[]) check_flag(&flag, "ARKodeGetNumSteps", 1); flag = ARKodeGetNumStepAttempts(arkode_mem, &nst_a); check_flag(&flag, "ARKodeGetNumStepAttempts", 1); - flag = ARKStepGetNumRhsEvals(arkode_mem, &nfe, &nfi); - check_flag(&flag, "ARKStepGetNumRhsEvals", 1); + flag = ARKodeGetNumRhsEvals(arkode_mem, 0, &nfe); + check_flag(&flag, "ARKodeGetNumRhsEvals", 1); + flag = ARKodeGetNumRhsEvals(arkode_mem, 1, &nfi); + check_flag(&flag, "ARKodeGetNumRhsEvals", 1); flag = ARKodeGetNumErrTestFails(arkode_mem, &netf); check_flag(&flag, "ARKodeGetNumErrTestFails", 1); flag = ARKodeGetNumNonlinSolvIters(arkode_mem, &nni); diff --git a/examples/arkode/C_serial/ark_brusselator_mri.c b/examples/arkode/C_serial/ark_brusselator_mri.c index 1ea84c3ee5..67d2c57b80 100644 --- a/examples/arkode/C_serial/ark_brusselator_mri.c +++ b/examples/arkode/C_serial/ark_brusselator_mri.c @@ -81,7 +81,7 @@ int main(void) FILE* UFID; sunrealtype t, tout; int iout; - long int nsts, nstf, nfse, nfsi, nff, tmp; + long int nsts, nstf, nfse, nff; /* * Initialization @@ -219,14 +219,14 @@ int main(void) /* Get some slow integrator statistics */ retval = ARKodeGetNumSteps(arkode_mem, &nsts); check_retval(&retval, "ARKodeGetNumSteps", 1); - retval = MRIStepGetNumRhsEvals(arkode_mem, &nfse, &nfsi); - check_retval(&retval, "MRIStepGetNumRhsEvals", 1); + retval = ARKodeGetNumRhsEvals(arkode_mem, 0, &nfse); + check_retval(&retval, "ARKodeGetNumRhsEvals", 1); /* Get some fast integrator statistics */ retval = ARKodeGetNumSteps(inner_arkode_mem, &nstf); check_retval(&retval, "ARKodeGetNumSteps", 1); - retval = ARKStepGetNumRhsEvals(inner_arkode_mem, &nff, &tmp); - check_retval(&retval, "ARKStepGetNumRhsEvals", 1); + retval = ARKodeGetNumRhsEvals(inner_arkode_mem, 0, &nff); + check_retval(&retval, "ARKodeGetNumRhsEvals", 1); /* Print some final statistics */ printf("\nFinal Solver Statistics:\n"); diff --git a/examples/arkode/C_serial/ark_conserved_exp_entropy_ark.c b/examples/arkode/C_serial/ark_conserved_exp_entropy_ark.c index c9570e8bec..e1962d01fe 100644 --- a/examples/arkode/C_serial/ark_conserved_exp_entropy_ark.c +++ b/examples/arkode/C_serial/ark_conserved_exp_entropy_ark.c @@ -340,8 +340,11 @@ int main(int argc, char* argv[]) flag = ARKodeGetNumErrTestFails(arkode_mem, &netf); check_flag(flag, "ARKodeGetNumErrTestFails"); - flag = ARKStepGetNumRhsEvals(arkode_mem, &nfe, &nfi); - check_flag(flag, "ARKStepGetNumRhsEvals"); + flag = ARKodeGetNumRhsEvals(arkode_mem, 0, &nfe); + check_flag(flag, "ARKodeGetNumRhsEvals"); + + flag = ARKodeGetNumRhsEvals(arkode_mem, 1, &nfi); + check_flag(flag, "ARKodeGetNumRhsEvals"); printf("\nFinal Solver Statistics:\n"); printf(" Internal solver steps = %li (attempted = %li)\n", nst, nst_a); diff --git a/examples/arkode/C_serial/ark_conserved_exp_entropy_erk.c b/examples/arkode/C_serial/ark_conserved_exp_entropy_erk.c index 6b73b0d999..47bd3fa6e6 100644 --- a/examples/arkode/C_serial/ark_conserved_exp_entropy_erk.c +++ b/examples/arkode/C_serial/ark_conserved_exp_entropy_erk.c @@ -300,8 +300,8 @@ int main(int argc, char* argv[]) flag = ARKodeGetNumErrTestFails(arkode_mem, &netf); check_flag(flag, "ARKodeGetNumErrTestFails"); - flag = ERKStepGetNumRhsEvals(arkode_mem, &nfe); - check_flag(flag, "ERKStepGetNumRhsEvals"); + flag = ARKodeGetNumRhsEvals(arkode_mem, 0, &nfe); + check_flag(flag, "ARKodeGetNumRhsEvals"); printf("\nFinal Solver Statistics:\n"); printf(" Internal solver steps = %li (attempted = %li)\n", nst, nst_a); diff --git a/examples/arkode/C_serial/ark_dissipated_exp_entropy.c b/examples/arkode/C_serial/ark_dissipated_exp_entropy.c index 5b071b61ae..1b7dc0ad38 100644 --- a/examples/arkode/C_serial/ark_dissipated_exp_entropy.c +++ b/examples/arkode/C_serial/ark_dissipated_exp_entropy.c @@ -318,8 +318,11 @@ int main(int argc, char* argv[]) flag = ARKodeGetNumErrTestFails(arkode_mem, &netf); check_flag(flag, "ARKodeGetNumErrTestFails"); - flag = ARKStepGetNumRhsEvals(arkode_mem, &nfe, &nfi); - check_flag(flag, "ARKStepGetNumRhsEvals"); + flag = ARKodeGetNumRhsEvals(arkode_mem, 0, &nfe); + check_flag(flag, "ARKodeGetNumRhsEvals"); + + flag = ARKodeGetNumRhsEvals(arkode_mem, 1, &nfi); + check_flag(flag, "ARKodeGetNumRhsEvals"); printf("\nFinal Solver Statistics:\n"); printf(" Internal solver steps = %li (attempted = %li)\n", nst, nst_a); diff --git a/examples/arkode/C_serial/ark_heat1D.c b/examples/arkode/C_serial/ark_heat1D.c index 6bed4a20c8..e796d0119f 100644 --- a/examples/arkode/C_serial/ark_heat1D.c +++ b/examples/arkode/C_serial/ark_heat1D.c @@ -200,8 +200,10 @@ int main(void) check_flag(&flag, "ARKodeGetNumSteps", 1); flag = ARKodeGetNumStepAttempts(arkode_mem, &nst_a); check_flag(&flag, "ARKodeGetNumStepAttempts", 1); - flag = ARKStepGetNumRhsEvals(arkode_mem, &nfe, &nfi); - check_flag(&flag, "ARKStepGetNumRhsEvals", 1); + flag = ARKodeGetNumRhsEvals(arkode_mem, 0, &nfe); + check_flag(&flag, "ARKodeGetNumRhsEvals", 1); + flag = ARKodeGetNumRhsEvals(arkode_mem, 1, &nfi); + check_flag(&flag, "ARKodeGetNumRhsEvals", 1); flag = ARKodeGetNumLinSolvSetups(arkode_mem, &nsetups); check_flag(&flag, "ARKodeGetNumLinSolvSetups", 1); flag = ARKodeGetNumErrTestFails(arkode_mem, &netf); diff --git a/examples/arkode/C_serial/ark_kpr_mri.c b/examples/arkode/C_serial/ark_kpr_mri.c index 2ae783435e..f119998632 100644 --- a/examples/arkode/C_serial/ark_kpr_mri.c +++ b/examples/arkode/C_serial/ark_kpr_mri.c @@ -158,7 +158,7 @@ int main(int argc, char* argv[]) sunrealtype hf, gamma, beta, t, tout, rpar[3]; sunrealtype uerr, verr, uerrtot, verrtot, errtot; int iout; - long int nsts, nstf, nfse, nfsi, nff, nnif, nncf, njef, nnis, nncs, njes, tmp; + long int nsts, nstf, nfse, nfsi, nff, nnif, nncf, njef, nnis, nncs, njes; /* * Initialization @@ -626,14 +626,16 @@ int main(int argc, char* argv[]) /* Get some slow integrator statistics */ retval = ARKodeGetNumSteps(arkode_mem, &nsts); check_retval(&retval, "ARKodeGetNumSteps", 1); - retval = MRIStepGetNumRhsEvals(arkode_mem, &nfse, &nfsi); - check_retval(&retval, "MRIStepGetNumRhsEvals", 1); + retval = ARKodeGetNumRhsEvals(arkode_mem, 0, &nfse); + check_retval(&retval, "ARKodeGetNumRhsEvals", 1); + retval = ARKodeGetNumRhsEvals(arkode_mem, 1, &nfsi); + check_retval(&retval, "ARKodeGetNumRhsEvals", 1); /* Get some fast integrator statistics */ retval = ARKodeGetNumSteps(inner_arkode_mem, &nstf); check_retval(&retval, "ARKodeGetNumSteps", 1); - retval = ARKStepGetNumRhsEvals(inner_arkode_mem, &nff, &tmp); - check_retval(&retval, "ARKStepGetNumRhsEvals", 1); + retval = ARKodeGetNumRhsEvals(inner_arkode_mem, 0, &nff); + check_retval(&retval, "ARKodeGetNumRhsEvals", 1); /* Print some final statistics */ printf("\nFinal Solver Statistics:\n"); diff --git a/examples/arkode/C_serial/ark_onewaycouple_mri.c b/examples/arkode/C_serial/ark_onewaycouple_mri.c index ad6776e7bb..78e1ede79c 100644 --- a/examples/arkode/C_serial/ark_onewaycouple_mri.c +++ b/examples/arkode/C_serial/ark_onewaycouple_mri.c @@ -95,7 +95,7 @@ int main(void) sunrealtype t, tout; sunrealtype error = SUN_RCONST(0.0); int iout; - long int nsts, nstf, nfse, nfsi, nff, tmp; + long int nsts, nstf, nfse, nff; /* * Initialization @@ -228,14 +228,14 @@ int main(void) /* Get some slow integrator statistics */ retval = ARKodeGetNumSteps(arkode_mem, &nsts); check_retval(&retval, "ARKodeGetNumSteps", 1); - retval = MRIStepGetNumRhsEvals(arkode_mem, &nfse, &nfsi); - check_retval(&retval, "MRIStepGetNumRhsEvals", 1); + retval = ARKodeGetNumRhsEvals(arkode_mem, 0, &nfse); + check_retval(&retval, "ARKodeGetNumRhsEvals", 1); /* Get some fast integrator statistics */ retval = ARKodeGetNumSteps(inner_arkode_mem, &nstf); check_retval(&retval, "ARKodeGetNumSteps", 1); - retval = ARKStepGetNumRhsEvals(inner_arkode_mem, &nff, &tmp); - check_retval(&retval, "ARKStepGetNumRhsEvals", 1); + retval = ARKodeGetNumRhsEvals(inner_arkode_mem, 0, &nff); + check_retval(&retval, "ARKodeGetNumRhsEvals", 1); /* Print some final statistics */ printf("\nFinal Solver Statistics:\n"); diff --git a/examples/arkode/C_serial/ark_robertson_constraints.c b/examples/arkode/C_serial/ark_robertson_constraints.c index 2e5062d0e5..532149b212 100644 --- a/examples/arkode/C_serial/ark_robertson_constraints.c +++ b/examples/arkode/C_serial/ark_robertson_constraints.c @@ -204,8 +204,10 @@ int main(void) check_flag(&flag, "ARKodeGetNumSteps", 1); flag = ARKodeGetNumStepAttempts(arkode_mem, &nst_a); check_flag(&flag, "ARKodeGetNumStepAttempts", 1); - flag = ARKStepGetNumRhsEvals(arkode_mem, &nfe, &nfi); - check_flag(&flag, "ARKStepGetNumRhsEvals", 1); + flag = ARKodeGetNumRhsEvals(arkode_mem, 0, &nfe); + check_flag(&flag, "ARKodeGetNumRhsEvals", 1); + flag = ARKodeGetNumRhsEvals(arkode_mem, 1, &nfi); + check_flag(&flag, "ARKodeGetNumRhsEvals", 1); flag = ARKodeGetNumLinSolvSetups(arkode_mem, &nsetups); check_flag(&flag, "ARKodeGetNumLinSolvSetups", 1); flag = ARKodeGetNumErrTestFails(arkode_mem, &netf); diff --git a/examples/arkode/C_serial/ark_robertson_root.c b/examples/arkode/C_serial/ark_robertson_root.c index 846a1bdb04..ae8e476394 100644 --- a/examples/arkode/C_serial/ark_robertson_root.c +++ b/examples/arkode/C_serial/ark_robertson_root.c @@ -214,8 +214,10 @@ int main(void) check_flag(&flag, "ARKodeGetNumSteps", 1); flag = ARKodeGetNumStepAttempts(arkode_mem, &nst_a); check_flag(&flag, "ARKodeGetNumStepAttempts", 1); - flag = ARKStepGetNumRhsEvals(arkode_mem, &nfe, &nfi); - check_flag(&flag, "ARKStepGetNumRhsEvals", 1); + flag = ARKodeGetNumRhsEvals(arkode_mem, 0, &nfe); + check_flag(&flag, "ARKodeGetNumRhsEvals", 1); + flag = ARKodeGetNumRhsEvals(arkode_mem, 1, &nfi); + check_flag(&flag, "ARKodeGetNumRhsEvals", 1); flag = ARKodeGetNumLinSolvSetups(arkode_mem, &nsetups); check_flag(&flag, "ARKodeGetNumLinSolvSetups", 1); flag = ARKodeGetNumErrTestFails(arkode_mem, &netf); diff --git a/examples/arkode/C_serial/ark_twowaycouple_mri.c b/examples/arkode/C_serial/ark_twowaycouple_mri.c index 4a099d99a4..67b5415850 100644 --- a/examples/arkode/C_serial/ark_twowaycouple_mri.c +++ b/examples/arkode/C_serial/ark_twowaycouple_mri.c @@ -78,7 +78,7 @@ int main(void) FILE* UFID; sunrealtype t, tout; int iout; - long int nsts, nstf, nfse, nfsi, nff, tmp; + long int nsts, nstf, nfse, nff; /* Create the SUNDIALS context object for this simulation */ SUNContext ctx; @@ -195,14 +195,14 @@ int main(void) /* Get some slow integrator statistics */ retval = ARKodeGetNumSteps(arkode_mem, &nsts); check_retval(&retval, "ARKodeGetNumSteps", 1); - retval = MRIStepGetNumRhsEvals(arkode_mem, &nfse, &nfsi); - check_retval(&retval, "MRIStepGetNumRhsEvals", 1); + retval = ARKodeGetNumRhsEvals(arkode_mem, 0, &nfse); + check_retval(&retval, "ARKodeGetNumRhsEvals", 1); /* Get some fast integrator statistics */ retval = ARKodeGetNumSteps(inner_arkode_mem, &nstf); check_retval(&retval, "ARKodeGetNumSteps", 1); - retval = ARKStepGetNumRhsEvals(inner_arkode_mem, &nff, &tmp); - check_retval(&retval, "ARKStepGetNumRhsEvals", 1); + retval = ARKodeGetNumRhsEvals(inner_arkode_mem, 0, &nff); + check_retval(&retval, "ARKodeGetNumRhsEvals", 1); /* Print some final statistics */ printf("\nFinal Solver Statistics:\n"); diff --git a/examples/arkode/F2003_custom/ark_analytic_complex_f2003.f90 b/examples/arkode/F2003_custom/ark_analytic_complex_f2003.f90 index e371c7af08..23a5919068 100644 --- a/examples/arkode/F2003_custom/ark_analytic_complex_f2003.f90 +++ b/examples/arkode/F2003_custom/ark_analytic_complex_f2003.f90 @@ -235,14 +235,13 @@ subroutine ARKStepStats(arkode_mem) integer(c_long) :: nsteps(1) ! num steps integer(c_long) :: nst_a(1) ! num steps attempted integer(c_long) :: nfe(1) ! num explicit function evals - integer(c_long) :: nfi(1) ! num implicit function evals integer(c_long) :: netfails(1) ! num error test fails !======= Internals ============ ierr = FARKodeGetNumSteps(arkode_mem, nsteps) ierr = FARKodeGetNumStepAttempts(arkode_mem, nst_a) - ierr = FARKStepGetNumRhsEvals(arkode_mem, nfe, nfi) + ierr = FARKodeGetNumRhsEvals(arkode_mem, 0, nfe) ierr = FARKodeGetNumErrTestFails(arkode_mem, netfails) print *, ' ' diff --git a/examples/arkode/F2003_custom/ark_brusselator1D_f2003.f90 b/examples/arkode/F2003_custom/ark_brusselator1D_f2003.f90 index 71e577acd5..e837b4e684 100644 --- a/examples/arkode/F2003_custom/ark_brusselator1D_f2003.f90 +++ b/examples/arkode/F2003_custom/ark_brusselator1D_f2003.f90 @@ -433,7 +433,8 @@ subroutine ARKStepStats(arkode_mem) ierr = FARKodeGetNumSteps(arkode_mem, nsteps) ierr = FARKodeGetNumStepAttempts(arkode_mem, nst_a) - ierr = FARKStepGetNumRhsEvals(arkode_mem, nfe, nfi) + ierr = FARKodeGetNumRhsEvals(arkode_mem, 0, nfe) + ierr = FARKodeGetNumRhsEvals(arkode_mem, 1, nfi) ierr = FARKodeGetNumLinRhsEvals(arkode_mem, nfeLS) ierr = FARKodeGetNumLinSolvSetups(arkode_mem, nlinsetups) ierr = FARKodeGetNumJacEvals(arkode_mem, nje) diff --git a/examples/arkode/F2003_parallel/ark_brusselator1D_task_local_nls_f2003.f90 b/examples/arkode/F2003_parallel/ark_brusselator1D_task_local_nls_f2003.f90 index 7d17efaaf3..9b30cbc70a 100644 --- a/examples/arkode/F2003_parallel/ark_brusselator1D_task_local_nls_f2003.f90 +++ b/examples/arkode/F2003_parallel/ark_brusselator1D_task_local_nls_f2003.f90 @@ -1362,9 +1362,15 @@ subroutine EvolveProblemIMEX(sunvec_y) call MPI_Abort(comm, 1, ierr) end if - retval = FARKStepGetNumRhsEvals(arkode_mem, nfe, nfi) + retval = FARKodeGetNumRhsEvals(arkode_mem, 0, nfe) if (retval /= 0) then - print *, "Error: FARKStepGetNumRhsEvals returned ", retval + print *, 'Error in FARKodeGetNumRhsEvals, retval = ', retval, '; halting' + call MPI_Abort(comm, 1, ierr) + end if + + retval = FARKodeGetNumRhsEvals(arkode_mem, 1, nfi) + if (retval /= 0) then + print *, 'Error in FARKodeGetNumRhsEvals, retval = ', retval, '; halting' call MPI_Abort(comm, 1, ierr) end if @@ -1586,9 +1592,9 @@ subroutine EvolveProblemExplicit(sunvec_y) call MPI_Abort(comm, 1, ierr) end if - retval = FERKStepGetNumRhsEvals(arkode_mem, nfe) + retval = FARKodeGetNumRhsEvals(arkode_mem, 0, nfe) if (retval /= 0) then - print *, "Error: FERKStepGetNumRhsEvals returned ", retval + print *, "Error: FARKodeGetNumRhsEvals returned ", retval call MPI_Abort(comm, 1, ierr) end if diff --git a/examples/arkode/F2003_parallel/ark_diag_kry_bbd_f2003.f90 b/examples/arkode/F2003_parallel/ark_diag_kry_bbd_f2003.f90 index 8c67715974..d963fea725 100644 --- a/examples/arkode/F2003_parallel/ark_diag_kry_bbd_f2003.f90 +++ b/examples/arkode/F2003_parallel/ark_diag_kry_bbd_f2003.f90 @@ -360,9 +360,15 @@ program driver call MPI_Abort(comm, 1, ierr) end if - retval = FARKStepGetNumRhsEvals(arkode_mem, nfe, nfi) + retval = FARKodeGetNumRhsEvals(arkode_mem, 0, nfe) if (retval /= 0) then - print *, "Error: FARKStepGetNumRhsEvals returned ", retval + print *, 'Error in FARKodeGetNumRhsEvals, retval = ', retval, '; halting' + call MPI_Abort(comm, 1, ierr) + end if + + retval = FARKodeGetNumRhsEvals(arkode_mem, 1, nfi) + if (retval /= 0) then + print *, 'Error in FARKodeGetNumRhsEvals, retval = ', retval, '; halting' call MPI_Abort(comm, 1, ierr) end if @@ -406,9 +412,15 @@ program driver call MPI_Abort(comm, 1, ierr) end if - retval = FARKStepGetNumRhsEvals(arkode_mem, nfe, nfi) + retval = FARKodeGetNumRhsEvals(arkode_mem, 0, nfe) + if (retval /= 0) then + print *, 'Error in FARKodeGetNumRhsEvals, retval = ', retval, '; halting' + call MPI_Abort(comm, 1, ierr) + end if + + retval = FARKodeGetNumRhsEvals(arkode_mem, 1, nfi) if (retval /= 0) then - print *, "Error: FARKStepGetNumRhsEvals returned ", retval + print *, 'Error in FARKodeGetNumRhsEvals, retval = ', retval, '; halting' call MPI_Abort(comm, 1, ierr) end if diff --git a/examples/arkode/F2003_parallel/ark_diag_non_f2003.f90 b/examples/arkode/F2003_parallel/ark_diag_non_f2003.f90 index d3bfc3a55f..3282e22832 100644 --- a/examples/arkode/F2003_parallel/ark_diag_non_f2003.f90 +++ b/examples/arkode/F2003_parallel/ark_diag_non_f2003.f90 @@ -235,9 +235,9 @@ program driver call MPI_Abort(comm, 1, ierr) end if - retval = FERKStepGetNumRhsEvals(arkode_mem, nfe) + retval = FARKodeGetNumRhsEvals(arkode_mem, 0, nfe) if (retval /= 0) then - print *, "Error: FERKStepGetNumRhsEvals returned ", retval + print *, "Error: FARKodeGetNumRhsEvals returned ", retval call MPI_Abort(comm, 1, ierr) end if @@ -281,9 +281,9 @@ program driver call MPI_Abort(comm, 1, ierr) end if - retval = FERKStepGetNumRhsEvals(arkode_mem, nfe) + retval = FARKodeGetNumRhsEvals(arkode_mem, 0, nfe) if (retval /= 0) then - print *, "Error: FERKStepGetNumRhsEvals returned ", retval + print *, "Error: FARKodeGetNumRhsEvals returned ", retval call MPI_Abort(comm, 1, ierr) end if diff --git a/examples/arkode/F2003_parallel/ark_heat2D_f2003.f90 b/examples/arkode/F2003_parallel/ark_heat2D_f2003.f90 index e024dc9dff..60fd288894 100644 --- a/examples/arkode/F2003_parallel/ark_heat2D_f2003.f90 +++ b/examples/arkode/F2003_parallel/ark_heat2D_f2003.f90 @@ -884,9 +884,15 @@ program driver call MPI_Abort(comm, 1, ierr) end if - retval = FARKStepGetNumRhsEvals(arkode_mem, nfe, nfi) + retval = FARKodeGetNumRhsEvals(arkode_mem, 0, nfe) if (retval /= 0) then - print *, "Error: FARKStepGetNumRhsEvals returned ", retval + print *, "Error: FARKodeGetNumRhsEvals returned ", retval + call MPI_Abort(comm, 1, ierr) + end if + + retval = FARKodeGetNumRhsEvals(arkode_mem, 1, nfi) + if (retval /= 0) then + print *, "Error: FARKodeGetNumRhsEvals returned ", retval call MPI_Abort(comm, 1, ierr) end if diff --git a/examples/arkode/F2003_serial/ark_analytic_f2003.f90 b/examples/arkode/F2003_serial/ark_analytic_f2003.f90 index 62551f623f..0fa90fe945 100644 --- a/examples/arkode/F2003_serial/ark_analytic_f2003.f90 +++ b/examples/arkode/F2003_serial/ark_analytic_f2003.f90 @@ -267,8 +267,6 @@ subroutine ARKStepStats(arkode_mem) integer(c_long) :: nsteps(1) ! num steps integer(c_long) :: nst_a(1) ! num steps attempted - integer(c_long) :: nfe(1) ! num explicit function evals - integer(c_long) :: nfi(1) ! num implicit function evals integer(c_long) :: nfevals(1) ! num function evals integer(c_long) :: nlinsetups(1) ! num linear solver setups integer(c_long) :: netfails(1) ! num error test fails @@ -296,12 +294,11 @@ subroutine ARKStepStats(arkode_mem) stop 1 end if - ierr = FARKStepGetNumRhsEvals(arkode_mem, nfe, nfi) + ierr = FARKodeGetNumRhsEvals(arkode_mem, -1, nfevals) if (ierr /= 0) then - print *, 'Error in FARKStepGetNumRhsEvals, retval = ', ierr, '; halting' + print *, 'Error in FARKodeGetNumRhsEvals, retval = ', ierr, '; halting' stop 1 end if - nfevals = nfe + nfi ierr = FARKodeGetActualInitStep(arkode_mem, hinused) if (ierr /= 0) then diff --git a/examples/arkode/F2003_serial/ark_bruss1D_FEM_klu_f2003.f90 b/examples/arkode/F2003_serial/ark_bruss1D_FEM_klu_f2003.f90 index 0d63e260cf..4072dc30f8 100644 --- a/examples/arkode/F2003_serial/ark_bruss1D_FEM_klu_f2003.f90 +++ b/examples/arkode/F2003_serial/ark_bruss1D_FEM_klu_f2003.f90 @@ -1342,9 +1342,15 @@ subroutine ARKStepStats(arkode_mem) stop 1 end if - ierr = FARKStepGetNumRhsEvals(arkode_mem, nfe, nfi) + ierr = FARKodeGetNumRhsEvals(arkode_mem, 0, nfe) if (ierr /= 0) then - print *, 'Error in FARKStepGetNumRhsEvals, retval = ', ierr, '; halting' + print *, 'Error in FARKodeGetNumRhsEvals, retval = ', ierr, '; halting' + stop 1 + end if + + ierr = FARKodeGetNumRhsEvals(arkode_mem, 1, nfi) + if (ierr /= 0) then + print *, 'Error in FARKodeGetNumRhsEvals, retval = ', ierr, '; halting' stop 1 end if diff --git a/examples/arkode/F2003_serial/ark_bruss_f2003.f90 b/examples/arkode/F2003_serial/ark_bruss_f2003.f90 index 2b6579cf20..0f9905740e 100644 --- a/examples/arkode/F2003_serial/ark_bruss_f2003.f90 +++ b/examples/arkode/F2003_serial/ark_bruss_f2003.f90 @@ -450,9 +450,15 @@ subroutine ARKStepStats(arkode_mem) stop 1 end if - ierr = FARKStepGetNumRhsEvals(arkode_mem, nfe, nfi) + ierr = FARKodeGetNumRhsEvals(arkode_mem, 0, nfe) if (ierr /= 0) then - print *, 'Error in FARKStepGetNumRhsEvals, retval = ', ierr, '; halting' + print *, 'Error in FARKodeGetNumRhsEvals, retval = ', ierr, '; halting' + stop 1 + end if + + ierr = FARKodeGetNumRhsEvals(arkode_mem, 1, nfi) + if (ierr /= 0) then + print *, 'Error in FARKodeGetNumRhsEvals, retval = ', ierr, '; halting' stop 1 end if diff --git a/examples/arkode/F2003_serial/ark_diurnal_kry_bp_f2003.f90 b/examples/arkode/F2003_serial/ark_diurnal_kry_bp_f2003.f90 index ae64d613b6..8c6b9aa594 100644 --- a/examples/arkode/F2003_serial/ark_diurnal_kry_bp_f2003.f90 +++ b/examples/arkode/F2003_serial/ark_diurnal_kry_bp_f2003.f90 @@ -438,9 +438,15 @@ subroutine ARKStepStats(arkode_mem) stop 1 end if - ierr = FARKStepGetNumRhsEvals(arkode_mem, nfe, nfi) + ierr = FARKodeGetNumRhsEvals(arkode_mem, 0, nfe) if (ierr /= 0) then - print *, 'Error in FARKStepGetNumRhsEvals, ierr = ', ierr, '; halting' + print *, 'Error in FARKodeGetNumRhsEvals, retval = ', ierr, '; halting' + stop 1 + end if + + ierr = FARKodeGetNumRhsEvals(arkode_mem, 1, nfi) + if (ierr /= 0) then + print *, 'Error in FARKodeGetNumRhsEvals, retval = ', ierr, '; halting' stop 1 end if diff --git a/examples/arkode/F2003_serial/ark_kpr_mri_f2003.f90 b/examples/arkode/F2003_serial/ark_kpr_mri_f2003.f90 index 330e54f6b7..7556117b4d 100644 --- a/examples/arkode/F2003_serial/ark_kpr_mri_f2003.f90 +++ b/examples/arkode/F2003_serial/ark_kpr_mri_f2003.f90 @@ -602,7 +602,7 @@ program main real(c_double), allocatable :: As(:, :), bs(:), cs(:), ds(:) ! Arrays for slow Butcher table, NOTE: must be in row-major order integer(c_int) :: iout, argc, argi integer(c_long) :: nsts(1), nstf(1), nfse(1), nfsi(1), nff(1) - integer(c_long) :: nnif(1), nncf(1), njef(1), nnis(1), nncs(1), njes(1), tmp(1) + integer(c_long) :: nnif(1), nncf(1), njef(1), nnis(1), nncs(1), njes(1) character(len=32), dimension(:), allocatable :: argv ! @@ -1057,11 +1057,12 @@ program main ! Get some slow integrator statistics retval = FARKodeGetNumSteps(arkode_mem, nsts) - retval = FMRIStepGetNumRhsEvals(arkode_mem, nfse, nfsi) + retval = FARKodeGetNumRhsEvals(arkode_mem, 0, nfse) + retval = FARKodeGetNumRhsEvals(arkode_mem, 1, nfsi) ! Get some fast integrator statistics retval = FARKodeGetNumSteps(inner_arkode_mem, nstf) - retval = FARKStepGetNumRhsEvals(inner_arkode_mem, nff, tmp) + retval = FARKodeGetNumRhsEvals(inner_arkode_mem, 0, nff) ! Print some final statistics print *, "Final Solver Statistics:" diff --git a/examples/arkode/F2003_serial/ark_roberts_dnsL_f2003.f90 b/examples/arkode/F2003_serial/ark_roberts_dnsL_f2003.f90 index 2c5016d2d2..6739eb4f2b 100644 --- a/examples/arkode/F2003_serial/ark_roberts_dnsL_f2003.f90 +++ b/examples/arkode/F2003_serial/ark_roberts_dnsL_f2003.f90 @@ -568,9 +568,15 @@ subroutine PrintFinalStats(arkode_mem) stop 1 end if - retval = FARKStepGetNumRhsEvals(arkode_mem, nfe, nfi) + retval = FARKodeGetNumRhsEvals(arkode_mem, 0, nfe) if (retval /= 0) then - print *, 'Error in FARKStepGetNumRhsEvals, retval = ', retval, '; halting' + print *, 'Error in FARKodeGetNumRhsEvals, retval = ', retval, '; halting' + stop 1 + end if + + retval = FARKodeGetNumRhsEvals(arkode_mem, 1, nfi) + if (retval /= 0) then + print *, 'Error in FARKodeGetNumRhsEvals, retval = ', retval, '; halting' stop 1 end if diff --git a/examples/arkode/F2003_serial/ark_roberts_dns_f2003.f90 b/examples/arkode/F2003_serial/ark_roberts_dns_f2003.f90 index 79c3395ffa..d26cf5f56f 100644 --- a/examples/arkode/F2003_serial/ark_roberts_dns_f2003.f90 +++ b/examples/arkode/F2003_serial/ark_roberts_dns_f2003.f90 @@ -570,9 +570,15 @@ subroutine PrintFinalStats(arkode_mem) stop 1 end if - retval = FARKStepGetNumRhsEvals(arkode_mem, nfe, nfi) + retval = FARKodeGetNumRhsEvals(arkode_mem, 0, nfe) if (retval /= 0) then - print *, 'Error in FARKStepGetNumRhsEvals, retval = ', retval, '; halting' + print *, 'Error in FARKodeGetNumRhsEvals, retval = ', retval, '; halting' + stop 1 + end if + + retval = FARKodeGetNumRhsEvals(arkode_mem, 1, nfi) + if (retval /= 0) then + print *, 'Error in FARKodeGetNumRhsEvals, retval = ', retval, '; halting' stop 1 end if diff --git a/examples/nvector/test_nvector.c b/examples/nvector/test_nvector.c index 4cd581001a..a7d5741522 100644 --- a/examples/nvector/test_nvector.c +++ b/examples/nvector/test_nvector.c @@ -48,7 +48,7 @@ /* all tests need a SUNContext */ SUNContext sunctx = NULL; -#if defined(SUNDIALS_HAVE_POSIX_TIMERS) && defined(_POSIX_TIMERS) +#if defined(SUNDIALS_HAVE_POSIX_TIMERS) static time_t base_time_tv_sec = 0; /* Base time; makes time values returned by get_time easier to read when printed since they will be zero @@ -5993,7 +5993,7 @@ int Test_N_VBufUnpack(N_Vector x, sunindextype local_length, int myid) void SetTiming(int onoff, int myid) { -#if defined(SUNDIALS_HAVE_POSIX_TIMERS) && defined(_POSIX_TIMERS) +#if defined(SUNDIALS_HAVE_POSIX_TIMERS) struct timespec spec; clock_gettime(CLOCK_MONOTONIC, &spec); base_time_tv_sec = spec.tv_sec; @@ -6016,7 +6016,7 @@ void SetTiming(int onoff, int myid) static double get_time(void) { double time; -#if defined(SUNDIALS_HAVE_POSIX_TIMERS) && defined(_POSIX_TIMERS) +#if defined(SUNDIALS_HAVE_POSIX_TIMERS) struct timespec spec; clock_gettime(CLOCK_MONOTONIC, &spec); time = (double)(spec.tv_sec - base_time_tv_sec) + diff --git a/examples/sunlinsol/test_sunlinsol.c b/examples/sunlinsol/test_sunlinsol.c index 2a6900e666..cec2cc9648 100644 --- a/examples/sunlinsol/test_sunlinsol.c +++ b/examples/sunlinsol/test_sunlinsol.c @@ -27,7 +27,7 @@ #include #include -#if defined(SUNDIALS_HAVE_POSIX_TIMERS) && defined(_POSIX_TIMERS) +#if defined(SUNDIALS_HAVE_POSIX_TIMERS) #include #include #endif @@ -519,7 +519,7 @@ int Test_SUNLinSolSolve(SUNLinearSolver S, SUNMatrix A, N_Vector x, N_Vector b, * Private functions * ====================================================================*/ -#if defined(SUNDIALS_HAVE_POSIX_TIMERS) && defined(_POSIX_TIMERS) +#if defined(SUNDIALS_HAVE_POSIX_TIMERS) time_t base_time_tv_sec = 0; /* Base time; makes time values returned by get_time easier to read when printed since they will be zero @@ -531,7 +531,7 @@ void SetTiming(int onoff) { print_time = onoff; -#if defined(SUNDIALS_HAVE_POSIX_TIMERS) && defined(_POSIX_TIMERS) +#if defined(SUNDIALS_HAVE_POSIX_TIMERS) struct timespec spec; clock_gettime(CLOCK_MONOTONIC, &spec); base_time_tv_sec = spec.tv_sec; @@ -543,7 +543,7 @@ void SetTiming(int onoff) * --------------------------------------------------------------------*/ static double get_time(void) { -#if defined(SUNDIALS_HAVE_POSIX_TIMERS) && defined(_POSIX_TIMERS) +#if defined(SUNDIALS_HAVE_POSIX_TIMERS) struct timespec spec; clock_gettime(CLOCK_MONOTONIC, &spec); double time = (double)(spec.tv_sec - base_time_tv_sec) + diff --git a/examples/sunmatrix/test_sunmatrix.c b/examples/sunmatrix/test_sunmatrix.c index 9849e308b2..47b2cf9296 100644 --- a/examples/sunmatrix/test_sunmatrix.c +++ b/examples/sunmatrix/test_sunmatrix.c @@ -27,7 +27,7 @@ #include #include -#if defined(SUNDIALS_HAVE_POSIX_TIMERS) && defined(_POSIX_TIMERS) +#if defined(SUNDIALS_HAVE_POSIX_TIMERS) #include #include #endif @@ -611,7 +611,7 @@ int Test_SUNMatSpace(SUNMatrix A, int myid) * Private functions * ====================================================================*/ -#if defined(SUNDIALS_HAVE_POSIX_TIMERS) && defined(_POSIX_TIMERS) +#if defined(SUNDIALS_HAVE_POSIX_TIMERS) time_t base_time_tv_sec = 0; /* Base time; makes time values returned by get_time easier to read when printed since they will be zero @@ -623,7 +623,7 @@ void SetTiming(int onoff) { print_time = onoff; -#if defined(SUNDIALS_HAVE_POSIX_TIMERS) && defined(_POSIX_TIMERS) +#if defined(SUNDIALS_HAVE_POSIX_TIMERS) struct timespec spec; clock_gettime(CLOCK_MONOTONIC, &spec); base_time_tv_sec = spec.tv_sec; @@ -637,7 +637,7 @@ void SetPrintAllRanks(int onoff) { print_all_ranks = onoff; } * --------------------------------------------------------------------*/ static double get_time(void) { -#if defined(SUNDIALS_HAVE_POSIX_TIMERS) && defined(_POSIX_TIMERS) +#if defined(SUNDIALS_HAVE_POSIX_TIMERS) struct timespec spec; clock_gettime(CLOCK_MONOTONIC, &spec); double time = (double)(spec.tv_sec - base_time_tv_sec) + diff --git a/include/arkode/arkode.h b/include/arkode/arkode.h index f4e0667d72..f33ec560dc 100644 --- a/include/arkode/arkode.h +++ b/include/arkode/arkode.h @@ -294,6 +294,8 @@ SUNDIALS_EXPORT int ARKodeComputeState(void* arkode_mem, N_Vector zcor, N_Vector z); /* Optional output functions (general) */ +SUNDIALS_EXPORT int ARKodeGetNumRhsEvals(void* arkode_mem, int partition_index, + long int* num_rhs_evals); SUNDIALS_EXPORT int ARKodeGetNumStepAttempts(void* arkode_mem, long int* step_attempts); SUNDIALS_EXPORT int ARKodeGetWorkSpace(void* arkode_mem, long int* lenrw, diff --git a/include/arkode/arkode_arkstep.h b/include/arkode/arkode_arkstep.h index f7a6f112f5..9a0cfbb5a1 100644 --- a/include/arkode/arkode_arkstep.h +++ b/include/arkode/arkode_arkstep.h @@ -86,8 +86,6 @@ SUNDIALS_EXPORT int ARKStepSetTableName(void* arkode_mem, const char* itable, const char* etable); /* Optional output functions */ -SUNDIALS_EXPORT int ARKStepGetNumRhsEvals(void* arkode_mem, long int* nfe_evals, - long int* nfi_evals); SUNDIALS_EXPORT int ARKStepGetCurrentButcherTables(void* arkode_mem, ARKodeButcherTable* Bi, ARKodeButcherTable* Be); @@ -430,7 +428,9 @@ SUNDIALS_DEPRECATED_EXPORT_MSG("use ARKodeGetNumRelaxSolveFails instead") int ARKStepGetNumRelaxSolveFails(void* arkode_mem, long int* fails); SUNDIALS_DEPRECATED_EXPORT_MSG("use ARKodeGetNumRelaxSolveIters instead") int ARKStepGetNumRelaxSolveIters(void* arkode_mem, long int* iters); - +SUNDIALS_DEPRECATED_EXPORT_MSG("use ARKodeGetNumRhsEvals instead") +int ARKStepGetNumRhsEvals(void* arkode_mem, long int* nfe_evals, + long int* nfi_evals); #ifdef __cplusplus } #endif diff --git a/include/arkode/arkode_erkstep.h b/include/arkode/arkode_erkstep.h index ed93a240b9..ea5ad629b9 100644 --- a/include/arkode/arkode_erkstep.h +++ b/include/arkode/arkode_erkstep.h @@ -59,7 +59,6 @@ SUNDIALS_EXPORT int ERKStepSetTableNum(void* arkode_mem, SUNDIALS_EXPORT int ERKStepSetTableName(void* arkode_mem, const char* etable); /* Optional output functions */ -SUNDIALS_EXPORT int ERKStepGetNumRhsEvals(void* arkode_mem, long int* nfevals); SUNDIALS_EXPORT int ERKStepGetCurrentButcherTable(void* arkode_mem, ARKodeButcherTable* B); @@ -109,7 +108,7 @@ SUNDIALS_DEPRECATED_EXPORT_MSG("use ARKodeSetMaxGrowth instead") int ERKStepSetMaxGrowth(void* arkode_mem, sunrealtype mx_growth); SUNDIALS_DEPRECATED_EXPORT_MSG("use ARKodeSetMinReduction instead") int ERKStepSetMinReduction(void* arkode_mem, sunrealtype eta_min); -SUNDIALS_DEPRECATED_EXPORT_MSG("use ERKStepSetFiARKodeBounds instead") +SUNDIALS_DEPRECATED_EXPORT_MSG("use ARKodeSetFixedStepBounds instead") int ERKStepSetFixedStepBounds(void* arkode_mem, sunrealtype lb, sunrealtype ub); SUNDIALS_DEPRECATED_EXPORT_MSG("use SUNAdaptController instead") int ERKStepSetAdaptivityMethod(void* arkode_mem, int imethod, int idefault, @@ -128,15 +127,15 @@ SUNDIALS_DEPRECATED_EXPORT_MSG("use ARKodeSetMaxErrTestFails instead") int ERKStepSetMaxErrTestFails(void* arkode_mem, int maxnef); SUNDIALS_DEPRECATED_EXPORT_MSG("use ARKodeSetConstraints instead") int ERKStepSetConstraints(void* arkode_mem, N_Vector constraints); -SUNDIALS_DEPRECATED_EXPORT_MSG("use ERKStepSetMaxARKodes instead") +SUNDIALS_DEPRECATED_EXPORT_MSG("use ARKodeSetMaxNumSteps instead") int ERKStepSetMaxNumSteps(void* arkode_mem, long int mxsteps); SUNDIALS_DEPRECATED_EXPORT_MSG("use ARKodeSetMaxHnilWarns instead") int ERKStepSetMaxHnilWarns(void* arkode_mem, int mxhnil); -SUNDIALS_DEPRECATED_EXPORT_MSG("use ERKStepSetIARKode instead") +SUNDIALS_DEPRECATED_EXPORT_MSG("use ARKodeSetInitStep instead") int ERKStepSetInitStep(void* arkode_mem, sunrealtype hin); -SUNDIALS_DEPRECATED_EXPORT_MSG("use ERKStepSetARKode instead") +SUNDIALS_DEPRECATED_EXPORT_MSG("use ARKodeSetMinStep instead") int ERKStepSetMinStep(void* arkode_mem, sunrealtype hmin); -SUNDIALS_DEPRECATED_EXPORT_MSG("use ERKStepSetARKode instead") +SUNDIALS_DEPRECATED_EXPORT_MSG("use ARKodeSetMaxStep instead") int ERKStepSetMaxStep(void* arkode_mem, sunrealtype hmax); SUNDIALS_DEPRECATED_EXPORT_MSG("use ARKodeSetInterpolateStopTime instead") int ERKStepSetInterpolateStopTime(void* arkode_mem, sunbooleantype interp); @@ -144,7 +143,7 @@ SUNDIALS_DEPRECATED_EXPORT_MSG("use ARKodeSetStopTime instead") int ERKStepSetStopTime(void* arkode_mem, sunrealtype tstop); SUNDIALS_DEPRECATED_EXPORT_MSG("use ARKodeClearStopTime instead") int ERKStepClearStopTime(void* arkode_mem); -SUNDIALS_DEPRECATED_EXPORT_MSG("use ERKStepSetFiARKode instead") +SUNDIALS_DEPRECATED_EXPORT_MSG("use ARKodeSetFixedStep instead") int ERKStepSetFixedStep(void* arkode_mem, sunrealtype hfixed); SUNDIALS_DEPRECATED_EXPORT_MSG("use ARKodeSetMaxNumConstrFails instead") int ERKStepSetMaxNumConstrFails(void* arkode_mem, int maxfails); @@ -154,7 +153,7 @@ SUNDIALS_DEPRECATED_EXPORT_MSG("use ARKodeSetNoInactiveRootWarn instead") int ERKStepSetNoInactiveRootWarn(void* arkode_mem); SUNDIALS_DEPRECATED_EXPORT_MSG("use ARKodeSetUserData instead") int ERKStepSetUserData(void* arkode_mem, void* user_data); -SUNDIALS_DEPRECATED_EXPORT_MSG("use ERKStepSetPostprocARKodeFn instead") +SUNDIALS_DEPRECATED_EXPORT_MSG("use ARKodeSetPostprocessStepFn instead") int ERKStepSetPostprocessStepFn(void* arkode_mem, ARKPostProcessFn ProcessStep); SUNDIALS_DEPRECATED_EXPORT_MSG("use ARKodeSetPostprocessStageFn instead") int ERKStepSetPostprocessStageFn(void* arkode_mem, ARKPostProcessFn ProcessStage); @@ -163,11 +162,11 @@ int ERKStepEvolve(void* arkode_mem, sunrealtype tout, N_Vector yout, sunrealtype* tret, int itask); SUNDIALS_DEPRECATED_EXPORT_MSG("use ARKodeGetDky instead") int ERKStepGetDky(void* arkode_mem, sunrealtype t, int k, N_Vector dky); -SUNDIALS_DEPRECATED_EXPORT_MSG("use ERKStepGetNumARKodes instead") +SUNDIALS_DEPRECATED_EXPORT_MSG("use ARKodeGetNumExpSteps instead") int ERKStepGetNumExpSteps(void* arkode_mem, long int* expsteps); -SUNDIALS_DEPRECATED_EXPORT_MSG("use ERKStepGetNumARKodes instead") +SUNDIALS_DEPRECATED_EXPORT_MSG("use ARKodeGetNumAccSteps instead") int ERKStepGetNumAccSteps(void* arkode_mem, long int* accsteps); -SUNDIALS_DEPRECATED_EXPORT_MSG("use ERKStepGetARKodeAttempts instead") +SUNDIALS_DEPRECATED_EXPORT_MSG("use ARKodeGetNumStepAttempts instead") int ERKStepGetNumStepAttempts(void* arkode_mem, long int* step_attempts); SUNDIALS_DEPRECATED_EXPORT_MSG("use ARKodeGetNumErrTestFails instead") int ERKStepGetNumErrTestFails(void* arkode_mem, long int* netfails); @@ -175,13 +174,13 @@ SUNDIALS_DEPRECATED_EXPORT_MSG("use ARKodeGetEstLocalErrors instead") int ERKStepGetEstLocalErrors(void* arkode_mem, N_Vector ele); SUNDIALS_DEPRECATED_EXPORT_MSG("use ARKodeGetWorkSpace instead") int ERKStepGetWorkSpace(void* arkode_mem, long int* lenrw, long int* leniw); -SUNDIALS_DEPRECATED_EXPORT_MSG("use ERKStepGetARKodes instead") +SUNDIALS_DEPRECATED_EXPORT_MSG("use ARKodeGetNumSteps instead") int ERKStepGetNumSteps(void* arkode_mem, long int* nsteps); -SUNDIALS_DEPRECATED_EXPORT_MSG("use ERKStepGetActualIARKode instead") +SUNDIALS_DEPRECATED_EXPORT_MSG("use ARKodeGetActualInitStep instead") int ERKStepGetActualInitStep(void* arkode_mem, sunrealtype* hinused); -SUNDIALS_DEPRECATED_EXPORT_MSG("use ERKStepGetLARKode instead") +SUNDIALS_DEPRECATED_EXPORT_MSG("use ARKodeGetLastStep instead") int ERKStepGetLastStep(void* arkode_mem, sunrealtype* hlast); -SUNDIALS_DEPRECATED_EXPORT_MSG("use ERKStepGetCurrARKode instead") +SUNDIALS_DEPRECATED_EXPORT_MSG("use ARKodeGetCurrentStep instead") int ERKStepGetCurrentStep(void* arkode_mem, sunrealtype* hcur); SUNDIALS_DEPRECATED_EXPORT_MSG("use ARKodeGetCurrentTime instead") int ERKStepGetCurrentTime(void* arkode_mem, sunrealtype* tcur); @@ -206,7 +205,7 @@ int ERKStepWriteParameters(void* arkode_mem, FILE* fp); SUNDIALS_DEPRECATED_EXPORT_MSG( "use ERKStepGetCurrentButcherTable and ARKodeButcherTable_Write instead") int ERKStepWriteButcher(void* arkode_mem, FILE* fp); -SUNDIALS_DEPRECATED_EXPORT_MSG("use ERKStepARKodeStats instead") +SUNDIALS_DEPRECATED_EXPORT_MSG("use ARKodeGetStepStats instead") int ERKStepGetStepStats(void* arkode_mem, long int* nsteps, sunrealtype* hinused, sunrealtype* hlast, sunrealtype* hcur, sunrealtype* tcur); SUNDIALS_DEPRECATED_EXPORT_MSG("use ARKodeFree instead") @@ -244,6 +243,8 @@ SUNDIALS_DEPRECATED_EXPORT_MSG("use ARKodeGetNumRelaxSolveFails instead") int ERKStepGetNumRelaxSolveFails(void* arkode_mem, long int* fails); SUNDIALS_DEPRECATED_EXPORT_MSG("use ARKodeGetNumRelaxSolveIters instead") int ERKStepGetNumRelaxSolveIters(void* arkode_mem, long int* iters); +SUNDIALS_DEPRECATED_EXPORT_MSG("use ARKodeGetNumRhsEvals instead") +int ERKStepGetNumRhsEvals(void* arkode_mem, long int* nfevals); #ifdef __cplusplus } diff --git a/include/arkode/arkode_mristep.h b/include/arkode/arkode_mristep.h index 000bae135a..828272948a 100644 --- a/include/arkode/arkode_mristep.h +++ b/include/arkode/arkode_mristep.h @@ -160,8 +160,6 @@ SUNDIALS_EXPORT int MRIStepSetPostInnerFn(void* arkode_mem, MRIStepPostInnerFn postfn); /* Optional output functions */ -SUNDIALS_EXPORT int MRIStepGetNumRhsEvals(void* arkode_mem, long int* nfse_evals, - long int* nfsi_evals); SUNDIALS_EXPORT int MRIStepGetCurrentCoupling(void* arkode_mem, MRIStepCoupling* MRIC); SUNDIALS_EXPORT int MRIStepGetLastInnerStepFlag(void* arkode_mem, int* flag); @@ -223,7 +221,7 @@ SUNDIALS_DEPRECATED_EXPORT_MSG("use ARKodeSetLinear instead") int MRIStepSetLinear(void* arkode_mem, int timedepend); SUNDIALS_DEPRECATED_EXPORT_MSG("use ARKodeSetNonlinear instead") int MRIStepSetNonlinear(void* arkode_mem); -SUNDIALS_DEPRECATED_EXPORT_MSG("use MRIStepSetMaxARKodes instead") +SUNDIALS_DEPRECATED_EXPORT_MSG("use ARKodeSetMaxNumSteps instead") int MRIStepSetMaxNumSteps(void* arkode_mem, long int mxsteps); SUNDIALS_DEPRECATED_EXPORT_MSG("use ARKodeSetNonlinCRDown instead") int MRIStepSetNonlinCRDown(void* arkode_mem, sunrealtype crdown); @@ -247,7 +245,7 @@ SUNDIALS_DEPRECATED_EXPORT_MSG("use ARKodeSetStopTime instead") int MRIStepSetStopTime(void* arkode_mem, sunrealtype tstop); SUNDIALS_DEPRECATED_EXPORT_MSG("use ARKodeClearStopTime instead") int MRIStepClearStopTime(void* arkode_mem); -SUNDIALS_DEPRECATED_EXPORT_MSG("use MRIStepSetFiARKode instead") +SUNDIALS_DEPRECATED_EXPORT_MSG("use ARKodeSetFixedStep instead") int MRIStepSetFixedStep(void* arkode_mem, sunrealtype hsfixed); SUNDIALS_DEPRECATED_EXPORT_MSG("use ARKodeSetRootDirection instead") int MRIStepSetRootDirection(void* arkode_mem, int* rootdir); @@ -255,7 +253,7 @@ SUNDIALS_DEPRECATED_EXPORT_MSG("use ARKodeSetNoInactiveRootWarn instead") int MRIStepSetNoInactiveRootWarn(void* arkode_mem); SUNDIALS_DEPRECATED_EXPORT_MSG("use ARKodeSetUserData instead") int MRIStepSetUserData(void* arkode_mem, void* user_data); -SUNDIALS_DEPRECATED_EXPORT_MSG("use MRIStepSetPostprocARKodeFn instead") +SUNDIALS_DEPRECATED_EXPORT_MSG("use ARKodeSetPostprocessStepFn instead") int MRIStepSetPostprocessStepFn(void* arkode_mem, ARKPostProcessFn ProcessStep); SUNDIALS_DEPRECATED_EXPORT_MSG("use ARKodeSetPostprocessStageFn instead") int MRIStepSetPostprocessStageFn(void* arkode_mem, ARKPostProcessFn ProcessStage); @@ -294,9 +292,9 @@ SUNDIALS_DEPRECATED_EXPORT_MSG("use ARKodeGetNumLinSolvSetups instead") int MRIStepGetNumLinSolvSetups(void* arkode_mem, long int* nlinsetups); SUNDIALS_DEPRECATED_EXPORT_MSG("use ARKodeGetWorkSpace instead") int MRIStepGetWorkSpace(void* arkode_mem, long int* lenrw, long int* leniw); -SUNDIALS_DEPRECATED_EXPORT_MSG("use MRIStepGetARKodes instead") +SUNDIALS_DEPRECATED_EXPORT_MSG("use ARKodeGetNumSteps instead") int MRIStepGetNumSteps(void* arkode_mem, long int* nssteps); -SUNDIALS_DEPRECATED_EXPORT_MSG("use MRIStepGetLARKode instead") +SUNDIALS_DEPRECATED_EXPORT_MSG("use ARKodeGetLastStep instead") int MRIStepGetLastStep(void* arkode_mem, sunrealtype* hlast); SUNDIALS_DEPRECATED_EXPORT_MSG("use ARKodeGetCurrentTime instead") int MRIStepGetCurrentTime(void* arkode_mem, sunrealtype* tcur); @@ -335,13 +333,13 @@ int MRIStepGetNumNonlinSolvConvFails(void* arkode_mem, long int* nnfails); SUNDIALS_DEPRECATED_EXPORT_MSG("use ARKodeGetNonlinSolvStats instead") int MRIStepGetNonlinSolvStats(void* arkode_mem, long int* nniters, long int* nnfails); -SUNDIALS_DEPRECATED_EXPORT_MSG("use MRIStepGetARKodeSolveFails instead") +SUNDIALS_DEPRECATED_EXPORT_MSG("use ARKodeGetNumStepSolveFails instead") int MRIStepGetNumStepSolveFails(void* arkode_mem, long int* nncfails); SUNDIALS_DEPRECATED_EXPORT_MSG("use ARKodeGetJac instead") int MRIStepGetJac(void* arkode_mem, SUNMatrix* J); SUNDIALS_DEPRECATED_EXPORT_MSG("use ARKodeGetJacTime instead") int MRIStepGetJacTime(void* arkode_mem, sunrealtype* t_J); -SUNDIALS_DEPRECATED_EXPORT_MSG("use MRIStepGetJacARKodes instead") +SUNDIALS_DEPRECATED_EXPORT_MSG("use ARKodeGetJacNumSteps instead") int MRIStepGetJacNumSteps(void* arkode_mem, long* nst_J); SUNDIALS_DEPRECATED_EXPORT_MSG("use ARKodeGetLinWorkSpace instead") int MRIStepGetLinWorkSpace(void* arkode_mem, long int* lenrwLS, @@ -370,6 +368,9 @@ SUNDIALS_DEPRECATED_EXPORT_MSG("use ARKodeFree instead") void MRIStepFree(void** arkode_mem); SUNDIALS_DEPRECATED_EXPORT_MSG("use ARKodePrintMem instead") void MRIStepPrintMem(void* arkode_mem, FILE* outfile); +SUNDIALS_DEPRECATED_EXPORT_MSG("use ARKodeGetNumRhsEvals instead") +int MRIStepGetNumRhsEvals(void* arkode_mem, long int* nfse_evals, + long int* nfsi_evals); #ifdef __cplusplus } diff --git a/include/arkode/arkode_sprkstep.h b/include/arkode/arkode_sprkstep.h index 3e4519cd40..e4ed5733ff 100644 --- a/include/arkode/arkode_sprkstep.h +++ b/include/arkode/arkode_sprkstep.h @@ -57,8 +57,6 @@ SUNDIALS_EXPORT int SPRKStepSetMethodName(void* arkode_mem, const char* method); /* Optional output functions */ SUNDIALS_EXPORT int SPRKStepGetCurrentMethod(void* arkode_mem, ARKodeSPRKTable* sprk_storage); -SUNDIALS_EXPORT int SPRKStepGetNumRhsEvals(void* arkode_mem, long int* nf1, - long int* nf2); /* -------------------------------------------------------------------------- * Deprecated Functions -- all are superseded by shared ARKODE-level routines @@ -126,6 +124,8 @@ int SPRKStepGetStepStats(void* arkode_mem, long int* nsteps, sunrealtype* hcur, sunrealtype* tcur); SUNDIALS_DEPRECATED_EXPORT_MSG("use ARKodeFree instead") void SPRKStepFree(void** arkode_mem); +SUNDIALS_DEPRECATED_EXPORT_MSG("use ARKodeGetNumRhsEvals instead") +int SPRKStepGetNumRhsEvals(void* arkode_mem, long int* nf1, long int* nf2); #ifdef __cplusplus } diff --git a/src/arkode/arkode.c b/src/arkode/arkode.c index 378471e507..6d66929483 100644 --- a/src/arkode/arkode.c +++ b/src/arkode/arkode.c @@ -1429,6 +1429,7 @@ ARKodeMem arkCreate(SUNContext sunctx) ark_mem->step_setmaxnonliniters = NULL; ark_mem->step_setnonlinconvcoef = NULL; ark_mem->step_setstagepredictfn = NULL; + ark_mem->step_getnumrhsevals = NULL; ark_mem->step_getnumlinsolvsetups = NULL; ark_mem->step_getestlocalerrors = NULL; ark_mem->step_getcurrentgamma = NULL; diff --git a/src/arkode/arkode_arkstep.c b/src/arkode/arkode_arkstep.c index 3a4b00622a..e1ed9c0f66 100644 --- a/src/arkode/arkode_arkstep.c +++ b/src/arkode/arkode_arkstep.c @@ -131,6 +131,7 @@ void* ARKStepCreate(ARKRhsFn fe, ARKRhsFn fi, sunrealtype t0, N_Vector y0, ark_mem->step_setmaxnonliniters = arkStep_SetMaxNonlinIters; ark_mem->step_setnonlinconvcoef = arkStep_SetNonlinConvCoef; ark_mem->step_setstagepredictfn = arkStep_SetStagePredictFn; + ark_mem->step_getnumrhsevals = arkStep_GetNumRhsEvals; ark_mem->step_getnumlinsolvsetups = arkStep_GetNumLinSolvSetups; ark_mem->step_getcurrentgamma = arkStep_GetCurrentGamma; ark_mem->step_getestlocalerrors = arkStep_GetEstLocalErrors; diff --git a/src/arkode/arkode_arkstep_impl.h b/src/arkode/arkode_arkstep_impl.h index 8af982cd1b..806101a98b 100644 --- a/src/arkode/arkode_arkstep_impl.h +++ b/src/arkode/arkode_arkstep_impl.h @@ -207,6 +207,8 @@ int arkStep_SetMaxNonlinIters(ARKodeMem ark_mem, int maxcor); int arkStep_SetNonlinConvCoef(ARKodeMem ark_mem, sunrealtype nlscoef); int arkStep_SetStagePredictFn(ARKodeMem ark_mem, ARKStagePredictFn PredictStage); int arkStep_SetDeduceImplicitRhs(ARKodeMem ark_mem, sunbooleantype deduce); +int arkStep_GetNumRhsEvals(ARKodeMem ark_mem, int partition_index, + long int* rhs_evals); int arkStep_GetEstLocalErrors(ARKodeMem ark_mem, N_Vector ele); int arkStep_GetCurrentGamma(ARKodeMem ark_mem, sunrealtype* gamma); int arkStep_GetNonlinearSystemData(ARKodeMem ark_mem, sunrealtype* tcur, diff --git a/src/arkode/arkode_arkstep_io.c b/src/arkode/arkode_arkstep_io.c index ae90b65387..c629e4d8e6 100644 --- a/src/arkode/arkode_arkstep_io.c +++ b/src/arkode/arkode_arkstep_io.c @@ -521,23 +521,52 @@ int ARKStepSetTableName(void* arkode_mem, const char* itable, const char* etable /*--------------------------------------------------------------- ARKStepGetNumRhsEvals: - Returns the current number of calls to fe and fi + Returns the current number of calls ---------------------------------------------------------------*/ +int arkStep_GetNumRhsEvals(ARKodeMem ark_mem, int partition_index, + long int* rhs_evals) +{ + ARKodeARKStepMem step_mem = NULL; + + /* access ARKodeARKStepMem structure */ + int retval = arkStep_AccessStepMem(ark_mem, __func__, &step_mem); + if (retval != ARK_SUCCESS) { return retval; } + + if (rhs_evals == NULL) + { + arkProcessError(ark_mem, ARK_ILL_INPUT, __LINE__, __func__, __FILE__, + "rhs_evals is NULL"); + return ARK_ILL_INPUT; + } + + if (partition_index > 1) + { + arkProcessError(ark_mem, ARK_ILL_INPUT, __LINE__, __func__, __FILE__, + "Invalid partition index"); + return ARK_ILL_INPUT; + } + + switch (partition_index) + { + case 0: *rhs_evals = step_mem->nfe; break; + case 1: *rhs_evals = step_mem->nfi; break; + default: *rhs_evals = step_mem->nfe + step_mem->nfi; break; + } + + return ARK_SUCCESS; +} + int ARKStepGetNumRhsEvals(void* arkode_mem, long int* fe_evals, long int* fi_evals) { - ARKodeMem ark_mem; - ARKodeARKStepMem step_mem; - int retval; + int retval = ARK_SUCCESS; - /* access ARKodeMem and ARKodeARKStepMem structures */ - retval = arkStep_AccessARKODEStepMem(arkode_mem, __func__, &ark_mem, &step_mem); - if (retval != ARK_SUCCESS) { return (retval); } + retval = ARKodeGetNumRhsEvals(arkode_mem, 0, fe_evals); + if (retval != ARK_SUCCESS) { return retval; } - /* get values from step_mem */ - *fe_evals = step_mem->nfe; - *fi_evals = step_mem->nfi; + retval = ARKodeGetNumRhsEvals(arkode_mem, 1, fi_evals); + if (retval != ARK_SUCCESS) { return retval; } - return (ARK_SUCCESS); + return ARK_SUCCESS; } /*--------------------------------------------------------------- diff --git a/src/arkode/arkode_erkstep.c b/src/arkode/arkode_erkstep.c index 766ca9e217..3eaa11ca9d 100644 --- a/src/arkode/arkode_erkstep.c +++ b/src/arkode/arkode_erkstep.c @@ -102,6 +102,7 @@ void* ERKStepCreate(ARKRhsFn f, sunrealtype t0, N_Vector y0, SUNContext sunctx) ark_mem->step_setdefaults = erkStep_SetDefaults; ark_mem->step_setrelaxfn = erkStep_SetRelaxFn; ark_mem->step_setorder = erkStep_SetOrder; + ark_mem->step_getnumrhsevals = erkStep_GetNumRhsEvals; ark_mem->step_getestlocalerrors = erkStep_GetEstLocalErrors; ark_mem->step_supports_adaptive = SUNTRUE; ark_mem->step_supports_relaxation = SUNTRUE; diff --git a/src/arkode/arkode_erkstep_impl.h b/src/arkode/arkode_erkstep_impl.h index 794f112550..fc30ad1651 100644 --- a/src/arkode/arkode_erkstep_impl.h +++ b/src/arkode/arkode_erkstep_impl.h @@ -82,6 +82,8 @@ int erkStep_Resize(ARKodeMem ark_mem, N_Vector y0, sunrealtype hscale, sunrealtype t0, ARKVecResizeFn resize, void* resize_data); void erkStep_Free(ARKodeMem ark_mem); void erkStep_PrintMem(ARKodeMem ark_mem, FILE* outfile); +int erkStep_GetNumRhsEvals(ARKodeMem ark_mem, int partition_index, + long int* rhs_evals); int erkStep_GetEstLocalErrors(ARKodeMem ark_mem, N_Vector ele); /* Internal utility routines */ diff --git a/src/arkode/arkode_erkstep_io.c b/src/arkode/arkode_erkstep_io.c index 77987b4245..61bb740654 100644 --- a/src/arkode/arkode_erkstep_io.c +++ b/src/arkode/arkode_erkstep_io.c @@ -167,22 +167,39 @@ int ERKStepSetTableName(void* arkode_mem, const char* etable) /*--------------------------------------------------------------- ERKStepGetNumRhsEvals: - Returns the current number of calls to f + Returns the current number of RHS calls ---------------------------------------------------------------*/ -int ERKStepGetNumRhsEvals(void* arkode_mem, long int* fevals) +int erkStep_GetNumRhsEvals(ARKodeMem ark_mem, int partition_index, + long int* rhs_evals) { - ARKodeMem ark_mem; - ARKodeERKStepMem step_mem; - int retval; + ARKodeERKStepMem step_mem = NULL; - /* access ARKodeMem and ARKodeERKStepMem structures */ - retval = erkStep_AccessARKODEStepMem(arkode_mem, __func__, &ark_mem, &step_mem); - if (retval != ARK_SUCCESS) { return (retval); } + /* access ARKodeERKStepMem structure */ + int retval = erkStep_AccessStepMem(ark_mem, __func__, &step_mem); + if (retval != ARK_SUCCESS) { return retval; } - /* get values from step_mem */ - *fevals = step_mem->nfe; + if (rhs_evals == NULL) + { + arkProcessError(ark_mem, ARK_ILL_INPUT, __LINE__, __func__, __FILE__, + "rhs_evals is NULL"); + return ARK_ILL_INPUT; + } - return (ARK_SUCCESS); + if (partition_index > 0) + { + arkProcessError(ark_mem, ARK_ILL_INPUT, __LINE__, __func__, __FILE__, + "Invalid partition index"); + return ARK_ILL_INPUT; + } + + *rhs_evals = step_mem->nfe; + + return ARK_SUCCESS; +} + +int ERKStepGetNumRhsEvals(void* arkode_mem, long int* fevals) +{ + return ARKodeGetNumRhsEvals(arkode_mem, 0, fevals); } /*--------------------------------------------------------------- diff --git a/src/arkode/arkode_impl.h b/src/arkode/arkode_impl.h index fff9d2e693..f9383fe1de 100644 --- a/src/arkode/arkode_impl.h +++ b/src/arkode/arkode_impl.h @@ -224,6 +224,8 @@ typedef void (*ARKTimestepFree)(ARKodeMem ark_mem); typedef void (*ARKTimestepPrintMem)(ARKodeMem ark_mem, FILE* outfile); typedef int (*ARKTimestepSetDefaults)(ARKodeMem ark_mem); typedef int (*ARKTimestepSetOrder)(ARKodeMem ark_mem, int maxord); +typedef int (*ARKTimestepGetNumRhsEvals)(ARKodeMem ark_mem, int partition_index, + long int* num_rhs_evals); /* time stepper interface functions -- temporal adaptivity */ typedef int (*ARKTimestepGetEstLocalErrors)(ARKodeMem ark_mem, N_Vector ele); @@ -406,6 +408,7 @@ struct ARKodeMemRec ARKTimestepPrintMem step_printmem; ARKTimestepSetDefaults step_setdefaults; ARKTimestepSetOrder step_setorder; + ARKTimestepGetNumRhsEvals step_getnumrhsevals; /* Time stepper module -- temporal adaptivity */ sunbooleantype step_supports_adaptive; diff --git a/src/arkode/arkode_io.c b/src/arkode/arkode_io.c index dd1325f794..670b1fd9d0 100644 --- a/src/arkode/arkode_io.c +++ b/src/arkode/arkode_io.c @@ -1999,6 +1999,38 @@ int ARKodeSetMaxConvFails(void* arkode_mem, int maxncf) ARKODE optional output utility functions ===============================================================*/ +/*--------------------------------------------------------------- + ARKodeGetNumStepAttempts: + + Returns the current number of RHS evaluations + ---------------------------------------------------------------*/ +int ARKodeGetNumRhsEvals(void* arkode_mem, int partition_index, + long int* num_rhs_evals) +{ + ARKodeMem ark_mem; + if (arkode_mem == NULL) + { + arkProcessError(NULL, ARK_MEM_NULL, __LINE__, __func__, __FILE__, + MSG_ARK_NO_MEM); + return ARK_MEM_NULL; + } + ark_mem = (ARKodeMem)arkode_mem; + + /* Call stepper routine (if provided) */ + if (ark_mem->step_getnumrhsevals) + { + return ark_mem->step_getnumrhsevals(arkode_mem, partition_index, + num_rhs_evals); + } + else + { + arkProcessError(ark_mem, ARK_STEPPER_UNSUPPORTED, __LINE__, __func__, + __FILE__, + "time-stepping module does not support this function"); + return ARK_STEPPER_UNSUPPORTED; + } +} + /*--------------------------------------------------------------- ARKodeGetNumStepAttempts: diff --git a/src/arkode/arkode_mristep.c b/src/arkode/arkode_mristep.c index 8e5875c12f..32c26e1de0 100644 --- a/src/arkode/arkode_mristep.c +++ b/src/arkode/arkode_mristep.c @@ -131,6 +131,7 @@ void* MRIStepCreate(ARKRhsFn fse, ARKRhsFn fsi, sunrealtype t0, N_Vector y0, ark_mem->step_setmaxnonliniters = mriStep_SetMaxNonlinIters; ark_mem->step_setnonlinconvcoef = mriStep_SetNonlinConvCoef; ark_mem->step_setstagepredictfn = mriStep_SetStagePredictFn; + ark_mem->step_getnumrhsevals = mriStep_GetNumRhsEvals; ark_mem->step_getnumlinsolvsetups = mriStep_GetNumLinSolvSetups; ark_mem->step_getcurrentgamma = mriStep_GetCurrentGamma; ark_mem->step_getnonlinearsystemdata = mriStep_GetNonlinearSystemData; diff --git a/src/arkode/arkode_mristep_impl.h b/src/arkode/arkode_mristep_impl.h index 29caf263c3..f631307e07 100644 --- a/src/arkode/arkode_mristep_impl.h +++ b/src/arkode/arkode_mristep_impl.h @@ -219,6 +219,8 @@ int mriStep_SetMaxNonlinIters(ARKodeMem ark_mem, int maxcor); int mriStep_SetNonlinConvCoef(ARKodeMem ark_mem, sunrealtype nlscoef); int mriStep_SetStagePredictFn(ARKodeMem ark_mem, ARKStagePredictFn PredictStage); int mriStep_SetDeduceImplicitRhs(ARKodeMem ark_mem, sunbooleantype deduce); +int mriStep_GetNumRhsEvals(ARKodeMem ark_mem, int partition_index, + long int* rhs_evals); int mriStep_GetCurrentGamma(ARKodeMem ark_mem, sunrealtype* gamma); int mriStep_GetNonlinearSystemData(ARKodeMem ark_mem, sunrealtype* tcur, N_Vector* zpred, N_Vector* z, N_Vector* Fi, diff --git a/src/arkode/arkode_mristep_io.c b/src/arkode/arkode_mristep_io.c index 1ad11ab59e..712debfaea 100644 --- a/src/arkode/arkode_mristep_io.c +++ b/src/arkode/arkode_mristep_io.c @@ -131,24 +131,53 @@ int MRIStepSetPostInnerFn(void* arkode_mem, MRIStepPostInnerFn postfn) /*--------------------------------------------------------------- MRIStepGetNumRhsEvals: - Returns the current number of calls to fse and fsi + Returns the current number of RHS calls ---------------------------------------------------------------*/ +int mriStep_GetNumRhsEvals(ARKodeMem ark_mem, int partition_index, + long int* rhs_evals) +{ + ARKodeMRIStepMem step_mem = NULL; + + /* access ARKodeMRIStepMem structure */ + int retval = mriStep_AccessStepMem(ark_mem, __func__, &step_mem); + if (retval != ARK_SUCCESS) { return retval; } + + if (rhs_evals == NULL) + { + arkProcessError(ark_mem, ARK_ILL_INPUT, __LINE__, __func__, __FILE__, + "rhs_evals is NULL"); + return ARK_ILL_INPUT; + } + + if (partition_index > 1) + { + arkProcessError(ark_mem, ARK_ILL_INPUT, __LINE__, __func__, __FILE__, + "Invalid partition index"); + return ARK_ILL_INPUT; + } + + switch (partition_index) + { + case 0: *rhs_evals = step_mem->nfse; break; + case 1: *rhs_evals = step_mem->nfsi; break; + default: *rhs_evals = step_mem->nfse + step_mem->nfsi; break; + } + + return ARK_SUCCESS; +} + int MRIStepGetNumRhsEvals(void* arkode_mem, long int* nfse_evals, long int* nfsi_evals) { - ARKodeMem ark_mem; - ARKodeMRIStepMem step_mem; - int retval; + int retval = ARK_SUCCESS; - /* access ARKodeMem and ARKodeMRIStepMem structures */ - retval = mriStep_AccessARKODEStepMem(arkode_mem, __func__, &ark_mem, &step_mem); - if (retval != ARK_SUCCESS) { return (retval); } + retval = ARKodeGetNumRhsEvals(arkode_mem, 0, nfse_evals); + if (retval != ARK_SUCCESS) { return retval; } - /* get number of fse and fsi evals from step_mem */ - *nfse_evals = step_mem->nfse; - *nfsi_evals = step_mem->nfsi; + retval = ARKodeGetNumRhsEvals(arkode_mem, 1, nfsi_evals); + if (retval != ARK_SUCCESS) { return retval; } - return (ARK_SUCCESS); + return ARK_SUCCESS; } /*--------------------------------------------------------------- diff --git a/src/arkode/arkode_sprkstep.c b/src/arkode/arkode_sprkstep.c index f7f67248c4..6c3cf4a669 100644 --- a/src/arkode/arkode_sprkstep.c +++ b/src/arkode/arkode_sprkstep.c @@ -125,6 +125,7 @@ void* SPRKStepCreate(ARKRhsFn f1, ARKRhsFn f2, sunrealtype t0, N_Vector y0, ark_mem->step_free = sprkStep_Free; ark_mem->step_setdefaults = sprkStep_SetDefaults; ark_mem->step_setorder = sprkStep_SetOrder; + ark_mem->step_getnumrhsevals = sprkStep_GetNumRhsEvals; ark_mem->step_mem = (void*)step_mem; /* Set default values for optional inputs */ diff --git a/src/arkode/arkode_sprkstep_impl.h b/src/arkode/arkode_sprkstep_impl.h index 0493106586..d94f5c5c80 100644 --- a/src/arkode/arkode_sprkstep_impl.h +++ b/src/arkode/arkode_sprkstep_impl.h @@ -83,6 +83,8 @@ int sprkStep_Resize(ARKodeMem ark_mem, N_Vector y0, sunrealtype hscale, sunrealtype t0, ARKVecResizeFn resize, void* resize_data); void sprkStep_Free(ARKodeMem ark_mem); void sprkStep_PrintMem(ARKodeMem ark_mem, FILE* outfile); +int sprkStep_GetNumRhsEvals(ARKodeMem ark_mem, int partition_index, + long int* rhs_evals); /* Internal utility routines */ int sprkStep_AccessARKODEStepMem(void* arkode_mem, const char* fname, diff --git a/src/arkode/arkode_sprkstep_io.c b/src/arkode/arkode_sprkstep_io.c index 88378f14ca..8dc76a9234 100644 --- a/src/arkode/arkode_sprkstep_io.c +++ b/src/arkode/arkode_sprkstep_io.c @@ -154,23 +154,52 @@ int SPRKStepGetCurrentMethod(void* arkode_mem, ARKodeSPRKTable* sprk_storage) /*--------------------------------------------------------------- SPRKStepGetNumRhsEvals: - Returns the current number of calls to f1 and f2 + Returns the current number of RHS calls ---------------------------------------------------------------*/ -int SPRKStepGetNumRhsEvals(void* arkode_mem, long int* nf1, long int* nf2) +int sprkStep_GetNumRhsEvals(ARKodeMem ark_mem, int partition_index, + long int* rhs_evals) { - ARKodeMem ark_mem = NULL; ARKodeSPRKStepMem step_mem = NULL; - int retval = 0; - /* access ARKodeMem and ARKodeSPRKStepMem structures */ - retval = sprkStep_AccessARKODEStepMem(arkode_mem, __func__, &ark_mem, - &step_mem); - if (retval != ARK_SUCCESS) { return (retval); } + /* access ARKodeSPRKStepMem structure */ + int retval = sprkStep_AccessStepMem(ark_mem, __func__, &step_mem); + if (retval != ARK_SUCCESS) { return retval; } - *nf1 = step_mem->nf1; - *nf2 = step_mem->nf2; + if (rhs_evals == NULL) + { + arkProcessError(ark_mem, ARK_ILL_INPUT, __LINE__, __func__, __FILE__, + "rhs_evals is NULL"); + return ARK_ILL_INPUT; + } - return (ARK_SUCCESS); + if (partition_index > 1) + { + arkProcessError(ark_mem, ARK_ILL_INPUT, __LINE__, __func__, __FILE__, + "Invalid partition index"); + return ARK_ILL_INPUT; + } + + switch (partition_index) + { + case 0: *rhs_evals = step_mem->nf1; break; + case 1: *rhs_evals = step_mem->nf2; break; + default: *rhs_evals = step_mem->nf1 + step_mem->nf2; break; + } + + return ARK_SUCCESS; +} + +int SPRKStepGetNumRhsEvals(void* arkode_mem, long int* nf1, long int* nf2) +{ + int retval = ARK_SUCCESS; + + retval = ARKodeGetNumRhsEvals(arkode_mem, 0, nf1); + if (retval != ARK_SUCCESS) { return retval; } + + retval = ARKodeGetNumRhsEvals(arkode_mem, 1, nf2); + if (retval != ARK_SUCCESS) { return retval; } + + return ARK_SUCCESS; } /*=============================================================== diff --git a/src/arkode/fmod_int32/farkode_arkstep_mod.c b/src/arkode/fmod_int32/farkode_arkstep_mod.c index 4791bedcdc..944fd591b0 100644 --- a/src/arkode/fmod_int32/farkode_arkstep_mod.c +++ b/src/arkode/fmod_int32/farkode_arkstep_mod.c @@ -361,22 +361,6 @@ SWIGEXPORT int _wrap_FARKStepSetTableName(void *farg1, SwigArrayWrapper *farg2, } -SWIGEXPORT int _wrap_FARKStepGetNumRhsEvals(void *farg1, long *farg2, long *farg3) { - int fresult ; - void *arg1 = (void *) 0 ; - long *arg2 = (long *) 0 ; - long *arg3 = (long *) 0 ; - int result; - - arg1 = (void *)(farg1); - arg2 = (long *)(farg2); - arg3 = (long *)(farg3); - result = (int)ARKStepGetNumRhsEvals(arg1,arg2,arg3); - fresult = (int)(result); - return fresult; -} - - SWIGEXPORT int _wrap_FARKStepGetCurrentButcherTables(void *farg1, void *farg2, void *farg3) { int fresult ; void *arg1 = (void *) 0 ; @@ -2657,4 +2641,20 @@ SWIGEXPORT int _wrap_FARKStepGetNumRelaxSolveIters(void *farg1, long *farg2) { } +SWIGEXPORT int _wrap_FARKStepGetNumRhsEvals(void *farg1, long *farg2, long *farg3) { + int fresult ; + void *arg1 = (void *) 0 ; + long *arg2 = (long *) 0 ; + long *arg3 = (long *) 0 ; + int result; + + arg1 = (void *)(farg1); + arg2 = (long *)(farg2); + arg3 = (long *)(farg3); + result = (int)ARKStepGetNumRhsEvals(arg1,arg2,arg3); + fresult = (int)(result); + return fresult; +} + + diff --git a/src/arkode/fmod_int32/farkode_arkstep_mod.f90 b/src/arkode/fmod_int32/farkode_arkstep_mod.f90 index cc0373f1eb..ae1f6659eb 100644 --- a/src/arkode/fmod_int32/farkode_arkstep_mod.f90 +++ b/src/arkode/fmod_int32/farkode_arkstep_mod.f90 @@ -60,7 +60,6 @@ module farkode_arkstep_mod integer(C_SIZE_T), public :: size = 0 end type public :: FARKStepSetTableName - public :: FARKStepGetNumRhsEvals public :: FARKStepGetCurrentButcherTables public :: FARKStepGetTimestepperStats public :: FARKStepCreateMRIStepInnerStepper @@ -218,6 +217,7 @@ module farkode_arkstep_mod public :: FARKStepGetNumRelaxBoundFails public :: FARKStepGetNumRelaxSolveFails public :: FARKStepGetNumRelaxSolveIters + public :: FARKStepGetNumRhsEvals ! WRAPPER DECLARATIONS interface @@ -302,16 +302,6 @@ function swigc_FARKStepSetTableName(farg1, farg2, farg3) & integer(C_INT) :: fresult end function -function swigc_FARKStepGetNumRhsEvals(farg1, farg2, farg3) & -bind(C, name="_wrap_FARKStepGetNumRhsEvals") & -result(fresult) -use, intrinsic :: ISO_C_BINDING -type(C_PTR), value :: farg1 -type(C_PTR), value :: farg2 -type(C_PTR), value :: farg3 -integer(C_INT) :: fresult -end function - function swigc_FARKStepGetCurrentButcherTables(farg1, farg2, farg3) & bind(C, name="_wrap_FARKStepGetCurrentButcherTables") & result(fresult) @@ -1772,6 +1762,16 @@ function swigc_FARKStepGetNumRelaxSolveIters(farg1, farg2) & integer(C_INT) :: fresult end function +function swigc_FARKStepGetNumRhsEvals(farg1, farg2, farg3) & +bind(C, name="_wrap_FARKStepGetNumRhsEvals") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +type(C_PTR), value :: farg1 +type(C_PTR), value :: farg2 +type(C_PTR), value :: farg3 +integer(C_INT) :: fresult +end function + end interface @@ -1949,25 +1949,6 @@ function FARKStepSetTableName(arkode_mem, itable, etable) & swig_result = fresult end function -function FARKStepGetNumRhsEvals(arkode_mem, nfe_evals, nfi_evals) & -result(swig_result) -use, intrinsic :: ISO_C_BINDING -integer(C_INT) :: swig_result -type(C_PTR) :: arkode_mem -integer(C_LONG), dimension(*), target, intent(inout) :: nfe_evals -integer(C_LONG), dimension(*), target, intent(inout) :: nfi_evals -integer(C_INT) :: fresult -type(C_PTR) :: farg1 -type(C_PTR) :: farg2 -type(C_PTR) :: farg3 - -farg1 = arkode_mem -farg2 = c_loc(nfe_evals(1)) -farg3 = c_loc(nfi_evals(1)) -fresult = swigc_FARKStepGetNumRhsEvals(farg1, farg2, farg3) -swig_result = fresult -end function - function FARKStepGetCurrentButcherTables(arkode_mem, bi, be) & result(swig_result) use, intrinsic :: ISO_C_BINDING @@ -4621,5 +4602,24 @@ function FARKStepGetNumRelaxSolveIters(arkode_mem, iters) & swig_result = fresult end function +function FARKStepGetNumRhsEvals(arkode_mem, nfe_evals, nfi_evals) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +integer(C_INT) :: swig_result +type(C_PTR) :: arkode_mem +integer(C_LONG), dimension(*), target, intent(inout) :: nfe_evals +integer(C_LONG), dimension(*), target, intent(inout) :: nfi_evals +integer(C_INT) :: fresult +type(C_PTR) :: farg1 +type(C_PTR) :: farg2 +type(C_PTR) :: farg3 + +farg1 = arkode_mem +farg2 = c_loc(nfe_evals(1)) +farg3 = c_loc(nfi_evals(1)) +fresult = swigc_FARKStepGetNumRhsEvals(farg1, farg2, farg3) +swig_result = fresult +end function + end module diff --git a/src/arkode/fmod_int32/farkode_erkstep_mod.c b/src/arkode/fmod_int32/farkode_erkstep_mod.c index 5def57befc..c5fee45581 100644 --- a/src/arkode/fmod_int32/farkode_erkstep_mod.c +++ b/src/arkode/fmod_int32/farkode_erkstep_mod.c @@ -311,20 +311,6 @@ SWIGEXPORT int _wrap_FERKStepSetTableName(void *farg1, SwigArrayWrapper *farg2) } -SWIGEXPORT int _wrap_FERKStepGetNumRhsEvals(void *farg1, long *farg2) { - int fresult ; - void *arg1 = (void *) 0 ; - long *arg2 = (long *) 0 ; - int result; - - arg1 = (void *)(farg1); - arg2 = (long *)(farg2); - result = (int)ERKStepGetNumRhsEvals(arg1,arg2); - fresult = (int)(result); - return fresult; -} - - SWIGEXPORT int _wrap_FERKStepGetCurrentButcherTable(void *farg1, void *farg2) { int fresult ; void *arg1 = (void *) 0 ; @@ -1560,4 +1546,18 @@ SWIGEXPORT int _wrap_FERKStepGetNumRelaxSolveIters(void *farg1, long *farg2) { } +SWIGEXPORT int _wrap_FERKStepGetNumRhsEvals(void *farg1, long *farg2) { + int fresult ; + void *arg1 = (void *) 0 ; + long *arg2 = (long *) 0 ; + int result; + + arg1 = (void *)(farg1); + arg2 = (long *)(farg2); + result = (int)ERKStepGetNumRhsEvals(arg1,arg2); + fresult = (int)(result); + return fresult; +} + + diff --git a/src/arkode/fmod_int32/farkode_erkstep_mod.f90 b/src/arkode/fmod_int32/farkode_erkstep_mod.f90 index 291dc643d5..70531d6a64 100644 --- a/src/arkode/fmod_int32/farkode_erkstep_mod.f90 +++ b/src/arkode/fmod_int32/farkode_erkstep_mod.f90 @@ -44,7 +44,6 @@ module farkode_erkstep_mod integer(C_SIZE_T), public :: size = 0 end type public :: FERKStepSetTableName - public :: FERKStepGetNumRhsEvals public :: FERKStepGetCurrentButcherTable public :: FERKStepGetTimestepperStats public :: FERKStepResize @@ -130,6 +129,7 @@ module farkode_erkstep_mod public :: FERKStepGetNumRelaxBoundFails public :: FERKStepGetNumRelaxSolveFails public :: FERKStepGetNumRelaxSolveIters + public :: FERKStepGetNumRhsEvals ! WRAPPER DECLARATIONS interface @@ -183,15 +183,6 @@ function swigc_FERKStepSetTableName(farg1, farg2) & integer(C_INT) :: fresult end function -function swigc_FERKStepGetNumRhsEvals(farg1, farg2) & -bind(C, name="_wrap_FERKStepGetNumRhsEvals") & -result(fresult) -use, intrinsic :: ISO_C_BINDING -type(C_PTR), value :: farg1 -type(C_PTR), value :: farg2 -integer(C_INT) :: fresult -end function - function swigc_FERKStepGetCurrentButcherTable(farg1, farg2) & bind(C, name="_wrap_FERKStepGetCurrentButcherTable") & result(fresult) @@ -985,6 +976,15 @@ function swigc_FERKStepGetNumRelaxSolveIters(farg1, farg2) & integer(C_INT) :: fresult end function +function swigc_FERKStepGetNumRhsEvals(farg1, farg2) & +bind(C, name="_wrap_FERKStepGetNumRhsEvals") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +type(C_PTR), value :: farg1 +type(C_PTR), value :: farg2 +integer(C_INT) :: fresult +end function + end interface @@ -1101,22 +1101,6 @@ function FERKStepSetTableName(arkode_mem, etable) & swig_result = fresult end function -function FERKStepGetNumRhsEvals(arkode_mem, nfevals) & -result(swig_result) -use, intrinsic :: ISO_C_BINDING -integer(C_INT) :: swig_result -type(C_PTR) :: arkode_mem -integer(C_LONG), dimension(*), target, intent(inout) :: nfevals -integer(C_INT) :: fresult -type(C_PTR) :: farg1 -type(C_PTR) :: farg2 - -farg1 = arkode_mem -farg2 = c_loc(nfevals(1)) -fresult = swigc_FERKStepGetNumRhsEvals(farg1, farg2) -swig_result = fresult -end function - function FERKStepGetCurrentButcherTable(arkode_mem, b) & result(swig_result) use, intrinsic :: ISO_C_BINDING @@ -2562,5 +2546,21 @@ function FERKStepGetNumRelaxSolveIters(arkode_mem, iters) & swig_result = fresult end function +function FERKStepGetNumRhsEvals(arkode_mem, nfevals) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +integer(C_INT) :: swig_result +type(C_PTR) :: arkode_mem +integer(C_LONG), dimension(*), target, intent(inout) :: nfevals +integer(C_INT) :: fresult +type(C_PTR) :: farg1 +type(C_PTR) :: farg2 + +farg1 = arkode_mem +farg2 = c_loc(nfevals(1)) +fresult = swigc_FERKStepGetNumRhsEvals(farg1, farg2) +swig_result = fresult +end function + end module diff --git a/src/arkode/fmod_int32/farkode_mod.c b/src/arkode/fmod_int32/farkode_mod.c index 1423d2e582..52f187e8c4 100644 --- a/src/arkode/fmod_int32/farkode_mod.c +++ b/src/arkode/fmod_int32/farkode_mod.c @@ -1193,6 +1193,22 @@ SWIGEXPORT int _wrap_FARKodeComputeState(void *farg1, N_Vector farg2, N_Vector f } +SWIGEXPORT int _wrap_FARKodeGetNumRhsEvals(void *farg1, int const *farg2, long *farg3) { + int fresult ; + void *arg1 = (void *) 0 ; + int arg2 ; + long *arg3 = (long *) 0 ; + int result; + + arg1 = (void *)(farg1); + arg2 = (int)(*farg2); + arg3 = (long *)(farg3); + result = (int)ARKodeGetNumRhsEvals(arg1,arg2,arg3); + fresult = (int)(result); + return fresult; +} + + SWIGEXPORT int _wrap_FARKodeGetNumStepAttempts(void *farg1, long *farg2) { int fresult ; void *arg1 = (void *) 0 ; diff --git a/src/arkode/fmod_int32/farkode_mod.f90 b/src/arkode/fmod_int32/farkode_mod.f90 index 366867f40a..d5eefa63da 100644 --- a/src/arkode/fmod_int32/farkode_mod.f90 +++ b/src/arkode/fmod_int32/farkode_mod.f90 @@ -163,6 +163,7 @@ module farkode_mod public :: FARKodeEvolve public :: FARKodeGetDky public :: FARKodeComputeState + public :: FARKodeGetNumRhsEvals public :: FARKodeGetNumStepAttempts public :: FARKodeGetWorkSpace public :: FARKodeGetNumSteps @@ -1019,6 +1020,16 @@ function swigc_FARKodeComputeState(farg1, farg2, farg3) & integer(C_INT) :: fresult end function +function swigc_FARKodeGetNumRhsEvals(farg1, farg2, farg3) & +bind(C, name="_wrap_FARKodeGetNumRhsEvals") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +type(C_PTR), value :: farg1 +integer(C_INT), intent(in) :: farg2 +type(C_PTR), value :: farg3 +integer(C_INT) :: fresult +end function + function swigc_FARKodeGetNumStepAttempts(farg1, farg2) & bind(C, name="_wrap_FARKodeGetNumStepAttempts") & result(fresult) @@ -3381,6 +3392,25 @@ function FARKodeComputeState(arkode_mem, zcor, z) & swig_result = fresult end function +function FARKodeGetNumRhsEvals(arkode_mem, partition_index, num_rhs_evals) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +integer(C_INT) :: swig_result +type(C_PTR) :: arkode_mem +integer(C_INT), intent(in) :: partition_index +integer(C_LONG), dimension(*), target, intent(inout) :: num_rhs_evals +integer(C_INT) :: fresult +type(C_PTR) :: farg1 +integer(C_INT) :: farg2 +type(C_PTR) :: farg3 + +farg1 = arkode_mem +farg2 = partition_index +farg3 = c_loc(num_rhs_evals(1)) +fresult = swigc_FARKodeGetNumRhsEvals(farg1, farg2, farg3) +swig_result = fresult +end function + function FARKodeGetNumStepAttempts(arkode_mem, step_attempts) & result(swig_result) use, intrinsic :: ISO_C_BINDING diff --git a/src/arkode/fmod_int32/farkode_mristep_mod.c b/src/arkode/fmod_int32/farkode_mristep_mod.c index 35721938c4..8b6a72b660 100644 --- a/src/arkode/fmod_int32/farkode_mristep_mod.c +++ b/src/arkode/fmod_int32/farkode_mristep_mod.c @@ -713,22 +713,6 @@ SWIGEXPORT int _wrap_FMRIStepSetPostInnerFn(void *farg1, MRIStepPostInnerFn farg } -SWIGEXPORT int _wrap_FMRIStepGetNumRhsEvals(void *farg1, long *farg2, long *farg3) { - int fresult ; - void *arg1 = (void *) 0 ; - long *arg2 = (long *) 0 ; - long *arg3 = (long *) 0 ; - int result; - - arg1 = (void *)(farg1); - arg2 = (long *)(farg2); - arg3 = (long *)(farg3); - result = (int)MRIStepGetNumRhsEvals(arg1,arg2,arg3); - fresult = (int)(result); - return fresult; -} - - SWIGEXPORT int _wrap_FMRIStepGetCurrentCoupling(void *farg1, void *farg2) { int fresult ; void *arg1 = (void *) 0 ; @@ -2111,4 +2095,20 @@ SWIGEXPORT void _wrap_FMRIStepPrintMem(void *farg1, void *farg2) { } +SWIGEXPORT int _wrap_FMRIStepGetNumRhsEvals(void *farg1, long *farg2, long *farg3) { + int fresult ; + void *arg1 = (void *) 0 ; + long *arg2 = (long *) 0 ; + long *arg3 = (long *) 0 ; + int result; + + arg1 = (void *)(farg1); + arg2 = (long *)(farg2); + arg3 = (long *)(farg3); + result = (int)MRIStepGetNumRhsEvals(arg1,arg2,arg3); + fresult = (int)(result); + return fresult; +} + + diff --git a/src/arkode/fmod_int32/farkode_mristep_mod.f90 b/src/arkode/fmod_int32/farkode_mristep_mod.f90 index 74a3de5637..ecba398b89 100644 --- a/src/arkode/fmod_int32/farkode_mristep_mod.f90 +++ b/src/arkode/fmod_int32/farkode_mristep_mod.f90 @@ -129,7 +129,6 @@ module farkode_mristep_mod public :: FMRIStepSetCoupling public :: FMRIStepSetPreInnerFn public :: FMRIStepSetPostInnerFn - public :: FMRIStepGetNumRhsEvals public :: FMRIStepGetCurrentCoupling public :: FMRIStepGetLastInnerStepFlag public :: FMRIStepInnerStepper_Create @@ -226,6 +225,7 @@ module farkode_mristep_mod public :: FMRIStepGetLinReturnFlagName public :: FMRIStepFree public :: FMRIStepPrintMem + public :: FMRIStepGetNumRhsEvals ! WRAPPER DECLARATIONS interface @@ -503,16 +503,6 @@ function swigc_FMRIStepSetPostInnerFn(farg1, farg2) & integer(C_INT) :: fresult end function -function swigc_FMRIStepGetNumRhsEvals(farg1, farg2, farg3) & -bind(C, name="_wrap_FMRIStepGetNumRhsEvals") & -result(fresult) -use, intrinsic :: ISO_C_BINDING -type(C_PTR), value :: farg1 -type(C_PTR), value :: farg2 -type(C_PTR), value :: farg3 -integer(C_INT) :: fresult -end function - function swigc_FMRIStepGetCurrentCoupling(farg1, farg2) & bind(C, name="_wrap_FMRIStepGetCurrentCoupling") & result(fresult) @@ -1402,6 +1392,16 @@ subroutine swigc_FMRIStepPrintMem(farg1, farg2) & type(C_PTR), value :: farg2 end subroutine +function swigc_FMRIStepGetNumRhsEvals(farg1, farg2, farg3) & +bind(C, name="_wrap_FMRIStepGetNumRhsEvals") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +type(C_PTR), value :: farg1 +type(C_PTR), value :: farg2 +type(C_PTR), value :: farg3 +integer(C_INT) :: fresult +end function + end interface @@ -1883,25 +1883,6 @@ function FMRIStepSetPostInnerFn(arkode_mem, postfn) & swig_result = fresult end function -function FMRIStepGetNumRhsEvals(arkode_mem, nfse_evals, nfsi_evals) & -result(swig_result) -use, intrinsic :: ISO_C_BINDING -integer(C_INT) :: swig_result -type(C_PTR) :: arkode_mem -integer(C_LONG), dimension(*), target, intent(inout) :: nfse_evals -integer(C_LONG), dimension(*), target, intent(inout) :: nfsi_evals -integer(C_INT) :: fresult -type(C_PTR) :: farg1 -type(C_PTR) :: farg2 -type(C_PTR) :: farg3 - -farg1 = arkode_mem -farg2 = c_loc(nfse_evals(1)) -farg3 = c_loc(nfsi_evals(1)) -fresult = swigc_FMRIStepGetNumRhsEvals(farg1, farg2, farg3) -swig_result = fresult -end function - function FMRIStepGetCurrentCoupling(arkode_mem, mric) & result(swig_result) use, intrinsic :: ISO_C_BINDING @@ -3512,5 +3493,24 @@ subroutine FMRIStepPrintMem(arkode_mem, outfile) call swigc_FMRIStepPrintMem(farg1, farg2) end subroutine +function FMRIStepGetNumRhsEvals(arkode_mem, nfse_evals, nfsi_evals) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +integer(C_INT) :: swig_result +type(C_PTR) :: arkode_mem +integer(C_LONG), dimension(*), target, intent(inout) :: nfse_evals +integer(C_LONG), dimension(*), target, intent(inout) :: nfsi_evals +integer(C_INT) :: fresult +type(C_PTR) :: farg1 +type(C_PTR) :: farg2 +type(C_PTR) :: farg3 + +farg1 = arkode_mem +farg2 = c_loc(nfse_evals(1)) +farg3 = c_loc(nfsi_evals(1)) +fresult = swigc_FMRIStepGetNumRhsEvals(farg1, farg2, farg3) +swig_result = fresult +end function + end module diff --git a/src/arkode/fmod_int32/farkode_sprkstep_mod.c b/src/arkode/fmod_int32/farkode_sprkstep_mod.c index 28cfb297d4..f2888129b1 100644 --- a/src/arkode/fmod_int32/farkode_sprkstep_mod.c +++ b/src/arkode/fmod_int32/farkode_sprkstep_mod.c @@ -329,22 +329,6 @@ SWIGEXPORT int _wrap_FSPRKStepGetCurrentMethod(void *farg1, void *farg2) { } -SWIGEXPORT int _wrap_FSPRKStepGetNumRhsEvals(void *farg1, long *farg2, long *farg3) { - int fresult ; - void *arg1 = (void *) 0 ; - long *arg2 = (long *) 0 ; - long *arg3 = (long *) 0 ; - int result; - - arg1 = (void *)(farg1); - arg2 = (long *)(farg2); - arg3 = (long *)(farg3); - result = (int)SPRKStepGetNumRhsEvals(arg1,arg2,arg3); - fresult = (int)(result); - return fresult; -} - - SWIGEXPORT int _wrap_FSPRKStepReset(void *farg1, double const *farg2, N_Vector farg3) { int fresult ; void *arg1 = (void *) 0 ; @@ -764,4 +748,20 @@ SWIGEXPORT void _wrap_FSPRKStepFree(void *farg1) { } +SWIGEXPORT int _wrap_FSPRKStepGetNumRhsEvals(void *farg1, long *farg2, long *farg3) { + int fresult ; + void *arg1 = (void *) 0 ; + long *arg2 = (long *) 0 ; + long *arg3 = (long *) 0 ; + int result; + + arg1 = (void *)(farg1); + arg2 = (long *)(farg2); + arg3 = (long *)(farg3); + result = (int)SPRKStepGetNumRhsEvals(arg1,arg2,arg3); + fresult = (int)(result); + return fresult; +} + + diff --git a/src/arkode/fmod_int32/farkode_sprkstep_mod.f90 b/src/arkode/fmod_int32/farkode_sprkstep_mod.f90 index 82217e7b1b..55f3b8f3f0 100644 --- a/src/arkode/fmod_int32/farkode_sprkstep_mod.f90 +++ b/src/arkode/fmod_int32/farkode_sprkstep_mod.f90 @@ -44,7 +44,6 @@ module farkode_sprkstep_mod end type public :: FSPRKStepSetMethodName public :: FSPRKStepGetCurrentMethod - public :: FSPRKStepGetNumRhsEvals public :: FSPRKStepReset public :: FSPRKStepRootInit public :: FSPRKStepSetRootDirection @@ -74,6 +73,7 @@ module farkode_sprkstep_mod public :: FSPRKStepWriteParameters public :: FSPRKStepGetStepStats public :: FSPRKStepFree + public :: FSPRKStepGetNumRhsEvals ! WRAPPER DECLARATIONS interface @@ -138,16 +138,6 @@ function swigc_FSPRKStepGetCurrentMethod(farg1, farg2) & integer(C_INT) :: fresult end function -function swigc_FSPRKStepGetNumRhsEvals(farg1, farg2, farg3) & -bind(C, name="_wrap_FSPRKStepGetNumRhsEvals") & -result(fresult) -use, intrinsic :: ISO_C_BINDING -type(C_PTR), value :: farg1 -type(C_PTR), value :: farg2 -type(C_PTR), value :: farg3 -integer(C_INT) :: fresult -end function - function swigc_FSPRKStepReset(farg1, farg2, farg3) & bind(C, name="_wrap_FSPRKStepReset") & result(fresult) @@ -421,6 +411,16 @@ subroutine swigc_FSPRKStepFree(farg1) & type(C_PTR), value :: farg1 end subroutine +function swigc_FSPRKStepGetNumRhsEvals(farg1, farg2, farg3) & +bind(C, name="_wrap_FSPRKStepGetNumRhsEvals") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +type(C_PTR), value :: farg1 +type(C_PTR), value :: farg2 +type(C_PTR), value :: farg3 +integer(C_INT) :: fresult +end function + end interface @@ -559,25 +559,6 @@ function FSPRKStepGetCurrentMethod(arkode_mem, sprk_storage) & swig_result = fresult end function -function FSPRKStepGetNumRhsEvals(arkode_mem, nf1, nf2) & -result(swig_result) -use, intrinsic :: ISO_C_BINDING -integer(C_INT) :: swig_result -type(C_PTR) :: arkode_mem -integer(C_LONG), dimension(*), target, intent(inout) :: nf1 -integer(C_LONG), dimension(*), target, intent(inout) :: nf2 -integer(C_INT) :: fresult -type(C_PTR) :: farg1 -type(C_PTR) :: farg2 -type(C_PTR) :: farg3 - -farg1 = arkode_mem -farg2 = c_loc(nf1(1)) -farg3 = c_loc(nf2(1)) -fresult = swigc_FSPRKStepGetNumRhsEvals(farg1, farg2, farg3) -swig_result = fresult -end function - function FSPRKStepReset(arkode_mem, tr, yr) & result(swig_result) use, intrinsic :: ISO_C_BINDING @@ -1077,5 +1058,24 @@ subroutine FSPRKStepFree(arkode_mem) call swigc_FSPRKStepFree(farg1) end subroutine +function FSPRKStepGetNumRhsEvals(arkode_mem, nf1, nf2) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +integer(C_INT) :: swig_result +type(C_PTR) :: arkode_mem +integer(C_LONG), dimension(*), target, intent(inout) :: nf1 +integer(C_LONG), dimension(*), target, intent(inout) :: nf2 +integer(C_INT) :: fresult +type(C_PTR) :: farg1 +type(C_PTR) :: farg2 +type(C_PTR) :: farg3 + +farg1 = arkode_mem +farg2 = c_loc(nf1(1)) +farg3 = c_loc(nf2(1)) +fresult = swigc_FSPRKStepGetNumRhsEvals(farg1, farg2, farg3) +swig_result = fresult +end function + end module diff --git a/src/arkode/fmod_int64/farkode_arkstep_mod.c b/src/arkode/fmod_int64/farkode_arkstep_mod.c index 4791bedcdc..944fd591b0 100644 --- a/src/arkode/fmod_int64/farkode_arkstep_mod.c +++ b/src/arkode/fmod_int64/farkode_arkstep_mod.c @@ -361,22 +361,6 @@ SWIGEXPORT int _wrap_FARKStepSetTableName(void *farg1, SwigArrayWrapper *farg2, } -SWIGEXPORT int _wrap_FARKStepGetNumRhsEvals(void *farg1, long *farg2, long *farg3) { - int fresult ; - void *arg1 = (void *) 0 ; - long *arg2 = (long *) 0 ; - long *arg3 = (long *) 0 ; - int result; - - arg1 = (void *)(farg1); - arg2 = (long *)(farg2); - arg3 = (long *)(farg3); - result = (int)ARKStepGetNumRhsEvals(arg1,arg2,arg3); - fresult = (int)(result); - return fresult; -} - - SWIGEXPORT int _wrap_FARKStepGetCurrentButcherTables(void *farg1, void *farg2, void *farg3) { int fresult ; void *arg1 = (void *) 0 ; @@ -2657,4 +2641,20 @@ SWIGEXPORT int _wrap_FARKStepGetNumRelaxSolveIters(void *farg1, long *farg2) { } +SWIGEXPORT int _wrap_FARKStepGetNumRhsEvals(void *farg1, long *farg2, long *farg3) { + int fresult ; + void *arg1 = (void *) 0 ; + long *arg2 = (long *) 0 ; + long *arg3 = (long *) 0 ; + int result; + + arg1 = (void *)(farg1); + arg2 = (long *)(farg2); + arg3 = (long *)(farg3); + result = (int)ARKStepGetNumRhsEvals(arg1,arg2,arg3); + fresult = (int)(result); + return fresult; +} + + diff --git a/src/arkode/fmod_int64/farkode_arkstep_mod.f90 b/src/arkode/fmod_int64/farkode_arkstep_mod.f90 index cc0373f1eb..ae1f6659eb 100644 --- a/src/arkode/fmod_int64/farkode_arkstep_mod.f90 +++ b/src/arkode/fmod_int64/farkode_arkstep_mod.f90 @@ -60,7 +60,6 @@ module farkode_arkstep_mod integer(C_SIZE_T), public :: size = 0 end type public :: FARKStepSetTableName - public :: FARKStepGetNumRhsEvals public :: FARKStepGetCurrentButcherTables public :: FARKStepGetTimestepperStats public :: FARKStepCreateMRIStepInnerStepper @@ -218,6 +217,7 @@ module farkode_arkstep_mod public :: FARKStepGetNumRelaxBoundFails public :: FARKStepGetNumRelaxSolveFails public :: FARKStepGetNumRelaxSolveIters + public :: FARKStepGetNumRhsEvals ! WRAPPER DECLARATIONS interface @@ -302,16 +302,6 @@ function swigc_FARKStepSetTableName(farg1, farg2, farg3) & integer(C_INT) :: fresult end function -function swigc_FARKStepGetNumRhsEvals(farg1, farg2, farg3) & -bind(C, name="_wrap_FARKStepGetNumRhsEvals") & -result(fresult) -use, intrinsic :: ISO_C_BINDING -type(C_PTR), value :: farg1 -type(C_PTR), value :: farg2 -type(C_PTR), value :: farg3 -integer(C_INT) :: fresult -end function - function swigc_FARKStepGetCurrentButcherTables(farg1, farg2, farg3) & bind(C, name="_wrap_FARKStepGetCurrentButcherTables") & result(fresult) @@ -1772,6 +1762,16 @@ function swigc_FARKStepGetNumRelaxSolveIters(farg1, farg2) & integer(C_INT) :: fresult end function +function swigc_FARKStepGetNumRhsEvals(farg1, farg2, farg3) & +bind(C, name="_wrap_FARKStepGetNumRhsEvals") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +type(C_PTR), value :: farg1 +type(C_PTR), value :: farg2 +type(C_PTR), value :: farg3 +integer(C_INT) :: fresult +end function + end interface @@ -1949,25 +1949,6 @@ function FARKStepSetTableName(arkode_mem, itable, etable) & swig_result = fresult end function -function FARKStepGetNumRhsEvals(arkode_mem, nfe_evals, nfi_evals) & -result(swig_result) -use, intrinsic :: ISO_C_BINDING -integer(C_INT) :: swig_result -type(C_PTR) :: arkode_mem -integer(C_LONG), dimension(*), target, intent(inout) :: nfe_evals -integer(C_LONG), dimension(*), target, intent(inout) :: nfi_evals -integer(C_INT) :: fresult -type(C_PTR) :: farg1 -type(C_PTR) :: farg2 -type(C_PTR) :: farg3 - -farg1 = arkode_mem -farg2 = c_loc(nfe_evals(1)) -farg3 = c_loc(nfi_evals(1)) -fresult = swigc_FARKStepGetNumRhsEvals(farg1, farg2, farg3) -swig_result = fresult -end function - function FARKStepGetCurrentButcherTables(arkode_mem, bi, be) & result(swig_result) use, intrinsic :: ISO_C_BINDING @@ -4621,5 +4602,24 @@ function FARKStepGetNumRelaxSolveIters(arkode_mem, iters) & swig_result = fresult end function +function FARKStepGetNumRhsEvals(arkode_mem, nfe_evals, nfi_evals) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +integer(C_INT) :: swig_result +type(C_PTR) :: arkode_mem +integer(C_LONG), dimension(*), target, intent(inout) :: nfe_evals +integer(C_LONG), dimension(*), target, intent(inout) :: nfi_evals +integer(C_INT) :: fresult +type(C_PTR) :: farg1 +type(C_PTR) :: farg2 +type(C_PTR) :: farg3 + +farg1 = arkode_mem +farg2 = c_loc(nfe_evals(1)) +farg3 = c_loc(nfi_evals(1)) +fresult = swigc_FARKStepGetNumRhsEvals(farg1, farg2, farg3) +swig_result = fresult +end function + end module diff --git a/src/arkode/fmod_int64/farkode_erkstep_mod.c b/src/arkode/fmod_int64/farkode_erkstep_mod.c index 5def57befc..c5fee45581 100644 --- a/src/arkode/fmod_int64/farkode_erkstep_mod.c +++ b/src/arkode/fmod_int64/farkode_erkstep_mod.c @@ -311,20 +311,6 @@ SWIGEXPORT int _wrap_FERKStepSetTableName(void *farg1, SwigArrayWrapper *farg2) } -SWIGEXPORT int _wrap_FERKStepGetNumRhsEvals(void *farg1, long *farg2) { - int fresult ; - void *arg1 = (void *) 0 ; - long *arg2 = (long *) 0 ; - int result; - - arg1 = (void *)(farg1); - arg2 = (long *)(farg2); - result = (int)ERKStepGetNumRhsEvals(arg1,arg2); - fresult = (int)(result); - return fresult; -} - - SWIGEXPORT int _wrap_FERKStepGetCurrentButcherTable(void *farg1, void *farg2) { int fresult ; void *arg1 = (void *) 0 ; @@ -1560,4 +1546,18 @@ SWIGEXPORT int _wrap_FERKStepGetNumRelaxSolveIters(void *farg1, long *farg2) { } +SWIGEXPORT int _wrap_FERKStepGetNumRhsEvals(void *farg1, long *farg2) { + int fresult ; + void *arg1 = (void *) 0 ; + long *arg2 = (long *) 0 ; + int result; + + arg1 = (void *)(farg1); + arg2 = (long *)(farg2); + result = (int)ERKStepGetNumRhsEvals(arg1,arg2); + fresult = (int)(result); + return fresult; +} + + diff --git a/src/arkode/fmod_int64/farkode_erkstep_mod.f90 b/src/arkode/fmod_int64/farkode_erkstep_mod.f90 index 291dc643d5..70531d6a64 100644 --- a/src/arkode/fmod_int64/farkode_erkstep_mod.f90 +++ b/src/arkode/fmod_int64/farkode_erkstep_mod.f90 @@ -44,7 +44,6 @@ module farkode_erkstep_mod integer(C_SIZE_T), public :: size = 0 end type public :: FERKStepSetTableName - public :: FERKStepGetNumRhsEvals public :: FERKStepGetCurrentButcherTable public :: FERKStepGetTimestepperStats public :: FERKStepResize @@ -130,6 +129,7 @@ module farkode_erkstep_mod public :: FERKStepGetNumRelaxBoundFails public :: FERKStepGetNumRelaxSolveFails public :: FERKStepGetNumRelaxSolveIters + public :: FERKStepGetNumRhsEvals ! WRAPPER DECLARATIONS interface @@ -183,15 +183,6 @@ function swigc_FERKStepSetTableName(farg1, farg2) & integer(C_INT) :: fresult end function -function swigc_FERKStepGetNumRhsEvals(farg1, farg2) & -bind(C, name="_wrap_FERKStepGetNumRhsEvals") & -result(fresult) -use, intrinsic :: ISO_C_BINDING -type(C_PTR), value :: farg1 -type(C_PTR), value :: farg2 -integer(C_INT) :: fresult -end function - function swigc_FERKStepGetCurrentButcherTable(farg1, farg2) & bind(C, name="_wrap_FERKStepGetCurrentButcherTable") & result(fresult) @@ -985,6 +976,15 @@ function swigc_FERKStepGetNumRelaxSolveIters(farg1, farg2) & integer(C_INT) :: fresult end function +function swigc_FERKStepGetNumRhsEvals(farg1, farg2) & +bind(C, name="_wrap_FERKStepGetNumRhsEvals") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +type(C_PTR), value :: farg1 +type(C_PTR), value :: farg2 +integer(C_INT) :: fresult +end function + end interface @@ -1101,22 +1101,6 @@ function FERKStepSetTableName(arkode_mem, etable) & swig_result = fresult end function -function FERKStepGetNumRhsEvals(arkode_mem, nfevals) & -result(swig_result) -use, intrinsic :: ISO_C_BINDING -integer(C_INT) :: swig_result -type(C_PTR) :: arkode_mem -integer(C_LONG), dimension(*), target, intent(inout) :: nfevals -integer(C_INT) :: fresult -type(C_PTR) :: farg1 -type(C_PTR) :: farg2 - -farg1 = arkode_mem -farg2 = c_loc(nfevals(1)) -fresult = swigc_FERKStepGetNumRhsEvals(farg1, farg2) -swig_result = fresult -end function - function FERKStepGetCurrentButcherTable(arkode_mem, b) & result(swig_result) use, intrinsic :: ISO_C_BINDING @@ -2562,5 +2546,21 @@ function FERKStepGetNumRelaxSolveIters(arkode_mem, iters) & swig_result = fresult end function +function FERKStepGetNumRhsEvals(arkode_mem, nfevals) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +integer(C_INT) :: swig_result +type(C_PTR) :: arkode_mem +integer(C_LONG), dimension(*), target, intent(inout) :: nfevals +integer(C_INT) :: fresult +type(C_PTR) :: farg1 +type(C_PTR) :: farg2 + +farg1 = arkode_mem +farg2 = c_loc(nfevals(1)) +fresult = swigc_FERKStepGetNumRhsEvals(farg1, farg2) +swig_result = fresult +end function + end module diff --git a/src/arkode/fmod_int64/farkode_mod.c b/src/arkode/fmod_int64/farkode_mod.c index 7b2c3c9811..b092ee9d57 100644 --- a/src/arkode/fmod_int64/farkode_mod.c +++ b/src/arkode/fmod_int64/farkode_mod.c @@ -1193,6 +1193,22 @@ SWIGEXPORT int _wrap_FARKodeComputeState(void *farg1, N_Vector farg2, N_Vector f } +SWIGEXPORT int _wrap_FARKodeGetNumRhsEvals(void *farg1, int const *farg2, long *farg3) { + int fresult ; + void *arg1 = (void *) 0 ; + int arg2 ; + long *arg3 = (long *) 0 ; + int result; + + arg1 = (void *)(farg1); + arg2 = (int)(*farg2); + arg3 = (long *)(farg3); + result = (int)ARKodeGetNumRhsEvals(arg1,arg2,arg3); + fresult = (int)(result); + return fresult; +} + + SWIGEXPORT int _wrap_FARKodeGetNumStepAttempts(void *farg1, long *farg2) { int fresult ; void *arg1 = (void *) 0 ; diff --git a/src/arkode/fmod_int64/farkode_mod.f90 b/src/arkode/fmod_int64/farkode_mod.f90 index e627472572..ffb3eedfac 100644 --- a/src/arkode/fmod_int64/farkode_mod.f90 +++ b/src/arkode/fmod_int64/farkode_mod.f90 @@ -163,6 +163,7 @@ module farkode_mod public :: FARKodeEvolve public :: FARKodeGetDky public :: FARKodeComputeState + public :: FARKodeGetNumRhsEvals public :: FARKodeGetNumStepAttempts public :: FARKodeGetWorkSpace public :: FARKodeGetNumSteps @@ -1019,6 +1020,16 @@ function swigc_FARKodeComputeState(farg1, farg2, farg3) & integer(C_INT) :: fresult end function +function swigc_FARKodeGetNumRhsEvals(farg1, farg2, farg3) & +bind(C, name="_wrap_FARKodeGetNumRhsEvals") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +type(C_PTR), value :: farg1 +integer(C_INT), intent(in) :: farg2 +type(C_PTR), value :: farg3 +integer(C_INT) :: fresult +end function + function swigc_FARKodeGetNumStepAttempts(farg1, farg2) & bind(C, name="_wrap_FARKodeGetNumStepAttempts") & result(fresult) @@ -3381,6 +3392,25 @@ function FARKodeComputeState(arkode_mem, zcor, z) & swig_result = fresult end function +function FARKodeGetNumRhsEvals(arkode_mem, partition_index, num_rhs_evals) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +integer(C_INT) :: swig_result +type(C_PTR) :: arkode_mem +integer(C_INT), intent(in) :: partition_index +integer(C_LONG), dimension(*), target, intent(inout) :: num_rhs_evals +integer(C_INT) :: fresult +type(C_PTR) :: farg1 +integer(C_INT) :: farg2 +type(C_PTR) :: farg3 + +farg1 = arkode_mem +farg2 = partition_index +farg3 = c_loc(num_rhs_evals(1)) +fresult = swigc_FARKodeGetNumRhsEvals(farg1, farg2, farg3) +swig_result = fresult +end function + function FARKodeGetNumStepAttempts(arkode_mem, step_attempts) & result(swig_result) use, intrinsic :: ISO_C_BINDING diff --git a/src/arkode/fmod_int64/farkode_mristep_mod.c b/src/arkode/fmod_int64/farkode_mristep_mod.c index c2e254fa54..5ddb7d077a 100644 --- a/src/arkode/fmod_int64/farkode_mristep_mod.c +++ b/src/arkode/fmod_int64/farkode_mristep_mod.c @@ -713,22 +713,6 @@ SWIGEXPORT int _wrap_FMRIStepSetPostInnerFn(void *farg1, MRIStepPostInnerFn farg } -SWIGEXPORT int _wrap_FMRIStepGetNumRhsEvals(void *farg1, long *farg2, long *farg3) { - int fresult ; - void *arg1 = (void *) 0 ; - long *arg2 = (long *) 0 ; - long *arg3 = (long *) 0 ; - int result; - - arg1 = (void *)(farg1); - arg2 = (long *)(farg2); - arg3 = (long *)(farg3); - result = (int)MRIStepGetNumRhsEvals(arg1,arg2,arg3); - fresult = (int)(result); - return fresult; -} - - SWIGEXPORT int _wrap_FMRIStepGetCurrentCoupling(void *farg1, void *farg2) { int fresult ; void *arg1 = (void *) 0 ; @@ -2111,4 +2095,20 @@ SWIGEXPORT void _wrap_FMRIStepPrintMem(void *farg1, void *farg2) { } +SWIGEXPORT int _wrap_FMRIStepGetNumRhsEvals(void *farg1, long *farg2, long *farg3) { + int fresult ; + void *arg1 = (void *) 0 ; + long *arg2 = (long *) 0 ; + long *arg3 = (long *) 0 ; + int result; + + arg1 = (void *)(farg1); + arg2 = (long *)(farg2); + arg3 = (long *)(farg3); + result = (int)MRIStepGetNumRhsEvals(arg1,arg2,arg3); + fresult = (int)(result); + return fresult; +} + + diff --git a/src/arkode/fmod_int64/farkode_mristep_mod.f90 b/src/arkode/fmod_int64/farkode_mristep_mod.f90 index 782c3c1df9..be5bb7445a 100644 --- a/src/arkode/fmod_int64/farkode_mristep_mod.f90 +++ b/src/arkode/fmod_int64/farkode_mristep_mod.f90 @@ -129,7 +129,6 @@ module farkode_mristep_mod public :: FMRIStepSetCoupling public :: FMRIStepSetPreInnerFn public :: FMRIStepSetPostInnerFn - public :: FMRIStepGetNumRhsEvals public :: FMRIStepGetCurrentCoupling public :: FMRIStepGetLastInnerStepFlag public :: FMRIStepInnerStepper_Create @@ -226,6 +225,7 @@ module farkode_mristep_mod public :: FMRIStepGetLinReturnFlagName public :: FMRIStepFree public :: FMRIStepPrintMem + public :: FMRIStepGetNumRhsEvals ! WRAPPER DECLARATIONS interface @@ -503,16 +503,6 @@ function swigc_FMRIStepSetPostInnerFn(farg1, farg2) & integer(C_INT) :: fresult end function -function swigc_FMRIStepGetNumRhsEvals(farg1, farg2, farg3) & -bind(C, name="_wrap_FMRIStepGetNumRhsEvals") & -result(fresult) -use, intrinsic :: ISO_C_BINDING -type(C_PTR), value :: farg1 -type(C_PTR), value :: farg2 -type(C_PTR), value :: farg3 -integer(C_INT) :: fresult -end function - function swigc_FMRIStepGetCurrentCoupling(farg1, farg2) & bind(C, name="_wrap_FMRIStepGetCurrentCoupling") & result(fresult) @@ -1402,6 +1392,16 @@ subroutine swigc_FMRIStepPrintMem(farg1, farg2) & type(C_PTR), value :: farg2 end subroutine +function swigc_FMRIStepGetNumRhsEvals(farg1, farg2, farg3) & +bind(C, name="_wrap_FMRIStepGetNumRhsEvals") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +type(C_PTR), value :: farg1 +type(C_PTR), value :: farg2 +type(C_PTR), value :: farg3 +integer(C_INT) :: fresult +end function + end interface @@ -1883,25 +1883,6 @@ function FMRIStepSetPostInnerFn(arkode_mem, postfn) & swig_result = fresult end function -function FMRIStepGetNumRhsEvals(arkode_mem, nfse_evals, nfsi_evals) & -result(swig_result) -use, intrinsic :: ISO_C_BINDING -integer(C_INT) :: swig_result -type(C_PTR) :: arkode_mem -integer(C_LONG), dimension(*), target, intent(inout) :: nfse_evals -integer(C_LONG), dimension(*), target, intent(inout) :: nfsi_evals -integer(C_INT) :: fresult -type(C_PTR) :: farg1 -type(C_PTR) :: farg2 -type(C_PTR) :: farg3 - -farg1 = arkode_mem -farg2 = c_loc(nfse_evals(1)) -farg3 = c_loc(nfsi_evals(1)) -fresult = swigc_FMRIStepGetNumRhsEvals(farg1, farg2, farg3) -swig_result = fresult -end function - function FMRIStepGetCurrentCoupling(arkode_mem, mric) & result(swig_result) use, intrinsic :: ISO_C_BINDING @@ -3512,5 +3493,24 @@ subroutine FMRIStepPrintMem(arkode_mem, outfile) call swigc_FMRIStepPrintMem(farg1, farg2) end subroutine +function FMRIStepGetNumRhsEvals(arkode_mem, nfse_evals, nfsi_evals) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +integer(C_INT) :: swig_result +type(C_PTR) :: arkode_mem +integer(C_LONG), dimension(*), target, intent(inout) :: nfse_evals +integer(C_LONG), dimension(*), target, intent(inout) :: nfsi_evals +integer(C_INT) :: fresult +type(C_PTR) :: farg1 +type(C_PTR) :: farg2 +type(C_PTR) :: farg3 + +farg1 = arkode_mem +farg2 = c_loc(nfse_evals(1)) +farg3 = c_loc(nfsi_evals(1)) +fresult = swigc_FMRIStepGetNumRhsEvals(farg1, farg2, farg3) +swig_result = fresult +end function + end module diff --git a/src/arkode/fmod_int64/farkode_sprkstep_mod.c b/src/arkode/fmod_int64/farkode_sprkstep_mod.c index 28cfb297d4..f2888129b1 100644 --- a/src/arkode/fmod_int64/farkode_sprkstep_mod.c +++ b/src/arkode/fmod_int64/farkode_sprkstep_mod.c @@ -329,22 +329,6 @@ SWIGEXPORT int _wrap_FSPRKStepGetCurrentMethod(void *farg1, void *farg2) { } -SWIGEXPORT int _wrap_FSPRKStepGetNumRhsEvals(void *farg1, long *farg2, long *farg3) { - int fresult ; - void *arg1 = (void *) 0 ; - long *arg2 = (long *) 0 ; - long *arg3 = (long *) 0 ; - int result; - - arg1 = (void *)(farg1); - arg2 = (long *)(farg2); - arg3 = (long *)(farg3); - result = (int)SPRKStepGetNumRhsEvals(arg1,arg2,arg3); - fresult = (int)(result); - return fresult; -} - - SWIGEXPORT int _wrap_FSPRKStepReset(void *farg1, double const *farg2, N_Vector farg3) { int fresult ; void *arg1 = (void *) 0 ; @@ -764,4 +748,20 @@ SWIGEXPORT void _wrap_FSPRKStepFree(void *farg1) { } +SWIGEXPORT int _wrap_FSPRKStepGetNumRhsEvals(void *farg1, long *farg2, long *farg3) { + int fresult ; + void *arg1 = (void *) 0 ; + long *arg2 = (long *) 0 ; + long *arg3 = (long *) 0 ; + int result; + + arg1 = (void *)(farg1); + arg2 = (long *)(farg2); + arg3 = (long *)(farg3); + result = (int)SPRKStepGetNumRhsEvals(arg1,arg2,arg3); + fresult = (int)(result); + return fresult; +} + + diff --git a/src/arkode/fmod_int64/farkode_sprkstep_mod.f90 b/src/arkode/fmod_int64/farkode_sprkstep_mod.f90 index 82217e7b1b..55f3b8f3f0 100644 --- a/src/arkode/fmod_int64/farkode_sprkstep_mod.f90 +++ b/src/arkode/fmod_int64/farkode_sprkstep_mod.f90 @@ -44,7 +44,6 @@ module farkode_sprkstep_mod end type public :: FSPRKStepSetMethodName public :: FSPRKStepGetCurrentMethod - public :: FSPRKStepGetNumRhsEvals public :: FSPRKStepReset public :: FSPRKStepRootInit public :: FSPRKStepSetRootDirection @@ -74,6 +73,7 @@ module farkode_sprkstep_mod public :: FSPRKStepWriteParameters public :: FSPRKStepGetStepStats public :: FSPRKStepFree + public :: FSPRKStepGetNumRhsEvals ! WRAPPER DECLARATIONS interface @@ -138,16 +138,6 @@ function swigc_FSPRKStepGetCurrentMethod(farg1, farg2) & integer(C_INT) :: fresult end function -function swigc_FSPRKStepGetNumRhsEvals(farg1, farg2, farg3) & -bind(C, name="_wrap_FSPRKStepGetNumRhsEvals") & -result(fresult) -use, intrinsic :: ISO_C_BINDING -type(C_PTR), value :: farg1 -type(C_PTR), value :: farg2 -type(C_PTR), value :: farg3 -integer(C_INT) :: fresult -end function - function swigc_FSPRKStepReset(farg1, farg2, farg3) & bind(C, name="_wrap_FSPRKStepReset") & result(fresult) @@ -421,6 +411,16 @@ subroutine swigc_FSPRKStepFree(farg1) & type(C_PTR), value :: farg1 end subroutine +function swigc_FSPRKStepGetNumRhsEvals(farg1, farg2, farg3) & +bind(C, name="_wrap_FSPRKStepGetNumRhsEvals") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +type(C_PTR), value :: farg1 +type(C_PTR), value :: farg2 +type(C_PTR), value :: farg3 +integer(C_INT) :: fresult +end function + end interface @@ -559,25 +559,6 @@ function FSPRKStepGetCurrentMethod(arkode_mem, sprk_storage) & swig_result = fresult end function -function FSPRKStepGetNumRhsEvals(arkode_mem, nf1, nf2) & -result(swig_result) -use, intrinsic :: ISO_C_BINDING -integer(C_INT) :: swig_result -type(C_PTR) :: arkode_mem -integer(C_LONG), dimension(*), target, intent(inout) :: nf1 -integer(C_LONG), dimension(*), target, intent(inout) :: nf2 -integer(C_INT) :: fresult -type(C_PTR) :: farg1 -type(C_PTR) :: farg2 -type(C_PTR) :: farg3 - -farg1 = arkode_mem -farg2 = c_loc(nf1(1)) -farg3 = c_loc(nf2(1)) -fresult = swigc_FSPRKStepGetNumRhsEvals(farg1, farg2, farg3) -swig_result = fresult -end function - function FSPRKStepReset(arkode_mem, tr, yr) & result(swig_result) use, intrinsic :: ISO_C_BINDING @@ -1077,5 +1058,24 @@ subroutine FSPRKStepFree(arkode_mem) call swigc_FSPRKStepFree(farg1) end subroutine +function FSPRKStepGetNumRhsEvals(arkode_mem, nf1, nf2) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +integer(C_INT) :: swig_result +type(C_PTR) :: arkode_mem +integer(C_LONG), dimension(*), target, intent(inout) :: nf1 +integer(C_LONG), dimension(*), target, intent(inout) :: nf2 +integer(C_INT) :: fresult +type(C_PTR) :: farg1 +type(C_PTR) :: farg2 +type(C_PTR) :: farg3 + +farg1 = arkode_mem +farg2 = c_loc(nf1(1)) +farg3 = c_loc(nf2(1)) +fresult = swigc_FSPRKStepGetNumRhsEvals(farg1, farg2, farg3) +swig_result = fresult +end function + end module diff --git a/src/sunmatrix/sparse/sunmatrix_sparse.c b/src/sunmatrix/sparse/sunmatrix_sparse.c index bbdbc344d2..89a1ca576a 100644 --- a/src/sunmatrix/sparse/sunmatrix_sparse.c +++ b/src/sunmatrix/sparse/sunmatrix_sparse.c @@ -2,6 +2,7 @@ * ----------------------------------------------------------------- * Programmer(s): Daniel Reynolds @ SMU * David Gardner @ LLNL + * Steven B. Roberts @ LLNL * Based on code sundials_sparse.c by: Carol Woodward and * Slaven Peles @ LLNL, and Daniel R. Reynolds @ SMU * ----------------------------------------------------------------- @@ -623,234 +624,72 @@ SUNErrCode SUNMatCopy_Sparse(SUNMatrix A, SUNMatrix B) SUNErrCode SUNMatScaleAddI_Sparse(sunrealtype c, SUNMatrix A) { - sunindextype j, i, p, nz, newvals, M, N, cend, nw; - sunbooleantype newmat, found; - sunindextype *w, *Ap, *Ai, *Cp, *Ci; - sunrealtype *x, *Ax, *Cx; - SUNMatrix C; SUNFunctionBegin(A->sunctx); + const sunindextype N = SM_SPARSETYPE_S(A) == CSC_MAT ? SM_COLUMNS_S(A) + : SM_ROWS_S(A); + const sunindextype M = SM_SPARSETYPE_S(A) == CSC_MAT ? SM_ROWS_S(A) + : SM_COLUMNS_S(A); - /* store shortcuts to matrix dimensions (M is inner dimension, N is outer) */ - if (SM_SPARSETYPE_S(A) == CSC_MAT) - { - M = SM_ROWS_S(A); - N = SM_COLUMNS_S(A); - } - else - { - M = SM_COLUMNS_S(A); - N = SM_ROWS_S(A); - } - - /* access data arrays from A */ - Ap = NULL; - Ai = NULL; - Ax = NULL; - Ap = SM_INDEXPTRS_S(A); + sunindextype* Ap = SM_INDEXPTRS_S(A); SUNAssert(Ap, SUN_ERR_ARG_CORRUPT); - Ai = SM_INDEXVALS_S(A); + sunindextype* Ai = SM_INDEXVALS_S(A); SUNAssert(Ai, SUN_ERR_ARG_CORRUPT); - Ax = SM_DATA_S(A); + sunrealtype* Ax = SM_DATA_S(A); SUNAssert(Ax, SUN_ERR_ARG_CORRUPT); - /* determine if A: contains values on the diagonal (so I can just be added - in); if not, then increment counter for extra storage that should be - required. */ - newvals = 0; - for (j = 0; j < SUNMIN(M, N); j++) + sunindextype newvals = 0; + for (sunindextype j = 0; j < N; j++) { /* scan column (row if CSR) of A, searching for diagonal value */ - found = SUNFALSE; - for (i = Ap[j]; i < Ap[j + 1]; i++) + sunbooleantype found = SUNFALSE; + for (sunindextype i = Ap[j]; i < Ap[j + 1]; i++) { if (Ai[i] == j) { found = SUNTRUE; - break; + Ax[i] = ONE + c * Ax[i]; } + else { Ax[i] *= c; } } - /* if no diagonal found, increment necessary storage counter */ - if (!found) { newvals += 1; } + /* If no diagonal element found and the current column (row) can actually + * contain a diagonal element, increment the storage counter */ + if (!found && j < M) { newvals++; } } - /* If extra nonzeros required, check whether matrix has sufficient storage - space for new nonzero entries (so I can be inserted into existing storage) - */ - newmat = SUNFALSE; /* no reallocation needed */ - if (newvals > (SM_NNZ_S(A) - Ap[N])) { newmat = SUNTRUE; } - - /* perform operation based on existing/necessary structure */ - - /* case 1: A already contains a diagonal */ - if (newvals == 0) + /* At this point, A has the correctly updated values except for any new + * diagonal elements that need to be added (of which there are newvals). Now, + * we allocate additional storage if needed */ + const sunindextype new_nnz = Ap[N] + newvals; + if (new_nnz > SM_NNZ_S(A)) { - /* iterate through columns, adding 1.0 to diagonal */ - for (j = 0; j < SUNMIN(M, N); j++) - { - for (i = Ap[j]; i < Ap[j + 1]; i++) - { - if (Ai[i] == j) { Ax[i] = ONE + c * Ax[i]; } - else { Ax[i] = c * Ax[i]; } - } - } - - /* case 2: A has sufficient storage, but does not already contain a - * diagonal */ + SUNCheckCall(SUNSparseMatrix_Reallocate(A, new_nnz)); + Ap = SM_INDEXPTRS_S(A); + Ai = SM_INDEXVALS_S(A); + Ax = SM_DATA_S(A); } - else if (!newmat) - { - /* create work arrays for nonzero row (column) indices and values in a - * single column (row) */ - w = (sunindextype*)malloc(M * sizeof(sunindextype)); - SUNAssert(w, SUN_ERR_MALLOC_FAIL); - x = (sunrealtype*)malloc(M * sizeof(sunrealtype)); - SUNAssert(x, SUN_ERR_MALLOC_FAIL); - /* determine storage location where last column (row) should end */ - nz = Ap[N] + newvals; - - /* store pointer past last column (row) from original A, - and store updated value in revised A */ - cend = Ap[N]; - Ap[N] = nz; - - /* iterate through columns (rows) backwards */ - for (j = N - 1; j >= 0; j--) + for (sunindextype j = N - 1; newvals > 0; j--) + { + sunbooleantype found = SUNFALSE; + for (sunindextype i = Ap[j + 1] - 1; i >= Ap[j]; i--) { - /* reset diagonal entry, in case it's not in A */ - x[j] = ZERO; - - /* iterate down column (row) of A, collecting nonzeros */ - for (p = Ap[j], i = 0; p < cend; p++, i++) - { - w[i] = Ai[p]; /* collect row (column) index */ - x[Ai[p]] = c * Ax[p]; /* collect/scale value */ - } + if (Ai[i] == j) { found = SUNTRUE; } - /* NNZ in this column (row) */ - nw = cend - Ap[j]; - - /* add identity to this column (row) */ - if (j < M) { x[j] += ONE; /* update value */ } - - /* fill entries of A with this column's (row's) data */ - /* fill entries past diagonal */ - for (i = nw - 1; i >= 0 && w[i] > j; i--) - { - Ai[--nz] = w[i]; - Ax[nz] = x[w[i]]; - } - /* fill diagonal if applicable */ - if (i < 0 /* empty or insert at front */ || - w[i] != j /* insert behind front */) - { - Ai[--nz] = j; - Ax[nz] = x[j]; - } - /* fill entries before diagonal */ - for (; i >= 0; i--) - { - Ai[--nz] = w[i]; - Ax[nz] = x[w[i]]; - } - - /* store ptr past this col (row) from orig A, update value for new A */ - cend = Ap[j]; - Ap[j] = nz; + /* Shift elements to make room for diagonal elements */ + Ai[i + newvals] = Ai[i]; + Ax[i + newvals] = Ax[i]; } - /* clean up */ - free(w); - free(x); - - /* case 3: A must be reallocated with sufficient storage */ - } - else - { - /* create work array for nonzero values in a single column (row) */ - x = (sunrealtype*)malloc(M * sizeof(sunrealtype)); - - /* create new matrix for sum */ - C = SUNSparseMatrix(SM_ROWS_S(A), SM_COLUMNS_S(A), Ap[N] + newvals, - SM_SPARSETYPE_S(A), A->sunctx); - SUNCheckLastErr(); - - /* access data from CSR structures (return if failure) */ - Cp = NULL; - Ci = NULL; - Cx = NULL; - Cp = SM_INDEXPTRS_S(C); - SUNAssert(Cp, SUN_ERR_ARG_CORRUPT); - Ci = SM_INDEXVALS_S(C); - SUNAssert(Ci, SUN_ERR_ARG_CORRUPT); - Cx = SM_DATA_S(C); - SUNAssert(Cx, SUN_ERR_ARG_CORRUPT); - - /* initialize total nonzero count */ - nz = 0; - - /* iterate through columns (rows for CSR) */ - for (j = 0; j < N; j++) + Ap[j + 1] += newvals; + if (!found && j < M) { - /* set current column (row) pointer to current # nonzeros */ - Cp[j] = nz; - - /* reset diagonal entry, in case it's not in A */ - x[j] = ZERO; - - /* iterate down column (along row) of A, collecting nonzeros */ - for (p = Ap[j]; p < Ap[j + 1]; p++) - { - x[Ai[p]] = c * Ax[p]; /* collect/scale value */ - } - - /* add identity to this column (row) */ - if (j < M) { x[j] += ONE; /* update value */ } - - /* fill entries of C with this column's (row's) data */ - /* fill entries before diagonal */ - for (p = Ap[j]; p < Ap[j + 1] && Ai[p] < j; p++) - { - Ci[nz] = Ai[p]; - Cx[nz++] = x[Ai[p]]; - } - /* fill diagonal if applicable */ - if (p >= Ap[j + 1] /* empty or insert at end */ || - Ai[p] != j /* insert before end */) - { - Ci[nz] = j; - Cx[nz++] = x[j]; - } - /* fill entries past diagonal */ - for (; p < Ap[j + 1]; p++) - { - Ci[nz] = Ai[p]; - Cx[nz++] = x[Ai[p]]; - } + /* This column (row) needs a diagonal element added */ + newvals--; + Ai[Ap[j] + newvals] = j; + Ax[Ap[j] + newvals] = ONE; } - - /* indicate end of data */ - Cp[N] = nz; - - /* update A's structure with C's values; nullify C's pointers */ - SM_NNZ_S(A) = SM_NNZ_S(C); - - if (SM_DATA_S(A)) { free(SM_DATA_S(A)); } - SM_DATA_S(A) = SM_DATA_S(C); - SM_DATA_S(C) = NULL; - - if (SM_INDEXVALS_S(A)) { free(SM_INDEXVALS_S(A)); } - SM_INDEXVALS_S(A) = SM_INDEXVALS_S(C); - SM_INDEXVALS_S(C) = NULL; - - if (SM_INDEXPTRS_S(A)) { free(SM_INDEXPTRS_S(A)); } - SM_INDEXPTRS_S(A) = SM_INDEXPTRS_S(C); - SM_INDEXPTRS_S(C) = NULL; - - /* clean up */ - SUNMatDestroy_Sparse(C); - free(x); } + return SUN_SUCCESS; } diff --git a/test/answers b/test/answers index c9da3649ff..b8fc1d686f 160000 --- a/test/answers +++ b/test/answers @@ -1 +1 @@ -Subproject commit c9da3649ffcf693b0a6f8c12690e42ef83993bdd +Subproject commit b8fc1d686fabbc1c8e609ff3253cedf9588986ac diff --git a/test/unit_tests/arkode/CXX_parallel/ark_test_heat2D_mri.cpp b/test/unit_tests/arkode/CXX_parallel/ark_test_heat2D_mri.cpp index 00008a1f11..303d85f057 100644 --- a/test/unit_tests/arkode/CXX_parallel/ark_test_heat2D_mri.cpp +++ b/test/unit_tests/arkode/CXX_parallel/ark_test_heat2D_mri.cpp @@ -320,8 +320,10 @@ int main(int argc, char* argv[]) if (check_flag(&flag, "ARKodeEvolve", 1)) { return 1; } flag = ARKodeGetNumSteps(arkstep_mem, &ark_nst); if (check_flag(&flag, "ARKodeGetNumSteps", 1)) { return 1; } - flag = ARKStepGetNumRhsEvals(arkstep_mem, &ark_nfe, &ark_nfi); - if (check_flag(&flag, "ARKStepGetNumRhsEvals", 1)) { return 1; } + flag = ARKodeGetNumRhsEvals(arkstep_mem, 0, &ark_nfe); + if (check_flag(&flag, "ARKodeGetNumRhsEvals", 1)) { return 1; } + flag = ARKodeGetNumRhsEvals(arkstep_mem, 1, &ark_nfi); + if (check_flag(&flag, "ARKodeGetNumRhsEvals", 1)) { return 1; } flag = ARKodeGetNumLinSolvSetups(arkstep_mem, &ark_nsetups); if (check_flag(&flag, "ARKodeGetNumLinSolvSetups", 1)) { return 1; } flag = ARKodeGetNumNonlinSolvIters(arkstep_mem, &ark_nni); @@ -363,8 +365,10 @@ int main(int argc, char* argv[]) if (check_flag(&flag, "ARKodeEvolve", 1)) { return 1; } flag = ARKodeGetNumSteps(mristep_mem, &mri_nst); if (check_flag(&flag, "ARKodeGetNumSteps", 1)) { return 1; } - flag = MRIStepGetNumRhsEvals(mristep_mem, &mri_nfse, &mri_nfsi); - if (check_flag(&flag, "MRIStepGetNumRhsEvals", 1)) { return 1; } + flag = ARKodeGetNumRhsEvals(mristep_mem, 0, &mri_nfse); + if (check_flag(&flag, "ARKodeGetNumRhsEvals", 1)) { return 1; } + flag = ARKodeGetNumRhsEvals(mristep_mem, 1, &mri_nfsi); + if (check_flag(&flag, "ARKodeGetNumRhsEvals", 1)) { return 1; } flag = ARKodeGetNumLinSolvSetups(mristep_mem, &mri_nsetups); if (check_flag(&flag, "ARKodeGetNumLinSolvSetups", 1)) { return 1; } flag = ARKodeGetNumNonlinSolvIters(mristep_mem, &mri_nni); diff --git a/test/unit_tests/arkode/CXX_serial/ark_test_analytic_sys_mri.cpp b/test/unit_tests/arkode/CXX_serial/ark_test_analytic_sys_mri.cpp index a31e3d81e0..c56ac4292d 100644 --- a/test/unit_tests/arkode/CXX_serial/ark_test_analytic_sys_mri.cpp +++ b/test/unit_tests/arkode/CXX_serial/ark_test_analytic_sys_mri.cpp @@ -243,8 +243,10 @@ int main(int argc, char* argv[]) if (check_flag(&flag, "ARKodeGetCurrentTime", 1)) { return 1; } flag = ARKodeGetNumSteps(arkstep_mem, &ark_nst); if (check_flag(&flag, "ARKodeGetNumSteps", 1)) { return 1; } - flag = ARKStepGetNumRhsEvals(arkstep_mem, &ark_nfe, &ark_nfi); - if (check_flag(&flag, "ARKStepGetNumRhsEvals", 1)) { return 1; } + flag = ARKodeGetNumRhsEvals(arkstep_mem, 0, &ark_nfe); + if (check_flag(&flag, "ARKodeGetNumRhsEvals", 1)) { return 1; } + flag = ARKodeGetNumRhsEvals(arkstep_mem, 1, &ark_nfi); + if (check_flag(&flag, "ARKodeGetNumRhsEvals", 1)) { return 1; } flag = ARKodeGetNumNonlinSolvIters(arkstep_mem, &ark_nni); if (check_flag(&flag, "ARKodeGetNumNonlinSolvIters", 1)) { return 1; } flag = ARKodeGetNumNonlinSolvConvFails(arkstep_mem, &ark_ncfn); @@ -284,8 +286,10 @@ int main(int argc, char* argv[]) if (check_flag(&flag, "ARKodeGetCurrentTime", 1)) { return 1; } flag = ARKodeGetNumSteps(mristep_mem, &mri_nst); if (check_flag(&flag, "ARKodeGetNumSteps", 1)) { return 1; } - flag = MRIStepGetNumRhsEvals(mristep_mem, &mri_nfse, &mri_nfsi); - if (check_flag(&flag, "MRIStepGetNumRhsEvals", 1)) { return 1; } + flag = ARKodeGetNumRhsEvals(mristep_mem, 0, &mri_nfse); + if (check_flag(&flag, "ARKodeGetNumRhsEvals", 1)) { return 1; } + flag = ARKodeGetNumRhsEvals(mristep_mem, 1, &mri_nfsi); + if (check_flag(&flag, "ARKodeGetNumRhsEvals", 1)) { return 1; } flag = ARKodeGetNumNonlinSolvIters(mristep_mem, &mri_nni); if (check_flag(&flag, "ARKodeGetNumNonlinSolvIters", 1)) { return 1; } flag = ARKodeGetNumNonlinSolvConvFails(mristep_mem, &mri_ncfn); diff --git a/test/unit_tests/arkode/CXX_serial/ark_test_dahlquist_ark.cpp b/test/unit_tests/arkode/CXX_serial/ark_test_dahlquist_ark.cpp index 22d6856800..0a0fe13fe5 100644 --- a/test/unit_tests/arkode/CXX_serial/ark_test_dahlquist_ark.cpp +++ b/test/unit_tests/arkode/CXX_serial/ark_test_dahlquist_ark.cpp @@ -866,8 +866,11 @@ int check_rhs_evals(rk_type r_type, void* arkstep_mem, long int nfe_expected, if (check_flag(&flag, "ARKodeGetNumSteps", 1)) { return 1; } long int nfe, nfi; - flag = ARKStepGetNumRhsEvals(arkstep_mem, &nfe, &nfi); - if (check_flag(&flag, "ARKStepGetNumRhsEvals", 1)) { return 1; } + flag = ARKodeGetNumRhsEvals(arkstep_mem, 0, &nfe); + if (check_flag(&flag, "ARKodeGetNumRhsEvals", 1)) { return 1; } + + flag = ARKodeGetNumRhsEvals(arkstep_mem, 1, &nfi); + if (check_flag(&flag, "ARKodeGetNumRhsEvals", 1)) { return 1; } if (r_type == rk_type::expl || r_type == rk_type::imex) { diff --git a/test/unit_tests/arkode/CXX_serial/ark_test_dahlquist_erk.cpp b/test/unit_tests/arkode/CXX_serial/ark_test_dahlquist_erk.cpp index 2de9d17dca..525da5509f 100644 --- a/test/unit_tests/arkode/CXX_serial/ark_test_dahlquist_erk.cpp +++ b/test/unit_tests/arkode/CXX_serial/ark_test_dahlquist_erk.cpp @@ -452,8 +452,8 @@ int check_rhs_evals(void* erkstep_mem, long int nfe_expected) if (check_flag(&flag, "ARKodeGetNumSteps", 1)) { return 1; } long int nfe; - flag = ERKStepGetNumRhsEvals(erkstep_mem, &nfe); - if (check_flag(&flag, "ERKStepGetNumRhsEvals", 1)) { return 1; } + flag = ARKodeGetNumRhsEvals(erkstep_mem, 0, &nfe); + if (check_flag(&flag, "ARKodeGetNumRhsEvals", 1)) { return 1; } std::cout << "Fe RHS evals:\n" << " actual: " << nfe << "\n" diff --git a/test/unit_tests/arkode/CXX_serial/ark_test_dahlquist_mri.cpp b/test/unit_tests/arkode/CXX_serial/ark_test_dahlquist_mri.cpp index 202e1780ef..966d5425fb 100644 --- a/test/unit_tests/arkode/CXX_serial/ark_test_dahlquist_mri.cpp +++ b/test/unit_tests/arkode/CXX_serial/ark_test_dahlquist_mri.cpp @@ -402,8 +402,11 @@ int run_tests(MRISTEP_METHOD_TYPE type, ProblemOptions& prob_opts, flag = ARKodeGetNumSteps(mristep_mem, &mri_nst); if (check_flag(&flag, "ARKodeGetNumSteps", 1)) { return 1; } - flag = MRIStepGetNumRhsEvals(mristep_mem, &mri_nfse, &mri_nfsi); - if (check_flag(&flag, "MRIStepGetNumRhsEvals", 1)) { return 1; } + flag = ARKodeGetNumRhsEvals(mristep_mem, 0, &mri_nfse); + if (check_flag(&flag, "ARKodeGetNumRhsEvals", 1)) { return 1; } + + flag = ARKodeGetNumRhsEvals(mristep_mem, 1, &mri_nfsi); + if (check_flag(&flag, "ARKodeGetNumRhsEvals", 1)) { return 1; } if (type == MRISTEP_IMPLICIT || type == MRISTEP_IMEX) {