Télécharger xlap2c.eso

Retour à la liste

Numérotation des lignes :

xlap2c
  1. C XLAP2C SOURCE CB215821 20/11/25 13:43:20 10792
  2. SUBROUTINE XLAP2C(ICOGRV,MPROC,MPVITC,
  3. $ MPVOLU,MPNORM,MPSURF,MELEFL,
  4. $ KRFACE,KRCENT,LCLIMV,KRVIMP,LCLITO,KRTOIM,
  5. $ NOMINC,
  6. $ MPMUC,
  7. $ IJACO,
  8. $ IMPR,IRET)
  9. IMPLICIT INTEGER(I-N)
  10. IMPLICIT REAL*8 (A-H,O-Z)
  11. C***********************************************************************
  12. C NOM : XLAP2C
  13. C DESCRIPTION : Calcul de la matrice jacobienne du résidu du laplacien
  14. C VF 3D.
  15. C Ici, on ne calcule que les contributions 'simples'
  16. C à la matrice jacobienne faisant intervenir les
  17. C coefficients pour le calcul des gradients de vitesse
  18. C (ICOGRV).
  19. C (contributions à (d Res_{\rho u} / d var) et (d
  20. C Res_{\rho v} / d var) et (d Res_{\rho w} / d var)
  21. C var prenant successivement les valeurs :
  22. C \rho, \rho u, \rho v, \rho w \rho e_t )
  23. C
  24. C
  25. C NOTE PERSO : On pourrait programmer ça plus lisiblement en stockant
  26. C les contributions dans un tableau de pointeurs (2
  27. C indices, c'est possible ?) et en effectuant des produits
  28. C matriciels (coeff. x matrices de dérivées).
  29. C On n'y coupera pas si on veut regrouper 2D et 3D...
  30. C On ne va pas le faire.
  31. C
  32. C
  33. C LANGAGE : ESOPE
  34. C AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
  35. C mél : gounand@semt2.smts.cea.fr
  36. C***********************************************************************
  37. C APPELES (UTIL) : AJMTK : ajoute un objet de type MATSIM (non
  38. C standard) à un objet de type MATRIK.
  39. C APPELE PAR : XLAP2A : Calcul de la matrice jacobienne du
  40. C résidu du laplacien VF 2D.
  41. C***********************************************************************
  42. C ENTREES : ICOGRV (type MCHELM) : coefficients pour le
  43. C calcul du gradient de la vitesse aux
  44. C interfaces.
  45. C MPROC (type MPOVAL) : masse volumique par
  46. C élément.
  47. C MPVITC (type MPOVAL) : vitesse par élément.
  48. C MPVOLU (type MPOVAL) : volume des éléments.
  49. C MPNORM (type MPOVAL) : normale aux faces.
  50. C MPSURF (type MPOVAL) : surface des faces.
  51. C MELEFL (type MELEME) : connectivités face-(centre
  52. C gauche, centre droit).
  53. C KRFACE (type MLENTI) : tableau de repérage dans
  54. C le maillage des faces des éléments.
  55. C KRCENT (type MLENTI) : tableau de repérage dans
  56. C le maillage des centres des éléments.
  57. C LCLIMV (type logique) : .TRUE. => CL de Dirichlet
  58. C sur la vitesse.
  59. C KRVIMP (type MLENTI) : tableau de repérage dans
  60. C maillage des CL de Dirichlet sur la
  61. C vitesse.
  62. C LCLITO (type logique) : .TRUE. => CL de Dirichlet
  63. C sur le tenseur des contraintes.
  64. C KRTOIM (type MLENTI) : tableau de repérage dans
  65. C maillage des CL de Dirichlet sur le tenseur des
  66. C contraintes
  67. C NOMINC (type MLMOTS) : noms des inconnues.
  68. C MPMUC (type MPOVAL) : viscosité dynamique (SI).
  69. C ENTREES/SORTIES : IJACO (type MATRIK) : matrice jacobienne du
  70. C résidu du laplacien VF 2D.
  71. C SORTIES : -
  72. C CODE RETOUR (IRET) : = 0 si tout s'est bien passé
  73. C***********************************************************************
  74. C VERSION : v1, 05/03/2002, version initiale
  75. C HISTORIQUE : v1, 05/03/2002, création
  76. C HISTORIQUE :
  77. C HISTORIQUE :
  78. C***********************************************************************
  79. C Prière de PRENDRE LE TEMPS de compléter les commentaires
  80. C en cas de modification de ce sous-programme afin de faciliter
  81. C la maintenance !
  82. C***********************************************************************
  83.  
  84. -INC PPARAM
  85. -INC CCOPTIO
  86. -INC SMCOORD
  87. -INC SMCHPOI
  88. POINTEUR MPMUC.MPOVAL
  89. POINTEUR MPROC.MPOVAL ,MPVITC.MPOVAL
  90. POINTEUR MPSURF.MPOVAL,MPNORM.MPOVAL,MPVOLU.MPOVAL
  91. -INC SMCHAML
  92. POINTEUR ICOGRV.MCHELM,JCOGRV.MCHAML
  93. POINTEUR KDUNDX.MELVAL,KDUNDY.MELVAL,KDUNDZ.MELVAL
  94. -INC SMELEME
  95. POINTEUR MELEFL.MELEME
  96. POINTEUR MCOGRV.MELEME
  97. -INC SMLENTI
  98. POINTEUR KRVIMP.MLENTI,KRTOIM.MLENTI
  99. POINTEUR KRCENT.MLENTI,KRFACE.MLENTI
  100. -INC SMLMOTS
  101. POINTEUR NOMINC.MLMOTS
  102. POINTEUR IJACO.MATRIK
  103. *
  104. * Objet matrice élémentaire simplifié
  105. *
  106. SEGMENT GMATSI
  107. INTEGER POIPR1(NPP1,NEL1)
  108. INTEGER POIDU1(1,NEL1)
  109. INTEGER POIPR2(NPP2,NEL2)
  110. INTEGER POIDU2(2,NEL2)
  111. POINTEUR LMATSI(0).MATSIM
  112. ENDSEGMENT
  113. * Contributions simples de la part du gradient de
  114. * vitesse (CTSGRV)
  115. POINTEUR CTSGRV.GMATSI
  116. SEGMENT MATSIM
  117. CHARACTER*8 NOMPRI,NOMDUA
  118. REAL*8 VALMA1(1,NPP1,NEL1)
  119. REAL*8 VALMA2(2,NPP2,NEL2)
  120. ENDSEGMENT
  121. POINTEUR ROURHO.MATSIM
  122. POINTEUR ROVRHO.MATSIM
  123. POINTEUR ROWRHO.MATSIM
  124. POINTEUR ROUROU.MATSIM
  125. POINTEUR ROVROU.MATSIM
  126. POINTEUR ROWROU.MATSIM
  127. POINTEUR ROUROV.MATSIM
  128. POINTEUR ROVROV.MATSIM
  129. POINTEUR ROWROV.MATSIM
  130. POINTEUR ROUROW.MATSIM
  131. POINTEUR ROVROW.MATSIM
  132. POINTEUR ROWROW.MATSIM
  133. *
  134. REAL*8 MU
  135. *
  136. INTEGER IMPR,IRET
  137. *
  138. LOGICAL LCLIMV,LCLITO
  139. LOGICAL LMUR
  140. LOGICAL LCTRB1,LCTRB2
  141. *
  142. INTEGER IELEM,IPD,IPP,ISOUCH,IEL1,IEL2
  143. INTEGER NELEM,NPD,NPP,NSOUCH,NEL1,NEL2,NPP1,NPP2
  144. INTEGER NGCDRO,NGCGAU,NGFACE,NPPRIM,NPDUAL
  145. INTEGER NLCENP,NLCEND,NLFACE,NLCLTO,NLCLV
  146. INTEGER NPTEL
  147. *
  148. REAL*8 ALPHAX,ALPHAY,ALPHAZ,CNX,CNY,CNZ
  149. REAL*8 SIGNOR,SURFFA,VOLUEL
  150. REAL*8 RHOP,UP,VP,WP
  151. REAL*8 FACTOR
  152. REAL*8 DUDRHO,DUDROU
  153. REAL*8 DVDRHO,DVDROV
  154. REAL*8 DWDRHO,DWDROW
  155. REAL*8 BROUDU,BROUDV,BROUDW
  156. REAL*8 BROVDU,BROVDV,BROVDW
  157. REAL*8 BROWDU,BROWDV,BROWDW
  158. *
  159. INTEGER ICOORX,NLCGAU,NLCDRO
  160. REAL*8 XF,YF,ZF,XG,YG,ZG,XFMXG,YFMYG,ZFMZG,DRG
  161. & ,XD,YD,ZD,XFMXD,YFMYD,ZFMZD,DRD,ALPHA,UMALPH
  162. C
  163. *
  164. * Executable statements
  165. *
  166. IF (IMPR.GT.2) WRITE(IOIMP,*) 'Entrée dans xlap2c.eso'
  167. * On calcule les contributions à (d Res_{\rho u} / d var), (d
  168. * Res_{\rho v} / d var) et (d Res_{\rho w} / d var) ; var prenant
  169. * successivement les valeurs :
  170. * \rho, \rho u, \rho v, \rho w, \rho e_t
  171. * Note :
  172. * - (d Res_{\rho u} / d \rho e_t) = 0
  173. * - (d Res_{\rho v} / d \rho e_t) = 0
  174. * - (d Res_{\rho w} / d \rho e_t) = 0
  175. * On dérive les termes : \tens{\tau} \prod \vect{n}
  176. * Les noms de matrices élémentaires (type MATSIM) associées sont :
  177. * ROURHO, ROUROU, ROUROV, ROUROW,
  178. * ROVRHO, ROVROU, ROVROV, ROVROW,
  179. * ROWRHO, ROWROU, ROWROV, ROWROW.
  180. IF (LCLIMV) THEN
  181. SEGACT KRVIMP
  182. ENDIF
  183. IF (LCLITO) THEN
  184. SEGACT KRTOIM
  185. ENDIF
  186. SEGACT NOMINC
  187. SEGACT KRCENT
  188. SEGACT KRFACE
  189. SEGACT MELEFL
  190. SEGACT MPSURF
  191. SEGACT MPNORM
  192. SEGACT MPVOLU
  193. SEGACT MPMUC
  194. SEGACT MPROC
  195. SEGACT MPVITC
  196. SEGACT ICOGRV
  197. NSOUCH=ICOGRV.IMACHE(/1)
  198. DO 1 ISOUCH=1,NSOUCH
  199. MCOGRV=ICOGRV.IMACHE(ISOUCH)
  200. JCOGRV=ICOGRV.ICHAML(ISOUCH)
  201. SEGACT JCOGRV
  202. KDUNDX=JCOGRV.IELVAL(1)
  203. KDUNDY=JCOGRV.IELVAL(2)
  204. KDUNDZ=JCOGRV.IELVAL(3)
  205. SEGDES JCOGRV
  206. SEGACT KDUNDX
  207. SEGACT KDUNDY
  208. SEGACT KDUNDZ
  209. SEGACT MCOGRV
  210. NELEM=MCOGRV.NUM(/2)
  211. NPTEL=MCOGRV.NUM(/1)
  212. NPP1=NPTEL-1
  213. NPP2=NPTEL-1
  214. NEL1=NELEM
  215. NEL2=NELEM
  216. IEL1=1
  217. IEL2=1
  218. SEGINI ROURHO
  219. SEGINI ROVRHO
  220. SEGINI ROWRHO
  221. SEGINI ROUROU
  222. SEGINI ROVROU
  223. SEGINI ROWROU
  224. SEGINI ROUROV
  225. SEGINI ROVROV
  226. SEGINI ROWROV
  227. SEGINI ROUROW
  228. SEGINI ROVROW
  229. SEGINI ROWROW
  230. SEGINI CTSGRV
  231. ROURHO.NOMPRI(1:4)=NOMINC.MOTS(1)
  232. ROURHO.NOMPRI(5:8)=' '
  233. ROURHO.NOMDUA(1:4)=NOMINC.MOTS(2)
  234. ROURHO.NOMDUA(5:8)=' '
  235. ROVRHO.NOMPRI(1:4)=NOMINC.MOTS(1)
  236. ROVRHO.NOMPRI(5:8)=' '
  237. ROVRHO.NOMDUA(1:4)=NOMINC.MOTS(3)
  238. ROVRHO.NOMDUA(5:8)=' '
  239. ROWRHO.NOMPRI(1:4)=NOMINC.MOTS(1)
  240. ROWRHO.NOMPRI(5:8)=' '
  241. ROWRHO.NOMDUA(1:4)=NOMINC.MOTS(4)
  242. ROWRHO.NOMDUA(5:8)=' '
  243. ROUROU.NOMPRI(1:4)=NOMINC.MOTS(2)
  244. ROUROU.NOMPRI(5:8)=' '
  245. ROUROU.NOMDUA(1:4)=NOMINC.MOTS(2)
  246. ROUROU.NOMDUA(5:8)=' '
  247. ROVROU.NOMPRI(1:4)=NOMINC.MOTS(2)
  248. ROVROU.NOMPRI(5:8)=' '
  249. ROVROU.NOMDUA(1:4)=NOMINC.MOTS(3)
  250. ROVROU.NOMDUA(5:8)=' '
  251. ROWROU.NOMPRI(1:4)=NOMINC.MOTS(2)
  252. ROWROU.NOMPRI(5:8)=' '
  253. ROWROU.NOMDUA(1:4)=NOMINC.MOTS(4)
  254. ROWROU.NOMDUA(5:8)=' '
  255. ROUROV.NOMPRI(1:4)=NOMINC.MOTS(3)
  256. ROUROV.NOMPRI(5:8)=' '
  257. ROUROV.NOMDUA(1:4)=NOMINC.MOTS(2)
  258. ROUROV.NOMDUA(5:8)=' '
  259. ROVROV.NOMPRI(1:4)=NOMINC.MOTS(3)
  260. ROVROV.NOMPRI(5:8)=' '
  261. ROVROV.NOMDUA(1:4)=NOMINC.MOTS(3)
  262. ROVROV.NOMDUA(5:8)=' '
  263. ROWROV.NOMPRI(1:4)=NOMINC.MOTS(3)
  264. ROWROV.NOMPRI(5:8)=' '
  265. ROWROV.NOMDUA(1:4)=NOMINC.MOTS(4)
  266. ROWROV.NOMDUA(5:8)=' '
  267. ROUROW.NOMPRI(1:4)=NOMINC.MOTS(4)
  268. ROUROW.NOMPRI(5:8)=' '
  269. ROUROW.NOMDUA(1:4)=NOMINC.MOTS(2)
  270. ROUROW.NOMDUA(5:8)=' '
  271. ROVROW.NOMPRI(1:4)=NOMINC.MOTS(4)
  272. ROVROW.NOMPRI(5:8)=' '
  273. ROVROW.NOMDUA(1:4)=NOMINC.MOTS(3)
  274. ROVROW.NOMDUA(5:8)=' '
  275. ROWROW.NOMPRI(1:4)=NOMINC.MOTS(4)
  276. ROWROW.NOMPRI(5:8)=' '
  277. ROWROW.NOMDUA(1:4)=NOMINC.MOTS(4)
  278. ROWROW.NOMDUA(5:8)=' '
  279. DO 12 IELEM=1,NELEM
  280. * Le premier point du support de ICOGRV est un point FACE
  281. NGFACE=MCOGRV.NUM(1,IELEM)
  282. NLFACE=KRFACE.LECT(NGFACE)
  283. IF (NLFACE.EQ.0) THEN
  284. WRITE(IOIMP,*) 'Erreur de programmation n°1'
  285. GOTO 9999
  286. ENDIF
  287. * On calcule la contribution à la matrice jacobienne IJACO de la face
  288. * NGFAC (points duaux : centres à gauche et à droite de la face)
  289. * (points primaux : une partie (bicoz conditions aux limites)
  290. * de ceux du stencil pour le calcul du gradient
  291. * à la face, ils doivent être des points centres)
  292. * Si le tenseur des contraintes sur la face est imposé par les
  293. * conditions aux limites, la contribution de la face à IJACO est
  294. * nulle.
  295. LCTRB1=.TRUE.
  296. IF (LCLITO) THEN
  297. NLCLTO=KRTOIM.LECT(NGFACE)
  298. IF (NLCLTO.NE.0) THEN
  299. LCTRB1=.FALSE.
  300. ENDIF
  301. ENDIF
  302. IF (LCTRB1) THEN
  303. NGCGAU=MELEFL.NUM(1,NLFACE)
  304. NGCDRO=MELEFL.NUM(3,NLFACE)
  305. NLCGAU=KRCENT.LECT(NGCGAU)
  306. NLCDRO=KRCENT.LECT(NGCDRO)
  307. LMUR=(NGCGAU.EQ.NGCDRO)
  308. * On distingue le cas où la face est un bord du maillage (mur)
  309. * du cas où la face est interne au maillage
  310. IF (.NOT.LMUR) THEN
  311. NPD=2
  312. ICOORX = ((IDIM + 1) * (NGFACE - 1))+1
  313. XF = MCOORD.XCOOR(ICOORX)
  314. YF = MCOORD.XCOOR(ICOORX+1)
  315. ZF = MCOORD.XCOOR(ICOORX+2)
  316. ICOORX = ((IDIM + 1) * (NGCGAU - 1))+1
  317. XG = MCOORD.XCOOR(ICOORX)
  318. YG = MCOORD.XCOOR(ICOORX+1)
  319. ZG = MCOORD.XCOOR(ICOORX+2)
  320. XFMXG = XF - XG
  321. YFMYG = YF - YG
  322. ZFMZG = ZF - ZG
  323. DRG=SQRT((XFMXG*XFMXG)+(YFMYG*YFMYG)+(ZFMZG*ZFMZG))
  324. ICOORX = ((IDIM + 1) * (NGCDRO - 1))+1
  325. XD = MCOORD.XCOOR(ICOORX)
  326. YD = MCOORD.XCOOR(ICOORX+1)
  327. ZD = MCOORD.XCOOR(ICOORX+2)
  328. XFMXD = XF - XD
  329. YFMYD = YF - YD
  330. ZFMZD = ZF - ZD
  331. DRD=SQRT((XFMXD*XFMXD)+(YFMYD*YFMYD)+(ZFMZD*ZFMZD))
  332. ALPHA=DRG/(DRG+DRD)
  333. UMALPH= 1.0D0 - ALPHA
  334. ELSE
  335. NPD=1
  336. ALPHA=0.0D0
  337. UMALPH=1.0D0
  338. ENDIF
  339. MU=UMALPH*MPMUC.VPOCHA(NLCGAU,1) +
  340. & ALPHA*MPMUC.VPOCHA(NLCDRO,1)
  341. NPP=NPTEL-1
  342. * IPD=1 : point à gauche du point NGFACE
  343. * IPD=2 : point à droite du point NGFACE
  344. DO 122 IPD=1,NPD
  345. NPDUAL=MELEFL.NUM((2*IPD)-1,NLFACE)
  346. IF (.NOT.LMUR) THEN
  347. CTSGRV.POIDU2(IPD,IEL2)=NPDUAL
  348. ELSE
  349. CTSGRV.POIDU1(IPD,IEL1)=NPDUAL
  350. ENDIF
  351. NLCEND=KRCENT.LECT(NPDUAL)
  352. IF (NLCEND.EQ.0) THEN
  353. WRITE(IOIMP,*) 'Erreur grave n°1'
  354. GOTO 9999
  355. ENDIF
  356. DO 124 IPP=1,NPP
  357. NPPRIM=MCOGRV.NUM(IPP+1,IELEM)
  358. LCTRB2=.TRUE.
  359. IF (LCLIMV) THEN
  360. NLCLV=KRVIMP.LECT(NPPRIM)
  361. IF (NLCLV.NE.0) THEN
  362. LCTRB2=.FALSE.
  363. ENDIF
  364. ENDIF
  365. IF (.NOT.LCTRB2) THEN
  366. * Lorsque une contribution est nulle, on fixe artificiellement le
  367. * point primal égal au point dual.
  368. IF (.NOT.LMUR) THEN
  369. CTSGRV.POIPR2(IPP,IEL2)=NPDUAL
  370. ROURHO.VALMA2(IPD,IPP,IEL2)=0.D0
  371. ROVRHO.VALMA2(IPD,IPP,IEL2)=0.D0
  372. ROWRHO.VALMA2(IPD,IPP,IEL2)=0.D0
  373. ROUROU.VALMA2(IPD,IPP,IEL2)=0.D0
  374. ROVROU.VALMA2(IPD,IPP,IEL2)=0.D0
  375. ROWROU.VALMA2(IPD,IPP,IEL2)=0.D0
  376. ROUROV.VALMA2(IPD,IPP,IEL2)=0.D0
  377. ROVROV.VALMA2(IPD,IPP,IEL2)=0.D0
  378. ROWROV.VALMA2(IPD,IPP,IEL2)=0.D0
  379. ROUROW.VALMA2(IPD,IPP,IEL2)=0.D0
  380. ROVROW.VALMA2(IPD,IPP,IEL2)=0.D0
  381. ROWROW.VALMA2(IPD,IPP,IEL2)=0.D0
  382. ELSE
  383. CTSGRV.POIPR1(IPP,IEL1)=NPDUAL
  384. ROURHO.VALMA1(IPD,IPP,IEL1)=0.D0
  385. ROVRHO.VALMA1(IPD,IPP,IEL1)=0.D0
  386. ROWRHO.VALMA1(IPD,IPP,IEL1)=0.D0
  387. ROUROU.VALMA1(IPD,IPP,IEL1)=0.D0
  388. ROVROU.VALMA1(IPD,IPP,IEL1)=0.D0
  389. ROWROU.VALMA1(IPD,IPP,IEL1)=0.D0
  390. ROUROV.VALMA1(IPD,IPP,IEL1)=0.D0
  391. ROVROV.VALMA1(IPD,IPP,IEL1)=0.D0
  392. ROWROV.VALMA1(IPD,IPP,IEL1)=0.D0
  393. ROUROW.VALMA1(IPD,IPP,IEL1)=0.D0
  394. ROVROW.VALMA1(IPD,IPP,IEL1)=0.D0
  395. ROWROW.VALMA1(IPD,IPP,IEL1)=0.D0
  396. ENDIF
  397. ELSE
  398. * Les contributions valent :
  399. * 1. (d Res_{\rho u})_d / (d var)_p =
  400. * +/-1 (normale sortante, rentrante) (1/V_d) * (S_f) * \mu
  401. * * [ [ ( 4/3 (n_x * \alpha_x) + (n_y * \alpha_y)
  402. * + (n_z * \alpha_z)) *
  403. * ((du)_p / (d var)_p)]
  404. * + [ (-2/3 (n_x * \alpha_y) + (n_y * \alpha_x)) *
  405. * ((dv)_p / (d var)_p)]
  406. * + [ (-2/3 (n_x * \alpha_z) + (n_z * \alpha_x)) *
  407. * ((dw)_p / (d var)_p)]
  408. * ]
  409. * 2. (d Res_{\rho v})_d / (d var)_p =
  410. * +/-1 (normale sortante, rentrante) (1/V_d) * (S_f) * \mu
  411. * * [ [ (-2/3 (n_y * \alpha_x) + (n_x * \alpha_y)) *
  412. * ((du)_p / (d var)_p)]
  413. * + [ ( 4/3 (n_y * \alpha_y) + (n_x * \alpha_x)
  414. * + (n_z * \alpha_z)) *
  415. * ((dv)_p / (d var)_p)]
  416. * + [ (-2/3 (n_y * \alpha_z) + (n_z * \alpha_y)) *
  417. * ((dw)_p / (d var)_p)]
  418. * ]
  419. * 3. (d Res_{\rho w})_d / (d var)_p =
  420. * +/-1 (normale sortante, rentrante) (1/V_d) * (S_f) * \mu
  421. * * [ [ (-2/3 (n_z * \alpha_x) + (n_x * \alpha_z)) *
  422. * ((du)_p / (d var)_p)]
  423. * + [ (-2/3 (n_z * \alpha_y) + (n_y * \alpha_z)) *
  424. * ((dv)_p / (d var)_p)]
  425. * + [ ( 4/3 (n_z * \alpha_z) + (n_x * \alpha_x)
  426. * + (n_y * \alpha_y)) *
  427. * ((dw)_p / (d var)_p)]
  428. * ]
  429. *
  430. * avec :
  431. * (du)_p / (d \rho)_p = - u / \rho_p
  432. * (du)_p / (d \rho u)_p = 1 / \rho_p
  433. * (du)_p / (d \rho v)_p = 0
  434. * (du)_p / (d \rho w)_p = 0
  435. * (dv)_p / (d \rho)_p = - v / \rho_p
  436. * (dv)_p / (d \rho u)_p = 0
  437. * (dv)_p / (d \rho v)_p = 1 / \rho_p
  438. * (dv)_p / (d \rho w)_p = 0
  439. * (dv)_p / (d \rho)_p = - w / \rho_p
  440. * (dv)_p / (d \rho u)_p = 0
  441. * (dv)_p / (d \rho v)_p = 0
  442. * (dv)_p / (d \rho w)_p = 1 / \rho_p
  443. *
  444. NLCENP=KRCENT.LECT(NPPRIM)
  445. IF (NLCENP.EQ.0) THEN
  446. WRITE(IOIMP,*) 'Erreur grave n°2'
  447. GOTO 9999
  448. ENDIF
  449. * normale sortante pour IPD=1, rentrante pour IPD=2
  450. SIGNOR=(-1.D0)**(IPD+1)
  451. VOLUEL=MPVOLU.VPOCHA(NLCEND,1)
  452. SURFFA=MPSURF.VPOCHA(NLFACE,1)
  453. CNX =MPNORM.VPOCHA(NLFACE,1)
  454. CNY =MPNORM.VPOCHA(NLFACE,2)
  455. CNZ =MPNORM.VPOCHA(NLFACE,3)
  456. ALPHAX=KDUNDX.VELCHE(IPP+1,IELEM)
  457. ALPHAY=KDUNDY.VELCHE(IPP+1,IELEM)
  458. ALPHAZ=KDUNDZ.VELCHE(IPP+1,IELEM)
  459. RHOP =MPROC.VPOCHA(NLCENP,1)
  460. UP =MPVITC.VPOCHA(NLCENP,1)
  461. VP =MPVITC.VPOCHA(NLCENP,2)
  462. WP =MPVITC.VPOCHA(NLCENP,3)
  463. FACTOR=SIGNOR*(1.D0/VOLUEL)*SURFFA*MU
  464. BROUDU=(( 4.D0/3.D0)*(CNX*ALPHAX))
  465. $ + (CNY*ALPHAY) + (CNZ*ALPHAZ)
  466. BROUDV=((-2.D0/3.D0)*(CNX*ALPHAY))
  467. $ + (CNY*ALPHAX)
  468. BROUDW=((-2.D0/3.D0)*(CNX*ALPHAZ))
  469. $ + (CNZ*ALPHAX)
  470. BROVDU=((-2.D0/3.D0)*(CNY*ALPHAX))
  471. $ + (CNX*ALPHAY)
  472. BROVDV=(( 4.D0/3.D0)*(CNY*ALPHAY))
  473. $ + (CNX*ALPHAX) + (CNZ*ALPHAZ)
  474. BROVDW=((-2.D0/3.D0)*(CNY*ALPHAZ))
  475. $ + (CNZ*ALPHAY)
  476. BROWDU=((-2.D0/3.D0)*(CNZ*ALPHAX))
  477. $ + (CNX*ALPHAZ)
  478. BROWDV=((-2.D0/3.D0)*(CNZ*ALPHAY))
  479. $ + (CNY*ALPHAZ)
  480. BROWDW=(( 4.D0/3.D0)*(CNZ*ALPHAZ))
  481. $ + (CNX*ALPHAX) + (CNY*ALPHAY)
  482. DUDRHO=-UP /RHOP
  483. DUDROU=1.D0/RHOP
  484. DVDRHO=-VP /RHOP
  485. DVDROV=1.D0/RHOP
  486. DWDRHO=-WP /RHOP
  487. DWDROW=1.D0/RHOP
  488. IF (.NOT.LMUR) THEN
  489. CTSGRV.POIPR2(IPP,IEL2)=NPPRIM
  490. ROURHO.VALMA2(IPD,IPP,IEL2)=
  491. $ FACTOR*((BROUDU*DUDRHO)
  492. $ +(BROUDV*DVDRHO)+(BROUDW*DWDRHO))
  493. ROVRHO.VALMA2(IPD,IPP,IEL2)=
  494. $ FACTOR*((BROVDU*DUDRHO)
  495. $ +(BROVDV*DVDRHO)+(BROVDW*DWDRHO))
  496. ROWRHO.VALMA2(IPD,IPP,IEL2)=
  497. $ FACTOR*((BROWDU*DUDRHO)
  498. $ +(BROWDV*DVDRHO)+(BROWDW*DWDRHO))
  499. ROUROU.VALMA2(IPD,IPP,IEL2)=
  500. $ FACTOR* (BROUDU*DUDROU)
  501. ROVROU.VALMA2(IPD,IPP,IEL2)=
  502. $ FACTOR* (BROVDU*DUDROU)
  503. ROWROU.VALMA2(IPD,IPP,IEL2)=
  504. $ FACTOR* (BROWDU*DUDROU)
  505. ROUROV.VALMA2(IPD,IPP,IEL2)=
  506. $ FACTOR* (BROUDV*DVDROV)
  507. ROVROV.VALMA2(IPD,IPP,IEL2)=
  508. $ FACTOR* (BROVDV*DVDROV)
  509. ROWROV.VALMA2(IPD,IPP,IEL2)=
  510. $ FACTOR* (BROWDV*DVDROV)
  511. ROUROW.VALMA2(IPD,IPP,IEL2)=
  512. $ FACTOR* (BROUDW*DWDROW)
  513. ROVROW.VALMA2(IPD,IPP,IEL2)=
  514. $ FACTOR* (BROVDW*DWDROW)
  515. ROWROW.VALMA2(IPD,IPP,IEL2)=
  516. $ FACTOR* (BROWDW*DWDROW)
  517. ELSE
  518. CTSGRV.POIPR1(IPP,IEL1)=NPPRIM
  519. ROURHO.VALMA1(IPD,IPP,IEL1)=
  520. $ FACTOR*((BROUDU*DUDRHO)
  521. $ +(BROUDV*DVDRHO)+(BROUDW*DWDRHO))
  522. ROVRHO.VALMA1(IPD,IPP,IEL1)=
  523. $ FACTOR*((BROVDU*DUDRHO)
  524. $ +(BROVDV*DVDRHO)+(BROVDW*DWDRHO))
  525. ROWRHO.VALMA1(IPD,IPP,IEL1)=
  526. $ FACTOR*((BROWDU*DUDRHO)
  527. $ +(BROWDV*DVDRHO)+(BROWDW*DWDRHO))
  528. ROUROU.VALMA1(IPD,IPP,IEL1)=
  529. $ FACTOR* (BROUDU*DUDROU)
  530. ROVROU.VALMA1(IPD,IPP,IEL1)=
  531. $ FACTOR* (BROVDU*DUDROU)
  532. ROWROU.VALMA1(IPD,IPP,IEL1)=
  533. $ FACTOR* (BROWDU*DUDROU)
  534. ROUROV.VALMA1(IPD,IPP,IEL1)=
  535. $ FACTOR* (BROUDV*DVDROV)
  536. ROVROV.VALMA1(IPD,IPP,IEL1)=
  537. $ FACTOR* (BROVDV*DVDROV)
  538. ROWROV.VALMA1(IPD,IPP,IEL1)=
  539. $ FACTOR* (BROWDV*DVDROV)
  540. ROUROW.VALMA1(IPD,IPP,IEL1)=
  541. $ FACTOR* (BROUDW*DWDROW)
  542. ROVROW.VALMA1(IPD,IPP,IEL1)=
  543. $ FACTOR* (BROVDW*DWDROW)
  544. ROWROW.VALMA1(IPD,IPP,IEL1)=
  545. $ FACTOR* (BROWDW*DWDROW)
  546. ENDIF
  547. ENDIF
  548. 124 CONTINUE
  549. 122 CONTINUE
  550. IF (.NOT.LMUR) THEN
  551. IEL2=IEL2+1
  552. ELSE
  553. IEL1=IEL1+1
  554. ENDIF
  555. ENDIF
  556. 12 CONTINUE
  557. NPP1=NPTEL-1
  558. NPP2=NPTEL-1
  559. NEL1=IEL1-1
  560. NEL2=IEL2-1
  561. SEGADJ ROURHO
  562. SEGADJ ROVRHO
  563. SEGADJ ROWRHO
  564. SEGADJ ROUROU
  565. SEGADJ ROVROU
  566. SEGADJ ROWROU
  567. SEGADJ ROUROV
  568. SEGADJ ROVROV
  569. SEGADJ ROWROV
  570. SEGADJ ROUROW
  571. SEGADJ ROVROW
  572. SEGADJ ROWROW
  573. SEGADJ CTSGRV
  574. CTSGRV.LMATSI(**)=ROURHO
  575. CTSGRV.LMATSI(**)=ROVRHO
  576. CTSGRV.LMATSI(**)=ROWRHO
  577. CTSGRV.LMATSI(**)=ROUROU
  578. CTSGRV.LMATSI(**)=ROVROU
  579. CTSGRV.LMATSI(**)=ROWROU
  580. CTSGRV.LMATSI(**)=ROUROV
  581. CTSGRV.LMATSI(**)=ROVROV
  582. CTSGRV.LMATSI(**)=ROWROV
  583. CTSGRV.LMATSI(**)=ROUROW
  584. CTSGRV.LMATSI(**)=ROVROW
  585. CTSGRV.LMATSI(**)=ROWROW
  586. * On accumule les matrices résultantes dans IJACO
  587. CALL AJMTK(CTSGRV,IJACO,IMPR,IRET)
  588. IF (IRET.NE.0) GOTO 9999
  589. SEGSUP ROURHO
  590. SEGSUP ROVRHO
  591. SEGSUP ROWRHO
  592. SEGSUP ROUROU
  593. SEGSUP ROVROU
  594. SEGSUP ROWROU
  595. SEGSUP ROUROV
  596. SEGSUP ROVROV
  597. SEGSUP ROWROV
  598. SEGSUP ROUROW
  599. SEGSUP ROVROW
  600. SEGSUP ROWROW
  601. SEGSUP CTSGRV
  602. *
  603. SEGDES MCOGRV
  604. SEGDES KDUNDZ
  605. SEGDES KDUNDY
  606. SEGDES KDUNDX
  607. 1 CONTINUE
  608. SEGDES ICOGRV
  609. SEGDES MPVITC
  610. SEGDES MPMUC
  611. SEGDES MPROC
  612. SEGDES MPVOLU
  613. SEGDES MPNORM
  614. SEGDES MPSURF
  615. SEGDES MELEFL
  616. SEGDES KRFACE
  617. SEGDES KRCENT
  618. SEGDES NOMINC
  619. IF (LCLITO) THEN
  620. SEGDES KRTOIM
  621. ENDIF
  622. IF (LCLIMV) THEN
  623. SEGDES KRVIMP
  624. ENDIF
  625. *
  626. * Normal termination
  627. *
  628. IRET=0
  629. RETURN
  630. *
  631. * Format handling
  632. *
  633. *
  634. * Error handling
  635. *
  636. 9999 CONTINUE
  637. IRET=1
  638. WRITE(IOIMP,*) 'An error was detected in subroutine xlap2c'
  639. RETURN
  640. *
  641. * End of subroutine XLAP2C
  642. *
  643. END
  644.  
  645.  
  646.  
  647.  
  648.  
  649.  
  650.  
  651.  
  652.  
  653.  
  654.  
  655.  
  656.  

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