Télécharger xlap2d.eso

Retour à la liste

Numérotation des lignes :

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

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