arpitq
C ARPITQ SOURCE PV 22/04/15 20:16:34 11344 *********************************************************************** * * A R P I T Q * * FONCTION: * --------- * * STEP DE LA FACTORISATION D'ARNOLDI POUR UN PROBLEME QUADRATIQUE. * * REMARQUE: * --------- * * LE PROBLEME EST DE DIMENSION DOUBLE PAR RAPPORT AU NOMBRE * D'INCONNUES: CEPENDANT LES FONCTIONS DISPONIBLES POUR LA * RESOLUTION DE PROBLEMES D'ORDRE 1 SERONT UTILISES CAR LES * OPERATIONS MATRICE-VECTEUR SE FONT PAR BLOCS * * RIGI(1) : RIGIDITE * RIGI(3) : AMORTISSEMENT * RIGI(2) : MASSE * * * PARAMETRES: (E)=ENTREE (S)=SORTIE * ----------- * * * IPRTRA ENTIER (E) OPERATEURS DE TRAVAIL * * IPMAUP ENTIER (E/S) POINTEUR VARIABLES ARPACK * * SIGMA COMPLEX DP (E) VALEUR DU SHIFT (PEUT ETRE NUL) * * INVER LOGIQUE (E) .TRUE. -> PRODUIT SCALAIRE X'KX * .FALSE. -> PRODUIT SCALAIRE X'MX * * EPSI REEL DP (E) TOLERANCE * * OUT LOGIQUE (S) FLAG DE CONVERGENCE * * * SOUS-PROGRAMMES APPELES: * ------------------------ * * DNAUPD,ADCHPO,ARPCH2,MUCPRI,RESOU1,LDMT,DTCHPO * * AUTEUR,DATE DE CREATION: * ------------------------- * * PASCAL BOUDA 17 JUILLET 2015 * * LANGAGE: * -------- * * FORTRAN 77 & 90 * *********************************************************************** implicit real*8(a-h,o-z) -INC PPARAM -INC CCOPTIO -INC SMLCHPO -INC TARWORK -INC CCREEL c -INC TARTRAK SEGMENT idemen(0) INTEGER IPRTRA INTEGER IPMAUP LOGICAL INVER LOGICAL OUT INTEGER IPRIGI,IPMASS,IPAMOR,IPSCAL INTEGER TEST INTEGER IPLCHP INTEGER IPCTRA(9) INTEGER NOID,NOEN INTEGER ndim,ncv,lworkl xspetl = xspeti SEGINI IDEMEN IDEMEN(**)=0 NOID=0 NOEN=1 OUT=.FALSE. MRITRA=IPRTRA SEGACT MRITRA MAUP=IPMAUP SEGACT MAUP*MOD *Récupération de la dimension des tableaux ndim=resid(/1) ncv=v(/2) lworkl=workl(/1) *Le probleme est non symetrique. Appel de la routine ARPACK specifique & ncv,v,ldv,iparam,ipntr,workd,workl,lworkl,ITRAK,info) *Reverse communication: On récupère les paramètres de sortie et on *effectue des actions en fonction de leurs valeurs TEST=ido IPMAUP=MAUP c SEGDES MAUP *On verifie si on doit stopper le processus IF (OUT) RETURN *Initialisation des chpoints de travail DO i=1,9 IPCTRA(i)=0 ENDDO * &--------------------------------------------------& * | Calcul du produit matrice vecteur | * | Y <---- RE( inv(A-SIGMA*B)*B*X ) | * | | * | X : workd(ipntr(1)) | * | Y : workd(ipntr(2)) | * &--------------------------------------------------& *Note: Initialement, ARPACK est prevu pour distinguer test=-1 ou on *fournit inv(A-SIGMA*B)*B*X et test=1 ou on fournit inv(A-SIGMA*B)*X *(economie du produit par la matrice masse deja effectue). *Cependant,la "logique" cast3m nous retire la garantie de fournir le *produit pour tout type de matrice. *En outre, meme si la reussite de l'operation etait garantie, elle *serait plus lourde a effectuer, cette derniere impliquant l'inversion *d'une matrice de masse *Shift reel : RE( inv(A-SIGMA*B)*B*X ) = inv(A-REAL(SIGMA)*B)*B*X MLCHPO=IPLCHP SEGACT MLCHPO IPCTRA(3)=ICHPOI(1) IPCTRA(1)=ICHPOI(2) SEGDES MLCHPO IDEMEN(1)=IPCTRA(2) IF (SYME(6) .EQ. 0) THEN CALL RESOU1 (IPKCSM,IDEMEN,NOID,NOEN,xspetl,0,0) ELSEIF (SYME(6) .EQ. 1) THEN ENDIF IF (IERR.NE.0) RETURN C RESOU desactive IDEMEN on le reactive SEGACT,IDEMEN IPCTRA(4)=IDEMEN(1) MLCHPO=IPLCHP SEGACT MLCHPO*MOD ICHPOI(1)=IPCTRA(5) ICHPOI(2)=IPCTRA(4) IPLCHP=MLCHPO SEGDES MLCHPO ELSE *Shift complexe : RE( inv(A-SIGMA*B)*B*X ) a fournir (non implemente) ENDIF * &------------------------------------------& * | Calcul du produit matrice vecteur | * | | * | Si INVER | * | Y <---- DIAG(IPRIGI,IPRIGI)*X | * | | * | Sinon | * | Y <---- DIAG(IPMASS,IPMASS)*X | * | | * | X : workd(ipntr(1)) | * | Y : workd(ipntr(2)) | * &------------------------------------------& IPSCAL=IPRIGI ELSE IPSCAL=IPMASS ENDIF MLCHPO=IPLCHP SEGACT MLCHPO IPCTRA(1)=ICHPOI(1) IPCTRA(2)=ICHPOI(2) SEGDES MLCHPO MLCHPO=IPLCHP SEGACT MLCHPO*MOD ICHPOI(1)=IPCTRA(3) ICHPOI(2)=IPCTRA(4) IPLCHP=MLCHPO SEGDES MLCHPO ENDIF *Destruction des chpoints de travail DO i=1,9 IF (IPCTRA(i) .NE. 0) THEN ENDIF ENDDO SEGDES MRITRA END
© Cast3M 2003 - Tous droits réservés.
Mentions légales