/usr/include/cvode/cvode_spils.h is in libsundials-dev 2.7.0+dfsg-2build1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 | /*
* -----------------------------------------------------------------
* $Revision: 4378 $
* $Date: 2015-02-19 10:55:14 -0800 (Thu, 19 Feb 2015) $
* -----------------------------------------------------------------
* Programmer(s): Scott D. Cohen, Alan C. Hindmarsh and
* Radu Serban @ LLNL
* -----------------------------------------------------------------
* LLNS Copyright Start
* Copyright (c) 2014, Lawrence Livermore National Security
* This work was performed under the auspices of the U.S. Department
* of Energy by Lawrence Livermore National Laboratory in part under
* Contract W-7405-Eng-48 and in part under Contract DE-AC52-07NA27344.
* Produced at the Lawrence Livermore National Laboratory.
* All rights reserved.
* For details, see the LICENSE file.
* LLNS Copyright End
* -----------------------------------------------------------------
* This is the common header file for the Scaled, Preconditioned
* Iterative Linear Solvers in CVODE.
* -----------------------------------------------------------------
*/
#ifndef _CVSPILS_H
#define _CVSPILS_H
#include <sundials/sundials_iterative.h>
#include <sundials/sundials_nvector.h>
#ifdef __cplusplus /* wrapper to enable C++ usage */
extern "C" {
#endif
/*
* -----------------------------------------------------------------
* CVSPILS return values
* -----------------------------------------------------------------
*/
#define CVSPILS_SUCCESS 0
#define CVSPILS_MEM_NULL -1
#define CVSPILS_LMEM_NULL -2
#define CVSPILS_ILL_INPUT -3
#define CVSPILS_MEM_FAIL -4
#define CVSPILS_PMEM_NULL -5
/*
* -----------------------------------------------------------------
* CVSPILS solver constants
* -----------------------------------------------------------------
* CVSPILS_MAXL : default value for the maximum Krylov
* dimension
*
* CVSPILS_MSBPRE : maximum number of steps between
* preconditioner evaluations
*
* CVSPILS_DGMAX : maximum change in gamma between
* preconditioner evaluations
*
* CVSPILS_EPLIN : default value for factor by which the
* tolerance on the nonlinear iteration is
* multiplied to get a tolerance on the linear
* iteration
* -----------------------------------------------------------------
*/
#define CVSPILS_MAXL 5
#define CVSPILS_MSBPRE 50
#define CVSPILS_DGMAX RCONST(0.2)
#define CVSPILS_EPLIN RCONST(0.05)
/*
* -----------------------------------------------------------------
* Type : CVSpilsPrecSetupFn
* -----------------------------------------------------------------
* The user-supplied preconditioner setup function PrecSetup and
* the user-supplied preconditioner solve function PrecSolve
* together must define left and right preconditoner matrices
* P1 and P2 (either of which may be trivial), such that the
* product P1*P2 is an approximation to the Newton matrix
* M = I - gamma*J. Here J is the system Jacobian J = df/dy,
* and gamma is a scalar proportional to the integration step
* size h. The solution of systems P z = r, with P = P1 or P2,
* is to be carried out by the PrecSolve function, and PrecSetup
* is to do any necessary setup operations.
*
* The user-supplied preconditioner setup function PrecSetup
* is to evaluate and preprocess any Jacobian-related data
* needed by the preconditioner solve function PrecSolve.
* This might include forming a crude approximate Jacobian,
* and performing an LU factorization on the resulting
* approximation to M. This function will not be called in
* advance of every call to PrecSolve, but instead will be called
* only as often as necessary to achieve convergence within the
* Newton iteration. If the PrecSolve function needs no
* preparation, the PrecSetup function can be NULL.
*
* For greater efficiency, the PrecSetup function may save
* Jacobian-related data and reuse it, rather than generating it
* from scratch. In this case, it should use the input flag jok
* to decide whether to recompute the data, and set the output
* flag *jcurPtr accordingly.
*
* Each call to the PrecSetup function is preceded by a call to
* the RhsFn f with the same (t,y) arguments. Thus the PrecSetup
* function can use any auxiliary data that is computed and
* saved by the f function and made accessible to PrecSetup.
*
* A function PrecSetup must have the prototype given below.
* Its parameters are as follows:
*
* t is the current value of the independent variable.
*
* y is the current value of the dependent variable vector,
* namely the predicted value of y(t).
*
* fy is the vector f(t,y).
*
* jok is an input flag indicating whether Jacobian-related
* data needs to be recomputed, as follows:
* jok == FALSE means recompute Jacobian-related data
* from scratch.
* jok == TRUE means that Jacobian data, if saved from
* the previous PrecSetup call, can be reused
* (with the current value of gamma).
* A Precset call with jok == TRUE can only occur after
* a call with jok == FALSE.
*
* jcurPtr is a pointer to an output integer flag which is
* to be set by PrecSetup as follows:
* Set *jcurPtr = TRUE if Jacobian data was recomputed.
* Set *jcurPtr = FALSE if Jacobian data was not recomputed,
* but saved data was reused.
*
* gamma is the scalar appearing in the Newton matrix.
*
* user_data is a pointer to user data - the same as the user_data
* parameter passed to the CVodeSetUserData function.
*
* tmp1, tmp2, and tmp3 are pointers to memory allocated
* for N_Vectors which can be used by
* CVSpilsPrecSetupFn as temporary storage or
* work space.
*
* NOTE: If the user's preconditioner needs other quantities,
* they are accessible as follows: hcur (the current stepsize)
* and ewt (the error weight vector) are accessible through
* CVodeGetCurrentStep and CVodeGetErrWeights, respectively).
* The unit roundoff is available as UNIT_ROUNDOFF defined in
* sundials_types.h.
*
* Returned value:
* The value to be returned by the PrecSetup function is a flag
* indicating whether it was successful. This value should be
* 0 if successful,
* > 0 for a recoverable error (step will be retried),
* < 0 for an unrecoverable error (integration is halted).
* -----------------------------------------------------------------
*/
typedef int (*CVSpilsPrecSetupFn)(realtype t, N_Vector y, N_Vector fy,
booleantype jok, booleantype *jcurPtr,
realtype gamma, void *user_data,
N_Vector tmp1, N_Vector tmp2,
N_Vector tmp3);
/*
* -----------------------------------------------------------------
* Type : CVSpilsPrecSolveFn
* -----------------------------------------------------------------
* The user-supplied preconditioner solve function PrecSolve
* is to solve a linear system P z = r in which the matrix P is
* one of the preconditioner matrices P1 or P2, depending on the
* type of preconditioning chosen.
*
* A function PrecSolve must have the prototype given below.
* Its parameters are as follows:
*
* t is the current value of the independent variable.
*
* y is the current value of the dependent variable vector.
*
* fy is the vector f(t,y).
*
* r is the right-hand side vector of the linear system.
*
* z is the output vector computed by PrecSolve.
*
* gamma is the scalar appearing in the Newton matrix.
*
* delta is an input tolerance for use by PSolve if it uses
* an iterative method in its solution. In that case,
* the residual vector Res = r - P z of the system
* should be made less than delta in weighted L2 norm,
* i.e., sqrt [ Sum (Res[i]*ewt[i])^2 ] < delta.
* Note: the error weight vector ewt can be obtained
* through a call to the routine CVodeGetErrWeights.
*
* lr is an input flag indicating whether PrecSolve is to use
* the left preconditioner P1 or right preconditioner
* P2: lr = 1 means use P1, and lr = 2 means use P2.
*
* user_data is a pointer to user data - the same as the user_data
* parameter passed to the CVodeSetUserData function.
*
* tmp is a pointer to memory allocated for an N_Vector
* which can be used by PSolve for work space.
*
* Returned value:
* The value to be returned by the PrecSolve function is a flag
* indicating whether it was successful. This value should be
* 0 if successful,
* positive for a recoverable error (step will be retried),
* negative for an unrecoverable error (integration is halted).
* -----------------------------------------------------------------
*/
typedef int (*CVSpilsPrecSolveFn)(realtype t, N_Vector y, N_Vector fy,
N_Vector r, N_Vector z,
realtype gamma, realtype delta,
int lr, void *user_data, N_Vector tmp);
/*
* -----------------------------------------------------------------
* Type : CVSpilsJacTimesVecFn
* -----------------------------------------------------------------
* The user-supplied function jtimes is to generate the product
* J*v for given v, where J is the Jacobian df/dy, or an
* approximation to it, and v is a given vector. It should return
* 0 if successful a positive value for a recoverable error or
* a negative value for an unrecoverable failure.
*
* A function jtimes must have the prototype given below. Its
* parameters are as follows:
*
* v is the N_Vector to be multiplied by J.
*
* Jv is the output N_Vector containing J*v.
*
* t is the current value of the independent variable.
*
* y is the current value of the dependent variable
* vector.
*
* fy is the vector f(t,y).
*
* user_data is a pointer to user data, the same as the user_data
* parameter passed to the CVodeSetUserData function.
*
* tmp is a pointer to memory allocated for an N_Vector
* which can be used by Jtimes for work space.
* -----------------------------------------------------------------
*/
typedef int (*CVSpilsJacTimesVecFn)(N_Vector v, N_Vector Jv, realtype t,
N_Vector y, N_Vector fy,
void *user_data, N_Vector tmp);
/*
* -----------------------------------------------------------------
* Optional inputs to the CVSPILS linear solver
* -----------------------------------------------------------------
*
* CVSpilsSetPrecType resets the type of preconditioner, pretype,
* from the value previously set.
* This must be one of PREC_NONE, PREC_LEFT,
* PREC_RIGHT, or PREC_BOTH.
*
* CVSpilsSetGSType specifies the type of Gram-Schmidt
* orthogonalization to be used. This must be one of
* the two enumeration constants MODIFIED_GS or
* CLASSICAL_GS defined in iterative.h. These correspond
* to using modified Gram-Schmidt and classical
* Gram-Schmidt, respectively.
* Default value is MODIFIED_GS.
*
* CVSpilsSetMaxl resets the maximum Krylov subspace size, maxl,
* from the value previously set.
* An input value <= 0, gives the default value.
*
* CVSpilsSetEpsLin specifies the factor by which the tolerance on
* the nonlinear iteration is multiplied to get a
* tolerance on the linear iteration.
* Default value is 0.05.
*
* CVSpilsSetPreconditioner specifies the PrecSetup and PrecSolve functions.
* Default is NULL for both arguments (no preconditioning)
*
* CVSpilsSetJacTimesVecFn specifies the jtimes function. Default is to
* use an internal finite difference approximation routine.
*
* The return value of CVSpilsSet* is one of:
* CVSPILS_SUCCESS if successful
* CVSPILS_MEM_NULL if the cvode memory was NULL
* CVSPILS_LMEM_NULL if the linear solver memory was NULL
* CVSPILS_ILL_INPUT if an input has an illegal value
* -----------------------------------------------------------------
*/
SUNDIALS_EXPORT int CVSpilsSetPrecType(void *cvode_mem, int pretype);
SUNDIALS_EXPORT int CVSpilsSetGSType(void *cvode_mem, int gstype);
SUNDIALS_EXPORT int CVSpilsSetMaxl(void *cvode_mem, int maxl);
SUNDIALS_EXPORT int CVSpilsSetEpsLin(void *cvode_mem, realtype eplifac);
SUNDIALS_EXPORT int CVSpilsSetPreconditioner(void *cvode_mem,
CVSpilsPrecSetupFn pset,
CVSpilsPrecSolveFn psolve);
SUNDIALS_EXPORT int CVSpilsSetJacTimesVecFn(void *cvode_mem,
CVSpilsJacTimesVecFn jtv);
/*
* -----------------------------------------------------------------
* Optional outputs from the CVSPILS linear solver
* -----------------------------------------------------------------
* CVSpilsGetWorkSpace returns the real and integer workspace used
* by the SPILS module.
*
* CVSpilsGetNumPrecEvals returns the number of preconditioner
* evaluations, i.e. the number of calls made
* to PrecSetup with jok==FALSE.
*
* CVSpilsGetNumPrecSolves returns the number of calls made to
* PrecSolve.
*
* CVSpilsGetNumLinIters returns the number of linear iterations.
*
* CVSpilsGetNumConvFails returns the number of linear
* convergence failures.
*
* CVSpilsGetNumJtimesEvals returns the number of calls to jtimes.
*
* CVSpilsGetNumRhsEvals returns the number of calls to the user
* f routine due to finite difference Jacobian
* times vector evaluation.
*
* CVSpilsGetLastFlag returns the last error flag set by any of
* the CVSPILS interface functions.
*
* The return value of CVSpilsGet* is one of:
* CVSPILS_SUCCESS if successful
* CVSPILS_MEM_NULL if the cvode memory was NULL
* CVSPILS_LMEM_NULL if the linear solver memory was NULL
* -----------------------------------------------------------------
*/
SUNDIALS_EXPORT int CVSpilsGetWorkSpace(void *cvode_mem, long int *lenrwLS, long int *leniwLS);
SUNDIALS_EXPORT int CVSpilsGetNumPrecEvals(void *cvode_mem, long int *npevals);
SUNDIALS_EXPORT int CVSpilsGetNumPrecSolves(void *cvode_mem, long int *npsolves);
SUNDIALS_EXPORT int CVSpilsGetNumLinIters(void *cvode_mem, long int *nliters);
SUNDIALS_EXPORT int CVSpilsGetNumConvFails(void *cvode_mem, long int *nlcfails);
SUNDIALS_EXPORT int CVSpilsGetNumJtimesEvals(void *cvode_mem, long int *njvevals);
SUNDIALS_EXPORT int CVSpilsGetNumRhsEvals(void *cvode_mem, long int *nfevalsLS);
SUNDIALS_EXPORT int CVSpilsGetLastFlag(void *cvode_mem, long int *flag);
/*
* -----------------------------------------------------------------
* The following function returns the name of the constant
* associated with a CVSPILS return flag
* -----------------------------------------------------------------
*/
SUNDIALS_EXPORT char *CVSpilsGetReturnFlagName(long int flag);
#ifdef __cplusplus
}
#endif
#endif
|