Télécharger qrbasr.eso

Retour à la liste

Numérotation des lignes :

qrbasr
  1. C QRBASR SOURCE BP208322 22/09/16 21:15:11 11454
  2. *
  3. * creation : bp,2022-09-15
  4. * inspiré de : inspiré de : QZBASC SOURCE FANDEUR 22/01/03 21:15:37 11136
  5. *
  6. *
  7. ************************************************************************
  8. * CREATION D'UNE BASE DE MODES PROPRES REEL POUR VIBC
  9. * ====
  10. * A PARTIR DES RESULTATS DE DSYEV
  11. ************************************************************************
  12.  
  13. SUBROUTINE QRBASR (MWORK,MATZ,MELEME,MCOMP,IPBC,NWANTED)
  14.  
  15. IMPLICIT INTEGER(I-N)
  16. IMPLICIT REAL*8 (A-H,O-Z)
  17.  
  18. ************************************************************************
  19.  
  20. -INC CCREEL
  21. -INC PPARAM
  22. -INC CCOPTIO
  23. -INC SMELEME
  24. -INC SMLCHPO
  25. -INC SMLMOTS
  26. -INC SMCHPOI
  27. -INC SMRIGID
  28. -INC SMTABLE
  29. -INC SMCOORD
  30.  
  31. * segment de travail = MTRAV modifie pour NNCHPO chpoints
  32. SEGMENT MTRAV
  33. CHARACTER*(LOCOMP) INCO(NNIN)
  34. REAL*8 BB(NNCHPO,NNIN,NNNOE)
  35. INTEGER IBIN(NNIN,NNNOE),IGEO(NNNOE),NHAR(NNIN)
  36. ENDSEGMENT
  37. *
  38. * ******** INCO(NNIN) CONTIENT LE NOMS DES NNIN INCONNUES DIFFERENTES.
  39. *
  40. * ******** BB(I,J) EST LA VALEUR DE LA IEME INCONNUE DU CHAMP POUR
  41. * ******** LE JEME NOEUD DU TABLEAU IGEO.
  42. *
  43. * ******** IBIN(I,J)=1 OU 0. 1 INDIQUE QUE LA I EME INCONNUE DU CHAMP
  44. * ******** EXISTE POUR LE J EME NOEUD DU TABLEAU IGEO.
  45. *
  46. * ******** IGEO(I) EST LE NUMERO A METTRE DANS UN OBJET MELEME POUR
  47. * ******** REFERENCER LE IEME NOEUD
  48. *
  49. * ******** NHAR(I) EST LE NUMERO D'HARMONIQUE SI CALCUL AXI OU
  50. * ******** SIGNIFIE CONTRAINTE PLANE,DEFORMATION PLANE OU DEF PLAN GEN
  51. *
  52. SEGMENT ICPR(nbpts)
  53. *
  54. REAL*8 XVAL,SEUIL
  55. INTEGER I, J, K, IC, NUMAFF,ERR
  56. LOGICAL MODANN, AFFICH,CONV
  57. CHARACTER*4 NOMDDL
  58. *
  59. * tableaux pour Lapack
  60. SEGMENT MWORK
  61. REAL*8 LAMBDA(NWORK),WORK(LWORK)
  62. ENDSEGMENT
  63.  
  64. POINTEUR MATZ.XMATRI
  65. POINTEUR MCOMP.MLMOTS
  66. *
  67.  
  68. ************************************************************************
  69. * DONNEES GENERALES *
  70. ************************************************************************
  71.  
  72. * Ecriture des messages pour verification
  73.  
  74. AFFICH = IIMPI.GE.11
  75. *
  76. IF (AFFICH)
  77. & WRITE (IOIMP,*) 'QRBASR: Extraction des donnees generales...'
  78. *
  79. * seuil pour le denominateur d'une valeur propre
  80.  
  81. * SEUIL = (EPSLON(1.0D0)*100)
  82. SEUIL = 1.D-99
  83.  
  84. * nombre de modes calcules
  85. NBMOD1=LAMBDA(/1)
  86.  
  87.  
  88. **** si on souhaite un nombre de modes inferieur, on devra alors trier
  89. * --> pas ici, car DSYEV fournit les vp par module croissant :)
  90.  
  91.  
  92. **** preparation des CHPOINTs deformees *******************************
  93.  
  94. * nombre de ddls (=dimension de MELEME = dimension de MCOMP)
  95. SEGACT,MELEME,MCOMP
  96. NDDL=MELEME.NUM(/2)
  97.  
  98. * on cree ICPR
  99. SEGINI,ICPR
  100. * on dimensionne au maxi MTRAV
  101. NNIN=NDDL
  102. NNNOE=NDDL
  103. NNCHPO=NBMOD1
  104. SEGINI,MTRAV
  105. NNIN=0
  106. NNNOE=0
  107.  
  108. *---- traitement de chaque ddl ----------------------------------
  109. DO 100 J=1,NDDL
  110.  
  111. c - NOEUD
  112. IP=NUM(1,J)
  113. JNOE=ICPR(IP)
  114. c nouveau noeud #IP de numero local #JNOE
  115. IF(JNOE.EQ.0) THEN
  116. NNNOE=NNNOE+1
  117. JNOE=NNNOE
  118. ICPR(IP)=JNOE
  119. IGEO(JNOE)=IP
  120. ENDIF
  121.  
  122. c - COMPOSANTE
  123. NOMDDL=MCOMP.MOTS(J)
  124. IF(NNIN.EQ.0) GOTO 111
  125. DO 110 JIN=1,NNIN
  126. IF(NOMDDL.EQ.INCO(JIN)) GOTO 112
  127. c NOMDDL trouvee dans INCO(JIN)
  128. 110 CONTINUE
  129.  
  130. 111 CONTINUE
  131. c NOMDDL pas trouvee dans INCO(JIN) -> on l'ajoute a la fin
  132. NNIN=NNIN+1
  133. JIN=NNIN
  134. INCO(JIN)=NOMDDL
  135. c bp : pour l'instant on laisse NHAR=NIFOUR, mais il faudrait
  136. c recuperer IRIGEL(5,:) des rigidites d'entree ou autre ...?
  137. NHAR(JIN)=NIFOUR
  138.  
  139. 112 CONTINUE
  140. c NOMDDL trouvee dans INCO(JIN) et noeud #IP dans IGEO(JNOE)
  141.  
  142. c Remplissage de IBIN et BB
  143. IBIN(JIN,JNOE)=J
  144. DO I=1,NBMOD1
  145. BB(I,JIN,JNOE)=MATZ.RE(J,I,1)
  146. ENDDO
  147.  
  148. 100 CONTINUE
  149. *---- fin de la boucle sur les ddl ----------------------------------
  150.  
  151. SEGSUP,MCOMP,ICPR
  152. SEGDES,MELEME
  153. SEGADJ,MTRAV
  154. c write(*,*) 'IGEO=',(IGEO(iou),iou=1,NNNOE)
  155. c write(*,*) 'INCO=',(INCO(iou),iou=1,NNIN)
  156. c on va generer N1 chpoints en 1 passage dans une copie de CRECHP
  157. N1=NBMOD1
  158. SEGINI,MLCHPO
  159. CALL CRECH4(MTRAV,MLCHPO)
  160. SEGSUP,MTRAV
  161.  
  162.  
  163. *******************************************
  164. * Creation de la table BASE_DE_MODES *
  165. *******************************************
  166. *
  167. IF (AFFICH) WRITE(IOIMP,*) 'Creation de la table BASE_DE_MODES...'
  168. *
  169. CALL CRTABL(IPTAB2)
  170. CALL ECCTAB(IPTAB2,'MOT',0,0.0D0,'SOUSTYPE',.TRUE.,0,
  171. & 'MOT',0,0.0D0,'BASE_DE_MODES',.TRUE.,0)
  172. CALL ECCTAB(IPTAB2,'MOT',0,0.0D0,'MAILLAGE',.TRUE.,0,
  173. & 'MAILLAGE',0,0.0D0,' ',.TRUE.,MELEME)
  174.  
  175.  
  176. ************************************************************************
  177. * BOUCLE SUR LES MODES *
  178. ************************************************************************
  179. *
  180. I=1
  181. 80 IF (I .GT. NWANTED) GOTO 20
  182.  
  183. * ---- frequence infinie ?
  184. *
  185. MODANN = (ABS(LAMBDA(I)).LT.SEUIL)
  186.  
  187. * ---- oui
  188. IF (MODANN) THEN
  189. 90 WRITE (IOIMP,*) 'Attention !!! Mode ',I,
  190. & ' annule : frequence infinie.'
  191. CALL CRTABL(MTAB1)
  192. CALL ECCTAB(MTAB1,'MOT',0,0.0D0,'SOUSTYPE', .TRUE.,0,
  193. & 'MOT',0,0.0D0,'MODE_ANNULE',.TRUE.,0)
  194. CALL ECCTAB(IPTAB2,'ENTIER',I,0.0D0,' ',.TRUE.,0,
  195. & 'TABLE', 0, 0.0D0,' ',.TRUE.,MTAB1)
  196.  
  197. * ---- non
  198. ELSE
  199. *
  200. *------- Deformees du mode i
  201.  
  202. * Recup du CHPOINTs :
  203. MCHPO1=ICHPOI(I)
  204. *
  205. *
  206. ************************************************
  207. * Creation de la table MODE *
  208. ************************************************
  209. *
  210. *----- valeur propre reelle
  211. *
  212. * Attention : on n'enregistre pas de frequence puisqu'on ne sait pas ce qu'est lambda
  213. *
  214. IF (AFFICH) WRITE (*,*) 'Construction de la table MODE ...'
  215. *
  216. CALL CRTABL(MTAB1)
  217. CALL ECCTAB(MTAB1,'MOT',0,0.0D0,'SOUSTYPE',.TRUE.,0,
  218. & 'MOT',0,0.0D0,'MODE',.TRUE.,0)
  219. *
  220. CALL ECCTAB(MTAB1,'MOT',0,0.0D0,'NUMERO_MODE',.TRUE.,0,
  221. & 'ENTIER',I,0.0D0,' ',.TRUE.,0)
  222. CALL CREPO1(0.0D0,0.0D0,0.0D0,IPOIN)
  223. CALL ECCTAB(MTAB1,'MOT',0,0.0D0,'POINT_REPERE',.TRUE.,0,
  224. & 'POINT',0,0.0D0,' ',.TRUE.,IPOIN)
  225. XVAL=LAMBDA(I)
  226. CALL ECCTAB(MTAB1,'MOT',0,0.0D0,'VALEUR_PROPRE',.TRUE.,0
  227. $ ,'FLOTTANT',0,XVAL,' ',.TRUE.,0)
  228. *
  229. CALL ECCTAB(MTAB1,'MOT',0,0.0D0,'DEFORMEE_MODALE',
  230. & .TRUE.,0,'CHPOINT',0,0.0D0,' ',.TRUE.,MCHPO1)
  231. *
  232. CALL ECCTAB(IPTAB2,'ENTIER',I,0.0D0,' ',.TRUE.,0,'TABLE',
  233. & 0,0.0D0,' ',.TRUE.,MTAB1)
  234. *
  235.  
  236. ENDIF
  237.  
  238.  
  239. I = I + 1
  240. GOTO 80
  241. ************************************************************************
  242. * FIN DE BOUCLE SUR LES MODES *
  243. ************************************************************************
  244. 20 CONTINUE
  245.  
  246.  
  247. ********************************************
  248. * Creation de la table BASE_MODALE *
  249. ********************************************
  250. *
  251. *
  252. CALL CRTABL(IPBC)
  253. IF (AFFICH) WRITE (*,*) 'Creation de la table BASE_MODALE #',IPBC
  254. CALL ECCTAB(IPBC,'MOT',0,0.0D0,'SOUSTYPE',.TRUE.,0,
  255. & 'MOT',0,0.0D0,'BASE_MODALE',.TRUE.,0)
  256. CALL ECCTAB(IPBC,'MOT',0,0.0D0,'MODES',.TRUE.,0,
  257. & 'TABLE',0,0.0D0,' ',.TRUE.,IPTAB2)
  258.  
  259. RETURN
  260. END
  261.  
  262.  
  263.  
  264.  
  265.  
  266.  

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