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.
84 class(MethodCellType),
intent(inout) :: this
85 type(ParticleType),
pointer,
intent(inout) :: particle
86 type(CellDefnType),
pointer,
intent(inout) :: cell_defn
87 real(DP),
intent(in) :: tmax
89 logical(LGP) :: dry_cell, dry_particle, no_exit_face, stop_zone, weak_sink
91 real(DP) :: t, ttrackmax
93 dry_cell = cell_defn%isatstat == saturation_dry
94 dry_particle = particle%z > cell_defn%top
95 no_exit_face = cell_defn%inoexitface > 0
96 stop_zone = cell_defn%izone > 0 .and. particle%istopzone == cell_defn%izone
97 weak_sink = cell_defn%iweaksink > 0
99 particle%izone = cell_defn%izone
105 if (no_exit_face .and. .not. dry_cell)
then
111 if (particle%istopweaksink > 0)
then
115 call this%weaksink(particle)
120 if (particle%idrymeth == 0)
then
123 no_exit_face = .false.
124 else if (particle%idrymeth == 1)
then
128 else if (particle%idrymeth == 2)
then
130 particle%advancing = .false.
131 no_exit_face = .false.
143 particle%ttrack =
totim
144 call this%timestep(particle)
147 call this%tracktimes%advance()
148 if (this%tracktimes%any())
then
149 do i = this%tracktimes%selection(1), this%tracktimes%selection(2)
150 t = this%tracktimes%times(i)
154 call this%usertime(particle)
155 if (t > ttrackmax) ttrackmax = t
161 particle%ttrack = ttrackmax
166 else if (dry_particle .and. this%name /=
"passtobottom")
then
167 if (particle%idrymeth == 0)
then
169 particle%z = cell_defn%top
170 call this%dropped(particle)
171 else if (particle%idrymeth == 1)
then
175 else if (particle%idrymeth == 2)
then
177 particle%advancing = .false.
178 no_exit_face = .false.
190 particle%ttrack =
totim
191 call this%timestep(particle)
194 call this%tracktimes%advance()
195 if (this%tracktimes%any())
then
196 do i = this%tracktimes%selection(1), this%tracktimes%selection(2)
197 t = this%tracktimes%times(i)
201 call this%usertime(particle)
202 if (t > ttrackmax) ttrackmax = t
208 if (no_exit_face)
then
209 particle%advancing = .false.
211 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