diff --git a/include/arkode/arkode_arkstep.h b/include/arkode/arkode_arkstep.h index a144ebe905..a4951bb888 100644 --- a/include/arkode/arkode_arkstep.h +++ b/include/arkode/arkode_arkstep.h @@ -478,10 +478,10 @@ SUNDIALS_EXPORT int ARKStepCreateMRIStepInnerStepper(void *arkode_mem, /* Relaxation functions */ SUNDIALS_EXPORT int ARKStepSetRelaxFn(void* arkode_mem, ARKRelaxFn rfn, ARKRelaxJacFn rjac); -SUNDIALS_EXPORT int ARKStepSetRelaxBoundFactor(void* arkode_mem, - sunrealtype bound_factor); SUNDIALS_EXPORT int ARKStepSetRelaxEtaFail(void* arkode_mem, sunrealtype eta_rf); +SUNDIALS_EXPORT int ARKStepSetRelaxLowerBound(void* arkode_mem, + sunrealtype lower); SUNDIALS_EXPORT int ARKStepSetRelaxMaxFails(void* arkode_mem, int max_fails); SUNDIALS_EXPORT int ARKStepSetRelaxMaxIters(void* arkode_mem, int max_iters); SUNDIALS_EXPORT int ARKStepSetRelaxSolver(void* arkode_mem, @@ -490,6 +490,8 @@ SUNDIALS_EXPORT int ARKStepSetRelaxResTol(void* arkode_mem, sunrealtype res_tol); SUNDIALS_EXPORT int ARKStepSetRelaxTol(void* arkode_mem, sunrealtype rel_tol, sunrealtype abs_tol); +SUNDIALS_EXPORT int ARKStepSetRelaxUpperBound(void* arkode_mem, + sunrealtype upper); SUNDIALS_EXPORT int ARKStepGetNumRelaxFnEvals(void* arkode_mem, long int* r_evals); SUNDIALS_EXPORT int ARKStepGetNumRelaxJacEvals(void* arkode_mem, diff --git a/include/arkode/arkode_erkstep.h b/include/arkode/arkode_erkstep.h index 7cf11406dc..9f5b56f072 100644 --- a/include/arkode/arkode_erkstep.h +++ b/include/arkode/arkode_erkstep.h @@ -265,10 +265,10 @@ SUNDIALS_EXPORT void ERKStepPrintMem(void* arkode_mem, FILE* outfile); /* Relaxation functions */ SUNDIALS_EXPORT int ERKStepSetRelaxFn(void* arkode_mem, ARKRelaxFn rfn, ARKRelaxJacFn rjac); -SUNDIALS_EXPORT int ERKStepSetRelaxBoundFactor(void* arkode_mem, - sunrealtype bound_factor); SUNDIALS_EXPORT int ERKStepSetRelaxEtaFail(void* arkode_mem, sunrealtype eta_rf); +SUNDIALS_EXPORT int ERKStepSetRelaxLowerBound(void* arkode_mem, + sunrealtype lower); SUNDIALS_EXPORT int ERKStepSetRelaxMaxFails(void* arkode_mem, int max_fails); SUNDIALS_EXPORT int ERKStepSetRelaxMaxIters(void* arkode_mem, int max_iters); SUNDIALS_EXPORT int ERKStepSetRelaxSolver(void* arkode_mem, @@ -277,6 +277,8 @@ SUNDIALS_EXPORT int ERKStepSetRelaxResTol(void* arkode_mem, sunrealtype res_tol); SUNDIALS_EXPORT int ERKStepSetRelaxTol(void* arkode_mem, sunrealtype rel_tol, sunrealtype abs_tol); +SUNDIALS_EXPORT int ERKStepSetRelaxUpperBound(void* arkode_mem, + sunrealtype upper); SUNDIALS_EXPORT int ERKStepGetNumRelaxFnEvals(void* arkode_mem, long int* r_evals); SUNDIALS_EXPORT int ERKStepGetNumRelaxJacEvals(void* arkode_mem, diff --git a/src/arkode/arkode_arkstep_io.c b/src/arkode/arkode_arkstep_io.c index 2391e7ba26..50f9182a75 100644 --- a/src/arkode/arkode_arkstep_io.c +++ b/src/arkode/arkode_arkstep_io.c @@ -272,14 +272,14 @@ int ARKStepSetRelaxFn(void* arkode_mem, ARKRelaxFn rfn, ARKRelaxJacFn rjac) arkStep_RelaxDeltaE, arkStep_GetOrder); } -int ARKStepSetRelaxBoundFactor(void* arkode_mem, sunrealtype bound_factor) +int ARKStepSetRelaxEtaFail(void* arkode_mem, sunrealtype eta_rf) { - return arkRelaxSetBoundFactor(arkode_mem, bound_factor); + return arkRelaxSetEtaFail(arkode_mem, eta_rf); } -int ARKStepSetRelaxEtaFail(void* arkode_mem, sunrealtype eta_rf) +int ARKStepSetRelaxLowerBound(void* arkode_mem, sunrealtype lower) { - return arkRelaxSetEtaFail(arkode_mem, eta_rf); + return arkRelaxSetLowerBound(arkode_mem, lower); } int ARKStepSetRelaxMaxFails(void* arkode_mem, int max_fails) @@ -308,6 +308,11 @@ int ARKStepSetRelaxTol(void* arkode_mem, sunrealtype rel_tol, return arkRelaxSetTol(arkode_mem, rel_tol, abs_tol); } +int ARKStepSetRelaxUpperBound(void* arkode_mem, sunrealtype upper) +{ + return arkRelaxSetUpperBound(arkode_mem, upper); +} + int ARKStepGetNumRelaxFnEvals(void* arkode_mem, long int* r_evals) { return arkRelaxGetNumRelaxFnEvals(arkode_mem, r_evals); diff --git a/src/arkode/arkode_erkstep_io.c b/src/arkode/arkode_erkstep_io.c index 2aee8caf9b..34bb7d46c2 100644 --- a/src/arkode/arkode_erkstep_io.c +++ b/src/arkode/arkode_erkstep_io.c @@ -163,14 +163,14 @@ int ERKStepSetRelaxFn(void* arkode_mem, ARKRelaxFn rfn, ARKRelaxJacFn rjac) erkStep_RelaxDeltaE, erkStep_GetOrder); } -int ERKStepSetRelaxBoundFactor(void* arkode_mem, sunrealtype bound_factor) +int ERKStepSetRelaxEtaFail(void* arkode_mem, sunrealtype eta_rf) { - return arkRelaxSetBoundFactor(arkode_mem, bound_factor); + return arkRelaxSetEtaFail(arkode_mem, eta_rf); } -int ERKStepSetRelaxEtaFail(void* arkode_mem, sunrealtype eta_rf) +int ERKStepSetRelaxLowerBound(void* arkode_mem, sunrealtype lower) { - return arkRelaxSetEtaFail(arkode_mem, eta_rf); + return arkRelaxSetLowerBound(arkode_mem, lower); } int ERKStepSetRelaxMaxFails(void* arkode_mem, int max_fails) @@ -199,6 +199,11 @@ int ERKStepSetRelaxTol(void* arkode_mem, sunrealtype rel_tol, return arkRelaxSetTol(arkode_mem, rel_tol, abs_tol); } +int ERKStepSetRelaxUpperBound(void* arkode_mem, sunrealtype upper) +{ + return arkRelaxSetUpperBound(arkode_mem, upper); +} + int ERKStepGetNumRelaxFnEvals(void* arkode_mem, long int* r_evals) { return arkRelaxGetNumRelaxFnEvals(arkode_mem, r_evals); diff --git a/src/arkode/arkode_relaxation.c b/src/arkode/arkode_relaxation.c index 1e43162df5..f8f5f65006 100644 --- a/src/arkode/arkode_relaxation.c +++ b/src/arkode/arkode_relaxation.c @@ -376,8 +376,8 @@ int arkRelaxSolve(ARKodeMem ark_mem, ARKodeRelaxMem relax_mem, } /* Check for bad relaxation value */ - if (SUNRabs(relax_mem->relax_param - ONE) > - relax_mem->bound_factor * SUNRabs(ark_mem->h)) + if (ark_mem->relax_mem->relax_param < relax_mem->lower_bound || + ark_mem->relax_mem->relax_param > relax_mem->upper_bound) { relax_mem->bound_fails++; return ARK_RELAX_SOLVE_RECV; @@ -400,34 +400,34 @@ int arkRelaxSolve(ARKodeMem ark_mem, ARKodeRelaxMem relax_mem, * Set functions * ---------------------------------------------------------------------------*/ -int arkRelaxSetBoundFactor(void* arkode_mem, sunrealtype bound_factor) +int arkRelaxSetEtaFail(void* arkode_mem, sunrealtype eta_fail) { int retval; ARKodeMem ark_mem; ARKodeRelaxMem relax_mem; - retval = arkRelaxAccessMem(arkode_mem, "arkRelaxSetBoundFactor", &ark_mem, + retval = arkRelaxAccessMem(arkode_mem, "arkRelaxSetEtaFail", &ark_mem, &relax_mem); if (retval) return retval; - if (bound_factor > ZERO) { relax_mem->bound_factor = bound_factor; } - else { relax_mem->bound_factor = ARK_RELAX_DEFAULT_BOUND_FACTOR; } + if (eta_fail > ZERO && eta_fail < ONE) { relax_mem->eta_fail = eta_fail; } + else { relax_mem->eta_fail = ARK_RELAX_DEFAULT_ETA_FAIL; } return ARK_SUCCESS; } -int arkRelaxSetEtaFail(void* arkode_mem, sunrealtype eta_fail) +int arkRelaxSetLowerBound(void* arkode_mem, sunrealtype lower) { int retval; ARKodeMem ark_mem; ARKodeRelaxMem relax_mem; - retval = arkRelaxAccessMem(arkode_mem, "arkRelaxSetEtaFail", &ark_mem, + retval = arkRelaxAccessMem(arkode_mem, "arkRelaxSetLowerBound", &ark_mem, &relax_mem); if (retval) return retval; - if (eta_fail > ZERO && eta_fail < ONE) { relax_mem->eta_fail = eta_fail; } - else { relax_mem->eta_fail = ARK_RELAX_DEFAULT_ETA_FAIL; } + if (lower > ZERO && lower < ONE) { relax_mem->lower_bound = lower; } + else { relax_mem->lower_bound = ARK_RELAX_DEFAULT_LOWER_BOUND; } return ARK_SUCCESS; } @@ -521,6 +521,22 @@ int arkRelaxSetTol(void* arkode_mem, sunrealtype rel_tol, sunrealtype abs_tol) return ARK_SUCCESS; } +int arkRelaxSetUpperBound(void* arkode_mem, sunrealtype upper) +{ + int retval; + ARKodeMem ark_mem; + ARKodeRelaxMem relax_mem; + + retval = arkRelaxAccessMem(arkode_mem, "arkRelaxSetUpperBound", &ark_mem, + &relax_mem); + if (retval) return retval; + + if (upper > ONE) { relax_mem->upper_bound = upper; } + else { relax_mem->upper_bound = ARK_RELAX_DEFAULT_UPPER_BOUND; } + + return ARK_SUCCESS; +} + /* ----------------------------------------------------------------------------- * Get functions * ---------------------------------------------------------------------------*/ @@ -713,14 +729,15 @@ int arkRelaxCreate(void* arkode_mem, ARKRelaxFn relax_fn, memset(ark_mem->relax_mem, 0, sizeof(struct ARKodeRelaxMemRec)); /* Set defaults */ - ark_mem->relax_mem->max_fails = ARK_RELAX_DEFAULT_MAX_FAILS; - ark_mem->relax_mem->bound_factor = ARK_RELAX_DEFAULT_BOUND_FACTOR; - ark_mem->relax_mem->eta_fail = ARK_RELAX_DEFAULT_ETA_FAIL; - ark_mem->relax_mem->solver = ARK_RELAX_NEWTON; - ark_mem->relax_mem->res_tol = ARK_RELAX_DEFAULT_RES_TOL; - ark_mem->relax_mem->rel_tol = ARK_RELAX_DEFAULT_REL_TOL; - ark_mem->relax_mem->abs_tol = ARK_RELAX_DEFAULT_ABS_TOL; - ark_mem->relax_mem->max_iters = ARK_RELAX_DEFAULT_MAX_ITERS; + ark_mem->relax_mem->max_fails = ARK_RELAX_DEFAULT_MAX_FAILS; + ark_mem->relax_mem->lower_bound = ARK_RELAX_DEFAULT_LOWER_BOUND; + ark_mem->relax_mem->upper_bound = ARK_RELAX_DEFAULT_UPPER_BOUND; + ark_mem->relax_mem->eta_fail = ARK_RELAX_DEFAULT_ETA_FAIL; + ark_mem->relax_mem->solver = ARK_RELAX_NEWTON; + ark_mem->relax_mem->res_tol = ARK_RELAX_DEFAULT_RES_TOL; + ark_mem->relax_mem->rel_tol = ARK_RELAX_DEFAULT_REL_TOL; + ark_mem->relax_mem->abs_tol = ARK_RELAX_DEFAULT_ABS_TOL; + ark_mem->relax_mem->max_iters = ARK_RELAX_DEFAULT_MAX_ITERS; /* Initialize values */ ark_mem->relax_mem->relax_param_prev = ONE; diff --git a/src/arkode/arkode_relaxation_impl.h b/src/arkode/arkode_relaxation_impl.h index 3dd97ade7b..9a6e5b4c38 100644 --- a/src/arkode/arkode_relaxation_impl.h +++ b/src/arkode/arkode_relaxation_impl.h @@ -29,13 +29,14 @@ * Relaxation Constants * ---------------------------------------------------------------------------*/ -#define ARK_RELAX_DEFAULT_MAX_FAILS 10 -#define ARK_RELAX_DEFAULT_RES_TOL (4 * SUN_UNIT_ROUNDOFF) -#define ARK_RELAX_DEFAULT_REL_TOL (4 * SUN_UNIT_ROUNDOFF) -#define ARK_RELAX_DEFAULT_ABS_TOL SUN_RCONST(1.0e-14) -#define ARK_RELAX_DEFAULT_MAX_ITERS 10 -#define ARK_RELAX_DEFAULT_BOUND_FACTOR SUN_RCONST(0.5) -#define ARK_RELAX_DEFAULT_ETA_FAIL SUN_RCONST(0.25) +#define ARK_RELAX_DEFAULT_MAX_FAILS 10 +#define ARK_RELAX_DEFAULT_RES_TOL (4 * SUN_UNIT_ROUNDOFF) +#define ARK_RELAX_DEFAULT_REL_TOL (4 * SUN_UNIT_ROUNDOFF) +#define ARK_RELAX_DEFAULT_ABS_TOL SUN_RCONST(1.0e-14) +#define ARK_RELAX_DEFAULT_MAX_ITERS 10 +#define ARK_RELAX_DEFAULT_LOWER_BOUND SUN_RCONST(0.8) +#define ARK_RELAX_DEFAULT_UPPER_BOUND SUN_RCONST(1.2) +#define ARK_RELAX_DEFAULT_ETA_FAIL SUN_RCONST(0.25) /* ----------------------------------------------------------------------------- * Relaxation Private Return Values (see arkode/arkode.h for public values) @@ -83,7 +84,8 @@ struct ARKodeRelaxMemRec sunrealtype jac; /* relaxation Jacobian value */ sunrealtype relax_param; /* current relaxation parameter value */ sunrealtype relax_param_prev; /* previous relaxation parameter value */ - sunrealtype bound_factor; /* relax param acceptance threshold */ + sunrealtype lower_bound; /* smallest allowed relaxation value */ + sunrealtype upper_bound; /* largest allowed relaxation value */ sunrealtype eta_fail; /* failed relaxation step size factor */ /* nonlinear solver settings */ @@ -111,13 +113,14 @@ int arkRelax(ARKodeMem ark_mem, int* relax_fails, sunrealtype* dsm_inout, int* nflag_out); /* User Functions */ -int arkRelaxSetBoundFactor(void* arkode_mem, sunrealtype bound_factor); int arkRelaxSetEtaFail(void* arkode_mem, sunrealtype eta_fail); +int arkRelaxSetLowerBound(void* arkode_mem, sunrealtype lower); int arkRelaxSetMaxFails(void* arkode_mem, int max_fails); int arkRelaxSetMaxIters(void* arkode_mem, int max_iters); int arkRelaxSetSolver(void* arkode_mem, ARKRelaxSolver solver); int arkRelaxSetResTol(void* arkode_mem, sunrealtype res_tol); int arkRelaxSetTol(void* arkode_mem, sunrealtype rel_tol, sunrealtype abs_tol); +int arkRelaxSetUpperBound(void* arkode_mem, sunrealtype upper); int arkRelaxGetNumRelaxFnEvals(void* arkode_mem, long int* r_evals); int arkRelaxGetNumRelaxJacEvals(void* arkode_mem, long int* j_evals); diff --git a/src/arkode/fmod/farkode_arkstep_mod.c b/src/arkode/fmod/farkode_arkstep_mod.c index fc68746a42..2ae77231a3 100644 --- a/src/arkode/fmod/farkode_arkstep_mod.c +++ b/src/arkode/fmod/farkode_arkstep_mod.c @@ -2475,7 +2475,7 @@ SWIGEXPORT int _wrap_FARKStepSetRelaxFn(void *farg1, ARKRelaxFn farg2, ARKRelaxJ } -SWIGEXPORT int _wrap_FARKStepSetRelaxBoundFactor(void *farg1, double const *farg2) { +SWIGEXPORT int _wrap_FARKStepSetRelaxEtaFail(void *farg1, double const *farg2) { int fresult ; void *arg1 = (void *) 0 ; sunrealtype arg2 ; @@ -2483,13 +2483,13 @@ SWIGEXPORT int _wrap_FARKStepSetRelaxBoundFactor(void *farg1, double const *farg arg1 = (void *)(farg1); arg2 = (sunrealtype)(*farg2); - result = (int)ARKStepSetRelaxBoundFactor(arg1,arg2); + result = (int)ARKStepSetRelaxEtaFail(arg1,arg2); fresult = (int)(result); return fresult; } -SWIGEXPORT int _wrap_FARKStepSetRelaxEtaFail(void *farg1, double const *farg2) { +SWIGEXPORT int _wrap_FARKStepSetRelaxLowerBound(void *farg1, double const *farg2) { int fresult ; void *arg1 = (void *) 0 ; sunrealtype arg2 ; @@ -2497,7 +2497,7 @@ SWIGEXPORT int _wrap_FARKStepSetRelaxEtaFail(void *farg1, double const *farg2) { arg1 = (void *)(farg1); arg2 = (sunrealtype)(*farg2); - result = (int)ARKStepSetRelaxEtaFail(arg1,arg2); + result = (int)ARKStepSetRelaxLowerBound(arg1,arg2); fresult = (int)(result); return fresult; } @@ -2575,6 +2575,20 @@ SWIGEXPORT int _wrap_FARKStepSetRelaxTol(void *farg1, double const *farg2, doubl } +SWIGEXPORT int _wrap_FARKStepSetRelaxUpperBound(void *farg1, double const *farg2) { + int fresult ; + void *arg1 = (void *) 0 ; + sunrealtype arg2 ; + int result; + + arg1 = (void *)(farg1); + arg2 = (sunrealtype)(*farg2); + result = (int)ARKStepSetRelaxUpperBound(arg1,arg2); + fresult = (int)(result); + return fresult; +} + + SWIGEXPORT int _wrap_FARKStepGetNumRelaxFnEvals(void *farg1, long *farg2) { int fresult ; void *arg1 = (void *) 0 ; diff --git a/src/arkode/fmod/farkode_arkstep_mod.f90 b/src/arkode/fmod/farkode_arkstep_mod.f90 index 67be97b821..c52006c929 100644 --- a/src/arkode/fmod/farkode_arkstep_mod.f90 +++ b/src/arkode/fmod/farkode_arkstep_mod.f90 @@ -214,13 +214,14 @@ module farkode_arkstep_mod public :: FARKStepPrintMem public :: FARKStepCreateMRIStepInnerStepper public :: FARKStepSetRelaxFn - public :: FARKStepSetRelaxBoundFactor public :: FARKStepSetRelaxEtaFail + public :: FARKStepSetRelaxLowerBound public :: FARKStepSetRelaxMaxFails public :: FARKStepSetRelaxMaxIters public :: FARKStepSetRelaxSolver public :: FARKStepSetRelaxResTol public :: FARKStepSetRelaxTol + public :: FARKStepSetRelaxUpperBound public :: FARKStepGetNumRelaxFnEvals public :: FARKStepGetNumRelaxJacEvals public :: FARKStepGetNumRelaxFails @@ -1664,8 +1665,8 @@ function swigc_FARKStepSetRelaxFn(farg1, farg2, farg3) & integer(C_INT) :: fresult end function -function swigc_FARKStepSetRelaxBoundFactor(farg1, farg2) & -bind(C, name="_wrap_FARKStepSetRelaxBoundFactor") & +function swigc_FARKStepSetRelaxEtaFail(farg1, farg2) & +bind(C, name="_wrap_FARKStepSetRelaxEtaFail") & result(fresult) use, intrinsic :: ISO_C_BINDING type(C_PTR), value :: farg1 @@ -1673,8 +1674,8 @@ function swigc_FARKStepSetRelaxBoundFactor(farg1, farg2) & integer(C_INT) :: fresult end function -function swigc_FARKStepSetRelaxEtaFail(farg1, farg2) & -bind(C, name="_wrap_FARKStepSetRelaxEtaFail") & +function swigc_FARKStepSetRelaxLowerBound(farg1, farg2) & +bind(C, name="_wrap_FARKStepSetRelaxLowerBound") & result(fresult) use, intrinsic :: ISO_C_BINDING type(C_PTR), value :: farg1 @@ -1728,6 +1729,15 @@ function swigc_FARKStepSetRelaxTol(farg1, farg2, farg3) & integer(C_INT) :: fresult end function +function swigc_FARKStepSetRelaxUpperBound(farg1, farg2) & +bind(C, name="_wrap_FARKStepSetRelaxUpperBound") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +type(C_PTR), value :: farg1 +real(C_DOUBLE), intent(in) :: farg2 +integer(C_INT) :: fresult +end function + function swigc_FARKStepGetNumRelaxFnEvals(farg1, farg2) & bind(C, name="_wrap_FARKStepGetNumRelaxFnEvals") & result(fresult) @@ -4423,35 +4433,35 @@ function FARKStepSetRelaxFn(arkode_mem, rfn, rjac) & swig_result = fresult end function -function FARKStepSetRelaxBoundFactor(arkode_mem, bound_factor) & +function FARKStepSetRelaxEtaFail(arkode_mem, eta_rf) & result(swig_result) use, intrinsic :: ISO_C_BINDING integer(C_INT) :: swig_result type(C_PTR) :: arkode_mem -real(C_DOUBLE), intent(in) :: bound_factor +real(C_DOUBLE), intent(in) :: eta_rf integer(C_INT) :: fresult type(C_PTR) :: farg1 real(C_DOUBLE) :: farg2 farg1 = arkode_mem -farg2 = bound_factor -fresult = swigc_FARKStepSetRelaxBoundFactor(farg1, farg2) +farg2 = eta_rf +fresult = swigc_FARKStepSetRelaxEtaFail(farg1, farg2) swig_result = fresult end function -function FARKStepSetRelaxEtaFail(arkode_mem, eta_rf) & +function FARKStepSetRelaxLowerBound(arkode_mem, lower) & result(swig_result) use, intrinsic :: ISO_C_BINDING integer(C_INT) :: swig_result type(C_PTR) :: arkode_mem -real(C_DOUBLE), intent(in) :: eta_rf +real(C_DOUBLE), intent(in) :: lower integer(C_INT) :: fresult type(C_PTR) :: farg1 real(C_DOUBLE) :: farg2 farg1 = arkode_mem -farg2 = eta_rf -fresult = swigc_FARKStepSetRelaxEtaFail(farg1, farg2) +farg2 = lower +fresult = swigc_FARKStepSetRelaxLowerBound(farg1, farg2) swig_result = fresult end function @@ -4538,6 +4548,22 @@ function FARKStepSetRelaxTol(arkode_mem, rel_tol, abs_tol) & swig_result = fresult end function +function FARKStepSetRelaxUpperBound(arkode_mem, upper) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +integer(C_INT) :: swig_result +type(C_PTR) :: arkode_mem +real(C_DOUBLE), intent(in) :: upper +integer(C_INT) :: fresult +type(C_PTR) :: farg1 +real(C_DOUBLE) :: farg2 + +farg1 = arkode_mem +farg2 = upper +fresult = swigc_FARKStepSetRelaxUpperBound(farg1, farg2) +swig_result = fresult +end function + function FARKStepGetNumRelaxFnEvals(arkode_mem, r_evals) & result(swig_result) use, intrinsic :: ISO_C_BINDING diff --git a/src/arkode/fmod/farkode_erkstep_mod.c b/src/arkode/fmod/farkode_erkstep_mod.c index 76687fb692..46836ba780 100644 --- a/src/arkode/fmod/farkode_erkstep_mod.c +++ b/src/arkode/fmod/farkode_erkstep_mod.c @@ -1378,7 +1378,7 @@ SWIGEXPORT int _wrap_FERKStepSetRelaxFn(void *farg1, ARKRelaxFn farg2, ARKRelaxJ } -SWIGEXPORT int _wrap_FERKStepSetRelaxBoundFactor(void *farg1, double const *farg2) { +SWIGEXPORT int _wrap_FERKStepSetRelaxEtaFail(void *farg1, double const *farg2) { int fresult ; void *arg1 = (void *) 0 ; sunrealtype arg2 ; @@ -1386,13 +1386,13 @@ SWIGEXPORT int _wrap_FERKStepSetRelaxBoundFactor(void *farg1, double const *farg arg1 = (void *)(farg1); arg2 = (sunrealtype)(*farg2); - result = (int)ERKStepSetRelaxBoundFactor(arg1,arg2); + result = (int)ERKStepSetRelaxEtaFail(arg1,arg2); fresult = (int)(result); return fresult; } -SWIGEXPORT int _wrap_FERKStepSetRelaxEtaFail(void *farg1, double const *farg2) { +SWIGEXPORT int _wrap_FERKStepSetRelaxLowerBound(void *farg1, double const *farg2) { int fresult ; void *arg1 = (void *) 0 ; sunrealtype arg2 ; @@ -1400,7 +1400,7 @@ SWIGEXPORT int _wrap_FERKStepSetRelaxEtaFail(void *farg1, double const *farg2) { arg1 = (void *)(farg1); arg2 = (sunrealtype)(*farg2); - result = (int)ERKStepSetRelaxEtaFail(arg1,arg2); + result = (int)ERKStepSetRelaxLowerBound(arg1,arg2); fresult = (int)(result); return fresult; } @@ -1478,6 +1478,20 @@ SWIGEXPORT int _wrap_FERKStepSetRelaxTol(void *farg1, double const *farg2, doubl } +SWIGEXPORT int _wrap_FERKStepSetRelaxUpperBound(void *farg1, double const *farg2) { + int fresult ; + void *arg1 = (void *) 0 ; + sunrealtype arg2 ; + int result; + + arg1 = (void *)(farg1); + arg2 = (sunrealtype)(*farg2); + result = (int)ERKStepSetRelaxUpperBound(arg1,arg2); + fresult = (int)(result); + return fresult; +} + + SWIGEXPORT int _wrap_FERKStepGetNumRelaxFnEvals(void *farg1, long *farg2) { int fresult ; void *arg1 = (void *) 0 ; diff --git a/src/arkode/fmod/farkode_erkstep_mod.f90 b/src/arkode/fmod/farkode_erkstep_mod.f90 index fd8fef7ab8..3857ac1a7d 100644 --- a/src/arkode/fmod/farkode_erkstep_mod.f90 +++ b/src/arkode/fmod/farkode_erkstep_mod.f90 @@ -127,13 +127,14 @@ module farkode_erkstep_mod public :: FERKStepFree public :: FERKStepPrintMem public :: FERKStepSetRelaxFn - public :: FERKStepSetRelaxBoundFactor public :: FERKStepSetRelaxEtaFail + public :: FERKStepSetRelaxLowerBound public :: FERKStepSetRelaxMaxFails public :: FERKStepSetRelaxMaxIters public :: FERKStepSetRelaxSolver public :: FERKStepSetRelaxResTol public :: FERKStepSetRelaxTol + public :: FERKStepSetRelaxUpperBound public :: FERKStepGetNumRelaxFnEvals public :: FERKStepGetNumRelaxJacEvals public :: FERKStepGetNumRelaxFails @@ -878,8 +879,8 @@ function swigc_FERKStepSetRelaxFn(farg1, farg2, farg3) & integer(C_INT) :: fresult end function -function swigc_FERKStepSetRelaxBoundFactor(farg1, farg2) & -bind(C, name="_wrap_FERKStepSetRelaxBoundFactor") & +function swigc_FERKStepSetRelaxEtaFail(farg1, farg2) & +bind(C, name="_wrap_FERKStepSetRelaxEtaFail") & result(fresult) use, intrinsic :: ISO_C_BINDING type(C_PTR), value :: farg1 @@ -887,8 +888,8 @@ function swigc_FERKStepSetRelaxBoundFactor(farg1, farg2) & integer(C_INT) :: fresult end function -function swigc_FERKStepSetRelaxEtaFail(farg1, farg2) & -bind(C, name="_wrap_FERKStepSetRelaxEtaFail") & +function swigc_FERKStepSetRelaxLowerBound(farg1, farg2) & +bind(C, name="_wrap_FERKStepSetRelaxLowerBound") & result(fresult) use, intrinsic :: ISO_C_BINDING type(C_PTR), value :: farg1 @@ -942,6 +943,15 @@ function swigc_FERKStepSetRelaxTol(farg1, farg2, farg3) & integer(C_INT) :: fresult end function +function swigc_FERKStepSetRelaxUpperBound(farg1, farg2) & +bind(C, name="_wrap_FERKStepSetRelaxUpperBound") & +result(fresult) +use, intrinsic :: ISO_C_BINDING +type(C_PTR), value :: farg1 +real(C_DOUBLE), intent(in) :: farg2 +integer(C_INT) :: fresult +end function + function swigc_FERKStepGetNumRelaxFnEvals(farg1, farg2) & bind(C, name="_wrap_FERKStepGetNumRelaxFnEvals") & result(fresult) @@ -2365,35 +2375,35 @@ function FERKStepSetRelaxFn(arkode_mem, rfn, rjac) & swig_result = fresult end function -function FERKStepSetRelaxBoundFactor(arkode_mem, bound_factor) & +function FERKStepSetRelaxEtaFail(arkode_mem, eta_rf) & result(swig_result) use, intrinsic :: ISO_C_BINDING integer(C_INT) :: swig_result type(C_PTR) :: arkode_mem -real(C_DOUBLE), intent(in) :: bound_factor +real(C_DOUBLE), intent(in) :: eta_rf integer(C_INT) :: fresult type(C_PTR) :: farg1 real(C_DOUBLE) :: farg2 farg1 = arkode_mem -farg2 = bound_factor -fresult = swigc_FERKStepSetRelaxBoundFactor(farg1, farg2) +farg2 = eta_rf +fresult = swigc_FERKStepSetRelaxEtaFail(farg1, farg2) swig_result = fresult end function -function FERKStepSetRelaxEtaFail(arkode_mem, eta_rf) & +function FERKStepSetRelaxLowerBound(arkode_mem, lower) & result(swig_result) use, intrinsic :: ISO_C_BINDING integer(C_INT) :: swig_result type(C_PTR) :: arkode_mem -real(C_DOUBLE), intent(in) :: eta_rf +real(C_DOUBLE), intent(in) :: lower integer(C_INT) :: fresult type(C_PTR) :: farg1 real(C_DOUBLE) :: farg2 farg1 = arkode_mem -farg2 = eta_rf -fresult = swigc_FERKStepSetRelaxEtaFail(farg1, farg2) +farg2 = lower +fresult = swigc_FERKStepSetRelaxLowerBound(farg1, farg2) swig_result = fresult end function @@ -2480,6 +2490,22 @@ function FERKStepSetRelaxTol(arkode_mem, rel_tol, abs_tol) & swig_result = fresult end function +function FERKStepSetRelaxUpperBound(arkode_mem, upper) & +result(swig_result) +use, intrinsic :: ISO_C_BINDING +integer(C_INT) :: swig_result +type(C_PTR) :: arkode_mem +real(C_DOUBLE), intent(in) :: upper +integer(C_INT) :: fresult +type(C_PTR) :: farg1 +real(C_DOUBLE) :: farg2 + +farg1 = arkode_mem +farg2 = upper +fresult = swigc_FERKStepSetRelaxUpperBound(farg1, farg2) +swig_result = fresult +end function + function FERKStepGetNumRelaxFnEvals(arkode_mem, r_evals) & result(swig_result) use, intrinsic :: ISO_C_BINDING