arpsol
C ARPSOL SOURCE BP208322 20/02/06 21:15:11 10512 *********************************************************************** * * A R P S O L * * FONCTION: * --------- * * SOLVEUR DU PROBLEME LINAIRE AUX VALEURS PROPRES AVEC LA METHODE * IRAM (METHODE D'ARNOLDI AVEC REDEMARRAGE IMPLICITE) * * * PARAMETRES: (E)=ENTREE (S)=SORTIE * ----------- * * SIGMA COMPLEX DP (E) VALEUR PROPRE DE SHIFT * * CHOIX CHAINE*2 (E) VALEURS PROPRES VOULUES * LM - VP DE MODULE MAX * SM - VP DE MODULE MIN * LR - VP DE PARTIE R MAX * SR - VP DE PARTIE R MIN * LI - VP DE PARTIE I MAX * SI - VP DE PARTIE I MIN * LA - VP MAX * SA - VP MIN * BE - VP DE CHAQUE COTE * * QUAD LOGIQUE (E) PROBLEME QUADRATIQUE OU NON * * NVAL ENTIER (E) NOMBRE DE MODES PROPRES A CALCULER * * IPRIGI ENTIER (E) POINTEUR D'UNE RIGIDITE * * IPMASS ENTIER (E) POINTEUR D'UNE MASSE * * LAGDUA ENTIER (E) NB DE M. DE LAGRANGE DUALISES * * NK ENTIER (E) DIMENSION DU PROBLEME (K) * * NM ENTIER (E) DIMENSION DU PROBLEME (M) * * INVER LOGIQUE (E) .TRUE. -> PRODUIT SCALAIRE X'KX * .FALSE. -> PRODUIT SCALAIRE X'MX * * PIRE LOGIQUE (E) PRODUIT SCALAIRE EUCLIDIEN * * SYM LOGIQUE (E) PROBLEME SYMETRIQUE OU NON * * CHOLE LOGIQUE (E) CHOLESKY NON ALTERNATIVE POSSIBLE * * IPSOLU ENTIER (S) POINTEUR SUR LA SOLUTION CREE * * EPSI REEL DP (E) ZERO DE TOLERANCE * * * SOUS-PROGRAMMES APPELES: * ------------------------ * * ARPINI,ARPALE,ARPOPE,ARPITL,ARPOST * * AUTEUR, DATE DE CREATION: * ------------------------- * * PASCAL BOUDA 29 JUIN 2015 * * LANGAGE: * -------- * * FORTRAN 77 & 90 * *********************************************************************** IMPLICIT INTEGER(I-N) IMPLICIT REAL*8 (A-H,O-Z) -INC PPARAM -INC CCOPTIO -INC TARWORK CHARACTER*2 CHOIX LOGICAL QUAD INTEGER NVAL INTEGER IPRIGI INTEGER IPMASS INTEGER LAGDUA INTEGER NK INTEGER NM LOGICAL INVER LOGICAL PIRE LOGICAL SYM LOGICAL CHOLE INTEGER IPSOLU INTEGER ITER INTEGER IPRTRA INTEGER IPBUFF LOGICAL OUT *Nombre maximal d'iteration autorise MAXITE=MIN(100*MAX(NK,NM),10000) *Initialisation de tous les paramètres ARPACK *Construction des operateurs de travail *Inititalisation du vecteur residu d'arpack IF (IERR.NE.0) GOTO 999 *Boucle pour la factorisation d'Arnoldi DO ITER=1,MAXITE IF (IIMPI.GE.10) WRITE(IOIMP,*) '*** ITERATION N°:',ITER,'***' *Iteration IF (IERR.NE.0) GOTO 999 *Sortie si convergence IF (OUT) THEN GOTO 999 END IF ENDDO * sortie car on a atteint le nombre maxi d'iterations sans converger * "Pas de convergence apres %i1 iterations. L'execution continue" INTERR(1)=MAXITE 999 CONTINUE IF (IIMPI.GE.1) & WRITE(IOIMP,*) '*** SORTIE APRES :',ITER,' ITERATIONS ***' *Post-traitement des resultats: creation de l'objet solution IF (IERR.NE.0) RETURN *Destruction des operateurs de travail (matrices principales exclues) MRITRA=IPRTRA SEGACT MRITRA*MOD c RIGI(i)=0 ENDIF ENDDO SEGSUP MRITRA IF (IERR.NE.0) RETURN *Suppression du segment de travail ARPACK MAUP=IPMAUP c SEGSUP MAUP END
© Cast3M 2003 - Tous droits réservés.
Mentions légales