Télécharger ylap2e.eso

Retour à la liste

Numérotation des lignes :

ylap2e
  1. C YLAP2E SOURCE CB215821 20/11/25 13:44:20 10792
  2. SUBROUTINE YLAP2E(ICOGRV,MPGRVF,MPROC,MPVITC,
  3. $ MPVOLU,MPNORM,MPSURF,MELEFL,
  4. $ KRFACE,KRCENT,
  5. $ LCLIMV,KRVIMP,MPVIMP,
  6. $ LCLITO,KRTOIM,
  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 : YLAP2E
  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. ylap1c) car on a à dériver des produits
  26. C de fonctions de la vitesse.
  27. C ylap2d 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 LANGAGE : ESOPE
  38. C AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
  39. C mél : gounand@semt2.smts.cea.fr
  40. C***********************************************************************
  41. C APPELES (UTIL) : AJMTK : ajoute un objet de type MATSIM (non
  42. C standard) à un objet de type MATRIK.
  43. C APPELE PAR : YLAP2A : Calcul de la matrice jacobienne du
  44. C résidu du laplacien VF 3D.
  45. C***********************************************************************
  46. C ENTREES : ICOGRV (type MCHELM) : coefficients pour le
  47. C calcul du gradient de la vitesse aux
  48. C interfaces.
  49. C MPGRVF (type MPOVAL) : gradient de la vitesse
  50. C aux interfaces.
  51. C MPROC (type MPOVAL) : masse volumique par
  52. C élément.
  53. C MPVITC (type MPOVAL) : vitesse par élément.
  54. C MPVOLU (type MPOVAL) : volume des éléments.
  55. C MPNORM (type MPOVAL) : normale aux faces.
  56. C MPSURF (type MPOVAL) : surface des faces.
  57. C MELEFL (type MELEME) : connectivités face-(centre
  58. C gauche, centre droit).
  59. C KRFACE (type MLENTI) : tableau de repérage dans
  60. C le maillage des faces des éléments.
  61. C KRCENT (type MLENTI) : tableau de repérage dans
  62. C le maillage des centres des éléments.
  63. C LCLIMV (type logique) : .TRUE. => CL de Dirichlet
  64. C sur la vitesse.
  65. C KRVIMP (type MLENTI) : tableau de repérage dans
  66. C maillage des CL de Dirichlet sur la
  67. C vitesse.
  68. C MPVIMP (type MPOVAL) : valeurs des CL de
  69. C Dirichlet sur la vitesse.
  70. C LCLITO (type logique) : .TRUE. => CL de Dirichlet
  71. C sur le tenseur des contraintes.
  72. C KRTOIM (type MLENTI) : tableau de repérage dans
  73. C maillage des CL de Dirichlet sur le tenseur des
  74. C contraintes
  75. C NOMINC (type MLMOTS) : noms des inconnues.
  76. C MU (type réel) : viscosité dynamique (SI).
  77. C ENTREES/SORTIES : IJACO (type MATRIK) : matrice jacobienne du
  78. C résidu du laplacien VF 3D.
  79. C SORTIES : -
  80. C CODE RETOUR (IRET) : = 0 si tout s'est bien passé
  81. C***********************************************************************
  82. C VERSION : v1, 28/08/2001, version initiale
  83. C HISTORIQUE : v1, 28/08/2001, création
  84. C HISTORIQUE :
  85. C HISTORIQUE :
  86. C***********************************************************************
  87. C Prière de PRENDRE LE TEMPS de compléter les commentaires
  88. C en cas de modification de ce sous-programme afin de faciliter
  89. C la maintenance !
  90. C***********************************************************************
  91.  
  92. -INC PPARAM
  93. -INC CCOPTIO
  94. -INC SMCOORD
  95. -INC SMCHPOI
  96. POINTEUR MPGRVF.MPOVAL
  97. POINTEUR MPROC.MPOVAL ,MPVITC.MPOVAL
  98. POINTEUR MPSURF.MPOVAL,MPNORM.MPOVAL,MPVOLU.MPOVAL
  99. POINTEUR MPVIMP.MPOVAL
  100. -INC SMCHAML
  101. POINTEUR ICOGRV.MCHELM,JCOGRV.MCHAML
  102. POINTEUR KDUNDX.MELVAL,KDUNDY.MELVAL,KDUNDZ.MELVAL
  103. -INC SMELEME
  104. POINTEUR MELEFL.MELEME
  105. POINTEUR MCOGRV.MELEME
  106. -INC SMLENTI
  107. POINTEUR KRVIMP.MLENTI,KRTOIM.MLENTI
  108. POINTEUR KRCENT.MLENTI,KRFACE.MLENTI
  109. -INC SMLMOTS
  110. POINTEUR NOMINC.MLMOTS
  111. POINTEUR IJACO.MATRIK
  112. *
  113. * Objet matrice élémentaire simplifié
  114. *
  115. SEGMENT GMATSI
  116. INTEGER POIPR1(NPP1,NEL1)
  117. INTEGER POIDU1(1,NEL1)
  118. INTEGER POIPR2(NPP2,NEL2)
  119. INTEGER POIDU2(2,NEL2)
  120. POINTEUR LMATSI(0).MATSIM
  121. ENDSEGMENT
  122. * Contributions compliquées 1 de la part du gradient de
  123. * vitesse (CCGRV1)
  124. POINTEUR CCGRV1.GMATSI
  125. SEGMENT MATSIM
  126. CHARACTER*8 NOMPRI,NOMDUA
  127. REAL*8 VALMA1(1,NPP1,NEL1)
  128. REAL*8 VALMA2(2,NPP2,NEL2)
  129. ENDSEGMENT
  130. POINTEUR RETRHO.MATSIM
  131. POINTEUR RETROU.MATSIM
  132. POINTEUR RETROV.MATSIM
  133. POINTEUR RETROW.MATSIM
  134. *
  135. REAL*8 MU
  136. *
  137. INTEGER IMPR,IRET
  138. *
  139. LOGICAL LCLIMV,LCLITO
  140. LOGICAL LMUR
  141. LOGICAL LCTR1A,LCTR1B
  142. *
  143. INTEGER IELEM,IPD,IPP,ISOUCH,IEL1,IEL2
  144. INTEGER NELEM,NPD,NPP,NSOUCH,NEL1,NEL2,NPP1,NPP2
  145. INTEGER NGCDRO,NGCGAU,NGFACE,NPPRIM,NPDUAL
  146. INTEGER NLCENP,NLCEND,NLFACE,NLCLTO,NLCLV
  147. INTEGER NLCED,NLCEG,NLFVI
  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 UXD,UXF,UXG
  157. REAL*8 UYD,UYF,UYG
  158. REAL*8 UZD,UZF,UZG
  159. REAL*8 XD,XF,XG,XFMXD,XFMXG
  160. REAL*8 YD,YF,YG,YFMYD,YFMYG
  161. REAL*8 ZD,ZF,ZG,ZFMZD,ZFMZG
  162. REAL*8 ALPHAX,ALPHAY,ALPHAZ
  163. REAL*8 CNX,CNY,CNZ
  164. REAL*8 SIGNOR,SURFFA,VOLUEL
  165. REAL*8 RHOP,UP,VP,WP
  166. REAL*8 FACTOR,FACTDU,FACTDV,FACTDW
  167. REAL*8 DUDRHO,DUDROU
  168. REAL*8 DVDRHO,DVDROV
  169. REAL*8 DWDRHO,DWDROW
  170. *
  171. * Executable statements
  172. *
  173. IF (IMPR.GT.2) WRITE(IOIMP,*) 'Entrée dans ylap2e.eso'
  174. * On calcule les contributions à (d Res_{\rho e_t} / d var) ; var
  175. * prenant successivement les valeurs :
  176. * \rho, \rho u, \rho v, \rho w, \rho e_t
  177. * On dérive les termes : (\tens{\tau(\grad{u})} \prod \vect{u})
  178. * \pscal \vect{n}
  179. * ce qui donne deux contributions.
  180. * Contribution 1 :
  181. * ( (d \tens{\tau} / d var) \prod \vect{u}) \pscal \vect{n}
  182. * Contribution 2 :
  183. * ( \tens{\tau} \prod (d \vect{u} / d var)) \pscal \vect{n}
  184. * Note :
  185. * pas de contribution à (d Res_{\rho e_t} / d \rho e_t).
  186. * Les noms de matrices élémentaires (type MATSIM) associées sont :
  187. * RETRHO, RETROU, RETROV, RETROW
  188. IF (LCLIMV) THEN
  189. SEGACT KRVIMP
  190. SEGACT MPVIMP
  191. ENDIF
  192. IF (LCLITO) THEN
  193. SEGACT KRTOIM
  194. ENDIF
  195. SEGACT NOMINC
  196. SEGACT KRCENT
  197. SEGACT KRFACE
  198. SEGACT MELEFL
  199. SEGACT MPSURF
  200. SEGACT MPNORM
  201. SEGACT MPVOLU
  202. SEGACT MPROC
  203. SEGACT MPVITC
  204. SEGACT MPGRVF
  205. SEGACT ICOGRV
  206. NSOUCH=ICOGRV.IMACHE(/1)
  207. DO 1 ISOUCH=1,NSOUCH
  208. MCOGRV=ICOGRV.IMACHE(ISOUCH)
  209. JCOGRV=ICOGRV.ICHAML(ISOUCH)
  210. SEGACT JCOGRV
  211. KDUNDX=JCOGRV.IELVAL(1)
  212. KDUNDY=JCOGRV.IELVAL(2)
  213. KDUNDZ=JCOGRV.IELVAL(3)
  214. SEGDES JCOGRV
  215. SEGACT KDUNDX
  216. SEGACT KDUNDY
  217. SEGACT KDUNDZ
  218. SEGACT MCOGRV
  219. NELEM=MCOGRV.NUM(/2)
  220. NPTEL=MCOGRV.NUM(/1)
  221. NPP1=NPTEL-1
  222. NPP2=NPTEL-1
  223. NEL1=NELEM
  224. NEL2=NELEM
  225. IEL1=1
  226. IEL2=1
  227. SEGINI RETRHO
  228. SEGINI RETROU
  229. SEGINI RETROV
  230. SEGINI RETROW
  231. SEGINI CCGRV1
  232. RETRHO.NOMPRI(1:4)=NOMINC.MOTS(1)
  233. RETRHO.NOMPRI(5:8)=' '
  234. RETRHO.NOMDUA(1:4)=NOMINC.MOTS(5)
  235. RETRHO.NOMDUA(5:8)=' '
  236. RETROU.NOMPRI(1:4)=NOMINC.MOTS(2)
  237. RETROU.NOMPRI(5:8)=' '
  238. RETROU.NOMDUA(1:4)=NOMINC.MOTS(5)
  239. RETROU.NOMDUA(5:8)=' '
  240. RETROV.NOMPRI(1:4)=NOMINC.MOTS(3)
  241. RETROV.NOMPRI(5:8)=' '
  242. RETROV.NOMDUA(1:4)=NOMINC.MOTS(5)
  243. RETROV.NOMDUA(5:8)=' '
  244. RETROW.NOMPRI(1:4)=NOMINC.MOTS(4)
  245. RETROW.NOMPRI(5:8)=' '
  246. RETROW.NOMDUA(1:4)=NOMINC.MOTS(5)
  247. RETROW.NOMDUA(5:8)=' '
  248. DO 12 IELEM=1,NELEM
  249. * Le premier point du support de ICOGRV est un point FACE
  250. NGFACE=MCOGRV.NUM(1,IELEM)
  251. NLFACE=KRFACE.LECT(NGFACE)
  252. IF (NLFACE.EQ.0) THEN
  253. WRITE(IOIMP,*) 'Erreur de programmation n°1'
  254. GOTO 9999
  255. ENDIF
  256. * On calcule la contribution 1 à la matrice jacobienne IJACO de la
  257. * face NGFACE
  258. * (points duaux : centres à gauche et à droite de la face)
  259. * (points primaux : une partie (bicoz conditions aux limites)
  260. * de ceux du stencil pour le calcul du gradient
  261. * à la face, ils doivent être des points centres)
  262. * Si le tenseur des contraintes sur la face est imposé par les
  263. * conditions aux limites, la contribution 1 de la face à IJACO est
  264. * nulle.
  265. LCTR1A=.TRUE.
  266. IF (LCLITO) THEN
  267. NLCLTO=KRTOIM.LECT(NGFACE)
  268. IF (NLCLTO.NE.0) THEN
  269. LCTR1A=.FALSE.
  270. ENDIF
  271. ENDIF
  272. IF (LCTR1A) THEN
  273. NGCGAU=MELEFL.NUM(1,NLFACE)
  274. NGCDRO=MELEFL.NUM(3,NLFACE)
  275. LMUR=(NGCGAU.EQ.NGCDRO)
  276. * On calcule tout d'abord une interpolation de la vitesse sur la
  277. * face NGFACE de la même manière que dans ylap13.eso.
  278. IF (LCLIMV) THEN
  279. NLFVI=KRVIMP.LECT(NGFACE)
  280. ELSE
  281. NLFVI=0
  282. ENDIF
  283. * La vitesse est imposée sur la face, rien à calculer
  284. IF (NLFVI.NE.0) THEN
  285. UXF=MPVIMP.VPOCHA(NLFVI,1)
  286. UYF=MPVIMP.VPOCHA(NLFVI,2)
  287. UZF=MPVIMP.VPOCHA(NLFVI,3)
  288. ELSE
  289. NLCEG=KRCENT.LECT(NGCGAU)
  290. NLCED=KRCENT.LECT(NGCDRO)
  291. * Cas non au bord
  292. IF (.NOT.LMUR) THEN
  293. * Paramètres géométriques
  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. DRG=SQRT((XFMXG*XFMXG)+(YFMYG*YFMYG)+(ZFMZG*ZFMZG))
  306. ICOORX = ((IDIM + 1) * (NGCDRO - 1))+1
  307. XD = MCOORD.XCOOR(ICOORX)
  308. YD = MCOORD.XCOOR(ICOORX+1)
  309. ZD = MCOORD.XCOOR(ICOORX+2)
  310. XFMXD = XF - XD
  311. YFMYD = YF - YD
  312. ZFMZD = ZF - ZD
  313. DRD=SQRT((XFMXD*XFMXD)+(YFMYD*YFMYD)+(ZFMZD*ZFMZD))
  314. ALPHA=DRG/(DRG+DRD)
  315. UMALPH= 1.0D0 - ALPHA
  316. DUXXF = MPGRVF.VPOCHA(NLFACE,1)
  317. DUXYF = MPGRVF.VPOCHA(NLFACE,2)
  318. DUXZF = MPGRVF.VPOCHA(NLFACE,3)
  319. DUYXF = MPGRVF.VPOCHA(NLFACE,4)
  320. DUYYF = MPGRVF.VPOCHA(NLFACE,5)
  321. DUYZF = MPGRVF.VPOCHA(NLFACE,6)
  322. DUZXF = MPGRVF.VPOCHA(NLFACE,7)
  323. DUZYF = MPGRVF.VPOCHA(NLFACE,8)
  324. DUZZF = MPGRVF.VPOCHA(NLFACE,9)
  325. * Calcul de la vitesse
  326. UXG = MPVITC.VPOCHA(NLCEG,1)
  327. UYG = MPVITC.VPOCHA(NLCEG,2)
  328. UZG = MPVITC.VPOCHA(NLCEG,3)
  329. UXD = MPVITC.VPOCHA(NLCED,1)
  330. UYD = MPVITC.VPOCHA(NLCED,2)
  331. UZD = MPVITC.VPOCHA(NLCED,3)
  332. UXF = UMALPH * UXG + ALPHA * UXD
  333. UYF = UMALPH * UYG + ALPHA * UYD
  334. UZF = UMALPH * UZG + ALPHA * UZD
  335. * Correction de la vitesse lineaire exacte
  336. UXF = UXF +
  337. & (DUXXF * ((XFMXG * UMALPH)+ (XFMXD * ALPHA))) +
  338. & (DUXYF * ((YFMYG * UMALPH)+ (YFMYD * ALPHA))) +
  339. & (DUXZF * ((ZFMZG * UMALPH)+ (ZFMZD * ALPHA)))
  340. UYF = UYF +
  341. & (DUYXF * ((XFMXG * UMALPH)+ (XFMXD * ALPHA))) +
  342. & (DUYYF * ((YFMYG * UMALPH)+ (YFMYD * ALPHA))) +
  343. & (DUYZF * ((ZFMZG * UMALPH)+ (ZFMZD * ALPHA)))
  344. UZF = UZF +
  345. & (DUZXF * ((XFMXG * UMALPH)+ (XFMXD * ALPHA))) +
  346. & (DUZYF * ((YFMYG * UMALPH)+ (YFMYD * ALPHA))) +
  347. & (DUZZF * ((ZFMZG * UMALPH)+ (ZFMZD * ALPHA)))
  348.  
  349. * Cas au bord
  350. ELSE
  351. * Parametres geometriques
  352. ICOORX = ((IDIM + 1) * (NGFACE - 1))+1
  353. XF = MCOORD.XCOOR(ICOORX)
  354. YF = MCOORD.XCOOR(ICOORX+1)
  355. ZF = MCOORD.XCOOR(ICOORX+2)
  356. ICOORX = ((IDIM + 1) * (NGCGAU - 1))+1
  357. XG = MCOORD.XCOOR(ICOORX)
  358. YG = MCOORD.XCOOR(ICOORX+1)
  359. ZG = MCOORD.XCOOR(ICOORX+2)
  360. XFMXG = XF - XG
  361. YFMYG = YF - YG
  362. ZFMZG = ZF - ZG
  363. DUXXF = MPGRVF.VPOCHA(NLFACE,1)
  364. DUXYF = MPGRVF.VPOCHA(NLFACE,2)
  365. DUXZF = MPGRVF.VPOCHA(NLFACE,3)
  366. DUYXF = MPGRVF.VPOCHA(NLFACE,4)
  367. DUYYF = MPGRVF.VPOCHA(NLFACE,5)
  368. DUYZF = MPGRVF.VPOCHA(NLFACE,6)
  369. DUZXF = MPGRVF.VPOCHA(NLFACE,7)
  370. DUZYF = MPGRVF.VPOCHA(NLFACE,8)
  371. DUZZF = MPGRVF.VPOCHA(NLFACE,9)
  372. * Calcul de la vitesse
  373. UXF = MPVITC.VPOCHA(NLCEG,1)
  374. UYF = MPVITC.VPOCHA(NLCEG,2)
  375. UZF = MPVITC.VPOCHA(NLCEG,3)
  376. * Correction de la vitesse lineaire exacte
  377. UXF = UXF +
  378. & (DUXXF * XFMXG ) +
  379. & (DUXYF * YFMYG ) +
  380. & (DUXZF * ZFMZG )
  381. UYF = UYF +
  382. & (DUYXF * XFMXG ) +
  383. & (DUYYF * YFMYG ) +
  384. & (DUYZF * ZFMZG )
  385. UZF = UZF +
  386. & (DUZXF * XFMXG ) +
  387. & (DUZYF * YFMYG ) +
  388. & (DUZZF * ZFMZG )
  389. ENDIF
  390. ENDIF
  391. * On distingue le cas où la face est un bord du maillage (mur)
  392. * du cas où la face est interne au maillage
  393. IF (.NOT.LMUR) THEN
  394. NPD=2
  395. ELSE
  396. NPD=1
  397. ENDIF
  398. NPP=NPTEL-1
  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. CCGRV1.POIDU2(IPD,IEL2)=NPDUAL
  405. ELSE
  406. CCGRV1.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. NPPRIM=MCOGRV.NUM(IPP+1,IELEM)
  415. NLCENP=KRCENT.LECT(NPPRIM)
  416. IF(NLCENP .EQ. 0)THEN
  417. * Lorsque une contribution est nulle, on fixe artificiellement le
  418. * point primal égal au point dual.
  419. IF (.NOT.LMUR) THEN
  420. CCGRV1.POIPR2(IPP,IEL2)=NPDUAL
  421. RETRHO.VALMA2(IPD,IPP,IEL2)=0.D0
  422. RETROU.VALMA2(IPD,IPP,IEL2)=0.D0
  423. RETROV.VALMA2(IPD,IPP,IEL2)=0.D0
  424. RETROW.VALMA2(IPD,IPP,IEL2)=0.D0
  425. ELSE
  426. CCGRV1.POIPR1(IPP,IEL1)=NPDUAL
  427. RETRHO.VALMA1(IPD,IPP,IEL1)=0.D0
  428. RETROU.VALMA1(IPD,IPP,IEL1)=0.D0
  429. RETROV.VALMA1(IPD,IPP,IEL1)=0.D0
  430. RETROW.VALMA1(IPD,IPP,IEL1)=0.D0
  431. ENDIF
  432. ELSE
  433. * Les contributions 1 valent :
  434. * (d Res_{\rho e_t})_d / (d var)_p =
  435. * +/-1 (normale sortante, rentrante) (1/V_d) * (S_f) * \mu
  436. * * [ [ [ (n_x * (( 4/3 * u_f * \alpha_x) + (v_f * \alpha_y)
  437. * + (w_f * \alpha_z)))
  438. * + (n_y * ((u_f * \alpha_y) + (-2/3 * v_f * \alpha_x)))
  439. * + (n_z * ((u_f * \alpha_z) + (-2/3 * w_f * \alpha_x)))
  440. * ]
  441. * * ((du)_p / (d var)_p)
  442. * ]
  443. * + [ [ (n_x * ((-2/3 * u_f * \alpha_y) + (v_f * \alpha_x)))
  444. * + (n_y * ((u_f * \alpha_x) + ( 4/3 * v_f * \alpha_y)
  445. * + (w_f * \alpha_z)))
  446. * + (n_z * ((v_f * \alpha_z) + (-2/3 * w_f * \alpha_y)))
  447. * ]
  448. * * ((dv)_p / (d var)_p)
  449. * ]
  450. * + [ [ (n_x * ((-2/3 * u_f * \alpha_z) + (w_f * \alpha_x)))
  451. * + (n_y * ((-2/3 * v_f * \alpha_z) + (w_f * \alpha_y)))
  452. * + (n_z * ((u_f * \alpha_x) + (v_f * \alpha_y)
  453. * + ( 4/3 * w_f * \alpha_z)))
  454. * ]
  455. * * ((dw)_p / (d var)_p)
  456. * ]
  457. * ]
  458. *
  459. * normale sortante pour IPD=1, rentrante pour IPD=2
  460. SIGNOR=(-1.D0)**(IPD+1)
  461. VOLUEL=MPVOLU.VPOCHA(NLCEND,1)
  462. SURFFA=MPSURF.VPOCHA(NLFACE,1)
  463. CNX =MPNORM.VPOCHA(NLFACE,1)
  464. CNY =MPNORM.VPOCHA(NLFACE,2)
  465. CNZ =MPNORM.VPOCHA(NLFACE,3)
  466. ALPHAX=KDUNDX.VELCHE(IPP+1,IELEM)
  467. ALPHAY=KDUNDY.VELCHE(IPP+1,IELEM)
  468. ALPHAZ=KDUNDZ.VELCHE(IPP+1,IELEM)
  469. RHOP =MPROC.VPOCHA(NLCENP,1)
  470. UP =MPVITC.VPOCHA(NLCENP,1)
  471. VP =MPVITC.VPOCHA(NLCENP,2)
  472. WP =MPVITC.VPOCHA(NLCENP,3)
  473. FACTOR=SIGNOR*(1.D0/VOLUEL)*SURFFA*MU
  474. FACTDU=(CNX*((( 4.D0/3.D0)*UXF*ALPHAX)
  475. $ +(UYF*ALPHAY)
  476. $ +(UZF*ALPHAZ)))
  477. $ + (CNY*((UXF*ALPHAY)
  478. $ +((-2.D0/3.D0)*UYF*ALPHAX)))
  479. $ + (CNZ*((UXF*ALPHAZ)
  480. $ +((-2.D0/3.D0)*UZF*ALPHAX)))
  481. FACTDV=(CNX*(((-2.D0/3.D0)*UXF*ALPHAY)
  482. $ +(UYF*ALPHAX)))
  483. $ + (CNY*((UXF*ALPHAX)
  484. $ +(( 4.D0/3.D0)*UYF*ALPHAY)
  485. $ +(UZF*ALPHAZ)))
  486. $ + (CNZ*((UYF*ALPHAZ)
  487. $ +((-2.D0/3.D0)*UZF*ALPHAY)))
  488. FACTDW=(CNX*(((-2.D0/3.D0)*UXF*ALPHAZ)
  489. $ +(UZF*ALPHAX)))
  490. $ + (CNY*(((-2.D0/3.D0)*UYF*ALPHAZ)
  491. $ +(UZF*ALPHAY)))
  492. $ + (CNZ*((UXF*ALPHAX)
  493. $ +(UYF*ALPHAY)
  494. $ +(( 4.D0/3.D0)*UZF*ALPHAZ)))
  495. DUDRHO=-UP /RHOP
  496. DUDROU=1.D0/RHOP
  497. DVDRHO=-VP /RHOP
  498. DVDROV=1.D0/RHOP
  499. DWDRHO=-WP /RHOP
  500. DWDROW=1.D0/RHOP
  501. IF (.NOT.LMUR) THEN
  502. CCGRV1.POIPR2(IPP,IEL2)=NPPRIM
  503. RETRHO.VALMA2(IPD,IPP,IEL2)=
  504. $ FACTOR*( (FACTDU*DUDRHO)
  505. $ +(FACTDV*DVDRHO)
  506. $ +(FACTDW*DWDRHO))
  507. RETROU.VALMA2(IPD,IPP,IEL2)=
  508. $ FACTOR* (FACTDU*DUDROU)
  509. RETROV.VALMA2(IPD,IPP,IEL2)=
  510. $ FACTOR* (FACTDV*DVDROV)
  511. RETROW.VALMA2(IPD,IPP,IEL2)=
  512. $ FACTOR* (FACTDW*DWDROW)
  513. ELSE
  514. CCGRV1.POIPR1(IPP,IEL1)=NPPRIM
  515. RETRHO.VALMA1(IPD,IPP,IEL1)=
  516. $ FACTOR*( (FACTDU*DUDRHO)
  517. $ +(FACTDV*DVDRHO)
  518. $ +(FACTDW*DWDRHO))
  519. RETROU.VALMA1(IPD,IPP,IEL1)=
  520. $ FACTOR* (FACTDU*DUDROU)
  521. RETROV.VALMA1(IPD,IPP,IEL1)=
  522. $ FACTOR* (FACTDV*DVDROV)
  523. RETROW.VALMA1(IPD,IPP,IEL1)=
  524. $ FACTOR* (FACTDW*DWDROW)
  525. ENDIF
  526. ENDIF
  527. 124 CONTINUE
  528. 122 CONTINUE
  529. IF (.NOT.LMUR) THEN
  530. IEL2=IEL2+1
  531. ELSE
  532. IEL1=IEL1+1
  533. ENDIF
  534. ENDIF
  535. 12 CONTINUE
  536. NPP1=NPTEL-1
  537. NPP2=NPTEL-1
  538. NEL1=IEL1-1
  539. NEL2=IEL2-1
  540. SEGADJ RETRHO
  541. SEGADJ RETROU
  542. SEGADJ RETROV
  543. SEGADJ RETROW
  544. SEGADJ CCGRV1
  545. CCGRV1.LMATSI(**)=RETRHO
  546. CCGRV1.LMATSI(**)=RETROU
  547. CCGRV1.LMATSI(**)=RETROV
  548. CCGRV1.LMATSI(**)=RETROW
  549. * On accumule les matrices résultantes dans IJACO
  550. CALL AJMTK(CCGRV1,IJACO,IMPR,IRET)
  551. IF (IRET.NE.0) GOTO 9999
  552. SEGSUP RETRHO
  553. SEGSUP RETROU
  554. SEGSUP RETROV
  555. SEGSUP RETROW
  556. SEGSUP CCGRV1
  557. *
  558. SEGDES MCOGRV
  559. SEGDES KDUNDZ
  560. SEGDES KDUNDY
  561. SEGDES KDUNDX
  562. 1 CONTINUE
  563. SEGDES ICOGRV
  564. SEGDES MPGRVF
  565. SEGDES MPVITC
  566. SEGDES MPROC
  567. SEGDES MPVOLU
  568. SEGDES MPNORM
  569. SEGDES MPSURF
  570. SEGDES MELEFL
  571. SEGDES KRFACE
  572. SEGDES KRCENT
  573. SEGDES NOMINC
  574. IF (LCLITO) THEN
  575. SEGDES KRTOIM
  576. ENDIF
  577. IF (LCLIMV) THEN
  578. SEGDES KRVIMP
  579. SEGDES MPVIMP
  580. ENDIF
  581. *
  582. * Normal termination
  583. *
  584. IRET=0
  585. RETURN
  586. *
  587. * Format handling
  588. *
  589. *
  590. * Error handling
  591. *
  592. 9999 CONTINUE
  593. IRET=1
  594. WRITE(IOIMP,*) 'An error was detected in subroutine ylap2e'
  595. RETURN
  596. *
  597. * End of subroutine YLAP2E
  598. *
  599. END
  600.  
  601.  
  602.  
  603.  
  604.  
  605.  
  606.  
  607.  
  608.  
  609.  
  610.  
  611.  
  612.  
  613.  

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