Télécharger ylap2d.eso

Retour à la liste

Numérotation des lignes :

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

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