00001 /* ========================================================================== */ 00002 /* === umfpack_wsolve ======================================================= */ 00003 /* ========================================================================== */ 00004 00005 /* -------------------------------------------------------------------------- */ 00006 /* UMFPACK Version 4.3 (Jan. 16, 2004), Copyright (c) 2004 by Timothy A. */ 00007 /* Davis. All Rights Reserved. See ../README for License. */ 00008 /* email: davis@cise.ufl.edu CISE Department, Univ. of Florida. */ 00009 /* web: http://www.cise.ufl.edu/research/sparse/umfpack */ 00010 /* -------------------------------------------------------------------------- */ 00011 00012 int umfpack_di_wsolve 00013 ( 00014 int sys, 00015 const int Ap [ ], 00016 const int Ai [ ], 00017 const double Ax [ ], 00018 double X [ ], 00019 const double B [ ], 00020 void *Numeric, 00021 const double Control [UMFPACK_CONTROL], 00022 double Info [UMFPACK_INFO], 00023 int Wi [ ], 00024 double W [ ] 00025 ) ; 00026 00027 long umfpack_dl_wsolve 00028 ( 00029 long sys, 00030 const long Ap [ ], 00031 const long Ai [ ], 00032 const double Ax [ ], 00033 double X [ ], 00034 const double B [ ], 00035 void *Numeric, 00036 const double Control [UMFPACK_CONTROL], 00037 double Info [UMFPACK_INFO], 00038 long Wi [ ], 00039 double W [ ] 00040 ) ; 00041 00042 int umfpack_zi_wsolve 00043 ( 00044 int sys, 00045 const int Ap [ ], 00046 const int Ai [ ], 00047 const double Ax [ ], const double Az [ ], 00048 double Xx [ ], double Xz [ ], 00049 const double Bx [ ], const double Bz [ ], 00050 void *Numeric, 00051 const double Control [UMFPACK_CONTROL], 00052 double Info [UMFPACK_INFO], 00053 int Wi [ ], 00054 double W [ ] 00055 ) ; 00056 00057 long umfpack_zl_wsolve 00058 ( 00059 long sys, 00060 const long Ap [ ], 00061 const long Ai [ ], 00062 const double Ax [ ], const double Az [ ], 00063 double Xx [ ], double Xz [ ], 00064 const double Bx [ ], const double Bz [ ], 00065 void *Numeric, 00066 const double Control [UMFPACK_CONTROL], 00067 double Info [UMFPACK_INFO], 00068 long Wi [ ], 00069 double W [ ] 00070 ) ; 00071 00072 /* 00073 double int Syntax: 00074 00075 #include "umfpack.h" 00076 void *Numeric ; 00077 int status, *Ap, *Ai, *Wi, sys ; 00078 double *B, *X, *Ax, *W, Info [UMFPACK_INFO], Control [UMFPACK_CONTROL] ; 00079 status = umfpack_di_wsolve (sys, Ap, Ai, Ax, X, B, Numeric, 00080 Control, Info, Wi, W) ; 00081 00082 double long Syntax: 00083 00084 #include "umfpack.h" 00085 void *Numeric ; 00086 long status, *Ap, *Ai, *Wi, sys ; 00087 double *B, *X, *Ax, *W, Info [UMFPACK_INFO], Control [UMFPACK_CONTROL] ; 00088 status = umfpack_dl_wsolve (sys, Ap, Ai, Ax, X, B, Numeric, 00089 Control, Info, Wi, W) ; 00090 00091 complex int Syntax: 00092 00093 #include "umfpack.h" 00094 void *Numeric ; 00095 int status, *Ap, *Ai, *Wi, sys ; 00096 double *Bx, *Bz, *Xx, *Xz, *Ax, *Az, *W, 00097 Info [UMFPACK_INFO], Control [UMFPACK_CONTROL] ; 00098 status = umfpack_zi_wsolve (sys, Ap, Ai, Ax, Az, Xx, Xz, Bx, Bz, Numeric, 00099 Control, Info, Wi, W) ; 00100 00101 complex long Syntax: 00102 00103 #include "umfpack.h" 00104 void *Numeric ; 00105 long status, *Ap, *Ai, *Wi, sys ; 00106 double *Bx, *Bz, *Xx, *Xz, *Ax, *Az, *W, 00107 Info [UMFPACK_INFO], Control [UMFPACK_CONTROL] ; 00108 status = umfpack_zl_wsolve (sys, Ap, Ai, Ax, Az, Xx, Xz, Bx, Bz, Numeric, 00109 Control, Info, Wi, W) ; 00110 00111 Purpose: 00112 00113 Given LU factors computed by umfpack_*_numeric (PAQ=LU) and the 00114 right-hand-side, B, solve a linear system for the solution X. Iterative 00115 refinement is optionally performed. This routine is identical to 00116 umfpack_*_solve, except that it does not dynamically allocate any workspace. 00117 When you have many linear systems to solve, this routine is faster than 00118 umfpack_*_solve, since the workspace (Wi, W) needs to be allocated only 00119 once, prior to calling umfpack_*_wsolve. 00120 00121 Returns: 00122 00123 The status code is returned. See Info [UMFPACK_STATUS], below. 00124 00125 Arguments: 00126 00127 Int sys ; Input argument, not modified. 00128 Int Ap [n+1] ; Input argument, not modified. 00129 Int Ai [nz] ; Input argument, not modified. 00130 double Ax [nz] ; Input argument, not modified. 00131 double X [n] ; Output argument. 00132 double B [n] ; Input argument, not modified. 00133 void *Numeric ; Input argument, not modified. 00134 double Control [UMFPACK_CONTROL] ; Input argument, not modified. 00135 double Info [UMFPACK_INFO] ; Output argument. 00136 00137 for complex versions: 00138 double Az [nz] ; Input argument, not modified, imaginary part 00139 double Xx [n] ; Output argument, real part. 00140 double Xz [n] ; Output argument, imaginary part 00141 double Bx [n] ; Input argument, not modified, real part 00142 double Bz [n] ; Input argument, not modified, imaginary part 00143 00144 The above arguments are identical to umfpack_*_solve, except that the 00145 error code UMFPACK_ERROR_out_of_memory will not be returned in 00146 Info [UMFPACK_STATUS], since umfpack_*_wsolve does not allocate any 00147 memory. 00148 00149 Int Wi [n] ; Workspace. 00150 double W [c*n] ; Workspace, where c is defined below. 00151 00152 The Wi and W arguments are workspace used by umfpack_*_wsolve. They 00153 need not be initialized on input, and their contents are undefined on 00154 output. The size of W depends on whether or not iterative refinement is 00155 used, and which version (real or complex) is called. Iterative 00156 refinement is performed if Ax=b, A'x=b, or A.'x=b is being solved, 00157 Control [UMFPACK_IRSTEP] > 0, and A is nonsingular. The size of W is 00158 given below: 00159 00160 no iter. with iter. 00161 refinement refinement 00162 umfpack_di_wsolve n 5*n 00163 umfpack_dl_wsolve n 5*n 00164 umfpack_zi_wsolve 4*n 10*n 00165 umfpack_zl_wsolve 4*n 10*n 00166 */