Télécharger arpack.eso

Retour à la liste

Numérotation des lignes :

arpack
  1. C ARPACK SOURCE PB245956 20/12/21 21:15:00 10747
  2. C SUBROUTINE ARPACK (IPRIG1,IPRIG2,IPRIG3,IPSOLU,FSHIFT,NVAL,CHOIX,
  3. C & INSYM,LAGDUA)
  4.  
  5. ************************************************************************
  6. *
  7. * A R P A C K
  8. * -----------
  9. *
  10. * SOUS-PROGRAMME ASSOCIE A L'OPTION "IRAM" DE L'OPERATEUR
  11. * "VIBRATION".
  12. *
  13. * FONCTION:
  14. * ---------
  15. *
  16. * DETERMINER UNE SERIE DE MODES PROPRES AVEC LA LIBRAIRIE ARPACK
  17. *
  18. *
  19. * PARAMETRES: (E)=ENTREE (S)=SORTIE
  20. * -----------
  21. *
  22. *
  23. * IPRIG1 ENTIER (E) POINTEUR D'UN MRIGID
  24. *
  25. * IPRIG2 ENTIER (E) POINTEUR D'UN MRIGID
  26. *
  27. * IPRIG3 ENTIER (E) POINTEUR D'UN MRIGID
  28. *
  29. * IPSOLU ENTIER (S) POINTEUR OBJET SOLUTION
  30. *
  31. * FSHIFT COMPLEXE DP (E) FREQUENCE DE SHIFT
  32. *
  33. * NVAL ENTIER (E) NOMBRE DE MODES A CALCULER
  34. *
  35. * CHOIX CHAINE*2 (E) VALEURS PROPRES VOULUES
  36. * LM - VP DE MODULE MAX
  37. * SM - VP DE MODULE MIN
  38. * LR - VP DE PARTIE R MAX
  39. * SR - VP DE PARTIE R MIN
  40. * LI - VP DE PARTIE I MAX
  41. * SI - VP DE PARTIE I MIN
  42. * LA - VP MAX
  43. * SA - VP MIN
  44. * BE - VP DE CHAQUE COTE
  45. *
  46. * INSYM ENTIER (S) PROBLEME SYMETRIQUE OU NON
  47. *
  48. * LAGDUA ENTIER (E) NB DE M DE LAGRANGE DUALISES
  49. *
  50. * SOUS-PROGRAMMES APPELES:
  51. * ------------------------
  52. *
  53. * WHICH1,QZTRIR,NBINC,ACHECK,ARPSHI,ARPSOL,ARPSOQ
  54. *
  55. * AUTEUR, DATE DE CREATION:
  56. * -------------------------
  57. *
  58. * PASCAL BOUDA 29 JUIN 2015
  59. * PASCAL BOUDA AOUT 2020 : sortie du pretraitement
  60. * (analyse des matrices) + posttraitement (objet solution)
  61. *
  62. * LANGAGE:
  63. * --------
  64. *
  65. * FORTRAN 77 & 90
  66. *
  67. ***********************************************************************
  68. SUBROUTINE ARPACK (IPSOLU,IPMASS,IPRIGI,IPAMOR,FSHIFT,NVAL,CHOIX,
  69. & INSYM,LAGDUA)
  70.  
  71.  
  72. IMPLICIT INTEGER(I-N)
  73. IMPLICIT REAL*8 (A-H,O-Z)
  74.  
  75. -INC PPARAM
  76. -INC CCOPTIO
  77. -INC SMRIGID
  78.  
  79. INTEGER IPRIG1
  80. INTEGER IPRIG2
  81. INTEGER IPRIG3
  82.  
  83. INTEGER LAGDUA
  84. INTEGER IPSOLU
  85. COMPLEX*16 FSHIFT
  86. INTEGER NVAL
  87. CHARACTER*2 CHOIX
  88. INTEGER INSYM
  89.  
  90. INTEGER IPRIGI
  91. INTEGER IPMASS
  92. INTEGER IPAMOR
  93. INTEGER NK,NM,NA
  94. LOGICAL FLAG
  95. LOGICAL INVER
  96. LOGICAL PIRE
  97. LOGICAL CHOLE
  98. REAL*8 EPSI
  99. COMPLEX*16 SIGMA,ZERO
  100. LOGICAL SYM
  101. LOGICAL QUAD
  102.  
  103. ZERO=CMPLX(0.D0,0.D0)
  104.  
  105. **********************************
  106. ** TOLERANCE SUR LES EIGENPAIRS **
  107. **********************************
  108.  
  109. EPSI=1.D-08
  110. c EPSI=1.D-10
  111.  
  112.  
  113. **********************************
  114.  
  115. *Identification du degre du probleme: lineaire, quadratique
  116. IF (IPAMOR .EQ. 0) THEN
  117. QUAD=.FALSE.
  118. IF (IIMPI .GT. 2) THEN
  119. WRITE(IOIMP,*) 'LE PROBLEME EST LINEAIRE'
  120. ENDIF
  121. ELSE
  122. QUAD=.TRUE.
  123. IF (IIMPI .GT. 2) THEN
  124. WRITE(IOIMP,*) 'LE PROBLEME EST QUADRATIQUE'
  125. ENDIF
  126. ENDIF
  127.  
  128.  
  129. *pb nov20: le travail est desormais fait en amont (cf vibrat.eso)
  130. **Determination de la matrice de masse, de rigidite et eventuellement
  131. **d'amortissement
  132. * IF (.NOT. QUAD) THEN
  133. * CALL WHICH1 (IPRIG1,IPRIG2,IPRIGI,IPMASS)
  134. * IF (IERR .NE. 0) RETURN
  135. * ELSE
  136. * IPRIGI=IPRIG1
  137. * IPMASS=IPRIG2
  138. * IPAMOR=IPRIG3
  139. * CALL QZTRIR (IPMASS,IPRIGI,IPAMOR)
  140. * IF (IERR .NE. 0) RETURN
  141. * ENDIF
  142. *Calcul du nombre d'inconnues + triangularisation si necessaire
  143. CALL NBINC (IPRIGI,NK)
  144. IF (IERR.NE.0) RETURN
  145. CALL NBINC (IPMASS,NM)
  146. IF (IERR.NE.0) RETURN
  147.  
  148. IF (QUAD) THEN
  149. CALL NBINC (IPAMOR,NA)
  150. IF (IERR.NE.0) RETURN
  151. ENDIF
  152. IF(IIMPI.GE.1) THEN
  153. WRITE(IOIMP,*) 'NOMBRE DE VALEURS PROPRES DEMANDEES=',NVAL
  154. WRITE(IOIMP,*) 'SHIFT EN FREQUENCE=', REAL(FSHIFT)
  155. ENDIF
  156.  
  157. *Verification de la solvabilite du probleme
  158. CALL ACHECK(IPRIGI,IPMASS,QUAD,SYM,FSHIFT,NK,FLAG,
  159. & INVER,PIRE,CHOLE,EPSI)
  160. IF (IERR.NE.0) RETURN
  161. *Valeur du insym depend du type de probleme resolu
  162. IF (SYM) THEN
  163. INSYM=0
  164. IF (IIMPI.GE.1) WRITE(IOIMP,*) 'LE PROBLEME EST SYMETRIQUE'
  165. ELSE
  166. INSYM=1
  167. IF (IIMPI.GE.1) WRITE(IOIMP,*)'LE PROBLEME N EST PAS SYMETRIQUE'
  168. ENDIF
  169.  
  170. * Conversion du shift "frequence" en shift "valeur propre";
  171. CALL ARPSHI (FSHIFT,SIGMA,QUAD,1)
  172. IF (IERR.NE.0) RETURN
  173.  
  174. * 27/07/2015 : La resolution avec shift complexe n'est pas implementee
  175. * Mise a zero de la partie imaginaire du shift
  176. SIGMA=CMPLX(REAL(SIGMA),0.D0)
  177. IF (FLAG) THEN
  178.  
  179. IF (.NOT. QUAD) THEN
  180. c RESOLUTION DU PB AUX VALEURS PROPRES LINEAIRE
  181. CALL ARPSOL (SIGMA,CHOIX,QUAD,NVAL,IPRIGI,IPMASS,LAGDUA,NK,NM,
  182. & INVER,PIRE,SYM,CHOLE,IPSOLU,EPSI)
  183.  
  184. ELSE
  185. c RESOLUTION DU PB AUX VALEURS PROPRES QUADRATIQUE
  186. CALL ARPSOQ (SIGMA,CHOIX,QUAD,NVAL,IPRIGI,IPMASS,IPAMOR,
  187. & LAGDUA,NK,NM,INVER,SYM,CHOLE,IPSOLU,EPSI)
  188. ENDIF
  189. IF (IERR.NE.0) RETURN
  190.  
  191. ENDIF
  192.  
  193. END
  194.  
  195.  
  196.  
  197.  

© Cast3M 2003 - Tous droits réservés.
Mentions légales