itinv
C ITINV SOURCE PV 17/12/19 21:15:06 9673 & ,PRECI2,IPMX) IMPLICIT INTEGER(I-N) IMPLICIT REAL*8 (A-H,O-Z) ************************************************************************ * * I T I N V * --------- * * FONCTION: * --------- * * RESOUDRE, PAR ITERATIONS INVERSES, UN SYSTEME D'EQUATIONS: * |A|.(X) = V.|B|.(X) * |A| ET |B| ETANT 2 'RIGIDITE', * (X) UN 'CHPOINT' A DETERMINER ET * V UN 'FLOTTANT' EGALEMENT A DETERMINER. * * ("ITINV" VAUT POUR IT-ERATIONS INV-ERSES) * * MODE D'APPEL: * ------------- * * CALL ITINV (IPA,IPB,IPX,PROPRE,CONVRG,ITERMX,NUMACC,PRECI1,PRECI2) * * PARAMETRES: (E)=ENTREE (S)=SORTIE * ----------- * * IPA ENTIER (E) POINTEUR DE L'OBJET 'RIGIDITE' |A|. * IPB ENTIER (E) POINTEUR DE L'OBJET 'RIGIDITE' |B|. * IPX ENTIER (E) POINTEUR DE L'OBJET 'CHPOINT' DE DEPART. * (S) POINTEUR DE L'OBJET 'CHPOINT' SOLUTION. * PROPRE REEL DP (S) TABLEAU CONTENANT DES CARACTERISTIQUES DU * MODE PROPRE CALCULE. ACTUELLEMENT, * PROPRE(1) = "VALPP" , * PROPRE(2) = (X)T.|B|.(X) , (X) 'CHPOINT' * SOLUTION, * PROPRE(3)ET(4) ET(5) DEPL.GEN. SELON X,Y,Z * CONVRG LOGIQUE (S) INDIQUE PAR .TRUE. OU .FALSE. SI LA * CONVERGENCE A EU LIEU OU NON. * ITERMX ENTIER (E) NOMBRE MAXIMUM D'ITERATIONS PERMIS. * NUMACC ENTIER (E) L'ACCELERATION DE CONVERGENCE A LIEU 1 * FOIS TOUTES LES "NUMACC" ITERATIONS. * PRECI1 REEL SP (E) CONSTANTE DONNANT LA PRECISION DE * CONVERGENCE DES VALEURS DU 'CHPOINT' "X". * PRECI2 REEL SP (E) CONSTANTE DONNANT LA PRECISION DE * CONVERGENCE DU SCALAIRE "XT.B.X" * * LEXIQUE: (ORDRE ALPHABETIQUE) * -------- * * DIFREL REEL SP VOIR LE S.P. "ITINV1". * IACCEL ENTIER NOMBRE D'ITERATIONS CONSECUTIVES EFFECTUEES * SANS ACCELERATION DE CONVERGENCE. * IPX0 ENTIER VOIR LE S.P. "ITINV1". * IPX1 ENTIER VOIR LE S.P. "ITINV1". * IPX2 ENTIER VOIR LE S.P. "ITINV1". * NBITER ENTIER NOMBRE D'ITERATIONS EFFECTUEES. * NUMXBX ENTIER NUMERO DE LA DERNIERE ITERATION OU L'ON A * CALCULE "XT.B.X" POUR 2 'CHPOINT' ITERES * CONSECUTIFS. * VALPP REEL DP VALEUR PROPRE ASSOCIEE AU 'CHPOINT' SOLUTION. * * MODE DE FONCTIONNEMENT: * ----------------------- * * METHODE DES ITERATIONS INVERSES: * * LA SUITE "(X)I" TELLE QUE: * |A| . (X)I+1 = |B| . (X)I * TEND VERS LA (OU UNE DES) SOLUTION(S) DE: * |A| . (X) = V . |B| . (X) * CORRESPONDANT AU PLUS PETIT V SOLUTION (EN VALEUR ABSOLUE) SOUS * RESERVE QUE LE (X)1 DE DEPART N'EST PAS B-ORTHOGONAL AU (X) * SOLUTION. * * SOUS-PROGRAMMES APPELES: * ------------------------ * * DTCHPO, ITINV1, XTMX, YTX1 (?), VRFMOD,DEPGEN ,DTCHPM * * AUTEUR, DATE DE CREATION: * ------------------------- * * PASCAL MANIGOT 19 DECEMBRE 1984 * * LANGAGE: * -------- * * FORTRAN77 * ************************************************************************ * -INC PPARAM -INC CCOPTIO -INC SMLMOTS * REAL*8 PROPRE(*) * COMMON/CITINV/ NBITER,IACCEL,NUMAC,IPX2,IPX0,IPX1,IPBX1, C IBBX1,IBBX2,ITPRO,DIFREL * LOGICAL CONVRG * PARAMETER (INFINI = 9999) * IF (IIMPI .EQ. 747) THEN CALL GIBTEM(XKT) INTERR(1)=XKT ENDIF * * PREPARATION DES ITERATIONS: IBBX1=0 IBBX2 = IPMX IPX2 = IPX NUMAC = NUMACC NBITER = 0 IACCEL = 0 NUMXBX = -10 X1BX1 = 1.D10 IPLMOX=0 IPLMOY=0 C C PREPARATION DES TABLEAUX DONNANT LA CORRESPONDANCE DES NOMS C D INCONNUE DANS X ET MX STOCKE DANS UN LIST MOT C C C C * * -- DEBUT DES ITERATIONS INVERSES -- * DIFREL = 1.E10 205 IF (DIFREL .GT. PRECI1 .AND. NBITER .LT. ITERMX) THEN IBBX1 = IBBX2 IF (IERR .NE. 0) RETURN GOTO 205 END IF * convrg=.false. DO 300 IB300=1,INFINI * * -- CALCUL DE "XT.B.X" POUR 2 ITERES -- * IF (NBITER .LT. ITERMX) THEN IF (NBITER .EQ. (NUMXBX + 1) ) THEN X1BX1 = X2BX2 ELSE * PRODUIT SCALAIRE X1.(M.X1) : C CALL XTMX (IPX1,IPB, X1BX1) IF (IERR .NE. 0) RETURN END IF END IF * * PRODUIT X2T.B.X2 : IF (IERR .NE. 0) RETURN NUMXBX = NBITER * DIFXBX = ABS(1.D0 - ABS(X1BX1 / X2BX2) ) * if (convrg) goto 302 IF (DIFREL .LE. PRECI1 .AND. DIFXBX .LE. PRECI2) THEN CONVRG = .TRUE. * --> SORTIE DE BOUCLE N.300 apres l'iteration suivante ELSE IF (NBITER .GE. ITERMX) THEN CONVRG = .FALSE. * --> SORTIE DE BOUCLE N.300 GOTO 302 ENDIF IBBX1 = IBBX2 IF (IERR .NE. 0) RETURN * 300 CONTINUE * END DO 302 CONTINUE * IF (IIMPI.EQ.2) WRITE (IOIMP,2000) NBITER 2000 FORMAT (//,1X,I3,' ITERATIONS INVERSES ONT ETE EFFECTUEES.'///) * * -- RETOUR DU MODE PROPRE -- * C CALL XTMX (IPX2,IPA, X2AX2) IF (IERR .NE. 0) RETURN VALPP = X2AX2 / X2BX2 * PROPRE(1) = VALPP PROPRE(2) = X2BX2 IPX = IPX2 C C CALCUL DES MASSES GEN. INTRODUCTION DES COEF. PI OU 2PI C EVENTUELS C * * IMPRESSIONS * IF (IIMPI.EQ.30) WRITE(IOIMP,1000) (PROPRE(I),I=1,5) 1000 FORMAT(/10X,'SBR ITINV',/10X,5(E12.5,1X)) * * * SUPPRESSION DES 'CHPOINT' DE TRAVAIL: IF ( (IACCEL + 1) .EQ. NUMAC) THEN END IF MLMOTS =IPLMOX MLMOT1 =IPLMOY SEGSUP MLMOTS,MLMOT1 * IF (IIMPI .EQ. 30) THEN CALL GIBTEM(XKT) INTERR(1)=XKT * VERIFICATION DU MODE: IF (IERR .NE. 0) RETURN CALL GIBTEM(XKT) INTERR(1)=XKT END IF * END
© Cast3M 2003 - Tous droits réservés.
Mentions légales