Télécharger chabat.eso

Retour à la liste

Numérotation des lignes :

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

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