Télécharger cv2mab.eso

Retour à la liste

Numérotation des lignes :

cv2mab
  1. C CV2MAB SOURCE GOUNAND 21/06/02 21:15:39 11022
  2. SUBROUTINE CV2MAB(MDISCP,NCVARP,MDISCD,NCVARD,
  3. $ IMTLSB,
  4. $ MYFALS,
  5. $ MATLSB,
  6. $ IMPR,IRET)
  7. IMPLICIT REAL*8 (A-H,O-Z)
  8. IMPLICIT INTEGER (I-N)
  9. C***********************************************************************
  10. C NOM : CV2MAB
  11. C DESCRIPTION : Transforme un MCHAEL (mon champ par éléments)
  12. C représentant un ensemble de matrices élémentaires en
  13. C MATRIK...
  14. C
  15. C LANGAGE : ESOPE
  16. C AUTEUR : Stéphane GOUNAND (CEA/DRN/DMT/SEMT/LTMF)
  17. C mél : gounand@semt2.smts.cea.fr
  18. C***********************************************************************
  19. C APPELES : KEEF (recherche de l'élément fini)
  20. C APPELES (E/S) : ECROBJ, PRLIST (écriture entier, objet,
  21. C impression)
  22. C APPELE PAR : PRLSB2
  23. C***********************************************************************
  24. C ENTREES :
  25. C ENTREES/SORTIES : -
  26. C SORTIES :
  27. C TRAVAIL : * MYMEL (type MELEME) : maillage élémentaire.
  28. C * JMTLSB (type MCHEVA) : valeurs du champ IMTLSB
  29. C sur le maillage élémentaire.
  30. C Structure (cf.include SMCHAEL) :
  31. C (nb. ddl dual, nb. ddl primal,
  32. C nb. comp. duales, nb. comp. primales,
  33. C 1, nb. éléments)
  34. C CODE RETOUR (IRET) : = 0 si tout s'est bien passé
  35. C***********************************************************************
  36. C VERSION : v1, 22/07/09, version initiale
  37. C HISTORIQUE : v1, 22/07/09, création
  38. C HISTORIQUE :
  39. C HISTORIQUE :
  40. C***********************************************************************
  41. C Prière de PRENDRE LE TEMPS de compléter les commentaires
  42. C en cas de modification de ce sous-programme afin de faciliter
  43. C la maintenance !
  44. C***********************************************************************
  45.  
  46. -INC PPARAM
  47. -INC CCOPTIO
  48. -INC SMLMOTS
  49. POINTEUR NCVARP.MLMOTS
  50. POINTEUR NCVARD.MLMOTS
  51. -INC SMELEME
  52. POINTEUR MELPRI.MELEME
  53. POINTEUR MELDUA.MELEME
  54. POINTEUR MYMEL.MELEME
  55. INTEGER NBNN,NBELEM,NBSOUS,NBREF
  56. -INC SMLENTI
  57. POINTEUR LPOQFP.MLENTI
  58. POINTEUR LPOQFD.MLENTI
  59. POINTEUR KPOQFP.MLENTI
  60. POINTEUR KPOQFD.MLENTI
  61. INTEGER JG
  62. POINTEUR MATLSB.MATRIK
  63. *
  64. * Includes persos
  65. *
  66. -INC TNLIN
  67. *-INC SMCHAEL
  68. POINTEUR IMTLSB.MCHAEL
  69. POINTEUR JMTLSB.MCHEVA
  70. INTEGER NBLIG,NBCOL,N2LIG,N2COL,NBPOI,NBELM
  71. *-INC SFALRF
  72. POINTEUR MYFALS.FALRFS
  73. *-INC SELREF
  74. POINTEUR LRFPRI.ELREF
  75. POINTEUR LRFDUA.ELREF
  76. *
  77. CHARACTER*4 MDISCP,MDISCD
  78. INTEGER IMPR,IRET
  79. *
  80. INTEGER IBNN,IBELEM
  81. INTEGER ITQUAF,NDDLPR,NDDLDU
  82. INTEGER IDDLPR,IDDLDU
  83. INTEGER NSOUS,NPOQUF
  84. INTEGER ISOUS
  85. INTEGER ILIGRP,ILIGRD,IELRIG,ICMPP,ICMPD
  86.  
  87. *
  88. * Executable statements
  89. *
  90. IF (IMPR.GT.1) WRITE(IOIMP,*) 'Entrée dans cv2mab'
  91. NRIGE=7
  92. NMATRI=0
  93. NKID=9
  94. NKMT=7
  95. SEGINI,MATLSB
  96. *
  97. * Remplissage de MRIGID
  98. *
  99. SEGACT NCVARP
  100. SEGACT NCVARD
  101. SEGACT IMTLSB
  102. NSOUS=IMTLSB.JMACHE(/1)
  103. C SEGPRT,NCVARP
  104. C SEGPRT,NCVARD
  105. C SEGPRT,IMTLSB
  106. DO ISOUS=1,NSOUS
  107. JMTLSB=IMTLSB.ICHEVA(ISOUS)
  108. IF (JMTLSB.NE.0) THEN
  109. C SEGPRT,NCVARP
  110. C SEGPRT,NCVARD
  111. C SEGPRT,JMTLSB
  112. SEGACT JMTLSB
  113. MYMEL =IMTLSB.JMACHE(ISOUS)
  114. SEGACT MYMEL
  115. ITQUAF=MYMEL.ITYPEL
  116. CALL KEEF(ITQUAF,MDISCP,MYFALS,
  117. $ LRFPRI,IMPR,IRET)
  118. IF (IRET.NE.0) GOTO 9999
  119. SEGACT LRFPRI
  120. NDDLPR=LRFPRI.NPQUAF(/1)
  121. CALL KEEF(ITQUAF,MDISCD,MYFALS,
  122. $ LRFDUA,IMPR,IRET)
  123. IF (IRET.NE.0) GOTO 9999
  124. SEGACT LRFDUA
  125. NDDLDU=LRFDUA.NPQUAF(/1)
  126. DO IVARP=1,NCVARP.MOTS(/2)
  127. * Construction de la liste des points du QUAF sur lesquels il y a des
  128. * ddl pour l'inconnue primale
  129. JG=0
  130. SEGINI LPOQFP
  131. DO IDDLPR=1,NDDLPR
  132. IF (LRFPRI.NUMCMP(IDDLPR).EQ.IVARP) THEN
  133. LPOQFP.LECT(**)=LRFPRI.NPQUAF(IDDLPR)
  134. ENDIF
  135. ENDDO
  136. IF (LPOQFP.LECT(/1).EQ.0) THEN
  137. GOTO 1
  138. ENDIF
  139. C* Suppression des doublons (pas besoin)
  140. C CALL IUNIQ(LPOQFP.LECT,LPOQFP.LECT(/1),
  141. C $ LPOQFP.LECT,NPOQFP,
  142. C $ IMPR,IRET)
  143. C IF (IRET.NE.0) GOTO 9999
  144. C JG=NPOQFP
  145. C SEGADJ,LPOQFP
  146. * Segment de repérage dans cette liste
  147. JG=MYMEL.NUM(/1)
  148. SEGINI,KPOQFP
  149. CALL RSETXI(KPOQFP.LECT,LPOQFP.LECT,LPOQFP.LECT(/1))
  150. * Construction du maillage primal
  151. NBNN=LPOQFP.LECT(/1)
  152. NBELEM = MYMEL.NUM(/2)
  153. NBSOUS = 0
  154. NBREF=0
  155. SEGINI,MELPRI
  156. * Type 32 POLY
  157. MELPRI.ITYPEL=32
  158. DO IBELEM=1,NBELEM
  159. DO IBNN=1,NBNN
  160. MELPRI.NUM(IBNN,IBELEM)=
  161. $ MYMEL.NUM(LPOQFP.LECT(IBNN),IBELEM)
  162. ENDDO
  163. ENDDO
  164. SEGDES MELPRI
  165. *
  166. DO IVARD=1,NCVARD.MOTS(/2)
  167. * Construction de la liste des points du QUAF sur lesquels il y a des
  168. * ddl pour l'inconnue duale
  169. JG=0
  170. SEGINI LPOQFD
  171. DO IDDLDU=1,NDDLDU
  172. IF (LRFDUA.NUMCMP(IDDLDU).EQ.IVARD) THEN
  173. LPOQFD.LECT(**)=LRFDUA.NPQUAF(IDDLDU)
  174. ENDIF
  175. ENDDO
  176. IF (LPOQFD.LECT(/1).EQ.0) THEN
  177. GOTO 3
  178. ENDIF
  179. C* Suppression des doublons
  180. C CALL IUNIQ(LPOQFD.LECT,LPOQFD.LECT(/1),
  181. C $ LPOQFD.LECT,NPOQFD,
  182. C $ IMPR,IRET)
  183. C IF (IRET.NE.0) GOTO 9999
  184. C JG=NPOQFD
  185. C SEGADJ,LPOQFD
  186. * Segment de repérage dans cette liste
  187. JG=MYMEL.NUM(/1)
  188. SEGINI,KPOQFD
  189. CALL RSETXI(KPOQFD.LECT,LPOQFD.LECT,LPOQFD.LECT(/1))
  190. * Construction du maillage dual
  191. NBNN=LPOQFD.LECT(/1)
  192. NBELEM = MYMEL.NUM(/2)
  193. NBSOUS = 0
  194. NBREF=0
  195. SEGINI,MELDUA
  196. * Type 32 POLY
  197. MELDUA.ITYPEL=32
  198. DO IBELEM=1,NBELEM
  199. DO IBNN=1,NBNN
  200. MELDUA.NUM(IBNN,IBELEM)=
  201. $ MYMEL.NUM(LPOQFD.LECT(IBNN),IBELEM)
  202. ENDDO
  203. ENDDO
  204. SEGDES MELDUA
  205. * Construction du IMATRI
  206. NBME=1
  207. NBSOUS=1
  208. SEGINI IMATRI
  209. LISPRI(1)=NCVARP.MOTS(IVARP)
  210. LISDUA(1)=NCVARD.MOTS(IVARD)
  211. * Construction du IZAFM
  212. NBEL=MYMEL.NUM(/2)
  213. NP=LPOQFP.LECT(/1)
  214. MP=LPOQFD.LECT(/1)
  215. SEGINI IZAFM
  216. * remplissage des matrices élémentaires
  217. NBLIG=JMTLSB.WELCHE(/1)
  218. NBCOL=JMTLSB.WELCHE(/2)
  219. N2LIG=JMTLSB.WELCHE(/3)
  220. N2COL=JMTLSB.WELCHE(/4)
  221. NBPOI=JMTLSB.WELCHE(/5)
  222. NBELM=JMTLSB.WELCHE(/6)
  223. IF (NBLIG.NE.NDDLDU.OR.NBCOL.NE.NDDLPR.OR.N2LIG.NE.1
  224. $ .OR.N2COL.NE.1.OR.NBPOI.NE.1.OR.NBELM.NE.NBEL)
  225. $ THEN
  226. WRITE(IOIMP,*) 'Erreur dims JMTLSB'
  227. GOTO 9999
  228. ENDIF
  229. DO IDDLDU=1,NDDLDU
  230. IF (LRFDUA.NUMCMP(IDDLDU).EQ.IVARD) THEN
  231. IMP=KPOQFD.LECT(LRFDUA.NPQUAF(IDDLDU))
  232. DO IDDLPR=1,NDDLPR
  233. IF (LRFPRI.NUMCMP(IDDLPR).EQ.IVARP) THEN
  234. INP=KPOQFP.LECT(LRFPRI.NPQUAF(IDDLPR))
  235. DO IBEL=1,NBEL
  236. AM(IBEL,INP,IMP)=
  237. $ JMTLSB.WELCHE(IDDLDU,IDDLPR,
  238. $ 1,1,1,IBEL)
  239. ENDDO
  240. ENDIF
  241. ENDDO
  242. ENDIF
  243. ENDDO
  244. SEGDES IZAFM
  245. LIZAFM(1,1)=IZAFM
  246. SEGDES IMATRI
  247. *
  248. * Remplissage du chapeau
  249. *
  250. NRIGE=MATLSB.IRIGEL(/1)
  251. NMATRI=MATLSB.IRIGEL(/2)+1
  252. NKID=MATLSB.KIDMAT(/1)
  253. NKMT=MATLSB.KKMMT(/1)
  254. SEGADJ,MATLSB
  255. MATLSB.IRIGEL(1,NMATRI)=MELPRI
  256. MATLSB.IRIGEL(2,NMATRI)=MELDUA
  257. MATLSB.IRIGEL(4,NMATRI)=IMATRI
  258. MATLSB.IRIGEL(7,NMATRI)=2
  259. SEGSUP KPOQFD
  260. 3 CONTINUE
  261. SEGSUP LPOQFD
  262. ENDDO
  263. SEGSUP KPOQFP
  264. 1 CONTINUE
  265. SEGSUP LPOQFP
  266. ENDDO
  267. SEGDES LRFDUA
  268. SEGDES LRFPRI
  269. SEGDES MYMEL
  270. SEGDES JMTLSB
  271. ENDIF
  272. ENDDO
  273. SEGDES IMTLSB
  274. SEGDES NCVARD
  275. SEGDES NCVARP
  276. SEGDES MATLSB
  277. IF (IMPR.GT.3) THEN
  278. WRITE(IOIMP,*) 'On a créé MATLSB=',MATLSB
  279. CALL ECROBJ('MATRIK ',MATLSB)
  280. CALL PRLIST
  281. ENDIF
  282. *
  283. * Normal termination
  284. *
  285. IRET=0
  286. RETURN
  287. *
  288. * Format handling
  289. *
  290. *
  291. * Error handling
  292. *
  293. 9999 CONTINUE
  294. IRET=1
  295. WRITE(IOIMP,*) 'An error was detected in subroutine cv2mab'
  296. RETURN
  297. *
  298. * End of subroutine CV2MAB
  299. *
  300. END
  301.  
  302.  
  303.  
  304.  
  305.  
  306.  
  307.  
  308.  

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