Télécharger trjav3.eso

Retour à la liste

Numérotation des lignes :

trjav3
  1. C TRJAV3 SOURCE PV 09/03/13 21:17:06 6328
  2. SUBROUTINE TRJAV3(EPSILO,NSAUV,MLREE6
  3. $ ,MELVA1,MELVA2,MELVA3,IPT9,IZVIT,IZPART,IPART
  4. $ ,TMIN,TMAX,MELEME,IELTFA,IZCENT,IFACEL,IPARPO,IZSH,SORTIE)
  5. ****************************************************************************
  6. *** SP 'TRJAV3' : fait avancer une particule n° 'IPART' jsuqu'à instant 'TMAX'
  7. *** ou jusqu'à ce que particule sorte du domaine. Pour chaque intersection
  8. *** element-trajectoire, les coordonnées réelles et le tps courant réel
  9. *** associés à la particule n° 'IPART' sont stockés via 'IPARPO'.
  10. ***
  11. *** E = 'EPSILO' erreur précision calul relative acceptee (cause machine)
  12. *** 'NSAUV' taille de la liste des tps de sauvegarde
  13. *** 'MLREE6' liste des tps de sauvegarde
  14. *** 'MELVA1' segment content coeffs disper intrinseques longitudinaux
  15. *** 'MELVA2' segment content coeffs disper intrinseques transversaux
  16. *** 'MELVA3' segment content coeffs diff moleculaire
  17. *** 'IPT9' pteur sur maillage decrivant faces impermeables du domaine
  18. *** 'IZVIT' segment decrivant les vitesses (<- 'TRJVIT' OU 'TRJFLU')
  19. *** 'IZPART' position initiale en coordonnees reference de la particule
  20. *** 'IPART' n° de la particule concernee
  21. *** 'TMIN' instant de depart de la particule
  22. *** 'TMAX' instant à ne pas depasser pour la particule
  23. *** 'MELEME' pteur sur le maillage du domaine etudie
  24. *** 'IELTFA' pteur sur la table "DOMAINE.ELTFA"
  25. *** 'IZCENT' pteur sur la table "DOMAINE.CENTRE"
  26. *** 'IFACEL' pteur sur la table " DOMAINE.FACEL"
  27. *** S = 'IPARPO' position reelle et tps correspondant de la particule aux
  28. *** interfaces des elements traversees.
  29. *** 'IZSH' segmt content fcts forme,base et coord reelles des noeuds
  30. *** 'SORTIE' tableau contenant respectivement tps et coords de sortie
  31. ******************************************************************************
  32.  
  33. *** ORIGINE = SP 'TRJAVA' modifié par PATRICK MEYNIEL 12/99
  34. *** CYRIL NOU 08/00
  35. ***
  36. ***********************************************************
  37. *** DECLARATION/ACIVATION SEGMENTS UTILISES DS 'TRJAV2' ***
  38. ***********************************************************
  39.  
  40. IMPLICIT INTEGER(I-N)
  41. IMPLICIT REAL*8 (A-H,O-Z)
  42.  
  43. -INC PPARAM
  44. -INC CCOPTIO
  45. -INC SMCOORD
  46. -INC SMELEME
  47. -INC SMCHAML
  48. -INC SMLREEL
  49. POINTEUR IZCENT.MELEME,IELTFA.MELEME,IFACEL.MELEME
  50. POINTEUR MLREE6.MLREEL
  51. SEGMENT IZPART
  52. INTEGER NLEPA(NPART),NUMPA(NPART)
  53. REAL*8 COORPA(NDIM,NPART)
  54. ENDSEGMENT
  55. SEGMENT IPARPO
  56. INTEGER NAPAR(NPOS),NUMP(NPOS)
  57. REAL*8 CREF(NDIM,NPOS),TPAR(NPOS)
  58. ENDSEGMENT
  59. SEGMENT IZSH
  60. REAL*8 SHP(6,MNO9),SHY(12,MNO9),XYZL(3,MNO9)
  61. ENDSEGMENT
  62. SEGMENT IZVIT
  63. REAL*8 TEMTRA(NVIPT)
  64. INTEGER IPUN(NBS),IDUN(NBS),IPVPT(NVIPT),IFORML
  65. ENDSEGMENT
  66. *** declaration de segment utilise dans le cas du transitoire
  67. *** 'IPUN1' = pteurs sur les 'IZUN', 'IPUMAX' sur le 'IZUMAX'
  68. SEGMENT IZVPT
  69. INTEGER IPUN1(NBS),IPUMAX
  70. ENDSEGMENT
  71. *** declaration de segment contenant les vitesses ou flux
  72. SEGMENT IZUN
  73. REAL*8 UN(I1,I2,I3)
  74. ENDSEGMENT
  75. *** declaration de segment contenant la vitesse ou flux max par element
  76. SEGMENT IZUMAX
  77. REAL*8 UMAX(NBREL)
  78. ENDSEGMENT
  79. *** variables pour positions, stockage, aleatoire et rebond
  80. DIMENSION XDEP(3),XDEP2(3),XARI(3),XARI2(3)
  81. DIMENSION XSTOC(3),Z(3),XIREB(3),XNREB(3)
  82. DIMENSION PT1(3),PT2(3),PT3(3),PT4(3),UCEN(3)
  83. *** contient respectivement tps de sortie et coords de sortie
  84. DIMENSION SORTIE(4)
  85. *** activation si necessaire segments liés au pb (maillage, vitesse,...)
  86. SEGACT IFACEL
  87. ********************************************************
  88. *** INITIALISATION DU LACHER DE LA PARTICULE 'IPART' ***
  89. ********************************************************
  90.  
  91. *** initialisation trajectoire % position lacher particule
  92. * WRITE(6,*) '-> Trajectoire particule n°',IPART
  93. CALL INITPA(EPSILO,IPART,IZPART,TMIN,NSAUV,MLREE6
  94. $ ,MELEME,IPT9,NDIM,NPOS,ITER,IPARPO,IVPT,IEL1,XDEP2,TDEP
  95. $ ,JFACE,JREBO,XIREB,XNREB,ICHGZ,Z,KSAUV,DTSTOC,DTCUMU,IZSH,
  96. $ IELTFA)
  97. *** initialisation element initial % position lacher particule
  98. *** localisation, caractérisation élément content particule 'IPART'
  99. CALL TRJLOC(NDIM,MELEME,IZCENT,IELTFA,IZVIT,IVPT
  100. $ ,IEL1,TDEP,NOEL1,ITY1,ITYG,IZSH,IZUN,NOUN1,IELL,DIAM,IPT1)
  101. *** calcul des coefficients de dispersion long et trans
  102. CALL COEFDI(NDIM,ITY1,ITYG,NOEL1,NOUN1,DIAM,UN(1,1,IELL)
  103. $ ,IEL1,IZCENT,MELVA1,MELVA2,MELVA3,DIFL,DIFT,UCEN,IZSH)
  104. *** cas ou soit particule ne peut pas bouger (pas conv,disp et diff)
  105. *** soit Jacobien nul dans approximation de la vitesse efmh
  106. IF (IEL1.EQ.(-1)) GOTO 40
  107. *** choix du pas de tps pour la traversee de la maille
  108. CALL TRJCDT(NDIM,DIAM,IZVIT,IVPT,IEL1,DIFL,DIFT,UCEN,DTREEL)
  109.  
  110. ***********************************************************
  111. *** TRAVERSEE ENTRE 2 INTERFACES DE L'ELEMENT CONSIDERE ***
  112. ***********************************************************
  113.  
  114. 10 CONTINUE
  115. *** traversee de l'element 'IEL1' ('IELL')
  116. CALL TRAVER(DIAM,EPSILO,NSAUV,MLREE6,TMIN,NDIM
  117. $ ,ITY1,ITYG,IEL1,IELL,NOEL1,NOUN1,DIFL,DIFT,DTREEL
  118. $ ,IZUN,IZSH,TDEP,XDEP2,NPOS,ITER,IPARPO,KSAUV,DTSTOC
  119. $ ,DTCUMU,ICHGZ,Z,JFACE,JREBO,XIREB,XNREB,TARI,XARI2)
  120. *** cas ou echec recalibrage sur face element
  121. IF (IEL1.EQ.(-1)) GOTO 40
  122.  
  123. ************************************************************
  124. *** RECHERCHE DU PROCHAIN ELEMENT TRAVERSE PAR PARTICULE ***
  125. ************************************************************
  126.  
  127. *** teste si face de recalibrage est une face impermeable
  128. CALL TESTFA(EPSILO,NDIM,ITYG
  129. $ ,XARI2,IZSH,JFTEST,PT1,PT2,PT3,PT4)
  130. CALL LOCIMP(NDIM,JFACE,XARI2,PT1,PT2,PT3,PT4,IPT9
  131. $ ,JREBO,XIREB,XNREB,IEL1,IELTFA)
  132.  
  133. *** chgt element à traverser
  134. CALL CHGELE(EPSILO,NDIM,JREBO,XNREB,TARI
  135. $ ,XARI2,DTREEL,IVPT,MELEME,IFACEL,IZCENT,IELTFA
  136. $ ,IZVIT,IZUN,IEL1,TDEP,XDEP2,JFACE,ICHGZ,IZSH)
  137. ********************************************************
  138. *** DIFFERENTS CAS POSSIBLES APRES TRAVERSEE ELEMENT ***
  139. ********************************************************
  140.  
  141. *** cas ou il n'y a pas d'élément suivant
  142. IF (IEL1.EQ.0) THEN
  143. SORTIE(1)=TDEP
  144. SORTIE(2)=XDEP2(1)
  145. SORTIE(3)=XDEP2(2)
  146. SORTIE(4)=XDEP2(3)
  147. GOTO 20
  148. *** cas ou tps maximum imposé est dépassé
  149. ELSEIF ((TMAX-TDEP).LE.0.D0) THEN
  150. SORTIE(1)=TDEP
  151. SORTIE(2)=XDEP2(1)
  152. SORTIE(3)=XDEP2(2)
  153. SORTIE(4)=XDEP2(3)
  154. GOTO 20
  155. *** cas ou on refait la meme démarche dans élément suivant
  156. ELSE
  157. *** localisation, caractérisation élément content particule 'IPART'
  158. CALL TRJLOC(NDIM,MELEME,IZCENT,IELTFA,IZVIT,IVPT
  159. $ ,IEL1,TDEP,NOEL1,ITY1,ITYG,IZSH,IZUN,NOUN1,IELL,DIAM,IPT1)
  160. *** calcul des coefficients de dispersion long et trans
  161. CALL COEFDI(NDIM,ITY1,ITYG,NOEL1,NOUN1,DIAM,UN(1,1,IELL)
  162. $ ,IEL1,IZCENT,MELVA1,MELVA2,MELVA3,DIFL,DIFT,UCEN,IZSH)
  163. *** choix du pas de tps pour la traversee de la maille
  164. IF (IEL1.NE.(-1))
  165. *CALL TRJCDT(NDIM,DIAM,IZVIT,IVPT,IEL1,DIFL,DIFT,UCEN,DTREEL)
  166. GOTO 10
  167. ENDIF
  168.  
  169. *************************************************************************
  170. *** REAJUSTEMENT DE 'IPARPO' (POUR LE TRACE VIA OPERATEUR 'TRTRAJEC') ***
  171. *************************************************************************
  172.  
  173. *** recuperation de variables de travail pour la sauvegarde
  174. 20 TSTOC=TPAR(ITER)
  175. IESTO=NAPAR(ITER)
  176. DO 30 I=1,NDIM
  177. XSTOC(I)=CREF(I,ITER)
  178. 30 CONTINUE
  179. *** on supprime les pts sauvegardés dont tps sauvegarde > 'TMAX'
  180. IF (TSTOC.GT.((1+EPSILO)*TMAX)) THEN
  181. ITER=ITER-1
  182. GOTO 20
  183. ENDIF
  184. *** au moins 2 pts sauvegardés car 'TRTRAJEC' => maillage 'SEG2'
  185. IF(ITER.EQ.1)CALL TRJSTO(NDIM,IESTO,NPOS,ITER,IPARPO,TSTOC,XSTOC)
  186. IF(ABS((TPAR(ITER)-TDEP)/TDEP).GT.EPSILO) THEN
  187. NPOS=ITER+1
  188. SEGADJ IPARPO
  189. NAPAR(NPOS)=IESTO
  190. TPAR(NPOS)=TDEP
  191. DO 35 III=1,IDIM
  192. CREF(III,NPOS)=XDEP2(III)
  193. 35 CONTINUE
  194. ELSE
  195. *** on reajuste la dimension du segment 'IPARPO'
  196. NPOS=ITER
  197. SEGADJ IPARPO
  198. ENDIF
  199. *** on sort du module pour traiter la particule suivante
  200. RETURN
  201.  
  202. ******************************************************
  203. *** CAS D'ERREUR LORS DE LA TRAVERSEE DE L'ELEMENT ***
  204. ******************************************************
  205.  
  206. 40 WRITE(6,*) '=================================================='
  207. WRITE(6,*) 'LA PARTICULE N°',IPART,' VA ETRE ELIMINEE POUR'
  208. WRITE(6,*) 'OPERATEUR "TRAJ" POUR UNE DES RAISONS SUIVANTES : '
  209. WRITE(6,*)
  210. WRITE(6,*) 'a) ni convection, ni dispersion, ni diffusion '
  211. WRITE(6,*) 'b) Jacobien nul pour approximation vitesse efmh '
  212. WRITE(6,*) 'c) echec recalibrage particule sur face élément '
  213. WRITE(6,*) 'd) echec localisation particule ds un élément '
  214. WRITE(6,*)
  215. WRITE(6,*) 'OPERATEUR "TRAJ" CONTINUE POUR PARTICULE SUIVANTE '
  216. WRITE(6,*) '=================================================='
  217.  
  218. *** indication pour elimination particule
  219. SORTIE(1)=-1.D0
  220.  
  221. RETURN
  222. END
  223.  
  224.  
  225.  
  226.  
  227.  
  228.  
  229.  
  230.  
  231.  

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