Télécharger yfpu.eso

Retour à la liste

Numérotation des lignes :

yfpu
  1. C YFPU SOURCE GOUNAND 25/11/12 21:15:48 12399
  2. SUBROUTINE YFPU
  3. IMPLICIT INTEGER(I-N)
  4. IMPLICIT REAL*8 (A-H,O-Z)
  5. C***********************************************************************
  6. C
  7. C SYNTAXE :
  8. C
  9. C FPU NU UET YP <,VPAROI>
  10. C
  11. C 1------2
  12. C (R1,AL1) LEF FLUIDE NOEUDS 1 2
  13. C
  14. C
  15. C ANU VISCOSITE CINEMATIQUE
  16. C UET U*
  17. C YP DISTANCE A LA PAROI
  18. C VPAROI VITESSE DE LA PAROI (PAR DEFAUT 0.)
  19. C
  20. C CAS TRIDIMENSIONNEL
  21. C 4 ________ 3
  22. C / FLUIDE /
  23. C 1 /________/2
  24. C
  25. C
  26. C***********************************************************************
  27.  
  28. -INC CCVQUA4
  29.  
  30. -INC PPARAM
  31. -INC CCOPTIO
  32. -INC CCGEOME
  33. -INC SMCOORD
  34. -INC SIZFFB
  35. POINTEUR IZF1.IZFFM,IZH2.IZHR
  36. -INC SMLREEL
  37. POINTEUR MLREE4.MLREEL
  38. -INC SMLENTI
  39. POINTEUR IPADS.MLENTI,IPADT.MLENTI
  40. -INC SMELEME
  41. POINTEUR MELEMS.MELEME,MELEKE.MELEME,MELEMX.MELEME,MLEMST.MELEME
  42. -INC SMCHPOI
  43. POINTEUR IZD.MPOVAL,IZDS.MPOVAL,IZDK.MPOVAL,IZDE.MPOVAL
  44. POINTEUR IZG1.MCHPOI, IZGG1.MPOVAL
  45. POINTEUR IZG2.MCHPOI, IZGG2.MPOVAL
  46. POINTEUR IZG3.MCHPOI, IZGG3.MPOVAL
  47. POINTEUR IZGV.MCHPOI, IZGGV.MPOVAL
  48. POINTEUR IZTU1.MPOVAL
  49. POINTEUR MUE.MCHPOI,MZUE.MPOVAL
  50. POINTEUR MYP.MCHPOI,MZYP.MPOVAL
  51. POINTEUR MZNU.MPOVAL
  52. POINTEUR MZRO.MPOVAL,MZMU.MPOVAL
  53. POINTEUR IZVOL.MPOVAL
  54. POINTEUR MNT.MCHPOI,MZNT.MPOVAL
  55.  
  56. -INC SMLMOTS
  57. POINTEUR LINCO.MLMOTS
  58. CHARACTER*8 NOMZ,NOMI,TYPE,TYPC,NOM0
  59. CHARACTER*(LOCOMP) NOM4(5)
  60. LOGICAL LOGI
  61. PARAMETER (NTB=1)
  62. CHARACTER*8 LTAB(NTB)
  63. DIMENSION KTAB(NTB),IXV(3),AJ(270),XYZ(90)
  64. DATA LTAB/'KIZX '/
  65. C*****************************************************************************
  66. CFPU
  67. segact mcoord
  68. *pv ca le fait mieux en initialisant ikel
  69. *pv si on ne le fait pas et que par hasard il vaut 1
  70. *pv les resultats ne sont pas ceux attendus
  71. ikel=0
  72. c write(6,*)' debut FPU '
  73. izdk=0
  74. izde=0
  75. CALL LITABS(LTAB,KTAB,NTB,1,IRET)
  76. IF (IERR.NE.0) RETURN
  77. MTABX=KTAB(1)
  78. C
  79. C- Récupération de la table EQEX (pointeur MTAB1)
  80. C
  81. CALL LEKTAB(MTABX,'EQEX',MTAB1)
  82. IF(MTAB1.EQ.0)THEN
  83. C Indice %m1:8 : Indice %m9:16 non trouvé dans la table %m17:24
  84. MOTERR( 1: 8) = ' EQEX '
  85. MOTERR( 9:16) = ' EQEX '
  86. MOTERR(17:24) = ' KIZX '
  87. CALL ERREUR(786)
  88. RETURN
  89. ENDIF
  90. CALL ACME(MTAB1,'NAVISTOK',NASTOK)
  91. IF(NASTOK.EQ.0)THEN
  92. CALL ZFPU(MTABX,MTAB1)
  93. RETURN
  94. ENDIF
  95. C
  96. C- Récupération de la table INCO (pointeur KINC)
  97. C
  98. CALL LEKTAB(MTAB1,'INCO',KINC)
  99. IF(KINC.EQ.0)THEN
  100. C Indice %m1:8 : Indice %m9:16 non trouvé dans la table %m17:24
  101. MOTERR( 1: 8) = ' INCO '
  102. MOTERR( 9:16) = ' INCO '
  103. MOTERR(17:24) = ' EQEX '
  104. CALL ERREUR(786)
  105. RETURN
  106. ENDIF
  107.  
  108. C*****************************************************************************
  109. C OPTIONS
  110. C KIMPL = 0 -> EXPL 1 -> IMPL 2 -> SEMI
  111. C KFORM = 0 -> SI 1 -> EF 2 -> VF 3 -> EFMC
  112. C IDCEN = 0-> rien 1-> CENTREE 2-> SUPGDC 3-> SUPG 4-> TVISQUEU 5-> CNG
  113.  
  114. IKOMP=0
  115. IAXI=0
  116. IF(IFOMOD.EQ.0)IAXI=2
  117. C
  118. C- Récupération de la table des options KOPT (pointeur KOPTI)
  119. C
  120. CALL LEKTAB(MTABX,'KOPT',KOPTI)
  121. IF (KOPTI.EQ.0) THEN
  122. C Indice %m1:8 : Indice %m9:16 non trouvé dans la table %m17:24
  123. MOTERR( 1: 8) = ' KOPT '
  124. MOTERR( 9:16) = ' KOPT '
  125. MOTERR(17:24) = ' KIZX '
  126. CALL ERREUR(786)
  127. RETURN
  128. ENDIF
  129.  
  130. C write(6,*)' Avant les options '
  131. TYPE=' '
  132. CALL ACMO(KOPTI,'PRECAU',TYPE,IENT)
  133. IF(TYPE.EQ.'ENTIER')CALL ACME(KOPTI,'PRECAU',IPRE)
  134. TYPE=' '
  135. CALL ACMO(KOPTI,'IKOMP',TYPE,IENT)
  136. IF(TYPE.EQ.'ENTIER')CALL ACME(KOPTI,'IKOMP',IKOMP)
  137.  
  138. CALL ACME(KOPTI,'KIMPL',KIMPL)
  139. CALL ACME(KOPTI,'KFORM',KFORM)
  140.  
  141. IF(KFORM.NE.0.AND.KFORM.NE.1)THEN
  142. C Option %m1:8 incompatible avec les données
  143. MOTERR( 1: 8) = 'EF/EFM1 '
  144. CALL ERREUR(803)
  145. RETURN
  146. ENDIF
  147.  
  148. C*****************************************************************************
  149. C
  150. C- Récupération de la table DOMAINE associée au domaine local
  151. C
  152. CALL ACMM(MTABX,'NOMZONE',NOMZ)
  153. TYPE=' '
  154. CALL ACMO(MTABX,'DOMZ',TYPE,MMDZ)
  155. IF(TYPE.NE.'MMODEL')THEN
  156. C Indice %m1:8 : Indice %m9:16 non trouvé dans la table %m17:24
  157. MOTERR( 1: 8) = ' DOMZ '
  158. MOTERR( 9:16) = ' DOMZ '
  159. MOTERR(17:24) = ' KIZX '
  160. CALL ERREUR(786)
  161. RETURN
  162. ENDIF
  163.  
  164. C E/ MMODEL : Pointeur de la table contenant l'information cherchée
  165. C /S IPOINT : Pointeur sur la table DOMAINE
  166. C /S INEFMD : Type formulation INEFMD=1 LINE,=2 MACRO,=3 QUADRATIQUE
  167. C INEFMD=4 LINB
  168.  
  169. CALL LEKMOD(MMDZ,MTABZ,INEFMD)
  170.  
  171. CALL LEKTAB(MTABZ,'SOMMET',MELEMS)
  172. CALL LEKTAB(MTABZ,'MAILLAGE',MELEME)
  173. CALL LEKTAB(MTABZ,'CENTRE',MELEMC)
  174. CALL LEKTAB(MTABZ,'XXVOLUM',MCHPOI)
  175. IF (IERR.NE.0) RETURN
  176.  
  177. SEGACT MELEME
  178. CALL LICHT(MCHPOI,IZVOL,TYPC,IGEOM)
  179. IF (IERR.NE.0) RETURN
  180. C***
  181.  
  182. TYPE='LISTMOTS'
  183. CALL ACMO(MTABX,'LISTINCO',TYPE,LINCO)
  184. SEGACT LINCO
  185.  
  186. CALL ACME(MTABX,'IARG',IARG)
  187. IKOMP=0
  188.  
  189. IF (KFORM.EQ.0.AND.IARG.NE.3)THEN
  190. write(6,*)' FPU : nb d arguments incorrect :',IARG
  191. GO TO 90
  192. ENDIF
  193. IF (KFORM.EQ.1.AND.IARG.NE.5.AND.IARG.NE.6)THEN
  194. write(6,*)' FPU : nb d arguments incorrect :',IARG
  195. GO TO 90
  196. ENDIF
  197. IKRS=0
  198. IKR=1
  199. N=1
  200. NC=1
  201. SEGINI MZRO
  202. MZRO.VPOCHA(1,1)=1.D0
  203.  
  204.  
  205. C--Cas incompressible
  206. IF(IARG.EQ.3)THEN
  207. IF(IKOMP.EQ.0)THEN
  208. C 1er coefficient : nu
  209. IXV(1)=0
  210. IXV(2)=1
  211. IXV(3)=0
  212. IRET=0
  213. CALL LEKCOF('Opérateur FPU :',
  214. & MTABX,KINC,1,IXV,MNU,MZNU,NPT1,NC1,IKM,IRET)
  215. IF(IRET.EQ.0)RETURN
  216.  
  217. C 2ème coefficient : uet
  218. IXV(1)=MELEMC
  219. IF(KFORM.EQ.1)IXV(1)=MELEMS
  220. IXV(2)=0
  221. IXV(3)=0
  222. IRET=1
  223. CALL LEKCOF('Opérateur FPU :',
  224. & MTABX,KINC,2,IXV,MUE,MZUE,NPT2,NC2,IK2,IRET)
  225. IF(IRET.EQ.0)RETURN
  226. SEGACT MZUE*MOD
  227.  
  228. C 3ème coefficient : yp
  229. IXV(1)=0
  230. IXV(2)=1
  231. IXV(3)=0
  232. IRET=0
  233. CALL LEKCOF('Opérateur FPU :',
  234. & MTABX,KINC,3,IXV,MYP,MZYP,NPT3,NC3,IK3,IRET)
  235. IF(IRET.EQ.0)RETURN
  236. ENDIF
  237.  
  238.  
  239. C--Cas compressible
  240. ELSEIF(IKOMP.EQ.1)THEN
  241. C 1er coefficient : mu
  242. IXV(1)=MELEMC
  243. IXV(2)=1
  244. IXV(3)=0
  245. IRET=0
  246. CALL LEKCOF('Opérateur FPU :',
  247. & MTABX,KINC,1,IXV,MNU,MZNU,NPT1,NC1,IKM,IRET)
  248. IF(IRET.EQ.0)RETURN
  249.  
  250. C 2ème coefficient : uet
  251. IXV(1)=MELEMC
  252. IXV(2)=0
  253. IXV(3)=0
  254. IRET=0
  255. CALL LEKCOF('Opérateur FPU :',
  256. & MTABX,KINC,2,IXV,MUE,MZUE,NPT2,NC2,IK2,IRET)
  257. IF(IRET.EQ.0)RETURN
  258. SEGACT MZUE*MOD
  259.  
  260. ENDIF
  261.  
  262. CALL KRIPAD(MELEMS,IPADS)
  263. NPTS=MELEMS.NUM(/2)
  264.  
  265. C*****************************************************************************
  266.  
  267. C VERIFICATIONS SUR LES INCONNUES
  268. NBINC=LINCO.MOTS(/2)
  269. IF(NBINC.NE.1.AND.NBINC.NE.3)THEN
  270. WRITE(6,*)'Nombre d''inconnues incorrect : ',NBINC,' On attend 3'
  271. WRITE(6,*)' On attend 1 ou 3'
  272. C Indice %m1:8 : nombre d'arguments incorrect
  273. MOTERR(1:8) = 'INCO '
  274. CALL ERREUR(804)
  275. RETURN
  276. ENDIF
  277.  
  278. C --> 1 ere Inconnue
  279.  
  280. NOMI=LINCO.MOTS(1)
  281. DO 15 I=1,IDIM
  282. WRITE(NOM4(I),FMT='(I1,A3)')I,NOMI(1:3)
  283. 15 CONTINUE
  284.  
  285. TYPE=' '
  286. CALL ACMO(KINC,NOMI,TYPE,MCHPOI)
  287. IF(TYPE.NE.'CHPOINT ')THEN
  288. WRITE(6,*)' L objet CHPOINT ',NOMI,' n existe pas dans la table'
  289. RETURN
  290. ELSE
  291. CALL LICHT(MCHPOI,IZTU1,TYPC,IGEOM0)
  292. ENDIF
  293. CALL KRIPAD(IGEOM0,MLENTI)
  294.  
  295.  
  296. C._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._
  297. C--Cas Complet: ro un mu uet yp
  298. IF((IARG.EQ.5.OR.IARG.EQ.6).AND.KFORM.EQ.1)THEN
  299.  
  300. C 1er coefficient : ro
  301. IKRS=1
  302. IXV(1)=IGEOM0
  303. IXV(2)=1
  304. IXV(3)=0
  305. IRET=0
  306. CALL LEKCOF('Opérateur FPU :',
  307. & MTABX,KINC,1,IXV,MRO,MZRO,NPT1,NC1,IKR,IRET)
  308. IF(IRET.EQ.0)RETURN
  309.  
  310. C 2ème coefficient : un
  311. IXV(1)=-IGEOM0
  312. IXV(2)=0
  313. IXV(3)=0
  314. IRET=1
  315. CALL LEKCOF('Opérateur FPU :',
  316. & MTABX,KINC,2,IXV,MUE,MZUE,NPT2,NC2,IKU,IRET)
  317. IF(IRET.EQ.0)RETURN
  318. SEGACT MZUE*MOD
  319.  
  320. C 3ème coefficient : mu
  321. IXV(1)=IGEOM0
  322. IXV(2)=1
  323. IXV(3)=0
  324. IRET=0
  325. CALL LEKCOF('Opérateur FPU :',
  326. & MTABX,KINC,3,IXV,MMU,MZMU,NPT3,NC3,IKM,IRET)
  327. IF(IRET.EQ.0)RETURN
  328.  
  329. C 4ème coefficient : uet
  330. IXV(1)=MELEMC
  331. IF(KFORM.EQ.1)IXV(1)=MELEMS
  332. IXV(2)=0
  333. IXV(3)=0
  334. IRET=1
  335.  
  336. CALL LEKCOF('Opérateur FPU :',
  337. & MTABX,KINC,4,IXV,MUE,MZUE,NPT2,NC2,IK2,IRET)
  338. IF(IRET.EQ.0)RETURN
  339. SEGACT MZUE*MOD
  340.  
  341. TYPE=' '
  342. CALL ACMO(MTABX,'ARG5',TYPE,MDTOT)
  343.  
  344. c#######################################################################
  345. c################# IKEL = 1 => Syntaxe II ##############################
  346. IF(TYPE.EQ.'MMODEL')THEN
  347. IKEL=1
  348.  
  349. TYPE=' '
  350. CALL ACMO(MTABX,'PREFPU',TYPE,MTABP)
  351. IF(TYPE.NE.'TABLE')THEN
  352. KPREFPU=0
  353. write(6,*)'Operateur FPU : On Preconditionne '
  354. CALL CRTABL(MTABP)
  355. CALL ECMO(MTABX,'PREFPU','TABLE',MTABP)
  356. ELSE
  357. KPREFPU=1
  358. ENDIF
  359.  
  360. C 6ème coefficient : NUT
  361. IXV(1)=IGEOM0
  362. IXV(2)=0
  363. IXV(3)=0
  364. IRET=0
  365. CALL LEKCOF('Opérateur FPU :',
  366. & MTABX,KINC,6,IXV,MNT,MZNT,NPT3,NC3,IK3,IRET)
  367. IF(IRET.EQ.0)RETURN
  368. C On calcule le Gradient de U
  369.  
  370. * IGEOM0 Support géomtrique domaine complet
  371. * MDTOT modèle pour le maillage complet
  372. * MTABT table domaine en résultant
  373. * MTABZ table domaine de la zone frontière
  374.  
  375. CALL LEKMOD(MDTOT,MTABT,INEFMDT)
  376. CALL LEKTAB(MTABT,'MAILLAGE',MELEMT)
  377. CALL LEKTAB(MTABT,'SOMMET' ,MLEMST)
  378. CALL LEKTAB(MTABZ,'SOMMET' ,MELEMS)
  379.  
  380. C._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._.
  381. c on extrait les élements s'appuyant largement sur la frontière
  382. c -> MELEMX
  383. IF(KPREFPU.EQ.0)THEN
  384.  
  385. SEGACT MUE,MZUE
  386. NSOUPO=MUE.IPCHP(/1)
  387. IF(NSOUPO.GT.1)THEN
  388. C Option %m1:8 incompatible avec les données
  389. MOTERR( 1: 8) = 'NSOUPO>1'
  390. CALL ERREUR(803)
  391. RETURN
  392. ENDIF
  393. NAT=MUE.JATTRI(/1)
  394. N =MZUE.VPOCHA(/1)
  395. NC=MZUE.VPOCHA(/2)
  396. SEGINI MYP,MSOUPO,MZYP
  397. DO 651 I=1,NAT
  398. MYP.JATTRI(I)=MUE.JATTRI(I)
  399. 651 CONTINUE
  400. SEGINI MSOUPO
  401. MYP.IPCHP(1)=MSOUPO
  402. MSOUP1=MUE.IPCHP(1)
  403. SEGACT MSOUP1
  404. DO 652 I=1,NC
  405. NOCOMP(I)=MSOUP1.NOCOMP(I)
  406. NOHARM(I)=MSOUP1.NOHARM(I)
  407. 652 CONTINUE
  408. IGEOC =MSOUP1.IGEOC
  409. IPOVAL=MZYP
  410.  
  411. CALL ECROBJ('MAILLAGE',MELEME)
  412. CALL ECRCHA('POI1')
  413. CALL PRCHAN
  414. CALL ECRCHA('LARGEMENT')
  415. CALL ECRCHA('APPUYE')
  416. CALL ECROBJ('MAILLAGE',MELEMT)
  417. CALL PREXTR
  418. CALL LIROBJ('MAILLAGE',MELEMX,1,IRET)
  419. CALL ECROBJ('MAILLAGE',MELEMX)
  420. CALL NBNO
  421. CALL LIRENT(NPTA,1,IRET)
  422.  
  423. call ecmo(mtabx,'MYP' ,'CHPOINT' ,MYP )
  424. call ecmo(mtabp,'MELEMX','MAILLAGE',MELEMX)
  425. call ecme(mtabp,'NPTA',npta)
  426. ELSE
  427. type=' '
  428. call acmo(mtabx,'MYP',TYPE,MYP)
  429. SEGACT MYP
  430. MSOUPO=MYP.IPCHP(1)
  431. SEGACT MSOUPO
  432. MZYP=MSOUPO.IPOVAL
  433. SEGACT MZYP
  434. type=' '
  435. call acmo(mtabp,'MELEMX',TYPE,MELEMX)
  436. call acme(mtabp,'NPTA',npta)
  437. ENDIF
  438. c -> MELEMX
  439. c on extrait les elements s'appuyant largement sur la frontiere
  440. C._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._.
  441.  
  442. c write(6,*)' FPU : NBSOUS=',NBSOUS
  443. c CALL ECROBJ('MAILLAGE',MELEMT)
  444. c CALL PRTRAC
  445. c CALL LIROBJ('MAILLAGE',MELEMT,1,IRET)
  446. c CALL ECROBJ('MAILLAGE',MELEMX)
  447. c CALL ECROBJ('MAILLAGE',MELEMS)
  448. c CALL PRFUSE
  449. c CALL PRTRAC
  450. c CALL LIROBJ('MAILLAGE',MELEMX,1,IRET)
  451.  
  452. CALL KRIPAD(MLEMST,IPADT)
  453. SEGACT MLEMST
  454. NPTT=MLEMST.NUM(/2)
  455. CALL KRIPAD(MELEMX,MLENT2)
  456. SEGACT MELEMS
  457. CALL KRIPAD(MELEMS,IPADS)
  458.  
  459. c nls=MELEMS.NUM(/2)
  460. c write(6,*)'MELEMS='
  461. c write(6,1001)(MELEMS.NUM(1,ii),ii=1,nls)
  462.  
  463. c write(6,*)' I P A D S '
  464. c npds=ipads.lect(/1)
  465. c write(6,1001)(ipads.lect(ii),ii=1,npds)
  466.  
  467. NC=IZTU1.VPOCHA(/2)
  468. NPTI=IZTU1.VPOCHA(/1)
  469.  
  470. SEGACT MELEMX
  471. NBSOUS=MELEMX.LISOUS(/1)
  472. IF(NBSOUS.EQ.0)NBSOUS=1
  473. NUTOEL=0
  474.  
  475. IES=IDIM
  476.  
  477. SEGACT,MCOORD
  478. DO 19 L=1,NBSOUS
  479. IPT1=MELEMX
  480. IF(NBSOUS.NE.1)IPT1=MELEMX.LISOUS(L)
  481. SEGACT IPT1
  482.  
  483. NP =IPT1.NUM(/1)
  484. NBEL=IPT1.NUM(/2)
  485.  
  486. IF(KPREFPU.EQ.0)THEN
  487. JG=NBEL*NP
  488. SEGINI MLREE1,MLREE3
  489. JG=NBEL*NP*IDIM
  490. SEGINI MLREE2
  491. CALL ECMO(MTABP,'YP','LISTREEL',MLREE1)
  492. CALL ECMO(MTABP,'AN','LISTREEL',MLREE2)
  493. CALL ECMO(MTABP,'MUEF','LISTREEL',MLREE3)
  494. ELSE
  495. TYPE=' '
  496. CALL ACMO(MTABP,'YP',TYPE,MLREE1)
  497. TYPE=' '
  498. CALL ACMO(MTABP,'AN',TYPE,MLREE2)
  499. TYPE=' '
  500. CALL ACMO(MTABP,'MUEF',TYPE,MLREE3)
  501. SEGACT MLREE1,MLREE2,MLREE3
  502. ENDIF
  503.  
  504. CALL LEKTAB(MTABZ,'XXDIAGSI',MCHPOI)
  505. CALL LICHT(MCHPOI,IZD,TYPC,IGEOM)
  506. N=IZD.VPOCHA(/1)
  507. NC=IZD.VPOCHA(/2)
  508. SEGINI IZDS
  509.  
  510. IZGG2=IZDS
  511. IF(NBINC.EQ.3)THEN
  512. c write(6,*)' On met les conditions limites sur K et epsilon'
  513. NOM4(4)=LINCO.MOTS(2)
  514. NOM4(5)=LINCO.MOTS(3)
  515. TYPE='SOMMET'
  516. NC=2
  517. CALL KRCHPT(TYPE,MELEMS,NC,1,IZG2,NOM4(4))
  518. c CALL KRCHPT(TYPE,MELEMX,NC,2,IZG2,NOM4(4))
  519. CALL LICHT(IZG2,IZGG2,TYPC,IGEOM0)
  520. CALL INITD(IZGG2.VPOCHA,(NC*NPTS),1.D-5)
  521. ENDIF
  522.  
  523. CALL FPTAU(IDIM,NP,NBEL,IPT1.NUM,IPADT.LECT,XCOOR,
  524. & IZTU1.VPOCHA,NPTI,NC,IPADS.LECT,NPTS,
  525. & MZNT.VPOCHA,MLREE3.PROG,MLREE1.PROG,MLREE2.PROG,MZRO.VPOCHA,IKR,
  526. & MZMU.VPOCHA,IKM,MZUE.VPOCHA,MZYP.VPOCHA,IPT1.ITYPEL,
  527. & IZGG2.VPOCHA,NBINC)
  528.  
  529. 19 CONTINUE
  530. SEGDES,MCOORD
  531.  
  532. c CALL ECROBJ('MAILLAGE',MELEMX)
  533. c CALL PRTRAC
  534. c CALL LIROBJ('MAILLAGE',MELEMX,1,IRET)
  535. NC=IZTU1.VPOCHA(/2)
  536. NPTI=IZTU1.VPOCHA(/1)
  537. TYPE='SOMMET'
  538. CALL KRCHPT(TYPE,MELEMS,NC,2,IZG1,NOM4)
  539. CALL LICHT(IZG1,IZGG1,TYPC,IGEOM)
  540. CALL ECMO(KINC,'FFF','CHPOINT',IZG1)
  541.  
  542. C --> Vitesse seulement on l'impose a 0.
  543.  
  544. TYPE='SOMMET'
  545. NC=IDIM
  546. CALL KRCHPT(TYPE,MELEMS,NC,1,IZGV,NOM4(1))
  547. CALL LICHT(IZGV,IZGGV,TYPC,IGEOM0)
  548.  
  549. TYPE=' '
  550. CALL ACMO(MTAB1,'CLIM',TYPE,KCLIM)
  551. c write(6,*)' Y F P U :: KCLIM = ',KCLIM
  552.  
  553. IF(KCLIM.EQ.0)THEN
  554. CALL ECMO(MTAB1,'CLIM','CHPOINT',IZGV)
  555.  
  556. ELSE
  557. c On remet à 0 les conditions limites précédentes
  558. MCHPO4=KCLIM
  559. SEGACT MCHPO4
  560. NSP1=MCHPO4.IPCHP(/1)
  561.  
  562. DO 882 L=1,NSP1
  563. MSOUPO=MCHPO4.IPCHP(L)
  564. SEGACT MSOUPO
  565. NC=NOCOMP(/2)
  566. MELEKE=IGEOC
  567. MPOVA4=IPOVAL
  568. SEGACT MELEKE,MPOVA4*MOD
  569. NBPKE=MELEKE.NUM(/2)
  570. DO 883 N=1,NC
  571. IF(NOCOMP(N).NE.NOM4(1).AND.NOCOMP(N).NE.NOM4(2)
  572. & .AND.NOCOMP(N).NE.NOM4(3))GO TO 883
  573. DO 884 I=1,NBPKE
  574. NKE=IPADS.LECT(MELEKE.NUM(1,I))
  575. IF(NKE.NE.0)MPOVA4.VPOCHA(I,N)=0.D0
  576. 884 CONTINUE
  577. 883 CONTINUE
  578. SEGDES MSOUPO,MPOVA4,MELEKE
  579. 882 CONTINUE
  580. c write(6,*)' On remet les CL sur UN CLIM=',MCHPOI
  581.  
  582. CALL ADCHPO(KCLIM,IZGV,MCHPOI,1D0,1D0)
  583. CALL ECMO(MTAB1,'CLIM','CHPOINT',MCHPOI)
  584.  
  585. ENDIF
  586.  
  587. C --> FIN Vitesse seulement on l'impose a 0.
  588.  
  589. IZGG2=IZGG1
  590. IF(NBINC.EQ.3)THEN
  591. C --> On impose K et Epsilon
  592. c On remet à 0 la condition limite précédente pour NOM4(4) et NOM4(5)
  593. TYPE=' '
  594. CALL ACMO(MTAB1,'CLIM',TYPE,KCLIM)
  595.  
  596. MCHPO4=KCLIM
  597. SEGACT MCHPO4
  598. NSP1=MCHPO4.IPCHP(/1)
  599.  
  600. DO 982 L=1,NSP1
  601. MSOUPO=MCHPO4.IPCHP(L)
  602. SEGACT MSOUPO
  603. NC=NOCOMP(/2)
  604. MELEKE=IGEOC
  605. MPOVA4=IPOVAL
  606. SEGACT MELEKE,MPOVA4*MOD
  607. NBPKE=MELEKE.NUM(/2)
  608. DO 983 N=1,NC
  609. IF(NOCOMP(N).NE.NOM4(4).AND.NOCOMP(N).NE.NOM4(5))GO TO 983
  610. DO 984 I=1,NBPKE
  611. NKE=IPADS.LECT(MELEKE.NUM(1,I))
  612. IF(NKE.NE.0)MPOVA4.VPOCHA(I,N)=0.D0
  613. 984 CONTINUE
  614. 983 CONTINUE
  615. SEGDES MSOUPO,MPOVA4,MELEKE
  616. 982 CONTINUE
  617.  
  618. CALL ADCHPO(KCLIM,IZG2,MCHPOI,1D0,1D0)
  619. CALL ECMO(MTAB1,'CLIM','CHPOINT',MCHPOI)
  620. c write(6,*)' On remet les CL sur KN et EN CLIM=',MCHPOI
  621.  
  622. c CALL ECROBJ('CHPOINT',MCHPOI)
  623. c CALL PRLIST
  624. ENDIF
  625.  
  626. SEGSUP IZDS
  627. IF(IKRS.EQ.0)SEGSUP MZRO
  628. SEGDES IZTU1
  629. SEGDES IZG1,IZGG1
  630. IF(NBINC.EQ.3)SEGDES IZG2,IZGG2
  631. SEGDES IZVOL
  632. SEGDES LINCO
  633. SEGSUP MLENTI,IPADS
  634.  
  635. c On crée un MATRIK vide
  636. NRIGE=7
  637. NKID =9
  638. NKMT =7
  639. NMATRI=0
  640. SEGINI MATRIK
  641.  
  642. CALL ECROBJ('MATRIK',MATRIK)
  643. CALL ECROBJ('CHPOINT',IZG1)
  644.  
  645. c write(6,*)' Fin FPU Syntaxe II'
  646. RETURN
  647. c################# IKEL = 1 => Syntaxe II ## FIN #######################
  648. c#######################################################################
  649. ELSE
  650.  
  651. IKEL=0
  652. C 5ème coefficient : yp
  653. IXV(1)=0
  654. IXV(2)=1
  655. IXV(3)=0
  656. IRET=0
  657. CALL LEKCOF('Opérateur FPU :',
  658. & MTABX,KINC,5,IXV,MYP,MZYP,NPT3,NC3,IK3,IRET)
  659. IF(IRET.EQ.0)RETURN
  660.  
  661. ENDIF
  662. ENDIF
  663.  
  664. C._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._
  665.  
  666. NC=IZTU1.VPOCHA(/2)
  667. NPTI=IZTU1.VPOCHA(/1)
  668. TYPE='SOMMET'
  669. CALL KRCHPT(TYPE,MELEMS,NC,2,IZG1,NOM4)
  670. CALL LICHT(IZG1,IZGG1,TYPC,IGEOM)
  671. CALL ECMO(KINC,'FFF','CHPOINT',IZG1)
  672.  
  673. IZGG2=IZGG1
  674. IF(NBINC.GT.1)THEN
  675. C --> 2 eme Inconnue
  676.  
  677. NOM4(4)=LINCO.MOTS(2)
  678. NOM4(5)=LINCO.MOTS(3)
  679. TYPE='SOMMET'
  680. NC=2
  681. CALL KRCHPT(TYPE,MELEMS,NC,1,IZG2,NOM4(4))
  682. CALL LICHT(IZG2,IZGG2,TYPC,IGEOM0)
  683.  
  684. TYPE=' '
  685. CALL ACMO(MTAB1,'CLIM',TYPE,KCLIM)
  686. IF(KCLIM.NE.0)THEN
  687.  
  688. MCHPO4=KCLIM
  689. SEGACT MCHPO4
  690. NSP1=MCHPO4.IPCHP(/1)
  691.  
  692. DO 782 L=1,NSP1
  693. MSOUPO=MCHPO4.IPCHP(L)
  694. SEGACT MSOUPO
  695. NC=NOCOMP(/2)
  696. MELEKE=IGEOC
  697. MPOVA4=IPOVAL
  698. SEGACT MELEKE,MPOVA4*MOD
  699. NBPKE=MELEKE.NUM(/2)
  700. DO 783 N=1,NC
  701. IF(NOCOMP(N).NE.NOM4(4).AND.NOCOMP(N).NE.NOM4(5))GO TO 783
  702. DO 784 I=1,NBPKE
  703. NKE=IPADS.LECT(MELEKE.NUM(1,I))
  704. IF(NKE.NE.0)MPOVA4.VPOCHA(I,N)=0.D0
  705. 784 CONTINUE
  706. 783 CONTINUE
  707. SEGDES MSOUPO,MPOVA4,MELEKE
  708. 782 CONTINUE
  709. ENDIF
  710. SEGDES MCHPO4
  711. ENDIF
  712.  
  713. CALL LEKTAB(MTABZ,'XXDIAGSI',MCHPOI)
  714. CALL LICHT(MCHPOI,IZD,TYPC,IGEOM)
  715. N=IZD.VPOCHA(/1)
  716. NC=IZD.VPOCHA(/2)
  717. SEGINI IZDS
  718. IF(KFORM.EQ.1.AND.NBINC.EQ.3)THEN
  719. SEGINI IZDE,IZDK
  720. ENDIF
  721.  
  722.  
  723. SEGACT MELEME
  724. NBSOUS=LISOUS(/1)
  725. IF(NBSOUS.EQ.0)NBSOUS=1
  726. NUTOEL=0
  727.  
  728. IES=IDIM
  729.  
  730. DO 1 L=1,NBSOUS
  731. IPT1=MELEME
  732. IF(NBSOUS.NE.1)IPT1=LISOUS(L)
  733. SEGACT IPT1
  734.  
  735. NOM0=NOMS(IPT1.ITYPEL)//' '
  736. CALL KALPBG(NOM0,'FONFORM ',IZFFM)
  737. SEGACT IZFFM*MOD
  738. IZHR=KZHR(1)
  739. SEGACT IZHR*MOD
  740. IZH2=KZHR(2)
  741. IZF1=KTP(1)
  742. NES=GR(/1)
  743. NPG=GR(/3)
  744. NP =IPT1.NUM(/1)
  745. NBEL=IPT1.NUM(/2)
  746.  
  747.  
  748.  
  749. C SUBROUTINE XCVFPU(NEL,K0,NP,IES,IAXI,IPADL,
  750. C & LEF,XYZ, ----> IPT1,COOR
  751. C & VOLF, ----> IZVOL.T,
  752. C & UN,TK,TE, ----> IZTU1.T,IZTU2.T,IZTU3.T,
  753. C & F, ----> IZG1,
  754. C & DK,DE, ----> IZD2,IZD3
  755. C & ANU,IKC,UET,YP, ----> IZTG1.T,IKM,IZTG2.T,IZTG3.T,
  756. C & VPAROI,IKV, IZTG4.T,IK4,
  757. C & PORO,NPR,IPOR) ----> IZPORO,NPOR,IOP7
  758. if(izde.eq.0) izde=izds
  759. if(izdk.eq.0) izdk=izds
  760. SEGACT,MCOORD
  761. IF(KFORM.EQ.0)THEN
  762.  
  763. CALL YCVFPU(NBEL,NUTOEL,NP,IES,IAXI,NPTI,LECT,
  764. & NPTS,IPADS.LECT,
  765. & IPT1.NUM,XCOOR,
  766. & IZVOL.VPOCHA,
  767. & IZTU1.VPOCHA,IZGG2.VPOCHA(1,1),IZGG2.VPOCHA(1,2),
  768. & IZGG1.VPOCHA,
  769. & MZNU.VPOCHA,IKM,MZUE.VPOCHA,MZYP.VPOCHA)
  770. SEGACT,MCOORD
  771.  
  772. ELSEIF(KFORM.EQ.1.AND.IKEL.EQ.0)THEN
  773.  
  774. CALL XCVFPU(FN,GR,PG,XYZ,HR,PGSQ,RPG,
  775. & NES,IDIM,NP,NPG,IAXI,AJ,NBEL,IPT1.NUM,XCOOR,
  776. & NPTI,LECT,IZTU1.VPOCHA,NPTS,IPADS.LECT,MZUE.VPOCHA,
  777. & IZGG1.VPOCHA,MZMU.VPOCHA,IKM,MZRO.VPOCHA,IKR,
  778. & MZYP.VPOCHA,IZDS.VPOCHA,IZDK.VPOCHA,IZDE.VPOCHA,NBINC)
  779.  
  780. ENDIF
  781. SEGDES,MCOORD
  782.  
  783. SEGSUP IZFFM,IZF1,IZHR,IZH2
  784. NUTOEL=NUTOEL+NBEL
  785.  
  786. 1 CONTINUE
  787.  
  788. IF(KFORM.EQ.1)THEN
  789.  
  790. IF(IKEL.EQ.0)THEN
  791. DO 124 I=1,NPTS
  792. MZUE.VPOCHA(I,1)=IZDS.VPOCHA(I,1)/IZD.VPOCHA(I,1)
  793. 124 CONTINUE
  794. ENDIF
  795.  
  796. IF(NBINC.EQ.3)THEN
  797. DO 125 I=1,NPTS
  798. IZGG2.VPOCHA(I,1)=IZDK.VPOCHA(I,1)/IZD.VPOCHA(I,1)
  799. IZGG2.VPOCHA(I,2)=IZDE.VPOCHA(I,1)/IZD.VPOCHA(I,1)
  800. 125 CONTINUE
  801. ENDIF
  802.  
  803. ENDIF
  804.  
  805. SEGSUP IZDS
  806. IF(KFORM.EQ.1.AND.NBINC.EQ.3)THEN
  807. SEGSUP IZDE,IZDK
  808. ENDIF
  809. IF(IKRS.EQ.0)SEGSUP MZRO
  810. SEGDES IZTU1
  811. SEGDES IZG1,IZGG1
  812. IF(NBINC.EQ.3)SEGDES IZG2,IZGG2
  813. SEGDES IZVOL
  814. SEGDES LINCO
  815. SEGSUP MLENTI,IPADS
  816.  
  817. NRIGE=7
  818. NKID =9
  819. NKMT =7
  820. NMATRI=0
  821. SEGINI MATRIK
  822.  
  823. IF(NBINC.GT.1)THEN
  824. IF(KCLIM.EQ.0)THEN
  825. CALL ECMO(MTAB1,'CLIM','CHPOINT',IZG2)
  826. ELSE
  827. CALL ADCHPO(KCLIM,IZG2,MCHPOI,1D0,1D0)
  828. CALL ECMO(MTAB1,'CLIM','CHPOINT',MCHPOI)
  829. ENDIF
  830. ENDIF
  831.  
  832. CALL ECROBJ('MATRIK',MATRIK)
  833. CALL ECROBJ('CHPOINT',IZG1)
  834.  
  835. c write(6,*)' Fin FPU'
  836. RETURN
  837. 90 CONTINUE
  838. WRITE(6,*)' Interuption anormale de FPU '
  839. RETURN
  840. 1001 FORMAT(20(1X,I5))
  841. 1002 FORMAT(10(1X,1PE11.4))
  842. END
  843.  
  844.  

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