Télécharger divu.eso

Retour à la liste

Numérotation des lignes :

  1. C DIVU SOURCE CB215821 16/12/05 21:39:13 9237
  2. SUBROUTINE DIVU
  3. C-----------------------------------------------------------------------
  4. C Calcul la divergence d'un champ de vecteur (en général la vitesse)
  5. C discretise dans l'espace de Raviart Thomas de plus petit degre.
  6. C-----------------------------------------------------------------------
  7. C
  8. C On obtient la DIVERGENCE de la vitesse en sommant les débits sur
  9. C chaque élément, chaque débit étant de support la normale sortante.
  10. C C'est pourquoi nous avons besoin du MCHAML d'orientation des normales
  11. C de référence afin de modifier la valeur algébrique du débit.
  12. C
  13. C---------------------------
  14. C Phrase d'appel (GIBIANE) :
  15. C---------------------------
  16. C
  17. C CHP1 = DIVU MMODEL TABLE1 CHP2 CHAM1 (CHP3 (CHP4))
  18. C
  19. C------------------------
  20. C Opérandes et résultat :
  21. C------------------------
  22. C
  23. C CHP1 : CHAMPOINT centre contenant la divergence de la vitesse
  24. C MMODEL : Objet MMODEL spécifiant la formulation
  25. C TABLE1 : Objet table DOMAINE regroupant les infos géometriques
  26. C CHP2 : CHAMPOINT contenant le debit aux faces
  27. C CHAM1 : MCHAML sens de la normale à la face (1=out , -1=in)
  28. C CHP3 : CHAMPOIN contenant une fonction aux centres des elements
  29. C CHP4 : CHAMPOIN contenant les valeurs de cette fonction sur les
  30. C limites du domaine(le support est contitué par des points face)
  31. C
  32. C-----------------------------------------------------------------------
  33. C
  34. C Langage : ESOPE + FORTRAN77
  35. C
  36. C Auteurs : F.DABBENE 01/94
  37. C Complements : C. LE POTIER ET F. AURIOL 20/00
  38. C-----------------------------------------------------------------------
  39. IMPLICIT INTEGER(I-N)
  40. IMPLICIT REAL*8 (A-H,O-Z)
  41. *
  42. -INC CCOPTIO
  43. -INC SMCHAML
  44. -INC SMCHPOI
  45. -INC SMELEME
  46. -INC SMMODEL
  47. -INC SMTABLE
  48. *
  49. SEGMENT IPMAHY
  50. INTEGER MAHYBR(NSOUS)
  51. ENDSEGMENT
  52. *
  53. CHARACTER*4 NOMTOT(1)
  54. CHARACTER*8 CHARIN,LETYPE
  55. *
  56. * Initialisations
  57. *
  58. CHARIN = 'MAILLAGE'
  59. *
  60. * Lecture du MMODEL
  61. *
  62. CALL LIROBJ('MMODEL',IPMODE,1,IRET1)
  63. IF (IERR.NE.0) RETURN
  64. *
  65. * Lecture de la TABLE domaine
  66. *
  67. IPTABL = 0
  68. CALL LEKMOD(IPMODE,IPTABL,IRET)
  69. IF (IERR.NE.0) RETURN
  70. CALL LEKTAB(IPTABL,CHARIN,IOBRE)
  71. IF (IERR.NE.0) RETURN
  72. IPGEOM = IOBRE
  73. CALL LEKTAB(IPTABL,'ELTFA',IOBRE)
  74. IF (IERR.NE.0) RETURN
  75. IELTFA = IOBRE
  76. CALL LEKTAB(IPTABL,'CENTRE',IOBRE)
  77. IF (IERR.NE.0) RETURN
  78. IPCENT = IOBRE
  79. CALL LEKTAB(IPTABL,'FACE',IOBRE)
  80. IF (IERR.NE.0) RETURN
  81. IPFACE = IOBRE
  82. CALL LEKTAB(IPTABL,'FACEL',IOBRE)
  83. IF (IERR.NE.0) RETURN
  84. IFACEL = IOBRE
  85. *
  86. * Lecture du CHAMPOINT de debit (nom de composantes FLUX)
  87. *
  88. CALL LIROBJ('CHPOINT',ICHP1,1,IRET1)
  89. IF (IERR.NE.0) RETURN
  90. *
  91. * Lecture du CHAMELEM
  92. *
  93. CALL LIROBJ('MCHAML',IPIN,1,IRET1)
  94. CALL REDUAF(IPIN,IPMODE,IPCHEL,0,IR,KER)
  95. IF(IR .NE. 1) CALL ERREUR(KER)
  96. IF(IERR .NE. 0) RETURN
  97. C CALL LEKTAB(IPTABL,'XXNORMAE',IPCHEL)
  98. C IF (IERR.NE.0) RETURN
  99. *
  100. * Lecture du CHAMPOINT de la fonction aux centres
  101. *
  102. IPFONC=0
  103. CALL LIROBJ('CHPOINT',ICHP2,0,IRET2)
  104. IF (IERR.NE.0) RETURN
  105. IF(IRET2.EQ.1)THEN
  106. INDIC = 1
  107. NBCOMP = 1
  108. NOMTOT(1) = 'SCAL'
  109. CALL QUEPOI(ICHP2,IPCENT,INDIC,NBCOMP,NOMTOT)
  110. IF (IERR.NE.0) RETURN
  111. ICLIM=0
  112. CALL LIROBJ('CHPOINT',ICLIM,0,IRLIM)
  113. CALL DIVUFN(ICHP2,ICLIM,IPFACE,IFACEL,ICHP1,IPCHEL,IPFONC)
  114.  
  115. * VERRUE
  116. * CALL ECCHPO(ipfonc)
  117. ENDIF
  118. *
  119. * Test CHAMPOINT de FLUX
  120. *
  121. INDIC = 1
  122. NBCOMP = 1
  123. NOMTOT(1) = 'FLUX'
  124. CALL QUEPOI(ICHP1,IPFACE,INDIC,NBCOMP,NOMTOT)
  125. IF (IERR.NE.0) RETURN
  126. *
  127. * Test de la formulation contenu dans MMODEL
  128. *
  129. MMODEL = IPMODE
  130. SEGACT MMODEL
  131. NSOUS = KMODEL(/1)
  132. SEGINI IPMAHY
  133. IDARCY = 0
  134. IPT1=IPGEOM
  135. IPT2=IPGEOM
  136. DO 10 ISOUS=1,NSOUS
  137. IF(NSOUS.GT.1)THEN
  138. SEGACT IPT2
  139. IPT1=IPT2.LISOUS(ISOUS)
  140. SEGDES IPT2
  141. ENDIF
  142. IMODEL = KMODEL(ISOUS)
  143. SEGACT IMODEL
  144. LETYPE = FORMOD(1)
  145. IF (LETYPE.EQ.'DARCY') THEN
  146. IDARCY = IDARCY + 1
  147. MAHYBR(ISOUS) = IPT1
  148. ENDIF
  149. SEGDES IMODEL
  150. 10 CONTINUE
  151. SEGDES MMODEL
  152. IF (IDARCY.EQ.0) THEN
  153. SEGSUP IPMAHY
  154. MOTERR = LETYPE
  155. CALL ERREUR(193)
  156. RETURN
  157. ENDIF
  158. *
  159. * Récuperation des pointeurs ELTFA pour les zones ou DARCY est defini
  160. *
  161. MELEME = IELTFA
  162. SEGACT MELEME
  163. LZONES = LISOUS(/1)
  164. IF (LZONES.EQ.0) LZONES = 1
  165. IPT1 = IPGEOM
  166. SEGACT IPT1
  167. DO 30 ISOUS=1,NSOUS
  168. IMAMEL = MAHYBR(ISOUS)
  169. IF (IMAMEL.NE.0) THEN
  170. DO 20 ISZ=1,LZONES
  171. IF (LZONES.EQ.1) THEN
  172. IPT2 = IPT1
  173. IPT3 = MELEME
  174. ELSE
  175. IPT2 = IPT1.LISOUS(ISZ)
  176. IPT3 = LISOUS(ISZ)
  177. ENDIF
  178. IF (IPT2.EQ.IMAMEL) THEN
  179. MAHYBR(ISOUS) = IPT3
  180. GOTO 30
  181. ENDIF
  182. 20 CONTINUE
  183. IF (IMAMEL.EQ.MAHYBR(ISOUS)) THEN
  184. MOTERR(1:8) = ' MODELE '
  185. MOTERR(1:16) = ' ELTFA '
  186. INTERR(1) = ISOUS
  187. CALL ERREUR(698)
  188. SEGDES IPT1
  189. SEGDES MELEME
  190. SEGSUP IPMAHY
  191. RETURN
  192. ENDIF
  193. ENDIF
  194. 30 CONTINUE
  195. SEGDES IPT1
  196. SEGDES MELEME
  197. *
  198. * Test du SUPPORT du MCHAML d'orientation : On teste qu'à chaque zone
  199. * du MODELE ou Darcy est défini correspond une zone du MCHAML
  200. *
  201. MCHELM = IPCHEL
  202. SEGACT MCHELM
  203. NCH1 = IMACHE(/1)
  204. NBOK = 0
  205. DO 50 ISOUS=1,NSOUS
  206. IMAMEL = MAHYBR(ISOUS)
  207. IF (IMAMEL.NE.0) THEN
  208. DO 40 JSOUS=1,NCH1
  209. IF (IMACHE(JSOUS).EQ.IMAMEL) NBOK=NBOK+1
  210. 40 CONTINUE
  211. ENDIF
  212. 50 CONTINUE
  213. SEGDES MCHELM
  214. SEGSUP IPMAHY
  215. IF (NBOK.NE.NCH1) THEN
  216. MOTERR(1:8) = ' ORIENT '
  217. MOTERR(9:16)= ' ELTFA '
  218. CALL ERREUR(135)
  219. RETURN
  220. ENDIF
  221. *
  222. * Calcul de la divergence du champ de vecteur connu via ses flux
  223. *
  224. CALL DIVU1(ICHP1,IPCHEL,IPFACE,IPCENT,IPFONC,IRET)
  225. CALL ECROBJ('CHPOINT',IRET)
  226. IF(IPFONC.NE.0)THEN
  227. CALL ECROBJ('CHPOINT',IPFONC)
  228. * CALL ECCHPO(ipfonc)
  229. * CALL ECCHPO(iret)
  230. MCHPOI=IPFONC
  231. SEGACT MCHPOI
  232. MSOUPO=IPCHP(1)
  233. SEGACT MSOUPO
  234. MPOVAL=IPOVAL
  235. SEGDES MPOVAL,MSOUPO,MCHPOI
  236. ENDIF
  237. *
  238. RETURN
  239. END
  240.  
  241.  
  242.  

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