935 DOUBLE PRECISION bnrm, err, rhol, tol
936 INTEGER iflag, isym, itol, iunit, jpre, jscal, kmp, lgmr, maxl,
937 + maxlp1, n, nelt, nmsl, nrmax, nrsts
939 DOUBLE PRECISION a(nelt), b(*), dl(*), hes(maxlp1,*), q(*), r0(*),
940 + rpar(*), sr(*), sz(*), v(n,*), wk(*), x(*),
942 INTEGER ia(nelt), ipar(*), ja(nelt)
946 DOUBLE PRECISION c, dlnrm, prod, r0nrm, rho, s, snormw, tem
947 INTEGER i, i2, info, ip1, iter, itmax, j, k, ll, llp1
949 DOUBLE PRECISION dnrm2 968 itmax =(nrmax+1)*maxl
974 IF ((jpre .LT. 0) .AND.(nrsts .EQ. 0))
THEN 975 CALL dcopy(n, r0, 1, wk, 1)
976 CALL msolve(n, wk, r0, nelt, ia, ja, a, isym, rpar, ipar)
979 IF (((jscal.EQ.2) .OR.(jscal.EQ.3)) .AND.(nrsts.EQ.0))
THEN 988 r0nrm =
dnrm2(n, v, 1)
993 IF (
isdgmr(n, b, x, xl, nelt, ia, ja, a, isym,
msolve,
994 $ nmsl, itol, tol, itmax, iter, err, iunit, v(1,1), z, wk,
995 $ rpar, ipar, r0nrm, bnrm, sr, sz, jscal,
996 $ kmp, lgmr, maxl, maxlp1, v, q, snormw, prod, r0nrm,
997 $ hes, jpre) .NE. 0)
RETURN 999 CALL dscal(n, tem, v(1,1), 1)
1024 IF ((jscal .EQ. 1) .OR.(jscal .EQ. 3))
THEN 1026 wk(i) = v(i,ll)/sz(i)
1029 CALL dcopy(n, v(1,ll), 1, wk, 1)
1031 IF (jpre .GT. 0)
THEN 1032 CALL msolve(n, wk, z, nelt, ia, ja, a, isym, rpar, ipar)
1034 CALL matvec(n, z, v(1,ll+1), nelt, ia, ja, a, isym)
1036 CALL matvec(n, wk, v(1,ll+1), nelt, ia, ja, a, isym)
1038 IF (jpre .LT. 0)
THEN 1039 CALL dcopy(n, v(1,ll+1), 1, wk, 1)
1040 CALL msolve(n,wk,v(1,ll+1),nelt,ia,ja,a,isym,rpar,ipar)
1043 IF ((jscal .EQ. 2) .OR.(jscal .EQ. 3))
THEN 1045 v(i,ll+1) = v(i,ll+1)*sr(i)
1048 CALL dorth(v(1,ll+1), v, hes, n, ll, maxlp1, kmp, snormw)
1049 hes(ll+1,ll) = snormw
1050 CALL dheqr(hes, maxlp1, ll, q, info, ll)
1051 IF (info .EQ. ll)
GO TO 120
1059 rho = abs(prod*r0nrm)
1060 IF ((ll.GT.kmp) .AND.(kmp.LT.maxl))
THEN 1061 IF (ll .EQ. kmp+1)
THEN 1062 CALL dcopy(n, v(1,1), 1, dl, 1)
1069 dl(k) = s*dl(k) + c*v(k,ip1)
1074 c = q(2*ll-1)/snormw
1077 dl(k) = s*dl(k) + c*v(k,llp1)
1079 dlnrm =
dnrm2(n, dl, 1)
1087 iter = nrsts*maxl + lgmr
1088 IF (
isdgmr(n, b, x, xl, nelt, ia, ja, a, isym,
msolve,
1089 $ nmsl, itol, tol, itmax, iter, err, iunit, dl, z, wk,
1090 $ rpar, ipar, rhol, bnrm, sr, sz, jscal,
1091 $ kmp, lgmr, maxl, maxlp1, v, q, snormw, prod, r0nrm,
1092 $ hes, jpre) .NE. 0)
GO TO 200
1093 IF (ll .EQ. maxl)
GO TO 100
1098 CALL dscal(n, tem, v(1,ll+1), 1)
1101 IF (rho .LT. r0nrm)
GO TO 150
1115 IF (nrmax .GT. 0)
THEN 1123 CALL drlcal(n, kmp, maxl, maxl, v, q, dl, snormw, prod,
1138 CALL dhels(hes, maxlp1, ll, q, r0)
1143 CALL daxpy(n, r0(i), v(1,i), 1, z, 1)
1145 IF ((jscal .EQ. 1) .OR.(jscal .EQ. 3))
THEN 1150 IF (jpre .GT. 0)
THEN 1151 CALL dcopy(n, z, 1, wk, 1)
1152 CALL msolve(n, wk, z, nelt, ia, ja, a, isym, rpar, ipar)
subroutine dcopy(N, DX, INCX, DY, INCY)
Definition: dgmres.f:1381
subroutine matvec(n, x, y, nelt, ia, ja, a, isym)
Definition: matvec.f:27
subroutine dorth(VNEW, V, HES, N, LL, LDHES, KMP, SNORMW)
Definition: dgmres.f:2159
double precision function dnrm2(N, DX, INCX)
Definition: dgmres.f:559
subroutine daxpy(N, DA, DX, INCX, DY, INCY)
Definition: dgmres.f:1276
subroutine dscal(n, da, dx, incx)
Definition: dgesv.f:1746
integer function isdgmr(N, B, X, XL, NELT, IA, JA, A, ISYM, MSOLVE, NMSL, ITOL, TOL, ITMAX, ITER, ERR, IUNIT, R, Z, DZ, RWORK, IWORK, RNRM, BNRM, SB, SX, JSCAL, KMP, LGMR, MAXL, MAXLP1, V, Q, SNORMW, PROD, R0NRM, HES, JPRE)
Definition: dgmres.f:1760
subroutine dheqr(A, LDA, N, Q, INFO, IJOB)
Definition: dgmres.f:1579
subroutine dhels(A, LDA, N, Q, B)
Definition: dgmres.f:1481
subroutine msolve(n, r, z, nelt, ia, ja, a, isym, rwork, iwork)
Definition: msolve.f:22
subroutine drlcal(N, KMP, LL, MAXL, V, Q, RL, SNORMW, PROD, R0NRM)
Definition: dgmres.f:1161