subroutine ma28cd(n, a, licn, icn, ikeep, rhs, w, mtype) c c this subroutine uses the factors from ma28a/ad or ma28b/bd to c solve a system of equations without iterative refinement. c the parameters are ... c n integer order of matrix not altered by subroutine. c a real/double precision array length licn. the same array as c was used in the most recent call to ma28a/ad or ma28b/bd. c licn integer length of arrays a and icn. not altered by c subroutine. c icn integer array of length licn. same array as output from c ma28a/ad. unchanged by ma28c/cd. c ikeep integer array of length 5*n. same array as output from c ma28a/ad. unchanged by ma28c/cd. c rhs real/double precision array length n. on entry, it holds the c right hand side. on exit, the solution vector. c w real/double precision array length n. used as workspace by c ma30c/cd. c mtype integer used to tell ma30c/cd to solve the direct equation c (mtype=1) or its transpose (mtype.ne.1). c double precision a(licn), rhs(n), w(n), resid, mresid, eps, rmin integer idisp(2) integer icn(licn), ikeep(n,5) logical abort1, abort2 c common block variables. c unless otherwise stated common block variables are as in ma28a/ad. c those variables referenced by ma28c/cd are mentioned below. c resid real/double precision variable returns maximum residual of c equations where pivot was zero. c mresid real/double precision variable used by ma28c/cd to c communicate between ma28f/fd and ma30h/hd. c idisp integer array length 2 the same as that used by ma28a/ad. c it is unchanged by ma28b/bd. c c further information on common block variables can be found in block c data or ma28a/ad. common /ma28fd/ eps, rmin, resid, irncp, icncp, minirn, minicn, * irank, abort1, abort2 common /ma28gd/ idisp common /ma30hd/ mresid c c this call performs the solution of the set of equations. call ma30cd(n, icn, a, licn, ikeep, ikeep(1,4), ikeep(1,5), * idisp, ikeep(1,2), ikeep(1,3), rhs, w, mtype) c transfer common block information. resid = mresid return end