/usr/include/suitesparse/cholmod_modify.h is in libsuitesparse-dev 1:3.4.0-2ubuntu3.
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 | /* ========================================================================== */
/* === Include/cholmod_modify.h ============================================= */
/* ========================================================================== */
/* -----------------------------------------------------------------------------
* CHOLMOD/Include/cholmod_modify.h.
* Copyright (C) 2005-2006, Timothy A. Davis and William W. Hager
* CHOLMOD/Include/cholmod_modify.h is licensed under Version 2.0 of the GNU
* General Public License. See gpl.txt for a text of the license.
* CHOLMOD is also available under other licenses; contact authors for details.
* http://www.cise.ufl.edu/research/sparse
* -------------------------------------------------------------------------- */
/* CHOLMOD Modify module.
*
* Sparse Cholesky modification routines: update / downdate / rowadd / rowdel.
* Can also modify a corresponding solution to Lx=b when L is modified. This
* module is most useful when applied on a Cholesky factorization computed by
* the Cholesky module, but it does not actually require the Cholesky module.
* The Core module can create an identity Cholesky factorization (LDL' where
* L=D=I) that can then by modified by these routines.
*
* Primary routines:
* -----------------
*
* cholmod_updown multiple rank update/downdate
* cholmod_rowadd add a row to an LDL' factorization
* cholmod_rowdel delete a row from an LDL' factorization
*
* Secondary routines:
* -------------------
*
* cholmod_updown_solve update/downdate, and modify solution to Lx=b
* cholmod_updown_mark update/downdate, and modify solution to partial Lx=b
* cholmod_updown_mask update/downdate for LPDASA
* cholmod_rowadd_solve add a row, and update solution to Lx=b
* cholmod_rowadd_mark add a row, and update solution to partial Lx=b
* cholmod_rowdel_solve delete a row, and downdate Lx=b
* cholmod_rowdel_mark delete a row, and downdate solution to partial Lx=b
*
* Requires the Core module. Not required by any other CHOLMOD module.
*/
#ifndef CHOLMOD_MODIFY_H
#define CHOLMOD_MODIFY_H
#include "cholmod_core.h"
/* -------------------------------------------------------------------------- */
/* cholmod_updown: multiple rank update/downdate */
/* -------------------------------------------------------------------------- */
/* Compute the new LDL' factorization of LDL'+CC' (an update) or LDL'-CC'
* (a downdate). The factor object L need not be an LDL' factorization; it
* is converted to one if it isn't. */
int cholmod_updown
(
/* ---- input ---- */
int update, /* TRUE for update, FALSE for downdate */
cholmod_sparse *C, /* the incoming sparse update */
/* ---- in/out --- */
cholmod_factor *L, /* factor to modify */
/* --------------- */
cholmod_common *Common
) ;
int cholmod_l_updown (int, cholmod_sparse *, cholmod_factor *,
cholmod_common *) ;
/* -------------------------------------------------------------------------- */
/* cholmod_updown_solve: update/downdate, and modify solution to Lx=b */
/* -------------------------------------------------------------------------- */
/* Does the same as cholmod_updown, except that it also updates/downdates the
* solution to Lx=b+DeltaB. x and b must be n-by-1 dense matrices. b is not
* need as input to this routine, but a sparse change to b is (DeltaB). Only
* entries in DeltaB corresponding to columns modified in L are accessed; the
* rest must be zero. */
int cholmod_updown_solve
(
/* ---- input ---- */
int update, /* TRUE for update, FALSE for downdate */
cholmod_sparse *C, /* the incoming sparse update */
/* ---- in/out --- */
cholmod_factor *L, /* factor to modify */
cholmod_dense *X, /* solution to Lx=b (size n-by-1) */
cholmod_dense *DeltaB, /* change in b, zero on output */
/* --------------- */
cholmod_common *Common
) ;
int cholmod_l_updown_solve (int, cholmod_sparse *, cholmod_factor *,
cholmod_dense *, cholmod_dense *, cholmod_common *) ;
/* -------------------------------------------------------------------------- */
/* cholmod_updown_mark: update/downdate, and modify solution to partial Lx=b */
/* -------------------------------------------------------------------------- */
/* Does the same as cholmod_updown_solve, except only part of L is used in
* the update/downdate of the solution to Lx=b. This routine is an "expert"
* routine. It is meant for use in LPDASA only. See cholmod_updown.c for
* a description of colmark. */
int cholmod_updown_mark
(
/* ---- input ---- */
int update, /* TRUE for update, FALSE for downdate */
cholmod_sparse *C, /* the incoming sparse update */
int *colmark, /* int array of size n. See cholmod_updown.c */
/* ---- in/out --- */
cholmod_factor *L, /* factor to modify */
cholmod_dense *X, /* solution to Lx=b (size n-by-1) */
cholmod_dense *DeltaB, /* change in b, zero on output */
/* --------------- */
cholmod_common *Common
) ;
int cholmod_l_updown_mark (int, cholmod_sparse *, UF_long *, cholmod_factor *,
cholmod_dense *, cholmod_dense *, cholmod_common *) ;
/* -------------------------------------------------------------------------- */
/* cholmod_updown_mask: update/downdate, for LPDASA */
/* -------------------------------------------------------------------------- */
/* Does the same as cholmod_updown_mark, except has an additional "mask"
* argument. This routine is an "expert" routine. It is meant for use in
* LPDASA only. See cholmod_updown.c for a description of mask. */
int cholmod_updown_mask
(
/* ---- input ---- */
int update, /* TRUE for update, FALSE for downdate */
cholmod_sparse *C, /* the incoming sparse update */
int *colmark, /* int array of size n. See cholmod_updown.c */
int *mask, /* size n */
/* ---- in/out --- */
cholmod_factor *L, /* factor to modify */
cholmod_dense *X, /* solution to Lx=b (size n-by-1) */
cholmod_dense *DeltaB, /* change in b, zero on output */
/* --------------- */
cholmod_common *Common
) ;
int cholmod_l_updown_mask (int, cholmod_sparse *, UF_long *, UF_long *,
cholmod_factor *, cholmod_dense *, cholmod_dense *, cholmod_common *) ;
/* -------------------------------------------------------------------------- */
/* cholmod_rowadd: add a row to an LDL' factorization (a rank-2 update) */
/* -------------------------------------------------------------------------- */
/* cholmod_rowadd adds a row to the LDL' factorization. It computes the kth
* row and kth column of L, and then updates the submatrix L (k+1:n,k+1:n)
* accordingly. The kth row and column of L must originally be equal to the
* kth row and column of the identity matrix. The kth row/column of L is
* computed as the factorization of the kth row/column of the matrix to
* factorize, which is provided as a single n-by-1 sparse matrix R. */
int cholmod_rowadd
(
/* ---- input ---- */
size_t k, /* row/column index to add */
cholmod_sparse *R, /* row/column of matrix to factorize (n-by-1) */
/* ---- in/out --- */
cholmod_factor *L, /* factor to modify */
/* --------------- */
cholmod_common *Common
) ;
int cholmod_l_rowadd (size_t, cholmod_sparse *, cholmod_factor *,
cholmod_common *) ;
/* -------------------------------------------------------------------------- */
/* cholmod_rowadd_solve: add a row, and update solution to Lx=b */
/* -------------------------------------------------------------------------- */
/* Does the same as cholmod_rowadd, and also updates the solution to Lx=b
* See cholmod_updown for a description of how Lx=b is updated. There is on
* additional parameter: bk specifies the new kth entry of b. */
int cholmod_rowadd_solve
(
/* ---- input ---- */
size_t k, /* row/column index to add */
cholmod_sparse *R, /* row/column of matrix to factorize (n-by-1) */
double bk [2], /* kth entry of the right-hand-side b */
/* ---- in/out --- */
cholmod_factor *L, /* factor to modify */
cholmod_dense *X, /* solution to Lx=b (size n-by-1) */
cholmod_dense *DeltaB, /* change in b, zero on output */
/* --------------- */
cholmod_common *Common
) ;
int cholmod_l_rowadd_solve (size_t, cholmod_sparse *, double *,
cholmod_factor *, cholmod_dense *, cholmod_dense *, cholmod_common *) ;
/* -------------------------------------------------------------------------- */
/* cholmod_rowadd_mark: add a row, and update solution to partial Lx=b */
/* -------------------------------------------------------------------------- */
/* Does the same as cholmod_rowadd_solve, except only part of L is used in
* the update/downdate of the solution to Lx=b. This routine is an "expert"
* routine. It is meant for use in LPDASA only. */
int cholmod_rowadd_mark
(
/* ---- input ---- */
size_t k, /* row/column index to add */
cholmod_sparse *R, /* row/column of matrix to factorize (n-by-1) */
double bk [2], /* kth entry of the right hand side, b */
int *colmark, /* int array of size n. See cholmod_updown.c */
/* ---- in/out --- */
cholmod_factor *L, /* factor to modify */
cholmod_dense *X, /* solution to Lx=b (size n-by-1) */
cholmod_dense *DeltaB, /* change in b, zero on output */
/* --------------- */
cholmod_common *Common
) ;
int cholmod_l_rowadd_mark (size_t, cholmod_sparse *, double *, UF_long *,
cholmod_factor *, cholmod_dense *, cholmod_dense *,
cholmod_common *) ;
/* -------------------------------------------------------------------------- */
/* cholmod_rowdel: delete a row from an LDL' factorization (a rank-2 update) */
/* -------------------------------------------------------------------------- */
/* Sets the kth row and column of L to be the kth row and column of the identity
* matrix, and updates L(k+1:n,k+1:n) accordingly. To reduce the running time,
* the caller can optionally provide the nonzero pattern (or an upper bound) of
* kth row of L, as the sparse n-by-1 vector R. Provide R as NULL if you want
* CHOLMOD to determine this itself, which is easier for the caller, but takes
* a little more time.
*/
int cholmod_rowdel
(
/* ---- input ---- */
size_t k, /* row/column index to delete */
cholmod_sparse *R, /* NULL, or the nonzero pattern of kth row of L */
/* ---- in/out --- */
cholmod_factor *L, /* factor to modify */
/* --------------- */
cholmod_common *Common
) ;
int cholmod_l_rowdel (size_t, cholmod_sparse *, cholmod_factor *,
cholmod_common *) ;
/* -------------------------------------------------------------------------- */
/* cholmod_rowdel_solve: delete a row, and downdate Lx=b */
/* -------------------------------------------------------------------------- */
/* Does the same as cholmod_rowdel, but also downdates the solution to Lx=b.
* When row/column k of A is "deleted" from the system A*y=b, this can induce
* a change to x, in addition to changes arising when L and b are modified.
* If this is the case, the kth entry of y is required as input (yk) */
int cholmod_rowdel_solve
(
/* ---- input ---- */
size_t k, /* row/column index to delete */
cholmod_sparse *R, /* NULL, or the nonzero pattern of kth row of L */
double yk [2], /* kth entry in the solution to A*y=b */
/* ---- in/out --- */
cholmod_factor *L, /* factor to modify */
cholmod_dense *X, /* solution to Lx=b (size n-by-1) */
cholmod_dense *DeltaB, /* change in b, zero on output */
/* --------------- */
cholmod_common *Common
) ;
int cholmod_l_rowdel_solve (size_t, cholmod_sparse *, double *,
cholmod_factor *, cholmod_dense *, cholmod_dense *, cholmod_common *) ;
/* -------------------------------------------------------------------------- */
/* cholmod_rowdel_mark: delete a row, and downdate solution to partial Lx=b */
/* -------------------------------------------------------------------------- */
/* Does the same as cholmod_rowdel_solve, except only part of L is used in
* the update/downdate of the solution to Lx=b. This routine is an "expert"
* routine. It is meant for use in LPDASA only. */
int cholmod_rowdel_mark
(
/* ---- input ---- */
size_t k, /* row/column index to delete */
cholmod_sparse *R, /* NULL, or the nonzero pattern of kth row of L */
double yk [2], /* kth entry in the solution to A*y=b */
int *colmark, /* int array of size n. See cholmod_updown.c */
/* ---- in/out --- */
cholmod_factor *L, /* factor to modify */
cholmod_dense *X, /* solution to Lx=b (size n-by-1) */
cholmod_dense *DeltaB, /* change in b, zero on output */
/* --------------- */
cholmod_common *Common
) ;
int cholmod_l_rowdel_mark (size_t, cholmod_sparse *, double *, UF_long *,
cholmod_factor *, cholmod_dense *, cholmod_dense *, cholmod_common *) ;
#endif
|