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
253 call this%fmi%fmi_ar(this%ibound)
254 if (this%inmip > 0)
call this%mip%mip_ar()
257 call this%oc%oc_ar(this%dis,
dhnoflo)
258 call this%budget%set_ibudcsv(this%oc%ibudcsv)
261 call this%tracks%select_events( &
262 this%oc%trackrelease, &
263 this%oc%trackfeatexit, &
264 this%oc%tracktimestep, &
265 this%oc%trackterminate, &
266 this%oc%trackweaksink, &
267 this%oc%trackusertime, &
268 this%oc%tracksubfexit, &
269 this%oc%trackdropped)
273 do ip = 1, this%bndlist%Count()
275 select type (packobj)
278 call packobj%prp_set_pointers(this%ibound, this%mip%izone)
279 call packobj%bnd_ar()
280 call packobj%bnd_ar()
281 if (packobj%itrkout > 0)
then
282 call this%tracks%init_file( &
286 if (packobj%itrkcsv > 0)
then
287 call this%tracks%init_file( &
293 call packobj%bnd_ar()
298 if (this%oc%itrkout > 0) &
299 call this%tracks%init_file(this%oc%itrkout)
300 if (this%oc%itrkcsv > 0) &
301 call this%tracks%init_file(this%oc%itrkcsv, csv=.true.)
304 select type (dis => this%dis)
308 events=this%events, &
309 izone=this%mip%izone, &
310 flowja=this%flowja, &
311 porosity=this%mip%porosity, &
312 retfactor=this%mip%retfactor, &
313 tracktimes=this%oc%tracktimes)
318 events=this%events, &
319 izone=this%mip%izone, &
320 flowja=this%flowja, &
321 porosity=this%mip%porosity, &
322 retfactor=this%mip%retfactor, &
323 tracktimes=this%oc%tracktimes)
328 call this%events%subscribe(this%tracks)
331 if (this%oc%dump_event_trace) this%tracks%iout = 0
340 class(
bndtype),
pointer :: packobj
347 if (this%inoc > 0)
call this%oc%oc_rp()
348 do ip = 1, this%bndlist%Count()
350 call packobj%bnd_rp()
360 class(
bndtype),
pointer :: packobj
362 integer(I4B) :: irestore
363 integer(I4B) :: ip, n, i
370 do n = 1, this%dis%nodes
371 this%massstoold(n) = this%masssto(n)
375 call this%fmi%fmi_ad()
378 do ip = 1, this%bndlist%Count()
380 call packobj%bnd_ad()
382 call packobj%bnd_ck()
392 do i = 1, this%dis%nja
393 this%flowja(i) =
dzero
398 subroutine prt_cq(this, icnvg, isuppress_output)
405 integer(I4B),
intent(in) :: icnvg
406 integer(I4B),
intent(in) :: isuppress_output
410 class(
bndtype),
pointer :: packobj
424 do i = 1, this%dis%nja
425 this%flowja(i) = this%flowja(i) * tled
429 call this%prt_cq_budterms()
432 do ip = 1, this%bndlist%Count()
434 call packobj%bnd_cq(this%masssto, this%flowja)
452 class(
bndtype),
pointer :: packobj
455 integer(I4B) :: idiag
457 integer(I4B) :: istatus
459 real(DP) :: ratesto, ratetrm
460 character(len=:),
allocatable :: particle_id
469 do n = 1, this%dis%nodes
470 this%masssto(n) =
dzero
471 this%masstrm(n) =
dzero
472 this%ratesto(n) =
dzero
473 this%ratetrm(n) =
dzero
479 do ip = 1, this%bndlist%Count()
481 select type (packobj)
483 do np = 1, packobj%nparticles
484 call packobj%particles%get(particle, this%id, iprp, np)
485 istatus = packobj%particles%istatus(np)
486 particle_id = particle%get_id()
487 if (istatus ==
active)
then
490 this%masssto(n) = this%masssto(n) +
done
491 else if (istatus >
active)
then
492 if (this%trm_ids%get(particle_id) /= 0) cycle
495 this%masstrm(n) = this%masstrm(n) +
done
496 call this%trm_ids%add(particle_id, 1)
503 do n = 1, this%dis%nodes
504 ratesto = -(this%masssto(n) - this%massstoold(n)) * tled
505 ratetrm = -this%masstrm(n) * tled
506 this%ratesto(n) = ratesto
507 this%ratetrm(n) = ratetrm
508 idiag = this%dis%con%ia(n)
509 this%flowja(idiag) = this%flowja(idiag) + ratesto
512 call particle%destroy()
513 deallocate (particle)
523 subroutine prt_bd(this, icnvg, isuppress_output)
529 integer(I4B),
intent(in) :: icnvg
530 integer(I4B),
intent(in) :: isuppress_output
533 class(
bndtype),
pointer :: packobj
541 call this%budget%reset()
544 call this%budget%addentry(rin, rout,
delt,
budtxt(1), &
545 isuppress_output,
' PRT')
548 call this%budget%addentry(rin, rout,
delt,
budtxt(2), &
549 isuppress_output,
' PRT')
551 do ip = 1, this%bndlist%Count()
553 call packobj%bnd_bd(this%budget)
563 integer(I4B) :: idvsave
564 integer(I4B) :: idvprint
565 integer(I4B) :: icbcfl
566 integer(I4B) :: icbcun
567 integer(I4B) :: ibudfl
568 integer(I4B) :: ipflag
577 if (this%oc%oc_save(
'CONCENTRATION')) idvsave = 1
578 if (this%oc%oc_print(
'CONCENTRATION')) idvprint = 1
579 if (this%oc%oc_save(
'BUDGET')) icbcfl = 1
580 if (this%oc%oc_print(
'BUDGET')) ibudfl = 1
581 icbcun = this%oc%oc_save_unit(
'BUDGET')
585 ibudfl = this%oc%set_print_flag(
'BUDGET', 1,
endofperiod)
586 idvprint = this%oc%set_print_flag(
'CONCENTRATION', 1,
endofperiod)
589 call this%prt_ot_flow(icbcfl, ibudfl, icbcun)
592 call this%prt_ot_dv(idvsave, idvprint, ipflag)
595 call this%prt_ot_bdsummary(ibudfl, ipflag)
599 if (ipflag == 1)
call tdis_ot(this%iout)
606 integer(I4B),
intent(in) :: icbcfl
607 integer(I4B),
intent(in) :: ibudfl
608 integer(I4B),
intent(in) :: icbcun
609 class(
bndtype),
pointer :: packobj
613 call this%prt_ot_saveflow(this%dis%nja, this%flowja, icbcfl, icbcun)
614 do ip = 1, this%bndlist%Count()
616 call packobj%bnd_ot_model_flows(icbcfl=icbcfl, ibudfl=0, icbcun=icbcun)
620 do ip = 1, this%bndlist%Count()
622 call packobj%bnd_ot_package_flows(icbcfl=icbcfl, ibudfl=0)
626 call this%prt_ot_printflow(ibudfl, this%flowja)
627 do ip = 1, this%bndlist%Count()
629 call packobj%bnd_ot_model_flows(icbcfl=icbcfl, ibudfl=ibudfl, icbcun=0)
633 do ip = 1, this%bndlist%Count()
635 call packobj%bnd_ot_package_flows(icbcfl=0, ibudfl=ibudfl)
643 integer(I4B),
intent(in) :: nja
644 real(DP),
dimension(nja),
intent(in) :: flowja
645 integer(I4B),
intent(in) :: icbcfl
646 integer(I4B),
intent(in) :: icbcun
648 integer(I4B) :: ibinun
650 real(DP),
dimension(0) :: auxrow
651 character(len=LENAUXNAME),
dimension(0) :: auxname
652 logical(LGP) :: header_written
653 integer(I4B) :: i, nn
655 integer(I4B) :: nsto, ntrm
656 logical(LGP),
allocatable :: msto_mask(:), mtrm_mask(:)
657 integer(I4B),
allocatable :: msto_nns(:), mtrm_nns(:)
658 real(DP),
allocatable :: msto_vals(:), mtrm_vals(:)
661 if (this%ipakcb < 0)
then
663 elseif (this%ipakcb == 0)
then
668 if (icbcfl == 0) ibinun = 0
671 if (ibinun == 0)
return
674 call this%dis%record_connection_array(flowja, ibinun, this%iout)
678 header_written = .false.
679 msto_mask = this%masssto >
dzero
680 msto_vals = pack(this%masssto, msto_mask)
681 msto_nns = [(i, i=1,
size(this%masssto))]
682 msto_nns = pack(msto_nns, msto_mask)
683 nsto =
size(msto_nns)
687 if (.not. header_written)
then
688 call this%dis%record_srcdst_list_header(
budtxt(1), &
693 naux, auxname, ibinun, &
695 header_written = .true.
697 call this%dis%record_mf6_list_entry(ibinun, nn, nn, m, &
703 header_written = .false.
704 mtrm_mask = this%masstrm >
dzero
705 mtrm_vals = pack(this%masstrm, mtrm_mask)
706 mtrm_nns = [(i, i=1,
size(this%masstrm))]
707 mtrm_nns = pack(mtrm_nns, mtrm_mask)
708 ntrm =
size(mtrm_nns)
712 if (.not. header_written)
then
713 call this%dis%record_srcdst_list_header(
budtxt(2), &
718 naux, auxname, ibinun, &
720 header_written = .true.
722 call this%dis%record_mf6_list_entry(ibinun, nn, nn, m, &
736 integer(I4B),
intent(in) :: ibudfl
737 real(DP),
intent(inout),
dimension(:) :: flowja
739 character(len=LENBIGLINE) :: line
740 character(len=30) :: tempstr
741 integer(I4B) :: n, ipos, m
744 character(len=*),
parameter :: fmtiprflow = &
745 "(/,4x,'CALCULATED INTERCELL FLOW &
746 &FOR PERIOD ', i0, ' STEP ', i0)"
749 if (ibudfl /= 0 .and. this%iprflow > 0)
then
750 write (this%iout, fmtiprflow)
kper,
kstp
751 do n = 1, this%dis%nodes
753 call this%dis%noder_to_string(n, tempstr)
754 line = trim(tempstr)//
':'
755 do ipos = this%dis%con%ia(n) + 1, this%dis%con%ia(n + 1) - 1
756 m = this%dis%con%ja(ipos)
757 call this%dis%noder_to_string(m, tempstr)
758 line = trim(line)//
' '//trim(tempstr)
760 write (tempstr,
'(1pg15.6)') qnm
761 line = trim(line)//
' '//trim(adjustl(tempstr))
763 write (this%iout,
'(a)') trim(line)
772 integer(I4B),
intent(in) :: idvsave
773 integer(I4B),
intent(in) :: idvprint
774 integer(I4B),
intent(inout) :: ipflag
776 class(
bndtype),
pointer :: packobj
780 do ip = 1, this%bndlist%Count()
782 call packobj%bnd_ot_dv(idvsave, idvprint)
786 call this%oc%oc_ot(ipflag)
795 integer(I4B),
intent(in) :: ibudfl
796 integer(I4B),
intent(inout) :: ipflag
798 class(
bndtype),
pointer :: packobj
802 do ip = 1, this%bndlist%Count()
804 call packobj%bnd_ot_bdsummary(
kstp,
kper, this%iout, ibudfl)
808 call this%budget%finalize_step(
delt)
809 if (ibudfl /= 0)
then
812 call this%budget%budget_ot(
kstp,
kper, this%iout)
816 call this%budget%writecsv(
totim)
832 class(
bndtype),
pointer :: packobj
839 call this%dis%dis_da()
840 call this%fmi%fmi_da()
841 call this%mip%mip_da()
842 call this%budget%budget_da()
844 deallocate (this%dis)
845 deallocate (this%fmi)
846 deallocate (this%mip)
847 deallocate (this%budget)
856 do ip = 1, this%bndlist%Count()
858 call packobj%bnd_da()
879 call this%tracks%destroy()
880 deallocate (this%events)
881 deallocate (this%tracks)
883 call this%NumericalModelType%model_da()
890 character(len=*),
intent(in) :: modelname
893 call this%NumericalModelType%allocate_scalars(modelname)
922 this%nja = this%dis%nja
923 call this%NumericalModelType%allocate_arrays()
927 'MASSSTO', this%memoryPath)
929 'MASSSTOOLD', this%memoryPath)
931 'RATESTO', this%memoryPath)
933 'MASSTRM', this%memoryPath)
935 'RATETRM', this%memoryPath)
937 call mem_allocate(this%x, this%dis%nodes,
'X', this%memoryPath)
938 call mem_allocate(this%rhs, this%dis%nodes,
'RHS', this%memoryPath)
939 call mem_allocate(this%ibound, this%dis%nodes,
'IBOUND', this%memoryPath)
940 do n = 1, this%dis%nodes
941 this%masssto(n) =
dzero
942 this%massstoold(n) =
dzero
943 this%ratesto(n) =
dzero
944 this%masstrm(n) =
dzero
945 this%ratetrm(n) =
dzero
961 character(len=*),
intent(in) :: filtyp
962 character(len=LINELENGTH) :: errmsg
963 integer(I4B),
intent(in) :: ipakid
964 integer(I4B),
intent(in) :: ipaknum
965 character(len=*),
intent(in) :: pakname
966 character(len=*),
intent(in) :: mempath
967 integer(I4B),
intent(in) :: inunit
968 integer(I4B),
intent(in) :: iout
970 class(
bndtype),
pointer :: packobj
971 class(
bndtype),
pointer :: packobj2
977 call prp_create(packobj, ipakid, ipaknum, inunit, iout, &
978 this%name, pakname, mempath, this%fmi)
980 call api_create(packobj, ipakid, ipaknum, inunit, iout, &
981 this%name, pakname, mempath)
983 write (errmsg, *)
'Invalid package type: ', filtyp
990 do ip = 1, this%bndlist%Count()
992 if (packobj2%packName == pakname)
then
993 write (errmsg,
'(a,a)')
'Cannot create package. Package name '// &
994 'already exists: ', trim(pakname)
1005 integer(I4B),
intent(in) :: indis
1007 character(len=LINELENGTH) :: errmsg
1010 if (indis == 0)
then
1011 write (errmsg,
'(1x,a)') &
1012 'Discretization (DIS6, DISV6, or DISU6) package not specified.'
1015 if (this%inmip == 0)
then
1016 write (errmsg,
'(1x,a)') &
1017 'Model input (MIP6) package not specified.'
1022 write (errmsg,
'(1x,a)')
'One or more required package(s) not specified.'
1037 integer(I4B) :: np, ip
1038 class(
bndtype),
pointer :: packobj
1041 integer(I4B) :: iprp
1046 call create_particle(particle)
1049 do ip = 1, this%bndlist%Count()
1051 select type (packobj)
1054 do np = 1, packobj%nparticles
1056 call packobj%particles%get(particle, this%id, iprp, np)
1066 call packobj%particles%put(particle, np)
1068 if (particle%istatus >
active) cycle
1069 particle%istatus =
active
1071 if (particle%trelease >=
totimc)
call this%method%release(particle)
1077 tmax = particle%tstop
1082 call this%method%apply(particle, tmax)
1091 if (particle%istatus <=
active .and. &
1092 (particle%ttrack == particle%tstop .or. &
1094 call this%method%terminate(particle, status=
term_timeout)
1096 call packobj%particles%put(particle, np)
1100 call particle%destroy()
1101 deallocate (particle)
1112 integer(I4B),
dimension(:),
allocatable,
intent(inout) :: bndpkgs
1114 pointer,
intent(inout) :: pkgtypes
1116 pointer,
intent(inout) :: pkgnames
1118 pointer,
intent(inout) :: mempaths
1119 integer(I4B),
dimension(:),
contiguous, &
1120 pointer,
intent(inout) :: inunits
1122 integer(I4B) :: ipakid, ipaknum
1123 character(len=LENFTYPE) :: pkgtype, bndptype
1124 character(len=LENPACKAGENAME) :: pkgname
1125 character(len=LENMEMPATH) :: mempath
1126 integer(I4B),
pointer :: inunit
1129 if (
allocated(bndpkgs))
then
1133 do n = 1,
size(bndpkgs)
1134 pkgtype = pkgtypes(bndpkgs(n))
1135 pkgname = pkgnames(bndpkgs(n))
1136 mempath = mempaths(bndpkgs(n))
1137 inunit => inunits(bndpkgs(n))
1139 if (bndptype /= pkgtype)
then
1144 call this%package_create(pkgtype, ipakid, ipaknum, pkgname, mempath, &
1147 ipaknum = ipaknum + 1
1151 deallocate (bndpkgs)
1176 pointer :: pkgtypes => null()
1178 pointer :: pkgnames => null()
1180 pointer :: mempaths => null()
1181 integer(I4B),
dimension(:),
contiguous, &
1182 pointer :: inunits => null()
1183 character(len=LENMEMPATH) :: model_mempath
1184 character(len=LENFTYPE) :: pkgtype
1185 character(len=LENPACKAGENAME) :: pkgname
1186 character(len=LENMEMPATH) :: mempath
1187 integer(I4B),
pointer :: inunit
1188 integer(I4B),
dimension(:),
allocatable :: bndpkgs
1190 integer(I4B) :: indis = 0
1191 character(len=LENMEMPATH) :: mempathmip =
''
1192 character(len=LENMEMPATH) :: mempathfmi =
''
1193 character(len=LENMEMPATH) :: mempathoc =
''
1199 call mem_setptr(pkgtypes,
'PKGTYPES', model_mempath)
1200 call mem_setptr(pkgnames,
'PKGNAMES', model_mempath)
1201 call mem_setptr(mempaths,
'MEMPATHS', model_mempath)
1202 call mem_setptr(inunits,
'INUNITS', model_mempath)
1204 do n = 1,
size(pkgtypes)
1206 pkgtype = pkgtypes(n)
1207 pkgname = pkgnames(n)
1208 mempath = mempaths(n)
1209 inunit => inunits(n)
1212 select case (pkgtype)
1215 call dis_cr(this%dis, this%name, mempath, indis, this%iout)
1218 call disv_cr(this%dis, this%name, mempath, indis, this%iout)
1221 call disu_cr(this%dis, this%name, mempath, indis, this%iout)
1224 mempathmip = mempath
1227 mempathfmi = mempath
1233 bndpkgs(
size(bndpkgs)) = n
1235 call pstop(1,
"Unrecognized package type: "//pkgtype)
1248 call mip_cr(this%mip, this%name, mempathmip, this%inmip, this%iout, this%dis)
1249 call fmi_cr(this%fmi, this%name, mempathfmi, this%infmi, this%iout)
1250 call oc_cr(this%oc, this%name, mempathoc, this%inoc, this%iout)
1253 call this%ftype_check(indis)
1256 call this%create_bndpkgs(bndpkgs, pkgtypes, pkgnames, mempaths, inunits)
1265 write (this%iout,
'(1x,a)')
'NAMEFILE OPTIONS:'
1267 if (found%print_input)
then
1268 write (this%iout,
'(4x,a)')
'STRESS PACKAGE INPUT WILL BE PRINTED '// &
1269 'FOR ALL MODEL STRESS PACKAGES'
1272 if (found%print_flows)
then
1273 write (this%iout,
'(4x,a)')
'PACKAGE FLOWS WILL BE PRINTED '// &
1274 'FOR ALL MODEL PACKAGES'
1277 if (found%save_flows)
then
1278 write (this%iout,
'(4x,a)') &
1279 'FLOWS WILL BE SAVED TO BUDGET FILE SPECIFIED IN OUTPUT CONTROL'
1282 write (this%iout,
'(1x,a)')
'END NAMEFILE OPTIONS:'
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.
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.
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.
A generic heterogeneous doubly-linked list.
Base type for particle tracking methods.
Particle tracked by the PRT model.
Output file containing all or some particle pathlines.
Manages particle track output (logging/writing).
Particle tracking (PRT) model.
@ brief Output control for particle tracking models
Particle release point (PRP) package.