diff --git a/examples/arkode/CXX_serial/ark_heat2D.cpp b/examples/arkode/CXX_serial/ark_heat2D.cpp index 3c3951af41..f6d988428d 100644 --- a/examples/arkode/CXX_serial/ark_heat2D.cpp +++ b/examples/arkode/CXX_serial/ark_heat2D.cpp @@ -659,8 +659,8 @@ static int PSolve(sunrealtype t, N_Vector u, N_Vector f, N_Vector r, N_Vector z, static int InitUserData(UserData* udata) { // Diffusion coefficient - udata->kx = ONE*1000.0; - udata->ky = ONE*1000.0; + udata->kx = ONE*10.0; + udata->ky = ONE*10.0; // Enable forcing udata->forcing = true; diff --git a/examples/arkode/CXX_serial/ark_heat2D_lsrk.cpp b/examples/arkode/CXX_serial/ark_heat2D_lsrk.cpp index 64724f4e8f..e5c41df1e0 100644 --- a/examples/arkode/CXX_serial/ark_heat2D_lsrk.cpp +++ b/examples/arkode/CXX_serial/ark_heat2D_lsrk.cpp @@ -142,7 +142,7 @@ struct UserData static int f(sunrealtype t, N_Vector u, N_Vector f, void* user_data); // Spectral radius estimation routine -static int eig(sunrealtype t, sunrealtype* lambdaR, +static int eig(sunrealtype t, N_Vector y, sunrealtype* lambdaR, sunrealtype* lambdaI, void* user_data); // ----------------------------------------------------------------------------- @@ -522,7 +522,7 @@ static int f(sunrealtype t, N_Vector u, N_Vector f, void* user_data) // Spectral radius estimation routine -static int eig(sunrealtype t, sunrealtype* lambdaR, sunrealtype* lambdaI, void* user_data) +static int eig(sunrealtype t, N_Vector y, sunrealtype* lambdaR, sunrealtype* lambdaI, void* user_data) { // Access problem data UserData* udata = (UserData*)user_data; @@ -549,8 +549,8 @@ static int eig(sunrealtype t, sunrealtype* lambdaR, sunrealtype* lambdaI, void* static int InitUserData(UserData* udata) { // Diffusion coefficient - udata->kx = ONE*1000.0; - udata->ky = ONE*1000.0; + udata->kx = ONE*10.0; + udata->ky = ONE*10.0; // Enable forcing udata->forcing = true; diff --git a/examples/arkode/C_serial/lsrk_analytic.c b/examples/arkode/C_serial/lsrk_analytic.c index a826d33e90..4c7888bf83 100644 --- a/examples/arkode/C_serial/lsrk_analytic.c +++ b/examples/arkode/C_serial/lsrk_analytic.c @@ -50,7 +50,7 @@ static int f(sunrealtype t, N_Vector y, N_Vector ydot, void* user_data); /* User-supplied Dominated Eigenvalue Called by the Solver */ -static int DomEig(sunrealtype t, sunrealtype* lambdaR, sunrealtype* lambdaI, void* user_data); +static int DomEig(sunrealtype t, N_Vector y, sunrealtype* lambdaR, sunrealtype* lambdaI, void* user_data); /* Private function to check function return values */ static int check_flag(void* flagvalue, const char* funcname, int opt); @@ -211,7 +211,7 @@ static int f(sunrealtype t, N_Vector y, N_Vector ydot, void* user_data) } /* DomEig routine to estimate the dominated eigenvalue */ -static int DomEig(sunrealtype t, sunrealtype* lambdaR, sunrealtype* lambdaI, void* user_data) +static int DomEig(sunrealtype t, N_Vector y, sunrealtype* lambdaR, sunrealtype* lambdaI, void* user_data) { sunrealtype* rdata = (sunrealtype*)user_data; /* cast user_data to sunrealtype */ sunrealtype lambda = rdata[0]; /* set shortcut for stiffness parameter */ diff --git a/examples/arkode/C_serial/lsrk_analytic_VarJac.c b/examples/arkode/C_serial/lsrk_analytic_VarJac.c index b8471ee2f8..a31d102b52 100644 --- a/examples/arkode/C_serial/lsrk_analytic_VarJac.c +++ b/examples/arkode/C_serial/lsrk_analytic_VarJac.c @@ -51,7 +51,7 @@ static int f(sunrealtype t, N_Vector y, N_Vector ydot, void* user_data); /* User-supplied Dominated Eigenvalue Called by the Solver */ -static int DomEig(sunrealtype t, sunrealtype* lambdaR, sunrealtype* lambdaI, void* user_data); +static int DomEig(sunrealtype t, N_Vector y, sunrealtype* lambdaR, sunrealtype* lambdaI, void* user_data); /* Private function to check function return values */ static int check_flag(void* flagvalue, const char* funcname, int opt); @@ -220,7 +220,7 @@ static int f(sunrealtype t, N_Vector y, N_Vector ydot, void* user_data) } /* DomEig routine to estimate the dominated eigenvalue */ -static int DomEig(sunrealtype t, sunrealtype* lambdaR, sunrealtype* lambdaI, void* user_data) +static int DomEig(sunrealtype t, N_Vector y, sunrealtype* lambdaR, sunrealtype* lambdaI, void* user_data) { sunrealtype* rdata = (sunrealtype*)user_data; /* cast user_data to sunrealtype */ sunrealtype lambda = rdata[0]; /* set shortcut for stiffness parameter 1 */ diff --git a/include/arkode/arkode_lsrkstep.h b/include/arkode/arkode_lsrkstep.h index 427a082f2f..36d9fc3ccd 100644 --- a/include/arkode/arkode_lsrkstep.h +++ b/include/arkode/arkode_lsrkstep.h @@ -23,7 +23,7 @@ extern "C" { #endif -typedef int (*ARKDomEigFn)(sunrealtype t, sunrealtype* lambdaR, sunrealtype* lambdaI, void* user_data); +typedef int (*ARKDomEigFn)(sunrealtype t, N_Vector y, sunrealtype* lambdaR, sunrealtype* lambdaI, void* user_data); /* ------------------ * LSRKStep Constants diff --git a/src/arkode/arkode_lsrkstep.c b/src/arkode/arkode_lsrkstep.c index 8c01141fc3..185c408960 100644 --- a/src/arkode/arkode_lsrkstep.c +++ b/src/arkode/arkode_lsrkstep.c @@ -1002,7 +1002,7 @@ int lsrkStep_ComputeNewDomEig(ARKodeMem ark_mem, ARKodeLSRKStepMem step_mem) if ((step_mem->isextDomEig)) { - retval = step_mem->extDomEig(ark_mem->tn, &step_mem->lambdaR, &step_mem->lambdaI, ark_mem->user_data); + retval = step_mem->extDomEig(ark_mem->tn, ark_mem->ycur, &step_mem->lambdaR, &step_mem->lambdaI, ark_mem->user_data); if (retval != ARK_SUCCESS) { arkProcessError(ark_mem, ARK_DOMEIG_FAIL, __LINE__, __func__, __FILE__, @@ -1010,6 +1010,7 @@ int lsrkStep_ComputeNewDomEig(ARKodeMem ark_mem, ARKodeLSRKStepMem step_mem) return (ARK_DOMEIG_FAIL); } + if(step_mem->lambdaR*ark_mem->h > ZERO) { printf("\nlambdaR*h must be nonpositive\n");