Télécharger tq2cf.eso

Retour à la liste

Numérotation des lignes :

tq2cf
  1. C TQ2CF SOURCE PV 20/03/30 21:25:19 10567
  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 1782 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. 1781 CONTINUE
  344.  
  345. C ******* Mise au propre FACEL dans le cas Navier-Stokes
  346. NBNN=2
  347. NBELEM=NPTF
  348. NBSOUS=0
  349. NBREF=0
  350. SEGINI IPT2
  351. IPT2.ITYPEL=2
  352.  
  353. NBNN=3
  354. NBELEM=NPTF
  355. NBSOUS=0
  356. NBREF=0
  357. SEGINI IPT3
  358. IPT3.ITYPEL=3
  359.  
  360. I2=0
  361. I3=0
  362.  
  363. NBEL=MFD.NUM(/2)
  364. DO 1783 K=1,NBEL
  365. N1=MFD.NUM(1,K)
  366. NC=MFD.NUM(2,K)
  367. N3=MFD.NUM(3,K)
  368. IF(N1.EQ.N3)THEN
  369. I2=I2+1
  370. IPT2.NUM(1,I2)=N1
  371. IPT2.NUM(2,I2)=NC
  372. IPT2.ICOLOR(I2)=3
  373. ELSE
  374. I3=I3+1
  375. IPT3.NUM(1,I3)=N1
  376. IPT3.NUM(2,I3)=NC
  377. IPT3.NUM(3,I3)=N3
  378. IPT3.ICOLOR(I3)=3
  379. ENDIF
  380. 1783 CONTINUE
  381.  
  382. NBNN=2
  383. NBELEM=I2
  384. NBSOUS=0
  385. NBREF=0
  386. SEGADJ IPT2
  387.  
  388. NBNN=3
  389. NBELEM=I3
  390. NBSOUS=0
  391. NBREF=0
  392. SEGADJ IPT3
  393.  
  394. NBNN=0
  395. NBELEM=0
  396. NBSOUS=2
  397. NBREF=0
  398. SEGINI MFD2
  399. MFD2.LISOUS(1)=IPT3
  400. MFD2.LISOUS(2)=IPT2
  401.  
  402. C ****** Création FACEP
  403. CALL INITI(INPP,8,0)
  404. NS=0
  405. DO 1780 L=1,8
  406. NBELEM=INPF(L)
  407. INPF(L)=0
  408. IF(NBELEM.EQ.0)GO TO 1780
  409. NS=NS+1
  410. NBNN=(L+1)/2+1
  411. NBSOUS=0
  412. NBREF=0
  413. SEGINI IPT3
  414. INPP(L)=IPT3
  415. IPT3.ITYPEL=INPT2(L)
  416.  
  417. 1780 CONTINUE
  418.  
  419. SEGACT MELEME
  420.  
  421. DO 1881 L=1,NBSOU1
  422. IPT1=MELEME
  423. IF(NBSOU1.NE.1)IPT1=LISOUS(L)
  424. SEGACT IPT1
  425. NBEL=IPT1.NUM(/2)
  426. NOM8=NOMS(IPT1.ITYPEL)//' '
  427. CALL OPTLI(IP,LTYPL,NOM8,7)
  428. NBF=KTA(IP,1)
  429. IDC3=KTA(IP,3)
  430. DO 1882 K=1,NBEL
  431. DO 1883 I=1,NBF
  432. I2=IPT1.NUM(JNF(I,IP),K)
  433. NF=LECT(I2)
  434. IF(NF.EQ.0)GO TO 1883
  435. LECT(I2)=0
  436. NPF=KNPF(I,IP)
  437. IPT3=INPP(NPF)
  438. SEGACT IPT3*MOD
  439. IPOS=INPF(NPF)+1
  440. INPF(NPF)=IPOS
  441. J3=0
  442. DO 1884 J=1,NPF,2
  443. J3=J3+1
  444. IPT3.NUM(J3,IPOS)=IPT1.NUM(INF(J,I+IDC3),K)
  445. IPT3.ICOLOR(IPOS)=5
  446. 1884 CONTINUE
  447. IPT3.NUM(J3+1,IPOS)=I2
  448. IPT3.ICOLOR(IPOS)=5
  449. 1883 CONTINUE
  450. 1882 CONTINUE
  451. 1881 CONTINUE
  452.  
  453. NBSOUS=0
  454. DO 1885 I=1,8
  455. IF(INPP(I).NE.0)NBSOUS=NBSOUS+1
  456. 1885 CONTINUE
  457.  
  458. IF(NBSOUS.EQ.1)THEN
  459. MPFD=IPT3
  460. ELSE
  461. NBREF=0
  462. NBELEM=0
  463. NBNN=0
  464. SEGINI MPFD
  465. NS=0
  466. DO 1886 I=1,8
  467. IF(INPP(I).NE.0)THEN
  468. NS=NS+1
  469. MPFD.LISOUS(NS)=INPP(I)
  470. ENDIF
  471. 1886 CONTINUE
  472. ENDIF
  473.  
  474. C ****** Création MAILFACE
  475. C !!!!! atention on reutilise INPF
  476. CALL INITI(INPP,8,0)
  477. NS=0
  478. DO 1970 L=1,8
  479. NBELEM=INPF(L)
  480. INPF(L)=0
  481. IF(NBELEM.EQ.0)GO TO 1970
  482. NS=NS+1
  483. NBNN=INPT3(L)
  484. NBSOUS=0
  485. NBREF=0
  486. SEGINI IPT3
  487. INPP(L)=IPT3
  488. IPT3.ITYPEL=INPT4(L)
  489.  
  490. 1970 CONTINUE
  491.  
  492. SEGACT MELEME
  493.  
  494. DO 1981 L=1,NBSOU1
  495. IPT1=MELEME
  496. IF(NBSOU1.NE.1)IPT1=LISOUS(L)
  497. SEGACT IPT1
  498. NBEL=IPT1.NUM(/2)
  499. NOM8=NOMS(IPT1.ITYPEL)//' '
  500. CALL OPTLI(IP,LTYPL,NOM8,7)
  501. NBF=KTA(IP,1)
  502. IDC3=KTA(IP,3)
  503. DO 1982 K=1,NBEL
  504. DO 1983 I=1,NBF
  505. I2=IPT1.NUM(JNF(I,IP),K)
  506. NF=MLENT2.LECT(I2)
  507. IF(NF.EQ.0)GO TO 1983
  508. MLENT2.LECT(I2)=0
  509. NPF=KNPF(I,IP)
  510. IPT3=INPP(NPF)
  511. SEGACT IPT3*MOD
  512. IPOS=INPF(NPF)+1
  513. INPF(NPF)=IPOS
  514. NPPF=INPT3(NPF)
  515. DO 1984 J=1,NPPF
  516. IPT3.NUM(J,IPOS)=IPT1.NUM(INF2(J,I+IDC3),K)
  517. 1984 CONTINUE
  518. IPT3.ICOLOR(IPOS)=5
  519. 1983 CONTINUE
  520. 1982 CONTINUE
  521. 1981 CONTINUE
  522.  
  523. NBSOUS=0
  524. DO 1985 I=1,8
  525. IF(INPP(I).NE.0)NBSOUS=NBSOUS+1
  526. 1985 CONTINUE
  527.  
  528. IF(NBSOUS.EQ.1)THEN
  529. MFF2=IPT3
  530. ELSE
  531. NBREF=0
  532. NBELEM=0
  533. NBNN=0
  534. SEGINI MFF2
  535. NS=0
  536. DO 1986 I=1,8
  537. IF(INPP(I).NE.0)THEN
  538. NS=NS+1
  539. MFF2.LISOUS(NS)=INPP(I)
  540. ENDIF
  541. 1986 CONTINUE
  542. ENDIF
  543. C write(6,*)' **** voici MAILFACE dans tq2cf *** '
  544. C call ecmail(mff2)
  545. C write(6,*) '*********************** '
  546. C
  547. 1901 CONTINUE
  548. SEGSUP MLENTI,MLENT1,MLENT2
  549. 1001 FORMAT(20(1X,I5))
  550. END
  551.  
  552.  
  553.  
  554.  

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