39 1 N ,NNZ ,IADK ,JDIK ,DIAG_K ,
40 2 LT_K ,NI ,ITOK ,IADI ,JDII ,
41 3 LT_I ,NNZM ,IADM ,JDIM ,DIAG_M ,
42 3 LT_M ,X ,R ,ITOL ,RTOL ,
43 4 V ,W ,Y ,ITASK ,IPRINT ,
44 5 SHIFT ,KCOND ,N_MAX ,FLM ,F_X ,
45 6 ISTOP ,W_DDL,A ,AR ,
47 A NDOF ,IPARI ,INTBUF_TAB ,NUM_IMP,
48 B NS_IMP,NE_IMP,NSREM ,NSL ,NMONV ,
49 C IMONV ,MONVOL ,IGRSURF ,VOLMON,
50 D FR_MV ,IBFV ,SKEW ,XFRAME,IND_IMP,
51 H XI_C ,R0 ,NDDLI_G,INTP_C,IRBE3 ,
52 E LRBE3 ,IRBE2 ,LRBE2 )
62#include "implicit_f.inc"
67#include "dmumps_struc.h"
75 INTEGER N ,NNZ ,IADK(*) ,JDIK(*),ITOL,ISTOP,
76 . NI ,ITOK(*) ,IADI(*),JDII(*),N_MAX,
77 . NNZM ,IADM(*),JDIM(*),IPREC,ITASK,IPRINT,
78 . W_DDL(*),IBFV(*),IRBE3(*) ,LRBE3(*),NDDLI_G,
80 INTEGER NDOF(*),NE_IMP(*),NSREM ,NSL,INTP_C,
81 . IPARI(*) ,(*),NS_IMP(*),IND_IMP(*)
82 INTEGER NMONV,IMONV(*),MONVOL(*),FR_MV(*)
85 . DIAG_K(*), LT_K(*) ,DIAG_M(*),LT_M(*) ,X(*), RTOL,
86 . V(*) ,W(*) ,R(*) ,Y(*),SHIFT,KCOND,LT_I(*),FLM,F_X
88 . A(3,*),AR(3,*),VE(3,*),D(3,*),DR(3,*),XE(3,*),
89 . ms(*),volmon(*),skew(*) ,xframe(*),xi_c(*),r0
91 TYPE(intbuf_struct_) INTBUF_TAB(*)
92 TYPE (SURF_) ,
DIMENSION(NSURF) :: IGRSURF
97 INTEGER I,J,ITN,IP,NLIM,IBID,IUPD
99 . r2(n),b(n),cs1(2),rr,
100 . r02,anorm,rnorm, ynorm,rbid
103 . alfa, b1, beta, beta1, bstep, cs,
104 . cgnorm, dbar, delta, denom, diag,
105 . eps, epsa, epsln, epsr, epsx,
106 . gamma, gbar, gmax, gmin, gpert,
107 . lqnorm, oldb, qrnorm, rhs1, rhs2,
108 . s, sn, snprod, t, tnorm,
109 . x1cg, x1lq, ynorm2, zbar, z
112 CHARACTER*52 MSG(-1:8)
114 DATA EXIT /
'TERMINATION WITH'/
115 DATA warr /
'**WARRING**'/
118 . /
'BETA2 = 0. IF M = I, F AND X ARE EIGENVECTORS OF K',
119 .
'BETA1 = 0. THE EXACT SOLUTION IS X = 0',
120 .
'REQUESTED ACCURACY ACHIEVED, AS DETERMINED BY RTOL',
121 .
'REASONABLE ACCURACY ACHIEVED, GIVEN EPS',
122 .
'X HAS CONVERGED TO AN EIGENVECTOR',
123 .
'ACOND HAS EXCEEDED 0.1/EPS',
124 .
'THE ITERATION LIMIT WAS REACHED',
125 .
'APROD DOES NOT DEFINE A SYMMETRIC MATRIX',
126 .
'MSOLVE DOES NOT DEFINE A SYMMETRIC MATRIX',
127 .
'MSOLVE DOES NOT DEFINE A POS-DEF PRECONDITIONER' /
129 TYPE(dmumps_struc) MBID
142 WRITE(iout,*)
' *** BEGIN PRECONDITION LANCZOS ITERATION ***'
146 WRITE(istdo,*)
' *** BEGIN PRECONDITION LANCZOS ITERATION ***'
163 1 n ,ni ,iadk ,jdik ,diag_k,
164 2 lt_k ,iadi ,jdii ,itok ,lt_i ,
166 5 ve ,ms ,xe ,d ,dr ,
167 6 ndof ,ipari ,intbuf_tab ,num_imp,
168 7 ns_imp,ne_imp,nsrem ,nsl ,ibfv ,
169 8 skew ,xframe,monvol,volmon,igrsurf ,
170 9 fr_mv,nmonv ,imonv ,ind_imp,
171 a xi_c ,iupd ,irbe3 ,lrbe3 ,irbe2 ,lrbe2 )
177 1 gbid ,ibid ,ibid , diag_k,lt_k ,
178 2 iadk ,jdik ,ibid ,ibid ,ibid ,
179 3 ibid ,rbid ,ibid ,ibid ,mbid ,
180 4 ibid ,ibid ,ibid ,ibid ,ibid ,
182 1 n ,nnzm,iadm ,jdim ,diag_m ,
189 CALL produt_w( n ,r ,y ,w_ddl,beta1)
193 IF (beta1 < zero)
THEN
197 WRITE(iout, 3000) warr, msg(8)
198 WRITE(istdo, 3000) warr, msg(8)
203 IF (beta1 == zero)
THEN
210 IF (itol==2) r02 = beta1
211 beta1 = sqrt( beta1 )
221 IF(iprint<0)
WRITE(istdo,1000)itn,rr
222 WRITE(iout,1000)itn,rr
229 1 n ,ni ,iadk ,jdik ,diag_k,
230 2 lt_k ,iadi ,jdii ,itok ,lt_i ,
234 7 ns_imp,ne_imp,nsrem
235 8 skew ,xframe,monvol,volmon,igrsurf
236 9 fr_mv,nmonv ,imonv ,ind_imp,
237 a xi_c ,iupd ,irbe3 ,lrbe3 ,irbe2
243 IF (shift/=zero)
THEN
245 y(i) = y(i)-shift*v(i)
267 1 gbid ,ibid ,ibid , diag_k,lt_k ,
268 2 iadk ,jdik ,ibid ,ibid ,ibid ,
269 3 ibid ,rbid ,ibid ,ibid ,mbid ,
270 4 ibid ,ibid ,ibid ,ibid ,ibid ,
272 1 n ,nnzm,iadm ,jdim ,diag_m ,
275 CALL produt_w( n ,r2 ,y ,w_ddl,beta)
277 IF (beta < zero)
THEN
281 WRITE(iout, 3000) warr, msg(8)
282 WRITE(istdo, 3000) warr, msg(8)
307 tnorm = alfa*alfa + beta*beta
309 gmax = abs( alfa ) + flm
329 anorm = sqrt( tnorm )
330 ynorm = sqrt( ynorm2 )
332 epsx = anorm * ynorm * flm
333 epsr = anorm * ynorm * rtol
335 IF (diag == zero) diag = epsa
337 lqnorm = sqrt( rhs1*rhs1 + rhs2*rhs2 )
338 qrnorm = snprod * beta1
339 cgnorm = qrnorm * beta / abs( diag )
347 IF (lqnorm <= cgnorm)
THEN
350 denom =
min( gmin, abs( diag ) )
358 IF (itn >= nlim ) istop = 5
359 IF (kcond >=em01/flm) istop = 4
360 IF (epsx >= beta1 ) istop = 3
361 IF (cgnorm <= epsx ) istop = 2
362 IF (cgnorm <= epsr ) istop = 1
382 IF (mod(itn,ip)==0)
THEN
383 WRITE(iout,1001)itn,cgnorm
384 IF(iprint<0)
WRITE(istdo,1001)itn,cgnorm
402 IF (istop /= 0)
GO TO 800
411 1 n ,ni ,iadk ,jdik ,diag_k,
412 2 lt_k ,iadi ,jdii ,itok ,lt_i ,
414 5 ve ,ms ,xe ,d ,dr ,
415 6 ndof ,ipari ,intbuf_tab ,num_imp,
416 7 ns_imp,ne_imp,nsrem ,nsl ,ibfv ,
417 8 skew ,xframe,monvol,volmon,igrsurf ,
418 9 fr_mv,nmonv ,imonv ,ind_imp,
419 a xi_c ,iupd ,irbe3 ,lrbe3 ,irbe2 ,lrbe2 )
420 IF (shift/=zero)
THEN
422 y(i) = y(i)-shift*v(i)
441 1 gbid ,ibid ,ibid , diag_k,lt_k ,
442 2 iadk ,jdik ,ibid ,ibid ,ibid ,
443 3 ibid ,rbid ,ibid ,ibid ,mbid ,
444 4 ibid ,ibid ,ibid ,ibid ,ibid ,
446 1 n ,nnzm,iadm ,jdim ,diag_m ,
455 WRITE(istdo, 3000) warr, msg(8)
458 tnorm = tnorm + alfa**2 + oldb**2 + beta**2
462 gamma = sqrt( gbar*gbar + oldb*oldb )
465 delta = cs * dbar + sn * alfa
466 gbar = sn * dbar - cs * alfa
477 x(i) = (w(i) * s + v(i) * t) + x(i)
478 w(i) = w(i) * sn - v(i) * cs
484 bstep = snprod * cs * z + bstep
486 gmax =
max( gmax, gamma )
487 gmin =
min( gmin, gamma )
488 ynorm2 = z*z + ynorm2
489 rhs1 = rhs2 - delta * z
506 800
IF (cgnorm <= lqnorm)
THEN
508 bstep = snprod * zbar + bstep
509 ynorm = sqrt( ynorm2 + zbar*zbar )
512 x(i) = x(i)+zbar*w(i)
539 WRITE(iout,2000)
EXIT, istop, itn,
540 .
EXIT, anorm, kcond,
542 WRITE(iout, 3000)
EXIT, msg(istop)
544 WRITE(istdo,2000)
EXIT, istop, itn,
545 .
EXIT, anorm, kcond,
547 WRITE(istdo, 3000)
EXIT, msg(istop)
552 1 n ,ni ,iadk ,jdik ,diag_k,
553 2 lt_k ,iadi ,jdii ,itok ,lt_i ,
555 5 ve ,ms ,xe ,d ,dr ,
556 6 ndof ,ipari ,intbuf_tab ,num_imp,
557 7 ns_imp,ne_imp,nsrem ,nsl ,ibfv ,
558 8 skew ,xframe,monvol,volmon,igrsurf ,
559 9 fr_mv,nmonv ,imonv ,ind_imp,
560 a xi_c ,iupd ,irbe3 ,lrbe3 ,irbe2 ,lrbe2 )
569 WRITE(iout,1002)itn,rnorm
570 IF(iprint<0)
WRITE(istdo,1002)itn,rnorm
572 IF (istop>0.AND.istop<4) istop=0
577 1100
FORMAT(/ 1p,
' BETA1 =', e10.2, 3x,
'ALPHA1 =', e10.2
578 $ /
' (V1,V2) BEFORE AND AFTER ', e14.2
579 $ /
' LOCAL REORTHOGONALIZATION', e14.2)
580 1200
FORMAT(// 5x,
'ITN', 7x,
'X1(CG)', 10x,
581 $
'NORM(R)', 5x,
'BSTEP', 7x,
'NORM(A)', 3x,
'COND(A)')
582 1300
FORMAT(1p, i8, e19.10, e11.2, e14.5, 2e10.2)
584 2000
FORMAT(/ 1p, a, 6x,
'ISTOP =', i3, 15x,
'ITN =', i8
585 $ / a, 6x,
'ANORM =', e12.4, 6x,
'KCOND =', e12.4
586 $ / a, 6x,
'RNORM =', e12.4, 6x,
'YNORM =', e12.4)
587 3000
FORMAT( a, 6x, a )
588 1000
FORMAT(5x,
'ITERATION=',i8,5x,
' INITIAL RESIDUAL NORM=',e11.4)
589 1001
FORMAT(5x,
'ITERATION=',i8,5x,
' C.G. RESIDUAL NORM=',e11.4)
590 1002
FORMAT(3x,
'TOTAL LANCZOS ITERATION=',i8,5x,
591 .
' RELATIVE RESIDUAL NORM=',e11.4)
592 2001
FORMAT(/ 5x,
'WITH', 2x,
'ANORM =', e12.4, 2x,
'YNORM =',
593 . e12.4,2x,
'KCOND =', e12.4)
594 2002
FORMAT(/ 5x,
'WITH', 2x,
'ALFA =', e12.4, 2x,
'BETA =',
595 . e12.4,2x,
'OLDB =', e12.4)
subroutine imp_lanzp(iprec, n, nnz, iadk, jdik, diag_k, lt_k, ni, itok, iadi, jdii, lt_i, nnzm, iadm, jdim, diag_m, lt_m, x, r, itol, rtol, v, w, y, itask, iprint, shift, kcond, n_max, flm, f_x, istop, w_ddl, a, ar, ve, ms, xe, d, dr, ndof, ipari, intbuf_tab, num_imp, ns_imp, ne_imp, nsrem, nsl, nmonv, imonv, monvol, igrsurf, volmon, fr_mv, ibfv, skew, xframe, ind_imp, xi_c, r0, nddli_g, intp_c, irbe3, lrbe3, irbe2, lrbe2)