58 character(len=40),
pointer,
public :: name
59 logical(LGP),
public :: delegates
61 class(
celltype),
pointer,
public :: cell => null()
65 integer(I4B),
dimension(:),
pointer,
contiguous,
public :: izone => null()
66 real(dp),
dimension(:),
pointer,
contiguous,
public :: flowja => null()
67 real(dp),
dimension(:),
pointer,
contiguous,
public :: porosity => null()
68 real(dp),
dimension(:),
pointer,
contiguous,
public :: retfactor => null()
92 subroutine apply(this, particle, tmax)
98 real(DP),
intent(in) :: tmax
100 subroutine assess(this, particle, cell_defn, tmax)
108 real(DP),
intent(in) :: tmax
119 subroutine init(this, fmi, cell, subcell, events, tracktimes, &
120 izone, flowja, porosity, retfactor)
122 type(
prtfmitype),
intent(in),
pointer,
optional :: fmi
123 class(
celltype),
intent(in),
pointer,
optional :: cell
124 class(
subcelltype),
intent(in),
pointer,
optional :: subcell
127 integer(I4B),
intent(in),
pointer,
optional :: izone(:)
128 real(DP),
intent(in),
pointer,
optional :: flowja(:)
129 real(DP),
intent(in),
pointer,
optional :: porosity(:)
130 real(DP),
intent(in),
pointer,
optional :: retfactor(:)
132 if (
present(fmi)) this%fmi => fmi
133 if (
present(cell)) this%cell => cell
134 if (
present(subcell)) this%subcell => subcell
135 if (
present(events)) this%events => events
136 if (
present(tracktimes)) this%tracktimes => tracktimes
137 if (
present(izone)) this%izone => izone
138 if (
present(flowja)) this%flowja => flowja
139 if (
present(porosity)) this%porosity => porosity
140 if (
present(retfactor)) this%retfactor => retfactor
145 recursive subroutine track(this, particle, level, tmax)
149 integer(I4B) :: level
150 real(dp),
intent(in) :: tmax
152 logical(LGP) :: advancing
153 integer(I4B) :: nextlevel
157 nextlevel = level + 1
159 call this%load(particle, nextlevel, submethod)
160 call submethod%apply(particle, tmax)
161 call this%try_pass(particle, nextlevel, advancing)
166 subroutine try_pass(this, particle, nextlevel, advancing)
169 integer(I4B) :: nextlevel
170 logical(LGP) :: advancing
172 if (particle%advancing)
then
175 call this%pass(particle)
176 if (particle%iboundary(nextlevel - 1) .ne. 0) &
182 particle%iboundary = 0
189 integer(I4B) :: level
191 call pstop(1,
"get_level must be overridden")
195 subroutine load(this, particle, next_level, submethod)
198 integer,
intent(in) :: next_level
199 class(
methodtype),
pointer,
intent(inout) :: submethod
200 call pstop(1,
"load must be overridden")
204 subroutine pass(this, particle)
207 call pstop(1,
"pass must be overridden")
216 call this%events%broadcast(particle, event)
224 integer(I4B),
intent(in),
optional :: status
226 particle%advancing = .false.
227 if (
present(status)) particle%istatus = status
229 call this%events%broadcast(particle, event)
239 call this%events%broadcast(particle, event)
249 call this%events%broadcast(particle, event)
259 call this%events%broadcast(particle, event)
269 call this%events%broadcast(particle, event)
This module contains simulation constants.
real(dp), parameter dzero
real constant zero
subroutine pstop(status, message)
Stop the program, optionally specifying an error status code.
This module defines variable data types.
pure logical function, public is_close(a, b, rtol, atol, symmetric)
Check if a real value is approximately equal to another.
Particle tracking strategies.
subroutine dropped(this, particle)
A particle drops to the water table.
subroutine load(this, particle, next_level, submethod)
Load subdomain tracking method (submethod).
subroutine terminate(this, particle, status)
A particle terminates.
subroutine release(this, particle)
A particle is released.
recursive subroutine track(this, particle, level, tmax)
Track the particle over subdomains of the given.
subroutine weaksink(this, particle)
A particle leaves a weak sink.
subroutine try_pass(this, particle, nextlevel, advancing)
Try passing the particle to the next subdomain.
integer(i4b) function get_level(this)
Get tracking method level.
subroutine timestep(this, particle)
A time step ends.
subroutine usertime(this, particle)
A user-defined tracking time occurs.
@, public level_subfeature
subroutine pass(this, particle)
Pass particle to the next subdomain or to a domain boundary.
Specify times for some event to occur.
Base grid cell definition.
Base type for grid cells of a concrete type. Contains a cell-definition which is information shared b...
Base type for exit solutions.
A generic heterogeneous doubly-linked list.
Base type for particle tracking methods.
Base type for particle events.
Dispatcher for particle events. Consumers subscribe handlers to the dispatcher. Events may be dispatc...
Particle tracked by the PRT model.
Represents a series of instants at which some event should occur.