Télécharger yfpu.eso

Retour à la liste

Numérotation des lignes :

yfpu
  1. C YFPU SOURCE CB215821 23/01/25 21:15:40 11573
  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,IZG2,NOM4(4))
  518. c CALL KRCHPT(TYPE,MELEMX,NC,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,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,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.  
  581. CALL ECROBJ('CHPOINT',KCLIM)
  582. CALL ECROBJ('CHPOINT',IZGV)
  583. CALL PRFUSE
  584. CALL LIROBJ('CHPOINT',MCHPOI,1,IRET)
  585. CALL ECMO(MTAB1,'CLIM','CHPOINT',MCHPOI)
  586.  
  587. ENDIF
  588.  
  589. C --> FIN Vitesse seulement on l'impose a 0.
  590.  
  591. IZGG2=IZGG1
  592. IF(NBINC.EQ.3)THEN
  593. C --> On impose K et Epsilon
  594. c On remet à 0 la condition limite précédente pour NOM4(4) et NOM4(5)
  595. TYPE=' '
  596. CALL ACMO(MTAB1,'CLIM',TYPE,KCLIM)
  597.  
  598. MCHPO4=KCLIM
  599. SEGACT MCHPO4
  600. NSP1=MCHPO4.IPCHP(/1)
  601.  
  602. DO 982 L=1,NSP1
  603. MSOUPO=MCHPO4.IPCHP(L)
  604. SEGACT MSOUPO
  605. NC=NOCOMP(/2)
  606. MELEKE=IGEOC
  607. MPOVA4=IPOVAL
  608. SEGACT MELEKE,MPOVA4*MOD
  609. NBPKE=MELEKE.NUM(/2)
  610. DO 983 N=1,NC
  611. IF(NOCOMP(N).NE.NOM4(4).AND.NOCOMP(N).NE.NOM4(5))GO TO 983
  612. DO 984 I=1,NBPKE
  613. NKE=IPADS.LECT(MELEKE.NUM(1,I))
  614. IF(NKE.NE.0)MPOVA4.VPOCHA(I,N)=0.D0
  615. 984 CONTINUE
  616. 983 CONTINUE
  617. SEGDES MSOUPO,MPOVA4,MELEKE
  618. 982 CONTINUE
  619.  
  620. CALL ECROBJ('CHPOINT',KCLIM)
  621. CALL ECROBJ('CHPOINT',IZG2)
  622. CALL PRFUSE
  623. CALL LIROBJ('CHPOINT',MCHPOI,1,IRET)
  624. CALL ECMO(MTAB1,'CLIM','CHPOINT',MCHPOI)
  625. c write(6,*)' On remet les CL sur KN et EN CLIM=',MCHPOI
  626.  
  627. c CALL ECROBJ('CHPOINT',MCHPOI)
  628. c CALL PRLIST
  629. ENDIF
  630.  
  631. SEGSUP IZDS
  632. IF(IKRS.EQ.0)SEGSUP MZRO
  633. SEGDES IZTU1
  634. SEGDES IZG1,IZGG1
  635. IF(NBINC.EQ.3)SEGDES IZG2,IZGG2
  636. SEGDES IZVOL
  637. SEGDES LINCO
  638. SEGSUP MLENTI,IPADS
  639.  
  640. c On crée un MATRIK vide
  641. NRIGE=7
  642. NKID =9
  643. NKMT =7
  644. NMATRI=0
  645. SEGINI MATRIK
  646.  
  647. CALL ECROBJ('MATRIK',MATRIK)
  648. CALL ECROBJ('CHPOINT',IZG1)
  649.  
  650. c write(6,*)' Fin FPU Syntaxe II'
  651. RETURN
  652. c################# IKEL = 1 => Syntaxe II ## FIN #######################
  653. c#######################################################################
  654. ELSE
  655.  
  656. IKEL=0
  657. C 5ème coefficient : yp
  658. IXV(1)=0
  659. IXV(2)=1
  660. IXV(3)=0
  661. IRET=0
  662. CALL LEKCOF('Opérateur FPU :',
  663. & MTABX,KINC,5,IXV,MYP,MZYP,NPT3,NC3,IK3,IRET)
  664. IF(IRET.EQ.0)RETURN
  665.  
  666. ENDIF
  667. ENDIF
  668.  
  669. C._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._
  670.  
  671. NC=IZTU1.VPOCHA(/2)
  672. NPTI=IZTU1.VPOCHA(/1)
  673. TYPE='SOMMET'
  674. CALL KRCHPT(TYPE,MELEMS,NC,IZG1,NOM4)
  675. CALL LICHT(IZG1,IZGG1,TYPC,IGEOM)
  676. CALL ECMO(KINC,'FFF','CHPOINT',IZG1)
  677.  
  678. IZGG2=IZGG1
  679. IF(NBINC.GT.1)THEN
  680. C --> 2 eme Inconnue
  681.  
  682. NOM4(4)=LINCO.MOTS(2)
  683. NOM4(5)=LINCO.MOTS(3)
  684. TYPE='SOMMET'
  685. NC=2
  686. CALL KRCHPT(TYPE,MELEMS,NC,IZG2,NOM4(4))
  687. CALL LICHT(IZG2,IZGG2,TYPC,IGEOM0)
  688.  
  689. TYPE=' '
  690. CALL ACMO(MTAB1,'CLIM',TYPE,KCLIM)
  691. IF(KCLIM.NE.0)THEN
  692.  
  693. MCHPO4=KCLIM
  694. SEGACT MCHPO4
  695. NSP1=MCHPO4.IPCHP(/1)
  696.  
  697. DO 782 L=1,NSP1
  698. MSOUPO=MCHPO4.IPCHP(L)
  699. SEGACT MSOUPO
  700. NC=NOCOMP(/2)
  701. MELEKE=IGEOC
  702. MPOVA4=IPOVAL
  703. SEGACT MELEKE,MPOVA4*MOD
  704. NBPKE=MELEKE.NUM(/2)
  705. DO 783 N=1,NC
  706. IF(NOCOMP(N).NE.NOM4(4).AND.NOCOMP(N).NE.NOM4(5))GO TO 783
  707. DO 784 I=1,NBPKE
  708. NKE=IPADS.LECT(MELEKE.NUM(1,I))
  709. IF(NKE.NE.0)MPOVA4.VPOCHA(I,N)=0.D0
  710. 784 CONTINUE
  711. 783 CONTINUE
  712. SEGDES MSOUPO,MPOVA4,MELEKE
  713. 782 CONTINUE
  714. ENDIF
  715. SEGDES MCHPO4
  716. ENDIF
  717.  
  718. CALL LEKTAB(MTABZ,'XXDIAGSI',MCHPOI)
  719. CALL LICHT(MCHPOI,IZD,TYPC,IGEOM)
  720. N=IZD.VPOCHA(/1)
  721. NC=IZD.VPOCHA(/2)
  722. SEGINI IZDS
  723. IF(KFORM.EQ.1.AND.NBINC.EQ.3)THEN
  724. SEGINI IZDE,IZDK
  725. ENDIF
  726.  
  727.  
  728. SEGACT MELEME
  729. NBSOUS=LISOUS(/1)
  730. IF(NBSOUS.EQ.0)NBSOUS=1
  731. NUTOEL=0
  732.  
  733. IES=IDIM
  734.  
  735. DO 1 L=1,NBSOUS
  736. IPT1=MELEME
  737. IF(NBSOUS.NE.1)IPT1=LISOUS(L)
  738. SEGACT IPT1
  739.  
  740. NOM0=NOMS(IPT1.ITYPEL)//' '
  741. CALL KALPBG(NOM0,'FONFORM ',IZFFM)
  742. SEGACT IZFFM*MOD
  743. IZHR=KZHR(1)
  744. SEGACT IZHR*MOD
  745. IZH2=KZHR(2)
  746. IZF1=KTP(1)
  747. NES=GR(/1)
  748. NPG=GR(/3)
  749. NP =IPT1.NUM(/1)
  750. NBEL=IPT1.NUM(/2)
  751.  
  752.  
  753.  
  754. C SUBROUTINE XCVFPU(NEL,K0,NP,IES,IAXI,IPADL,
  755. C & LEF,XYZ, ----> IPT1,COOR
  756. C & VOLF, ----> IZVOL.T,
  757. C & UN,TK,TE, ----> IZTU1.T,IZTU2.T,IZTU3.T,
  758. C & F, ----> IZG1,
  759. C & DK,DE, ----> IZD2,IZD3
  760. C & ANU,IKC,UET,YP, ----> IZTG1.T,IKM,IZTG2.T,IZTG3.T,
  761. C & VPAROI,IKV, IZTG4.T,IK4,
  762. C & PORO,NPR,IPOR) ----> IZPORO,NPOR,IOP7
  763. if(izde.eq.0) izde=izds
  764. if(izdk.eq.0) izdk=izds
  765. SEGACT,MCOORD
  766. IF(KFORM.EQ.0)THEN
  767.  
  768. CALL YCVFPU(NBEL,NUTOEL,NP,IES,IAXI,NPTI,LECT,
  769. & NPTS,IPADS.LECT,
  770. & IPT1.NUM,XCOOR,
  771. & IZVOL.VPOCHA,
  772. & IZTU1.VPOCHA,IZGG2.VPOCHA(1,1),IZGG2.VPOCHA(1,2),
  773. & IZGG1.VPOCHA,
  774. & MZNU.VPOCHA,IKM,MZUE.VPOCHA,MZYP.VPOCHA)
  775. SEGACT,MCOORD
  776.  
  777. ELSEIF(KFORM.EQ.1.AND.IKEL.EQ.0)THEN
  778.  
  779. CALL XCVFPU(FN,GR,PG,XYZ,HR,PGSQ,RPG,
  780. & NES,IDIM,NP,NPG,IAXI,AJ,NBEL,IPT1.NUM,XCOOR,
  781. & NPTI,LECT,IZTU1.VPOCHA,NPTS,IPADS.LECT,MZUE.VPOCHA,
  782. & IZGG1.VPOCHA,MZMU.VPOCHA,IKM,MZRO.VPOCHA,IKR,
  783. & MZYP.VPOCHA,IZDS.VPOCHA,IZDK.VPOCHA,IZDE.VPOCHA,NBINC)
  784.  
  785. ENDIF
  786. SEGDES,MCOORD
  787.  
  788. SEGSUP IZFFM,IZF1,IZHR,IZH2
  789. NUTOEL=NUTOEL+NBEL
  790.  
  791. 1 CONTINUE
  792.  
  793. IF(KFORM.EQ.1)THEN
  794.  
  795. IF(IKEL.EQ.0)THEN
  796. DO 124 I=1,NPTS
  797. MZUE.VPOCHA(I,1)=IZDS.VPOCHA(I,1)/IZD.VPOCHA(I,1)
  798. 124 CONTINUE
  799. ENDIF
  800.  
  801. IF(NBINC.EQ.3)THEN
  802. DO 125 I=1,NPTS
  803. IZGG2.VPOCHA(I,1)=IZDK.VPOCHA(I,1)/IZD.VPOCHA(I,1)
  804. IZGG2.VPOCHA(I,2)=IZDE.VPOCHA(I,1)/IZD.VPOCHA(I,1)
  805. 125 CONTINUE
  806. ENDIF
  807.  
  808. ENDIF
  809.  
  810. SEGSUP IZDS
  811. IF(KFORM.EQ.1.AND.NBINC.EQ.3)THEN
  812. SEGSUP IZDE,IZDK
  813. ENDIF
  814. IF(IKRS.EQ.0)SEGSUP MZRO
  815. SEGDES IZTU1
  816. SEGDES IZG1,IZGG1
  817. IF(NBINC.EQ.3)SEGDES IZG2,IZGG2
  818. SEGDES IZVOL
  819. SEGDES LINCO
  820. SEGSUP MLENTI,IPADS
  821.  
  822. NRIGE=7
  823. NKID =9
  824. NKMT =7
  825. NMATRI=0
  826. SEGINI MATRIK
  827.  
  828. IF(NBINC.GT.1)THEN
  829. IF(KCLIM.EQ.0)THEN
  830. CALL ECMO(MTAB1,'CLIM','CHPOINT',IZG2)
  831. ELSE
  832. CALL ECROBJ('CHPOINT',KCLIM)
  833. CALL ECROBJ('CHPOINT',IZG2)
  834. CALL PRFUSE
  835. CALL LIROBJ('CHPOINT',MCHPOI,1,IRET)
  836. CALL ECMO(MTAB1,'CLIM','CHPOINT',MCHPOI)
  837. ENDIF
  838. ENDIF
  839.  
  840. CALL ECROBJ('MATRIK',MATRIK)
  841. CALL ECROBJ('CHPOINT',IZG1)
  842.  
  843. c write(6,*)' Fin FPU'
  844. RETURN
  845. 90 CONTINUE
  846. WRITE(6,*)' Interuption anormale de FPU '
  847. RETURN
  848. 1001 FORMAT(20(1X,I5))
  849. 1002 FORMAT(10(1X,1PE11.4))
  850. END
  851.  
  852.  
  853.  
  854.  
  855.  
  856.  
  857.  
  858.  
  859.  
  860.  
  861.  
  862.  
  863.  
  864.  
  865.  

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