Télécharger ylap2c.eso

Retour à la liste

Numérotation des lignes :

ylap2c
  1. C YLAP2C SOURCE CB215821 20/11/25 13:44:16 10792
  2. SUBROUTINE YLAP2C(ICOGRV,MPROC,MPVITC,
  3. $ MPVOLU,MPNORM,MPSURF,MELEFL,
  4. $ KRFACE,KRCENT,LCLIMV,KRVIMP,LCLITO,KRTOIM,
  5. $ NOMINC,
  6. $ MU,
  7. $ IJACO,
  8. $ IMPR,IRET)
  9. IMPLICIT INTEGER(I-N)
  10. IMPLICIT REAL*8 (A-H,O-Z)
  11. C***********************************************************************
  12. C NOM : YLAP2C
  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)
  21. C var prenant successivement les valeurs :
  22. C \rho, \rho u, \rho v, \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 : YLAP2A : Calcul de la matrice jacobienne du
  40. C résidu du laplacien VF 3D.
  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 MU (type réel) : viscosité dynamique (SI).
  69. C ENTREES/SORTIES : IJACO (type MATRIK) : matrice jacobienne du
  70. C résidu du laplacien VF 3D.
  71. C SORTIES : -
  72. C CODE RETOUR (IRET) : = 0 si tout s'est bien passé
  73. C***********************************************************************
  74. C VERSION : v1, 28/08/2001, version initiale
  75. C HISTORIQUE : v1, 28/08/2001, 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 SMCHPOI
  87. POINTEUR MPROC.MPOVAL ,MPVITC.MPOVAL
  88. POINTEUR MPSURF.MPOVAL,MPNORM.MPOVAL,MPVOLU.MPOVAL
  89. -INC SMCHAML
  90. POINTEUR ICOGRV.MCHELM,JCOGRV.MCHAML
  91. POINTEUR KDUNDX.MELVAL,KDUNDY.MELVAL,KDUNDZ.MELVAL
  92. -INC SMELEME
  93. POINTEUR MELEFL.MELEME
  94. POINTEUR MCOGRV.MELEME
  95. -INC SMLENTI
  96. POINTEUR KRVIMP.MLENTI,KRTOIM.MLENTI
  97. POINTEUR KRCENT.MLENTI,KRFACE.MLENTI
  98. -INC SMLMOTS
  99. POINTEUR NOMINC.MLMOTS
  100. POINTEUR IJACO.MATRIK
  101. *
  102. * Objet matrice élémentaire simplifié
  103. *
  104. SEGMENT GMATSI
  105. INTEGER POIPR1(NPP1,NEL1)
  106. INTEGER POIDU1(1,NEL1)
  107. INTEGER POIPR2(NPP2,NEL2)
  108. INTEGER POIDU2(2,NEL2)
  109. POINTEUR LMATSI(0).MATSIM
  110. ENDSEGMENT
  111. * Contributions simples de la part du gradient de
  112. * vitesse (CTSGRV)
  113. POINTEUR CTSGRV.GMATSI
  114. SEGMENT MATSIM
  115. CHARACTER*8 NOMPRI,NOMDUA
  116. REAL*8 VALMA1(1,NPP1,NEL1)
  117. REAL*8 VALMA2(2,NPP2,NEL2)
  118. ENDSEGMENT
  119. POINTEUR ROURHO.MATSIM
  120. POINTEUR ROVRHO.MATSIM
  121. POINTEUR ROWRHO.MATSIM
  122. POINTEUR ROUROU.MATSIM
  123. POINTEUR ROVROU.MATSIM
  124. POINTEUR ROWROU.MATSIM
  125. POINTEUR ROUROV.MATSIM
  126. POINTEUR ROVROV.MATSIM
  127. POINTEUR ROWROV.MATSIM
  128. POINTEUR ROUROW.MATSIM
  129. POINTEUR ROVROW.MATSIM
  130. POINTEUR ROWROW.MATSIM
  131. *
  132. REAL*8 MU
  133. *
  134. INTEGER IMPR,IRET
  135. *
  136. LOGICAL LCLIMV,LCLITO
  137. LOGICAL LMUR
  138. LOGICAL LCTRB1
  139. *
  140. INTEGER IELEM,IPD,IPP,ISOUCH,IEL1,IEL2
  141. INTEGER NELEM,NPD,NPP,NSOUCH,NEL1,NEL2,NPP1,NPP2
  142. INTEGER NGCDRO,NGCGAU,NGFACE,NPPRIM,NPDUAL
  143. INTEGER NLCENP,NLCEND,NLFACE,NLCLTO,NLCLV
  144. INTEGER NPTEL
  145. *
  146. REAL*8 ALPHAX,ALPHAY,ALPHAZ,CNX,CNY,CNZ
  147. REAL*8 SIGNOR,SURFFA,VOLUEL
  148. REAL*8 RHOP,UP,VP,WP
  149. REAL*8 FACTOR
  150. REAL*8 DUDRHO,DUDROU
  151. REAL*8 DVDRHO,DVDROV
  152. REAL*8 DWDRHO,DWDROW
  153. REAL*8 BROUDU,BROUDV,BROUDW
  154. REAL*8 BROVDU,BROVDV,BROVDW
  155. REAL*8 BROWDU,BROWDV,BROWDW
  156. C
  157. *
  158. * Executable statements
  159. *
  160. IF (IMPR.GT.2) WRITE(IOIMP,*) 'Entrée dans ylap2c.eso'
  161. * On calcule les contributions à (d Res_{\rho u} / d var), (d
  162. * Res_{\rho v} / d var) et (d Res_{\rho w} / d var) ; var prenant
  163. * successivement les valeurs :
  164. * \rho, \rho u, \rho v, \rho w, \rho e_t
  165. * Note :
  166. * - (d Res_{\rho u} / d \rho e_t) = 0
  167. * - (d Res_{\rho v} / d \rho e_t) = 0
  168. * - (d Res_{\rho w} / d \rho e_t) = 0
  169. * On dérive les termes : \tens{\tau} \prod \vect{n}
  170. * Les noms de matrices élémentaires (type MATSIM) associées sont :
  171. * ROURHO, ROUROU, ROUROV, ROUROW,
  172. * ROVRHO, ROVROU, ROVROV, ROVROW,
  173. * ROWRHO, ROWROU, ROWROV, ROWROW.
  174. IF (LCLIMV) THEN
  175. SEGACT KRVIMP
  176. ENDIF
  177. IF (LCLITO) THEN
  178. SEGACT KRTOIM
  179. ENDIF
  180. SEGACT NOMINC
  181. SEGACT KRCENT
  182. SEGACT KRFACE
  183. SEGACT MELEFL
  184. SEGACT MPSURF
  185. SEGACT MPNORM
  186. SEGACT MPVOLU
  187. SEGACT MPROC
  188. SEGACT MPVITC
  189. SEGACT ICOGRV
  190. NSOUCH=ICOGRV.IMACHE(/1)
  191. DO 1 ISOUCH=1,NSOUCH
  192. MCOGRV=ICOGRV.IMACHE(ISOUCH)
  193. JCOGRV=ICOGRV.ICHAML(ISOUCH)
  194. SEGACT JCOGRV
  195. KDUNDX=JCOGRV.IELVAL(1)
  196. KDUNDY=JCOGRV.IELVAL(2)
  197. KDUNDZ=JCOGRV.IELVAL(3)
  198. SEGDES JCOGRV
  199. SEGACT KDUNDX
  200. SEGACT KDUNDY
  201. SEGACT KDUNDZ
  202. SEGACT MCOGRV
  203. NELEM=MCOGRV.NUM(/2)
  204. NPTEL=MCOGRV.NUM(/1)
  205. NPP1=NPTEL-1
  206. NPP2=NPTEL-1
  207. NEL1=NELEM
  208. NEL2=NELEM
  209. IEL1=1
  210. IEL2=1
  211. SEGINI ROURHO
  212. SEGINI ROVRHO
  213. SEGINI ROWRHO
  214. SEGINI ROUROU
  215. SEGINI ROVROU
  216. SEGINI ROWROU
  217. SEGINI ROUROV
  218. SEGINI ROVROV
  219. SEGINI ROWROV
  220. SEGINI ROUROW
  221. SEGINI ROVROW
  222. SEGINI ROWROW
  223. SEGINI CTSGRV
  224. ROURHO.NOMPRI(1:4)=NOMINC.MOTS(1)
  225. ROURHO.NOMPRI(5:8)=' '
  226. ROURHO.NOMDUA(1:4)=NOMINC.MOTS(2)
  227. ROURHO.NOMDUA(5:8)=' '
  228. ROVRHO.NOMPRI(1:4)=NOMINC.MOTS(1)
  229. ROVRHO.NOMPRI(5:8)=' '
  230. ROVRHO.NOMDUA(1:4)=NOMINC.MOTS(3)
  231. ROVRHO.NOMDUA(5:8)=' '
  232. ROWRHO.NOMPRI(1:4)=NOMINC.MOTS(1)
  233. ROWRHO.NOMPRI(5:8)=' '
  234. ROWRHO.NOMDUA(1:4)=NOMINC.MOTS(4)
  235. ROWRHO.NOMDUA(5:8)=' '
  236. ROUROU.NOMPRI(1:4)=NOMINC.MOTS(2)
  237. ROUROU.NOMPRI(5:8)=' '
  238. ROUROU.NOMDUA(1:4)=NOMINC.MOTS(2)
  239. ROUROU.NOMDUA(5:8)=' '
  240. ROVROU.NOMPRI(1:4)=NOMINC.MOTS(2)
  241. ROVROU.NOMPRI(5:8)=' '
  242. ROVROU.NOMDUA(1:4)=NOMINC.MOTS(3)
  243. ROVROU.NOMDUA(5:8)=' '
  244. ROWROU.NOMPRI(1:4)=NOMINC.MOTS(2)
  245. ROWROU.NOMPRI(5:8)=' '
  246. ROWROU.NOMDUA(1:4)=NOMINC.MOTS(4)
  247. ROWROU.NOMDUA(5:8)=' '
  248. ROUROV.NOMPRI(1:4)=NOMINC.MOTS(3)
  249. ROUROV.NOMPRI(5:8)=' '
  250. ROUROV.NOMDUA(1:4)=NOMINC.MOTS(2)
  251. ROUROV.NOMDUA(5:8)=' '
  252. ROVROV.NOMPRI(1:4)=NOMINC.MOTS(3)
  253. ROVROV.NOMPRI(5:8)=' '
  254. ROVROV.NOMDUA(1:4)=NOMINC.MOTS(3)
  255. ROVROV.NOMDUA(5:8)=' '
  256. ROWROV.NOMPRI(1:4)=NOMINC.MOTS(3)
  257. ROWROV.NOMPRI(5:8)=' '
  258. ROWROV.NOMDUA(1:4)=NOMINC.MOTS(4)
  259. ROWROV.NOMDUA(5:8)=' '
  260. ROUROW.NOMPRI(1:4)=NOMINC.MOTS(4)
  261. ROUROW.NOMPRI(5:8)=' '
  262. ROUROW.NOMDUA(1:4)=NOMINC.MOTS(2)
  263. ROUROW.NOMDUA(5:8)=' '
  264. ROVROW.NOMPRI(1:4)=NOMINC.MOTS(4)
  265. ROVROW.NOMPRI(5:8)=' '
  266. ROVROW.NOMDUA(1:4)=NOMINC.MOTS(3)
  267. ROVROW.NOMDUA(5:8)=' '
  268. ROWROW.NOMPRI(1:4)=NOMINC.MOTS(4)
  269. ROWROW.NOMPRI(5:8)=' '
  270. ROWROW.NOMDUA(1:4)=NOMINC.MOTS(4)
  271. ROWROW.NOMDUA(5:8)=' '
  272. DO 12 IELEM=1,NELEM
  273. * Le premier point du support de ICOGRV est un point FACE
  274. NGFACE=MCOGRV.NUM(1,IELEM)
  275. NLFACE=KRFACE.LECT(NGFACE)
  276. IF (NLFACE.EQ.0) THEN
  277. WRITE(IOIMP,*) 'Erreur de programmation n°1'
  278. GOTO 9999
  279. ENDIF
  280. * On calcule la contribution à la matrice jacobienne IJACO de la face
  281. * NGFAC (points duaux : centres à gauche et à droite de la face)
  282. * (points primaux : une partie (bicoz conditions aux limites)
  283. * de ceux du stencil pour le calcul du gradient
  284. * à la face, ils doivent être des points centres)
  285. * Si le tenseur des contraintes sur la face est imposé par les
  286. * conditions aux limites, la contribution de la face à IJACO est
  287. * nulle.
  288. LCTRB1=.TRUE.
  289. IF (LCLITO) THEN
  290. NLCLTO=KRTOIM.LECT(NGFACE)
  291. IF (NLCLTO.NE.0) THEN
  292. LCTRB1=.FALSE.
  293. ENDIF
  294. ENDIF
  295. IF (LCTRB1) THEN
  296. NGCGAU=MELEFL.NUM(1,NLFACE)
  297. NGCDRO=MELEFL.NUM(3,NLFACE)
  298. LMUR=(NGCGAU.EQ.NGCDRO)
  299. * On distingue le cas où la face est un bord du maillage (mur)
  300. * du cas où la face est interne au maillage
  301. IF (.NOT.LMUR) THEN
  302. NPD=2
  303. ELSE
  304. NPD=1
  305. ENDIF
  306. NPP=NPTEL-1
  307. * IPD=1 : point à gauche du point NGFACE
  308. * IPD=2 : point à droite du point NGFACE
  309. DO 122 IPD=1,NPD
  310. NPDUAL=MELEFL.NUM((2*IPD)-1,NLFACE)
  311. IF (.NOT.LMUR) THEN
  312. CTSGRV.POIDU2(IPD,IEL2)=NPDUAL
  313. ELSE
  314. CTSGRV.POIDU1(IPD,IEL1)=NPDUAL
  315. ENDIF
  316. NLCEND=KRCENT.LECT(NPDUAL)
  317. IF (NLCEND.EQ.0) THEN
  318. WRITE(IOIMP,*) 'Erreur grave n°1'
  319. GOTO 9999
  320. ENDIF
  321. DO 124 IPP=1,NPP
  322. NPPRIM=MCOGRV.NUM(IPP+1,IELEM)
  323. NLCENP=KRCENT.LECT(NPPRIM)
  324. C
  325. C AB We do not check BC anymore
  326. C
  327. IF(NLCENP .EQ. 0)THEN
  328. * Lorsque une contribution est nulle, on fixe artificiellement le
  329. * point primal égal au point dual.
  330. IF (.NOT.LMUR) THEN
  331. CTSGRV.POIPR2(IPP,IEL2)=NPDUAL
  332. ROURHO.VALMA2(IPD,IPP,IEL2)=0.D0
  333. ROVRHO.VALMA2(IPD,IPP,IEL2)=0.D0
  334. ROWRHO.VALMA2(IPD,IPP,IEL2)=0.D0
  335. ROUROU.VALMA2(IPD,IPP,IEL2)=0.D0
  336. ROVROU.VALMA2(IPD,IPP,IEL2)=0.D0
  337. ROWROU.VALMA2(IPD,IPP,IEL2)=0.D0
  338. ROUROV.VALMA2(IPD,IPP,IEL2)=0.D0
  339. ROVROV.VALMA2(IPD,IPP,IEL2)=0.D0
  340. ROWROV.VALMA2(IPD,IPP,IEL2)=0.D0
  341. ROUROW.VALMA2(IPD,IPP,IEL2)=0.D0
  342. ROVROW.VALMA2(IPD,IPP,IEL2)=0.D0
  343. ROWROW.VALMA2(IPD,IPP,IEL2)=0.D0
  344. ELSE
  345. CTSGRV.POIPR1(IPP,IEL1)=NPDUAL
  346. ROURHO.VALMA1(IPD,IPP,IEL1)=0.D0
  347. ROVRHO.VALMA1(IPD,IPP,IEL1)=0.D0
  348. ROWRHO.VALMA1(IPD,IPP,IEL1)=0.D0
  349. ROUROU.VALMA1(IPD,IPP,IEL1)=0.D0
  350. ROVROU.VALMA1(IPD,IPP,IEL1)=0.D0
  351. ROWROU.VALMA1(IPD,IPP,IEL1)=0.D0
  352. ROUROV.VALMA1(IPD,IPP,IEL1)=0.D0
  353. ROVROV.VALMA1(IPD,IPP,IEL1)=0.D0
  354. ROWROV.VALMA1(IPD,IPP,IEL1)=0.D0
  355. ROUROW.VALMA1(IPD,IPP,IEL1)=0.D0
  356. ROVROW.VALMA1(IPD,IPP,IEL1)=0.D0
  357. ROWROW.VALMA1(IPD,IPP,IEL1)=0.D0
  358. ENDIF
  359. ELSE
  360. * Les contributions valent :
  361. * 1. (d Res_{\rho u})_d / (d var)_p =
  362. * +/-1 (normale sortante, rentrante) (1/V_d) * (S_f) * \mu
  363. * * [ [ ( 4/3 (n_x * \alpha_x) + (n_y * \alpha_y)
  364. * + (n_z * \alpha_z)) *
  365. * ((du)_p / (d var)_p)]
  366. * + [ (-2/3 (n_x * \alpha_y) + (n_y * \alpha_x)) *
  367. * ((dv)_p / (d var)_p)]
  368. * + [ (-2/3 (n_x * \alpha_z) + (n_z * \alpha_x)) *
  369. * ((dw)_p / (d var)_p)]
  370. * ]
  371. * 2. (d Res_{\rho v})_d / (d var)_p =
  372. * +/-1 (normale sortante, rentrante) (1/V_d) * (S_f) * \mu
  373. * * [ [ (-2/3 (n_y * \alpha_x) + (n_x * \alpha_y)) *
  374. * ((du)_p / (d var)_p)]
  375. * + [ ( 4/3 (n_y * \alpha_y) + (n_x * \alpha_x)
  376. * + (n_z * \alpha_z)) *
  377. * ((dv)_p / (d var)_p)]
  378. * + [ (-2/3 (n_y * \alpha_z) + (n_z * \alpha_y)) *
  379. * ((dw)_p / (d var)_p)]
  380. * ]
  381. * 3. (d Res_{\rho w})_d / (d var)_p =
  382. * +/-1 (normale sortante, rentrante) (1/V_d) * (S_f) * \mu
  383. * * [ [ (-2/3 (n_z * \alpha_x) + (n_x * \alpha_z)) *
  384. * ((du)_p / (d var)_p)]
  385. * + [ (-2/3 (n_z * \alpha_y) + (n_y * \alpha_z)) *
  386. * ((dv)_p / (d var)_p)]
  387. * + [ ( 4/3 (n_z * \alpha_z) + (n_x * \alpha_x)
  388. * + (n_y * \alpha_y)) *
  389. * ((dw)_p / (d var)_p)]
  390. * ]
  391. *
  392. * avec :
  393. * (du)_p / (d \rho)_p = - u / \rho_p
  394. * (du)_p / (d \rho u)_p = 1 / \rho_p
  395. * (du)_p / (d \rho v)_p = 0
  396. * (du)_p / (d \rho w)_p = 0
  397. * (dv)_p / (d \rho)_p = - v / \rho_p
  398. * (dv)_p / (d \rho u)_p = 0
  399. * (dv)_p / (d \rho v)_p = 1 / \rho_p
  400. * (dv)_p / (d \rho w)_p = 0
  401. * (dv)_p / (d \rho)_p = - w / \rho_p
  402. * (dv)_p / (d \rho u)_p = 0
  403. * (dv)_p / (d \rho v)_p = 0
  404. * (dv)_p / (d \rho w)_p = 1 / \rho_p
  405. *
  406. * normale sortante pour IPD=1, rentrante pour IPD=2
  407. SIGNOR=(-1.D0)**(IPD+1)
  408. VOLUEL=MPVOLU.VPOCHA(NLCEND,1)
  409. SURFFA=MPSURF.VPOCHA(NLFACE,1)
  410. CNX =MPNORM.VPOCHA(NLFACE,1)
  411. CNY =MPNORM.VPOCHA(NLFACE,2)
  412. CNZ =MPNORM.VPOCHA(NLFACE,3)
  413. ALPHAX=KDUNDX.VELCHE(IPP+1,IELEM)
  414. ALPHAY=KDUNDY.VELCHE(IPP+1,IELEM)
  415. ALPHAZ=KDUNDZ.VELCHE(IPP+1,IELEM)
  416. RHOP =MPROC.VPOCHA(NLCENP,1)
  417. UP =MPVITC.VPOCHA(NLCENP,1)
  418. VP =MPVITC.VPOCHA(NLCENP,2)
  419. WP =MPVITC.VPOCHA(NLCENP,3)
  420. FACTOR=SIGNOR*(1.D0/VOLUEL)*SURFFA*MU
  421. BROUDU=(( 4.D0/3.D0)*(CNX*ALPHAX))
  422. $ + (CNY*ALPHAY) + (CNZ*ALPHAZ)
  423. BROUDV=((-2.D0/3.D0)*(CNX*ALPHAY))
  424. $ + (CNY*ALPHAX)
  425. BROUDW=((-2.D0/3.D0)*(CNX*ALPHAZ))
  426. $ + (CNZ*ALPHAX)
  427. BROVDU=((-2.D0/3.D0)*(CNY*ALPHAX))
  428. $ + (CNX*ALPHAY)
  429. BROVDV=(( 4.D0/3.D0)*(CNY*ALPHAY))
  430. $ + (CNX*ALPHAX) + (CNZ*ALPHAZ)
  431. BROVDW=((-2.D0/3.D0)*(CNY*ALPHAZ))
  432. $ + (CNZ*ALPHAY)
  433. BROWDU=((-2.D0/3.D0)*(CNZ*ALPHAX))
  434. $ + (CNX*ALPHAZ)
  435. BROWDV=((-2.D0/3.D0)*(CNZ*ALPHAY))
  436. $ + (CNY*ALPHAZ)
  437. BROWDW=(( 4.D0/3.D0)*(CNZ*ALPHAZ))
  438. $ + (CNX*ALPHAX) + (CNY*ALPHAY)
  439. DUDRHO=-UP /RHOP
  440. DUDROU=1.D0/RHOP
  441. DVDRHO=-VP /RHOP
  442. DVDROV=1.D0/RHOP
  443. DWDRHO=-WP /RHOP
  444. DWDROW=1.D0/RHOP
  445. IF (.NOT.LMUR) THEN
  446. CTSGRV.POIPR2(IPP,IEL2)=NPPRIM
  447. ROURHO.VALMA2(IPD,IPP,IEL2)=
  448. $ FACTOR*((BROUDU*DUDRHO)
  449. $ +(BROUDV*DVDRHO)+(BROUDW*DWDRHO))
  450. ROVRHO.VALMA2(IPD,IPP,IEL2)=
  451. $ FACTOR*((BROVDU*DUDRHO)
  452. $ +(BROVDV*DVDRHO)+(BROVDW*DWDRHO))
  453. ROWRHO.VALMA2(IPD,IPP,IEL2)=
  454. $ FACTOR*((BROWDU*DUDRHO)
  455. $ +(BROWDV*DVDRHO)+(BROWDW*DWDRHO))
  456. ROUROU.VALMA2(IPD,IPP,IEL2)=
  457. $ FACTOR* (BROUDU*DUDROU)
  458. ROVROU.VALMA2(IPD,IPP,IEL2)=
  459. $ FACTOR* (BROVDU*DUDROU)
  460. ROWROU.VALMA2(IPD,IPP,IEL2)=
  461. $ FACTOR* (BROWDU*DUDROU)
  462. ROUROV.VALMA2(IPD,IPP,IEL2)=
  463. $ FACTOR* (BROUDV*DVDROV)
  464. ROVROV.VALMA2(IPD,IPP,IEL2)=
  465. $ FACTOR* (BROVDV*DVDROV)
  466. ROWROV.VALMA2(IPD,IPP,IEL2)=
  467. $ FACTOR* (BROWDV*DVDROV)
  468. ROUROW.VALMA2(IPD,IPP,IEL2)=
  469. $ FACTOR* (BROUDW*DWDROW)
  470. ROVROW.VALMA2(IPD,IPP,IEL2)=
  471. $ FACTOR* (BROVDW*DWDROW)
  472. ROWROW.VALMA2(IPD,IPP,IEL2)=
  473. $ FACTOR* (BROWDW*DWDROW)
  474. ELSE
  475. CTSGRV.POIPR1(IPP,IEL1)=NPPRIM
  476. ROURHO.VALMA1(IPD,IPP,IEL1)=
  477. $ FACTOR*((BROUDU*DUDRHO)
  478. $ +(BROUDV*DVDRHO)+(BROUDW*DWDRHO))
  479. ROVRHO.VALMA1(IPD,IPP,IEL1)=
  480. $ FACTOR*((BROVDU*DUDRHO)
  481. $ +(BROVDV*DVDRHO)+(BROVDW*DWDRHO))
  482. ROWRHO.VALMA1(IPD,IPP,IEL1)=
  483. $ FACTOR*((BROWDU*DUDRHO)
  484. $ +(BROWDV*DVDRHO)+(BROWDW*DWDRHO))
  485. ROUROU.VALMA1(IPD,IPP,IEL1)=
  486. $ FACTOR* (BROUDU*DUDROU)
  487. ROVROU.VALMA1(IPD,IPP,IEL1)=
  488. $ FACTOR* (BROVDU*DUDROU)
  489. ROWROU.VALMA1(IPD,IPP,IEL1)=
  490. $ FACTOR* (BROWDU*DUDROU)
  491. ROUROV.VALMA1(IPD,IPP,IEL1)=
  492. $ FACTOR* (BROUDV*DVDROV)
  493. ROVROV.VALMA1(IPD,IPP,IEL1)=
  494. $ FACTOR* (BROVDV*DVDROV)
  495. ROWROV.VALMA1(IPD,IPP,IEL1)=
  496. $ FACTOR* (BROWDV*DVDROV)
  497. ROUROW.VALMA1(IPD,IPP,IEL1)=
  498. $ FACTOR* (BROUDW*DWDROW)
  499. ROVROW.VALMA1(IPD,IPP,IEL1)=
  500. $ FACTOR* (BROVDW*DWDROW)
  501. ROWROW.VALMA1(IPD,IPP,IEL1)=
  502. $ FACTOR* (BROWDW*DWDROW)
  503. ENDIF
  504. ENDIF
  505. 124 CONTINUE
  506. 122 CONTINUE
  507. IF (.NOT.LMUR) THEN
  508. IEL2=IEL2+1
  509. ELSE
  510. IEL1=IEL1+1
  511. ENDIF
  512. ENDIF
  513. 12 CONTINUE
  514. NPP1=NPTEL-1
  515. NPP2=NPTEL-1
  516. NEL1=IEL1-1
  517. NEL2=IEL2-1
  518. SEGADJ ROURHO
  519. SEGADJ ROVRHO
  520. SEGADJ ROWRHO
  521. SEGADJ ROUROU
  522. SEGADJ ROVROU
  523. SEGADJ ROWROU
  524. SEGADJ ROUROV
  525. SEGADJ ROVROV
  526. SEGADJ ROWROV
  527. SEGADJ ROUROW
  528. SEGADJ ROVROW
  529. SEGADJ ROWROW
  530. SEGADJ CTSGRV
  531. CTSGRV.LMATSI(**)=ROURHO
  532. CTSGRV.LMATSI(**)=ROVRHO
  533. CTSGRV.LMATSI(**)=ROWRHO
  534. CTSGRV.LMATSI(**)=ROUROU
  535. CTSGRV.LMATSI(**)=ROVROU
  536. CTSGRV.LMATSI(**)=ROWROU
  537. CTSGRV.LMATSI(**)=ROUROV
  538. CTSGRV.LMATSI(**)=ROVROV
  539. CTSGRV.LMATSI(**)=ROWROV
  540. CTSGRV.LMATSI(**)=ROUROW
  541. CTSGRV.LMATSI(**)=ROVROW
  542. CTSGRV.LMATSI(**)=ROWROW
  543. * On accumule les matrices résultantes dans IJACO
  544. CALL AJMTK(CTSGRV,IJACO,IMPR,IRET)
  545. IF (IRET.NE.0) GOTO 9999
  546. SEGSUP ROURHO
  547. SEGSUP ROVRHO
  548. SEGSUP ROWRHO
  549. SEGSUP ROUROU
  550. SEGSUP ROVROU
  551. SEGSUP ROWROU
  552. SEGSUP ROUROV
  553. SEGSUP ROVROV
  554. SEGSUP ROWROV
  555. SEGSUP ROUROW
  556. SEGSUP ROVROW
  557. SEGSUP ROWROW
  558. SEGSUP CTSGRV
  559. *
  560. SEGDES MCOGRV
  561. SEGDES KDUNDZ
  562. SEGDES KDUNDY
  563. SEGDES KDUNDX
  564. 1 CONTINUE
  565. SEGDES ICOGRV
  566. SEGDES MPVITC
  567. SEGDES MPROC
  568. SEGDES MPVOLU
  569. SEGDES MPNORM
  570. SEGDES MPSURF
  571. SEGDES MELEFL
  572. SEGDES KRFACE
  573. SEGDES KRCENT
  574. SEGDES NOMINC
  575. IF (LCLITO) THEN
  576. SEGDES KRTOIM
  577. ENDIF
  578. IF (LCLIMV) THEN
  579. SEGDES KRVIMP
  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 ylap2c'
  595. RETURN
  596. *
  597. * End of subroutine YLAP2C
  598. *
  599. END
  600.  
  601.  
  602.  
  603.  
  604.  
  605.  
  606.  
  607.  
  608.  
  609.  
  610.  
  611.  
  612.  

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