Télécharger ztscal.eso

Retour à la liste

Numérotation des lignes :

ztscal
  1. C ZTSCAL SOURCE FANDEUR 22/01/03 21:16:04 11136
  2. SUBROUTINE ZTSCAL(MTABX,MTAB1)
  3. IMPLICIT INTEGER(I-N)
  4. IMPLICIT REAL*8 (A-H,O-Z)
  5. C***********************************************************************
  6. C
  7. C CET OPERATEUR DISCRETISE UNE EQUATION DE TRANSPORT
  8. C EN 2D SUR LES ELEMENTS QUA4 ET TRI3 PLAN OU AXI
  9. C EN 3D SUR LES ELEMENTS CUB8 ET PRI6
  10. C LES OPERATEURS SONT "SOUS-INTEGRES"
  11. C
  12. C SYNTAXE :
  13. C ---------
  14. C 1/ Cas incompréssible
  15. C
  16. C de/dt + u Grad e = alpha Lapl e < + S >
  17. C
  18. C 'OPER' 'TSCAL' al 'UN' s 'INCO' EN :
  19. C 'OPER' 'TSCAL' al 'UN' s alt sgt 'INCO' EN :
  20. C
  21. C 2/ Cas compréssible
  22. C
  23. C dh/dt + u Grad h + h Div u = alpha Lapl(tn) < + S >
  24. C
  25. C 'OPER' 'TSCAL' lb 'UN' s tn 'INCO' HN :
  26. C 'OPER' 'TSCAL' lb 'UN' s tn lbt sgt 'INCO' HN :
  27. C
  28. C
  29. C al,alt Diffusivité thermique moléculaire ou turbulente
  30. C FLOTTANT où CHPOINT SCAL CENTRE
  31. C lb,lbt Conductivité thermiquemoléculaire ou turbulente
  32. C FLOTTANT où CHPOINT SCAL CENTRE
  33. C sgt Prandtl turbulent
  34. C s source volumique
  35. C POINT où CHPOINT SCAL CENTRE
  36. C
  37. C un Champ de vitesse transportant
  38. C CHPOINT VECT SOMMET
  39. C tn Champ de température
  40. C CHPOINT SCAL SOMMET
  41. C
  42. C***********************************************************************
  43.  
  44. -INC CCVQUA4
  45.  
  46. -INC PPARAM
  47. -INC CCOPTIO
  48. -INC CCGEOME
  49. -INC SIZFFB
  50. POINTEUR IZF1.IZFFM
  51. -INC SMCHAML
  52. -INC SMCOORD
  53. -INC SMLENTI
  54. POINTEUR IPADI.MLENTI,IPADS.MLENTI
  55. POINTEUR IPADU.MLENTI,IPADD.MLENTI
  56. POINTEUR IPADQ.MLENTI,MELEMI.MELEME,MELEP1.MELEME
  57. -INC SMELEME
  58. POINTEUR MELEM1.MELEME,MELEMC.MELEME,MELEMS.MELEME
  59. POINTEUR MELEMQ.MELEME
  60. -INC SMCHPOI
  61. POINTEUR IZGG1.MPOVAL
  62. POINTEUR IZTU1.MPOVAL
  63. POINTEUR VISCO.MPOVAL
  64. POINTEUR IZTGG3.MPOVAL,IZTGG4.MPOVAL
  65. POINTEUR IZTGG6.MPOVAL
  66. POINTEUR MZALT.MPOVAL,MZST.MPOVAL
  67. POINTEUR IZVOL.MPOVAL,IZTCO.MPOVAL
  68. POINTEUR VITESS.MPOVAL,UTRANS.MPOVAL
  69. POINTEUR IPM.IZAFM
  70. SEGMENT IMATRS
  71. INTEGER LIZAFS(NBSOUS,NBME)
  72. ENDSEGMENT
  73. POINTEUR IPMS.IZAFM,IPS1.IZAFM,IPS2.IZAFM,IPS3.IZAFM
  74. -INC SMLMOTS
  75. POINTEUR LINCO.MLMOTS
  76. CHARACTER*8 NOMZ,NOMI,NOM0,TYPE,TYPC,NOM,NOMA
  77. PARAMETER (NTB=1)
  78. CHARACTER*8 LTAB(NTB)
  79. DIMENSION KTAB(NTB),IXV(3),RO(1)
  80. SAVE IPAS
  81. DATA LTAB/'KIZX '/,IPAS/0/,RO/1.D0/
  82. C*****************************************************************************
  83. CTSCAL
  84. C write(6,*)' Debut TSCAL'
  85.  
  86. C
  87. C- Récupération de la table DOMAINE associée au domaine local
  88. C
  89. CALL ACMM(MTABX,'NOMZONE',NOMZ)
  90. CALL LEKTAB(MTABX,'DOMZ',MTABZ)
  91. IF(MTABZ.EQ.0)THEN
  92. C Indice %m1:8 : Indice %m9:16 non trouvé dans la table %m17:24
  93. MOTERR( 1: 8) = ' DOMZ '
  94. MOTERR( 9:16) = ' DOMZ '
  95. MOTERR(17:24) = ' KIZX '
  96. CALL ERREUR(786)
  97. RETURN
  98. ENDIF
  99. C
  100. C- Récupération de la table INCO (pointeur KINC)
  101. C
  102. CALL LEKTAB(MTAB1,'INCO',KINC)
  103. IF(KINC.EQ.0)THEN
  104. C Indice %m1:8 : Indice %m9:16 non trouvé dans la table %m17:24
  105. MOTERR( 1: 8) = ' INCO '
  106. MOTERR( 9:16) = ' INCO '
  107. MOTERR(17:24) = ' EQEX '
  108. CALL ERREUR(786)
  109. RETURN
  110. ENDIF
  111.  
  112. C*****************************************************************************
  113. C OPTIONS
  114.  
  115. C
  116. C- Récupération de la table des options KOPT (pointeur KOPTI)
  117. C
  118. CALL LEKTAB(MTABX,'KOPT',KOPTI)
  119. IF (KOPTI.EQ.0) THEN
  120. C Indice %m1:8 : Indice %m9:16 non trouvé dans la table %m17:24
  121. MOTERR( 1: 8) = ' KOPT '
  122. MOTERR( 9:16) = ' KOPT '
  123. MOTERR(17:24) = ' KIZX '
  124. CALL ERREUR(786)
  125. RETURN
  126. ENDIF
  127.  
  128. IAXI=0
  129. IF(IFOMOD.EQ.0)IAXI=2
  130.  
  131. CALL ACME(KOPTI,'MTRMASS ',MMPG)
  132. IPG=0
  133. IF(MMPG.EQ.3)IPG=1
  134. CALL ACME(KOPTI,'IDCEN',IDCEN)
  135. CALL ACME(KOPTI,'IKOMP',IKOMP)
  136. CALL ACME(KOPTI,'KIMPL',KIMPL)
  137. CALL ACMF(KOPTI,'AIMPL',AIMPL)
  138. CALL ACME(KOPTI,'KFORM',KFORM)
  139. CALL ACME(KOPTI,'KPOIN',KPRE)
  140. CALL ACME(KOPTI,'KMACO',KMACO)
  141. IF (IERR.NE.0) RETURN
  142.  
  143. C*****************************************************************************
  144.  
  145. CALL LEKTAB(MTABZ,'MAILLAGE',MELEME)
  146. CALL LEKTAB(MTABZ,'SOMMET',MELEMS)
  147. CALL LEKTAB(MTABZ,'CENTRE',MELEMC)
  148. CALL LEKTAB(MTABZ,'MACRO',MACRO)
  149. CALL LEKTAB(MTABZ,'MACRO1',MELEMI)
  150. CALL LEKTAB(MTABZ,'QUADRATI',MQUAD)
  151. IF (IERR.NE.0) RETURN
  152.  
  153. MELEMQ=MELEMC
  154. MELEP1=MELEMC
  155. C write(6,*)' KPRE=',kpre,' MACRO=',macro,' QUADR=',MQUAD
  156. IF(KPRE.LE.3.AND.MACRO.EQ.0.AND.MQUAD.EQ.0.AND.KFORM.NE.0)THEN
  157. WRITE(6,*)' Operateur TSCA '
  158. WRITE(6,*)' Incompatibilité du terme source et des éléments'
  159. WRITE(6,*)' MACRO ou QUADRATIQUE attendu '
  160. WRITE(6,*)' Interuption anormale de TSCA'
  161. C Option %m1:8 incompatible avec les données
  162. MOTERR( 1: 8) = ' EF '
  163. CALL ERREUR(803)
  164. RETURN
  165. ELSEIF(KPRE.EQ.3)THEN
  166. CALL LEKTAB(MTABZ,'CENTREP0',MELEMQ)
  167. MELEP1=MELEMQ
  168. ELSEIF(KPRE.EQ.4)THEN
  169. CALL LEKTAB(MTABZ,'CENTREP1',MELEMQ)
  170. CALL LEKTAB(MTABZ,'ELTP1NC ',MELEP1)
  171. ENDIF
  172.  
  173. CALL LEKTAB(MTABZ,'XXPSOML',MCHELM)
  174. CALL LEKTAB(MTABZ,'XXDXDY',MCHPDX)
  175. CALL LEKTAB(MTABZ,'XXVOLUM',MCHPVO)
  176. IF (IERR.NE.0) RETURN
  177.  
  178. SEGACT MCHELM
  179. CALL LICHT(MCHPDX,IZTCO,TYPC,IGEOM)
  180. NELZ=IZTCO.VPOCHA(/1)
  181. CALL LICHT(MCHPVO,IZVOL,TYPC,IGEOM)
  182. C***
  183.  
  184.  
  185. C*************************************************************************
  186. C VERIFICATIONS SUR LES INCONNUES
  187. C
  188. C- Récupération du nombre d'inconnues et du nom de l'inconnue NOMI
  189. C
  190. TYPE='LISTMOTS'
  191. CALL ACMO(MTABX,'LISTINCO',TYPE,LINCO)
  192. IF (IERR.NE.0) RETURN
  193. SEGACT LINCO
  194. NBINC=LINCO.MOTS(/2)
  195. IF(NBINC.NE.1)THEN
  196. C Indice %m1:8 : contient plus de %i1 %m9:16
  197. MOTERR( 1:8) = 'LISTINCO'
  198. INTERR(1) = 1
  199. MOTERR(9:16) = ' MOTS '
  200. CALL ERREUR(799)
  201. RETURN
  202. ENDIF
  203.  
  204. NOMI=LINCO.MOTS(1)
  205. NOMA=NOMI
  206. C
  207. C- Récupération de l'inconnue
  208. C
  209. TYPE=' '
  210. CALL ACMO(KINC,NOMI,TYPE,MCHPOI)
  211. IF(TYPE.NE.'CHPOINT ')THEN
  212. C Indice %m1:8 : ne contient pas un objet de type %m9:16
  213. MOTERR( 1: 8) = 'INC '//NOMI
  214. MOTERR( 9:16) = 'CHPOINT '
  215. CALL ERREUR(800)
  216. RETURN
  217. ELSE
  218. CALL LICHT(MCHPOI,IZTU1,TYPC,MELEM1)
  219. NINKO = IZTU1.VPOCHA(/2)
  220. IF (NINKO.NE.1) THEN
  221. C Indice %m1:8 : Le %m9:16 n'a pas le bon nombre de composantes
  222. MOTERR( 1: 8) = 'INC '//NOMI
  223. MOTERR( 9:16) = 'CHPOINT '
  224. CALL ERREUR(784)
  225. RETURN
  226. ENDIF
  227. ENDIF
  228.  
  229. C*****************************************************************************
  230. C Le domaine de definition est donne par le SPG de la premiere inconnue
  231. C Les inconnues suivantes devront posseder ce meme pointeur
  232. C On verifie que les points de la zone sont tous inclus dans ce SPG
  233.  
  234. CALL KRIPAD(MELEM1,IPADI)
  235. IPADS=IPADI
  236. IPADD=IPADI
  237. IF(MELEM1.NE.MELEMS)CALL KRIPAD(MELEMS,IPADS)
  238. IPADU=IPADS
  239.  
  240. IF(IPAS.EQ.0)THEN
  241. CALL VERPAD(IPADI,MELEME,IRET)
  242. IF(IRET.NE.0)THEN
  243. C Indice %m1:8 : L'objet %m9:16 n'a pas le bon support géométrique
  244. MOTERR(1: 8) = 'INC '//NOMI
  245. MOTERR(9:16) = 'CHPOINT '
  246. CALL ERREUR(788)
  247. RETURN
  248. ENDIF
  249. ENDIF
  250.  
  251. C*****************************************************************************
  252. C Lecture des coefficient
  253. C Type du coefficient :
  254. C IK1=0 CHPOINT IK1=1 scalaire IK1=2 vecteur
  255.  
  256. C write(6,*)' Opérateur TSCAL lecture des coefficients'
  257. CALL ACME(MTABX,'IARG',IARG)
  258. IF(IKOMP.EQ.0)THEN
  259. IF(IARG.NE.3.AND.IARG.NE.5)THEN
  260. WRITE(6,*)' Opérateur TSCAL : option incompréssible '
  261. WRITE(6,*)' Nombre d''arguments incorrect : ',IARG
  262. WRITE(6,*)' On attend 3 ou 5 '
  263. C Indice %m1:8 : nombre d'arguments incorrect
  264. MOTERR(1:8) = 'IARG '
  265. CALL ERREUR(804)
  266. RETURN
  267. ENDIF
  268. ELSEIF(IKOMP.EQ.1)THEN
  269. IF(IARG.NE.4.AND.IARG.NE.6)THEN
  270. WRITE(6,*)' Opérateur TSCAL : option compréssible '
  271. WRITE(6,*)' Nombre d''arguments incorrect : ',IARG
  272. WRITE(6,*)' On attend 4 ou 6 '
  273. C Indice %m1:8 : nombre d'arguments incorrect
  274. MOTERR(1:8) = 'IARG '
  275. CALL ERREUR(804)
  276. RETURN
  277. ENDIF
  278. ENDIF
  279.  
  280. C--Cas incompréssible
  281. IF(IKOMP.EQ.0)THEN
  282. C 1er coefficient Alpha
  283. IXV(1)=MELEMC
  284. IXV(2)=1
  285. IXV(3)=0
  286. CALL LEKCOF('Opérateur TSCAL :',
  287. & MTABX,KINC,1,IXV,MCOF,VISCO,NPT1,NC1,IKL,IRET)
  288. IF(IRET.EQ.0)RETURN
  289.  
  290. IK2=-1
  291. IKG=-1
  292. IK3=-1
  293. IK4=-1
  294. IZTGG4=IZTU1
  295. MZALT=VISCO
  296. MZST=VISCO
  297.  
  298. C 2ème coefficient UN
  299. IXV(1)=-MELEMS
  300. IXV(2)=0
  301. IXV(3)=1
  302. CALL LEKCOF('Opérateur TSCAL :',
  303. & MTABX,KINC,2,IXV,MUTR,UTRANS,NPTU,NC2,IKU,IRET)
  304. IF(IRET.EQ.0)RETURN
  305. IF(IKU.EQ.2)IKU=1
  306.  
  307. C 3ème coefficient source
  308. IXV(1)=MELEMC
  309. IXV(2)=1
  310. IXV(3)=0
  311. CALL LEKCOF('Opérateur TSCAL :',
  312. & MTABX,KINC,3,IXV,IZTG3,IZTGG3,NPT3,NC3,IKS,IRET)
  313. IF(IRET.EQ.0)RETURN
  314.  
  315. IF(IARG.EQ.5)THEN
  316. C alpha turbulent
  317. IXV(1)=MELEMC
  318. IXV(2)=0
  319. IXV(3)=0
  320. CALL LEKCOF('Opérateur TSCAL :',
  321. & MTABX,KINC,4,IXV,MALT,MZALT,NPT4,NC4,IK4,IRET)
  322. IF(IRET.EQ.0)RETURN
  323.  
  324. C sigma turbulent
  325. IXV(1)=0
  326. IXV(2)=1
  327. IXV(3)=0
  328. CALL LEKCOF('Opérateur TSCAL :',
  329. & MTABX,KINC,5,IXV,MST,MZST,NPT5,NC5,IK5,IRET)
  330. IF(IRET.EQ.0)RETURN
  331. IF(MZST.VPOCHA(1,1).LE.0.D0)THEN
  332. WRITE(6,*)' Opérateur TSCAL :'
  333. WRITE(6,*)'Valeur du Prandtl turbulent érronée'
  334. RETURN
  335. ENDIF
  336. ENDIF
  337.  
  338. C--Cas compréssible
  339. ELSEIF(IKOMP.EQ.1)THEN
  340. C 1er coefficient Lambda
  341. IXV(1)=MELEMC
  342. IXV(2)=1
  343. IXV(3)=0
  344. CALL LEKCOF('Opérateur TSCAL :',
  345. & MTABX,KINC,1,IXV,MCOF,VISCO,NPT1,NC1,IKL,IRET)
  346. IF(IRET.EQ.0)RETURN
  347.  
  348. IK2=-1
  349. IKG=-1
  350. IK3=-1
  351. IK4=-1
  352. MZALT=VISCO
  353. MZST=VISCO
  354.  
  355. C 2ème coefficient UN
  356. IXV(1)=-MELEMS
  357. IXV(2)=0
  358. IXV(3)=1
  359. CALL LEKCOF('Opérateur TSCAL :',
  360. & MTABX,KINC,2,IXV,MUTR,UTRANS,NPTU,NC2,IKU,IRET)
  361. IF(IRET.EQ.0)RETURN
  362. IF(IKU.EQ.2)IKU=1
  363.  
  364. C 3ème coefficient source
  365. IXV(1)=MELEMC
  366. IXV(2)=1
  367. IXV(3)=0
  368. CALL LEKCOF('Opérateur TSCAL :',
  369. & MTABX,KINC,3,IXV,IZTG3,IZTGG3,NPT3,NC3,IKS,IRET)
  370. IF(IRET.EQ.0)RETURN
  371.  
  372. C 4ème coefficient tn
  373. IXV(1)=MELEMS
  374. IXV(2)=0
  375. IXV(3)=0
  376. CALL LEKCOF('Opérateur TSCAL :',
  377. & MTABX,KINC,4,IXV,IZTG4,IZTGG4,NPT4,NC4,IK4,IRET)
  378. IPADD=IPADS
  379. IF(IRET.EQ.0)RETURN
  380.  
  381. IF(IARG.EQ.6)THEN
  382. C lambda turbulent
  383. IXV(1)=MELEMC
  384. IXV(2)=0
  385. IXV(3)=0
  386. CALL LEKCOF('Opérateur TSCAL :',
  387. & MTABX,KINC,5,IXV,MALT,MZALT,NPT5,NC5,IK5,IRET)
  388. IF(IRET.EQ.0)RETURN
  389.  
  390. C sigma turbulent
  391. IXV(1)=0
  392. IXV(2)=1
  393. IXV(3)=0
  394. CALL LEKCOF('Opérateur TSCAL :',
  395. & MTABX,KINC,6,IXV,MST,MZST,NPT6,NC6,IK6,IRET)
  396. IF(IRET.EQ.0)RETURN
  397. IF(MZST.VPOCHA(1,1).LE.0.D0)THEN
  398. call erreur(992)
  399. RETURN
  400. ENDIF
  401. ENDIF
  402.  
  403. ENDIF
  404.  
  405. C write(6,*)' Opérateur TSCAL : Fin lecture Arguments '
  406. C Fin lecture Arguments ************************************************
  407.  
  408.  
  409. CALL LEKTAB(MTAB1,'PASDETPS',MTABT)
  410. IF(MTABT.EQ.0)THEN
  411. CALL CRTABL(MTABT)
  412. CALL ECMM(MTABT,'SOUSTYPE','PASDETPS')
  413. CALL ECMO(MTAB1,'PASDETPS','TABLE ',MTABT)
  414. DT=1.D30
  415. DTP=1.D30+DT
  416. IPAT=1
  417. CALL ECME(MTABT,'NUPASDT',IPAT)
  418. DTM1=1.D-20
  419. CALL ECMF(MTABT,'DELTAT-1',DTM1)
  420. ELSE
  421. CALL ACMF(MTABT,'DELTAT',DTP)
  422. CALL ACMF(MTABT,'DELTAT-1',DTM1)
  423. ENDIF
  424.  
  425. C*********** FORMULATIONS **********
  426. C*********** FORMULATIONS **********
  427. C*********** FORMULATIONS **********
  428.  
  429.  
  430.  
  431. C************************** FORMULATION EFM1 ***************************
  432. IF(KFORM.EQ.0)THEN
  433. C Formulation EFM1
  434. C Vérification des options
  435.  
  436. IF(KIMPL.NE.0)THEN
  437. C Option %m1:8 incompatible avec les données
  438. MOTERR( 1: 8) = ' EFM1 '
  439. WRITE(6,*)' Options incompatibles : EFM1 et (IMPL ou SEMI) '
  440. CALL ERREUR(803)
  441. RETURN
  442. ENDIF
  443.  
  444. IF(IKOMP.EQ.1.AND.(IDCEN.EQ.6.OR.IDCEN.EQ.7))THEN
  445. C Option %m1:8 incompatible avec les données
  446. MOTERR( 1: 8) = ' EFM1 '
  447. WRITE(6,*)' Option de décentrement non prévue en',
  448. & ' formulation conservative '
  449. CALL ERREUR(803)
  450. RETURN
  451. ENDIF
  452.  
  453. IF(IDCEN.GE.4.AND.(IDCEN.NE.6.AND.IDCEN.NE.7))THEN
  454. C Option %m1:8 incompatible avec les données
  455. MOTERR( 1: 8) = ' EFM1 '
  456. WRITE(6,*)' Option de décentrement non prévue en',
  457. & ' formulation EFM1 '
  458. CALL ERREUR(803)
  459. RETURN
  460. ENDIF
  461.  
  462. IF(IDIM.EQ.3.AND.(IDCEN.EQ.6.OR.IDCEN.EQ.7))THEN
  463. C Option %m1:8 incompatible avec les données
  464. MOTERR( 1: 8) = ' EFM1 '
  465. WRITE(6,*)' Option de décentrement non prévue en 3D'
  466. CALL ERREUR(803)
  467. RETURN
  468. ENDIF
  469.  
  470. CALL LEKTAB(MTAB1,'KIZG',KIZG)
  471. IF(KIZG.EQ.0)THEN
  472. CALL CRTABL(KIZG)
  473. CALL ECMM(KIZG,'SOUSTYPE','KIZG')
  474. CALL ECMO(MTAB1,'KIZG','TABLE ',KIZG)
  475. ENDIF
  476.  
  477. TYPE=' '
  478. CALL ACMO(KIZG,NOMI,TYPE,IZG1)
  479. IF(TYPE.NE.'CHPOINT ')THEN
  480. NC=IZTU1.VPOCHA(/2)
  481. TYPE='SOMMET'
  482. CALL CRCHPT(TYPE,MELEM1,NC,IZG1)
  483. CALL ECMO(KIZG,NOMI,'CHPOINT ',IZG1)
  484. ENDIF
  485.  
  486. CALL LICHT(IZG1,IZGG1,TYPC,IGEOM)
  487.  
  488. IF(IGEOM.NE.MELEM1)THEN
  489. WRITE(6,*)' Opérateur TSCAL'
  490. WRITE(6,*)'Incompatibilite de SPG entre 1eres inconnues'
  491. C Option %m1:8 incompatible avec les données
  492. MOTERR( 1: 8) = ' EFM1 '
  493. CALL ERREUR(803)
  494. RETURN
  495. ENDIF
  496.  
  497. CALL LEKTAB(MTABZ,'MATESI',MATRIK)
  498. IF (IERR.NE.0) RETURN
  499. SEGACT MATRIK
  500.  
  501. IMATRI=IRIGEL(4,1)
  502. SEGACT IMATRI
  503. C---
  504.  
  505. SEGACT MELEME
  506. NBSOUS=LISOUS(/1)
  507. IF(NBSOUS.EQ.0)NBSOUS=1
  508. NUTOEL=0
  509. DT=1.E30
  510.  
  511. DO 1 L=1,NBSOUS
  512. IPT1=MELEME
  513. IF(NBSOUS.NE.1)IPT1=LISOUS(L)
  514. SEGACT IPT1
  515.  
  516. NOM0=NOMS(IPT1.ITYPEL)//' '
  517. CALL KALPBG(NOM0,'FONFORM0',IZFFM)
  518. SEGACT IZFFM*MOD
  519.  
  520. MCHAML=ICHAML(L)
  521. SEGACT MCHAML
  522. MELVAL=IELVAL(1)
  523. SEGACT MELVAL
  524.  
  525. IF(IMACHE(L).NE.IPT1)THEN
  526. write(*,*)'IPT1,IMACHE ',IPT1,IMACHE(L)
  527. goto 90
  528. ENDIF
  529.  
  530. IZAFM=LIZAFM(L,1)
  531. IPM1=IZAFM
  532. SEGACT IZAFM
  533. IF(IAXI.NE.0)THEN
  534. IPM1=LIZAFM(L,2)
  535. SEGACT IPM1
  536. ENDIF
  537.  
  538. NP =IPT1.NUM(/1)
  539. NBEL=IPT1.NUM(/2)
  540. IES=IDIM
  541.  
  542. NPTU=UTRANS.VPOCHA(/1)
  543. NPTT=IZTGG4.VPOCHA(/1)
  544. NPTI=IZTGG4.VPOCHA(/1)
  545.  
  546. IF(IDCEN.GE.1.AND.IDCEN.LE.3)THEN
  547.  
  548. IF(IKOMP.EQ.0)THEN
  549.  
  550. CALL ZCTSCL(AM,IPM1.AM,VELCHE,IPT1.NUM,NBEL,NUTOEL,IES,NP,
  551. & IAXI,IPADI.LECT,IPADU.LECT,IPADD.LECT,IKOMP,IARG,
  552. & VISCO.VPOCHA,IKL,UTRANS.VPOCHA,IKU,NPTU,IZTGG4.VPOCHA,NPTT,
  553. & IZTGG3.VPOCHA,IKS,
  554. & IZTU1.VPOCHA,IZGG1.VPOCHA,NPTI,
  555. & MZALT.VPOCHA,MZST.VPOCHA,
  556. & IZVOL.VPOCHA,IZTCO.VPOCHA,NELZ,IDCEN,IPG,
  557. & DTM1,DT,DTT1,DTT2,NUEL,DIAEL,IZFFM.FN)
  558.  
  559. ELSEIF(IKOMP.EQ.1)THEN
  560.  
  561. NPT=IZGG1.VPOCHA(/1)
  562. CALL ZCTSCA(AM,IPM1.AM,VELCHE,IPT1.NUM,NBEL,NUTOEL,NPT,IES,NP,
  563. & IAXI,IPADI.LECT,IKOMP,IARG,IPADU.LECT,IPADD.LECT,
  564. & VISCO.VPOCHA,IKL,UTRANS.VPOCHA,IKU,NPTU,IZTGG4.VPOCHA,
  565. & IZTGG3.VPOCHA,IKS,IZTU1.VPOCHA,
  566. & IZGG1.VPOCHA,MZALT.VPOCHA,MZST.VPOCHA,
  567. & IZVOL.VPOCHA,IZTCO.VPOCHA,NELZ,IDCEN,
  568. & DTM1,DT,DTT1,DTT2,NUEL,DIAEL)
  569.  
  570. ENDIF
  571.  
  572. ELSEIF(IDCEN.EQ.6)THEN
  573.  
  574.  
  575. N=NPTU
  576. NC=1
  577. SEGINI MPOVA6
  578.  
  579. CALL ZPSI(AM,IPM1.AM,VELCHE,IPT1.NUM,NBEL,NUTOEL,NPT,IES,NP,
  580. & IAXI,IPADI.LECT,IKOMP,IARG,
  581. & VISCO.VPOCHA,IKL,UTRANS.VPOCHA,IKU,NPTU,IPADU.LECT,
  582. & IZTGG4.VPOCHA,IZTGG3.VPOCHA,IKS,IZTU1.VPOCHA,
  583. & IZGG1.VPOCHA,MZALT.VPOCHA,MZST.VPOCHA,
  584. & IZVOL.VPOCHA,IZTCO.VPOCHA,NELZ,MPOVA6.VPOCHA,
  585. & DTM1,DT,DTT1,DTT2,NUEL,DIAEL)
  586.  
  587. SEGSUP MPOVA6
  588.  
  589.  
  590.  
  591. ELSEIF(IDCEN.EQ.7)THEN
  592.  
  593. CALL ZJOHNS(AM,IPM1.AM,VELCHE,IPT1.NUM,NBEL,NUTOEL,NPT,IES,NP,
  594. & IAXI,IPADI.LECT,IKOMP,IARG,
  595. & VISCO.VPOCHA,IKL,UTRANS.VPOCHA,IKU,NPTU,IPADU.LECT,
  596. & IZTGG4.VPOCHA,IZTGG3.VPOCHA,IKS,IZTU1.VPOCHA,
  597. & IZGG1.VPOCHA,MZALT.VPOCHA,MZST.VPOCHA,
  598. & IZVOL.VPOCHA,IZTCO.VPOCHA,NELZ,
  599. & DTM1,DT,DTT1,DTT2,NUEL,DIAEL)
  600.  
  601. ENDIF
  602.  
  603.  
  604. SEGDES IZAFM*NOMOD,IPT1*NOMOD,MCHAML*NOMOD,MELVAL*NOMOD
  605. IF(IAXI.NE.0)SEGDES IPM1*NOMOD
  606. NUTOEL=NUTOEL+NBEL
  607.  
  608. 1 CONTINUE
  609. SEGDES MATRIK*NOMOD,MCHELM*NOMOD
  610. SEGDES IMATRI
  611.  
  612. IF(DT.LT.DTP)THEN
  613. CALL ECMF(MTABT,'DELTAT',DT)
  614. CALL ECMM(MTABT,'OPER','TSCAL')
  615. CALL ECMM(MTABT,'ZONE',NOMZ)
  616. CALL ECMF(MTABT,'DTCONV',DTT1)
  617. CALL ECMF(MTABT,'DTDIFU',DTT2)
  618. CALL ECMF(MTABT,'DIAEL',DIAEL)
  619. CALL ECME(MTABT,'NUEL',NUEL)
  620. ENDIF
  621. SEGDES VISCO,UTRANS
  622. IF(IKOMP.EQ.0.AND.IARG.EQ.3)SEGDES IZTGG3*NOMOD
  623. IF(IKOMP.EQ.1.AND.IARG.EQ.4)SEGDES IZTGG3*NOMOD,IZTGG4*NOMOD
  624. IF(IKOMP.EQ.1.AND.IARG.EQ.6)SEGDES IZTGG3*NOMOD,IZTGG4*NOMOD
  625. & ,MZALT*NOMOD,MZST*NOMOD
  626. SEGDES IZTU1*NOMOD
  627. SEGDES IZGG1
  628. SEGDES IZVOL*NOMOD,IZTCO*NOMOD
  629. SEGDES LINCO
  630.  
  631. C*************************************************************************
  632. ELSE IF(KFORM.EQ.1)THEN
  633. C CAS FORMULATION EF
  634.  
  635. DT=0.D0
  636. IF(IDCEN.EQ.4)THEN
  637. TYPE=' '
  638. CALL ACMO(MTABT,'DELTAT',TYPE,IENT)
  639. IF(TYPE.NE.'ENTIER')THEN
  640. WRITE(6,*)' Opérateur TSCA'
  641. WRITE(6,*)' On reclame un pas de temps'
  642. C Option %m1:8 incompatible avec les données
  643. MOTERR( 1: 8) = ' EF '
  644. CALL ERREUR(803)
  645. RETURN
  646. ELSE
  647. CALL ACMF(MTABT,'DELTAT',DT)
  648. ENDIF
  649. ENDIF
  650.  
  651. IHV=0
  652. NUTOEL=0
  653. NINKO=IZTU1.VPOCHA(/2)
  654. SEGACT MELEME
  655. NBSOUS=LISOUS(/1)
  656. IF(NBSOUS.EQ.0)NBSOUS=1
  657.  
  658. TYPE=' '
  659. CALL ACMO(MTABX,'MATELM',TYPE,MATRIK)
  660. IF(TYPE.EQ.'MATRIK'.AND.KMACO.NE.0)THEN
  661. SEGACT MATRIK
  662. NMATRI=IRIGEL(/2)
  663. MELEME=IRIGEL(1,1)
  664. SEGACT MELEME
  665. IMATRI=IRIGEL(4,1)
  666. SEGACT IMATRI
  667. NBME=LIZAFM(/2)
  668. NINKO=NBME
  669. MELEMS=KSPGP
  670.  
  671.  
  672. ELSE
  673.  
  674. NRIGE=7
  675. NKID =9
  676. NKMT =7
  677. NMATRI=1
  678. SEGINI MATRIK
  679. IRIGEL(1,1)=MELEME
  680. IRIGEL(2,1)=MELEME
  681. IRIGEL(7,1)=2
  682. NBOP=0
  683. NBME=NINKO
  684. NBELC=0
  685. CALL LEKTAB(MTABZ,'SOMMET',MELEMS)
  686. SEGINI IMATRI,IMATRS
  687. IRIGEL(4,1)=IMATRI
  688. KSPGP=MELEMS
  689. KSPGD=MELEMS
  690.  
  691. IF(NBME.EQ.1)THEN
  692. LISPRI(1)=NOMI(1:4)//' '
  693. LISDUA(1)=NOMA(1:4)//' '
  694. ELSE
  695. DO 102 I=1,NBME
  696. WRITE(NOM,FMT='(I1,A7)')I,NOMI(1:7)
  697. LISPRI(I)=NOM(1:4)//' '
  698. WRITE(NOM,FMT='(I1,A7)')I,NOMA(1:7)
  699. LISDUA(I)=NOM(1:4)//' '
  700. 102 CONTINUE
  701. ENDIF
  702.  
  703. NUTOEL=0
  704. DO 101 L=1,NBSOUS
  705. IPT1=MELEME
  706. IF(NBSOUS.NE.1)IPT1=LISOUS(L)
  707. SEGACT IPT1
  708. NOM0=NOMS(IPT1.ITYPEL)//' '
  709. CALL KALPBG(NOM0,'FONFORM ',IZFFM)
  710. SEGACT IZFFM*MOD
  711. IZHR=KZHR(1)
  712. SEGACT IZHR*MOD
  713. NES=GR(/1)
  714. NPG=GR(/3)
  715.  
  716. NP = IPT1.NUM(/1)
  717. MP = NP
  718. NBEL=IPT1.NUM(/2)
  719. SEGINI IPM1,IPS1
  720. LIZAFM(L,1)=IPM1
  721. LIZAFS(L,1)=IPS1
  722. IPM2=IPM1
  723. IPM3=IPM1
  724. IPS2=IPS1
  725. IPS3=IPS1
  726. IF(NBME.GE.2)THEN
  727. SEGINI IPM2,IPS2
  728. LIZAFM(L,2)=IPM2
  729. LIZAFS(L,2)=IPS2
  730. ENDIF
  731. IF(NBME.GE.3)THEN
  732. SEGINI IPM3,IPS3
  733. LIZAFM(L,3)=IPM3
  734. LIZAFS(L,3)=IPS3
  735. ENDIF
  736.  
  737.  
  738. KITT=2
  739. KJTT=IKL
  740. NPT=UTRANS.VPOCHA(/1)
  741. NPTG=IZTU1.VPOCHA(/1)
  742.  
  743. CALL ZCONV(FN,GR,PG,XYZ,HR,PGSQ,RPG,
  744. & NES,IDIM,NP,NPG,IAXI,AIMPL,IKOMP,
  745. & RO,1,UTRANS.VPOCHA,IKU,NPT,IPADU.LECT,VISCO.VPOCHA,IKL,
  746. & IPT1.NUM,NBEL,NUTOEL,XCOOR,
  747. & IPM1.AM,IPM2.AM,IPM3.AM,
  748. & IPS1.AM,IPS2.AM,IPS3.AM,
  749. & NINKO,IDCEN,DT,
  750. & IZTU1.VPOCHA,0,NPTG,IPADI.LECT,IZTCO.VPOCHA,NELZ)
  751.  
  752. CALL XLAPL(FN,GR,PG,XYZ,HR,PGSQ,RPG,NES,IDIM,NP,NPG,IAXI,
  753. & VISCO.VPOCHA,VISCO.VPOCHA,VISCO.VPOCHA,KITT,KJTT,IKL,
  754. & IPT1.NUM,NBEL,NUTOEL,XCOOR,AIMPL,IKOMP,
  755. & IPM1.AM,IPM2.AM,IPM3.AM,
  756. & IPS1.AM,IPS2.AM,IPS3.AM,
  757. & NINKO,IHV,IARG,VISCO.VPOCHA)
  758.  
  759. NUTOEL=NUTOEL+NBEL
  760. 101 CONTINUE
  761.  
  762. ENDIF
  763.  
  764. C On cree le CHPOINT pour les sources et eventuellement le semi
  765. C
  766. NAT=2
  767. NSOUPO=1
  768. SEGACT MELEMS
  769. N=MELEMS.NUM(/2)
  770. NC=NINKO
  771. SEGINI MCHPO1,MSOUP1,MPOVA1
  772. MCHPO1.IFOPOI=IFOUR
  773. MCHPO1.MOCHDE=TITREE
  774. MCHPO1.MTYPOI='SMBR'
  775. MCHPO1.JATTRI(1)=2
  776. MCHPO1.IPCHP(1)=MSOUP1
  777. DO 177 N=1,NINKO
  778. MSOUP1.NOCOMP(N)=LISDUA(N)
  779. 177 CONTINUE
  780. MSOUP1.IGEOC=MELEMS
  781. MSOUP1.IPOVAL=MPOVA1
  782.  
  783. CALL KRIPAD(MELEMQ,IPADQ)
  784.  
  785. SEGACT MELEMI
  786. NBSOUS=MELEMI.LISOUS(/1)
  787. IF(NBSOUS.EQ.0)NBSOUS=1
  788.  
  789. NUTOEL=0
  790. DO 1102 L=1,NBSOUS
  791. IPT1=MELEMI
  792. IF(NBSOUS.NE.1)IPT1=MELEMI.LISOUS(L)
  793. SEGACT IPT1
  794.  
  795. IF(MQUAD.NE.0)THEN
  796. IF(KPRE.EQ.2)NOM0=NOMS(IPT1.ITYPEL)//'PRP0'
  797. IF(KPRE.EQ.3)NOM0=NOMS(IPT1.ITYPEL)//'PRP0'
  798. IF(KPRE.EQ.4)NOM0=NOMS(IPT1.ITYPEL)//'PRP1'
  799. ELSEIF(MACRO.NE.0)THEN
  800. IF(KPRE.EQ.2)NOM0=NOMS(IPT1.ITYPEL)//' '
  801. IF(KPRE.EQ.3)NOM0=NOMS(IPT1.ITYPEL)//'MCP0'
  802. IF(KPRE.EQ.4)NOM0=NOMS(IPT1.ITYPEL)//'MCP1'
  803. ELSE
  804. IF(KPRE.EQ.2)NOM0=NOMS(IPT1.ITYPEL)//' '
  805. ENDIF
  806.  
  807. CALL KALPBG(NOM0,'FONFORM ',IZFFM)
  808.  
  809.  
  810. SEGACT IZFFM*MOD
  811. IZHR=KZHR(1)
  812. SEGACT IZHR*MOD
  813. NES=GR(/1)
  814. NPG=GR(/3)
  815. IZF1=KTP(1)
  816. SEGACT IZF1*MOD
  817. MP1=IZF1.FN(/1)
  818. NP = IPT1.NUM(/1)
  819. MP = NP
  820. NBEL=IPT1.NUM(/2)
  821. NELG=IZTGG3.VPOCHA(/1)
  822. NPT =MPOVA1.VPOCHA(/1)
  823. SEGACT MELEP1
  824.  
  825. IKAS=1
  826. CALL XSOUR(FN,IZF1.FN,GR,PG,XYZ,HR,PGSQ,RPG,
  827. & NES,IDIM,NP,MP1,NPG,IAXI,IPT1.NUM,IKAS,KPRE,
  828. & IZTGG3.VPOCHA,IKS,NELG,IPADQ.LECT,MELEP1.NUM,
  829. & IZTGG3.VPOCHA,IKS,IZTGG3.VPOCHA,IKS,IPADS.LECT,
  830. & NBEL,NUTOEL,XCOOR,MPOVA1.VPOCHA,NPT)
  831.  
  832. NUTOEL=NUTOEL+NBEL
  833. 1102 CONTINUE
  834. SEGSUP IPADQ
  835.  
  836.  
  837. IF(KIMPL.EQ.0.OR.KIMPL.EQ.2)THEN
  838.  
  839. NBSOUS=LISOUS(/1)
  840. IF(NBSOUS.EQ.0)NBSOUS=1
  841.  
  842. DO 1533 L=1,NBSOUS
  843. IPT1=MELEME
  844. IF(NBSOUS.NE.1)IPT1=LISOUS(L)
  845. SEGACT IPT1
  846. NP=IPT1.NUM(/1)
  847. NBEL=IPT1.NUM(/2)
  848. DO 2 N=1,NINKO
  849. IPMS=LIZAFS(L,N)
  850. SEGACT IPMS
  851. DO 12 K=1,NBEL
  852. DO 13 J=1,NP
  853. UU=0.D0
  854. IU=IPADS.LECT(IPT1.NUM(J,K))
  855. DO 14 I=1,NP
  856. IK=IPADI.LECT(IPT1.NUM(I,K))
  857. UU=UU+IPMS.AM(K,I,J)*IZTU1.VPOCHA(IK,N)
  858. 14 CONTINUE
  859. MPOVA1.VPOCHA(IU,N)=MPOVA1.VPOCHA(IU,N)+UU
  860. 13 CONTINUE
  861. 12 CONTINUE
  862.  
  863. 2 CONTINUE
  864.  
  865. 1533 CONTINUE
  866.  
  867. SEGDES IPM1,IPM2,IPM3
  868. IPS=IPS1
  869. SEGSUP IPS1
  870. IF(IPS2.NE.IPS)SEGSUP IPS2
  871. IF(IPS3.NE.IPS)SEGSUP IPS3
  872. SEGDES IZTCO
  873. ENDIF
  874.  
  875. TYPE=' '
  876. CALL ACMO(MTAB1,'SMBR',TYPE,MCHPO2)
  877. IF(TYPE.NE.'CHPOINT')THEN
  878. CALL ECMO(MTAB1,'SMBR','CHPOINT',MCHPO1)
  879. ELSE
  880. CALL ECROBJ('CHPOINT',MCHPO2)
  881. CALL ECROBJ('CHPOINT',MCHPO1)
  882. CALL OPERAD
  883. CALL LIROBJ('CHPOINT',MCHPOI,1,IRET)
  884. CALL ECMO(MTAB1,'SMBR','CHPOINT',MCHPOI)
  885. ENDIF
  886.  
  887. SEGDES IMATRI
  888. SEGDES MELEME,MATRIK
  889. IF(IKL.EQ.0)THEN
  890. SEGDES VISCO
  891. ENDIF
  892. CALL ECMO(MTABX,'MATELM','MATRIK',MATRIK)
  893.  
  894. C*************************************************************************
  895. ELSE IF(KFORM.EQ.2)THEN
  896. C CAS FORMULATION VF
  897. WRITE(6,*)' FORMULATION VF NON DISPONIBLE '
  898. C Option %m1:8 incompatible avec les données
  899. MOTERR( 1: 8) = ' EF '
  900. CALL ERREUR(803)
  901. RETURN
  902.  
  903. ENDIF
  904.  
  905. C write(6,*)' RETOUR DE TSCA '
  906. IPDI=IPADI
  907. SEGSUP IPADI
  908. IF(IPADS.NE.IPDI)SEGSUP IPADS
  909. IPAS=1
  910. RETURN
  911.  
  912.  
  913. 90 CONTINUE
  914. WRITE(6,*)' Interuption anormale de TSCAL '
  915. C Option %m1:8 incompatible avec les données
  916. CALL ERREUR(803)
  917. RETURN
  918. 1002 FORMAT(10(1X,1PE11.4))
  919. 1001 FORMAT(20(1X,I5))
  920. END
  921.  
  922.  
  923.  
  924.  
  925.  
  926.  
  927.  
  928.  
  929.  
  930.  
  931.  
  932.  
  933.  
  934.  
  935.  
  936.  
  937.  
  938.  
  939.  
  940.  
  941.  
  942.  
  943.  

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