/usr/include/sundials/sundials_nvector.h is in libsundials-serial-dev 2.5.0-3+b3.
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 371 372 373 | /*
* -----------------------------------------------------------------
* $Revision: 1.2 $
* $Date: 2006/11/29 00:05:07 $
* -----------------------------------------------------------------
* Programmer(s): Radu Serban and Aaron Collier @ LLNL
* -----------------------------------------------------------------
* Copyright (c) 2002, The Regents of the University of California.
* Produced at the Lawrence Livermore National Laboratory.
* All rights reserved.
* For details, see the LICENSE file.
* -----------------------------------------------------------------
* This is the header file for a generic NVECTOR package.
* It defines the N_Vector structure (_generic_N_Vector) which
* contains the following fields:
* - an implementation-dependent 'content' field which contains
* the description and actual data of the vector
* - an 'ops' filed which contains a structure listing operations
* acting on such vectors
*
* Part I of this file contains type declarations for the
* _generic_N_Vector and _generic_N_Vector_Ops structures, as well
* as references to pointers to such structures (N_Vector).
*
* Part II of this file contains the prototypes for the vector
* functions which operate on N_Vector.
*
* At a minimum, a particular implementation of an NVECTOR must
* do the following:
* - specify the 'content' field of N_Vector,
* - implement the operations on those N_Vectors,
* - provide a constructor routine for new vectors
*
* Additionally, an NVECTOR implementation may provide the following:
* - macros to access the underlying N_Vector data
* - a constructor for an array of N_Vectors
* - a constructor for an empty N_Vector (i.e., a new N_Vector with
* a NULL data pointer).
* - a routine to print the content of an N_Vector
* -----------------------------------------------------------------
*/
#ifndef _NVECTOR_H
#define _NVECTOR_H
#ifdef __cplusplus /* wrapper to enable C++ usage */
extern "C" {
#endif
#include <sundials/sundials_types.h>
/*
* -----------------------------------------------------------------
* Generic definition of N_Vector
* -----------------------------------------------------------------
*/
/* Forward reference for pointer to N_Vector_Ops object */
typedef struct _generic_N_Vector_Ops *N_Vector_Ops;
/* Forward reference for pointer to N_Vector object */
typedef struct _generic_N_Vector *N_Vector;
/* Define array of N_Vectors */
typedef N_Vector *N_Vector_S;
/* Structure containing function pointers to vector operations */
struct _generic_N_Vector_Ops {
N_Vector (*nvclone)(N_Vector);
N_Vector (*nvcloneempty)(N_Vector);
void (*nvdestroy)(N_Vector);
void (*nvspace)(N_Vector, long int *, long int *);
realtype* (*nvgetarraypointer)(N_Vector);
void (*nvsetarraypointer)(realtype *, N_Vector);
void (*nvlinearsum)(realtype, N_Vector, realtype, N_Vector, N_Vector);
void (*nvconst)(realtype, N_Vector);
void (*nvprod)(N_Vector, N_Vector, N_Vector);
void (*nvdiv)(N_Vector, N_Vector, N_Vector);
void (*nvscale)(realtype, N_Vector, N_Vector);
void (*nvabs)(N_Vector, N_Vector);
void (*nvinv)(N_Vector, N_Vector);
void (*nvaddconst)(N_Vector, realtype, N_Vector);
realtype (*nvdotprod)(N_Vector, N_Vector);
realtype (*nvmaxnorm)(N_Vector);
realtype (*nvwrmsnorm)(N_Vector, N_Vector);
realtype (*nvwrmsnormmask)(N_Vector, N_Vector, N_Vector);
realtype (*nvmin)(N_Vector);
realtype (*nvwl2norm)(N_Vector, N_Vector);
realtype (*nvl1norm)(N_Vector);
void (*nvcompare)(realtype, N_Vector, N_Vector);
booleantype (*nvinvtest)(N_Vector, N_Vector);
booleantype (*nvconstrmask)(N_Vector, N_Vector, N_Vector);
realtype (*nvminquotient)(N_Vector, N_Vector);
};
/*
* -----------------------------------------------------------------
* A vector is a structure with an implementation-dependent
* 'content' field, and a pointer to a structure of vector
* operations corresponding to that implementation.
* -----------------------------------------------------------------
*/
struct _generic_N_Vector {
void *content;
struct _generic_N_Vector_Ops *ops;
};
/*
* -----------------------------------------------------------------
* Functions exported by NVECTOR module
* -----------------------------------------------------------------
*/
/*
* -----------------------------------------------------------------
* N_VClone
* Creates a new vector of the same type as an existing vector.
* It does not copy the vector, but rather allocates storage for
* the new vector.
*
* N_VCloneEmpty
* Creates a new vector of the same type as an existing vector,
* but does not allocate storage.
*
* N_VDestroy
* Destroys a vector created with N_VClone.
*
* N_VSpace
* Returns space requirements for one N_Vector (type 'realtype' in
* lrw and type 'long int' in liw).
*
* N_VGetArrayPointer
* Returns a pointer to the data component of the given N_Vector.
* NOTE: This function assumes that the internal data is stored
* as a contiguous 'realtype' array. This routine is only used in
* the solver-specific interfaces to the dense and banded linear
* solvers, as well as the interfaces to the banded preconditioners
* distributed with SUNDIALS.
*
* N_VSetArrayPointer
* Overwrites the data field in the given N_Vector with a user-supplied
* array of type 'realtype'.
* NOTE: This function assumes that the internal data is stored
* as a contiguous 'realtype' array. This routine is only used in
* the interfaces to the dense linear solver.
*
* N_VLinearSum
* Performs the operation z = a*x + b*y
*
* N_VConst
* Performs the operation z[i] = c for i = 0, 1, ..., N-1
*
* N_VProd
* Performs the operation z[i] = x[i]*y[i] for i = 0, 1, ..., N-1
*
* N_VDiv
* Performs the operation z[i] = x[i]/y[i] for i = 0, 1, ..., N-1
*
* N_VScale
* Performs the operation z = c*x
*
* N_VAbs
* Performs the operation z[i] = |x[i]| for i = 0, 1, ..., N-1
*
* N_VInv
* Performs the operation z[i] = 1/x[i] for i = 0, 1, ..., N-1
* This routine does not check for division by 0. It should be
* called only with an N_Vector x which is guaranteed to have
* all non-zero components.
*
* N_VAddConst
* Performs the operation z[i] = x[i] + b for i = 0, 1, ..., N-1
*
* N_VDotProd
* Returns the dot product of two vectors:
* sum (i = 0 to N-1) {x[i]*y[i]}
*
* N_VMaxNorm
* Returns the maximum norm of x:
* max (i = 0 to N-1) ABS(x[i])
*
* N_VWrmsNorm
* Returns the weighted root mean square norm of x with weight
* vector w:
* sqrt [(sum (i = 0 to N-1) {(x[i]*w[i])^2})/N]
*
* N_VWrmsNormMask
* Returns the weighted root mean square norm of x with weight
* vector w, masked by the elements of id:
* sqrt [(sum (i = 0 to N-1) {(x[i]*w[i]*msk[i])^2})/N]
* where msk[i] = 1.0 if id[i] > 0 and
* msk[i] = 0.0 if id[i] < 0
*
* N_VMin
* Returns the smallest element of x:
* min (i = 0 to N-1) x[i]
*
* N_VWL2Norm
* Returns the weighted Euclidean L2 norm of x with weight
* vector w:
* sqrt [(sum (i = 0 to N-1) {(x[i]*w[i])^2})]
*
* N_VL1Norm
* Returns the L1 norm of x:
* sum (i = 0 to N-1) {ABS(x[i])}
*
* N_VCompare
* Performs the operation
* z[i] = 1.0 if ABS(x[i]) >= c i = 0, 1, ..., N-1
* 0.0 otherwise
*
* N_VInvTest
* Performs the operation z[i] = 1/x[i] with a test for
* x[i] == 0.0 before inverting x[i].
* This routine returns TRUE if all components of x are non-zero
* (successful inversion) and returns FALSE otherwise.
*
* N_VConstrMask
* Performs the operation :
* m[i] = 1.0 if constraint test fails for x[i]
* m[i] = 0.0 if constraint test passes for x[i]
* where the constraint tests are as follows:
* If c[i] = +2.0, then x[i] must be > 0.0.
* If c[i] = +1.0, then x[i] must be >= 0.0.
* If c[i] = -1.0, then x[i] must be <= 0.0.
* If c[i] = -2.0, then x[i] must be < 0.0.
* This routine returns a boolean FALSE if any element failed
* the constraint test, TRUE if all passed. It also sets a
* mask vector m, with elements equal to 1.0 where the
* corresponding constraint test failed, and equal to 0.0
* where the constraint test passed.
* This routine is specialized in that it is used only for
* constraint checking.
*
* N_VMinQuotient
* Performs the operation :
* minq = min ( num[i]/denom[i]) over all i such that
* denom[i] != 0.
* This routine returns the minimum of the quotients obtained
* by term-wise dividing num[i] by denom[i]. A zero element
* in denom will be skipped. If no such quotients are found,
* then the large value BIG_REAL is returned.
*
* -----------------------------------------------------------------
*
* The following table lists the vector functions used by
* different modules in SUNDIALS. The symbols in the table
* have the following meaning:
* S - called by the solver;
* D - called by the dense linear solver module
* B - called by the band linear solver module
* Di - called by the diagonal linear solver module
* I - called by the iterative linear solver module
* BP - called by the band preconditioner module
* BBDP - called by the band-block diagonal preconditioner module
* F - called by the Fortran-to-C interface
*
* ------------------------------------------------
* MODULES
* NVECTOR ------------------------------------------------
* FUNCTIONS CVODE/CVODES IDA KINSOL
* -----------------------------------------------------------------
* N_VClone S Di I S I BBDP S I BBDP
* -----------------------------------------------------------------
* N_VCloneEmpty F F F
* -----------------------------------------------------------------
* N_VDestroy S Di I S I BBDP S I BBDP
* -----------------------------------------------------------------
* N_VSpace S S S
* -----------------------------------------------------------------
* N_VGetArrayPointer D B BP BBDP F D B BBDP BBDP F
* -----------------------------------------------------------------
* N_VSetArrayPointer D F D F
* -----------------------------------------------------------------
* N_VLinearSum S D Di I S D I S I
* -----------------------------------------------------------------
* N_VConst S I S I I
* -----------------------------------------------------------------
* N_VProd S Di I S I S I
* -----------------------------------------------------------------
* N_VDiv S Di I S I S I
* -----------------------------------------------------------------
* N_VScale S D B Di I BP BBDP S D B I BBDP S I BBDP
* -----------------------------------------------------------------
* N_VAbs S S S
* -----------------------------------------------------------------
* N_VInv S Di S S
* -----------------------------------------------------------------
* N_VAddConst S Di S
* -----------------------------------------------------------------
* N_VDotProd I I I
* -----------------------------------------------------------------
* N_VMaxNorm S S S
* -----------------------------------------------------------------
* N_VWrmsNorm S D B I BP BBDP S
* -----------------------------------------------------------------
* N_VWrmsNormMask S
* -----------------------------------------------------------------
* N_VMin S S S
* -----------------------------------------------------------------
* N_VWL2Norm S I
* -----------------------------------------------------------------
* N_VL1Norm I
* -----------------------------------------------------------------
* N_VCompare Di S
* -----------------------------------------------------------------
* N_VInvTest Di
* -----------------------------------------------------------------
* N_VConstrMask S S
* -----------------------------------------------------------------
* N_VMinQuotient S S
* -----------------------------------------------------------------
*/
SUNDIALS_EXPORT N_Vector N_VClone(N_Vector w);
SUNDIALS_EXPORT N_Vector N_VCloneEmpty(N_Vector w);
SUNDIALS_EXPORT void N_VDestroy(N_Vector v);
SUNDIALS_EXPORT void N_VSpace(N_Vector v, long int *lrw, long int *liw);
SUNDIALS_EXPORT realtype *N_VGetArrayPointer(N_Vector v);
SUNDIALS_EXPORT void N_VSetArrayPointer(realtype *v_data, N_Vector v);
SUNDIALS_EXPORT void N_VLinearSum(realtype a, N_Vector x, realtype b, N_Vector y, N_Vector z);
SUNDIALS_EXPORT void N_VConst(realtype c, N_Vector z);
SUNDIALS_EXPORT void N_VProd(N_Vector x, N_Vector y, N_Vector z);
SUNDIALS_EXPORT void N_VDiv(N_Vector x, N_Vector y, N_Vector z);
SUNDIALS_EXPORT void N_VScale(realtype c, N_Vector x, N_Vector z);
SUNDIALS_EXPORT void N_VAbs(N_Vector x, N_Vector z);
SUNDIALS_EXPORT void N_VInv(N_Vector x, N_Vector z);
SUNDIALS_EXPORT void N_VAddConst(N_Vector x, realtype b, N_Vector z);
SUNDIALS_EXPORT realtype N_VDotProd(N_Vector x, N_Vector y);
SUNDIALS_EXPORT realtype N_VMaxNorm(N_Vector x);
SUNDIALS_EXPORT realtype N_VWrmsNorm(N_Vector x, N_Vector w);
SUNDIALS_EXPORT realtype N_VWrmsNormMask(N_Vector x, N_Vector w, N_Vector id);
SUNDIALS_EXPORT realtype N_VMin(N_Vector x);
SUNDIALS_EXPORT realtype N_VWL2Norm(N_Vector x, N_Vector w);
SUNDIALS_EXPORT realtype N_VL1Norm(N_Vector x);
SUNDIALS_EXPORT void N_VCompare(realtype c, N_Vector x, N_Vector z);
SUNDIALS_EXPORT booleantype N_VInvTest(N_Vector x, N_Vector z);
SUNDIALS_EXPORT booleantype N_VConstrMask(N_Vector c, N_Vector x, N_Vector m);
SUNDIALS_EXPORT realtype N_VMinQuotient(N_Vector num, N_Vector denom);
/*
* -----------------------------------------------------------------
* Additional functions exported by NVECTOR module
* -----------------------------------------------------------------
*/
/*
* -----------------------------------------------------------------
* N_VCloneEmptyVectorArray
* Creates (by cloning 'w') an array of 'count' empty N_Vectors
*
* N_VCloneVectorArray
* Creates (by cloning 'w') an array of 'count' N_Vectors
*
* N_VDestroyVectorArray
* Frees memory for an array of 'count' N_Vectors that was
* created by a call to N_VCloneVectorArray
*
* These functions are used by the SPGMR iterative linear solver
* module and by the CVODES and IDAS solvers.
* -----------------------------------------------------------------
*/
SUNDIALS_EXPORT N_Vector *N_VCloneEmptyVectorArray(int count, N_Vector w);
SUNDIALS_EXPORT N_Vector *N_VCloneVectorArray(int count, N_Vector w);
SUNDIALS_EXPORT void N_VDestroyVectorArray(N_Vector *vs, int count);
#ifdef __cplusplus
}
#endif
#endif
|