Télécharger ynske.eso

Retour à la liste

Numérotation des lignes :

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

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