1 : C ITINV1 SOURCE CHAT 09/10/09 21:19:06 6519 2 : SUBROUTINE ITINV1 (IPA,IPB) 3 : IMPLICIT INTEGER(I-N) 4 : IMPLICIT REAL*8 (A-H,O-Z) 5 : ************************************************************************ 6 : * 7 : * I T I N V 1 8 : * ----------- 9 : * 10 : * FONCTION: 11 : * --------- 12 : * 13 : * 1) EFFECTUER (EVENTUELLEMENT) UNE ACCELERATION DE CONVERGENCE, 14 : * 2) EFFECTUER UNE ITERATION: |A|.X(I+1) = |B|.X(I), |A| ET |B| 15 : * ETANT 2 'RIGIDITE' ET X(J) LE 'CHPOINT' DE L'ITERATION "J". 16 : * 3) CALCULER DES ELEMENTS DE COMPARAISON ENTRE X(I) ET X(I+1). 17 : * 18 : * MODE D'APPEL: 19 : * ------------- 20 : * 20 : * CALL ITINV1 (IPA,IPB) 21 : * 22 : * PARAMETRES: (E)=ENTREE (S)=SORTIE 23 : * ----------- 24 : * 25 : * +DIFREL REEL SP (S) "DIFFERENCE RELATIVE". 26 : * EGAL A ABS(DIFMAX/VALMAX). 27 : * +IACCEL ENTIER (E) NOMBRE D'ITERATIONS CONSECUTIVES EFFECTUEES 28 : * SANS ACCELERATION DE CONVERGENCE. 29 : * (S) MEME DEFINITION. VALEUR INCREMENTEE OU 30 : * REMISE A 0. 31 : * IPA ENTIER (E) POINTEUR DE L'OBJET 'RIGIDITE' |A|. 32 : * IPB ENTIER (E) POINTEUR DE L'OBJET 'RIGIDITE' |B|. 33 : * +IPBX1 ENTIER (S) POINTEUR DU 'CHPOINT' PRODUIT DE |B| PAR 34 : * "X1". 35 : * +IPX0 ENTIER (S) POINTEUR DU 'CHPOINT' ITERE PRECEDANT "X1" 36 : * (FOURNI QUAND "IACCEL" VAUT "NUMAC - 1"). 37 : * +IPX1 ENTIER (E) POINTEUR DU 'CHPOINT' ITERE "X1" D'INDICE 38 : * "NBITER". 39 : * (S) MEME DEFINITION, "NBITER" AYANT ETE 40 : * INCREMENTE. 41 : * +IPX2 ENTIER (E) POINTEUR DU 'CHPOINT' ITERE "X1". 42 : * (S) POINTEUR DU 'CHPOINT' ITERE SUIVANT "X1". 43 : * +NBITER ENTIER (E) NOMBRE D'ITERATIONS EFFECTUEES. 44 : * (S) MEME DEFINITION, VALEUR INCREMENTEE. 45 : * +NUMAC ENTIER (E) L'ACCELERATION DE CONVERGENCE A LIEU 1 46 : * FOIS TOUTES LES "NUMAC" ITERATIONS. 47 : * 48 : * + = PARAMETRE PASSE DANS LE COMMUN "CITINV". 49 : * 50 : * LEXIQUE: (ORDRE ALPHABETIQUE) 51 : * -------- 52 : * 53 : * DIFMAX REEL DP DIFFERENCE MAXIMALE ENTRE LES VALEURS 54 : * CORRESPONDANTES DE DEUX 'CHPOINT' ITERES 55 : * CONSECUTIFS. 56 : * IPDIFF ENTIER POINTEUR SUR LA DIFFERENCE DES 'CHPOINT' DE 57 : * POINTEURS "IPX2" ET "IPX1". 58 : * VALMAX REEL DP VALEUR MAXIMALE DANS UN 'CHPOINT' ITERE. 59 : * 60 : * SOUS-PROGRAMMES APPELES: 61 : * ------------------------ 62 : * 63 : * ACCEL1, COMBI2, DTCHPO, ANCHPO, MAXIM1, MUCPRI, NORMA1, RESOU1, 64 : * DTCHPM . 65 : * 66 : * AUTEUR, DATE DE CREATION: 67 : * ------------------------- 68 : * 69 : * PASCAL MANIGOT 19 DECEMBRE 1984 70 : * 71 : * LANGAGE: 72 : * -------- 73 : * 74 : * FORTRAN77 75 : * 76 : ************************************************************************ 77 : * 78 : -INC CCOPTIO 79 : -INC CCHAMP 80 : -INC SMRIGID 81 : SEGMENT IDEMEN(0) 82 : * 83 : CHARACTER*4 MOTCLE 84 : * 85 : COMMON/CITINV/ NBITER,IACCEL,NUMAC,IPX2,IPX0,IPX1,IPBX1, 86 : C IBBX1,IBBX2,ITPRO,DIFREL 87 : * 88 : PARAMETER (IPLACE = 0) 89 : PARAMETER (UN = 1.D0) 90 : PARAMETER (XMOIN1 = -1.D0) 91 : * 92 : * 93 : * -- PREPARATION POUR LES SOUS-PROGRAMMES "MAXIM1" ET "NORMA1" -- 94 : * 95 : * ON EXCLUT LES COMPOSANTES DE TYPE "LX": 95 : CALL MOTS1 (IPLMOT,MOTCLE) 96 : * 97 : NBITER = NBITER + 1 98 : IACCEL = IACCEL + 1 99 : * 100 : * 101 : IF (IACCEL .EQ. NUMAC) THEN 102 : * 103 : * HYP: "NUMAC" >= 3 (NON TESTE DANS LE SOUS-PROGRAMME) 104 : * 105 : IACCEL = 0 106 : * ACCELERATION DE CONVERGENCE: 106 : * CALL ACCEL1 (IPX0,IPX1,IPX2, IPOINT) 106 : CALL ACTIPO (1.D0,1,IPX0,IPX1,IPX2,0) 107 : IF (IERR .NE. 0) RETURN 107 : CALL LIROBJ('CHPOINT',IPOINT,1,IRRR) 107 : CALL DTCHPO (IPX0) 107 : CALL DTCHPO (IPX1) 107 : IF (IPOINT .NE. IPX2) CALL DTCHPO (IPX2) 108 : IPX1 = IPOINT 108 : CALL MUCPRI(IPX1,IPB,IBBX1) 109 : IF(IERR.NE.0) RETURN 110 : * 111 : ELSE 112 : * 113 : IF ( (IACCEL + 1) .EQ. NUMAC) THEN 114 : IPX0 = IPX1 115 : ELSE IF (NBITER .GT. 1) THEN 115 : CALL DTCHPO (IPX1) 116 : END IF 117 : IPX1 = IPX2 118 : * 119 : END IF 120 : * 121 : * -- RESOLUTION DE: A.X2 = B.X1 -- 122 : * 123 : * MISE A ZERO DES TERMES EN PI POUR LES ELTS LIQUIDES 124 : * 125 : IPTBX1 = IBBX1 125 : CALL ANCHPO(IPTBX1,NOMDU(15),IBBX1) 125 : CALL DTCHPO(IPTBX1) 126 : * 127 : * determination symetrique ou non 128 : * 129 : INSYM=0 130 : MRIGID = IPA 131 : SEGACT,MRIGID 132 : NRG = IRIGEL(/1) 133 : NBR = IRIGEL(/2) 134 : IF(NORINC.GT.0 .AND. NORIND.GT.0) THEN 135 : INSYM = 1 136 : ENDIF 137 : IF (NRG.GE.7) THEN 138 : DO 9 IN = 1,NBR 139 : IANTI=IRIGEL(7,IN) 140 : IF(IANTI.GT.0) THEN 141 : INSYM = 1 142 : ENDIF 143 : 9 CONTINUE 144 : ENDIF 145 : SEGDES,MRIGID 146 : * 147 : SEGINI IDEMEN 148 : IDEMEN(**)=IBBX1 149 : NOID=0 150 : NOEN=1 151 : IF (INSYM.EQ.0) THEN 151 : CALL RESOU1 (IPA,IDEMEN,NOID,NOEN,1D-18) 152 : ELSE 152 : CALL LDMT (IPA,IDEMEN,NOID,NOEN,1D-18) 153 : ENDIF 154 : SEGACT IDEMEN 155 : IPX20=IDEMEN(1) 156 : SEGSUP IDEMEN 157 : IF (IERR .NE. 0) RETURN 158 : * 159 : * -- NORMALISATION A 1 DE "X2" -- 160 : * 160 : CALL NORMA1 (IPX20,IPLMOT,MOTCLE, IPX2) 161 : IF (IERR .NE. 0) RETURN 161 : CALL DTCHPO (IPX20) 162 : IF (NBITER .GT. 1) THEN 163 : * ON TUE AUSSI LE SUPPORT DES POINTS CREE PAR MUCPRI 163 : * CALL DTCHPM (IPBX1) 163 : * CALL DTCHPM (IBBX1) 164 : END IF 165 : * PRODUIT RIGIDITE.CHPOINT: 165 : CALL MUCPRI (IPX2,IPB, IBBX2) 166 : IF (IERR .NE. 0) RETURN 167 : * 168 : * 169 : * -- CREATION DU MAXIMUM DE (X2-X1) -- 170 : * 170 : CALL COMBI2 (IPX2,UN,IPX1,XMOIN1, IPDIFF) 171 : IF (IERR .NE. 0) RETURN 171 : CALL MAXIM1 (IPDIFF,IPLMOT,MOTCLE,IPLACE, DIFMAX) 172 : IF (IERR .NE. 0) RETURN 172 : CALL DTCHPO (IPDIFF) 173 : * 174 : * RQ: GRACE A L'APPEL A "NORMA1", "VALMAX" EST CONSTANT ET 175 : * EGAL A 1 --> (DIFMAX/VALMAX = DIFMAX) 176 : * 177 : DIFREL = ABS(DIFMAX) 178 : IF (NBITER.EQ.30.AND.ITPRO.EQ.1) THEN 179 : IF (IIMPI.EQ.2) WRITE(IOIMP,11111) NBITER,DIFREL 180 : 11111 FORMAT(/1X,'ITERATION',1X,I4,1X,'CRITERE DE CONVERGENCE',1X,E12.5) 181 : ENDIF 182 : * 183 : END 184 : 185 : 186 : 187 : 188 : 189 : 190 : 191 : 192 :
© Cast3M 2003 - All rights reserved.
Disclaimer