Télécharger crsolu.eso

Retour à la liste

Numérotation des lignes :

crsolu
  1. C CRSOLU SOURCE BP208322 19/04/29 21:15:11 10213
  2. ************************************************************************
  3. *
  4. * CRSOLU
  5. * -----------
  6. *
  7. * FONCTION:
  8. * ---------
  9. *
  10. * CONSTRUCTION D'UN OBJET SOLUTION, A PARTIR DE LA LISTE
  11. * DES FREQUENCES PROPRES ET DE CELLE DES MODES PROPRES.
  12. * LES LISTES SONT SUPPOSES TRIEES par lambda croissant,
  13. * LES FREQUENCES SHIFTEES ET LES MODES ORTHONORMALISES.
  14. *
  15. * PARAMETRES: (E)=ENTREE (S)=SORTIE
  16. * -----------
  17. *
  18. * IPLVAL ENTIER (E) POINTEUR DE L'OBJET 'LISTREEL' CONTENANT
  19. * LA SUITE DES FREQUENCES PROPRES.
  20. * IPLVEC ENTIER (E) POINTEUR DE L'OBJET 'LISTCHPO' CONTENANT
  21. * LA SUITE DES MODES PROPRES.
  22. * NBMOD ENTIER (E) NOMBRE DE MODES A INSERER DANS LA SOLUTION
  23. * ON A: NBMOD .LE. DIMENSION( IPLVAL )
  24. * IPKW2M, IPMASS (E) MATRICES DE RIGIDITE (DECALEE) ET DE MASSE
  25. * W2 REEL (E) DECALAGE
  26. * IPSOLU ENTIER (S) POINTEUR SUR LA SOLUTION CREE.
  27. *
  28. ************************************************************************
  29.  
  30. SUBROUTINE CRSOLU (W2,IPLVAL,IPLVEC,NBMOD,IPKW2M,IPMASS,IPSOLU)
  31.  
  32. ************************************************************************
  33. * DECLARATIONS
  34. ************************************************************************
  35.  
  36. IMPLICIT INTEGER(I-N)
  37. IMPLICIT REAL*8 (A-H,O-Z)
  38.  
  39.  
  40. -INC PPARAM
  41. -INC CCOPTIO
  42. -INC SMLCHPO
  43. -INC SMLREEL
  44. -INC SMLMOTS
  45. -INC CCREEL
  46.  
  47. * -- CONSTANTES --
  48. PARAMETER (LPROPR = 5)
  49. PARAMETER (DEUXPI = (2.D0*XPI))
  50.  
  51. * -- ARGUMENTS --
  52. POINTEUR IPLVEC.MLCHPO, IPLVAL.MLREEL
  53. INTEGER NBMOD, IPKW2M, IPMASS, IPSOLU
  54.  
  55. * -- VARIABLES LOCALES --
  56. POINTEUR IPLMD.MLMOTS, IPLMF.MLMOTS
  57. INTEGER IPMX, IPMODE, IPSOL1
  58. REAL*8 OMEGA2, PROPRE(LPROPR), FREQ, XXTMX
  59.  
  60.  
  61. ************************************************************************
  62. * LES MODES PROPRES CORRESPONDENT AUX COUPLES :
  63. * ( IPLVAL(I) , IPLVEC(I) ) avec I = 1, NBMOD
  64. ************************************************************************
  65.  
  66. SEGACT ,IPLVEC, IPLVAL
  67.  
  68.  
  69. ************************************************************************
  70. * TRAVAIL PRELIMINAIRE POUR LA BONNE NUMEROTATION DES MODES
  71. ************************************************************************
  72.  
  73. CALL DIAGN1 (IPMASS,nvp0M)
  74. CALL DIAGN1 (IPKW2M,IND0)
  75.  
  76. cTODO if(IFLU.gt.0) nvp0M=0
  77. c cas d'une matrice M non definie positive : modif de IND0
  78. if(nvp0M.ne.0) then
  79. if (W2.gt.0.D0) then
  80. IND0=nvp0M+IND0
  81. elseif (W2.lt.0.D0) then
  82. IND0=nvp0M-IND0
  83. else
  84. IND0=nvp0M
  85. endif
  86. endif
  87. c calcul de IREP
  88. FSHIFT=SQRT(ABS(W2))/DEUXPI
  89. FSHIFT=SIGN(FSHIFT,W2)
  90. FMIN = IPLVAL.PROG(1)
  91. FMAX = IPLVAL.PROG(NBMOD)
  92. if (FSHIFT.lt.FMIN) then
  93. IREP=1
  94. IND0=IND0+1
  95. elseif(FSHIFT.gt.FMAX) then
  96. IREP=NBMOD
  97. else
  98. do 1 ishift=2,NBMOD
  99. F1=IPLVAL.PROG(ishift-1)
  100. F2=IPLVAL.PROG(ishift)
  101. if(FSHIFT.ge.F1.and.FSHIFT.le.F2) goto 2
  102. 1 continue
  103. call erreur(5)
  104. 2 continue
  105. IREP=ishift-1
  106. endif
  107.  
  108.  
  109. ************************************************************************
  110. * BOUCLE SUR LES MODES
  111. ************************************************************************
  112.  
  113. cbp2019 NBNEG = 1
  114. cbp2019 NBPOS = 0
  115.  
  116. DO 100 IB100 = 1, NBMOD
  117.  
  118. IPVECP = IPLVEC.ICHPOI(IB100)
  119. CALL XTMX ( IPVECP, IPMASS, XXTMX )
  120. IF ( IERR .NE. 0 ) RETURN
  121. CALL MUCPRI ( IPVECP, IPMASS, IPMX )
  122. IF ( IERR .NE. 0 ) RETURN
  123. IF ( IB100 .EQ. 1 ) THEN
  124. * -- NOM DES COMPOSANTES: --
  125. CALL CORRSP ( ipmass, IPVECP, IPMX, IPLMD, IPLMF )
  126. IF ( IERR .NE. 0 ) RETURN
  127. ENDIF
  128.  
  129. PROPRE(1) = IPLVAL.PROG(IB100)
  130. PROPRE(2) = XXTMX
  131. cbp2019 XLAMBR = sign( ((DEUXPI*PROPRE(1))**2) , PROPRE(1) )
  132. cbp2019 if(XLAMBR .lt. W2) then
  133. cbp2019 NBNEG = NBNEG - 1
  134. cbp2019 NUMOD2 = NBNEG
  135. cbp2019 else
  136. cbp2019 NBPOS = NBPOS + 1
  137. cbp2019 NUMOD2 = NBPOS
  138. cbp2019 endif
  139. NUMOD2 = IND0-IREP+IB100
  140.  
  141. CALL MASGEN ( IPVECP, PROPRE )
  142. IF ( IERR .NE. 0 ) RETURN
  143. CALL DEPGEN ( IPMASS, IPVECP, PROPRE, IPMX, IPLMD, IPLMF)
  144. IF ( IERR .NE. 0 ) RETURN
  145.  
  146. c * CALL CREMOD ( PROPRE,IPVECP,IPKW2M,INF0,FREQ,NUMOD2,IPMODE)
  147. c CALL CREMOD ( PROPRE,IPVECP,IPKW2M,INF0,NUMOD2,IPMODE)
  148. CALL MANUSO('MODE ',NUMOD2,PROPRE(1),PROPRE(2),PROPRE(3),
  149. & PROPRE(4),PROPRE(5),IPVECP,0,0,IPMODE)
  150. IF ( IERR .NE. 0 ) RETURN
  151.  
  152. * -- AFFICHAGE DE LA SOLUTION --
  153. IF ( IIMPI .EQ. 2 ) CALL ECMODE ( IPMODE )
  154. IF (IB100 .EQ. 1) THEN
  155. IPSOLU = IPMODE
  156. ELSE
  157. CALL FUSOLU( IPSOLU, IPMODE, IPSOL1 )
  158. IF ( IERR .NE. 0 ) RETURN
  159. CALL DESOLU( IPMODE )
  160. IF ( IERR .NE. 0 ) RETURN
  161. CALL DESOLU( IPSOLU )
  162. IF ( IERR .NE. 0 ) RETURN
  163. IPSOLU = IPSOL1
  164. ENDIF
  165.  
  166. CALL DTCHPO ( IPMX )
  167. IF ( IERR .NE. 0 ) RETURN
  168.  
  169. 100 CONTINUE
  170.  
  171. IPMODE = IPSOLU
  172. SEGDES ,IPLVEC, IPLVAL
  173. SEGSUP ,IPLMD , IPLMF
  174.  
  175. RETURN
  176. END
  177.  
  178.  
  179.  
  180.  

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