Télécharger ynske.eso

Retour à la liste

Numérotation des lignes :

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

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