Télécharger fron1.eso

Retour à la liste

Numérotation des lignes :

fron1
  1. C FRON1 SOURCE FANDEUR 22/03/01 21:15:04 11301
  2. SUBROUTINE FRON1
  3. C
  4. C FONCTION: TRAITEMENT DE LA COMBUSTION DANS CASTEM2000
  5. C
  6. C CHPT2 = COMBU CHPT1 CHPV DT T ;
  7. C CHPT2 : instant de debut de combustion calcule pour t + dt
  8. C CHPT1 : instant de debut de combustion calcule pour t
  9. C CHPV : vitesse d'avance et durée de combustion
  10. C T : instant t
  11. C DT : pas de temps
  12. C
  13. C A de Gayffier
  14. c 12/12/94
  15. C
  16. C FORTRAN + ESOPE
  17. IMPLICIT INTEGER(I-N)
  18. IMPLICIT REAL*8 (A-H,O-Z)
  19. LOGICAL FLAG1
  20.  
  21. -INC PPARAM
  22. -INC CCOPTIO
  23.  
  24. -INC SMCHPOI
  25. -INC SMCOORD
  26. -INC SMELEME
  27. PARAMETER(GRAND=1.D50)
  28. C
  29. C recuperation des objets
  30. C
  31. * print *,'Segments actifs',oooval(2,3)
  32. * print *,'Total segments',oooval(2,1)
  33. CALL LIROBJ('CHPOINT ',ICHPO1,1,IRETOU)
  34. CALL ACTOBJ('CHPOINT ',ICHPO1,1)
  35. IF (IERR .NE. 0) RETURN
  36.  
  37. CALL LIROBJ('CHPOINT',ICHPO2,1,IRETOU)
  38. CALL ACTOBJ('CHPOINT ',ICHPO2,1)
  39. IF (IERR .NE. 0) RETURN
  40.  
  41. CALL LIRREE(TEMPS1,1,IRETOU)
  42. IF (IERR .NE. 0) RETURN
  43.  
  44. CALL LIRREE(DTEMPS,1,IRETOU)
  45. IF (IERR .NE. 0) RETURN
  46.  
  47. SEGACT,MCOORD
  48. C
  49. C on assemble les deux champs par point lus
  50. C
  51. 40 CONTINUE
  52. FLAG1 = .FALSE.
  53. CALL ADCHPO(ICHPO1,ICHPO2,ICHPO,1.D0,1.D0)
  54. IF (IERR .NE. 0) RETURN
  55. MCHPO1 = ICHPO1
  56. MCHPO2 = ICHPO2
  57. C
  58. C on cree l'ensemble des points tels que CHP1(P) < t+dt
  59. C et ceux tels que CHP1(P) < min(t,t+dt-tcombustion)
  60. C
  61. MCHPOI = ICHPO
  62. NPTOT = 0
  63. DO 50 K=1,IPCHP(/1)
  64. MSOUPO = IPCHP(K)
  65. MELEME = IGEOC
  66. NPTOT = NPTOT + NUM(/2)
  67. 50 CONTINUE
  68. C
  69. TEMPS2 = DTEMPS + TEMPS1
  70. C
  71. C on cree trois maillages qui contiennent les points
  72. C des trois ensemble
  73. C
  74. NBNN = 1
  75. NBELEM = NPTOT
  76. NBSOUS = 0
  77. NBREF = 0
  78. SEGINI IPT1,IPT2,IPT3
  79. C
  80. C on cree trois MPOVAL pour stocker les valeurs en chaque point
  81. C
  82. N=NPTOT
  83. NC=2
  84. SEGINI MPOVA1,MPOVA2,MPOVA3
  85. C
  86. 60 CONTINUE
  87. IND1 = 0
  88. IND2 = 0
  89. IND3 = 0
  90. C
  91. C boucle sur les msoupo
  92. C
  93. DO 150 K=1,IPCHP(/1)
  94. MSOUPO = IPCHP(K)
  95. MELEME = IGEOC
  96. MPOVAL = IPOVAL
  97. C on numerote les composantes 'VIT' TCMB' 'TPS'
  98. IF ( NOCOMP(/2) .NE. 3 ) THEN
  99. CALL ERREUR(665)
  100. RETURN
  101. ENDIF
  102. DO 70 I=1,NOCOMP(/2)
  103. IF (NOCOMP(I) .EQ. 'VIT' ) THEN
  104. IVIT = I
  105. ELSE IF (NOCOMP(I) .EQ. 'TCMB') THEN
  106. ITCMB = I
  107. ELSE IF (NOCOMP(I) .EQ. 'TPS') THEN
  108. ITEMPS =I
  109. ELSE
  110. CALL ERREUR(665)
  111. SEGSUP IPT1,IPT2,IPT3,MPOVA1,MPOVA2,MPOVA3
  112. RETURN
  113. ENDIF
  114. 70 CONTINUE
  115. C
  116. C on remplit mpova1,2,3 et ipt1,2,3
  117. C
  118. C
  119. DO 100 I=1,VPOCHA(/1)
  120. BINF = MIN(TEMPS1,TEMPS2-VPOCHA(I,ITCMB))
  121. C
  122. IF (VPOCHA(I,1) .LE. TEMPS2 .AND.
  123. & VPOCHA(I,1) .GE. BINF ) THEN
  124. c le point est en combustion
  125. IND1 = IND1 + 1
  126. IPT1.NUM(1,IND1)=NUM(1,I)
  127. MPOVA1.VPOCHA(IND1,1)=VPOCHA(I,ITEMPS)
  128. MPOVA1.VPOCHA(IND1,2)=VPOCHA(I,IVIT)
  129. C
  130. ELSE IF (VPOCHA(I,1) .GT. TEMPS2 ) THEN
  131. c le point n'a pas brule
  132. IND2 = IND2 + 1
  133. IPT2.NUM(1,IND2)=NUM(1,I)
  134. MPOVA2.VPOCHA(IND2,1)=GRAND
  135. MPOVA2.VPOCHA(IND2,2)=VPOCHA(I,IVIT)
  136. C
  137. ELSE
  138. c le point a deja brulé
  139. IND3 = IND3 + 1
  140. IPT3.NUM(1,IND3)=NUM(1,I)
  141. MPOVA3.VPOCHA(IND3,1)=VPOCHA(I,ITEMPS)
  142. ENDIF
  143. 100 CONTINUE
  144. 150 CONTINUE
  145. C
  146. C ici on controle que ind1 n'est pas nul
  147. C
  148. IF (IND1 .EQ. 0) THEN
  149. C dans ce cas on agrandit la fenetre
  150. TEMPS1 = TEMPS1 - DTEMPS
  151. GOTO 60
  152. ENDIF
  153. C
  154. IF ((IND1+IND2+IND3) .NE. NPTOT) THEN
  155. SEGSUP IPT1,IPT2,IPT3,MPOVA1,MPOVA2,MPOVA3
  156. CALL ERREUR(5)
  157. RETURN
  158. ENDIF
  159. C
  160. C boucle sur les points de ipt2
  161. C
  162. DO 300 I=1,IND2
  163. IM = IPT2.NUM(1,I)
  164. XM = XCOOR((IM-1)*(IDIM+1) +1)
  165. YM = XCOOR((IM-1)*(IDIM+1) +2)
  166. ZM = XCOOR((IM-1)*(IDIM+1) +3) * (IDIM - 2)
  167.  
  168. DO 200 J=1,IND1
  169. IP = IPT1.NUM(1,J)
  170. XP = XCOOR((IP-1)*(IDIM+1) +1)
  171. YP = XCOOR((IP-1)*(IDIM+1) +2)
  172. ZP = XCOOR((IP-1)*(IDIM+1) +3) * (IDIM - 2)
  173. DPM = SQRT( (XM-XP)*(XM-XP)+(YM-YP)*(YM-YP) +
  174. & (ZM-ZP)*(ZM-ZP))
  175. VPM = (MPOVA1.VPOCHA(J,2) + MPOVA2.VPOCHA(I,2))/2.D0
  176. TM2 = MPOVA1.VPOCHA(J,1)+ DPM / VPM
  177. MPOVA2.VPOCHA(I,1) = MIN(MPOVA2.VPOCHA(I,1),TM2)
  178. 200 CONTINUE
  179. IF (MPOVA2.VPOCHA(I,1) .LT. TEMPS2) FLAG1 = .TRUE.
  180. C le resultat n'est pas consistent
  181. C ca veut dire qu'il va falloir recommencer
  182. 300 CONTINUE
  183. C
  184. C on remplit le resultat dans le chpo resultat
  185. C
  186. C creation
  187. NAT=1
  188. NSOUPO=1
  189. SEGINI ,MCHPO1
  190. MCHPO1.JATTRI(1)=1
  191. MCHPO1.MOCHDE='Temps d allumage du point cree par FRON'
  192. MCHPO1.MTYPOI=mchpoi.MTYPOI
  193. MCHPO1.IFOPOI=mchpoi.IFOPOI
  194. c* MCHPO1.IFOPOI=IFOUR
  195. ICHPO1 = MCHPO1
  196. C
  197. NC = 1
  198. SEGINI ,MSOUP1
  199. MCHPO1.IPCHP(1)=MSOUP1
  200. MSOUP1.NOCOMP(1)='TPS'
  201. C
  202. NC = 1
  203. N = IND1 + IND2 + IND3
  204. SEGINI MPOVA4
  205. MSOUP1.IPOVAL = MPOVA4
  206. C
  207. NBNN = 1
  208. NBELEM = IND1 + IND2 + IND3
  209. NBSOUS = 0
  210. NBREF = 0
  211. SEGINI ,IPT4
  212. IPT4.ITYPEL = 1
  213. MSOUP1.IGEOC = IPT4
  214. C
  215. C remplissage
  216. C
  217. DO 600 I=1,IND3
  218. IPT4.NUM(1,I)=IPT3.NUM(1,I)
  219. MPOVA4.VPOCHA(I,1)= MPOVA3.VPOCHA(I,1)
  220. 600 CONTINUE
  221. C
  222. DO 400 I=1,IND1
  223. IPT4.NUM(1,I+IND3)=IPT1.NUM(1,I)
  224. MPOVA4.VPOCHA(I+IND3,1)= MPOVA1.VPOCHA(I,1)
  225. 400 CONTINUE
  226. C
  227. DO 500 I=1,IND2
  228. IPT4.NUM(1,I+IND1+IND3)=IPT2.NUM(1,I)
  229. MPOVA4.VPOCHA(I+IND1+IND3,1)= MPOVA2.VPOCHA(I,1)
  230. 500 CONTINUE
  231. C
  232. C gestion des segments
  233. C
  234. DO 700 I=1,IPCHP(/1)
  235. MSOUPO = IPCHP(I)
  236. MPOVAL = IPOVAL
  237. SEGSUP ,MSOUPO,MPOVAL
  238. 700 CONTINUE
  239. C
  240. SEGSUP MCHPOI
  241. SEGSUP IPT1,IPT2,IPT3
  242. SEGSUP MPOVA1,MPOVA2,MPOVA3
  243. C
  244. C
  245. IF ( FLAG1 ) THEN
  246. C le chpo trouvé n'est pas consistent
  247. GOTO 40
  248. ENDIF
  249. C
  250. ICHPO1 = MCHPO1
  251. CALL ECROBJ('CHPOINT',ICHPO1)
  252.  
  253. SEGDES,MCOORD
  254. * print *,'Segments actifs',oooval(2,3)
  255. * print *,'Total segments',oooval(2,1)
  256.  
  257. c RETURN
  258. END
  259.  
  260.  
  261.  

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