Télécharger tadve8.eso

Retour à la liste

Numérotation des lignes :

tadve8
  1. C TADVE8 SOURCE CB215821 26/03/06 21:15:09 12485
  2.  
  3. C=======================================================================
  4. C= T A D V E 8 =
  5. C= ----------- =
  6. C= =
  7. C= Fonction : =
  8. C= ---------- =
  9. C= Calcul de la matrice d'ADVECTION pour les =
  10. C= les elements finis MASSIFs a integration NUMERIQUE =
  11. C= =
  12. C= Parametres : (E)=Entree (S)=Sortie =
  13. C= ------------ =
  14. * NEF (E) NUMERO DE L'ELEMENT-FINI DANS NOMTP (VOIR CCHAMP)
  15. * IPMAIL E) NUMERO DU MAILLAGE ELEMENTAIRE CONSIDERE
  16. *
  17. * AUTEUR, DATE DE CREATION:
  18. * -------------------------
  19. * MARINO ARROYO, 18 MAI 1999
  20. *
  21. * LANGAGE:
  22. * --------
  23. * ESOPE + FORTRAN77
  24. *
  25. ************************************************************************
  26. SUBROUTINE TADVE8 (NEF,IPMAIL,IPINTE,IMATE,IVAMAT,NVAMAT,ISYMM,
  27. & IPMATR,NLIGR,ITYP1)
  28.  
  29. IMPLICIT INTEGER(I-N)
  30. IMPLICIT REAL*8(A-H,O-Z)
  31.  
  32. -INC PPARAM
  33. -INC CCOPTIO
  34. -INC CCREEL
  35. -INC CCHAMP
  36.  
  37. -INC SMCHAML
  38. -INC SMCOORD
  39. -INC SMELEME
  40. -INC SMINTE
  41. -INC SMRIGID
  42.  
  43. -INC TMPTVAL
  44.  
  45. C Reprise de la MACRO de tadve1.eso (a modifier ensemble) c'est pour ITYP1
  46. MACRO,(THERMIQUE,DIFFUSION,NAVIER_STOKES,MECANIQUE)
  47.  
  48. SEGMENT,MMAT1
  49. REAL*8 CEL(NBNN,NBNN),XE(3,NBNN)
  50. REAL*8 SHP(6,NBNN),GRAD(NDIM,NBNN)
  51. C* REAL*8 FORME(NBNN),V77(NBNN),V22(IDIM) <- A verifier pour V22
  52. REAL*8 FORME(NBNN),V77(NBNN),V22(NDIM)
  53. REAL*8 CMAT(NDIM,NDIM),CMAT1(IDIM,IDIM),CMAT2(IDIM,IDIM)
  54. ENDSEGMENT
  55.  
  56. SEGMENT,MMAT2
  57. REAL*8 CEM(NLIGR,NLIGR)
  58. ENDSEGMENT
  59.  
  60. C SEGMENT ,MAXE
  61. C REAL*8 TXR(IDIM,IDIM),XLOC(3,3),XGLOB(3,3)
  62. C ENDSEGMENT
  63.  
  64. C 1 - INITIALISATIONS ET VERIFICATIONS
  65. C ======================================
  66. MELEME = IPMAIL
  67. c* SEGACT,MELEME
  68. NBNN = NUM(/1)
  69. NBELEM = NUM(/2)
  70. C =====
  71. MINTE = IPINTE
  72. c* SEGACT,MINTE
  73. NBPGAU = POIGAU(/1)
  74. C =====
  75. MPTVAL = IVAMAT
  76. c* SEGACT,MPTVAL
  77. C =====
  78. XMATRI = IPMATR
  79. c* SEGACT,xMATRI*MOD
  80. c* NLIGRP = NBNN = NLIGR
  81. c* NLIGRD = NBNN = NLIGR
  82. C =====
  83. C Recuperation des fonctions de forme et de leurs derivees au
  84. C centre de gravite de l'element pour le calcul des axes locaux
  85. C d'orthotropie ou d'anisotropie
  86. C =====
  87. C IF (IMATE.EQ.2 .OR.IMATE.EQ.3) THEN
  88. C NLG = NUMGEO(NEF)
  89. C CALL RESHPT(1,NBNN,NLG,NEF,0,IPINT1,IOK)
  90. Cc*of IF (IOK.EQ.0) GOTO 999
  91. C MINTE1 = IPINT1
  92. C SEGACT,MINTE1
  93. C NBSH = MINTE1.SHPTOT(/2)
  94. C ENDIF
  95.  
  96. C =====
  97. C Initialisation des segments de travail
  98. C =====
  99. IF (IFOMOD.EQ.1) THEN
  100. NDIM = 3
  101. ELSE
  102. NDIM = IDIM
  103. ENDIF
  104. SEGINI,MMAT1
  105. if (ityp1.eq.MECANIQUE) SEGINI,MMAT2
  106. C IF (IMATE.EQ.2 .OR. IMATE.EQ.3) THEN
  107. C SEGINI,MAXE
  108. C ENDIF
  109.  
  110. C 2 - BOUCLE SUR LES ELEMENTS DU MAILLAGE ELEMENTAIRE IPMAIL
  111. C ============================================================
  112. DO IEL = 1, NBELEM
  113. *
  114. * MISE A ZERO DU TABLEAU CEL
  115. *
  116. CALL ZERO(CEL,NBNN,NBNN)
  117. if (ityp1.eq.MECANIQUE) CALL ZERO(CEM,NLIGR,NLIGR)
  118. *
  119. * COORDONNEES DES NOEUDS DE L'ELEMENT IEL DANS LE REPERE GLOBAL
  120. *
  121. CALL DOXE(XCOOR,IDIM,NBNN,NUM,IEL,XE)
  122. *
  123. * BOUCLE SUR LES POINTS DE GAUSS
  124. *
  125. IFOIS = 0
  126. DO IGAU = 1, NBPGAU
  127. *
  128. * CALCUL DE LA MATRICE GRADIENT DES FONCTIONS DE FORME ET
  129. * DU JACOBIEN,EN UN POINT DE GAUSS
  130. *
  131. * Recuperation de GRAD (gradient de FORME et 1er calcul du jacobien)
  132. CALL TCOND5(IGAU,NBNN,NDIM,XE,SHPTOT,SHP,GRAD,DJAC)
  133. IF (DJAC.LT.XZERO) IFOIS=IFOIS+1
  134. DJAC = ABS(DJAC)
  135. IF (DJAC.LT.XPETIT) THEN
  136. INTERR(1) = iElt
  137. CALL ERREUR(259)
  138. GOTO 9990
  139. ENDIF
  140.  
  141. * Recuperation de FORME
  142. CALL CAPA4(NEF,IGAU,NBNN,XE,SHPTOT,SHP,FORME,DJAC2)
  143.  
  144. XSCAL = DJAC*POIGAU(IGAU)
  145.  
  146. * Recuperation des valeurs des composantes (ordre dans tadve1.eso)
  147. * THERMIQUE & MECANIQUE : XSCAL = DJAC . POIGAU . RHO . C
  148. * DIFFUSION : XSCAL = DJAC . POIGAU . CDIF
  149. DO i = 1, IVAL(/1)
  150. C IF (IVAL(i).NE.0) THEN
  151. MELVAL = IVAL(i)
  152. IBMN = MIN(IEL ,VELCHE(/2))
  153. IGMN = MIN(IGAU,VELCHE(/1))
  154.  
  155. if (i.le.IDIM) then
  156. * Construction du vecteur vitesse (IDIM composante)
  157. V22(i) = VELCHE(IGMN,IBMN)
  158.  
  159. else
  160. C On multiplie les autres scalaires entre eux
  161. XSCAL = XSCAL * VELCHE(IGMN,IBMN)
  162. endif
  163.  
  164. C ELSE
  165. C if (i.le.IDIM) then
  166. C V22(i) = XZERO
  167. C endif
  168. C ENDIF
  169. ENDDO
  170.  
  171. C La vitesse est donnee dans le repere global (elements massifs)
  172. C Il n'y a pas a distinguer les cas ISOTROPE, ORTHOTROPE et ANISOTROPE
  173. DO i = 1, NBNN
  174. r_z = XZERO
  175. DO j = 1, NDIM
  176. r_z = r_z + GRAD(j,i)*V22(j)
  177. ENDDO
  178. V77(i) = r_z * XSCAL
  179. ENDDO
  180.  
  181.  
  182. IF (ISYMM.EQ.1) THEN
  183. * CAS SYMETRIQUE : Option 'SYMM' de 'ADVE';
  184. DO i = 1, NBNN
  185. r_z = V77(i)
  186. LI = idim*(i-1)
  187. DO j = 1, i
  188. CEL(i,j) = CEL(i,j)
  189. & + (r_z*FORME(j) + V77(j)*FORME(i))/2.D0
  190. LJ = idim*(j - 1)
  191. if (ityp1.eq.MECANIQUE) then
  192. do k = 1,IDIM
  193. CEM(LI + k,LJ + k) = CEL(i,j)
  194. enddo
  195. endif
  196. ENDDO
  197. ENDDO
  198.  
  199. ELSE
  200. * CAS NON SYMETRIQUE : Par defaut
  201. DO i = 1, NBNN
  202. r_z = V77(i)
  203. LI = idim*(i-1)
  204. DO j = 1, NBNN
  205. CEL(j,i) = CEL(j,i) + (r_z *FORME(j))
  206. LJ = idim*(j - 1)
  207. if (ityp1.eq.MECANIQUE) then
  208. do k = 1,IDIM
  209. CEM(LJ + k,LI + k) = CEL(j,i)
  210. enddo
  211. endif
  212. ENDDO
  213. ENDDO
  214. ENDIF
  215. ENDDO
  216.  
  217. C Erreur si, en un point de Gauss, le jacobien change de signe.
  218. IF (IFOIS.NE.0 .AND. IFOIS.NE.NBPGAU) THEN
  219. INTERR(1) = iElt
  220. CALL ERREUR(195)
  221. GOTO 9990
  222. ENDIF
  223.  
  224. * REMPLISSAGE DE XMATRI
  225. IF (ISYMM.EQ.1) THEN
  226. * CAS SYMETRIQUE
  227. if (ityp1.eq.MECANIQUE) then
  228. CALL REMPMT(CEM,NLIGR,RE(1,1,iel))
  229. else
  230. CALL REMPMT(CEL,NLIGR,RE(1,1,iel))
  231. endif
  232.  
  233. ELSE
  234. * CAS NON SYMETRIQUE
  235. if (ityp1.eq.MECANIQUE) then
  236. CALL REMPMS(CEM,NLIGR,RE(1,1,iel))
  237. else
  238. CALL REMPMS(CEL,NLIGR,RE(1,1,iel))
  239. endif
  240. ENDIF
  241. ENDDO
  242.  
  243. C 3 - MENAGE : DESACTIVATION/DESTRUCTION DE SEGMENTS
  244. C ====================================================
  245. 9990 CONTINUE
  246. SEGSUP,MMAT1
  247. if (ityp1.eq.MECANIQUE) segsup MMAT2
  248.  
  249. RETURN
  250. END
  251.  
  252.  

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