CXML
dsskyd
Symmetric sparse simple driver using skyline storage scheme
FORMAT
DSSKYD (n, au, iaudiag, nau, bx, ldbx, nbx, iparam, rparam, iwrk, rwrk,
ierror)
Arguments
n integer*4
On entry, the order of the matrix A.
On exit, n is unchanged.
au real*8
On entry, an array of length at least nau, containing
the matrix A stored in the skyline storage scheme,
using either the profile-in, or the diagonal-out
storage mode.
On exit, au contains the transp(U)*D*U factorization
of the matrix A. au must remain unchanged between the
call to the routine DSSKYD and any subsequent calls to
the routines DSSKYS, DSSKYC, and DSSKYR.
iaudiag integer*4
On entry, an array of length at least n for the
profile-in storage mode and (n+1) for the diagonal-out
storage mode, containing the pointers to the locations
of the diagonal elements in array AU.
On exit, iaudiag is unchanged.
nau integer*4
On entry, the number of elements in array AU. nau is
also the envelope size of the symmetric part of the
matrix A. For the profile-in storage mode, nau =
IAUDIAG(n). For the diagonal-out storage mode, nau =
IAUDIAG(n+1) - 1.
On exit, nau is unchanged.
bx real*8
On entry, a two dimensional array BX of order ldbx by
at least nbx, containing the nbx right sides.
On exit, bx contains the solutions for the nbx systems.
ldbx integer*4
On entry, the leading dimensional of array BX. ldbx >=
n.
On exit, ldbx is unchanged.
nbx integer*4
On entry, the number of right sides.
On exit, nbx is unchanged.
iparam integer*4
An array of length at least 100, containing the integer
parameters for the simple driver.
iparam(1): niparam
On entry, defines the length of the array IPARAM.
niparam >= 100.
On exit, iparam(1) is unchanged.
iparam(2): nrparam
On entry, defines the length of the array RPARAM.
nrparam >= 100.
On exit, iparam(2) is unchanged.
iparam(3): niwrk
On entry, defines the size of the integer work array,
IWRK. niwrk >=2n.
On exit, iparam(3) is unchanged.
iparam(4): nrwrk
On entry, defines the size of the real work array,
RWRK. As the real work array is not used at present,
nrwrk can be unspecified.
On exit, iparam(4) is unchanged.
iparam(5): iounit
On entry, defines the I/O unit number for printing
error messages and information from the routine DSSKYD.
The I/O unit must be opened in the calling subprogram.
If iounit <= 0, no output is generated.
On exit, iparam(5) is unchanged.
iparam(6): iolevel
On entry, defines the message level that determines the
amount of information printed out to iounit, when
iounit > 0.
iolevel = 0 : fatal error messages only
iolevel = 1 : error messages and minimal information
iolevel = 2 : error messages and detailed information
On exit, iparam(6) is unchanged.
iparam(7): idefault
On entry, defines if the default values should be used
in arrays IPARAM and RPARAM. If idefault = 0, then the
following default values are assigned:
IPARAM(1) = niparam = 100
IPARAM(2) = nrparam = 100
IPARAM(6) = iolevel = 0
IPARAM(8) = istore = 1
IPARAM(9) = ipvt = 0
RPARAM(1) = pvt_sml = 10**(-12)
If idefault = 1, then you must assign values to the
above variables before the call to the DSSKYD routine.
On exit, iparam(7) is unchanged.
iparam(8): istore
On entry, defines the type of storage scheme used for
the skyline matrix. If istore = 1, the matrix A is
stored using the profile-in storage mode; if istore =
2, the matrix A is stored using the diagonal-out
storage mode. Default: istore = 1.
On exit, iparam(8) is unchanged.
iparam(9): ipvt
On entry, defines if the factorization should continue
when a small pivot, (defined by RPARAM(1), is
encountered. If ipvt = 0 and the absolute value of the
pivot element is smaller than pvt_sml = RPARAM(1), then
the factorization process is stopped and control
returned to the calling subprogram. If ipvt=1 and a
pivot smaller than RPARAM(1) in absolute value is
encountered in the factorization, the process
continues. If ipvt=2 and a pivot smaller than
RPARAM(1) in absolute value, is encountered in the
factorization, it is replaced by a predetermined value
pvt_new = RPARAM(2), and the factorization is
continued. Default: pvt_new = 0.
On exit, iparam(9) is unchanged.
iparam(10): ipvt_loc
On entry, an unspecified variable.
On exit, iparam(10) contains the location of the first
pivot element smaller in absolute value than pvt_sml.
The pivot element is returned in pvt_val = RPARAM(3).
If iparam(10)= 0, then no such pivot element exits.
rparam real*8
An array of length at least 100, containing the real
parameters for the simple driver.
rparam(1): pvt_sml
On entry, defines the value of the pivot element which
is considered to be small. If a pivot element smaller
than pvt_smlin absolute value is encountered in the
factorization process, then, depending on the value of
ipvt = IPARAM(9), the process either stops, continues
or continues after the pivot is set equal to pvt_new =
RPARAM(2). pvt_sml > 0. Recommended value: 10**(-15)
<= pvt_sml <= 1. Default: pvt_sml = 10**(-12).
On exit, rparam(1) is unchanged.
rparam(2): pvt_new
On entry, defines the value to which the pivot element
must be set if ipvt = 2 and the pivot element is less
than pvt_sml in absolute value. pvt_sml should be
large enough to avoid overflow when calculating the
reciprocal of the pivot element.
On exit, rparam(2) is unchanged.
rparam(3): pvt_val
On entry, an unspecified variable.
On exit, rparam(3) contains the value of the first
pivot element smaller than pvt_sml in absolute value.
This element occurs at the location returned in
IPARAM(10). If no such pivot element is found, the
value of pvt_val is unspecified.
iwrk integer*4
On entry, an array of length at least 2n used for
integer workspace.
On exit, the first 2n elements of iwrk contain
information generated by the factorization routine
DSSKYF. This information is required by routines that
use the factorization such as DSSKYS, DSSKYC, DSSKYR
and remain unchanged between the call to DSSKYD and any
subsequent calls to one of these routines.
rwrk real*8
On entry, an array used for real workspace.
On exit, rwrk is unchanged. Presently, rwrk is not
used by the routine DSSKYD. It can be a dummy
variable.
ierror integer*4
On entry, an unspecified variable.
On exit, ierror contains the error flag. A value of
zero indicates a normal exit from the routine DSSKYD.
Description
DSSKYD is a simple driver routine that factors and solves the system A X =
B where A is a symmetric matrix stored in a skyline form, using either the
profile-in storage mode or the diagonal-out storage mode; B is a matrix of
nbx right sides and X is the matrix of the corresponding nbx solution
vectors. On entry to the routine DSSKYD, the array BX contains the nbx
right sides; on exit, these are overwritten by the solution vectors.
The matrix A is first factorized as A = transp(U)*D*U by a call to the
routine DSSKYF. U is a unit upper triangular matrix and D is a diagonal
matrix. The routine DSSKYF does not perform any pivoting to preserve the
numerical stability of the transp(U)*D*U factorization. It is therefore
primarily intended for the solution of symmetric positive (or negative)
definite systems as they do not require pivoting for numerical stability.
Caution is urged when using this routine for symmetric indefinite systems.
If a small pivot, in absolute value, pvt_sml, is encountered in the
process of factorization, you have the option of either stopping the
factorization process and returning to the calling subprogram, continuing
the factorization process with the small value of the pivot, or continuing
after setting the pivot equal to some predetermined value, pvt_new. The
location of the first occurrence of a small pivot is returned in ipvt_loc
and its value in pvt_val.
After the factorization has been obtained without any error, the routine
DSSKYD calls the solve routine, DSSKYS, to solve the system. The call to
the routine DSSKYD can be followed by a call to the routines DSSKYS, DSSKYC
and DSSKYR, provided the first 2n elements of the work array IWRK remain
unchanged between calls. The real workspace array, RWRK, is not used at
present.
CXML Home Page Index of CXML Routines