34 character(len=LENFTYPE) ::
ftype =
'PRP'
35 character(len=16) ::
text =
' PRP'
40 logical(LGP),
pointer :: extend => null()
41 logical(LGP),
pointer :: frctrn => null()
42 logical(LGP),
pointer :: drape => null()
43 logical(LGP),
pointer :: localz => null()
44 integer(I4B),
pointer :: istopweaksink => null()
45 integer(I4B),
pointer :: istopzone => null()
46 integer(I4B),
pointer :: idrymeth => null()
47 integer(I4B),
pointer :: itrkout => null()
48 integer(I4B),
pointer :: itrkhdr => null()
49 integer(I4B),
pointer :: itrkcsv => null()
50 integer(I4B),
pointer :: irlstls => null()
51 integer(I4B),
pointer :: iexmeth => null()
52 integer(I4B),
pointer :: ichkmeth => null()
53 integer(I4B),
pointer :: icycwin => null()
54 real(dp),
pointer :: extol => null()
55 real(dp),
pointer :: rttol => null()
56 real(dp),
pointer :: rtfreq => null()
57 real(dp),
pointer :: offset => null()
58 real(dp),
pointer :: stoptime => null()
59 real(dp),
pointer :: stoptraveltime => null()
64 integer(I4B),
pointer :: nreleasepoints => null()
65 integer(I4B),
pointer :: nreleasetimes => null()
66 integer(I4B),
pointer :: nparticles => null()
67 integer(I4B),
pointer,
contiguous :: rptnode(:) => null()
68 integer(I4B),
pointer,
contiguous :: rptzone(:) => null()
69 real(dp),
pointer,
contiguous :: rptx(:) => null()
70 real(dp),
pointer,
contiguous :: rpty(:) => null()
71 real(dp),
pointer,
contiguous :: rptz(:) => null()
72 real(dp),
pointer,
contiguous :: rptm(:) => null()
73 character(len=LENBOUNDNAME),
pointer,
contiguous :: rptname(:) => null()
101 subroutine prp_create(packobj, id, ibcnum, inunit, iout, namemodel, &
102 pakname, input_mempath, fmi)
104 class(
bndtype),
pointer :: packobj
105 integer(I4B),
intent(in) :: id
106 integer(I4B),
intent(in) :: ibcnum
107 integer(I4B),
intent(in) :: inunit
108 integer(I4B),
intent(in) :: iout
109 character(len=*),
intent(in) :: namemodel
110 character(len=*),
intent(in) :: pakname
111 character(len=*),
intent(in) :: input_mempath
116 character(len=*),
parameter :: fmtheader = &
117 "(1x, /1x, 'PRP PARTICLE RELEASE POINT PACKAGE', &
118 &' INPUT READ FROM MEMPATH: ', a, /)"
125 call packobj%set_names(ibcnum, namemodel, pakname,
ftype, input_mempath)
129 call prpobj%prp_allocate_scalars()
132 call packobj%pack_initialize()
134 packobj%inunit = inunit
137 packobj%ibcnum = ibcnum
145 if (inunit > 0)
write (iout, fmtheader) input_mempath
153 call this%BndExtType%bnd_da()
189 call this%particles%destroy(this%memoryPath)
190 call this%schedule%destroy()
191 deallocate (this%particles)
192 deallocate (this%schedule)
198 integer(I4B),
dimension(:),
pointer,
contiguous :: ibound
199 integer(I4B),
dimension(:),
pointer,
contiguous :: izone
201 this%ibound => ibound
202 this%rptzone => izone
209 integer(I4B),
dimension(:),
pointer,
contiguous,
optional :: nodelist
210 real(DP),
dimension(:, :),
pointer,
contiguous,
optional :: auxvar
214 call this%BndExtType%allocate_arrays()
220 this%nreleasepoints, &
224 call mem_allocate(this%rptx, this%nreleasepoints,
'RPTX', this%memoryPath)
225 call mem_allocate(this%rpty, this%nreleasepoints,
'RPTY', this%memoryPath)
226 call mem_allocate(this%rptz, this%nreleasepoints,
'RPTZ', this%memoryPath)
227 call mem_allocate(this%rptm, this%nreleasepoints,
'RPTMASS', &
229 call mem_allocate(this%rptnode, this%nreleasepoints,
'RPTNODER', &
232 'RPTNAME', this%memoryPath)
235 do nps = 1, this%nreleasepoints
236 this%rptm(nps) =
dzero
245 call this%BndExtType%allocate_scalars()
248 call mem_allocate(this%localz,
'LOCALZ', this%memoryPath)
249 call mem_allocate(this%extend,
'EXTEND', this%memoryPath)
250 call mem_allocate(this%offset,
'OFFSET', this%memoryPath)
251 call mem_allocate(this%stoptime,
'STOPTIME', this%memoryPath)
252 call mem_allocate(this%stoptraveltime,
'STOPTRAVELTIME', this%memoryPath)
253 call mem_allocate(this%istopweaksink,
'ISTOPWEAKSINK', this%memoryPath)
254 call mem_allocate(this%istopzone,
'ISTOPZONE', this%memoryPath)
256 call mem_allocate(this%idrymeth,
'IDRYMETH', this%memoryPath)
257 call mem_allocate(this%nreleasepoints,
'NRELEASEPOINTS', this%memoryPath)
258 call mem_allocate(this%nreleasetimes,
'NRELEASETIMES', this%memoryPath)
259 call mem_allocate(this%nparticles,
'NPARTICLES', this%memoryPath)
260 call mem_allocate(this%itrkout,
'ITRKOUT', this%memoryPath)
261 call mem_allocate(this%itrkhdr,
'ITRKHDR', this%memoryPath)
262 call mem_allocate(this%itrkcsv,
'ITRKCSV', this%memoryPath)
263 call mem_allocate(this%irlstls,
'IRLSTLS', this%memoryPath)
264 call mem_allocate(this%frctrn,
'FRCTRN', this%memoryPath)
265 call mem_allocate(this%iexmeth,
'IEXMETH', this%memoryPath)
266 call mem_allocate(this%ichkmeth,
'ICHKMETH', this%memoryPath)
267 call mem_allocate(this%icycwin,
'ICYCWIN', this%memoryPath)
270 call mem_allocate(this%rtfreq,
'RTFREQ', this%memoryPath)
273 this%localz = .false.
274 this%extend = .false.
276 this%stoptime = huge(1d0)
277 this%stoptraveltime = huge(1d0)
278 this%istopweaksink = 0
282 this%nreleasepoints = 0
283 this%nreleasetimes = 0
289 this%frctrn = .false.
306 call this%obs%obs_ar()
308 if (this%inamedbound /= 0)
then
309 do n = 1, this%nreleasepoints
310 this%boundname(n) = this%rptname(n)
313 do n = 1, this%nreleasepoints
314 this%nodelist(n) = this%rptnode(n)
322 integer(I4B) :: ip, it
335 do ip = 1, this%nreleasepoints
336 this%rptm(ip) =
dzero
341 call this%schedule%advance()
342 if (.not. this%schedule%any())
return
345 call this%log_release()
349 call this%particles%resize( &
350 this%particles%num_stored() + &
351 (this%nreleasepoints * this%schedule%count()), &
356 do ip = 1, this%nreleasepoints
357 do it = 1, this%schedule%count()
358 t = this%schedule%times(it)
363 'Skipping negative release time (t=', t,
').'
368 'Skipping release time falling after the end of the &
369 &simulation (t=', t,
'). Enable EXTEND_TRACKING to &
370 &release particles after the simulation end time.'
374 call this%release(ip, t)
382 if (this%iprpak > 0)
then
383 write (this%iout,
"(1x,/1x,a,1x,i0)") &
384 'PARTICLE RELEASE FOR PRP', this%ibcnum
385 call this%schedule%log(this%iout)
397 integer(I4B),
intent(in) :: ic
398 real(DP),
intent(in) :: x, y, z
400 real(DP),
allocatable :: polyverts(:, :)
402 call this%fmi%dis%get_polyverts(ic, polyverts)
404 write (
errmsg,
'(a,g0,a,g0,a,i0)') &
405 'Error: release point (x=', x,
', y=', y,
') is not in cell ', &
406 this%dis%get_nodeuser(ic)
410 if (z > maxval(this%dis%top))
then
411 write (
errmsg,
'(a,g0,a,g0,a,i0)') &
412 'Error: release point (z=', z,
') is above grid top ', &
416 else if (z < minval(this%dis%bot))
then
417 write (
errmsg,
'(a,g0,a,g0,a,i0)') &
418 'Error: release point (z=', z,
') is below grid bottom ', &
423 deallocate (polyverts)
441 integer(I4B),
intent(in) :: ip
442 real(DP),
intent(in) :: trelease
447 call this%initialize_particle(particle, ip, trelease)
448 np = this%nparticles + 1
450 call this%particles%put(particle, np)
451 deallocate (particle)
452 this%rptm(ip) = this%rptm(ip) +
done
460 integer(I4B),
intent(in) :: ip
461 real(DP),
intent(in) :: trelease
463 integer(I4B) :: irow, icol, ilay, icpl
464 integer(I4B) :: ic, icu, ic_old
466 real(DP) :: top, bot, hds
468 ic = this%rptnode(ip)
469 icu = this%dis%get_nodeuser(ic)
471 call create_particle(particle)
473 if (
size(this%boundname) /= 0)
then
474 particle%name = this%boundname(ip)
480 particle%istopweaksink = this%istopweaksink
481 particle%istopzone = this%istopzone
482 particle%idrymeth = this%idrymeth
485 select type (dis => this%dis)
487 call get_ijk(icu, dis%nrow, dis%ncol, dis%nlay, irow, icol, ilay)
489 call get_jk(icu, dis%ncpl, dis%nlay, icpl, ilay)
492 particle%izone = this%rptzone(ic)
497 if (this%ibound(ic) == 0)
then
500 call this%dis%highest_active(ic, this%ibound)
501 if (ic == ic_old .or. this%ibound(ic) == 0)
then
515 if (this%localz)
then
516 top = this%fmi%dis%top(ic)
517 bot = this%fmi%dis%bot(ic)
518 hds = this%fmi%gwfhead(ic)
519 z = bot + this%rptz(ip) * (hds - bot)
524 if (this%ichkmeth > 0) &
525 call this%validate_release_point(ic, x, y, z)
530 particle%trelease = trelease
533 if (this%stoptraveltime == huge(1d0))
then
534 particle%tstop = this%stoptime
536 particle%tstop = particle%trelease + this%stoptraveltime
537 if (this%stoptime < particle%tstop) particle%tstop = this%stoptime
540 particle%ttrack = particle%trelease
547 particle%frctrn = this%frctrn
548 particle%iexmeth = this%iexmeth
549 particle%extend = this%extend
550 particle%icycwin = this%icycwin
551 particle%extol = this%extol
565 integer(I4B),
pointer :: iper, ionper, nlist
566 character(len=LINELENGTH),
allocatable :: lines(:)
570 call mem_setptr(iper,
'IPER', this%input_mempath)
571 call mem_setptr(ionper,
'IONPER', this%input_mempath)
573 if (
kper == 1 .and. &
575 (ionper >
nper) .and. &
576 size(this%schedule%time_select%times) == 0)
then
583 call this%schedule%advance(lines=lines)
586 else if (iper /=
kper)
then
591 call mem_setptr(nlist,
'NBOUND', this%input_mempath)
592 call mem_setptr(settings,
'SETTING', this%input_mempath)
595 allocate (lines(nlist))
597 lines(n) = settings(n)
601 if (
size(lines) > 0) &
602 call this%schedule%advance(lines=lines)
614 real(DP),
dimension(:),
intent(in) :: hnew
615 real(DP),
dimension(:),
intent(inout) :: flowja
616 integer(I4B),
intent(in) :: imover
620 integer(I4B) :: idiag
624 if (this%nbound <= 0)
return
627 do i = 1, this%nbound
628 node = this%nodelist(i)
633 idiag = this%dis%con%ia(node)
634 rrate = this%rptm(i) * (
done /
delt)
635 flowja(idiag) = flowja(idiag) + rrate
639 this%simvals(i) = rrate
660 call this%obs%StoreObsType(
'prp', .true., indx)
665 call this%obs%StoreObsType(
'to-mvr', .true., indx)
680 character(len=LENVARNAME),
dimension(3) :: drytrack_method = &
681 &[character(len=LENVARNAME) ::
'DROP',
'STOP',
'STAY']
682 character(len=
lenvarname),
dimension(2) :: coorcheck_method = &
683 &[
character(len=LENVARNAME) ::
'NONE',
'EAGER']
684 character(len=LINELENGTH) :: trackfile, trackcsvfile, fname
688 call this%BndExtType%source_options()
691 call mem_set_value(this%stoptime,
'STOPTIME', this%input_mempath, &
694 this%input_mempath, found%stoptraveltime)
695 call mem_set_value(this%istopweaksink,
'ISTOPWEAKSINK', this%input_mempath, &
697 call mem_set_value(this%istopzone,
'ISTOPZONE', this%input_mempath, &
699 call mem_set_value(this%drape,
'DRAPE', this%input_mempath, &
701 call mem_set_value(this%idrymeth,
'IDRYMETH', this%input_mempath, &
702 drytrack_method, found%idrymeth)
703 call mem_set_value(trackfile,
'TRACKFILE', this%input_mempath, &
705 call mem_set_value(trackcsvfile,
'TRACKCSVFILE', this%input_mempath, &
707 call mem_set_value(this%localz,
'LOCALZ', this%input_mempath, &
709 call mem_set_value(this%extend,
'EXTEND', this%input_mempath, &
711 call mem_set_value(this%extol,
'EXTOL', this%input_mempath, &
713 call mem_set_value(this%rttol,
'RTTOL', this%input_mempath, &
715 call mem_set_value(this%rtfreq,
'RTFREQ', this%input_mempath, &
717 call mem_set_value(this%frctrn,
'FRCTRN', this%input_mempath, &
719 call mem_set_value(this%iexmeth,
'IEXMETH', this%input_mempath, &
721 call mem_set_value(this%ichkmeth,
'ICHKMETH', this%input_mempath, &
722 coorcheck_method, found%ichkmeth)
723 call mem_set_value(this%icycwin,
'ICYCWIN', this%input_mempath, found%icycwin)
726 if (found%idrymeth)
then
727 if (this%idrymeth == 0)
then
728 write (
errmsg,
'(a)')
'Unsupported dry tracking method. &
729 &DRY_TRACKING_METHOD must be "DROP", "STOP", or "STAY"'
733 this%idrymeth = this%idrymeth - 1
737 if (found%extol)
then
738 if (this%extol <=
dzero) &
739 call store_error(
'EXIT_SOLVE_TOLERANCE MUST BE POSITIVE')
742 if (found%rttol)
then
743 if (this%rttol <=
dzero) &
744 call store_error(
'RELEASE_TIME_TOLERANCE MUST BE POSITIVE')
747 if (found%rtfreq)
then
748 if (this%rtfreq <=
dzero) &
749 call store_error(
'RELEASE_TIME_FREQUENCY MUST BE POSITIVE')
752 if (found%iexmeth)
then
753 if (.not. (this%iexmeth /= 1 .or. this%iexmeth /= 2)) &
755 &1 (BRENT) OR 2 (CHANDRUPATLA)')
758 if (found%ichkmeth)
then
759 if (this%ichkmeth == 0)
then
760 write (
errmsg,
'(a)')
'Unsupported coordinate check method. &
761 &COORDINATE_CHECK_METHOD must be "NONE" or "EAGER"'
765 this%ichkmeth = this%ichkmeth - 1
769 if (found%icycwin)
then
770 if (this%icycwin < 0) &
771 call store_error(
'CYCLE_DETECTION_WINDOW MUST BE NON-NEGATIVE')
775 if (found%trackfile)
then
777 call openfile(this%itrkout, this%iout, trackfile,
'DATA(BINARY)', &
782 fname = trim(trackfile)//
'.hdr'
783 call openfile(this%itrkhdr, this%iout, fname,
'CSV', &
784 filstat_opt=
'REPLACE', mode_opt=
mnormal)
788 if (found%trackcsvfile)
then
790 call openfile(this%itrkcsv, this%iout, trackcsvfile,
'CSV', &
791 filstat_opt=
'REPLACE')
801 call this%prp_log_options(found, trackfile, trackcsvfile)
815 character(len=*),
intent(in) :: trackfile
816 character(len=*),
intent(in) :: trackcsvfile
819 character(len=*),
parameter :: fmttrkbin = &
820 "(4x, 'PARTICLE TRACKS WILL BE SAVED TO BINARY FILE: ', a, /4x, &
821 &'OPENED ON UNIT: ', I0)"
822 character(len=*),
parameter :: fmttrkcsv = &
823 "(4x, 'PARTICLE TRACKS WILL BE SAVED TO CSV FILE: ', a, /4x, &
824 &'OPENED ON UNIT: ', I0)"
826 write (this%iout,
'(1x,a)')
'PROCESSING PARTICLE INPUT DIMENSIONS'
828 if (found%frctrn)
then
829 write (this%iout,
'(4x,a)') &
830 'IF DISV, TRACKING WILL USE THE TERNARY METHOD REGARDLESS OF CELL TYPE'
833 if (found%trackfile)
then
834 write (this%iout, fmttrkbin) trim(adjustl(trackfile)), this%itrkout
837 if (found%trackcsvfile)
then
838 write (this%iout, fmttrkcsv) trim(adjustl(trackcsvfile)), this%itrkcsv
841 write (this%iout,
'(1x,a)')
'END OF PARTICLE INPUT DIMENSIONS'
854 call mem_set_value(this%nreleasepoints,
'NRELEASEPTS', this%input_mempath, &
856 call mem_set_value(this%nreleasetimes,
'NRELEASETIMES', this%input_mempath, &
859 write (this%iout,
'(1x,a)')
'PROCESSING PARTICLE INPUT DIMENSIONS'
860 write (this%iout,
'(4x,a,i0)')
'NRELEASEPTS = ', this%nreleasepoints
861 write (this%iout,
'(4x,a,i0)')
'NRELEASETIMES = ', this%nreleasetimes
862 write (this%iout,
'(1x,a)')
'END OF PARTICLE INPUT DIMENSIONS'
865 this%maxbound = this%nreleasepoints
866 this%nbound = this%nreleasepoints
869 call this%prp_allocate_arrays()
872 call this%prp_packagedata()
873 call this%prp_releasetimes()
874 call this%prp_load_releasetimefrequency()
885 integer(I4B),
dimension(:),
pointer,
contiguous :: irptno
886 integer(I4B),
dimension(:, :),
pointer,
contiguous :: cellids
887 real(DP),
dimension(:),
pointer,
contiguous :: xrpts, yrpts, zrpts
889 contiguous :: boundnames
890 character(len=LENBOUNDNAME) :: bndName, bndNameTemp
891 character(len=9) :: cno
892 integer(I4B),
dimension(:),
allocatable :: nboundchk
893 integer(I4B),
dimension(:),
pointer :: cellid
894 integer(I4B) :: n, noder, nodeu, rptno
897 call mem_setptr(irptno,
'IRPTNO', this%input_mempath)
898 call mem_setptr(cellids,
'CELLID', this%input_mempath)
899 call mem_setptr(xrpts,
'XRPT', this%input_mempath)
900 call mem_setptr(yrpts,
'YRPT', this%input_mempath)
901 call mem_setptr(zrpts,
'ZRPT', this%input_mempath)
902 call mem_setptr(boundnames,
'BOUNDNAME', this%input_mempath)
905 allocate (nboundchk(this%nreleasepoints))
906 do n = 1, this%nreleasepoints
910 write (this%iout,
'(/1x,a)')
'PROCESSING '//trim(adjustl(this%packName)) &
913 do n = 1,
size(irptno)
917 if (rptno < 1 .or. rptno > this%nreleasepoints)
then
918 write (
errmsg,
'(a,i0,a,i0,a)') &
919 'Expected ', this%nreleasepoints,
' release points. &
920 &Points must be numbered from 1 to ', this%nreleasepoints,
'.'
926 nboundchk(rptno) = nboundchk(rptno) + 1
929 cellid => cellids(:, n)
932 if (this%dis%ndim == 1)
then
934 elseif (this%dis%ndim == 2)
then
935 nodeu =
get_node(cellid(1), 1, cellid(2), &
936 this%dis%mshape(1), 1, &
939 nodeu =
get_node(cellid(1), cellid(2), cellid(3), &
940 this%dis%mshape(1), &
941 this%dis%mshape(2), &
946 noder = this%dis%get_nodenumber(nodeu, 1)
950 this%rptnode(rptno) = noder
953 if (this%localz .and. (zrpts(n) < 0 .or. zrpts(n) > 1))
then
954 call store_error(
'Local z coordinate must fall in the interval [0, 1]')
959 this%rptx(rptno) = xrpts(n)
960 this%rpty(rptno) = yrpts(n)
961 this%rptz(rptno) = zrpts(n)
964 write (cno,
'(i9.9)') rptno
968 if (this%inamedbound /= 0)
then
969 bndnametemp = boundnames(n)
970 if (bndnametemp /=
'') bndname = bndnametemp
976 this%rptname(rptno) = bndname
979 write (this%iout,
'(1x,a)') &
980 'END OF '//trim(adjustl(this%packName))//
' PACKAGEDATA'
983 do n = 1, this%nreleasepoints
984 if (nboundchk(n) == 0)
then
985 write (
errmsg,
'(a,a,1x,i0,a)')
'No data specified for particle ', &
986 'release point', n,
'.'
988 else if (nboundchk(n) > 1)
then
989 write (
errmsg,
'(a,1x,i0,1x,a,1x,i0,1x,a)') &
990 'Data for particle release point', n,
'specified', nboundchk(n), &
1002 deallocate (nboundchk)
1011 real(DP),
dimension(:),
pointer,
contiguous :: time
1012 integer(I4B) :: n, isize
1013 real(DP),
allocatable :: times(:)
1015 if (this%nreleasetimes <= 0)
return
1018 allocate (times(this%nreleasetimes))
1021 call get_isize(
'TIME', this%input_mempath, isize)
1023 if (isize <= 0)
then
1024 errmsg =
"RELEASTIMES block expected when &
1025 &NRELEASETIMES dimension is non-zero."
1031 call mem_setptr(time,
'TIME', this%input_mempath)
1034 do n = 1,
size(time)
1039 call this%schedule%time_select%extend(times)
1042 if (.not. this%schedule%time_select%increasing())
then
1043 errmsg =
"RELEASTIMES block entries must strictly increase."
1059 real(DP),
allocatable :: times(:)
1062 if (this%rtfreq <=
dzero)
return
1071 call this%schedule%time_select%extend(times)
1074 if (.not. this%schedule%time_select%increasing())
then
1075 errmsg =
"Release times must strictly increase"
This module contains the extended boundary package.
This module contains the base boundary package.
This module contains simulation constants.
real(dp), parameter dsame
real constant for values that are considered the same based on machine precision
integer(i4b), parameter linelength
maximum length of a standard line
@ tabcenter
centered table column
@ tableft
left justified table column
@ mnormal
normal output mode
real(dp), parameter dep3
real constant 1000
integer(i4b), parameter lenpakloc
maximum length of a package location
real(dp), parameter dem1
real constant 1e-1
real(dp), parameter dep9
real constant 1e9
integer(i4b), parameter lenvarname
maximum length of a variable name
integer(i4b), parameter lenftype
maximum length of a package type (DIS, WEL, OC, etc.)
integer(i4b), parameter lenboundname
maximum length of a bound name
real(dp), parameter dzero
real constant zero
real(dp), parameter dem5
real constant 1e-5
real(dp), parameter done
real constant 1
subroutine pstop(status, message)
Stop the program, optionally specifying an error status code.
integer(i4b) function, public get_node(ilay, irow, icol, nlay, nrow, ncol)
Get node number, given layer, row, and column indices for a structured grid. If any argument is inval...
logical function, public point_in_polygon(x, y, poly)
Check if a point is within a polygon.
subroutine, public get_ijk(nodenumber, nrow, ncol, nlay, irow, icol, ilay)
Get row, column and layer indices from node number and grid dimensions. If nodenumber is invalid,...
subroutine, public get_jk(nodenumber, ncpl, nlay, icpl, ilay)
Get layer index and within-layer node index from node number and grid dimensions. If nodenumber is in...
This module defines variable data types.
pure real(dp) function, dimension(:), allocatable, public arange(start, stop, step)
Return reals separated by the given step over the given interval.
pure logical function, public is_close(a, b, rtol, atol, symmetric)
Check if a real value is approximately equal to another.
subroutine, public get_isize(name, mem_path, isize)
@ brief Get the number of elements for this variable
Particle tracking strategies.
@, public level_subfeature
This module contains the derived type ObsType.
subroutine, public defaultobsidprocessor(obsrv, dis, inunitobs, iout)
@ brief Process IDstring provided for each observation
subroutine create_particle_store(store, np, mempath)
Allocate particle store.
@ term_unreleased
terminated permanently unreleased
subroutine create_particle(particle)
Create a new particle.
Particle release scheduling.
type(particlereleasescheduletype) function, pointer, public create_release_schedule(tolerance)
Create a new release schedule.
Particle track output module.
character(len= *), parameter, public trackheader
character(len= *), parameter, public trackdtypes
subroutine, public prp_create(packobj, id, ibcnum, inunit, iout, namemodel, pakname, input_mempath, fmi)
Create a new particle release point package.
subroutine prp_allocate_arrays(this, nodelist, auxvar)
Allocate arrays.
subroutine prp_rp(this)
@ brief Read and prepare period data for particle input
subroutine prp_load_releasetimefrequency(this)
Load regularly spaced release times if configured.
subroutine prp_cq_simrate(this, hnew, flowja, imover)
@ brief Calculate flow between package and model.
character(len=lenftype) ftype
subroutine prp_df_obs(this)
Store supported observations.
subroutine define_listlabel(this)
subroutine log_release(this)
Log the release scheduled for this time step.
subroutine prp_ad(this)
Advance a time step and release particles if scheduled.
subroutine prp_allocate_scalars(this)
Allocate scalars.
subroutine prp_dimensions(this)
@ brief Set dimensions specific to PrtPrpType
subroutine prp_set_pointers(this, ibound, izone)
@ brief Set pointers to model variables
subroutine initialize_particle(this, particle, ip, trelease)
subroutine prp_da(this)
Deallocate memory.
subroutine prp_releasetimes(this)
Load explicitly specified release times.
subroutine prp_options(this)
@ brief Set options specific to PrtPrpType
subroutine prp_log_options(this, found, trackfile, trackcsvfile)
@ brief Log options specific to PrtPrpType
logical function prp_obs_supported(this)
Indicates whether observations are supported.
subroutine prp_ar(this)
@ brief Allocate and read period data
subroutine release(this, ip, trelease)
Release a particle at the specified time.
subroutine validate_release_point(this, ic, x, y, z)
Verify that the release point is in the cell.
subroutine prp_packagedata(this)
Load package data (release points).
This module contains simulation methods.
subroutine, public store_warning(msg, substring)
Store warning message.
subroutine, public store_error(msg, terminate)
Store an error message.
integer(i4b) function, public count_errors()
Return number of errors.
subroutine, public store_error_filename(filename, terminate)
Store the erroring file name.
This module contains simulation variables.
character(len=maxcharlen) errmsg
error message string
character(len=maxcharlen) warnmsg
warning message string
real(dp), pointer, public totalsimtime
time at end of simulation
integer(i4b), pointer, public kper
current stress period number
real(dp), pointer, public delt
length of the current time step
integer(i4b), pointer, public nper
number of stress period
This class is used to store a single deferred-length character string. It was designed to work in an ...
Structured grid discretization.
Vertex grid discretization.
Structure of arrays to store particles.
Particle tracked by the PRT model.
Particle release scheduling utility.
Manages particle track output (logging/writing).
Particle release point (PRP) package.