arpver
C ARPVER SOURCE CB215821 20/11/25 13:18:25 10792 & IPVECR,IPVECI,VALP) C ********************************************************************** C C A R P V E R C C FONCTION: C --------- C C CALCUL DE NORMES ET DU RESIDU D'UN MODE C C C REMARQUES: C --------- C C POUR UN MODE (x,LAMBDA) SONT CALCULES : C C * SA NORME PAR RAPPORT AU B-PRODUIT SCALAIRE C ||X||= X*BX C C * SON RESIDU C - EPS = Kx-LAMBDA*Mx OU Kx-LAMBDA*KSIGx DANS LE CAS LINEAIRE C - EPS = Kx+LABMDA*Cx+LAMBDA**2*Mx DANS LE CAS QUADRATIQUE C C * DES NORMES DU RESIDU C - NORME EUCLIDIENNE ||EPS|| = EPS*EPS C (PRODUIT SCALAIRE PAR LE CONJUGUE) C - NORME INFINIE ||EPS|| = MAX( ABS(RE(EPS)) + ABS(IM(EPS)) ) C C C PARAMETRES: (E)=ENTREE (S)=SORTIE C ----------- C C IPRTRA ENTIER (E) POINTEUR DES OPERATEURS DE TRAVAIL C C TYPRO ENTIER (E) TYPE DE PROBLEME C C I ENTIER (E) NUMERO DE MODE C C QUAD LOGIQUE (E) PROBLEME QUADRATIQUE OU NON C C SYM LOGIQUE (E) PROBLEME SYMETRIQUE OU NON C C EPSI REEL DP (E) ZERO DE TOLERANCE C C INVER LOGIQUE (E) .TRUE. -> PRODUIT SCALAIRE X'KX C .FALSE. -> PRODUIT SCALAIRE X'MX C C IPVECR ENTIER (E) POINTEUR DE LA PARTIE RELLE DU MODE C C IPVECI ENTIER (E) POINTEUR DE LA PARTIE IMAGINAIRE C DU MODE (OPTIONNEL) C C VALP COMPLEX DP (E) VALEUR PROPRE ASSOCIEE AU MODE C C C SOUS-PROGRAMMES APPELES: C ------------------------ C C MUCPRI, MUCHPO, ADCHPO, OPCHP1, DTCHPO C MOTS1, MAXIM1, CORRSP, XTX1, XTMX, XTY1, C C C AUTEUR, DATE DE CREATION: C ------------------------- C C PASCAL BOUDA 18 SEPTEMBRE 2015 C C LANGAGE: C -------- C C FORTRAN 77 & 90 C C ********************************************************************** IMPLICIT INTEGER(I-N) IMPLICIT REAL*8 (A-H,O-Z) -INC PPARAM -INC CCOPTIO c -INC TARTRAK -INC TARWORK INTEGER IPRTRA INTEGER TYPRO INTEGER I LOGICAL QUAD LOGICAL SYM LOGICAL INVER INTEGER IPVECR INTEGER IPVECI COMPLEX*16 VALP INTEGER IPRIGI,IPMASS,IPSCAL INTEGER IPLMOT CHARACTER*(LOCOMP) MOTCLE COMPLEX*16 RAY COMPLEX*16 UN INTEGER IPLMOX, IPLMOY INTEGER IPMX, IPMY REAL*8 XMX, XMY, YMX, YMY REAL*8 RAYR LOGICAL MAL INTEGER IPCTRA(30) C REAL*8 CXINF,CXTCX,ICXTCX,IKXTKX,MXINF,MXTMX,RCXTCX,RKXTKX,RMXTMX C REAL*8 IMXTMX,KXTKX,KXINF REAL*8 EUC, INF C *********************************************************************** C Cas symetrique C *********************************************************************** MAL=.FALSE. RAYR=0. RAY=CMPLX(0.,0.) MRITRA=IPRTRA SEGACT MRITRA IF (SYM) THEN C **************** C Calcul de ||x||* C **************** ELSE ENDIF RAY=CMPLX(RAYR,0.) C critere de norme "admissible" MAL=.TRUE. ENDIF IF (IIMPI .GT. 0) THEN C ********************************************** C Calcul de Ax-LAMBDA*Bx et de ||Ax-LAMBDA*Bx||* C ********************************************** C Initialisation des chpoints de travail DO j=1,30 IPCTRA(j)=0 ENDDO C ********Calcul des produits matrices-vecteur*************************** C *********Combinaisons lineaires*************************************** C IPCTRA(10) est le chpoint residu c *Norme euclidienne de Kx c CALL XTX1(IPCTRA(1),KXTKX) c c *Norme infinie de Kx C IOPERA = 14 C IARGU = 0 C I1 = 0 C X1 = 0.D0 C CALL OPCHP1(IPCTRA(1),IOPERA,IARGU,I1,X1,IPCTRA(6),IRET) c c CALL MOTS1 (IPLMOT,MOTCLE) c CALL MAXIM1 (IPCTRA(6),IPLMOT,MOTCLE,0,KXINF) c c c *Norme euclidienne de lambda*Mx c CALL XTX1(IPCTRA(5),MXTMX) c c *Norme infinie de lambda*Mx C IOPERA = 14 C IARGU = 0 C I1 = 0 C X1 = 0.D0 C CALL OPCHP1(IPCTRA(5),IOPERA,IARGU,I1,X1,IPCTRA(7),IRET) c c CALL MOTS1 (IPLMOT,MOTCLE) c CALL MAXIM1 (IPCTRA(7),IPLMOT,MOTCLE,0,MXINF) C Norme euclidienne du residu C Norme infinie du residu IOPERA = 14 IARGU = 0 I1 = 0 X1 = 0. C Calcul des normes EUC=XTX INF=XINF ENDIF C *********************************************************************** C Cas non symetrique C *********************************************************************** ELSE IF (TYPRO .EQ. 3) THEN C **************** C Calcul de ||x||* C **************** IPSCAL=IPRIGI ELSE IPSCAL=IPMASS ENDIF C Formation d'un chpoint nul si mode reel IF (IPVECI .EQ. 0) THEN ENDIF RAY=CMPLX(XMX+YMY,XMY-YMX) C Dans le cas quadratique, le calcul se fait par blocs IF (QUAD) THEN UN=CMPLX(1.D0,0.D0) RAY=(UN+ABS(VALP)**2)*RAY ENDIF C critere de norme "admissible" MAL=.TRUE. ENDIF ENDIF IF (IIMPI .GT. 1) THEN C ********************************************** C Calcul de Ax-LAMBDA*Bx et de ||Ax-LAMBDA*Bx||* C ********************************************** C Initialisation des chpoints de travail DO j=1,30 IPCTRA(j)=0 ENDDO C ********Calcul des produits matrices-vecteur*************************** c *Norme euclidienne de Kx c CALL XTX1(IPCTRA(1),RKXTKX) c CALL XTX1(IPCTRA(3),IKXTKX) c KXTKX=RKXTKX+IKXTKX c c *Norme infinie de Kx C IOPERA = 14 C IARGU = 0 C I1 = 0 C X1 = 0.D0 C CALL OPCHP1(IPCTRA(1),IOPERA,IARGU,I1,X1,IPCTRA(18),IRET) C CALL OPCHP1(IPCTRA(3),IOPERA,IARGU,I1,X1,IPCTRA(19),IRET) c CALL ADCHPO(IPCTRA(18),IPCTRA(19),IPCTRA(20),1.D0,1.D0) c c CALL MOTS1 (IPLMOT,MOTCLE) c CALL MAXIM1 (IPCTRA(20),IPLMOT,MOTCLE,0,KXINF) IF (QUAD) THEN ENDIF C *********Combinaisons lineaires*************************************** C IPCTRA(10) est la partie reelle du chpoint residu C IPCTRA(14) est la partie imaginaire du chpoint residu IF (.NOT.QUAD) THEN C Partie reelle & REAL(VALP),-AIMAG(VALP)) C Partie imaginaire & AIMAG(VALP),REAL(VALP)) c *Norme euclidienne de lambda*Mx c CALL XTX1(IPCTRA(7),RMXTMX) c CALL XTX1(IPCTRA(8),IMXTMX) c MXTMX=RMXTMX+IMXTMX c c *Norme infinie de lambda*Mx C IOPERA = 14 C IARGU = 0 C I1 = 0 C X1 = 0.D0 C CALL OPCHP1(IPCTRA(7),IOPERA,IARGU,I1,X1,IPCTRA(27),IRET) C CALL OPCHP1(IPCTRA(8),IOPERA,IARGU,I1,X1,IPCTRA(28),IRET) c CALL ADCHPO (IPCTRA(27),IPCTRA(28),IPCTRA(29),1.D0,1.D0) c c CALL MOTS1 (IPLMOT,MOTCLE) c CALL MAXIM1 (IPCTRA(29),IPLMOT,MOTCLE,0,MXINF) ELSE C Partie reelle & REAL(VALP),-AIMAG(VALP)) & REAL(VALP)**2-AIMAG(VALP)**2,-2*REAL(VALP)*AIMAG(VALP)) C Partie imaginaire & REAL(VALP),AIMAG(VALP)) & REAL(VALP)**2-AIMAG(VALP)**2,2*REAL(VALP)*AIMAG(VALP)) c *Norme euclidienne de lambda*Cx c CALL XTX1(IPCTRA(7),RCXTCX) c CALL XTX1(IPCTRA(9),ICXTCX) c CXTCX=RCXTCX+ICXTCX c c *Norme infinie de lambda*Cx C IOPERA = 14 C IARGU = 0 C I1 = 0 C X1 = 0.D0 C CALL OPCHP1(IPCTRA(7),IOPERA,IARGU,I1,X1,IPCTRA(21),IRET) C CALL OPCHP1(IPCTRA(9),IOPERA,IARGU,I1,X1,IPCTRA(22),IRET) c CALL ADCHPO (IPCTRA(21),IPCTRA(22),IPCTRA(23),1.D0,1.D0) c c CALL MOTS1 (IPLMOT,MOTCLE) c CALL MAXIM1 (IPCTRA(23),IPLMOT,MOTCLE,0,CXINF) c c *Norme euclidienne de lambda^2*Mx c CALL XTX1(IPCTRA(8),RMXTMX) c CALL XTX1(IPCTRA(10),IMXTMX) c MXTMX=RMXTMX+IMXTMX c c *Norme infinie de lambda^2*Mx C IOPERA = 14 C IARGU = 0 C I1 = 0 C X1 = 0.D0 C CALL OPCHP1(IPCTRA(8),IOPERA,IARGU,I1,X1,IPCTRA(24),IRET) C CALL OPCHP1(IPCTRA(10),IOPERA,IARGU,I1,X1,IPCTRA(25),IRET) c CALL ADCHPO (IPCTRA(24),IPCTRA(25),IPCTRA(26),1.D0,1.D0) c c CALL MOTS1 (IPLMOT,MOTCLE) c CALL MAXIM1 (IPCTRA(26),IPLMOT,MOTCLE,0,MXINF) ENDIF C Norme euclidienne du residu C Norme infinie du residu IOPERA = 14 IARGU = 0 I1 = 0 X1 = 0. C Calcul des normes EUC=XTX INF=XINF ENDIF ENDIF C *********************************************************************** C AFFICHAGE DES SORTIES C *********************************************************************** IF (MAL) THEN WRITE(IOIMP,*) 'LE MODE' , i , 'EST MAL NORMALISE ET DONC' WRITE(IOIMP,*) 'VALEUR DE ||MODE|| :' , i , REAL(RAY) ENDIF IF (IIMPI .GT. 2) THEN WRITE(IOIMP,*) ' ' WRITE(IOIMP,*) '**************************************' WRITE(IOIMP,*) '*ETUDE DU MODE',i,'*' WRITE(IOIMP,*) '**************************************' WRITE(IOIMP,*) ' ' WRITE(IOIMP,*) ' ' WRITE(IOIMP,*) 'Norme du mode :' WRITE(IOIMP,*) '---------------' WRITE(IOIMP,*) ' ' WRITE(IOIMP,*) REAL(RAY) WRITE(IOIMP,*) ' ' WRITE(IOIMP,*) ' ' IF (SYM) THEN WRITE(IOIMP,*) 'Chpoint residu :' WRITE(IOIMP,*) '----------------' ELSE WRITE(IOIMP,*) 'Partie reelle du chpoint residu :' WRITE(IOIMP,*) '---------------------------------' WRITE(IOIMP,*) 'Partie imaginaire du chpoint residu : ' WRITE(IOIMP,*) '--------------------------------------' ENDIF WRITE(IOIMP,*) 'Norme euclidienne :',EUC WRITE(IOIMP,*) '-------------------' WRITE(IOIMP,*) ' ' WRITE(IOIMP,*) 'Norme infinie :',INF WRITE(IOIMP,*) '---------------' WRITE(IOIMP,*) ' ' ENDIF C Destruction des chpoints de travail IF (IIMPI .GT. 2) THEN DO j=1,30 IF (IPCTRA(j) .NE. 0) THEN ENDIF ENDDO ENDIF SEGDES MRITRA END
© Cast3M 2003 - Tous droits réservés.
Mentions légales