Télécharger ffmcha.eso

Retour à la liste

Numérotation des lignes :

ffmcha
  1. C FFMCHA SOURCE OF166741 24/10/03 21:15:14 12022
  2. C
  3. C_________________________________________________________________
  4. C NOM : InterFace Matrice->CHAmp par éléments
  5. C_________________________________________________________________
  6. C OBJET :
  7. C INTERFACE INTERVENANT EN THERMIQUE (RAYONNEMENT)
  8. C_________________________________________________________________
  9. C FONCTION :
  10. C PERMET DE PASSER D'UN MODELE (+ segment INFOEL)
  11. C ET DE LA MATRICE CONTENANT LES FACTEURS DE FORME
  12. C AU CHAMELEME CORRESPONDANT
  13. C_________________________________________________________________
  14. C OPERANDES :
  15. C
  16. C en entrée :
  17. C MYMOD (MMODEL) MODELE SUR LEQUEL REPOSE MATR
  18. C INFOEL INFORMATIONS SUR LE TYPE DES ELEMENTS
  19. C !!!!! si on ne doit pas tenir compte du cas des
  20. C éléments COQ , ce pointeur doit être mis à 0 .
  21. C MATR (IFACFO) MATRICE CONTENANT LES FACTEURS DE FORME
  22. C OU LA MATRICE DE RAYONNEMENT
  23. C !!!!! chaque élément COQ donne lieu à 2 fois plus
  24. C de facteurs de forme qu'un élément normal .
  25. C de facteurs de forme qu'un élément normal .
  26. C LTITR entier definissant le titre du MCHAML
  27. C 'FACTEURS DE FORME '
  28. C ou 'MATRICE DE RAYONNEMENT'
  29. C en sortie :
  30. C ICHFAC (MCHELM) CHAMELEM CONTENANT LES FACTEURS DE FORME
  31. C
  32. C_________________________________________________________________
  33. C
  34. SUBROUTINE FFMCHA(MYMOD,INFOEL,MATR,ICHFAC,LTITR)
  35.  
  36. IMPLICIT INTEGER(I-N)
  37. IMPLICIT REAL*8 (A-H,O-Z)
  38.  
  39. -INC PPARAM
  40. -INC CCOPTIO
  41.  
  42. -INC SMCHAML
  43. POINTEUR ICHFAC.MCHELM,ICPEL.MCHELM
  44. POINTEUR MELVA7.MELVAL
  45. -INC SMELEME
  46. POINTEUR ISSM.MELEME
  47. -INC SMMODEL
  48. POINTEUR MYMOD.MMODEL
  49. C ___________________________________________________________
  50. C FACTEURS DE FORME stockage sous forme matricielle
  51. C NNBEL1 = NOMBRE DE LIGNES + 1
  52. C NBEL2 = NOMBRE DE COLONNES
  53. C LFACT(NNBEL1) POINTE SUR LE TABLEAU DES SURFACES
  54. C
  55. SEGMENT IFACFO
  56. INTEGER LFACT(NNBEL1)
  57. ENDSEGMENT
  58. SEGMENT LFAC
  59. REAL*8 FACT(NBEL2)
  60. ENDSEGMENT
  61. C
  62. POINTEUR PSUR.LFAC, PLIG.LFAC, PLIGI.LFAC, PLIGS.LFAC
  63. POINTEUR MATR.IFACFO
  64. C ___________________________________________________________
  65. C Stockage d'informations concernant le type des éléments des maillages
  66. SEGMENT,INFOEL
  67. LOGICAL KCOQ(N1),KQUAD(N1)
  68. ENDSEGMENT
  69. C ___________________________________________________________
  70. C
  71. LOGICAL ICOQ
  72. LOGICAL LTEST1, LTEST2, LTEST3
  73. C_________________________________________________________________
  74. C
  75. C STRUCTURE DU CHAMELEM
  76. C
  77. C MELVA3 : segment MELVAL , surface
  78. C -----1 : segment -----L partie haute du CHAMELEM
  79. C -----4 : segment -----L partie haute du CHAMELEM
  80. C
  81. C CAS DES ELEMENTS COQ pour la partie haute
  82. C -- Partie 'haute' du CHAMELEM : boucle A --
  83. C MELVA1 : segment MELVAL , côté SUPE
  84. C MELVA2 : segment MELVAL , côté INFE
  85. C -- Partie 'basse' du CHAMELEM : boucle B --
  86. C MCHEL4 : segment MCHELM , côté SUPE
  87. C MCHEL5 : segment MCHELM , côté INFE
  88. C MCHAM4 : segment MCHAML , côté SUPE
  89. C MCHAM5 : segment MCHAML , côté INFE
  90. C CAS DES ÉLÉMENTS COQ pour la partie basse
  91. C MELVA4 : segment MELVAL , côté SUPE , relié à MCHAM4
  92. C MELVA5 : segment MELVAL , côté INFE , relié à MCHAM4
  93. C MELVA6 : segment MELVAL , côté SUPE , relié à MCHAM5
  94. C MELVA7 : segment MELVAL , côté INFE , relié à MCHAM5
  95. C sinon
  96. C MELVA4 : segment MELVAL , relié à MCHAM4
  97. C MELVA6 : segment MELVAL , relié à MCHAM5
  98. C -----
  99. C_________________________________________________________________
  100. C
  101. C NOTATIONS :
  102. C
  103. C eA : élément de la boucle A (partie haute)
  104. C eB : élément de la boucle B (partie basse )
  105. C eA+,eB+ : côté SUPE de l'élément
  106. C eA-,eB- : côté INFE de l'élément
  107. C_________________________________________________________________
  108. C
  109. IF(IIMPI.GE.2) THEN
  110. WRITE (6,*) 'On est dans ffmcha'
  111. ENDIF
  112. C
  113. IF (INFOEL.EQ.0) THEN
  114. ICOQ = .FALSE.
  115. ELSE
  116. ICOQ = .TRUE.
  117. ENDIF
  118. C
  119. C On construit l'information maillage du CHAMELEM
  120. L1 = 22
  121. N3 = 6
  122. N1 = MYMOD.KMODEL(/1)
  123. IF (N1.EQ.0) THEN
  124. CALL ERREUR(21)
  125. RETURN
  126. ENDIF
  127. C
  128. SEGINI,ICPEL
  129.  
  130. C IF (LTITR.EQ.1) THEN
  131. C ICPEL.TITCHE = 'FACTEURS DE FORME '
  132. C ELSE
  133. ICPEL.TITCHE = 'MATRICE DE RAYONNEMENT'
  134. C ENDIF
  135.  
  136. IF (IFOMOD.NE.0) THEN
  137. IF (IDIM.EQ.3) THEN
  138. ICPEL.IFOCHE = 2
  139. ELSE
  140. ICPEL.IFOCHE = -1
  141. ENDIF
  142. ELSE
  143. ICPEL.IFOCHE = 0
  144. ENDIF
  145. DO I=1,N1
  146. IMODE1 = MYMOD.KMODEL(I)
  147. ICPEL.IMACHE(I) = IMODE1.IMAMOD
  148. ICPEL.CONCHE(I) = IMODE1.CONMOD
  149. ICPEL.INFCHE(I,6) = 1
  150. ENDDO
  151. C
  152. C------------------------------------------------------------
  153. C
  154. C On récupère le nombre total d'éléments .
  155. C On vérifiera que le maillage et la matrice
  156. C portent sur le même nombre d'éléments .
  157. SEGACT MATR
  158. NNBEL1 = MATR.LFACT(/1)
  159. NBEL2 = NNBEL1 - 1
  160. PSUR = MATR.LFACT(NNBEL1)
  161. SEGACT PSUR
  162. C
  163. SEGINI,ICHFAC=ICPEL
  164. NUMA = 0
  165. C
  166. IF (ICOQ) SEGACT INFOEL
  167. C Pour les tests avenirs , on sait que FORTRAN évalue la partie
  168. C gauche d'une expression booléenne avant la partie droite ,
  169. C et donc :
  170. C dans le cas d'un .AND. si la partie gauche est fausse
  171. C la partie droite ne sera pas évaluée .
  172. C ... La remarque ci-dessus s'est avérée fausse dans le cas de
  173. C certains compilateurs (DEC Alpha OSF ), d'où l'introduction des
  174. C variables logiques LTEST1, LTEST2 et LTEST3 qui permettent de se
  175. C passer de cette hypothèse (MB & LB 13/03/96) ...
  176.  
  177. C
  178. C -----------------------------------------------------
  179. DO NSMA=1,N1
  180. C On boucle sur les sous-champs
  181. C
  182. ISSM = ICHFAC.IMACHE(NSMA)
  183. SEGACT ISSM
  184. C NBPTA = ISSM.NUM(/1)
  185. NBELA = ISSM.NUM(/2)
  186. N1EL = NBELA
  187. N1PTEL = 1
  188. N2EL = 0
  189. N2PTEL = 0
  190. SEGINI MELVA3
  191. N1EL = 0
  192. N1PTEL = 0
  193. N2EL = NBELA
  194. N2PTEL = 1
  195. C
  196. LTEST1=.FALSE.
  197. IF(ICOQ) THEN
  198. IF(KCOQ(NSMA)) LTEST1=.TRUE.
  199. ENDIF
  200. IF (LTEST1) THEN
  201. C
  202. C Cas des COQ pour la partie haute
  203. N2 = 3
  204. SEGINI ,MCHAM1
  205. ICHFAC.ICHAML(NSMA) = MCHAM1
  206. SEGINI ,MELVA1,MELVA2
  207. MCHAM1.NOMCHE(1) = 'SUPE'
  208. MCHAM1.TYPCHE(1) = 'POINTEURMCHAML'
  209. MCHAM1.IELVAL(1) = MELVA1
  210. MCHAM1.NOMCHE(2) = 'INFE'
  211. MCHAM1.TYPCHE(2) = 'POINTEURMCHAML'
  212. MCHAM1.IELVAL(2) = MELVA2
  213. MCHAM1.NOMCHE(3) = 'SURF'
  214. MCHAM1.TYPCHE(3) = 'REAL*8'
  215. MCHAM1.IELVAL(3) = MELVA3
  216.  
  217. C ----------------------------------------------
  218. DO NELMA=1,NBELA
  219. C On boucle sur les éléments du sous-champs NSMA
  220. C
  221. C
  222. NUMA = NUMA + 1
  223. MELVA3.VELCHE(1,NELMA) = PSUR.FACT(NUMA)
  224. PLIGI = MATR.LFACT(NUMA)
  225. NUMA = NUMA + 1
  226. MELVA3.VELCHE(1,NELMA) = PSUR.FACT(NUMA)
  227. PLIGS = MATR.LFACT(NUMA)
  228. SEGACT ,PLIGI,PLIGS
  229. SEGINI ,MCHEL4=ICPEL
  230. MELVA1.IELCHE(1,NELMA) = MCHEL4
  231. SEGINI ,MCHEL5=ICPEL
  232. MELVA2.IELCHE(1,NELMA) = MCHEL5
  233. NUMB = 0
  234. C
  235. C --------------------------------------------
  236. DO NSMB=1,N1
  237. C On boucle sur les sous-champs
  238. C
  239. ISSM = ICHFAC.IMACHE(NSMB)
  240. SEGACT ISSM
  241. C NBPTB = ISSM.NUM(/1)
  242. NBELB = ISSM.NUM(/2)
  243. N1EL = NBELB
  244. N1PTEL = 1
  245. N2EL = 0
  246. N2PTEL = 0
  247. C
  248. LTEST2 = .FALSE.
  249. IF(ICOQ) THEN
  250. IF(KCOQ(NSMB)) LTEST2 = .TRUE.
  251. ENDIF
  252. IF (LTEST2) THEN
  253. C
  254. C Cas des COQ pour la partie basse
  255. N2 = 2
  256. SEGINI ,MCHAM4,MCHAM5
  257. MCHEL4.ICHAML(NSMB) = MCHAM4
  258. MCHEL5.ICHAML(NSMB) = MCHAM5
  259. C
  260. SEGINI ,MELVA4,MELVA5
  261. MCHAM4.NOMCHE(1) = 'SUPE'
  262. MCHAM4.TYPCHE(1) = 'REAL*8'
  263. MCHAM4.IELVAL(1) = MELVA4
  264. MCHAM4.NOMCHE(2) = 'INFE'
  265. MCHAM4.TYPCHE(2) = 'REAL*8'
  266. MCHAM4.IELVAL(2) = MELVA5
  267.  
  268. SEGINI ,MELVA6,MELVA7
  269. MCHAM5.NOMCHE(1) = 'SUPE'
  270. MCHAM5.TYPCHE(1) = 'REAL*8'
  271. MCHAM5.IELVAL(1) = MELVA6
  272. MCHAM5.NOMCHE(2) = 'INFE'
  273. MCHAM5.TYPCHE(2) = 'REAL*8'
  274. MCHAM5.IELVAL(2) = MELVA7
  275. C
  276. C ---------------------------------------
  277. DO NELMB=1,NBELB
  278. C On boucle sur les éléments du sous-champs NSMB
  279. C
  280. C On copie la donnée facteur de forme
  281. NUMB = NUMB + 1
  282. C FF(eA+,eB+)
  283. MELVA4.VELCHE(1,NELMB) = PLIGI.FACT(NUMB)
  284. C FF(eA-,eB+)
  285. MELVA6.VELCHE(1,NELMB) = PLIGS.FACT(NUMB)
  286. NUMB = NUMB + 1
  287. C FF(eA+,eB-)
  288. MELVA5.VELCHE(1,NELMB) = PLIGI.FACT(NUMB)
  289. C FF(eA-,eB-)
  290. MELVA7.VELCHE(1,NELMB) = PLIGS.FACT(NUMB)
  291. C
  292. ENDDO
  293. C fin NELMB ----------------------------
  294. C
  295. C
  296. ELSE
  297. C
  298. C Partie basse : pas d'éléments COQ
  299. N2 = 1
  300. SEGINI MCHAM4,MCHAM5
  301. MCHEL4.ICHAML(NSMB) = MCHAM4
  302. MCHEL5.ICHAML(NSMB) = MCHAM5
  303. SEGINI ,MELVA4,MELVA5
  304. MCHAM4.NOMCHE(1) = 'MIDL'
  305. MCHAM4.TYPCHE(1) = 'REAL*8'
  306. MCHAM4.IELVAL(1) = MELVA4
  307. MCHAM5.NOMCHE(1) = 'MIDL'
  308. MCHAM5.TYPCHE(1) = 'REAL*8'
  309. MCHAM5.IELVAL(1) = MELVA5
  310. C
  311. C ---------------------------------------
  312. DO NELMB=1,NBELB
  313. C On boucle sur les éléments du sous-champs NSMB
  314. C
  315. C On copie la donnée facteur de forme
  316. NUMB = NUMB + 1
  317. C FF(eA+,eB)
  318. MELVA4.VELCHE(1,NELMB) = PLIGI.FACT(NUMB)
  319. C FF(eA-,eB)
  320. MELVA5.VELCHE(1,NELMB) = PLIGS.FACT(NUMB)
  321. C
  322. ENDDO
  323. C fin NELMB -----------------------------
  324. C
  325. C
  326. ENDIF
  327. C
  328. C
  329. ENDDO
  330. C fin NSMB -------------------------------------
  331. C
  332. SEGDES ,PLIGI,PLIGS
  333. C
  334. ENDDO
  335. C fin NELMA ---------------------------------------
  336. C
  337. C
  338. ELSE
  339. C
  340. C Partie haute : pas d'éléments COQ
  341. SEGINI ,MELVA1
  342. N2 = 2
  343. SEGINI MCHAM1
  344. ICHFAC.ICHAML(NSMA) = MCHAM1
  345. MCHAM1.NOMCHE(1) = 'MIDL'
  346. MCHAM1.TYPCHE(1) = 'POINTEURMCHAML'
  347. MCHAM1.IELVAL(1) = MELVA1
  348. MCHAM1.NOMCHE(2) = 'SURF'
  349. MCHAM1.TYPCHE(2) = 'REAL*8'
  350. MCHAM1.IELVAL(2) = MELVA3
  351. C
  352. C ----------------------------------------------
  353. DO NELMA=1,NBELA
  354. C On boucle sur les éléments du sous-champs NSMA
  355. C
  356. C
  357. NUMA = NUMA + 1
  358. MELVA3.VELCHE(1,NELMA) = PSUR.FACT(NUMA)
  359. PLIG = MATR.LFACT(NUMA)
  360. SEGACT PLIG
  361. SEGINI ,MCHEL4=ICPEL
  362. MELVA1.IELCHE(1,NELMA) = MCHEL4
  363. NUMB = 0
  364. C
  365. C --------------------------------------------
  366. DO NSMB=1,N1
  367. C On boucle sur les sous-champs
  368. C
  369. ISSM = ICHFAC.IMACHE(NSMB)
  370. SEGACT ISSM
  371. C NBPTB = ISSM.NUM(/1)
  372. NBELB = ISSM.NUM(/2)
  373. N1EL = NBELB
  374. N1PTEL = 1
  375. N2EL = 0
  376. N2PTEL = 0
  377. C
  378. LTEST3 = .FALSE.
  379. IF(ICOQ) THEN
  380. IF(KCOQ(NSMB)) LTEST3 = .TRUE.
  381. ENDIF
  382. IF (LTEST3) THEN
  383.  
  384. C
  385. C Cas des COQ pour la partie basse
  386. N2 = 2
  387. SEGINI ,MCHAM4
  388. MCHEL4.ICHAML(NSMB) = MCHAM4
  389. SEGINI ,MELVA4,MELVA5
  390. MCHAM4.NOMCHE(1) = 'SUPE'
  391. MCHAM4.TYPCHE(1) = 'REAL*8'
  392. MCHAM4.IELVAL(1) = MELVA4
  393. MCHAM4.NOMCHE(2) = 'INFE'
  394. MCHAM4.TYPCHE(2) = 'REAL*8'
  395. MCHAM4.IELVAL(2) = MELVA5
  396. C
  397. C ---------------------------------------
  398. DO NELMB=1,NBELB
  399. C On boucle sur les éléments du sous-champs NSMB
  400. C
  401. C On copie la donnée facteur de forme
  402. NUMB = NUMB + 1
  403. C FF(eA,eB+)
  404. MELVA4.VELCHE(1,NELMB) = PLIG.FACT(NUMB)
  405. NUMB = NUMB + 1
  406. C FF(eA,eB-)
  407. MELVA5.VELCHE(1,NELMB) = PLIG.FACT(NUMB)
  408. C
  409. ENDDO
  410. C fin NELMB -----------------------------
  411. C
  412. C
  413. ELSE
  414. C
  415. C Partie basse : pas d'éléments COQ
  416. N2 = 1
  417. SEGINI MCHAM4
  418. MCHEL4.ICHAML(NSMB) = MCHAM4
  419. SEGINI ,MELVA4
  420. MCHAM4.NOMCHE(1) = 'MIDL'
  421. MCHAM4.TYPCHE(1) = 'REAL*8'
  422. MCHAM4.IELVAL(1) = MELVA4
  423. C
  424. C ---------------------------------------
  425. DO NELMB=1,NBELB
  426. C On boucle sur les éléments du sous-champs NSMB
  427. C
  428. C On copie la donnée facteur de forme
  429. NUMB = NUMB + 1
  430. C FF(eA,eB)
  431. MELVA4.VELCHE(1,NELMB) = PLIG.FACT(NUMB)
  432. C
  433. ENDDO
  434. C fin NELMB -----------------------------
  435. C
  436. C
  437. ENDIF
  438. C
  439. C
  440. ENDDO
  441. C fin NSMB -------------------------------------
  442. C
  443. SEGDES ,PLIG
  444. C
  445. ENDDO
  446. C fin NELMA ---------------------------------------
  447. C
  448. C
  449. ENDIF
  450. C
  451. ENDDO
  452. C fin NSMA ----------------------------------------------
  453. C
  454. C
  455. SEGDES MATR , PSUR
  456. SEGSUP ICPEL
  457. C
  458. IF (ICOQ) SEGDES INFOEL
  459. C
  460. IF (NUMA.NE.NBEL2) THEN
  461. CALL ERREUR(21)
  462. C WRITE (6,*) 'Le maillage et la matrice portent sur un nombre'
  463. C # ,' différent d éléments .'
  464. ENDIF
  465.  
  466. END
  467.  
  468.  
  469.  

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