cgres
C CGRES SOURCE CHAT 05/01/12 21:53:35 5004 1 NL,ILG, 2 IMAT,IA,JA,KA, 3 IZB,IZP,ICOLD, 4 NPT,NPITE,NEFF,ICONV,EPI,IPOU,VPOU, 5 NIMPR,IPAT) C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C C RESOLUTION ITERATIVE D'UN SYSTEME C C SYMETRIQUE CREUX PAR LA METHODE DU C C GRADIENT CONJUGUE SANS PRECONDITIONNEMENT C C C C***** INFOS SUR LA METHODE (LIGNE 0) C C C C DEUX MODES DE STOCKAGE SONT PROPOSES C C MORSE OU COMPRESSE. C C C C MORSE (KSTO=0) C C COMPRESSE (KSTO=1) C C C C POUR LE CAS SANS PRECONDITIONNEMENT ON RESOUD C C C C A*xi = b C C C C***** INFOS SUR LES DIMENSIONS (LIGNE 1) C C C C NL (L'ORDRE DU SYSTEME) C C C C ILG (LONGUEUR LA POUR LE MORSE) C C (NOMBRE MAXI DE VALEURS PAR LIGNE DE LA C C MATRICE POUR LE COMPRESSE) C C C C***** INFOS SUR LA MATRICE (LIGNE 2) C C C C IMAT (LA MATRICE DANS UN LISTREEL) C C C C IA (TABLEAU DE POINTEURS DU STOCKAGE MORSE) C C C C IL DOIT ETRE DIMENSIONNE A NL+1 AU MINIMUM C C C C JA (TABLEAU DE CONNECTIVITES DE LA MATRICE) C C C C IL EST STOCKE EN MORSE ET DE LONGUEUR LA C C C C KA (TABLEAU DE CONNECTIVITES EN MODE COMPRESSE) C C C C IL EST DE LA FORME KA(NL,NNZ) AVEC NNZ C C LE NOMBRE MAXI DE TERMES NON NULS POUR UNE C C LIGNE DE LA MATRICE C C C C NB : EN MORSE, KA N'EST PAS UTILISE C C EN COMPRESSE, IA ET JA NE SONT PAS UTILISES C C C C IA,JA ET KA SONT DES LISTENTI. C C C C***** INFOS SUR LE SECOND MEMBRE, LA SOLUTION INITIALE C C***** ET LA SOLUTION FINALE. (LIGNE 3) C C C C IZB SECOND MEMBRE EN ENTREE C C PAS MODIFIE. C C C C IZP ESTIMATION DE LA SOLUTION EN ENTREE C C LA SOLUTION EN SORTIE, IL FAUT LA C C CONSERVER POUR LA RESOLUTION SUIVANTE C C C C IZB ET IZP SONT DES LISTREEL DIMENSIONNES A NL C C C C ICOLD =1 (DEMARRAGE FROID) C C ICOLD!=1 (DEMARRAGE CHAUD A PARTIR DE LA C C SOLUTION INITIALE FOURNIE DANS IZP) C C C C***** INFOS SUR LA CONVERGENCE (LIGNE 4) C C C C NPT NOMBRE MAXI D'ITERATIONS EN ENTREE C C SI IL EST < 10, IL EST MIS A 10 C C NPITE FREQUENCE DES TESTS C C NEFF NOMBRE REEL EN SORTIE C C ICONV 0 NON CONVERGE, 1 CONVERGE C C EPI PRECISION DEMANDEE C C IPOU=1 LA PRECISION VA ETRE POUSSE D'UN FACTEUR C C VPOU. CECI PEUT S'AVERER UTILE LORS D'UN C C CALCUL ITERATIF OU ON VEUT DES LE DEBUT C C UNE SOLUTION PRECISE POUR EVITER DE PARTIR C C SUR UNE MAUVAISE PISTE. VPOU A UNE VALEUR C C PAR DEFAUT DE 100. C C C C***** INFOS SUR LE CONTROLE DES IMPRESSIONS (LIGNE 5) C C C C NIMPR =1 (INFOS SUR LA CONVERGENCE) C C NIMPR!=1 (SILENCIEUX SAUF EN CAS DE DIVERGENCE) C C C C IPAT = (FACULTATIF, PAR EXEMPLE UN PAS DE TEMPS)C C C C RSETD(B,A) B <- A C C ADIVEC(A,B,C,alpha) C <- A + alpha*B C C PIMDV(A,B,C) C <- A*B C C C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C IMPLICIT INTEGER(I-N) IMPLICIT REAL*8 (A-H,O-Z) -INC SMLENTI POINTEUR IA.MLENTI POINTEUR JA.MLENTI POINTEUR KA.MLENTI -INC SMLREEL POINTEUR IMAT.MLREEL POINTEUR IZB.MLREEL POINTEUR IZBB.MLREEL POINTEUR IZP.MLREEL POINTEUR IZPS.MLREEL POINTEUR IZZPR.MLREEL POINTEUR IZPMV.MLREEL POINTEUR IZTMP.MLREEL POINTEUR IZDIR.MLREEL DATA VPOU0/100./ IF(KSTO.EQ.0) LA=ILG IF(KSTO.EQ.1) NNZ=ILG IF(IPOU.EQ.1) THEN VPOUE=VPOU0 IF(VPOU.NE.VPOU0) VPOUE=VPOU ENDIF CALL OOOMRU(1) C On sauve le second membre en le dupliquant dans IZBB C qui lui sera ecrase. SEGACT IZB SEGINI IZBB SEGDES IZB SEGACT IZP JG=NL SEGINI IZPS SEGINI IZZPR SEGINI IZPMV SEGINI IZTMP SEGINI IZDIR SEGACT IMAT IF(KSTO.EQ.0) SEGACT IA IF(KSTO.EQ.0) SEGACT JA IF(KSTO.EQ.1) SEGACT KA IF(NPT.LT.10) NPT=10 IF(NPT.GT.NL) NPT=NL IF(KSTO.EQ.0) THEN C CALL PMVM(A,IA,JA,X,Y,NL,LA) ELSE C CALL PMVC(A,KA,X,Y,NL,NNZ) ENDIF C C===========DEBUT DE LA BOUCLE ITERATIVE=====600======== C NEFF=0 NCOMP=0 ICONV=0 DO 600 I=1,NPT NEFF=NEFF+1 NCOMP=NCOMP+1 IF(KSTO.EQ.0) THEN C CALL PMVM(A,IA,JA,X,Y,NL,LA) ELSE C CALL PMVC(A,KA,X,Y,NL,NNZ) ENDIF BETA=SCAR2/SCAR1 IF (NCOMP.EQ.NPITE.OR.I.EQ.NPT) THEN C On pousse la precision si necessaire ZEPS=EPI IF(IPOU.EQ.1) ZEPS=EPI/VPOUE 1 ZEPS,DELTA,DELTAP, SEPA=DELTA RSEPA=DELTA/DELTAP NCOMP=0 ENDIF IF (ICONV.EQ.1) GOTO 601 SCAR1=SCAR2 600 CONTINUE 601 CONTINUE RRES=RES/ANORB IF (ICONV.NE.1) THEN ELSE IF(NIMPR.EQ.1) WRITE(6,2222)IPAT,EPI, 1 RES,SEPA,I, 2 RRES,RSEPA,IMA ENDIF SEGDES IZP SEGSUP IZBB SEGSUP IZPS SEGSUP IZZPR SEGSUP IZDIR SEGSUP IZTMP SEGSUP IZPMV SEGDES IMAT*(NOMOD,MRU) IF(KSTO.EQ.0) SEGDES IA*(NOMOD,MRU) IF(KSTO.EQ.0) SEGDES JA*(NOMOD,MRU) IF(KSTO.EQ.1) SEGDES KA*(NOMOD,MRU) CALL OOOMRU(0) C 1111 FORMAT(1X,'* CGRES* ',I6,' NON CONV EN ',I5, 1' ITERA, RSEPA = ',D8.2,1X,'DELTAP = ',D8.2,1X, 2' RES = ',D8.2,' P = ',D8.2) 2222 FORMAT(1X,'* CGRES* ',I6,' *PREC ',D8.2, 1 ' * RESIDU-SEPARA @ NITE ',D8.2,1X,D8.2,1X,I5, 2 ' * RRES-RSEP ',D8.2,1X,D8.2, 3 ' * ELEMENT ',I7) C C FIN RESOLUTION C RETURN END
© Cast3M 2003 - Tous droits réservés.
Mentions légales