Télécharger ytoimp.eso

Retour à la liste

Numérotation des lignes :

ytoimp
  1. C YTOIMP SOURCE GOUNAND 22/10/17 21:15:03 11483
  2. SUBROUTINE YTOIMP
  3. IMPLICIT INTEGER(I-N)
  4. IMPLICIT REAL*8 (A-H,O-Z)
  5. C***********************************************************************
  6. C -----------------------------------------------------------
  7. C --------- TOIMP ----------------------------------------
  8. C -----------------------------------------------------------
  9. C --------- PARAMETRI DELLO OPERATORE (NELLO ORDINE) : -----
  10. C -----------------------------------------------------------
  11. C --------- TENSION ( tau et pression ) ---------
  12. C -----------------------------------------------------------
  13. C
  14. C SYNTAXE :
  15. C
  16. C TOIMP (tau pression)
  17. C
  18. C 1------2
  19. C (R1,AL1) LEF FLUIDE NOEUDS 1 2
  20. C
  21. C
  22. C
  23. C CAS TRIDIMENSIONNEL
  24. C 4 ________ 3
  25. C / FLUIDE /
  26. C 1 /________/2
  27. C
  28. C
  29. C***********************************************************************
  30.  
  31. -INC PPARAM
  32. -INC CCOPTIO
  33. -INC CCGEOME
  34. -INC CCREEL
  35. -INC SIZFFB
  36. PARAMETER (LRV=64)
  37. SEGMENT PETROV
  38. REAL*8 WT(LRV,NP,NPG,KDIM),WS(LRV,NP,NPG,KDIM),HK(LRV,IDIM,NP,NPG)
  39. REAL*8 UIL(LRV,IDIM,NPG),DUIL(LRV,IDIM,NPG)
  40. REAL*8 PGSK(LRV,NPG),RPGK(LRV,NPG),AIRE(LRV),ANUK(LRV)
  41. REAL*8 AJK(LRV,IDIM,IDIM,NPG)
  42. ENDSEGMENT
  43.  
  44. -INC SMCOORD
  45. -INC SMLENTI
  46. POINTEUR IPADU.MLENTI
  47. -INC SMELEME
  48. POINTEUR MELEM1.MELEME
  49. -INC SMCHPOI
  50. POINTEUR IZG1.MCHPOI, IZGG1.MPOVAL
  51. POINTEUR IZTU1.MPOVAL,MZMU.MPOVAL,MZUN.MPOVAL
  52. POINTEUR MZTO.MPOVAL,MZDT.MPOVAL
  53.  
  54. -INC SMLMOTS
  55. POINTEUR LINCO.MLMOTS
  56. CHARACTER*8 TYPE,TYPC
  57. CHARACTER*(LOCOMP)NOM0,NOMI,NOM4(3)
  58. PARAMETER (NTB=1)
  59. CHARACTER*8 LTAB(NTB)
  60. DIMENSION KTAB(NTB),IXV(3)
  61. SAVE IPAS
  62. DATA LTAB/'KIZX '/,IPAS/0/
  63. C*****************************************************************************
  64. CTOIMP
  65. C write(6,*)' Debut TOIMP '
  66. segact mcoord
  67. CALL LITABS(LTAB,KTAB,NTB,1,IRET)
  68. IF (IERR.NE.0) RETURN
  69. MTABX=KTAB(1)
  70. C
  71. C- Récupération de la table EQEX (pointeur MTAB1)
  72. C
  73. CALL LEKTAB(MTABX,'EQEX',MTAB1)
  74. IF(MTAB1.EQ.0)THEN
  75. C Indice %m1:8 : Indice %m9:16 non trouvé dans la table %m17:24
  76. MOTERR( 1: 8) = ' EQEX '
  77. MOTERR( 9:16) = ' EQEX '
  78. MOTERR(17:24) = ' KIZX '
  79. CALL ERREUR(786)
  80. RETURN
  81. ENDIF
  82. CALL ACME(MTAB1,'NAVISTOK',NASTOK)
  83. IF(NASTOK.EQ.0)THEN
  84. CALL ZZOIMP(MTABX,MTAB1)
  85. RETURN
  86. ENDIF
  87. C
  88. C- Récupération de la table INCO (pointeur KINC)
  89. C
  90. CALL LEKTAB(MTAB1,'INCO',KINC)
  91. IF(KINC.EQ.0)THEN
  92. C Indice %m1:8 : Indice %m9:16 non trouvé dans la table %m17:24
  93. MOTERR( 1: 8) = ' INCO '
  94. MOTERR( 9:16) = ' INCO '
  95. MOTERR(17:24) = ' EQEX '
  96. CALL ERREUR(786)
  97. RETURN
  98. ENDIF
  99.  
  100. C*****************************************************************************
  101. C OPTIONS
  102. C KIMPL = 0 -> EXPL 1 -> IMPL 2 -> SEMI
  103. C KFORM = 0 -> SI 1 -> EF 2 -> VF 3 -> EFMC
  104. C IDCEN = 0-> rien 1-> CENTREE 2-> SUPGDC 3-> SUPG 4-> TVISQUEU 5-> CNG
  105. C Pour IDCEN on autorise 1,2 et 3
  106.  
  107. IAXI=0
  108. IF(IFOMOD.EQ.0)IAXI=2
  109. C
  110. C- Récupération de la table des options KOPT (pointeur KOPTI)
  111. C
  112. CALL LEKTAB(MTABX,'KOPT',KOPTI)
  113. IF (KOPTI.EQ.0) THEN
  114. C Indice %m1:8 : Indice %m9:16 non trouvé dans la table %m17:24
  115. MOTERR( 1: 8) = ' KOPT '
  116. MOTERR( 9:16) = ' KOPT '
  117. MOTERR(17:24) = ' KIZX '
  118. CALL ERREUR(786)
  119. RETURN
  120. ENDIF
  121.  
  122. IKOMP=0
  123. CALL ACME(KOPTI,'KIMPL',KIMPL)
  124. CALL ACME(KOPTI,'KFORM',KFORM)
  125. CALL ACMF(KOPTI,'CMD',CMD)
  126. CALL ACME(KOPTI,'IDCEN',IDCEN)
  127.  
  128. KDIM=1
  129. IF(IDCEN.EQ.2)KDIM=IDIM
  130. KDCEN=(IDCEN-1)*(IDCEN-2)*(IDCEN-3)
  131. IF(KDCEN.NE.0)THEN
  132. MOTERR( 1: 8) = 'IDCEN'
  133. CALL ERREUR(803)
  134. RETURN
  135. ENDIF
  136.  
  137. IF(KFORM.NE.0.AND.KFORM.NE.1)THEN
  138. C Option %m1:8 incompatible avec les données
  139. MOTERR( 1: 8) = 'EF/EFM1 '
  140. CALL ERREUR(803)
  141. RETURN
  142. ENDIF
  143. IF (IERR.NE.0) RETURN
  144.  
  145. C write(6,*)' Apres les options '
  146. C*****************************************************************************
  147. C
  148. C- Récupération de la table DOMAINE associée au domaine local
  149. C
  150. CALL LEKTAB(MTABX,'DOMZ',MTABZ)
  151. IF(MTABZ.EQ.0)THEN
  152. C Indice %m1:8 : Indice %m9:16 non trouvé dans la table %m17:24
  153. MOTERR( 1: 8) = ' DOMZ '
  154. MOTERR( 9:16) = ' DOMZ '
  155. MOTERR(17:24) = ' KIZX '
  156. CALL ERREUR(786)
  157. RETURN
  158. ENDIF
  159.  
  160. CALL LEKTAB(MTABZ,'MAILLAGE',MELEME)
  161. CALL LEKTAB(MTABZ,'CENTRE',MELEMC)
  162. IF (IERR.NE.0) RETURN
  163.  
  164. SEGACT MELEME
  165.  
  166. C*************************************************************************
  167. C VERIFICATIONS SUR LES INCONNUES
  168. C
  169. C- Récupération du nombre d'inconnues et du nom de l'inconnue NOMI
  170. C
  171. TYPE='LISTMOTS'
  172. CALL ACMO(MTABX,'LISTINCO',TYPE,LINCO)
  173. IF (IERR.NE.0) RETURN
  174. SEGACT LINCO
  175. NBINC=LINCO.MOTS(/2)
  176. IF(NBINC.NE.1)THEN
  177. C Indice %m1:8 : contient plus de %i1 %m9:16
  178. MOTERR( 1:8) = 'LISTINCO'
  179. INTERR(1) = 1
  180. MOTERR(9:16) = ' MOTS '
  181. CALL ERREUR(799)
  182. RETURN
  183. ENDIF
  184.  
  185. C --> 1 ere Inconnue
  186.  
  187. NOMI=LINCO.MOTS(1)
  188. DO 15 I=1,IDIM
  189. WRITE(NOM4(I),FMT='(I1)')I
  190. NOM4(I)=NOM4(I)(1:1)//NOMI(1:LOCOMP-1)
  191. 15 CONTINUE
  192.  
  193. TYPE=' '
  194. CALL ACMO(KINC,NOMI,TYPE,MCHPOI)
  195. IF(TYPE.NE.'CHPOINT ')THEN
  196. C Indice %m1:8 : ne contient pas un objet de type %m9:16
  197. MOTERR='INC '//NOMI
  198. MOTERR( 9:16) = 'CHPOINT '
  199. CALL ERREUR(800)
  200. RETURN
  201. ELSE
  202. CALL LICHT(MCHPOI,IZTU1,TYPC,MELEM1)
  203. ENDIF
  204. NPTU=IZTU1.VPOCHA(/2)
  205.  
  206. C*************************************************************************
  207. C Le domaine de definition est donne par le SPG de la premiere inconnue
  208. C Les inconnues suivantes devront posseder ce meme pointeur
  209. C On verifie que les points de la zone sont tous inclus dans ce SPG
  210.  
  211. CALL KRIPAD(MELEM1,MLENTI)
  212. IPADU=MLENTI
  213.  
  214. IF(IPAS.EQ.0)THEN
  215. CALL VERPAD(MLENTI,MELEME,IRET)
  216. IF(IRET.NE.0)THEN
  217. C Indice %m1:8 : L'objet %m9:16 n'a pas le bon support géométrique
  218. MOTERR= 'INC '//NOMI
  219. MOTERR(9:16) = 'CHPOINT '
  220. CALL ERREUR(788)
  221. IPAS=0
  222. RETURN
  223. ENDIF
  224. ENDIF
  225.  
  226. C*************************************************************************
  227. C Lecture du coefficient
  228. C Type du coefficient :
  229. C IK1=0 CHPOINT IK1=1 scalaire IK1=2 vecteur
  230.  
  231. CALL ACME(MTABX,'IARG',IARG)
  232. IF(IARG.NE.1.AND.IDCEN.EQ.1.AND.
  233. & IARG.NE.3.AND.(IDCEN.EQ.2.OR.IDCEN.EQ.2)
  234. &)THEN
  235. WRITE(6,*)'Opérateur TOIMP : nombre d''arguments incorrect'
  236. C Indice %m1:8 : nombre d'arguments incorrect
  237. MOTERR(1:8) = 'IARG '
  238. CALL ERREUR(804)
  239. RETURN
  240. ENDIF
  241.  
  242. MZMU=IZTU1
  243. MZUN=IZTU1
  244. MZDT=IZTU1
  245.  
  246. IXV(1)=-MELEMC
  247. IXV(2)=0
  248. IXV(3)=1
  249. CALL LEKCOF('Opérateur TOIMP :',
  250. & MTABX,KINC,1,IXV,MTO,MZTO,NTAU,NC1,IKS,IRET)
  251. IF(IRET.EQ.0)RETURN
  252.  
  253. IF(IKS.EQ.2)IKS=1
  254.  
  255.  
  256. IF(IARG.GE.2)THEN
  257.  
  258. C 2ème coefficient UN , champ de vitesse transportant
  259. IXV(1)=-MELEM1
  260. IXV(2)=0
  261. IXV(3)=1
  262. CALL LEKCOF('Opérateur TOIM :',
  263. & MTABX,KINC,2,IXV,MUN,MZUN,NPTU,NC2,IKU,IRET)
  264. IF(IRET.EQ.0)GO TO 90
  265. IF(IKU.EQ.2)IKU=1
  266.  
  267. C 3ème coefficient viscosité
  268. IXV(1)=0
  269. IXV(2)=1
  270. IXV(3)=0
  271. CALL LEKCOF('Opérateur TOIM :',
  272. & MTABX,KINC,3,IXV,MMU,MZMU,NPT3,NC3,IKM,IRET)
  273. IF(IRET.EQ.0)GO TO 90
  274. ELSE
  275. CALL LEKTAB(MTABX,'ARGS3',MMU)
  276. CALL LICHT(MMU,MZMU,TYPC,IGEOM0)
  277. MZMU.VPOCHA(1,1)=1.D0
  278. IKM=1
  279.  
  280. ENDIF
  281.  
  282. IF(IARG.EQ.4)THEN
  283. C 4ème coefficient Dt
  284. IXV(1)=0
  285. IXV(2)=1
  286. IXV(3)=0
  287. CALL LEKCOF('Opérateur TOIM :',
  288. & MTABX,KINC,4,IXV,MDT,MZDT,NPT4,NC4,IKT,IRET)
  289. IF(IRET.EQ.0)RETURN
  290. DT=MZDT.VPOCHA(1,1)
  291. ELSE
  292. DT=0.D0
  293.  
  294. ENDIF
  295.  
  296. C write(6,*)' Fin lecture Arguments '
  297. C Fin lecture Arguments ************************************************
  298.  
  299.  
  300. IF(KIMPL.EQ.0)THEN
  301. NC=IZTU1.VPOCHA(/2)
  302. TYPE='SOMMET'
  303. CALL KRCHPT(TYPE,MELEM1,NC,IZG1,NOM4)
  304.  
  305. ELSE
  306.  
  307. NAT=2
  308. NSOUPO=1
  309. SEGACT MELEM1
  310. N=MELEM1.NUM(/2)
  311. NC=IZTU1.VPOCHA(/2)
  312. NINKO=NC
  313. SEGINI MCHPO1,MSOUP1,MPOVA1
  314. MCHPO1.IFOPOI=IFOUR
  315. MCHPO1.MOCHDE=TITREE
  316. MCHPO1.MTYPOI='SMBR'
  317. MCHPO1.JATTRI(1)=2
  318. MCHPO1.IPCHP(1)=MSOUP1
  319. DO 177 N=1,NINKO
  320. WRITE(NOM0,FMT='(I1)')N
  321. MSOUP1.NOCOMP(N)=NOM0(1:1)//NOMI(1:LOCOMP-1)
  322. 177 CONTINUE
  323. MSOUP1.IGEOC=MELEM1
  324. MSOUP1.IPOVAL=MPOVA1
  325. IZG1=MCHPO1
  326.  
  327. ENDIF
  328.  
  329. CALL LICHT(IZG1,IZGG1,TYPC,IGEOM)
  330.  
  331. IF(IGEOM.NE.MELEM1)THEN
  332. WRITE(6,*)' Opérateur TOIM'
  333. WRITE(6,*)' Incompatibilité de SPG entre 1ères inconnues'
  334. RETURN
  335. ENDIF
  336.  
  337. SEGACT MELEME
  338. NBSOUS=LISOUS(/1)
  339. IF(NBSOUS.EQ.0)NBSOUS=1
  340.  
  341. NPTD=IZGG1.VPOCHA(/1)
  342. K0=0
  343. DO 1 LS=1,NBSOUS
  344. IPT1=MELEME
  345. IF(NBSOUS.NE.1)IPT1=LISOUS(LS)
  346. SEGACT IPT1
  347.  
  348. NOM0 = NOMS(IPT1.ITYPEL)//' '
  349. CALL KALPBG(NOM0,'FONFORM ',IZFFM)
  350. SEGACT IZFFM
  351. IZHR=KZHR(1)
  352. SEGACT IZHR*MOD
  353. NES=GR(/1)
  354. NPG=GR(/3)
  355.  
  356. NP =IPT1.NUM(/1)
  357. NBEL=IPT1.NUM(/2)
  358.  
  359. SEGINI PETROV
  360.  
  361. DEUPI=1.D0
  362. IF(IAXI.NE.0)DEUPI=2.D0*XPI
  363.  
  364. C Calcul du nombre de paquets de LRV éléments
  365. C
  366. NNN=MOD(NBEL,LRV)
  367. IF(NNN.EQ.0) THEN
  368. NPACK=NBEL/LRV
  369. ELSE
  370. NPACK=1+(NBEL-NNN)/LRV
  371. ENDIF
  372. KPACKD=1
  373. KPACKF=NPACK
  374. C
  375. C ******* BOUCLE SUR LES PAQUETS DE LRV ELEMENTS **********
  376. C
  377. DO 7001 KPACK=KPACKD,KPACKF
  378. C
  379. C ======= A L'INTERIEUR DE CHAQUE PAQUET DE LRV ELEMENTS =======
  380. C
  381. C 1. Calcul des limites du paquet courant.
  382. KDEB=1+(KPACK-1)*LRV
  383. KFIN=MIN(NBEL,KDEB+LRV-1)
  384. C
  385. DO 7002 K=KDEB,KFIN
  386. KP=K-KDEB+1
  387. NK=K0+K
  388. NKM=(1-IKM)*(NK-1)+1
  389. ANUK(KP)=MZMU.VPOCHA(NKM,1)
  390. 7002 CONTINUE
  391.  
  392. C CB215821 : DT n'est pas utilise mais doit etre initialise sinon NAN
  393. DT=0.D0
  394. IF(IDCEN.EQ.2)THEN
  395. DO 108 NC=1,IDIM
  396. CALL SUPGEF(FN,GR,PG,XYZ,HR,PGSQ,RPG,AJ,
  397. & NES,NP,NPG,IAXI,XCOOR,
  398. & IPT1.NUM,KDEB,KFIN,LRV,IDCEN,CMD,IKOMP,
  399. & MZUN.VPOCHA(1,NC),IPADU.LECT,MZUN.VPOCHA,IPADU.LECT
  400. $ ,NPTU,ANUK,WT(1,1,1,NC),WS(1,1,1,NC),HK,PGSK,RPGK
  401. $ ,AJK,AIRE,UIL,DUIL,DTM1,DT,DTT1,DTT2,DIAEL,NUEL)
  402. 108 CONTINUE
  403. ELSE
  404. CALL SUPGEF(FN,GR,PG,XYZ,HR,PGSQ,RPG,AJ,
  405. & NES,NP,NPG,IAXI,XCOOR,
  406. & IPT1.NUM,KDEB,KFIN,LRV,IDCEN,CMD,IKOMP,
  407. & MZUN.VPOCHA,IPADU.LECT,MZUN.VPOCHA,IPADU.LECT,NPTU,ANUK
  408. $ ,WT,WS,HK,PGSK,RPGK,AJK,AIRE,UIL,DUIL,DTM1,DT,DTT1,DTT2
  409. $ ,DIAEL,NUEL)
  410. ENDIF
  411.  
  412. IF(NES.NE.IDIM)THEN
  413. DO 7003 K=KDEB,KFIN
  414. KP=K-KDEB+1
  415. NK=K0+K
  416. KA=1+(1-IKS)*(NK-1)
  417. DO I=1,NP
  418. DO N=1,IDIM
  419. N1=1
  420. IF(IDCEN.EQ.2) N1=N
  421. FF1=0.D0
  422. DO 51 L=1,NPG
  423. DO 52 M=1,IDIM
  424. FF1=FF1 + MZTO.VPOCHA(KA,M)*AJK(KP,N,M,L)
  425. $ *WT(KP,I,L,N1)*PGSK(KP,L)*DEUPI*RPGK(KP
  426. $ ,L)
  427. 52 CONTINUE
  428. 51 CONTINUE
  429. NF=LECT(IPT1.NUM(I,K))
  430. IZGG1.VPOCHA(NF,N)=IZGG1.VPOCHA(NF,N)+FF1
  431. ENDDO
  432. ENDDO
  433. 7003 CONTINUE
  434. ELSEIF(NES.EQ.IDIM)THEN
  435. DO 7004 K=KDEB,KFIN
  436. KP=K-KDEB+1
  437. NK=K0+K
  438. KA=1+(1-IKS)*(NK-1)
  439. DO I=1,NP
  440. DO N=1,IDIM
  441. N1=1
  442. IF(IDCEN.EQ.2)N1=N
  443. FF1=0.D0
  444. DO 61 L=1,NPG
  445. FF1=FF1 + MZTO.VPOCHA(KA,N)*WT(KP,I,L,N1)
  446. $ *PGSK(KP,L)*DEUPI*RPGK(KP,L)
  447. 61 CONTINUE
  448. NF=LECT(IPT1.NUM(I,K))
  449. IZGG1.VPOCHA(NF,N)=IZGG1.VPOCHA(NF,N)+FF1
  450. ENDDO
  451. ENDDO
  452. 7004 CONTINUE
  453. ENDIF
  454. 7001 CONTINUE
  455. SEGDES IPT1
  456. K0=K0+NBEL
  457. SEGSUP PETROV
  458. 1 CONTINUE
  459. SEGDES MZTO
  460. SEGDES MELEME
  461.  
  462. NRIGE=7
  463. NKID =9
  464. NKMT =7
  465. NMATRI=0
  466. SEGINI MATRIK
  467. CALL ECROBJ('MATRIK',MATRIK)
  468. CALL ECROBJ('CHPOINT',IZG1)
  469. SEGDES MELEME
  470. SEGDES IZTU1
  471. SEGDES IZG1,IZGG1
  472. SEGDES LINCO
  473. SEGSUP MLENTI
  474. IPAS=1
  475. C write(6,*)' FIN TOIMP '
  476. RETURN
  477. 90 CONTINUE
  478. WRITE(6,*)' Interuption anormale de TOIMP '
  479. C Option %m1:8 incompatible avec les données
  480. MOTERR( 1: 8) = ' EF '
  481. CALL ERREUR(803)
  482. RETURN
  483. 1002 FORMAT(10(1X,1PE11.4))
  484. END
  485.  
  486.  

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