Télécharger ffmcha.eso

Retour à la liste

Numérotation des lignes :

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

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