prcgsn
C PRCGSN SOURCE GOUNAND 22/08/25 21:15:10 11434 $ INCX,ITER,INMV, $ RESID,KPREC, $ BRTOL,ICALRS,IDDOT,IMVEC,IMPR,IRET) IMPLICIT REAL*8 (A-H,O-Z) IMPLICIT INTEGER (I-N) C*********************************************************************** C NOM : PRCGSN C DESCRIPTION : C Préparation de la résolution d'un système linéaire Ax=b C par une méthode de gradient conjugué au carré (CGS) avec la C stratégie de stabilisation de Neumaier préconditionnée ou non. C On stocke deux vecteurs en plus de ceux de CGS normal C C LANGAGE : ESOPE C AUTEUR : Stéphane GOUNAND (CEA/DRN/DMT/SEMT/TTMF) C mél : gounand@semt2.smts.cea.fr C REFERENCE (bibtex-like) : C @BOOK{templates, C AUTHOR={R.Barrett, M.Berry, T.F.Chan, J.Demmel, J.Donato, C J.Dongarra, V.Eijkhout, R.Pozo, C.Romine, C H. Van der Vorst}, C TITLE={Templates for the Solution of Linear Systems : C Building Blocks for Iterative Methods}, C PUBLISHER={SIAM}, YEAR={1994}, ADDRESS={Philadelphia,PA} } C -> URL : http://www.netlib.org/templates/Templates.html C pour CGS C C@TechReport{vorstsleipjen, C author = {GLG Sleijpen and HA. Van der Vorst}, C title = {Hybrid Bi-Conjugate Gradient Methods for CFD Problems}, C institution = {Universiteit Utrecht}, C year = {1995}, C type = {Preprint}, C number = {902}} C pour la stratégie de Neumaier C*********************************************************************** C*********************************************************************** C VERSION : v1, 10/02/06, version initiale C HISTORIQUE : 10/02/06 : Crétation C HISTORIQUE : C*********************************************************************** C Prière de PRENDRE LE TEMPS de compléter les commentaires C en cas de modification de ce sous-programme afin de faciliter C la maintenance ! C*********************************************************************** * * .. Includes et pointeurs associés .. -INC PPARAM -INC CCOPTIO -INC SMLREEL INTEGER JG POINTEUR LRES.MLREEL -INC SMLENTI POINTEUR LNMV.MLENTI -INC SMMATRIK POINTEUR MAPREC.MATRIK POINTEUR KMORS.PMORS POINTEUR KISA.IZA POINTEUR KS2B.IZA POINTEUR INCX.IZA POINTEUR INVDIA.IZA POINTEUR ILUM.PMORS POINTEUR ILUI.IZA * .. Parameters * This is a breakdown tolerance for BiCGSTAB-type method REAL*8 BRTOL * .. Work Vectors for CGS.. POINTEUR IR.IZA,IRTLD.IZA,IP.IZA,IPHAT.IZA POINTEUR IQ.IZA,IQHAT.IZA,IUHAT.IZA POINTEUR IXP.IZA,IBP.IZA *STAT-INC SMSTAT * .. Scalar Arguments .. INTEGER ITER, KPREC, IMPR, IRET REAL*8 RESID * .. * Vars reqd for STOPTEST2 * REAL*8 TOL, BNRM2 * .. * .. External subroutines .. * EXTERNAL STOPTEST2 INTEGER NBVA,NJA,NTT,NTTPRE * .. * .. Executable Statements .. * IRET = 0 * * On récupère les paramètres * SEGACT MATRIK SEGACT MAPREC IF (IMPR.GT.0) THEN WRITE(IOIMP,*) 'MATRIK',MATRIK,'symétrique : ', $ 'Use a Conjugate Gradient instead !' C IRET=-2 C GOTO 9999 ENDIF ENDIF * Pour le préconditionneur ILUM =MAPREC.KIDMAT(6) ILUI =MAPREC.KIDMAT(7) IDMAT=MAPREC.KIDMAT(1) SEGACT IDMAT INVDIA=IDIAG SEGDES IDMAT SEGACT KMORS * NJA =KMORS.JA(/1) SEGACT KISA SEGACT KS2B SEGACT INCX*MOD IF (KPREC.NE.0) THEN C Paramètres des préconditionnements diagonaux et D-ILU IF (KPREC.EQ.1.OR.KPREC.EQ.2) THEN C Est-il compatible avec la matrice ? SEGACT INVDIA NTTPRE=INVDIA.A(/1) IF (NTTPRE.NE.NTT) THEN WRITE(IOIMP,*) 'La matrice et son préconditionnement' WRITE(IOIMP,*) 'ne sont pas compatibles...' WRITE(IOIMP,*) 'NTT=',NTT WRITE(IOIMP,*) 'NTTPRE=',NTTPRE IRET=-2 GOTO 9999 ENDIF C Paramètres des préconditionnements ILU(0), MILU(0), ILUT, ILUT2 C ,ilutp, ilutpg, ilutpg2 ELSEIF (KPREC.GE.3.AND.KPREC.LE.10) THEN SEGACT ILUM SEGACT ILUI * SEGPRT,ILUM * SEGPRT,ILUI NTTPRE=ILUM.IA(/1) IF (NTTPRE.NE.NTT) THEN WRITE(IOIMP,*) 'La matrice et son préconditionnement', $ 'ne sont pas compatibles...' WRITE(IOIMP,*) 'NTT=',NTT,' NTTPRE=',NTTPRE IRET=-2 GOTO 9999 ENDIF ELSE INVDIA=0 WRITE(IOIMP,*) 'Erreur de programmation' GOTO 9999 ENDIF ENDIF C C Initialisation de l'historique de convergence C JG=ITER+1 SEGINI LNMV SEGINI LRES C C C Initialisation des vecteurs de travail pour BiCGSTAB C *STAT CALL INMSTA(MSTAT,0) NBVA=NTT SEGINI IR,IRTLD,IP,IPHAT SEGINI IQ,IQHAT,IUHAT SEGINI IXP,IBP *STAT CALL PRMSTA(' PRCGSN : objets temporaires',MSTAT,1) *STAT CALL SUMSTA(MSTAT,0) C C Appel de CGSN C $ KPREC,INVDIA,ILUM,ILUI, $ LRES,LNMV, $ IR,IRTLD,IP,IPHAT, $ IQ,IQHAT,IUHAT, $ IXP,IBP, $ ITER,INMV,BRTOL,RESID,ICALRS,IDDOT,IMVEC,IMPR,IRET) * Gestion du CTRL-C if (ierr.NE.0) return C C Désactivation C SEGSUP IXP,IBP SEGSUP IR,IRTLD,IP,IPHAT SEGSUP IQ,IQHAT,IUHAT JG=ITER+1 SEGADJ LRES SEGDES LRES SEGADJ LNMV SEGDES LNMV IF (KPREC.EQ.1.OR.KPREC.EQ.2) THEN SEGDES INVDIA ELSEIF (KPREC.GE.3.AND.KPREC.LE.9) THEN SEGDES ILUI SEGDES ILUM ENDIF SEGDES INCX SEGDES KS2B SEGDES KISA SEGDES KMORS SEGDES MAPREC SEGDES MATRIK C C A breakdown has occured in the CGS method C IF (IRET.LT.0) GOTO 9999 * * Normal termination * RETURN * * Format handling * * 1002 FORMAT(10(1X,1PE11.4)) * * Error handling * 9999 CONTINUE WRITE(IOIMP,*) 'An error was detected in prcgsn.eso' RETURN * * End of PRCGSN * END
© Cast3M 2003 - Tous droits réservés.
Mentions légales