Télécharger tq2cf.eso

Retour à la liste

Numérotation des lignes :

tq2cf
  1. C TQ2CF SOURCE CB215821 26/08/24 21:18:40 12622
  2. SUBROUTINE TQ2CF(MAIL,MELEMQ,MELEM1,MF1,MELAF,
  3. & MPFD,MFD,MFD2,MFF2,NOMC,IKR)
  4. IMPLICIT INTEGER(I-N)
  5. IMPLICIT REAL*8 (A-H,O-Z)
  6. C*************************************************************************
  7. C Ce SP cree à partir de QCF (MAIL) les connectivités suivantes
  8. C MELEMQ = MAIL ou le QCF correspondant si MAIL non QCF
  9. C Si NOMC=CENTRE on ne calcule que les CENTREs
  10. C
  11. C A : Connectivites elements -> faces (ELTFA) MELAF
  12. C B : Support geometrique des centres (CENTRE) MELEM1
  13. C C : Connectivites faces -> sommets (FACEP) MPFD
  14. C D : Connectivites faces -> elements (FACEL) MFD
  15. C partitionne D': Connectivites faces -> elements (FACEL2) MFD2
  16. C E : Support geometrique des faces (FACE) MF1
  17. C F : Connectivite entre tous les noeuds (MAILFACE) MFF2
  18. C d'une face
  19. C
  20. C IKT = 0 Ce n'était pas des QCF
  21. C IKT = 1 C'était des QCF
  22. C IKL = 0 Ce n'était pas des Lineaires
  23. C IKL = 1 C'était des Lineaires
  24. C IKR = 0 Famille non reconnue
  25. C IKR = 1 C'était des QCF
  26. C IKR = 2 C'était des Lineaires
  27. C IKR = 3 C'était des Macro
  28. C
  29. C*************************************************************************
  30.  
  31. -INC PPARAM
  32. -INC CCOPTIO
  33. -INC SMCOORD
  34. -INC CCGEOME
  35. -INC SMELEME
  36. POINTEUR MELEM1.MELEME,MF1.MELEME,MELAF.MELEME,MPFD.MELEME
  37. POINTEUR MFD.MELEME,MFD2.MELEME,MFF2.MELEME
  38. -INC SMLENTI
  39. PARAMETER (NBTE=21)
  40. CHARACTER*8 NOM8,LTYPL(NBTE),NOMC
  41. DIMENSION ITC(7),KTA(7,3),JNF(6,7),KNPF(6,7)
  42. DIMENSION INPF(8),INPP(8),INPT(8),INPT2(8),INPT3(8),INPT4(8)
  43.  
  44. DATA LTYPL/
  45. & 'SEG3 ','TRI7 ','QUA9 ',
  46. & 'CU27 ','PR21 ','TE15 ','PY19 ',
  47. & 'SEG2 ','TRI3 ','QUA4 ',
  48. & 'CUB8 ','PRI6 ','TET4 ','PYR5 ',
  49. & 'SEG3 ','TRI6 ','QUA9 ',
  50. & 'CU27 ','PR18 ','TE10 ','PY14 '/
  51.  
  52. DATA ITC/ 2,7,9,27,21,15,19/
  53.  
  54. DATA KTA/
  55. C nb de faces par type d'élément
  56. & 2, 3, 4, 6, 5, 4, 5,
  57. C numero type elt pour conectivités elt -> face
  58. & 2, 4, 8,16,25,23,9,
  59. C Idc3
  60. & 20,22,25, 0, 6,11,15/
  61.  
  62. DATA INPT/1,0,3,0,0,6,0,10/
  63. C? DATA INPT2/1,0,2,0,0,4,0,8/
  64. DATA INPT2/2,0,3,0,0,5,0,9/
  65. C seg2,seg3,tri4,qua5
  66. C
  67. C nombre de noeuds a prendre en compte pour les faces
  68. DATA INPT3/1,0,3,0,0,7,0,9/
  69. C type des elements correspondants a des faces
  70. DATA INPT4/1,0,3,0,0,7,0,11/
  71. C poi1,seg3,tri7,qua9
  72. C
  73. DATA KNPF/
  74. & 1,1,0,0,0,0,
  75. & 3,3,3,0,0,0,
  76. & 3,3,3,3,0,0,
  77. & 8,8,8,8,8,8,
  78. & 6,6,8,8,8,0,
  79. & 6,6,6,6,0,0,
  80. & 8,6,6,6,6,0/
  81.  
  82. C CORRESPONDANCE
  83. C maillage SEG3 TRI7 QUA9 CU20 PR21 TE15 PY19
  84. C | | | | | | |
  85. C V V V V V V V
  86. C faces SEG2 TRI3 QUA4 PRI6 PYR5 TET4 QUA5
  87. C
  88. C ALIAS seg2 tri3 qua4 pri6 pyr5 tet4 qua5
  89. C ALIAS numero 2 4 8 16 25 23 9
  90.  
  91.  
  92. DATA JNF/1,3,0,0,0,0,
  93. & 2,4,6,0,0,0, 2,4,6,8,0,0,
  94. & 25,26,21,22,23,24, 19,20,16,17,18,0,
  95. & 12,11,13,14,0,0, 14,15,16,17,18,0/
  96.  
  97. DIMENSION INF(8,29)
  98. C CU20
  99. DATA INF/1,2,3,4,5,6,7,8, 13,14,15,16,17,18,19,20,
  100. & 1,2,3,10,15,14,13,9, 3,4,5,11,17,16,15,10,
  101. & 5,6,7,12,19,18,17,11, 7,8,1,9,13,20,19,12,
  102. C PR15
  103. & 1,2,3,4,5,6,0,0, 10,11,12,13,14,15,0,0,
  104. & 1,2,3,8 ,12,11,10,7, 3,4,5,9 ,14,13,12,8 ,
  105. & 5,6,1,7,10,15,14,9 ,
  106. C TE15
  107. & 1,2,3,8,10,7,0,0, 1,2,3,4,5,6,0,0, 3,4,5,9,10,8,0,0,
  108. & 1,6,5,9,10,7,0,0,
  109. C PY15
  110. & 1,2,3,4,5,6,7,8, 1,2,3,10,13,9,0,0, 3,4,5,11,13,10,0,0,
  111. & 5,6,7,12,13,11,0,0, 7,8,1,9,13,12,0,0,
  112. C SEG3
  113. & 1,0,0,0,0,0,0,0, 3,0,0,0,0,0,0,0,
  114. C TRI7
  115. & 1,2,3,0,0,0,0,0, 3,4,5,0,0,0,0,0, 5,6,1,0,0,0,0,0,
  116. C QUA9
  117. & 1,2,3,0,0,0,0,0, 3,4,5,0,0,0,0,0, 5,6,7,0,0,0,0,0,
  118. & 7,8,1,0,0,0,0,0/
  119.  
  120. C****
  121. C description des faces avec les points centre des surfaces
  122. DIMENSION INF2(9,29)
  123. C CU27
  124. DATA INF2/1,2,3,4,5,6,7,8,25, 13,14,15,16,17,18,19,20,26,
  125. & 1,2,3,10,15,14,13,9,21, 3,4,5,11,17,16,15,10,22,
  126. & 5,6,7,12,19,18,17,11,23, 7,8,1,9,13,20,19,12,24,
  127. C PR21
  128. & 1,2,3,4,5,6,19,0,0, 10,11,12,13,14,15,20,0,0,
  129. & 1,2,3,8 ,12,11,10,7,16, 3,4,5,9 ,14,13,12,8 ,17,
  130. & 5,6,1,7,10,15,14,9 ,18,
  131. C TE15
  132. & 1,2,3,8,10,7,12,0,0, 1,2,3,4,5,6,11,0,0,
  133. & 3,4,5,9,10,8,13,0,0, 1,6,5,9,10,7,14,0,0,
  134. C PY19
  135. & 1,2,3,4,5,6,7,8,14, 1,2,3,10,13,9,15,0,0,
  136. & 3,4,5,11,13,10,16,0,0, 5,6,7,12,13,11,17,0,0,
  137. & 7,8,1,9,13,12,18,0,0,
  138. C SEG3
  139. & 1,0,0,0,0,0,0,0,0, 3,0,0,0,0,0,0,0,0,
  140. C TRI7
  141. & 1,2,3,0,0,0,0,0,0, 3,4,5,0,0,0,0,0,0, 5,6,1,0,0,0,0,0,0,
  142. C QUA9
  143. & 1,2,3,0,0,0,0,0,0, 3,4,5,0,0,0,0,0,0, 5,6,7,0,0,0,0,0,0,
  144. & 7,8,1,0,0,0,0,0,0/
  145.  
  146. C****
  147. MELEME=MAIL
  148. MELEMQ=MAIL
  149. IKR=0
  150. IPAS=0
  151. 111 CONTINUE
  152. SEGACT MELEME
  153. NBSOUS=LISOUS(/1)
  154. C On regarde à qui on a à faire
  155. C SONT ce des QCF IKT=1 ?
  156. IKKT=1
  157. IKKL=1
  158. IKKM=1
  159. NBELEM=0
  160. NBSOU1=NBSOUS
  161. IF(NBSOU1.EQ.0)NBSOU1=1
  162. DO 1670 L=1,NBSOU1
  163. IPT1=MELEME
  164. IF(NBSOU1.NE.1)IPT1=LISOUS(L)
  165. SEGACT IPT1
  166. NOM8=NOMS(IPT1.ITYPEL)//' '
  167. CALL OPTLI(IP,LTYPL,NOM8,NBTE)
  168. IF(IP.EQ.0.OR.IP.GT.7)IKKT=0
  169. IF(IP.LT.8.OR.IP.GT.14)IKKL=0
  170. IF(IP.LT.15.OR.IP.GT.21)IKKM=0
  171. NBELEM=NBELEM+IPT1.NUM(/2)
  172. 1670 CONTINUE
  173.  
  174. IF(IPAS.EQ.0)THEN
  175. IF(IKKT.NE.0)IKR=1
  176. IF(IKKL.NE.0)IKR=2
  177. IF(IKKM.NE.0)IKR=3
  178. ENDIF
  179.  
  180. IF(IKKT.EQ.0.AND.IKKL.EQ.0)RETURN
  181. IF(IKKL.NE.0)THEN
  182. CALL ECROBJ('MAILLAGE',MELEME)
  183. CALL CHANQU
  184. CALL C20227
  185. CALL LIROBJ('MAILLAGE',MELEME,1,IRETOU)
  186. MELEMQ=MELEME
  187. IPAS=1
  188. GO TO 111
  189. ELSEIF(IKKM.NE.0)THEN
  190. CALL ECROBJ('MAILLAGE',MELEME)
  191. CALL CQ2L
  192. CALL CHANQU
  193. CALL C20227
  194. CALL LIROBJ('MAILLAGE',MELEME,1,IRETOU)
  195. MELEMQ=MELEME
  196. IPAS=1
  197. GO TO 111
  198. ENDIF
  199. C Ce sont des quadratiques
  200.  
  201. NBPT=nbpts
  202. JG=NBPT
  203. SEGINI MLENTI,MLENT1
  204.  
  205. C ****** Création Pts CENTRE
  206. NBELC=NBELEM
  207. NBNN=1
  208. NBSOUS=0
  209. NBREF=0
  210. SEGINI MELEM1
  211. MELEM1.ITYPEL=1
  212.  
  213. CALL INITI(INPF,8,0)
  214.  
  215. NPTF=0
  216. K0=0
  217. DO 1671 L=1,NBSOU1
  218. IPT1=MELEME
  219. IF(NBSOU1.NE.1)IPT1=LISOUS(L)
  220. SEGACT IPT1
  221. NBEL=IPT1.NUM(/2)
  222. NP =IPT1.NUM(/1)
  223. NOM8=NOMS(IPT1.ITYPEL)//' '
  224. CALL OPTLI(IP,LTYPL,NOM8,7)
  225. NBF=KTA(IP,1)
  226. IC =ITC(IP)
  227.  
  228. DO 1672 K=1,NBEL
  229. K0=K0+1
  230. MELEM1.NUM(1,K0)=IPT1.NUM(IC,K)
  231. MELEM1.ICOLOR(K0)=6
  232. DO 1673 I=1,NBF
  233. ITF=LECT(IPT1.NUM(JNF(I,IP),K))
  234. IF(ITF.NE.0)GO TO 1673
  235. NPTF=NPTF+1
  236. LECT(IPT1.NUM(JNF(I,IP),K))=NPTF
  237. MLENT1.LECT(NPTF)=IPT1.NUM(JNF(I,IP),K)
  238. NPF=KNPF(I,IP)
  239. INPF(NPF)=INPF(NPF)+1
  240. 1673 CONTINUE
  241.  
  242. 1672 CONTINUE
  243. 1671 CONTINUE
  244. call crech1(melem1,1)
  245. SEGINI, MLENT2=MLENTI
  246.  
  247. IF(NOMC.EQ.'CENTRE')GO TO 1901
  248.  
  249. C ****** Création Pts FACE
  250. NBELEM=NPTF
  251. NBNN=1
  252. NBSOUS=0
  253. NBREF=0
  254. SEGINI MF1
  255. MF1.ITYPEL=1
  256.  
  257. DO 1674 K=1,NPTF
  258. MF1.NUM(1,K)=MLENT1.LECT(K)
  259. MF1.ICOLOR(K)=4
  260. 1674 CONTINUE
  261.  
  262. C ****** Création ELTFA
  263. NBSOUS=NBSOU1
  264. NBREF=0
  265. NBNN=0
  266. NBELEM=0
  267. SEGINI MELAF
  268.  
  269. DO 1771 L=1,NBSOU1
  270. IPT1=MELEME
  271. IF(NBSOU1.NE.1)IPT1=LISOUS(L)
  272. SEGACT IPT1
  273. NBELEM=IPT1.NUM(/2)
  274. NP =IPT1.NUM(/1)
  275. NOM8=NOMS(IPT1.ITYPEL)//' '
  276. CALL OPTLI(IP,LTYPL,NOM8,7)
  277. NBNN=KTA(IP,1)
  278. NBSOUS=0
  279. NBREF=0
  280. SEGINI IPT2
  281. IPT2.ITYPEL=KTA(IP,2)
  282. MELAF.LISOUS(L)=IPT2
  283.  
  284.  
  285. DO 1772 K=1,NBELEM
  286. DO 1773 I=1,NBNN
  287. IPT2.NUM(I,K)=IPT1.NUM(JNF(I,IP),K)
  288. IPT2.ICOLOR(K)=1
  289. MLENT1.LECT(NPTF)=IPT1.NUM(JNF(I,IP),K)
  290. 1773 CONTINUE
  291.  
  292. 1772 CONTINUE
  293. 1771 CONTINUE
  294.  
  295. IF(NBSOU1.EQ.1)THEN
  296. IPT2=MELAF.LISOUS(1)
  297. SEGSUP MELAF
  298. MELAF=IPT2
  299. ENDIF
  300.  
  301. C ****** Création FACEL
  302. SEGACT MELEME,MELEM1
  303. NBNN=3
  304. NBELEM=NPTF
  305. NBSOUS=0
  306. NBREF=0
  307. SEGINI MFD
  308. MFD.ITYPEL=3
  309. K0=0
  310. DO 1781 L=1,NBSOU1
  311. IPT1=MELEME
  312. IF(NBSOU1.NE.1)IPT1=LISOUS(L)
  313. SEGACT IPT1
  314. NBEL=IPT1.NUM(/2)
  315. NOM8=NOMS(IPT1.ITYPEL)//' '
  316. CALL OPTLI(IP,LTYPL,NOM8,7)
  317. NBF=KTA(IP,1)
  318.  
  319. DO 1987 K=1,NBEL
  320. K0=K0+1
  321. DO 1782 I=1,NBF
  322. I2=IPT1.NUM(JNF(I,IP),K)
  323. NF=LECT(I2)
  324. MFD.NUM(2,NF)=I2
  325. MFD.ICOLOR(NF)=2
  326. I3=MFD.NUM(3,NF)
  327. NC=MELEM1.NUM(1,K0)
  328. IF(I3.EQ.0)THEN
  329. MFD.NUM(1,NF)=NC
  330. MFD.NUM(3,NF)=NC
  331. MFD.ICOLOR(NF)=2
  332. ELSE
  333. IF(NC.LT.I3)THEN
  334. MFD.NUM(1,NF)=NC
  335. MFD.ICOLOR(NF)=2
  336. ELSE
  337. MFD.NUM(1,NF)=I3
  338. MFD.NUM(3,NF)=NC
  339. MFD.ICOLOR(NF)=2
  340. ENDIF
  341. ENDIF
  342. 1782 CONTINUE
  343. 1987 CONTINUE
  344. 1781 CONTINUE
  345.  
  346. C ******* Mise au propre FACEL dans le cas Navier-Stokes
  347. NBNN=2
  348. NBELEM=NPTF
  349. NBSOUS=0
  350. NBREF=0
  351. SEGINI IPT2
  352. IPT2.ITYPEL=2
  353.  
  354. NBNN=3
  355. NBELEM=NPTF
  356. NBSOUS=0
  357. NBREF=0
  358. SEGINI IPT3
  359. IPT3.ITYPEL=3
  360.  
  361. I2=0
  362. I3=0
  363.  
  364. NBEL=MFD.NUM(/2)
  365. DO 1783 K=1,NBEL
  366. N1=MFD.NUM(1,K)
  367. NC=MFD.NUM(2,K)
  368. N3=MFD.NUM(3,K)
  369. IF(N1.EQ.N3)THEN
  370. I2=I2+1
  371. IPT2.NUM(1,I2)=N1
  372. IPT2.NUM(2,I2)=NC
  373. IPT2.ICOLOR(I2)=3
  374. ELSE
  375. I3=I3+1
  376. IPT3.NUM(1,I3)=N1
  377. IPT3.NUM(2,I3)=NC
  378. IPT3.NUM(3,I3)=N3
  379. IPT3.ICOLOR(I3)=3
  380. ENDIF
  381. 1783 CONTINUE
  382.  
  383. NBNN=2
  384. NBELEM=I2
  385. NBSOUS=0
  386. NBREF=0
  387. SEGADJ IPT2
  388.  
  389. NBNN=3
  390. NBELEM=I3
  391. NBSOUS=0
  392. NBREF=0
  393. SEGADJ IPT3
  394.  
  395. NBNN=0
  396. NBELEM=0
  397. NBSOUS=2
  398. NBREF=0
  399. SEGINI MFD2
  400. MFD2.LISOUS(1)=IPT3
  401. MFD2.LISOUS(2)=IPT2
  402.  
  403. C ****** Création FACEP
  404. CALL INITI(INPP,8,0)
  405. NS=0
  406. DO 1780 L=1,8
  407. NBELEM=INPF(L)
  408. INPF(L)=0
  409. IF(NBELEM.EQ.0)GO TO 1780
  410. NS=NS+1
  411. NBNN=(L+1)/2+1
  412. NBSOUS=0
  413. NBREF=0
  414. SEGINI IPT3
  415. INPP(L)=IPT3
  416. IPT3.ITYPEL=INPT2(L)
  417.  
  418. 1780 CONTINUE
  419.  
  420. SEGACT MELEME
  421.  
  422. DO 1881 L=1,NBSOU1
  423. IPT1=MELEME
  424. IF(NBSOU1.NE.1)IPT1=LISOUS(L)
  425. SEGACT IPT1
  426. NBEL=IPT1.NUM(/2)
  427. NOM8=NOMS(IPT1.ITYPEL)//' '
  428. CALL OPTLI(IP,LTYPL,NOM8,7)
  429. NBF=KTA(IP,1)
  430. IDC3=KTA(IP,3)
  431. DO 1882 K=1,NBEL
  432. DO 1883 I=1,NBF
  433. I2=IPT1.NUM(JNF(I,IP),K)
  434. NF=LECT(I2)
  435. IF(NF.EQ.0)GO TO 1883
  436. LECT(I2)=0
  437. NPF=KNPF(I,IP)
  438. IPT3=INPP(NPF)
  439. SEGACT IPT3*MOD
  440. IPOS=INPF(NPF)+1
  441. INPF(NPF)=IPOS
  442. J3=0
  443. DO 1884 J=1,NPF,2
  444. J3=J3+1
  445. IPT3.NUM(J3,IPOS)=IPT1.NUM(INF(J,I+IDC3),K)
  446. IPT3.ICOLOR(IPOS)=5
  447. 1884 CONTINUE
  448. IPT3.NUM(J3+1,IPOS)=I2
  449. IPT3.ICOLOR(IPOS)=5
  450. 1883 CONTINUE
  451. 1882 CONTINUE
  452. 1881 CONTINUE
  453.  
  454. NBSOUS=0
  455. DO 1885 I=1,8
  456. IF(INPP(I).NE.0)NBSOUS=NBSOUS+1
  457. 1885 CONTINUE
  458.  
  459. IF(NBSOUS.EQ.1)THEN
  460. MPFD=IPT3
  461. ELSE
  462. NBREF=0
  463. NBELEM=0
  464. NBNN=0
  465. SEGINI MPFD
  466. NS=0
  467. DO 1886 I=1,8
  468. IF(INPP(I).NE.0)THEN
  469. NS=NS+1
  470. MPFD.LISOUS(NS)=INPP(I)
  471. ENDIF
  472. 1886 CONTINUE
  473. ENDIF
  474.  
  475. C ****** Création MAILFACE
  476. C !!!!! atention on reutilise INPF
  477. CALL INITI(INPP,8,0)
  478. NS=0
  479. DO 1970 L=1,8
  480. NBELEM=INPF(L)
  481. INPF(L)=0
  482. IF(NBELEM.EQ.0)GO TO 1970
  483. NS=NS+1
  484. NBNN=INPT3(L)
  485. NBSOUS=0
  486. NBREF=0
  487. SEGINI IPT3
  488. INPP(L)=IPT3
  489. IPT3.ITYPEL=INPT4(L)
  490.  
  491. 1970 CONTINUE
  492.  
  493. SEGACT MELEME
  494.  
  495. DO 1981 L=1,NBSOU1
  496. IPT1=MELEME
  497. IF(NBSOU1.NE.1)IPT1=LISOUS(L)
  498. SEGACT IPT1
  499. NBEL=IPT1.NUM(/2)
  500. NOM8=NOMS(IPT1.ITYPEL)//' '
  501. CALL OPTLI(IP,LTYPL,NOM8,7)
  502. NBF=KTA(IP,1)
  503. IDC3=KTA(IP,3)
  504. DO 1982 K=1,NBEL
  505. DO 1983 I=1,NBF
  506. I2=IPT1.NUM(JNF(I,IP),K)
  507. NF=MLENT2.LECT(I2)
  508. IF(NF.EQ.0)GO TO 1983
  509. MLENT2.LECT(I2)=0
  510. NPF=KNPF(I,IP)
  511. IPT3=INPP(NPF)
  512. SEGACT IPT3*MOD
  513. IPOS=INPF(NPF)+1
  514. INPF(NPF)=IPOS
  515. NPPF=INPT3(NPF)
  516. DO 1984 J=1,NPPF
  517. IPT3.NUM(J,IPOS)=IPT1.NUM(INF2(J,I+IDC3),K)
  518. 1984 CONTINUE
  519. IPT3.ICOLOR(IPOS)=5
  520. 1983 CONTINUE
  521. 1982 CONTINUE
  522. 1981 CONTINUE
  523.  
  524. NBSOUS=0
  525. DO 1985 I=1,8
  526. IF(INPP(I).NE.0)NBSOUS=NBSOUS+1
  527. 1985 CONTINUE
  528.  
  529. IF(NBSOUS.EQ.1)THEN
  530. MFF2=IPT3
  531. ELSE
  532. NBREF=0
  533. NBELEM=0
  534. NBNN=0
  535. SEGINI MFF2
  536. NS=0
  537. DO 1986 I=1,8
  538. IF(INPP(I).NE.0)THEN
  539. NS=NS+1
  540. MFF2.LISOUS(NS)=INPP(I)
  541. ENDIF
  542. 1986 CONTINUE
  543. ENDIF
  544. C write(6,*)' **** voici MAILFACE dans tq2cf *** '
  545. C call ecmail(mff2)
  546. C write(6,*) '*********************** '
  547. C
  548. 1901 CONTINUE
  549. SEGSUP MLENTI,MLENT1,MLENT2
  550. 1001 FORMAT(20(1X,I5))
  551. END
  552.  
  553.  
  554.  
  555.  
  556.  

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