Télécharger xlap1d.eso

Retour à la liste

Numérotation des lignes :

xlap1d
  1. C XLAP1D SOURCE CB215821 20/11/25 13:43:14 10792
  2. SUBROUTINE XLAP1D(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 : XLAP1D
  15. C DESCRIPTION : Calcul de la matrice jacobienne du résidu du laplacien
  16. C VF 2D.
  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 e_t )
  24. C Les contributions sont plus "compliquées" à calculer que
  25. C les simples (cf. xlap1c) car on a à dériver des produits
  26. C de fonctions de la vitesse.
  27. C xlap1e 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 : XLAP1A : Calcul de la matrice jacobienne du
  45. C résidu du laplacien VF 2D.
  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 2D.
  80. C SORTIES : -
  81. C CODE RETOUR (IRET) : = 0 si tout s'est bien passé
  82. C***********************************************************************
  83. C VERSION : v1, 10/12/2001, version initiale
  84. C HISTORIQUE : v1, 10/12/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 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
  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. *
  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,NLCGAU,NLCDRO
  150. *
  151. REAL*8 ALPHA,UMALPH
  152. REAL*8 DRD,DRG
  153. REAL*8 DUXXF,DUXYF,DUYXF,DUYYF
  154. REAL*8 XD,XF,XG,XFMXD,XFMXG
  155. REAL*8 YD,YF,YG,YFMYD,YFMYG
  156. REAL*8 ALPHAX,ALPHAY,CNX,CNY
  157. REAL*8 SIGNOR,SURFFA,VOLUEL
  158. REAL*8 RHOP,UP,VP
  159. REAL*8 FACTOR,FACTDU,FACTDV
  160. REAL*8 DUDRHO,DUDROU,DVDRHO,DVDROV
  161. REAL*8 DSTDU
  162. REAL*8 TAUXX,TAUXY,TAUYY
  163. REAL*8 EPSIXX,EPSIXY,EPSIYX,EPSIYY
  164. REAL*8 GAMMXD,GAMMXG,GAMMYD,GAMMYG
  165. *
  166. * Executable statements
  167. *
  168. IF (IMPR.GT.2) WRITE(IOIMP,*) 'Entrée dans xlap1d.eso'
  169. * On calcule les contributions à (d Res_{\rho e_t} / d var) ; var
  170. * prenant successivement les valeurs :
  171. * \rho, \rho u, \rho v, \rho e_t
  172. * On dérive les termes : (\tens{\tau(\grad{u})} \prod \vect{u})
  173. * \pscal \vect{n}
  174. * ce qui donne deux contributions.
  175. * Contribution 1 :
  176. * ( (d \tens{\tau} / d var) \prod \vect{u}) \pscal \vect{n}
  177. * Contribution 2 :
  178. * ( \tens{\tau} \prod (d \vect{u} / d var)) \pscal \vect{n}
  179. * Note :
  180. * pas de contribution à (d Res_{\rho e_t} / d \rho e_t).
  181. * Les noms de matrices élémentaires (type MATSIM) associées sont :
  182. * RETRHO, RETROU, RETROV
  183. IF (LCLIMV) THEN
  184. SEGACT KRVIMP
  185. ENDIF
  186. IF (LCLITO) THEN
  187. SEGACT KRTOIM
  188. SEGACT MPTOIM
  189. ENDIF
  190. SEGACT NOMINC
  191. SEGACT KRCENT
  192. SEGACT KRFACE
  193. SEGACT MELEFL
  194. SEGACT MPSURF
  195. SEGACT MPNORM
  196. SEGACT MPVOLU
  197. SEGACT MPMUC
  198. SEGACT MPROC
  199. SEGACT MPVITC
  200. SEGACT MPGRVF
  201. SEGACT ICOGRV
  202. NSOUCH=ICOGRV.IMACHE(/1)
  203. DO 1 ISOUCH=1,NSOUCH
  204. MCOGRV=ICOGRV.IMACHE(ISOUCH)
  205. JCOGRV=ICOGRV.ICHAML(ISOUCH)
  206. SEGACT JCOGRV
  207. KDUNDX=JCOGRV.IELVAL(1)
  208. KDUNDY=JCOGRV.IELVAL(2)
  209. SEGDES JCOGRV
  210. SEGACT KDUNDX
  211. SEGACT KDUNDY
  212. SEGACT MCOGRV
  213. NELEM=MCOGRV.NUM(/2)
  214. NPTEL=MCOGRV.NUM(/1)
  215. NPP1=NPTEL
  216. NPP2=NPTEL+1
  217. NEL1=NELEM
  218. NEL2=NELEM
  219. IEL1=1
  220. IEL2=1
  221. SEGINI RETRHO
  222. SEGINI RETROU
  223. SEGINI RETROV
  224. SEGINI CCGRV2
  225. RETRHO.NOMPRI(1:4)=NOMINC.MOTS(1)
  226. RETRHO.NOMPRI(5:8)=' '
  227. RETRHO.NOMDUA(1:4)=NOMINC.MOTS(4)
  228. RETRHO.NOMDUA(5:8)=' '
  229. RETROU.NOMPRI(1:4)=NOMINC.MOTS(2)
  230. RETROU.NOMPRI(5:8)=' '
  231. RETROU.NOMDUA(1:4)=NOMINC.MOTS(4)
  232. RETROU.NOMDUA(5:8)=' '
  233. RETROV.NOMPRI(1:4)=NOMINC.MOTS(3)
  234. RETROV.NOMPRI(5:8)=' '
  235. RETROV.NOMDUA(1:4)=NOMINC.MOTS(4)
  236. RETROV.NOMDUA(5:8)=' '
  237. DO 12 IELEM=1,NELEM
  238. * Le premier point du support de ICOGRV est un point FACE
  239. NGFACE=MCOGRV.NUM(1,IELEM)
  240. NLFACE=KRFACE.LECT(NGFACE)
  241. IF (NLFACE.EQ.0) THEN
  242. WRITE(IOIMP,*) 'Erreur de programmation n°1'
  243. GOTO 9999
  244. ENDIF
  245. * On calcule la contribution 2 à la matrice jacobienne IJACO de la
  246. * face NGFACE
  247. * (points duaux : centres à gauche et à droite de la face)
  248. * (points primaux : une partie (bicoz conditions aux limites)
  249. * de ceux du stencil pour le calcul du gradient
  250. * à la face, ils doivent être des points centres
  251. * ET les centres à gauche et à droite qui servent pour le
  252. * calcul de la vitesse sur la face)
  253. * Si la vitesse sur la face est imposée par les
  254. * conditions aux limites, la contribution 2 de la face à IJACO est
  255. * nulle.
  256. LCTR2A=.TRUE.
  257. IF (LCLIMV) THEN
  258. NLCLV=KRVIMP.LECT(NGFACE)
  259. IF (NLCLV.NE.0) THEN
  260. LCTR2A=.FALSE.
  261. ENDIF
  262. ENDIF
  263. IF (LCTR2A) THEN
  264. NGCGAU=MELEFL.NUM(1,NLFACE)
  265. NGCDRO=MELEFL.NUM(3,NLFACE)
  266. NLCGAU=KRCENT.LECT(NGCGAU)
  267. NLCDRO=KRCENT.LECT(NGCDRO)
  268. LMUR=(NGCGAU.EQ.NGCDRO)
  269. * On calcule ensuite les valeurs des coefficients qui servent pour
  270. * interpoler la vitesse sur la face NGFACE à partir des vitesses
  271. * gauche (et droite si non mur) et des dérivées de la vitesse sur la
  272. * face NGFACE (de la même manière que dans xlap12.eso)
  273. IF (LMUR) THEN
  274. * Parametres geometriques
  275. ICOORX=((IDIM+1)*(NGFACE-1))+1
  276. XF=MCOORD.XCOOR(ICOORX)
  277. YF=MCOORD.XCOOR(ICOORX+1)
  278. ICOORX=((IDIM+1)*(NGCGAU-1))+1
  279. XG=MCOORD.XCOOR(ICOORX)
  280. YG=MCOORD.XCOOR(ICOORX+1)
  281. XFMXG=XF-XG
  282. YFMYG=YF-YG
  283. ALPHA=0.0D0
  284. UMALPH=1.0D0
  285. GAMMXG=1.D0
  286. EPSIXX=XFMXG
  287. EPSIXY=YFMYG
  288. GAMMYG=1.D0
  289. EPSIYX=XFMXG
  290. EPSIYY=YFMYG
  291. ELSEIF (.NOT.LMUR) THEN
  292. ICOORX=((IDIM+1)*(NGFACE-1))+1
  293. XF=MCOORD.XCOOR(ICOORX)
  294. YF=MCOORD.XCOOR(ICOORX+1)
  295. ICOORX=((IDIM+1)*(NGCGAU-1))+1
  296. XG=MCOORD.XCOOR(ICOORX)
  297. YG=MCOORD.XCOOR(ICOORX+1)
  298. XFMXG=XF-XG
  299. YFMYG=YF-YG
  300. DRG=SQRT((XFMXG*XFMXG)+(YFMYG*YFMYG))
  301. ICOORX=((IDIM+1)*(NGCDRO-1))+1
  302. XD=MCOORD.XCOOR(ICOORX)
  303. YD=MCOORD.XCOOR(ICOORX+1)
  304. XFMXD=XF-XD
  305. YFMYD=YF-YD
  306. DRD=SQRT((XFMXD*XFMXD)+(YFMYD*YFMYD))
  307. ALPHA=DRG/(DRG+DRD)
  308. UMALPH=1.0D0-ALPHA
  309. GAMMXG=UMALPH
  310. GAMMXD=ALPHA
  311. EPSIXX=(XFMXG*UMALPH)+(XFMXD*ALPHA)
  312. EPSIXY=(YFMYG*UMALPH)+(YFMYD*ALPHA)
  313. GAMMYG=UMALPH
  314. GAMMYD=ALPHA
  315. EPSIYX=(XFMXG*UMALPH)+(XFMXD*ALPHA)
  316. EPSIYY=(YFMYG*UMALPH)+(YFMYD*ALPHA)
  317. ELSE
  318. WRITE(IOIMP,*) 'Erreur de programmation n°2'
  319. GOTO 9999
  320. ENDIF
  321. * On distingue le cas où la face est un bord du maillage (mur)
  322. * du cas où la face est interne au maillage
  323. IF (.NOT.LMUR) THEN
  324. NPD=2
  325. NPP=NPTEL+1
  326. ELSE
  327. NPD=1
  328. NPP=NPTEL
  329. ENDIF
  330. MU=UMALPH*MPMUC.VPOCHA(NLCGAU,1) +
  331. & ALPHA*MPMUC.VPOCHA(NLCDRO,1)
  332. * On calcule tout d'abord les valeurs du tenseur des contraintes sur
  333. * la face NGFACE de la même manière que dans xlap12.eso
  334. IF (LCLITO) THEN
  335. NLFTOI=KRTOIM.LECT(NGFACE)
  336. ELSE
  337. NLFTOI=0
  338. ENDIF
  339. IF (NLFTOI.NE.0) THEN
  340. TAUXX=MPTOIM.VPOCHA(NLFTOI,1)
  341. TAUYY=MPTOIM.VPOCHA(NLFTOI,2)
  342. TAUXY=MPTOIM.VPOCHA(NLFTOI,3)
  343. ELSE
  344. DUXXF=MPGRVF.VPOCHA(NLFACE,1)
  345. DUXYF=MPGRVF.VPOCHA(NLFACE,2)
  346. DUYXF=MPGRVF.VPOCHA(NLFACE,3)
  347. DUYYF=MPGRVF.VPOCHA(NLFACE,4)
  348. DSTDU=(2.0D0/3.0D0)*(DUXXF+DUYYF)
  349. TAUXX=MU*((2.0D0*DUXXF)-DSTDU)
  350. TAUXY=MU*(DUXYF+DUYXF)
  351. TAUYY=MU*((2.0D0*DUYYF)-DSTDU)
  352. ENDIF
  353. * IPD=1 : point à gauche du point NGFACE
  354. * IPD=2 : point à droite du point NGFACE
  355. DO 122 IPD=1,NPD
  356. NPDUAL=MELEFL.NUM((2*IPD)-1,NLFACE)
  357. IF (.NOT.LMUR) THEN
  358. CCGRV2.POIDU2(IPD,IEL2)=NPDUAL
  359. ELSE
  360. CCGRV2.POIDU1(IPD,IEL1)=NPDUAL
  361. ENDIF
  362. NLCEND=KRCENT.LECT(NPDUAL)
  363. IF (NLCEND.EQ.0) THEN
  364. WRITE(IOIMP,*) 'Erreur grave n°1'
  365. GOTO 9999
  366. ENDIF
  367. DO 124 IPP=1,NPP
  368. IF (IPP.EQ.NPTEL) THEN
  369. NPPRIM=NGCGAU
  370. ELSEIF (IPP.EQ.NPTEL+1) THEN
  371. NPPRIM=NGCDRO
  372. ELSEIF (IPP.GE.1.AND.IPP.LT.NPTEL) THEN
  373. NPPRIM=MCOGRV.NUM(IPP+1,IELEM)
  374. ELSE
  375. WRITE(IOIMP,*) 'Erreur grave n°2'
  376. GOTO 9999
  377. ENDIF
  378. LCTR2B=.TRUE.
  379. IF (LCLIMV) THEN
  380. NLCLV=KRVIMP.LECT(NPPRIM)
  381. IF (NLCLV.NE.0) THEN
  382. LCTR2B=.FALSE.
  383. ENDIF
  384. ENDIF
  385. IF (.NOT.LCTR2B) THEN
  386. * Lorsque une contribution est nulle, on fixe artificiellement le
  387. * point primal égal au point dual.
  388. IF (.NOT.LMUR) THEN
  389. CCGRV2.POIPR2(IPP,IEL2)=NPDUAL
  390. RETRHO.VALMA2(IPD,IPP,IEL2)=0.D0
  391. RETROU.VALMA2(IPD,IPP,IEL2)=0.D0
  392. RETROV.VALMA2(IPD,IPP,IEL2)=0.D0
  393. ELSE
  394. CCGRV2.POIPR1(IPP,IEL1)=NPDUAL
  395. RETRHO.VALMA1(IPD,IPP,IEL1)=0.D0
  396. RETROU.VALMA1(IPD,IPP,IEL1)=0.D0
  397. RETROV.VALMA1(IPD,IPP,IEL1)=0.D0
  398. ENDIF
  399. ELSE
  400. * Les contributions 2 valent :
  401. * (d Res_{\rho e_t})_d / (d var)_p =
  402. * +/-1 (normale sortante, rentrante) (1/V_d) * (S_f)
  403. * * [ [ [ ((n_x * \tau_xx) + (n_y * \tau_yx))
  404. * * ((\epsilon_xx * \alpha_x) + (\epsilon_xy * \alpha_y))
  405. * ]
  406. * * ((du)_p / (d var)_p)
  407. * ]
  408. * + [ [ ((n_x * \tau_xy) + (n_y * \tau_yy))
  409. * * ((\epsilon_yx * \alpha_x) + (\epsilon_yy * \alpha_y))
  410. * ]
  411. * * ((dv)_p / (d var)_p)
  412. * ]
  413. * ]
  414. * et (m étant le centre de gauche dans le cas mur
  415. * et les centre gauche, puis droite dans le cas normal)
  416. * (d Res_{\rho e_t})_d / (d var)_m =
  417. * +/-1 (normale sortante, rentrante) (1/V_d) * (S_f)
  418. * * [ [ [ ((n_x * \tau_xx) + (n_y * \tau_yx))
  419. * * (\gamma_x)
  420. * ]
  421. * * ((du)_p / (d var)_p)
  422. * ]
  423. * + [ [ ((n_x * \tau_xy) + (n_y * \tau_yy))
  424. * * (\gamma_y)
  425. * ]
  426. * * ((dv)_p / (d var)_p)
  427. * ]
  428. * ]
  429. * sachant que l'expression donnant l'interpolation de la
  430. * vitesse (u,v) sur une face i est de la forme :
  431. * u_i = (\gamma_x,gauche * u_gauche)
  432. * + (\gamma_x,droite * u_droite) (=0 dans le cas mur)
  433. * + (\epsilon_xx,i * (du/dx)_i)
  434. * + (\epsilon_xy,i * (du/dy)_i)
  435. * v_i = (\gamma_y,gauche * v_gauche)
  436. * + (\gamma_y,droite * v_droite) (=0 dans le cas mur)
  437. * + (\epsilon_yx,i * (dv/dx)_i)
  438. * + (\epsilon_yy,i * (dv/dy)_i)
  439. * (voir dans xlap12.eso et ci-dessus pour les valeurs des coeffs
  440. * \gamma et \epsilon)
  441. NLCENP=KRCENT.LECT(NPPRIM)
  442. IF (NLCENP.EQ.0) THEN
  443. WRITE(IOIMP,*) 'Erreur grave n°3'
  444. GOTO 9999
  445. ENDIF
  446. * normale sortante pour IPD=1, rentrante pour IPD=2
  447. SIGNOR=(-1.D0)**(IPD+1)
  448. VOLUEL=MPVOLU.VPOCHA(NLCEND,1)
  449. SURFFA=MPSURF.VPOCHA(NLFACE,1)
  450. CNX =MPNORM.VPOCHA(NLFACE,1)
  451. CNY =MPNORM.VPOCHA(NLFACE,2)
  452. RHOP =MPROC.VPOCHA(NLCENP,1)
  453. UP =MPVITC.VPOCHA(NLCENP,1)
  454. VP =MPVITC.VPOCHA(NLCENP,2)
  455. FACTOR=SIGNOR*(1.D0/VOLUEL)*SURFFA
  456. IF (IPP.EQ.NPTEL) THEN
  457. FACTDU= ((CNX*TAUXX)+(CNY*TAUXY))
  458. $ * GAMMXG
  459. FACTDV= ((CNX*TAUXY)+(CNY*TAUYY))
  460. $ * GAMMYG
  461. ELSEIF (IPP.EQ.NPTEL+1) THEN
  462. FACTDU= ((CNX*TAUXX)+(CNY*TAUXY))
  463. $ * GAMMXD
  464. FACTDV= ((CNX*TAUXY)+(CNY*TAUYY))
  465. $ * GAMMYD
  466. ELSEIF (IPP.GE.1.AND.IPP.LT.NPTEL) THEN
  467. ALPHAX=KDUNDX.VELCHE(IPP+1,IELEM)
  468. ALPHAY=KDUNDY.VELCHE(IPP+1,IELEM)
  469. FACTDU= ((CNX*TAUXX)+(CNY*TAUXY))
  470. $ * ((EPSIXX*ALPHAX)+(EPSIXY*ALPHAY))
  471. FACTDV= ((CNX*TAUXY)+(CNY*TAUYY))
  472. $ * ((EPSIYX*ALPHAX)+(EPSIYY*ALPHAY))
  473. ELSE
  474. WRITE(IOIMP,*) 'Erreur grave n°3'
  475. GOTO 9999
  476. ENDIF
  477. DUDRHO=-UP /RHOP
  478. DUDROU=1.D0/RHOP
  479. DVDRHO=-VP /RHOP
  480. DVDROV=1.D0/RHOP
  481. IF (.NOT.LMUR) THEN
  482. CCGRV2.POIPR2(IPP,IEL2)=NPPRIM
  483. RETRHO.VALMA2(IPD,IPP,IEL2)=
  484. $ FACTOR*( (FACTDU*DUDRHO)
  485. $ +(FACTDV*DVDRHO))
  486. RETROU.VALMA2(IPD,IPP,IEL2)=
  487. $ FACTOR* (FACTDU*DUDROU)
  488. RETROV.VALMA2(IPD,IPP,IEL2)=
  489. $ FACTOR* (FACTDV*DVDROV)
  490. ELSE
  491. CCGRV2.POIPR1(IPP,IEL1)=NPPRIM
  492. RETRHO.VALMA1(IPD,IPP,IEL1)=
  493. $ FACTOR*( (FACTDU*DUDRHO)
  494. $ +(FACTDV*DVDRHO))
  495. RETROU.VALMA1(IPD,IPP,IEL1)=
  496. $ FACTOR* (FACTDU*DUDROU)
  497. RETROV.VALMA1(IPD,IPP,IEL1)=
  498. $ FACTOR* (FACTDV*DVDROV)
  499. ENDIF
  500. ENDIF
  501. 124 CONTINUE
  502. 122 CONTINUE
  503. IF (.NOT.LMUR) THEN
  504. IEL2=IEL2+1
  505. ELSE
  506. IEL1=IEL1+1
  507. ENDIF
  508. ENDIF
  509. 12 CONTINUE
  510. NPP1=NPTEL
  511. NPP2=NPTEL+1
  512. NEL1=IEL1-1
  513. NEL2=IEL2-1
  514. SEGADJ RETRHO
  515. SEGADJ RETROU
  516. SEGADJ RETROV
  517. SEGADJ CCGRV2
  518. CCGRV2.LMATSI(**)=RETRHO
  519. CCGRV2.LMATSI(**)=RETROU
  520. CCGRV2.LMATSI(**)=RETROV
  521. * On accumule les matrices résultantes dans IJACO
  522. CALL AJMTK(CCGRV2,IJACO,IMPR,IRET)
  523. IF (IRET.NE.0) GOTO 9999
  524. SEGSUP RETRHO
  525. SEGSUP RETROU
  526. SEGSUP RETROV
  527. SEGSUP CCGRV2
  528. *
  529. SEGDES MCOGRV
  530. SEGDES KDUNDY
  531. SEGDES KDUNDX
  532. 1 CONTINUE
  533. SEGDES ICOGRV
  534. SEGDES MPGRVF
  535. SEGDES MPVITC
  536. SEGDES MPMUC
  537. SEGDES MPROC
  538. SEGDES MPVOLU
  539. SEGDES MPNORM
  540. SEGDES MPSURF
  541. SEGDES MELEFL
  542. SEGDES KRFACE
  543. SEGDES KRCENT
  544. SEGDES NOMINC
  545. IF (LCLITO) THEN
  546. SEGDES KRTOIM
  547. SEGDES MPTOIM
  548. ENDIF
  549. IF (LCLIMV) THEN
  550. SEGDES KRVIMP
  551. ENDIF
  552. *
  553. * Normal termination
  554. *
  555. IRET=0
  556. RETURN
  557. *
  558. * Format handling
  559. *
  560. *
  561. * Error handling
  562. *
  563. 9999 CONTINUE
  564. IRET=1
  565. WRITE(IOIMP,*) 'An error was detected in subroutine xlap1d'
  566. RETURN
  567. *
  568. * End of subroutine XLAP1D
  569. *
  570. END
  571.  
  572.  
  573.  
  574.  
  575.  
  576.  
  577.  
  578.  
  579.  
  580.  
  581.  
  582.  
  583.  

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