41 character(len=LENBUDTXT),
dimension(NBDITEMS) ::
budtxt
42 data budtxt/
' STORAGE',
' TERMINATION'/
53 integer(I4B),
pointer :: infmi => null()
54 integer(I4B),
pointer :: inmip => null()
55 integer(I4B),
pointer :: inmvt => null()
56 integer(I4B),
pointer :: inmst => null()
57 integer(I4B),
pointer :: inadv => null()
58 integer(I4B),
pointer :: indsp => null()
59 integer(I4B),
pointer :: inssm => null()
60 integer(I4B),
pointer :: inoc => null()
61 integer(I4B),
pointer :: nprp => null()
62 real(dp),
dimension(:),
pointer,
contiguous :: masssto => null()
63 real(dp),
dimension(:),
pointer,
contiguous :: massstoold => null()
64 real(dp),
dimension(:),
pointer,
contiguous :: ratesto => null()
65 real(dp),
dimension(:),
pointer,
contiguous :: masstrm => null()
66 real(dp),
dimension(:),
pointer,
contiguous :: ratetrm => null()
103 character(len=LENPACKAGETYPE),
dimension(PRT_NBASEPKG) ::
prt_basepkg
104 data prt_basepkg/
'DIS6 ',
'DISV6',
'DISU6',
'IC6 ',
'MST6 ', &
105 &
'ADV6 ',
'DSP6 ',
'SSM6 ',
'MIP6 ',
'CNC6 ', &
106 &
'OC6 ',
' ',
'FMI6 ',
' ',
'IST6 ', &
107 &
'LKT6 ',
'SFT6 ',
'MWT6 ',
'UZT6 ',
'MVT6 ', &
108 &
'API6 ',
' ',
' ',
' ',
' ', &
117 character(len=LENPACKAGETYPE),
dimension(PRT_NMULTIPKG) ::
prt_multipkg
127 subroutine prt_cr(filename, id, modelname)
138 character(len=*),
intent(in) :: filename
139 integer(I4B),
intent(in) :: id
140 character(len=*),
intent(in) :: modelname
144 character(len=LENMEMPATH) :: input_mempath
145 character(len=LINELENGTH) :: lst_fname
155 allocate (this%events)
156 allocate (this%tracks)
159 call this%allocate_scalars(modelname)
164 this%filename = filename
165 this%name = modelname
166 this%macronym =
'PRT'
173 call mem_set_value(this%iprpak,
'PRINT_INPUT', input_mempath, &
175 call mem_set_value(this%iprflow,
'PRINT_FLOWS', input_mempath, &
177 call mem_set_value(this%ipakcb,
'SAVE_FLOWS', input_mempath, &
181 call this%create_lstfile(lst_fname, filename, found%list, &
182 'PARTICLE TRACKING MODEL (PRT)')
185 if (found%save_flows)
then
190 call this%create_packages()
196 if (this%iout > 0)
then
197 call this%log_namfile_options(found)
214 class(
bndtype),
pointer :: packobj
217 call this%dis%dis_df()
218 call this%fmi%fmi_df(this%dis, 1)
220 call this%budget%budget_df(
niunit_prt,
'MASS',
'M')
223 do ip = 1, this%bndlist%Count()
225 call packobj%bnd_df(this%dis%nodes, this%dis)
226 packobj%TsManager%iout = this%iout
227 packobj%TasManager%iout = this%iout
231 call this%allocate_arrays()
249 integer(I4B) :: ip, nprp
250 class(
bndtype),
pointer :: packobj
251 class(*),
pointer :: p
254 call this%fmi%fmi_ar(this%ibound)
255 if (this%inmip > 0)
call this%mip%mip_ar()
258 call this%oc%oc_ar(this%dis,
dhnoflo)
259 call this%budget%set_ibudcsv(this%oc%ibudcsv)
262 call this%tracks%select_events( &
263 this%oc%trackrelease, &
264 this%oc%trackfeatexit, &
265 this%oc%tracktimestep, &
266 this%oc%trackterminate, &
267 this%oc%trackweaksink, &
268 this%oc%trackusertime, &
269 this%oc%tracksubfexit, &
270 this%oc%trackdropped)
274 do ip = 1, this%bndlist%Count()
276 select type (packobj)
279 call packobj%prp_set_pointers(this%ibound, this%mip%izone)
280 call packobj%bnd_ar()
281 call packobj%bnd_ar()
282 if (packobj%itrkout > 0)
then
283 call this%tracks%init_file( &
287 if (packobj%itrkcsv > 0)
then
288 call this%tracks%init_file( &
294 call packobj%bnd_ar()
299 if (this%oc%itrkout > 0) &
300 call this%tracks%init_file(this%oc%itrkout)
301 if (this%oc%itrkcsv > 0) &
302 call this%tracks%init_file(this%oc%itrkcsv, csv=.true.)
305 select type (dis => this%dis)
309 events=this%events, &
310 izone=this%mip%izone, &
311 flowja=this%flowja, &
312 porosity=this%mip%porosity, &
313 retfactor=this%mip%retfactor, &
314 tracktimes=this%oc%tracktimes)
319 events=this%events, &
320 izone=this%mip%izone, &
321 flowja=this%flowja, &
322 porosity=this%mip%porosity, &
323 retfactor=this%mip%retfactor, &
324 tracktimes=this%oc%tracktimes)
333 if (this%oc%dump_event_trace) this%tracks%iout = 0
342 class(
bndtype),
pointer :: packobj
349 if (this%inoc > 0)
call this%oc%oc_rp()
350 do ip = 1, this%bndlist%Count()
352 call packobj%bnd_rp()
362 class(
bndtype),
pointer :: packobj
364 integer(I4B) :: irestore
365 integer(I4B) :: ip, n, i
372 do n = 1, this%dis%nodes
373 this%massstoold(n) = this%masssto(n)
377 call this%fmi%fmi_ad()
380 do ip = 1, this%bndlist%Count()
382 call packobj%bnd_ad()
384 call packobj%bnd_ck()
394 do i = 1, this%dis%nja
395 this%flowja(i) =
dzero
400 subroutine prt_cq(this, icnvg, isuppress_output)
407 integer(I4B),
intent(in) :: icnvg
408 integer(I4B),
intent(in) :: isuppress_output
412 class(
bndtype),
pointer :: packobj
426 do i = 1, this%dis%nja
427 this%flowja(i) = this%flowja(i) * tled
431 call this%prt_cq_budterms()
434 do ip = 1, this%bndlist%Count()
436 call packobj%bnd_cq(this%masssto, this%flowja)
454 class(
bndtype),
pointer :: packobj
457 integer(I4B) :: idiag
459 integer(I4B) :: istatus
461 real(DP) :: ratesto, ratetrm
462 character(len=:),
allocatable :: particle_id
471 do n = 1, this%dis%nodes
472 this%masssto(n) =
dzero
473 this%masstrm(n) =
dzero
474 this%ratesto(n) =
dzero
475 this%ratetrm(n) =
dzero
481 do ip = 1, this%bndlist%Count()
483 select type (packobj)
485 do np = 1, packobj%nparticles
486 call packobj%particles%get(particle, this%id, iprp, np)
487 istatus = packobj%particles%istatus(np)
488 particle_id = particle%get_id()
489 if (istatus ==
active)
then
492 this%masssto(n) = this%masssto(n) +
done
493 else if (istatus >
active)
then
494 if (this%trm_ids%get(particle_id) /= 0) cycle
497 this%masstrm(n) = this%masstrm(n) +
done
498 call this%trm_ids%add(particle_id, 1)
505 do n = 1, this%dis%nodes
506 ratesto = -(this%masssto(n) - this%massstoold(n)) * tled
507 ratetrm = -this%masstrm(n) * tled
508 this%ratesto(n) = ratesto
509 this%ratetrm(n) = ratetrm
510 idiag = this%dis%con%ia(n)
511 this%flowja(idiag) = this%flowja(idiag) + ratesto
514 call particle%destroy()
515 deallocate (particle)
525 subroutine prt_bd(this, icnvg, isuppress_output)
531 integer(I4B),
intent(in) :: icnvg
532 integer(I4B),
intent(in) :: isuppress_output
535 class(
bndtype),
pointer :: packobj
543 call this%budget%reset()
546 call this%budget%addentry(rin, rout,
delt,
budtxt(1), &
547 isuppress_output,
' PRT')
550 call this%budget%addentry(rin, rout,
delt,
budtxt(2), &
551 isuppress_output,
' PRT')
553 do ip = 1, this%bndlist%Count()
555 call packobj%bnd_bd(this%budget)
565 integer(I4B) :: idvsave
566 integer(I4B) :: idvprint
567 integer(I4B) :: icbcfl
568 integer(I4B) :: icbcun
569 integer(I4B) :: ibudfl
570 integer(I4B) :: ipflag
579 if (this%oc%oc_save(
'CONCENTRATION')) idvsave = 1
580 if (this%oc%oc_print(
'CONCENTRATION')) idvprint = 1
581 if (this%oc%oc_save(
'BUDGET')) icbcfl = 1
582 if (this%oc%oc_print(
'BUDGET')) ibudfl = 1
583 icbcun = this%oc%oc_save_unit(
'BUDGET')
587 ibudfl = this%oc%set_print_flag(
'BUDGET', 1,
endofperiod)
588 idvprint = this%oc%set_print_flag(
'CONCENTRATION', 1,
endofperiod)
591 call this%prt_ot_flow(icbcfl, ibudfl, icbcun)
594 call this%prt_ot_dv(idvsave, idvprint, ipflag)
597 call this%prt_ot_bdsummary(ibudfl, ipflag)
601 if (ipflag == 1)
call tdis_ot(this%iout)
608 integer(I4B),
intent(in) :: icbcfl
609 integer(I4B),
intent(in) :: ibudfl
610 integer(I4B),
intent(in) :: icbcun
611 class(
bndtype),
pointer :: packobj
615 call this%prt_ot_saveflow(this%dis%nja, this%flowja, icbcfl, icbcun)
616 do ip = 1, this%bndlist%Count()
618 call packobj%bnd_ot_model_flows(icbcfl=icbcfl, ibudfl=0, icbcun=icbcun)
622 do ip = 1, this%bndlist%Count()
624 call packobj%bnd_ot_package_flows(icbcfl=icbcfl, ibudfl=0)
628 call this%prt_ot_printflow(ibudfl, this%flowja)
629 do ip = 1, this%bndlist%Count()
631 call packobj%bnd_ot_model_flows(icbcfl=icbcfl, ibudfl=ibudfl, icbcun=0)
635 do ip = 1, this%bndlist%Count()
637 call packobj%bnd_ot_package_flows(icbcfl=0, ibudfl=ibudfl)
645 integer(I4B),
intent(in) :: nja
646 real(DP),
dimension(nja),
intent(in) :: flowja
647 integer(I4B),
intent(in) :: icbcfl
648 integer(I4B),
intent(in) :: icbcun
650 integer(I4B) :: ibinun
652 real(DP),
dimension(0) :: auxrow
653 character(len=LENAUXNAME),
dimension(0) :: auxname
654 logical(LGP) :: header_written
655 integer(I4B) :: i, nn
657 integer(I4B) :: nsto, ntrm
658 logical(LGP),
allocatable :: msto_mask(:), mtrm_mask(:)
659 integer(I4B),
allocatable :: msto_nns(:), mtrm_nns(:)
660 real(DP),
allocatable :: msto_vals(:), mtrm_vals(:)
663 if (this%ipakcb < 0)
then
665 elseif (this%ipakcb == 0)
then
670 if (icbcfl == 0) ibinun = 0
673 if (ibinun == 0)
return
676 call this%dis%record_connection_array(flowja, ibinun, this%iout)
680 header_written = .false.
681 msto_mask = this%masssto >
dzero
682 msto_vals = pack(this%masssto, msto_mask)
683 msto_nns = [(i, i=1,
size(this%masssto))]
684 msto_nns = pack(msto_nns, msto_mask)
685 nsto =
size(msto_nns)
689 if (.not. header_written)
then
690 call this%dis%record_srcdst_list_header(
budtxt(1), &
695 naux, auxname, ibinun, &
697 header_written = .true.
699 call this%dis%record_mf6_list_entry(ibinun, nn, nn, m, &
705 header_written = .false.
706 mtrm_mask = this%masstrm >
dzero
707 mtrm_vals = pack(this%masstrm, mtrm_mask)
708 mtrm_nns = [(i, i=1,
size(this%masstrm))]
709 mtrm_nns = pack(mtrm_nns, mtrm_mask)
710 ntrm =
size(mtrm_nns)
714 if (.not. header_written)
then
715 call this%dis%record_srcdst_list_header(
budtxt(2), &
720 naux, auxname, ibinun, &
722 header_written = .true.
724 call this%dis%record_mf6_list_entry(ibinun, nn, nn, m, &
738 integer(I4B),
intent(in) :: ibudfl
739 real(DP),
intent(inout),
dimension(:) :: flowja
741 character(len=LENBIGLINE) :: line
742 character(len=30) :: tempstr
743 integer(I4B) :: n, ipos, m
746 character(len=*),
parameter :: fmtiprflow = &
747 "(/,4x,'CALCULATED INTERCELL FLOW &
748 &FOR PERIOD ', i0, ' STEP ', i0)"
751 if (ibudfl /= 0 .and. this%iprflow > 0)
then
752 write (this%iout, fmtiprflow)
kper,
kstp
753 do n = 1, this%dis%nodes
755 call this%dis%noder_to_string(n, tempstr)
756 line = trim(tempstr)//
':'
757 do ipos = this%dis%con%ia(n) + 1, this%dis%con%ia(n + 1) - 1
758 m = this%dis%con%ja(ipos)
759 call this%dis%noder_to_string(m, tempstr)
760 line = trim(line)//
' '//trim(tempstr)
762 write (tempstr,
'(1pg15.6)') qnm
763 line = trim(line)//
' '//trim(adjustl(tempstr))
765 write (this%iout,
'(a)') trim(line)
774 integer(I4B),
intent(in) :: idvsave
775 integer(I4B),
intent(in) :: idvprint
776 integer(I4B),
intent(inout) :: ipflag
778 class(
bndtype),
pointer :: packobj
782 do ip = 1, this%bndlist%Count()
784 call packobj%bnd_ot_dv(idvsave, idvprint)
788 call this%oc%oc_ot(ipflag)
797 integer(I4B),
intent(in) :: ibudfl
798 integer(I4B),
intent(inout) :: ipflag
800 class(
bndtype),
pointer :: packobj
804 do ip = 1, this%bndlist%Count()
806 call packobj%bnd_ot_bdsummary(
kstp,
kper, this%iout, ibudfl)
810 call this%budget%finalize_step(
delt)
811 if (ibudfl /= 0)
then
814 call this%budget%budget_ot(
kstp,
kper, this%iout)
818 call this%budget%writecsv(
totim)
834 class(
bndtype),
pointer :: packobj
841 call this%dis%dis_da()
842 call this%fmi%fmi_da()
843 call this%mip%mip_da()
844 call this%budget%budget_da()
846 deallocate (this%dis)
847 deallocate (this%fmi)
848 deallocate (this%mip)
849 deallocate (this%budget)
858 do ip = 1, this%bndlist%Count()
860 call packobj%bnd_da()
881 call this%tracks%destroy()
882 deallocate (this%events)
883 deallocate (this%tracks)
885 call this%ExplicitModelType%model_da()
892 character(len=*),
intent(in) :: modelname
895 call this%ExplicitModelType%allocate_scalars(modelname)
924 call this%ExplicitModelType%allocate_arrays()
928 'MASSSTO', this%memoryPath)
930 'MASSSTOOLD', this%memoryPath)
932 'RATESTO', this%memoryPath)
934 'MASSTRM', this%memoryPath)
936 'RATETRM', this%memoryPath)
937 do n = 1, this%dis%nodes
938 this%masssto(n) =
dzero
939 this%massstoold(n) =
dzero
940 this%ratesto(n) =
dzero
941 this%masstrm(n) =
dzero
942 this%ratetrm(n) =
dzero
955 character(len=*),
intent(in) :: filtyp
956 character(len=LINELENGTH) :: errmsg
957 integer(I4B),
intent(in) :: ipakid
958 integer(I4B),
intent(in) :: ipaknum
959 character(len=*),
intent(in) :: pakname
960 character(len=*),
intent(in) :: mempath
961 integer(I4B),
intent(in) :: inunit
962 integer(I4B),
intent(in) :: iout
964 class(
bndtype),
pointer :: packobj
965 class(
bndtype),
pointer :: packobj2
971 call prp_create(packobj, ipakid, ipaknum, inunit, iout, &
972 this%name, pakname, mempath, this%fmi)
974 call api_create(packobj, ipakid, ipaknum, inunit, iout, &
975 this%name, pakname, mempath)
977 write (errmsg, *)
'Invalid package type: ', filtyp
984 do ip = 1, this%bndlist%Count()
986 if (packobj2%packName == pakname)
then
987 write (errmsg,
'(a,a)')
'Cannot create package. Package name '// &
988 'already exists: ', trim(pakname)
999 integer(I4B),
intent(in) :: indis
1001 character(len=LINELENGTH) :: errmsg
1004 if (indis == 0)
then
1005 write (errmsg,
'(1x,a)') &
1006 'Discretization (DIS6, DISV6, or DISU6) package not specified.'
1009 if (this%inmip == 0)
then
1010 write (errmsg,
'(1x,a)') &
1011 'Model input (MIP6) package not specified.'
1016 write (errmsg,
'(1x,a)')
'One or more required package(s) not specified.'
1031 integer(I4B) :: np, ip
1032 class(
bndtype),
pointer :: packobj
1035 integer(I4B) :: iprp
1040 call create_particle(particle)
1043 do ip = 1, this%bndlist%Count()
1045 select type (packobj)
1048 do np = 1, packobj%nparticles
1050 call packobj%particles%get(particle, this%id, iprp, np)
1060 call packobj%particles%put(particle, np)
1062 if (particle%istatus >
active) cycle
1063 particle%istatus =
active
1065 if (particle%trelease >=
totimc)
call this%method%release(particle)
1071 tmax = particle%tstop
1076 call this%method%apply(particle, tmax)
1085 if (particle%istatus <=
active .and. &
1087 call this%method%terminate(particle, status=
term_timeout)
1089 call packobj%particles%put(particle, np)
1093 call particle%destroy()
1094 deallocate (particle)
1105 integer(I4B),
dimension(:),
allocatable,
intent(inout) :: bndpkgs
1107 pointer,
intent(inout) :: pkgtypes
1109 pointer,
intent(inout) :: pkgnames
1111 pointer,
intent(inout) :: mempaths
1112 integer(I4B),
dimension(:),
contiguous, &
1113 pointer,
intent(inout) :: inunits
1115 integer(I4B) :: ipakid, ipaknum
1116 character(len=LENFTYPE) :: pkgtype, bndptype
1117 character(len=LENPACKAGENAME) :: pkgname
1118 character(len=LENMEMPATH) :: mempath
1119 integer(I4B),
pointer :: inunit
1122 if (
allocated(bndpkgs))
then
1126 do n = 1,
size(bndpkgs)
1127 pkgtype = pkgtypes(bndpkgs(n))
1128 pkgname = pkgnames(bndpkgs(n))
1129 mempath = mempaths(bndpkgs(n))
1130 inunit => inunits(bndpkgs(n))
1132 if (bndptype /= pkgtype)
then
1137 call this%package_create(pkgtype, ipakid, ipaknum, pkgname, mempath, &
1140 ipaknum = ipaknum + 1
1144 deallocate (bndpkgs)
1169 pointer :: pkgtypes => null()
1171 pointer :: pkgnames => null()
1173 pointer :: mempaths => null()
1174 integer(I4B),
dimension(:),
contiguous, &
1175 pointer :: inunits => null()
1176 character(len=LENMEMPATH) :: model_mempath
1177 character(len=LENFTYPE) :: pkgtype
1178 character(len=LENPACKAGENAME) :: pkgname
1179 character(len=LENMEMPATH) :: mempath
1180 integer(I4B),
pointer :: inunit
1181 integer(I4B),
dimension(:),
allocatable :: bndpkgs
1183 integer(I4B) :: indis = 0
1184 character(len=LENMEMPATH) :: mempathmip =
''
1185 character(len=LENMEMPATH) :: mempathfmi =
''
1186 character(len=LENMEMPATH) :: mempathoc =
''
1192 call mem_setptr(pkgtypes,
'PKGTYPES', model_mempath)
1193 call mem_setptr(pkgnames,
'PKGNAMES', model_mempath)
1194 call mem_setptr(mempaths,
'MEMPATHS', model_mempath)
1195 call mem_setptr(inunits,
'INUNITS', model_mempath)
1197 do n = 1,
size(pkgtypes)
1199 pkgtype = pkgtypes(n)
1200 pkgname = pkgnames(n)
1201 mempath = mempaths(n)
1202 inunit => inunits(n)
1205 select case (pkgtype)
1208 call dis_cr(this%dis, this%name, mempath, indis, this%iout)
1211 call disv_cr(this%dis, this%name, mempath, indis, this%iout)
1214 call disu_cr(this%dis, this%name, mempath, indis, this%iout)
1217 mempathmip = mempath
1220 mempathfmi = mempath
1226 bndpkgs(
size(bndpkgs)) = n
1228 call pstop(1,
"Unrecognized package type: "//pkgtype)
1241 call mip_cr(this%mip, this%name, mempathmip, this%inmip, this%iout, this%dis)
1242 call fmi_cr(this%fmi, this%name, mempathfmi, this%infmi, this%iout)
1243 call oc_cr(this%oc, this%name, mempathoc, this%inoc, this%iout)
1246 call this%ftype_check(indis)
1249 call this%create_bndpkgs(bndpkgs, pkgtypes, pkgnames, mempaths, inunits)
1258 write (this%iout,
'(1x,a)')
'NAMEFILE OPTIONS:'
1260 if (found%print_input)
then
1261 write (this%iout,
'(4x,a)')
'STRESS PACKAGE INPUT WILL BE PRINTED '// &
1262 'FOR ALL MODEL STRESS PACKAGES'
1265 if (found%print_flows)
then
1266 write (this%iout,
'(4x,a)')
'PACKAGE FLOWS WILL BE PRINTED '// &
1267 'FOR ALL MODEL PACKAGES'
1270 if (found%save_flows)
then
1271 write (this%iout,
'(4x,a)') &
1272 'FLOWS WILL BE SAVED TO BUDGET FILE SPECIFIED IN OUTPUT CONTROL'
1275 write (this%iout,
'(1x,a)')
'END NAMEFILE OPTIONS:'
Event handler interface. Handlers may signal to the dispatching caller whether they have handled the ...
This module contains the API package methods.
subroutine, public api_create(packobj, id, ibcnum, inunit, iout, namemodel, pakname, mempath)
@ brief Create a new package object
subroutine, public addbasemodeltolist(list, model)
This module contains the base boundary package.
subroutine, public addbndtolist(list, bnd)
Add boundary to package list.
class(bndtype) function, pointer, public getbndfromlist(list, idx)
Get boundary from package list.
This module contains the BudgetModule.
subroutine, public budget_cr(this, name_model)
@ brief Create a new budget object
subroutine, public rate_accumulator(flow, rin, rout)
@ brief Rate accumulator subroutine
This module contains simulation constants.
integer(i4b), parameter linelength
maximum length of a standard line
@ mnormal
normal output mode
integer(i4b), parameter lenpackagename
maximum length of the package name
integer(i4b), parameter lenpackagetype
maximum length of a package type (DIS6, SFR6, CSUB6, etc.)
integer(i4b), parameter lenbigline
maximum length of a big line
real(dp), parameter dhnoflo
real no flow constant
integer(i4b), parameter lenpakloc
maximum length of a package location
integer(i4b), parameter lenftype
maximum length of a package type (DIS, WEL, OC, etc.)
integer(i4b), parameter lenauxname
maximum length of a aux variable
real(dp), parameter dzero
real constant zero
integer(i4b), parameter lenbudtxt
maximum length of a budget component names
integer(i4b), parameter lenmempath
maximum length of the memory path
real(dp), parameter done
real constant 1
subroutine, public dis_cr(dis, name_model, input_mempath, inunit, iout)
Create a new structured discretization object.
subroutine, public disu_cr(dis, name_model, input_mempath, inunit, iout)
Create a new unstructured discretization object.
subroutine, public disv_cr(dis, name_model, input_mempath, inunit, iout)
Create a new discretization by vertices object.
subroutine pstop(status, message)
Stop the program, optionally specifying an error status code.
Models that solve themselves.
A chaining hash map for integers.
subroutine, public hash_table_cr(map)
Create a hash table.
subroutine, public hash_table_da(map)
Deallocate the hash table.
This module defines variable data types.
type(listtype), public basemodellist
character(len=lenmempath) function create_mem_path(component, subcomponent, context)
returns the path to the memory object
subroutine, public memorystore_remove(component, subcomponent, context)
Cell-level tracking methods.
subroutine, public create_method_cell_pool()
Create the cell method pool.
subroutine, public destroy_method_cell_pool()
Destroy the cell method pool.
Particle tracking strategies.
Model-level tracking methods.
type(methoddisvtype), pointer, public method_disv
type(methoddistype), pointer, public method_dis
subroutine, public create_method_pool()
Create the method pool.
subroutine, public destroy_method_pool()
Destroy the method pool.
Subcell-level tracking methods.
subroutine, public create_method_subcell_pool()
Create the subcell method pool.
subroutine, public destroy_method_subcell_pool()
Destroy the subcell method pool.
@, public release
particle was released
@, public terminate
particle terminated
@ term_timeout
terminated at stop time or end of simulation
@ term_unreleased
terminated permanently unreleased
subroutine create_particle(particle)
Create a new particle.
Particle track output module.
logical(lgp) function, public write_particle_event(context, particle, event)
Write a particle event to files for which the particle is eligible, and print the event to output uni...
subroutine, public fmi_cr(fmiobj, name_model, input_mempath, inunit, iout)
Create a new PrtFmi object.
subroutine, public mip_cr(mip, name_model, input_mempath, inunit, iout, dis)
Create a model input object.
integer(i4b), parameter niunit_prt
subroutine prt_ot(this)
Print and/or save model output.
subroutine prt_rp(this)
Read and prepare (calls package read and prepare routines)
subroutine create_bndpkgs(this, bndpkgs, pkgtypes, pkgnames, mempaths, inunits)
Source package info and begin to process.
subroutine prt_ar(this)
Allocate and read.
subroutine ftype_check(this, indis)
Check to make sure required input files have been specified.
subroutine prt_ot_saveflow(this, nja, flowja, icbcfl, icbcun)
Save intercell flows.
subroutine prt_ad(this)
Time step advance (calls package advance subroutines)
subroutine prt_cq(this, icnvg, isuppress_output)
Calculate intercell flow (flowja)
subroutine package_create(this, filtyp, ipakid, ipaknum, pakname, mempath, inunit, iout)
Create boundary condition packages for this model.
subroutine prt_ot_flow(this, icbcfl, ibudfl, icbcun)
Save flows.
subroutine allocate_scalars(this, modelname)
Allocate memory for scalars.
subroutine prt_ot_bdsummary(this, ibudfl, ipflag)
Print budget summary.
character(len=lenpackagetype), dimension(prt_nmultipkg), public prt_multipkg
subroutine create_packages(this)
Source package info and begin to process.
character(len=lenpackagetype), dimension(prt_nbasepkg), public prt_basepkg
integer(i4b), parameter, public prt_nmultipkg
PRT multi package array descriptors.
character(len=lenbudtxt), dimension(nbditems) budtxt
subroutine prt_da(this)
Deallocate.
subroutine, public prt_cr(filename, id, modelname)
Create a new particle tracking model object.
subroutine prt_ot_printflow(this, ibudfl, flowja)
Print intercell flows.
subroutine prt_bd(this, icnvg, isuppress_output)
Calculate flows and budget.
subroutine prt_df(this)
Define packages.
integer(i4b), parameter, public prt_nbasepkg
PRT base package array descriptors.
integer(i4b), parameter nbditems
subroutine allocate_arrays(this)
Allocate arrays.
subroutine log_namfile_options(this, found)
Write model namfile options to list file.
subroutine prt_cq_budterms(this)
Calculate particle mass budget terms.
subroutine prt_ot_dv(this, idvsave, idvprint, ipflag)
Print dependent variables.
subroutine prt_solve(this)
Solve the model.
subroutine, public oc_cr(ocobj, name_model, input_mempath, inunit, iout)
@ brief Create an output control object
subroutine, public prp_create(packobj, id, ibcnum, inunit, iout, namemodel, pakname, input_mempath, fmi)
Create a new particle release point package.
This module contains simulation methods.
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=linelength) idm_context
integer(i4b) isimcheck
simulation input check flag (1) to check input, (0) to ignore checks
integer(i4b) ifailedstepretry
current retry for this time step
subroutine csr_diagsum(ia, flowja)
logical(lgp), pointer, public endofperiod
flag indicating end of stress period
logical(lgp), pointer, public endofsimulation
flag indicating end of simulation
subroutine, public tdis_ot(iout)
Print simulation time.
real(dp), pointer, public totim
time relative to start of simulation
logical(lgp), pointer, public readnewdata
flag indicating time to read new data
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
This module contains version information.
subroutine write_listfile_header(iout, cmodel_type, write_sys_command, write_kind_info)
@ brief Write program header
Highest level model type. All models extend this parent type.
Derived type for the Budget object.
This class is used to store a single deferred-length character string. It was designed to work in an ...
Structured grid discretization.
Unstructured grid discretization.
Vertex grid discretization.
Base type for models that solve themselves.
A generic heterogeneous doubly-linked list.
Base type for particle tracking methods.
Dispatcher for particle events. Consumers subscribe handlers to the dispatcher. Events may be dispatc...
Particle tracked by the PRT model.
Output file containing all or some particle pathlines.
Particle track output manager. Handles printing as well as writing to files. One output unit can be c...
Particle tracking (PRT) model.
@ brief Output control for particle tracking models
Particle release point (PRP) package.