Check a number of conditions determining whether to continue tracking the particle or terminate it, as well as whether to record any output data as per selected reporting conditions.
85 class(MethodCellType),
intent(inout) :: this
86 type(ParticleType),
pointer,
intent(inout) :: particle
87 type(CellDefnType),
pointer,
intent(inout) :: cell_defn
88 real(DP),
intent(in) :: tmax
90 logical(LGP) :: dry_cell, dry_particle, no_exit_face, stop_zone, weak_sink
92 real(DP) :: t, ttrackmax
94 dry_cell = cell_defn%isatstat == saturation_dry
95 dry_particle = particle%z > cell_defn%top
96 no_exit_face = cell_defn%inoexitface > 0
97 stop_zone = cell_defn%izone > 0 .and. particle%istopzone == cell_defn%izone
98 weak_sink = cell_defn%iweaksink > 0
100 particle%izone = cell_defn%izone
106 if (no_exit_face .and. .not. dry_cell)
then
112 if (particle%istopweaksink > 0)
then
116 call this%weaksink(particle)
121 if (particle%idrymeth == 0)
then
124 no_exit_face = .false.
125 else if (particle%idrymeth == 1)
then
129 else if (particle%idrymeth == 2)
then
131 particle%advancing = .false.
132 no_exit_face = .false.
144 particle%ttrack =
totim
145 call this%timestep(particle)
148 call this%tracktimes%advance()
149 if (this%tracktimes%any())
then
150 do i = this%tracktimes%selection(1), this%tracktimes%selection(2)
151 t = this%tracktimes%times(i)
155 call this%usertime(particle)
156 if (t > ttrackmax) ttrackmax = t
162 particle%ttrack = ttrackmax
167 else if (dry_particle .and. this%name /=
"passtobottom")
then
168 if (particle%idrymeth == 0)
then
170 particle%z = cell_defn%top
171 call this%dropped(particle)
172 else if (particle%idrymeth == 1)
then
176 else if (particle%idrymeth == 2)
then
178 particle%advancing = .false.
179 no_exit_face = .false.
191 particle%ttrack =
totim
192 call this%timestep(particle)
195 call this%tracktimes%advance()
196 if (this%tracktimes%any())
then
197 do i = this%tracktimes%selection(1), this%tracktimes%selection(2)
198 t = this%tracktimes%times(i)
202 call this%usertime(particle)
203 if (t > ttrackmax) ttrackmax = t
209 if (no_exit_face)
then
210 particle%advancing = .false.
212 call this%terminate(particle)
@, public weaksink
particle entered a weak sink
@, public usertime
user-specified tracking time
@, public terminate
particle terminated
@, public timestep
time step ended
@ term_weaksink
terminated in a weak sink cell
@ term_inactive
terminated in an inactive cell
@ term_no_exits
terminated in a cell with no exit face
@ term_stopzone
terminated in a cell with a stop zone number
logical(lgp), pointer, public endofsimulation
flag indicating end of simulation
real(dp), pointer, public totim
time relative to start of simulation
real(dp), pointer, public totimc
simulation time at start of time step