Télécharger traver.eso

Retour à la liste

Numérotation des lignes :

traver
  1. C TRAVER SOURCE CHAT 05/01/13 03:45:31 5004
  2. SUBROUTINE TRAVER(DIAM,EPSILO,NSAUV,MLREE6,TMIN,NDIM
  3. $ ,ITY1,ITYG,IEL1,IELL,NOEL1,NOUN1,DIFL,DIFT,DTREEL,IZUN
  4. $ ,IZSH,TDEP,XDEP2,NPOS,ITER,IPARPO,KSAUV,DTSTOC,DTCUMU
  5. $ ,ICHGZ,Z,JFACE,JREBO,XIREB,XNREB,TARI,XARI2)
  6.  
  7. *************************************************************************
  8. *** SP 'TRAVER' : fait avancer la particule par convection + diffusion
  9. *** entre la face de depart et la face de sortie de l'element traverse
  10. *** avec un eventuel recalibrage du pas de tps associé au dernier saut
  11. *** afin d'arriver sur une face.
  12. ***
  13. *** APPELES 1 = aucun
  14. *** APPELES 2 = 'SAUTPA','LIEUPT', 'TRJTIN','CHOINT','CALIDT','MODCAL'
  15. ***
  16. *** E = 'DIAM' "longueur caracteristique" de l'element traversé
  17. *** 'EPSILO' marge relative acceptée position % element
  18. *** 'NSAUV' taille de la liste des tps de sauvegarde
  19. *** 'MLREE6' liste des tps de sauvegarde
  20. *** 'TMIN' instant de depart du lacher de la particule
  21. *** 'NDIM' dimension de l'espace
  22. *** 'ITY1' entier caracterisant le type de l'element
  23. *** 'ITYG' entier caracterisant la geometrie de l'element
  24. *** 'IEL1' n° global de l'element considéré
  25. *** 'IELL' n° local (ds sous-maillage) de l'element considéré
  26. *** 'NOEL1' nombre de noeuds de l'element traversé
  27. *** 'NOUN1' nombre de flux de l'element traversé
  28. *** 'DIFL' coeff dispersion longitudinal ds element considere
  29. *** 'DIFT' coeff dispersion transversal ds element considere
  30. *** 'DTREEL' pas de tps réel pour le calcul avancée particule
  31. *** 'IZUN' segmt content flux aux faces % ss-maillage de 'IELL'
  32. *** 'IZSH' segment content coord reelles noeuds, fcts forme et base
  33. *** 'TDEP' tps reel départ particule
  34. *** 'XDEP2' position réelle de départ particule
  35. ***
  36. *** E/S = 'NPOS' taille maximale des tableaux du segment 'IPARPO'
  37. *** 'ITER' indice des tableaux de 'IPARPO' pour la sauvegarde
  38. *** 'IPARPO' segment ou sont sauvegardés pts trajectoire particule
  39. *** 'KSAUV' indice liste des tps de sauvegarde considéré
  40. *** 'DTSTOC' pas de tps de sauvegarde considéré
  41. *** 'DTCUMU' cumul des pas de tps entre deux sauvegardes
  42. *** 'ICHGZ' vaut 1 si saut précédent effectif, 0 sinon
  43. *** 'Z' vecteur aleatoire pour le saut diffusif
  44. *** 'JFACE' n° local de la face traversée de l'element considéré
  45. *** 'JREBO' n° local face impermeable ou se trouve particule, -1 sinon
  46. *** 'XIREB' pt d'impact sur la face impermeable
  47. *** 'XNREB' vecteur normal à la face impermeable
  48. ***
  49. *** S = 'TARI' tps reel ecoulé jusqu'à interface de sortie de l'element
  50. *** 'XARI2' coord reelles arrivee particule (interface de sortie)
  51. ***
  52. *** Rq : critere d'acceptabilité position % elemt -> EPSILO (utilisé
  53. *** aussi pour critere acceptabilité dvlpt limité (calibrage).
  54. ***
  55. *** Auteur Cyril Nou
  56. *************************************************************************
  57.  
  58.  
  59. *** declaration des segments et tableaux utilisés dans sp 'TRAVER'
  60. IMPLICIT INTEGER(I-N)
  61. IMPLICIT REAL*8 (A-H,O-Z)
  62. -INC SMLREEL
  63. POINTEUR MLREE6.MLREEL
  64. SEGMENT IZSH
  65. REAL*8 SHP(6,MNO9),SHY(12,MNO9),XYZL(3,MNO9)
  66. ENDSEGMENT
  67. SEGMENT IZUN
  68. REAL*8 UN(I1,I2,I3)
  69. ENDSEGMENT
  70. SEGMENT IPARPO
  71. INTEGER NAPAR(NPOS),NUMP(NPOS)
  72. REAL*8 CREF(NDIM,NPOS),TPAR(NPOS)
  73. ENDSEGMENT
  74. DIMENSION XDEP(3),XDEP2(3),XCON(3),XCON2(3),XARI(3),XARI2(3)
  75. DIMENSION XCON3(3),XARI3(3)
  76. DIMENSION UREEL(3),U(3),UZERO(3),XJAC(3,3),Z(3)
  77. DIMENSION XINTER(3),XNORMA(3),XIREB(3),XNREB(3),XC2(3),XA2(3)
  78. DIMENSION IFACE(6),XINT(3,6),XN(3,6)
  79. *** 'ICALIB' vaut 1 si calibrage applicable, 0 sinon
  80. ICALIB=0
  81. *** 'DTTEST' pas de tps utilisé pour traversee (hors calibrage)
  82. DTTEST=DTREEL
  83. NCOMPT=0
  84. CALL INITD(UZERO,3,0.D0)
  85. ***********************************************************
  86. *** AVANCEE DE LA PARTICULE APRES PAS DE TEMPS 'DTTEST' ***
  87. ***********************************************************
  88. 10 LTEST=1
  89. *** saut convectif + diffusif dans la maille
  90. CALL SAUTPA(EPSILO,ICHGZ,JREBO,XIREB,XNREB,NDIM,ITY1
  91. $ ,ITYG,NOEL1,NOUN1,DIAM,DIFL,DIFT,TDEP,XDEP2,UN(1,1,IELL)
  92. $ ,DTTEST,UREEL,U,TARI,XCON2,XARI2,IZSH,Z,IREBCO,IREBDI,NTEST)
  93. *** cas ou Jacobien nul lors approximation vitesse efmh
  94. IF (NTEST.EQ.0) THEN
  95. IEL1=-1
  96. RETURN
  97. ENDIF
  98. *** localisation particule (à 0 pres car intersection inconnue)
  99. CALL LIEUPT(0.D0,NDIM,ITYG,XARI2,IZSH,ITEST)
  100.  
  101. ****************************************************************
  102. *** CAS OU PARTICULE TJS DS MAILLE APRES PAS DE TPS 'DTTEST' ***
  103. ****************************************************************
  104.  
  105. IF (ITEST.EQ.1) THEN
  106. CALL TRJTIN(EPSILO,NDIM,IEL1,DTTEST,TARI,XARI2,NSAUV,MLREE6,TMIN
  107. $ ,NPOS,ITER,IPARPO,KSAUV,DTSTOC,DTCUMU,TDEP,XDEP2,ICALIB,ICHGZ)
  108. *** la particule n'est plus sur une face impermeable
  109. CALL LIEUPT(-EPSILO,NDIM,ITYG,XARI2,IZSH,ITEST)
  110. IF (ITEST.EQ.1) THEN
  111. JREBO=-1
  112. IREBCO=0
  113. IREBDI=0
  114. DO 50 I=1,3
  115. XIREB(I)=0.D0
  116. XNREB(I)=0.D0
  117. 50 CONTINUE
  118. DTTEST=DTREEL
  119. ENDIF
  120. NCOMPT=NCOMPT+1
  121. GOTO 10
  122. ENDIF
  123.  
  124. *************************************************************
  125. *** CAS OU PARTICULE HORS MAILLE APRES PAS DE TPS 'DTTEST ***
  126. *************************************************************
  127.  
  128. *** cas ou 1er saut nul (conv compensée par diff au saut précédent)
  129. IF ((DTTEST.LT.(EPSILO*EPSILO*DTREEL)).AND.(NCOMPT.EQ.0)) THEN
  130. TARI=TDEP
  131. DO 20 I=1,NDIM
  132. XARI2(I)=XDEP2(I)
  133. 20 CONTINUE
  134. RETURN
  135. ENDIF
  136. *** division pas de tps pour avoir au moins un saut ds la maille
  137. IF (ICALIB.EQ.0) THEN
  138. DTTEST=1.D-1*DTTEST
  139. ICHGZ=0
  140. GOTO 10
  141. ENDIF
  142. *** determination intersection utilisée pour calibrage particule
  143. 30 CONTINUE
  144. *30 CALL CHOINT(NDIM,ITYG,XDEP2,XCON2
  145. * $ ,XARI2,IZSH,XINTER,XNORMA,JTEST,JFACE)
  146. *** on postule pas de traversee au depart
  147. JTEST=0
  148.  
  149. CALL FACTRA(NDIM,ITYG,XCON2,XARI2,IZSH,IFACE,XINT,XN,NBFAC)
  150. 35 CONTINUE
  151. IF (NBFAC.NE.0) THEN
  152. *** cas ou face(s) traversee(s) lors du saut diffusif
  153. JFAC1=JFACE
  154. CALL INTPRO(NDIM,XARI2,NBFAC,IFACE,XINT,XN,JFAC1,XINTER,XNORMA)
  155. CALL CALIDT(EPSILO,NDIM,XINTER,XNORMA,XIREB,XNREB,IREBCO,IREBDI
  156. $ ,XDEP2,TDEP,UREEL,U,DTTEST,LTEST,DTNEW,XCON3,XARI3,TARI,KTEST)
  157. JTEST=2
  158. IF(KTEST.EQ.0)THEN
  159. *** la face trouvée ne convient pas on l'enleve de la liste
  160. IF(NBFAC.GT.1)THEN
  161. IJ1=0
  162. DO 37 IJ=1,NBFAC-1
  163. IF( JFACE.EQ.IFACE(IJ))IJ1=1
  164. IFACE(IJ)=IFACE(IJ+IJ1)
  165. DO 36 II=1,NDIM
  166. XINT(II,IJ)=XINT(II,IJ+IJ1)
  167. XN(II,IJ)=XN(II,IJ+IJ1)
  168. 36 CONTINUE
  169. 37 CONTINUE
  170. ENDIF
  171. NBFAC=NBFAC-1
  172. JTEST=0
  173. GO TO 35
  174. ELSE
  175. CALL RSETD(XCON2,XCON3,NDIM)
  176. CALL RSETD(XARI2,XARI3,NDIM)
  177. JFACE=JFAC1
  178. ENDIF
  179. ELSE
  180. CALL FACTRA(NDIM,ITYG,XDEP2,XCON2,IZSH,IFACE,XINT,XN,NBFAC)
  181. IF (NBFAC.NE.0) THEN
  182. *** cas ou face(s) traversee(s) lors du saut convectif
  183. CALL INTPRO(NDIM,XCON2,NBFAC
  184. $ ,IFACE,XINT,XN,JFACE,XINTER,XNORMA)
  185. CALL CALIDT(EPSILO,NDIM,XINTER,XNORMA,XIREB,XNREB,IREBCO,IREBDI
  186. $,XDEP2,TDEP,UREEL,UZERO,DTTEST,LTEST,DTNEW,XCON2,XARI2,TARI,KTEST)
  187. JTEST=1
  188. ENDIF
  189. ENDIF
  190. IF (JTEST.EQ.0) THEN
  191. IEL1=-1
  192. RETURN
  193. ENDIF
  194. *** recalibrage particule sur face avec memes vecteurs vitesses
  195. *******************************************************************
  196. *** ANALYSE DU CAS OU CALIBRAGE A REUSSI (0 <= DTNEW <= DTTEST) ***
  197. *******************************************************************
  198.  
  199. IF (KTEST.EQ.1) THEN
  200. CALL LIEUPT(EPSILO,NDIM,ITYG,XARI2,IZSH,ITEST)
  201. IF (ITEST.EQ.1) THEN
  202. CALL TRJTIN(EPSILO,NDIM,IEL1,DTNEW,TARI,XARI2
  203. $ ,NSAUV,MLREE6,TMIN,NPOS,ITER,IPARPO,KSAUV
  204. $ ,DTSTOC,DTCUMU,TDEP,XDEP2,ICALIB,ICHGZ)
  205. TARI=TDEP
  206. DO 40 I=1,NDIM
  207. XARI2(I)=XDEP2(I)
  208. 40 CONTINUE
  209. NCOMPT=NCOMPT+1
  210. RETURN
  211. ELSEIF (ITEST.EQ.0) THEN
  212. DTTEST=DTNEW
  213. LTEST=0
  214. GOTO 30
  215. ENDIF
  216.  
  217. *************************************************************
  218. *** TRAITEMENT DU CAS OU CALIBRAGE ECHOUE (DT INCOHERENT) ***
  219. *************************************************************
  220.  
  221. ELSEIF (KTEST.EQ.0) THEN
  222. IF ((IREBCO.EQ.1).OR.(IREBDI.EQ.1)) THEN
  223. IEL1=-1
  224. RETURN
  225. ENDIF
  226. *** duplication en cas d'echec du calibrage convection seule
  227. LTEST=1
  228. DO 80 I=1,NDIM
  229. XC2(I)=XCON2(I)
  230. XA2(I)=XARI2(I)
  231. 80 CONTINUE
  232. TABIS=TARI
  233. CALL MODCAL(EPSILO,NDIM,ITYG,XINTER,XNORMA
  234. $ ,XIREB,XNREB,IREBCO,IREBDI,XDEP2,TDEP,UREEL,U
  235. $ ,IZSH,DTTEST,XCON2,XARI2,TARI,DTNEW2,KTEST1,KTEST2,LTEST)
  236. *** cas ou calibrage convection seule non pertinent
  237. IF (KTEST1.EQ.0) THEN
  238. DO 90 I=1,NDIM
  239. XCON2(I)=XC2(I)
  240. XARI2(I)=XA2(I)
  241. 90 CONTINUE
  242. TARI=TABIS
  243. CALL TRJTIN(EPSILO,NDIM,IEL1,DTNEW,TARI,XARI2
  244. $ ,NSAUV,MLREE6,TMIN,NPOS,ITER,IPARPO,KSAUV
  245. $ ,DTSTOC,DTCUMU,TDEP,XDEP2,ICALIB,ICHGZ)
  246. TARI=TDEP
  247. DO 70 I=1,NDIM
  248. XARI2(I)=XDEP2(I)
  249. 70 CONTINUE
  250. NCOMPT=NCOMPT+1
  251. RETURN
  252. ENDIF
  253. *** cas ou calibrage convection seule pertinent
  254. IF (KTEST2.EQ.1) THEN
  255. CALL TRJTIN(EPSILO,NDIM,IEL1,DTNEW2,TARI,XARI2
  256. $ ,NSAUV,MLREE6,TMIN,NPOS,ITER,IPARPO,KSAUV
  257. $ ,DTSTOC,DTCUMU,TDEP,XDEP2,ICALIB,ICHGZ)
  258. *** la particule n'est plus sur une face impermeable
  259. CALL LIEUPT(-EPSILO,NDIM,ITYG,XARI2,IZSH,ITEST)
  260. IF (ITEST.EQ.1) THEN
  261. JREBO=-1
  262. IREBCO=0
  263. IREBDI=0
  264. DO 60 I=1,3
  265. XIREB(I)=0.D0
  266. XNREB(I)=0.D0
  267. 60 CONTINUE
  268. ENDIF
  269. NCOMPT=NCOMPT+1
  270. GOTO 10
  271. ELSEIF (KTEST2.EQ.0) THEN
  272. DTTEST=DTNEW2
  273. GOTO 30
  274. ENDIF
  275. ENDIF
  276.  
  277. RETURN
  278. END
  279.  
  280.  
  281.  
  282.  
  283.  
  284.  
  285.  
  286.  

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