32 character(len=LENFTYPE) ::
ftype =
'PRP'
33 character(len=16) ::
text =
' PRP'
40 integer(I4B),
pointer :: nreleasepts => null()
41 integer(I4B),
pointer :: nparticles => null()
42 integer(I4B),
pointer :: istopweaksink => null()
43 integer(I4B),
pointer :: istopzone => null()
44 integer(I4B),
pointer :: idrape => null()
45 integer(I4B),
pointer :: itrkout => null()
46 integer(I4B),
pointer :: itrkhdr => null()
47 integer(I4B),
pointer :: itrkcsv => null()
48 integer(I4B),
pointer :: irlstls => null()
49 logical(LGP),
pointer :: localz => null()
50 logical(LGP),
pointer :: rlsall => null()
51 logical(LGP),
pointer :: rlsfirst => null()
52 logical(LGP),
pointer :: rlstimelist => null()
53 real(dp),
pointer :: offset => null()
54 real(dp),
pointer :: stoptime => null()
55 real(dp),
pointer :: stoptraveltime => null()
56 integer(I4B),
pointer,
contiguous :: rlskstp(:)
57 integer(I4B),
pointer,
contiguous :: rptnode(:) => null()
58 integer(I4B),
pointer,
contiguous :: rptzone(:) => null()
59 real(dp),
pointer,
contiguous :: rptx(:) => null()
60 real(dp),
pointer,
contiguous :: rpty(:) => null()
61 real(dp),
pointer,
contiguous :: rptz(:) => null()
62 real(dp),
pointer,
contiguous :: locz(:) => null()
63 real(dp),
pointer,
contiguous :: rptmass(:) => null()
64 character(len=LENBOUNDNAME),
pointer,
contiguous :: rptname(:) => null()
87 subroutine prp_create(packobj, id, ibcnum, inunit, iout, namemodel, &
88 pakname, mempath, fmi)
90 class(
bndtype),
pointer :: packobj
91 integer(I4B),
intent(in) :: id
92 integer(I4B),
intent(in) :: ibcnum
93 integer(I4B),
intent(in) :: inunit
94 integer(I4B),
intent(in) :: iout
95 character(len=*),
intent(in) :: namemodel
96 character(len=*),
intent(in) :: pakname
97 character(len=*),
intent(in) :: mempath
102 character(len=*),
parameter :: fmtheader = &
103 "(1x, /1x, 'PRP -- PARTICLE RELEASE POINT PACKAGE', &
104 &' INPUT READ FROM MEMPATH: ', A, /)"
111 call packobj%set_names(ibcnum, namemodel, pakname,
ftype, mempath)
115 call prpobj%prp_allocate_scalars()
118 call packobj%pack_initialize()
120 packobj%inunit = inunit
123 packobj%ibcnum = ibcnum
131 if (inunit > 0)
write (iout, fmtheader) mempath
139 call this%BndType%bnd_da()
170 call this%particles%destroy(this%memoryPath)
171 deallocate (this%particles)
174 call this%releasetimes%destroy()
175 deallocate (this%releasetimes)
182 integer(I4B),
dimension(:),
pointer,
contiguous :: ibound
183 integer(I4B),
dimension(:),
pointer,
contiguous :: izone
186 this%ibound => ibound
187 this%rptzone => izone
188 this%trackfilectl => trackfilectl
195 integer(I4B),
dimension(:),
pointer,
contiguous,
optional :: nodelist
196 real(DP),
dimension(:, :),
pointer,
contiguous,
optional :: auxvar
205 call mem_allocate(this%rptx, this%nreleasepts,
'RPTX', this%memoryPath)
206 call mem_allocate(this%rpty, this%nreleasepts,
'RPTY', this%memoryPath)
207 call mem_allocate(this%rptz, this%nreleasepts,
'RPTZ', this%memoryPath)
208 call mem_allocate(this%locz, this%nreleasepts,
'LOCZ', this%memoryPath)
209 call mem_allocate(this%rptmass, this%nreleasepts,
'RPTMASS', this%memoryPath)
210 call mem_allocate(this%rptnode, this%nreleasepts,
'RPTNODER', &
212 call mem_allocate(this%rlskstp, 1,
'RLSKSTP', this%memoryPath)
214 'RPTNAME', this%memoryPath)
218 do nps = 1, this%nreleasepts
219 this%rptmass(nps) =
dzero
228 allocate (this%releasetimes)
229 call this%releasetimes%init()
232 call this%BndType%allocate_scalars()
235 call mem_allocate(this%rlsall,
'RLSALL', this%memoryPath)
236 call mem_allocate(this%rlsfirst,
'RLSFIRST', this%memoryPath)
237 call mem_allocate(this%rlstimelist,
'RELEASETIME', this%memoryPath)
238 call mem_allocate(this%localz,
'LOCALZ', this%memoryPath)
239 call mem_allocate(this%offset,
'OFFSET', this%memoryPath)
240 call mem_allocate(this%stoptime,
'STOPTIME', this%memoryPath)
241 call mem_allocate(this%stoptraveltime,
'STOPTRAVELTIME', this%memoryPath)
242 call mem_allocate(this%istopweaksink,
'ISTOPWEAKSINK', this%memoryPath)
243 call mem_allocate(this%istopzone,
'ISTOPZONE', this%memoryPath)
244 call mem_allocate(this%idrape,
'IDRAPE', this%memoryPath)
245 call mem_allocate(this%nreleasepts,
'NRELEASEPTS', this%memoryPath)
246 call mem_allocate(this%nparticles,
'NPART', this%memoryPath)
247 call mem_allocate(this%itrkout,
'ITRKOUT', this%memoryPath)
248 call mem_allocate(this%itrkhdr,
'ITRKHDR', this%memoryPath)
249 call mem_allocate(this%itrkcsv,
'ITRKCSV', this%memoryPath)
250 call mem_allocate(this%irlstls,
'IRLSTLS', this%memoryPath)
253 this%rlsall = .false.
254 this%rlsfirst = .false.
255 this%rlstimelist = .false.
256 this%localz = .false.
258 this%stoptime = huge(1d0)
259 this%stoptraveltime = huge(1d0)
260 this%istopweaksink = 0
278 call this%obs%obs_ar()
279 call this%BndType%allocate_arrays()
280 if (this%inamedbound /= 0)
then
281 do n = 1, this%nreleasepts
282 this%boundname(n) = this%rptname(n)
285 do n = 1, this%nreleasepts
286 this%nodelist(n) = this%rptnode(n)
310 character(len=LINELENGTH) :: errmsg
311 integer(I4B) :: ic, icu, nps, nts, nrel, &
312 nreleasets, np, irow, icol, ilay, icpl
313 real(DP) :: x, y, z, trelease, tend, top, bot, hds
314 real(DP),
allocatable :: polyverts(:, :)
322 (this%rlsfirst .and.
kstp == 1) .or. &
324 any(this%rlskstp ==
kstp) .or. &
326 this%rlstimelist))
return
328 if (this%rlstimelist)
then
329 nreleasets =
size(this%releasetimes%times)
333 nrel = this%nreleasepts * nreleasets
336 do nps = 1, this%nreleasepts
337 this%rptmass(nps) =
dzero
342 if ((this%nparticles + nrel) >
size(this%particles%irpt)) &
343 call this%particles%resize( &
344 size(this%particles%irpt) + nrel, &
348 do nps = 1, this%nreleasepts
349 ic = this%rptnode(nps)
350 icu = this%dis%get_nodeuser(ic)
352 tsloop:
do nts = 1, nreleasets
353 if (this%rlstimelist)
then
354 trelease = this%releasetimes%times(nts)
356 if (trelease <
totimc .or. trelease >= tend) cycle tsloop
361 np = this%nparticles + 1
369 call this%dis%get_polyverts(ic, polyverts)
371 write (errmsg,
'(a,g0,a,g0,a,i0)') &
372 'Error: release point (x=', x,
', y=', y,
') is not in cell ', icu
376 if (z > maxval(this%dis%top))
then
377 write (errmsg,
'(a,g0,a,g0,a,i0)') &
378 'Error: release point (z=', z,
') is above grid top ', &
382 else if (z < minval(this%dis%bot))
then
383 write (errmsg,
'(a,g0,a,g0,a,i0)') &
384 'Error: release point (z=', z,
') is below grid bottom ', &
398 if (
size(this%boundname) /= 0)
then
399 particle%name = this%boundname(nps)
404 particle%istopweaksink = this%istopweaksink
405 particle%istopzone = this%istopzone
407 select type (dis => this%dis)
409 call get_ijk(icu, dis%nrow, dis%ncol, dis%nlay, irow, icol, ilay)
411 call get_jk(icu, dis%ncpl, dis%nlay, icpl, ilay)
414 particle%izone = this%rptzone(ic)
417 if (this%ibound(ic) == 0)
then
420 if (this%idrape /= 0) &
421 call this%dis%highest_active(ic, this%ibound)
423 if (this%ibound(ic) == 0) &
428 if (this%localz)
then
429 top = this%fmi%dis%top(ic)
430 bot = this%fmi%dis%bot(ic)
431 hds = this%fmi%gwfhead(ic)
432 particle%z = bot + this%rptz(nps) * (hds - bot)
434 particle%z = this%rptz(nps)
436 particle%trelease = trelease
438 if (this%stoptraveltime == huge(1d0))
then
439 particle%tstop = this%stoptime
441 particle%tstop = particle%trelease + this%stoptraveltime
442 if (this%stoptime < particle%tstop) particle%tstop = this%stoptime
444 particle%ttrack = particle%trelease
445 particle%idomain(1) = 0
446 particle%iboundary(1) = 0
447 particle%idomain(2) = ic
448 particle%iboundary(2) = 0
449 particle%idomain(3) = 0
450 particle%iboundary(3) = 0
451 call this%particles%load_from_particle(particle, np)
454 this%rptmass(nps) = this%rptmass(nps) +
done
469 integer(I4B) :: lloc, istart, istop, ival
471 logical(LGP) :: isfound
472 logical(LGP) :: endOfBlock
473 logical(LGP) :: use_last
474 logical(LGP) :: noperiodblocks
475 character(len=LINELENGTH) :: keyword
476 character(len=:),
allocatable :: line
478 character(len=*),
parameter :: fmtblkerr = &
479 "('Looking for BEGIN PERIOD iper. &
480 &Found ', a, ' instead.')"
481 character(len=*),
parameter :: fmt_steps = &
482 "(6x,'TIME STEP(S) ',50(I0,' '))"
483 character(len=*),
parameter :: fmt_freq = &
484 "(6x,'EVERY ',I0,' TIME STEP(S)')"
485 character(len=*),
parameter :: fmt_fracs = &
490 if (this%inunit == 0)
return
493 noperiodblocks = .false.
494 if (this%ionper <
kper)
then
496 call this%parser%GetBlock(
'PERIOD', isfound, ierr, &
497 supportopenclose=.true., &
498 blockrequired=.false.)
501 call this%read_check_ionper()
507 noperiodblocks = .true.
510 this%ionper =
nper + 1
514 call this%parser%GetCurrentLine(line)
515 write (
errmsg, fmtblkerr) adjustl(trim(line))
525 if (noperiodblocks)
then
528 "RLSKSTP", this%memoryPath)
529 this%rlsfirst = .true.
534 else if (this%ionper ==
kper)
then
537 call this%parser%GetNextLine(endofblock)
539 call this%parser%GetStringCaps(keyword)
540 select case (keyword)
545 "RLSKSTP", this%memoryPath)
546 call this%parser%GetRemainingLine(line)
549 call urword(line, lloc, istart, istop, 2, ival, dval, -1, 0)
551 n =
size(this%rlskstp)
553 'RLSKSTP', this%memoryPath)
554 this%rlskstp(n + 1) = ival
555 cycle stepslistsearch
558 end do stepslistsearch
560 this%rlsfirst = .true.
562 ival = this%parser%GetInteger()
564 errmsg =
"FREQUENCY must be non-negative"
566 call this%parser%StoreErrorUnit(terminate=.true.)
568 do i = 1,
nstp(this%ionper)
569 if (mod(i, ival) == 0)
then
570 n =
size(this%rlskstp)
572 'RLSKSTP', this%memoryPath)
573 this%rlskstp(n + 1) = i
577 dval = this%parser%GetDouble()
581 'Looking for ALL, STEPS, FIRST, FREQUENCY, or FRACTION. Found: ', &
582 trim(adjustl(keyword))
592 if (.not. any(this%rlskstp > 0))
then
593 write (this%iout,
"(1x,/1x,a)")
'NO PARTICLE RELEASES IN THIS STRESS '// &
595 else if (use_last)
then
596 write (this%iout,
"(1x,/1x,a)")
'REUSING PARTICLE RELEASE SETTINGS '// &
597 'FROM LAST STRESS PERIOD'
600 write (this%iout,
"(1x,/1x,a)", advance=
'no')
'PARTICLE RELEASE:'
601 if (any(this%rlskstp > 0))
then
602 n =
size(this%rlskstp)
603 if (n > 0)
write (this%iout, fmt_steps, advance=
'no') this%rlskstp
605 write (this%iout,
"(1x,a)", advance=
'no')
'AT OFFSET'
606 write (this%iout, fmt_fracs) (/this%offset/)
607 write (this%iout,
'(A)')
617 real(DP),
dimension(:),
intent(in) :: hnew
618 real(DP),
dimension(:),
intent(inout) :: flowja
619 integer(I4B),
intent(in) :: imover
623 integer(I4B) :: idiag
627 if (this%nbound <= 0)
return
630 do i = 1, this%nbound
631 node = this%nodelist(i)
636 idiag = this%dis%con%ia(node)
639 rrate = this%rptmass(i) * (
done /
delt)
640 flowja(idiag) = flowja(idiag) + rrate
644 this%simvals(i) = rrate
653 this%listlabel = trim(this%filtyp)//
' NO.'
654 if (this%dis%ndim == 3)
then
655 write (this%listlabel,
'(a, a7)') trim(this%listlabel),
'LAYER'
656 write (this%listlabel,
'(a, a7)') trim(this%listlabel),
'ROW'
657 write (this%listlabel,
'(a, a7)') trim(this%listlabel),
'COL'
658 elseif (this%dis%ndim == 2)
then
659 write (this%listlabel,
'(a, a7)') trim(this%listlabel),
'LAYER'
660 write (this%listlabel,
'(a, a7)') trim(this%listlabel),
'CELL2D'
662 write (this%listlabel,
'(a, a7)') trim(this%listlabel),
'NODE'
664 write (this%listlabel,
'(a, a16)') trim(this%listlabel),
'STRESS RATE'
665 if (this%inamedbound == 1)
then
666 write (this%listlabel,
'(a, a16)') trim(this%listlabel),
'BOUNDARY NAME'
682 call this%obs%StoreObsType(
'prp', .true., indx)
687 call this%obs%StoreObsType(
'to-mvr', .true., indx)
699 character(len=*),
intent(inout) :: option
700 logical,
intent(inout) :: found
703 integer(I4B) :: i, ios, nlines
704 logical(LGP) :: success
705 character(len=MAXCHARLEN) :: fname
706 character(len=MAXCHARLEN) :: keyword
707 character(len=:),
allocatable :: line
709 character(len=*),
parameter :: fmttrkbin = &
710 "(4x, 'PARTICLE TRACKS WILL BE SAVED TO BINARY FILE: ', a, /4x, &
711 &'OPENED ON UNIT: ', I0)"
712 character(len=*),
parameter :: fmttrkcsv = &
713 "(4x, 'PARTICLE TRACKS WILL BE SAVED TO CSV FILE: ', a, /4x, &
714 &'OPENED ON UNIT: ', I0)"
718 this%stoptime = this%parser%GetDouble()
720 case (
'STOPTRAVELTIME')
721 this%stoptraveltime = this%parser%GetDouble()
723 case (
'STOP_AT_WEAK_SINK')
724 this%istopweaksink = 1
727 this%istopzone = this%parser%GetInteger()
732 case (
'RELEASE_TIMES')
735 call this%parser%TryGetDouble(dval, success)
736 if (.not. success)
exit rtloop
737 call this%releasetimes%expand()
738 this%releasetimes%times(
size(this%releasetimes%times)) = dval
740 if (.not. this%releasetimes%increasing())
then
741 errmsg =
"RELEASE TIMES MUST STRICTLY INCREASE"
743 call this%parser%StoreErrorUnit(terminate=.true.)
745 this%rlstimelist = .true.
747 case (
'RELEASE_TIMESFILE')
748 call this%parser%GetString(fname)
749 call openfile(this%irlstls, this%iout, fname,
'TLS')
752 read (this%irlstls,
'(A)', iostat=ios) line
753 if (ios /= 0)
exit rtfloop
756 call this%releasetimes%expand(nlines)
758 allocate (
character(len=LINELENGTH) :: line)
760 read (this%irlstls,
'(A)') line
761 read (line,
'(f30.0)') dval
762 this%releasetimes%times(i) = dval
764 if (.not. this%releasetimes%increasing())
then
765 errmsg =
"RELEASE TIMES MUST STRICTLY INCREASE"
767 call this%parser%StoreErrorUnit(terminate=.true.)
769 this%rlstimelist = .true.
772 call this%parser%GetStringCaps(keyword)
773 if (keyword ==
'FILEOUT')
then
775 call this%parser%GetString(fname)
778 call openfile(this%itrkout, this%iout, fname,
'DATA(BINARY)', &
781 write (this%iout, fmttrkbin) trim(adjustl(fname)), this%itrkout
784 fname = trim(fname)//
'.hdr'
785 call openfile(this%itrkhdr, this%iout, fname,
'CSV', &
786 filstat_opt=
'REPLACE', mode_opt=mnormal)
789 call store_error(
'OPTIONAL TRACK KEYWORD MUST BE '// &
790 'FOLLOWED BY FILEOUT')
794 call this%parser%GetStringCaps(keyword)
795 if (keyword ==
'FILEOUT')
then
797 call this%parser%GetString(fname)
800 call openfile(this%itrkcsv, this%iout, fname,
'CSV', &
801 filstat_opt=
'REPLACE')
802 write (this%iout, fmttrkcsv) trim(adjustl(fname)), this%itrkcsv
805 call store_error(
'OPTIONAL TRACKCSV KEYWORD MUST BE &
806 &FOLLOWED BY FILEOUT')
822 character(len=LINELENGTH) :: cellid
823 character(len=LENBOUNDNAME) :: bndName, bndNameTemp
824 character(len=9) :: cno
826 logical :: endOfBlock
830 character(len=LENBOUNDNAME),
dimension(:),
allocatable :: nametxt
831 integer(I4B),
dimension(:),
allocatable :: nboundchk
832 integer(I4B),
dimension(:),
allocatable :: noder
833 real(DP),
dimension(:),
allocatable :: x
834 real(DP),
dimension(:),
allocatable :: y
835 real(DP),
dimension(:),
allocatable :: z
836 real(DP),
dimension(:),
allocatable :: tstop
838 character(len=*),
parameter :: fmttend = &
839 "('end time (', G0, ') must be greater than or equal to the &
840 &begin time (', G0, ').')"
843 allocate (noder(this%nreleasepts))
844 allocate (x(this%nreleasepts))
845 allocate (y(this%nreleasepts))
846 allocate (z(this%nreleasepts))
847 allocate (tstop(this%nreleasepts))
848 allocate (nametxt(this%nreleasepts))
849 allocate (nboundchk(this%nreleasepts))
852 do n = 1, this%nreleasepts
858 call this%parser%GetBlock(
'PACKAGEDATA', isfound, ierr, &
859 supportopenclose=.true.)
863 write (this%iout,
'(/1x,a)')
'PROCESSING '//trim(adjustl(this%packName)) &
866 call this%parser%GetNextLine(endofblock)
868 ival = this%parser%GetInteger()
871 if (n < 1 .or. n > this%nreleasepts)
then
872 write (
errmsg,
'(a,1x,i0,a)') &
873 'Release point number must be greater than 0 and less than ', &
874 'or equal to', this%nreleasepts,
'.'
880 nboundchk(n) = nboundchk(n) + 1
883 call this%parser%GetCellid(this%dis%ndim, cellid)
884 noder(n) = this%dis%noder_from_cellid(cellid, this%inunit, this%iout)
887 x(n) = this%parser%GetDouble()
888 y(n) = this%parser%GetDouble()
889 z(n) = this%parser%GetDouble()
891 if (this%localz .and. (z(n) < 0 .or. z(n) > 1))
then
892 call store_error(
'Local z coordinate must fall in the interval [0, 1]')
897 write (cno,
'(i9.9)') n
901 if (this%inamedbound /= 0)
then
902 call this%parser%GetStringCaps(bndnametemp)
903 if (bndnametemp /=
'') &
904 bndname = bndnametemp
913 write (this%iout,
'(1x,a)') &
914 'END OF '//trim(adjustl(this%packName))//
' PACKAGEDATA'
917 do n = 1, this%nreleasepts
918 if (nboundchk(n) == 0)
then
919 write (
errmsg,
'(a,a,1x,i0,a)')
'No data specified for particle ', &
920 'release point', n,
'.'
922 else if (nboundchk(n) > 1)
then
923 write (
errmsg,
'(a,1x,i0,1x,a,1x,i0,1x,a)') &
924 'Data for particle release point', n,
'specified', nboundchk(n), &
930 call store_error(
'Required packagedata block not found.')
935 call this%parser%StoreErrorUnit()
939 do n = 1, this%nreleasepts
940 this%rptnode(n) = noder(n)
944 this%rptname(n) = nametxt(n)
954 deallocate (nboundchk)
962 character(len=LINELENGTH) :: errmsg, keyword
964 logical :: isfound, endOfBlock
967 call this%parser%GetBlock(
'DIMENSIONS', isfound, ierr, &
968 supportopenclose=.true.)
972 write (this%iout,
'(1x,a)')
'PROCESSING PARTICLE INPUT DIMENSIONS'
974 call this%parser%GetNextLine(endofblock)
976 call this%parser%GetStringCaps(keyword)
977 select case (keyword)
979 this%nreleasepts = this%parser%GetInteger()
982 '(4x,a,a)')
'****ERROR. UNKNOWN PARTICLE INPUT DIMENSION: ', &
985 call this%parser%StoreErrorUnit()
988 write (this%iout,
'(1x,a)')
'END OF PARTICLE INPUT DIMENSIONS'
990 call store_error(
'ERROR. REQUIRED DIMENSIONS BLOCK NOT FOUND.')
994 this%maxbound = this%nreleasepts
995 this%nbound = this%nreleasepts
998 call this%prp_allocate_arrays()
1001 call this%prp_read_packagedata()
This module contains block parser methods.
This module contains the base boundary package.
This module contains simulation constants.
integer(i4b), parameter linelength
maximum length of a standard line
@ tabcenter
centered table column
@ tableft
left justified table column
@ mnormal
normal output mode
integer(i4b), parameter lenpakloc
maximum length of a package location
real(dp), parameter dem1
real constant 1e-1
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
integer(i4b), parameter maxcharlen
maximum length of char string
real(dp), parameter done
real constant 1
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.
This module contains the derived type ObsType.
subroutine, public defaultobsidprocessor(obsrv, dis, inunitobs, iout)
@ brief Process IDstring provided for each observation
subroutine, public create_particle_store(this, np, mempath)
Create a new particle store.
subroutine, public create_particle(particle)
Create a new particle.
subroutine prp_allocate_arrays(this, nodelist, auxvar)
Allocate arrays.
subroutine prp_rp(this)
@ brief Read and prepare period data for particle input
subroutine prp_cq_simrate(this, hnew, flowja, imover)
@ brief Calculate flow between package and model.
subroutine prp_read_dimensions(this)
Read package dimensions.
character(len=lenftype) ftype
subroutine prp_df_obs(this)
Store supported observations.
subroutine define_listlabel(this)
@ brief Define list heading written with PRINT_INPUT option
subroutine prp_ad(this)
Advance a time step and release particles if appropriate.
subroutine prp_set_pointers(this, ibound, izone, trackfilectl)
@ brief Set pointers to model variables
subroutine prp_allocate_scalars(this)
Allocate scalars.
subroutine prp_da(this)
Deallocate memory.
logical function prp_obs_supported(this)
Indicates whether observations are supported.
subroutine, public prp_create(packobj, id, ibcnum, inunit, iout, namemodel, pakname, mempath, fmi)
Create a new particle release point package.
subroutine prp_ar(this)
@ brief Allocate and read period data
subroutine prp_read_packagedata(this)
Read the packagedata for this package.
subroutine prp_options(this, option, found)
Set options specific to PrtPrpType.
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_unit(iunit, terminate)
Store the file unit number.
This module contains simulation variables.
character(len=maxcharlen) errmsg
error message string
character(len=maxcharlen) warnmsg
warning message string
subroutine, public table_cr(this, name, title)
integer(i4b), dimension(:), pointer, public, contiguous nstp
number of time steps in each stress period
real(dp), pointer, public totimc
simulation time at start of time step
integer(i4b), pointer, public kstp
current time step number
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
Specify times for some event(s) to occur.
type(timeserieslinktype) function, pointer, public gettimeserieslinkfromlist(list, indx)
Get time series link from a list.
character(len= *), parameter, public trackheader
character(len= *), parameter, public trackdtypes
Structured grid discretization.
Vertex grid discretization.
Structure of arrays to store particles.
A particle tracked by the PRT model.
Particle release point (PRP) package.
Represents a series of instants at which some event should occur.
Manages particle track (i.e. pathline) files.