34 character(len=LENFTYPE) ::
ftype =
'PRP'
35 character(len=16) ::
text =
' PRP'
42 integer(I4B),
pointer :: nreleasepoints => null()
43 integer(I4B),
pointer :: nreleasetimes => null()
44 integer(I4B),
pointer :: nparticles => null()
45 integer(I4B),
pointer :: istopweaksink => null()
46 integer(I4B),
pointer :: istopzone => null()
47 integer(I4B),
pointer :: idrape => null()
48 integer(I4B),
pointer :: idrymeth => null()
49 integer(I4B),
pointer :: itrkout => null()
50 integer(I4B),
pointer :: itrkhdr => null()
51 integer(I4B),
pointer :: itrkcsv => null()
52 integer(I4B),
pointer :: irlstls => null()
53 integer(I4B),
pointer :: ilocalz => null()
54 integer(I4B),
pointer :: iextend => null()
55 integer(I4B),
pointer :: ifrctrn => null()
56 integer(I4B),
pointer :: iexmeth => null()
57 integer(I4B),
pointer :: ichkmeth => null()
58 integer(I4B),
pointer :: icycwin => null()
59 real(dp),
pointer :: extol => null()
60 real(dp),
pointer :: rttol => null()
61 real(dp),
pointer :: rtfreq => null()
62 real(dp),
pointer :: offset => null()
63 real(dp),
pointer :: stoptime => null()
64 real(dp),
pointer :: stoptraveltime => null()
65 integer(I4B),
pointer,
contiguous :: rptnode(:) => null()
66 integer(I4B),
pointer,
contiguous :: rptzone(:) => null()
67 real(dp),
pointer,
contiguous :: rptx(:) => null()
68 real(dp),
pointer,
contiguous :: rpty(:) => null()
69 real(dp),
pointer,
contiguous :: rptz(:) => null()
70 real(dp),
pointer,
contiguous :: rptm(:) => null()
71 character(len=LENBOUNDNAME),
pointer,
contiguous :: rptname(:) => null()
99 subroutine prp_create(packobj, id, ibcnum, inunit, iout, namemodel, &
100 pakname, input_mempath, fmi)
102 class(
bndtype),
pointer :: packobj
103 integer(I4B),
intent(in) :: id
104 integer(I4B),
intent(in) :: ibcnum
105 integer(I4B),
intent(in) :: inunit
106 integer(I4B),
intent(in) :: iout
107 character(len=*),
intent(in) :: namemodel
108 character(len=*),
intent(in) :: pakname
109 character(len=*),
intent(in) :: input_mempath
114 character(len=*),
parameter :: fmtheader = &
115 "(1x, /1x, 'PRP PARTICLE RELEASE POINT PACKAGE', &
116 &' INPUT READ FROM MEMPATH: ', a, /)"
123 call packobj%set_names(ibcnum, namemodel, pakname,
ftype, input_mempath)
127 call prpobj%prp_allocate_scalars()
130 call packobj%pack_initialize()
132 packobj%inunit = inunit
135 packobj%ibcnum = ibcnum
143 if (inunit > 0)
write (iout, fmtheader) input_mempath
151 call this%BndExtType%bnd_da()
187 call this%particles%destroy(this%memoryPath)
188 call this%schedule%destroy()
189 deallocate (this%particles)
190 deallocate (this%schedule)
196 integer(I4B),
dimension(:),
pointer,
contiguous :: ibound
197 integer(I4B),
dimension(:),
pointer,
contiguous :: izone
199 this%ibound => ibound
200 this%rptzone => izone
207 integer(I4B),
dimension(:),
pointer,
contiguous,
optional :: nodelist
208 real(DP),
dimension(:, :),
pointer,
contiguous,
optional :: auxvar
212 call this%BndExtType%allocate_arrays()
218 this%nreleasepoints, &
222 call mem_allocate(this%rptx, this%nreleasepoints,
'RPTX', this%memoryPath)
223 call mem_allocate(this%rpty, this%nreleasepoints,
'RPTY', this%memoryPath)
224 call mem_allocate(this%rptz, this%nreleasepoints,
'RPTZ', this%memoryPath)
225 call mem_allocate(this%rptm, this%nreleasepoints,
'RPTMASS', &
227 call mem_allocate(this%rptnode, this%nreleasepoints,
'RPTNODER', &
230 'RPTNAME', this%memoryPath)
233 do nps = 1, this%nreleasepoints
234 this%rptm(nps) =
dzero
243 call this%BndExtType%allocate_scalars()
246 call mem_allocate(this%ilocalz,
'ILOCALZ', this%memoryPath)
247 call mem_allocate(this%iextend,
'IEXTEND', this%memoryPath)
248 call mem_allocate(this%offset,
'OFFSET', this%memoryPath)
249 call mem_allocate(this%stoptime,
'STOPTIME', this%memoryPath)
250 call mem_allocate(this%stoptraveltime,
'STOPTRAVELTIME', this%memoryPath)
251 call mem_allocate(this%istopweaksink,
'ISTOPWEAKSINK', this%memoryPath)
252 call mem_allocate(this%istopzone,
'ISTOPZONE', this%memoryPath)
253 call mem_allocate(this%idrape,
'IDRAPE', this%memoryPath)
254 call mem_allocate(this%idrymeth,
'IDRYMETH', this%memoryPath)
255 call mem_allocate(this%nreleasepoints,
'NRELEASEPOINTS', this%memoryPath)
256 call mem_allocate(this%nreleasetimes,
'NRELEASETIMES', this%memoryPath)
257 call mem_allocate(this%nparticles,
'NPARTICLES', this%memoryPath)
258 call mem_allocate(this%itrkout,
'ITRKOUT', this%memoryPath)
259 call mem_allocate(this%itrkhdr,
'ITRKHDR', this%memoryPath)
260 call mem_allocate(this%itrkcsv,
'ITRKCSV', this%memoryPath)
261 call mem_allocate(this%irlstls,
'IRLSTLS', this%memoryPath)
262 call mem_allocate(this%ifrctrn,
'IFRCTRN', this%memoryPath)
263 call mem_allocate(this%iexmeth,
'IEXMETH', this%memoryPath)
264 call mem_allocate(this%ichkmeth,
'ICHKMETH', this%memoryPath)
265 call mem_allocate(this%icycwin,
'ICYCWIN', this%memoryPath)
268 call mem_allocate(this%rtfreq,
'RTFREQ', this%memoryPath)
274 this%stoptime = huge(1d0)
275 this%stoptraveltime = huge(1d0)
276 this%istopweaksink = 0
280 this%nreleasepoints = 0
281 this%nreleasetimes = 0
304 call this%obs%obs_ar()
306 if (this%inamedbound /= 0)
then
307 do n = 1, this%nreleasepoints
308 this%boundname(n) = this%rptname(n)
311 do n = 1, this%nreleasepoints
312 this%nodelist(n) = this%rptnode(n)
320 integer(I4B) :: ip, it
333 do ip = 1, this%nreleasepoints
334 this%rptm(ip) =
dzero
339 call this%schedule%advance()
340 if (.not. this%schedule%any())
return
343 call this%log_release()
347 call this%particles%resize( &
348 this%particles%num_stored() + &
349 (this%nreleasepoints * this%schedule%count()), &
354 do ip = 1, this%nreleasepoints
355 do it = 1, this%schedule%count()
356 t = this%schedule%times(it)
361 'Skipping negative release time (t=', t,
').'
366 'Skipping release time falling after the end of the &
367 &simulation (t=', t,
'). Enable EXTEND_TRACKING to &
368 &release particles after the simulation end time.'
372 call this%release(ip, t)
380 if (this%iprpak > 0)
then
381 write (this%iout,
"(1x,/1x,a,1x,i0)") &
382 'PARTICLE RELEASE FOR PRP', this%ibcnum
383 call this%schedule%log(this%iout)
395 integer(I4B),
intent(in) :: ic
396 real(DP),
intent(in) :: x, y, z
398 real(DP),
allocatable :: polyverts(:, :)
400 call this%fmi%dis%get_polyverts(ic, polyverts)
402 write (
errmsg,
'(a,g0,a,g0,a,i0)') &
403 'Error: release point (x=', x,
', y=', y,
') is not in cell ', &
404 this%dis%get_nodeuser(ic)
408 if (z > maxval(this%dis%top))
then
409 write (
errmsg,
'(a,g0,a,g0,a,i0)') &
410 'Error: release point (z=', z,
') is above grid top ', &
414 else if (z < minval(this%dis%bot))
then
415 write (
errmsg,
'(a,g0,a,g0,a,i0)') &
416 'Error: release point (z=', z,
') is below grid bottom ', &
421 deallocate (polyverts)
439 integer(I4B),
intent(in) :: ip
440 real(DP),
intent(in) :: trelease
445 call this%initialize_particle(particle, ip, trelease)
446 np = this%nparticles + 1
448 call this%particles%put(particle, np)
449 deallocate (particle)
450 this%rptm(ip) = this%rptm(ip) +
done
458 integer(I4B),
intent(in) :: ip
459 real(DP),
intent(in) :: trelease
461 integer(I4B) :: irow, icol, ilay, icpl
462 integer(I4B) :: ic, icu, ic_old
464 real(DP) :: top, bot, hds
466 ic = this%rptnode(ip)
467 icu = this%dis%get_nodeuser(ic)
469 call create_particle(particle)
471 if (
size(this%boundname) /= 0)
then
472 particle%name = this%boundname(ip)
478 particle%istopweaksink = this%istopweaksink
479 particle%istopzone = this%istopzone
480 particle%idrymeth = this%idrymeth
483 select type (dis => this%dis)
485 call get_ijk(icu, dis%nrow, dis%ncol, dis%nlay, irow, icol, ilay)
487 call get_jk(icu, dis%ncpl, dis%nlay, icpl, ilay)
490 particle%izone = this%rptzone(ic)
495 if (this%ibound(ic) == 0)
then
497 if (this%idrape > 0)
then
498 call this%dis%highest_active(ic, this%ibound)
499 if (ic == ic_old .or. this%ibound(ic) == 0)
then
513 if (this%ilocalz > 0)
then
514 top = this%fmi%dis%top(ic)
515 bot = this%fmi%dis%bot(ic)
516 hds = this%fmi%gwfhead(ic)
517 z = bot + this%rptz(ip) * (hds - bot)
522 if (this%ichkmeth > 0) &
523 call this%validate_release_point(ic, x, y, z)
528 particle%trelease = trelease
531 if (this%stoptraveltime == huge(1d0))
then
532 particle%tstop = this%stoptime
534 particle%tstop = particle%trelease + this%stoptraveltime
535 if (this%stoptime < particle%tstop) particle%tstop = this%stoptime
538 particle%ttrack = particle%trelease
545 particle%ifrctrn = this%ifrctrn
546 particle%iexmeth = this%iexmeth
547 particle%iextend = this%iextend
548 particle%icycwin = this%icycwin
549 particle%extol = this%extol
563 integer(I4B),
pointer :: iper, ionper, nlist
564 character(len=LINELENGTH),
allocatable :: lines(:)
568 call mem_setptr(iper,
'IPER', this%input_mempath)
569 call mem_setptr(ionper,
'IONPER', this%input_mempath)
571 if (
kper == 1 .and. &
573 (ionper >
nper) .and. &
574 size(this%schedule%time_select%times) == 0)
then
581 call this%schedule%advance(lines=lines)
584 else if (iper /=
kper)
then
589 call mem_setptr(nlist,
'NBOUND', this%input_mempath)
590 call mem_setptr(settings,
'SETTING', this%input_mempath)
593 allocate (lines(nlist))
595 lines(n) = settings(n)
599 if (
size(lines) > 0) &
600 call this%schedule%advance(lines=lines)
612 real(DP),
dimension(:),
intent(in) :: hnew
613 real(DP),
dimension(:),
intent(inout) :: flowja
614 integer(I4B),
intent(in) :: imover
618 integer(I4B) :: idiag
622 if (this%nbound <= 0)
return
625 do i = 1, this%nbound
626 node = this%nodelist(i)
631 idiag = this%dis%con%ia(node)
632 rrate = this%rptm(i) * (
done /
delt)
633 flowja(idiag) = flowja(idiag) + rrate
637 this%simvals(i) = rrate
658 call this%obs%StoreObsType(
'prp', .true., indx)
663 call this%obs%StoreObsType(
'to-mvr', .true., indx)
678 character(len=LENVARNAME),
dimension(3) :: drytrack_method = &
679 &[character(len=LENVARNAME) ::
'DROP',
'STOP',
'STAY']
680 character(len=
lenvarname),
dimension(2) :: coorcheck_method = &
681 &[
character(len=LENVARNAME) ::
'NONE',
'EAGER']
682 character(len=LINELENGTH) :: trackfile, trackcsvfile, fname
686 call this%BndExtType%source_options()
689 call mem_set_value(this%stoptime,
'STOPTIME', this%input_mempath, &
692 this%input_mempath, found%stoptraveltime)
693 call mem_set_value(this%istopweaksink,
'ISTOPWEAKSINK', this%input_mempath, &
695 call mem_set_value(this%istopzone,
'ISTOPZONE', this%input_mempath, &
697 call mem_set_value(this%idrape,
'DRAPE', this%input_mempath, &
699 call mem_set_value(this%idrymeth,
'IDRYMETH', this%input_mempath, &
700 drytrack_method, found%idrymeth)
701 call mem_set_value(trackfile,
'TRACKFILE', this%input_mempath, &
703 call mem_set_value(trackcsvfile,
'TRACKCSVFILE', this%input_mempath, &
705 call mem_set_value(this%ilocalz,
'LOCAL_Z', this%input_mempath, &
707 call mem_set_value(this%iextend,
'EXTEND_TRACKING', this%input_mempath, &
708 found%extend_tracking)
709 call mem_set_value(this%extol,
'EXTOL', this%input_mempath, &
711 call mem_set_value(this%rttol,
'RTTOL', this%input_mempath, &
713 call mem_set_value(this%rtfreq,
'RTFREQ', this%input_mempath, &
715 call mem_set_value(this%ifrctrn,
'IFRCTRN', this%input_mempath, &
717 call mem_set_value(this%iexmeth,
'IEXMETH', this%input_mempath, &
719 call mem_set_value(this%ichkmeth,
'ICHKMETH', this%input_mempath, &
720 coorcheck_method, found%ichkmeth)
721 call mem_set_value(this%icycwin,
'ICYCWIN', this%input_mempath, found%icycwin)
724 if (found%idrymeth)
then
725 if (this%idrymeth == 0)
then
726 write (
errmsg,
'(a)')
'Unsupported dry tracking method. &
727 &DRY_TRACKING_METHOD must be "DROP", "STOP", or "STAY"'
731 this%idrymeth = this%idrymeth - 1
735 if (found%extol)
then
736 if (this%extol <=
dzero) &
737 call store_error(
'EXIT_SOLVE_TOLERANCE MUST BE POSITIVE')
740 if (found%rttol)
then
741 if (this%rttol <=
dzero) &
742 call store_error(
'RELEASE_TIME_TOLERANCE MUST BE POSITIVE')
745 if (found%rtfreq)
then
746 if (this%rtfreq <=
dzero) &
747 call store_error(
'RELEASE_TIME_FREQUENCY MUST BE POSITIVE')
750 if (found%iexmeth)
then
751 if (.not. (this%iexmeth /= 1 .or. this%iexmeth /= 2)) &
753 &1 (BRENT) OR 2 (CHANDRUPATLA)')
756 if (found%ichkmeth)
then
757 if (this%ichkmeth == 0)
then
758 write (
errmsg,
'(a)')
'Unsupported coordinate check method. &
759 &COORDINATE_CHECK_METHOD must be "NONE" or "EAGER"'
763 this%ichkmeth = this%ichkmeth - 1
767 if (found%icycwin)
then
768 if (this%icycwin < 0) &
769 call store_error(
'CYCLE_DETECTION_WINDOW MUST BE NON-NEGATIVE')
773 if (found%trackfile)
then
775 call openfile(this%itrkout, this%iout, trackfile,
'DATA(BINARY)', &
780 fname = trim(trackfile)//
'.hdr'
781 call openfile(this%itrkhdr, this%iout, fname,
'CSV', &
782 filstat_opt=
'REPLACE', mode_opt=
mnormal)
786 if (found%trackcsvfile)
then
788 call openfile(this%itrkcsv, this%iout, trackcsvfile,
'CSV', &
789 filstat_opt=
'REPLACE')
799 call this%prp_log_options(found, trackfile, trackcsvfile)
813 character(len=*),
intent(in) :: trackfile
814 character(len=*),
intent(in) :: trackcsvfile
817 character(len=*),
parameter :: fmttrkbin = &
818 "(4x, 'PARTICLE TRACKS WILL BE SAVED TO BINARY FILE: ', a, /4x, &
819 &'OPENED ON UNIT: ', I0)"
820 character(len=*),
parameter :: fmttrkcsv = &
821 "(4x, 'PARTICLE TRACKS WILL BE SAVED TO CSV FILE: ', a, /4x, &
822 &'OPENED ON UNIT: ', I0)"
824 write (this%iout,
'(1x,a)')
'PROCESSING PARTICLE INPUT DIMENSIONS'
826 if (found%ifrctrn)
then
827 write (this%iout,
'(4x,a)') &
828 'IF DISV, TRACKING WILL USE THE TERNARY METHOD REGARDLESS OF CELL TYPE'
831 if (found%trackfile)
then
832 write (this%iout, fmttrkbin) trim(adjustl(trackfile)), this%itrkout
835 if (found%trackcsvfile)
then
836 write (this%iout, fmttrkcsv) trim(adjustl(trackcsvfile)), this%itrkcsv
839 write (this%iout,
'(1x,a)')
'END OF PARTICLE INPUT DIMENSIONS'
852 call mem_set_value(this%nreleasepoints,
'NRELEASEPTS', this%input_mempath, &
854 call mem_set_value(this%nreleasetimes,
'NRELEASETIMES', this%input_mempath, &
857 write (this%iout,
'(1x,a)')
'PROCESSING PARTICLE INPUT DIMENSIONS'
858 write (this%iout,
'(4x,a,i0)')
'NRELEASEPTS = ', this%nreleasepoints
859 write (this%iout,
'(4x,a,i0)')
'NRELEASETIMES = ', this%nreleasetimes
860 write (this%iout,
'(1x,a)')
'END OF PARTICLE INPUT DIMENSIONS'
863 this%maxbound = this%nreleasepoints
864 this%nbound = this%nreleasepoints
867 call this%prp_allocate_arrays()
870 call this%prp_packagedata()
871 call this%prp_releasetimes()
872 call this%prp_load_releasetimefrequency()
883 integer(I4B),
dimension(:),
pointer,
contiguous :: irptno
884 integer(I4B),
dimension(:, :),
pointer,
contiguous :: cellids
885 real(DP),
dimension(:),
pointer,
contiguous :: xrpts, yrpts, zrpts
887 contiguous :: boundnames
888 character(len=LENBOUNDNAME) :: bndName, bndNameTemp
889 character(len=9) :: cno
890 integer(I4B),
dimension(:),
allocatable :: nboundchk
891 integer(I4B),
dimension(:),
pointer :: cellid
892 integer(I4B) :: n, noder, nodeu, rptno
895 call mem_setptr(irptno,
'IRPTNO', this%input_mempath)
896 call mem_setptr(cellids,
'CELLID', this%input_mempath)
897 call mem_setptr(xrpts,
'XRPT', this%input_mempath)
898 call mem_setptr(yrpts,
'YRPT', this%input_mempath)
899 call mem_setptr(zrpts,
'ZRPT', this%input_mempath)
900 call mem_setptr(boundnames,
'BOUNDNAME', this%input_mempath)
903 allocate (nboundchk(this%nreleasepoints))
904 do n = 1, this%nreleasepoints
908 write (this%iout,
'(/1x,a)')
'PROCESSING '//trim(adjustl(this%packName)) &
911 do n = 1,
size(irptno)
915 if (rptno < 1 .or. rptno > this%nreleasepoints)
then
916 write (
errmsg,
'(a,i0,a,i0,a)') &
917 'Expected ', this%nreleasepoints,
' release points. &
918 &Points must be numbered from 1 to ', this%nreleasepoints,
'.'
924 nboundchk(rptno) = nboundchk(rptno) + 1
927 cellid => cellids(:, n)
930 if (this%dis%ndim == 1)
then
932 elseif (this%dis%ndim == 2)
then
933 nodeu =
get_node(cellid(1), 1, cellid(2), &
934 this%dis%mshape(1), 1, &
937 nodeu =
get_node(cellid(1), cellid(2), cellid(3), &
938 this%dis%mshape(1), &
939 this%dis%mshape(2), &
944 noder = this%dis%get_nodenumber(nodeu, 1)
948 this%rptnode(rptno) = noder
951 if (this%ilocalz > 0 .and. (zrpts(n) < 0 .or. zrpts(n) > 1))
then
952 call store_error(
'Local z coordinate must fall in the interval [0, 1]')
957 this%rptx(rptno) = xrpts(n)
958 this%rpty(rptno) = yrpts(n)
959 this%rptz(rptno) = zrpts(n)
962 write (cno,
'(i9.9)') rptno
966 if (this%inamedbound /= 0)
then
967 bndnametemp = boundnames(n)
968 if (bndnametemp /=
'') bndname = bndnametemp
974 this%rptname(rptno) = bndname
977 write (this%iout,
'(1x,a)') &
978 'END OF '//trim(adjustl(this%packName))//
' PACKAGEDATA'
981 do n = 1, this%nreleasepoints
982 if (nboundchk(n) == 0)
then
983 write (
errmsg,
'(a,a,1x,i0,a)')
'No data specified for particle ', &
984 'release point', n,
'.'
986 else if (nboundchk(n) > 1)
then
987 write (
errmsg,
'(a,1x,i0,1x,a,1x,i0,1x,a)') &
988 'Data for particle release point', n,
'specified', nboundchk(n), &
1000 deallocate (nboundchk)
1009 real(DP),
dimension(:),
pointer,
contiguous :: time
1010 integer(I4B) :: n, isize
1011 real(DP),
allocatable :: times(:)
1013 if (this%nreleasetimes <= 0)
return
1016 allocate (times(this%nreleasetimes))
1019 call get_isize(
'TIME', this%input_mempath, isize)
1021 if (isize <= 0)
then
1022 errmsg =
"RELEASTIMES block expected when &
1023 &NRELEASETIMES dimension is non-zero."
1029 call mem_setptr(time,
'TIME', this%input_mempath)
1032 do n = 1,
size(time)
1037 call this%schedule%time_select%extend(times)
1040 if (.not. this%schedule%time_select%increasing())
then
1041 errmsg =
"RELEASTIMES block entries must strictly increase."
1057 real(DP),
allocatable :: times(:)
1060 if (this%rtfreq <=
dzero)
return
1069 call this%schedule%time_select%extend(times)
1072 if (.not. this%schedule%time_select%increasing())
then
1073 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.