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