Télécharger zns.eso

Retour à la liste

Numérotation des lignes :

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

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