Télécharger chabat.eso

Retour à la liste

Numérotation des lignes :

  1. C CHABAT SOURCE CB215821 19/08/20 21:15:29 10287
  2.  
  3. C=======================================================================
  4. C= C H A B A T =
  5. C= ----------- =
  6. C= =
  7. C= Fonction : =
  8. C= ---------- =
  9. C= Calcul des flux equivalents a des sources volumiques dans le cas =
  10. C= des elements BARRE (THERMIQUE) et TUYAU (ADVECTION) =
  11. C= =
  12. C= Parametres : (E)=Entree (S)=Sortie =
  13. C= ------------ =
  14. C= IPMODL (E) Pointeur du MMODEL a traiter =
  15. C= IFORMU (E) Entier indiquant la formulation du modele a traiter =
  16. C= IPCHSO (E) Pointeur du MCHAML de sources =
  17. C= IPCHEB (E) Pointeur du MCHAML de CARACTERISTIQUES =
  18. C= (necessaire pour les elements BARRes et TUYAux) =
  19. C= ISUPCH (E) Support des champs en entree =
  20. C= NOMDUA (E) Nom de la composante du champ de flux equivalents =
  21. C= IPCHAL (S) Pointeur du champ aux noeuds des flux equivalents =
  22. C=======================================================================
  23.  
  24. SUBROUTINE CHABAT (IPMODL,IFORMU, IPCHSO,IPCHEB,ISUPCH, NOMDUA,
  25. & IPCHAL)
  26.  
  27. IMPLICIT INTEGER(I-N)
  28. IMPLICIT REAL*8 (A-H,O-Z)
  29.  
  30. -INC CCOPTIO
  31. -INC CCREEL
  32.  
  33. -INC SMCOORD
  34. -INC SMCHAML
  35. -INC SMELEME
  36. -INC SMINTE
  37. -INC SMMODEL
  38.  
  39. SEGMENT INFO
  40. INTEGER INFELL(JG)
  41. ENDSEGMENT
  42.  
  43. SEGMENT MMAT1
  44. REAL*8 XEL(3,NBPTEL),AEL(NBPTEL,NBPTEL)
  45. ENDSEGMENT
  46.  
  47. CHARACTER*(*) NOMDUA
  48.  
  49. MMODEL = IPMODL
  50. ** SEGACT,MMODEL <- Modele actif en E/S
  51. NSOU = KMODEL(/1)
  52.  
  53. MCHELM = IPCHAL
  54. c* SEGACT,MCHELM <- Champ par element actif et modifiable en E/S
  55. c* NSZC = MCHELM.IMACHE(/1) <- On a ici : NSZC = NSOU
  56.  
  57. MCHEL1 = IPCHSO
  58. c* SEGACT,MCHEL1 <- Champ par element actif en E/S
  59. NSZ1 = MCHEL1.IMACHE(/1)
  60.  
  61. MCHEL2 = IPCHEB
  62. c* SEGACT,MCHEL2 <- Champ par element actif en E/S
  63. NSZ2 = MCHEL2.IMACHE(/1)
  64.  
  65. C BOUCLE SUR LES ZONES ELEMENTAIRES DU MODELE (ISOU)
  66. C ====================================================
  67. DO 100 ISOU = 1, NSOU
  68.  
  69. C Modele elementaire ISOU
  70. C =====
  71. IMODEL = mmodel.KMODEL(ISOU)
  72. c* SEGACT,IMODEL
  73. C =====
  74. C Recherche dans le MCHAML des sources (IPCHSO) de la sous-zone
  75. C associee au modele elementaire ISOU (IMAMOD et CONMOD), puis
  76. C recuperation des valeurs du champ elementaire de sources (MELVA1)
  77. C =====
  78. MELVA1 = 0
  79. DO is = 1, NSZ1
  80. IF (MCHEL1.IMACHE(is).EQ.imodel.IMAMOD .AND.
  81. & MCHEL1.CONCHE(is).EQ.imodel.CONMOD) THEN
  82. mchaml = MCHEL1.ICHAML(is)
  83. SEGACT,mchaml
  84. c il faudrait chercher la composante si le champ en a plus d'une.
  85. MELVA1 = mchaml.IELVAL(1)
  86. GOTO 10
  87. ENDIF
  88. ENDDO
  89. 10 CONTINUE
  90. IF (MELVA1.EQ.0) GOTO 100
  91. C =====
  92. C Recherche dans le MCHMAL des caracteristiques (IPCHEB) du
  93. C maillage (IMAMOD) associe au modele elementaire ISOU, puis
  94. C recuperation du MCHAML elementaire associe (MELVA2)
  95. C =====
  96. MELVA2 = 0
  97. DO is = 1, NSZ2
  98. IF (MCHEL2.IMACHE(is).EQ.imodel.IMAMOD .AND.
  99. & MCHEL2.CONCHE(is).EQ.imodel.CONMOD) THEN
  100. mchaml = MCHEL2.ICHAML(is)
  101. SEGACT,mchaml
  102. NCOELE = mchaml.NOMCHE(/2)
  103. IPOSI = 0
  104. CALL PLACE(mchaml.NOMCHE,NCOELE,IPOSI,'SECT')
  105. IF (IPOSI.NE.0) THEN
  106. MELVA2 = mchaml.IELVAL(IPOSI)
  107. ENDIF
  108. GOTO 20
  109. ENDIF
  110. ENDDO
  111. 20 CONTINUE
  112. IF (MELVA2.EQ.0) THEN
  113. MOTERR(1:4) = 'SECT'
  114. MOTERR(5:8) = 'CARA'
  115. CALL ERREUR(77)
  116. GOTO 100
  117. ENDIF
  118. C =====
  119. C Informations sur l'element fini du modele ISOU
  120. C =====
  121. NEF = imodel.NEFMOD
  122. MELEME = imodel.IMAMOD
  123. IF (IFORMU.EQ.1 .OR. IFORMU.EQ.2) THEN
  124. c*??? CALL TSHAPE(NEF,'NOEUDS',IPINTE)
  125. CALL TSHAPE(NEF,'GAUSS',IPINTE)
  126. ELSE
  127. IF (imodel.INFMOD(/1).LT.2+ISUPCH) THEN
  128. CALL ELQUOI(NEF,0,ISUPCH,ipinf,imodel)
  129. IF (IERR.NE.0) GOTO 100
  130. info = ipinf
  131. IPINTE = info.INFELL(11)
  132. SEGSUP,info
  133. ELSE
  134. IPINTE = imodel.INFMOD(2+ISUPCH)
  135. ENDIF
  136. ENDIF
  137. C =====
  138. C 3.6 - Calcul des flux nodaux equivalents (segment MELVAL)
  139. C =====
  140. C 3.6.1 - Recuperation d'informations sur le maillage elementaire
  141. MELEME = imodel.IMAMOD
  142. SEGACT,MELEME
  143. NBPTEL = meleme.NUM(/1)
  144. NBELT = meleme.NUM(/2)
  145. C 3.6.2 - Recuperation d'informations sur l'element fini du maillage
  146. MINTE = IPINTE
  147. SEGACT,MINTE
  148. NBPGAU = minte.POIGAU(/1)
  149. c* NBNO = minte.SHPTOT(/2)
  150. C 3.6.3 - Activation du MCHAML contenant les valeurs des sources
  151. SEGACT,MELVA1
  152. NBPTE1 = MELVA1.VELCHE(/1)
  153. NEL1 = MELVA1.VELCHE(/2)
  154. C 3.6.4 - Element fini BARRe : recuperation de la section
  155. SEGACT,MELVA2
  156. IF (IFOMOD.NE.0 .AND. IFOMOD.NE.1) THEN
  157. iBarre = 1
  158. iVA1 = MELVA2.VELCHE(/1)
  159. iMin1 = MIN(1,iVA1)
  160. iMin2 = MIN(2,iVA1)
  161. iVA2 = MELVA2.VELCHE(/2)
  162. ELSE
  163. iBarre = 0
  164. SMoy = 1.D0
  165. ENDIF
  166. C 3.6.5 - Initialisation du segment de travail MMAT1
  167. SEGINI,MMAT1
  168. C 3.6.6 - Initialisation du segment resultat MELVAL des valeurs
  169. C des flux nodaux pour chaque element du maillage (IMAMOD)
  170. N1PTEL = NBPTEL
  171. N1EL = NBELT
  172. N2PTEL = 0
  173. N2EL = 0
  174. SEGINI,MELVAL
  175. C 3.6.7 - Boucle sur les elements du maillage elementaire IMAMOD
  176. DO iELT = 1, NBELT
  177. CALL ZERO(AEL,NBPTEL,NBPTEL)
  178. CALL DOXE(XCOOR,IDIM,NBPTEL,meleme.NUM,iELT,XEL)
  179. IF (iBarre.EQ.1) THEN
  180. i = MIN(iELT,iVA2)
  181. SMoy = (MELVA2.VELCHE(iMin1,i)+MELVA2.VELCHE(iMin2,i))*0.5D0
  182. ENDIF
  183. IF (IDIM.EQ.3) THEN
  184. DO iGau = 1, NBPGAU
  185. DLX = XZERO
  186. DLY = XZERO
  187. DLZ = XZERO
  188. DO i = 1, NBPTEL
  189. r_z = minte.SHPTOT(2,i,iGau)
  190. DLX = DLX + r_z * XEL(1,i)
  191. DLY = DLY + r_z * XEL(2,i)
  192. DLZ = DLZ + r_z * XEL(3,i)
  193. ENDDO
  194. Volu = SMoy * SQRT(DLX*DLX+DLY*DLY+DLZ*DLZ)
  195. & * minte.POIGAU(iGau)
  196. DO i = 1, NBPTEL
  197. r_z = minte.SHPTOT(1,i,iGau) * Volu
  198. DO j = 1, NBPTEL
  199. AEL(i,j) = AEL(i,j) + minte.SHPTOT(1,j,iGau) * r_z
  200. ENDDO
  201. ENDDO
  202. ENDDO
  203. ELSE IF (IDIM.EQ.2) THEN
  204. DO iGau = 1, NBPGAU
  205. DLX = XZERO
  206. DLY = XZERO
  207. DO i = 1, NBPTEL
  208. r_z = minte.SHPTOT(2,i,iGau)
  209. DLX = DLX + r_z * XEL(1,i)
  210. DLY = DLY + r_z * XEL(2,i)
  211. ENDDO
  212. Volu = SMoy*SQRT(DLX*DLX+DLY*DLY)*POIGAU(iGau)
  213. DO i = 1, NBPTEL
  214. r_z = minte.SHPTOT(1,i,iGau) * Volu
  215. DO j = 1,NBPTEL
  216. AEL(i,j) = AEL(i,j) + minte.SHPTOT(1,j,iGau) * r_z
  217. ENDDO
  218. ENDDO
  219. ENDDO
  220. ENDIF
  221. IEMIN = MIN(NEL1,iELT)
  222. DO i = 1, NBPTEL
  223. r_z = XZERO
  224. DO j = 1, NBPTEL
  225. k = MIN(NBPTE1,j)
  226. r_z = r_z + MELVA1.VELCHE(k,IEMIN) * AEL(j,i)
  227. ENDDO
  228. melval.VELCHE(i,iElt) = r_z
  229. ENDDO
  230. ENDDO
  231. C 3.6.8 - Fin du traitement
  232. SEGSUP,MMAT1
  233. C =====
  234. C Initialisation du MCHAML des flux de chaleur nodaux equivalents
  235. C (MCHAML) associe au modele elementaire ISOU (maillage IMAMOD)
  236. C Remplissage des donnees associees a MCHAML dans MCHELM (global)
  237. C =====
  238. N2 = 1
  239. SEGINI,MCHAML
  240. mchaml.NOMCHE(1) = NOMDUA
  241. mchaml.TYPCHE(1) = 'REAL*8'
  242. mchaml.IELVAL(1) = MELVAL
  243.  
  244. mchelm.CONCHE(ISOU) = imodel.CONMOD
  245. mchelm.IMACHE(ISOU) = MELEME
  246. mchelm.ICHAML(ISOU) = MCHAML
  247. mchelm.INFCHE(ISOU,3) = NIFOUR
  248. mchelm.INFCHE(ISOU,6) = 1
  249.  
  250. C===
  251. 100 CONTINUE
  252. C===
  253. C Fin de la boucle sur les sous-modeles elementaires
  254.  
  255. END
  256.  
  257.  
  258.  

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