MODFLOW 6  version 6.5.0.dev2
MODFLOW 6 Code Documentation
prtmodule Module Reference

Data Types

type  prtmodeltype
 Particle tracking (PRT) model. More...
 

Functions/Subroutines

subroutine, public prt_cr (filename, id, modelname)
 Create a new particle tracking model object. More...
 
subroutine prt_df (this)
 Define packages. More...
 
subroutine prt_ar (this)
 Allocate and read. More...
 
subroutine prt_rp (this)
 Read and prepare (calls package read and prepare routines) More...
 
subroutine prt_ad (this)
 Time step advance (calls package advance subroutines) More...
 
subroutine prt_cq (this, icnvg, isuppress_output)
 Calculate intercell flow (flowja) More...
 
subroutine prt_cq_sto (this)
 Calculate particle mass storage. More...
 
subroutine prt_bd (this, icnvg, isuppress_output)
 Calculate flows and budget. More...
 
subroutine prt_ot (this)
 Print and/or save model output. More...
 
subroutine prt_ot_obs (this)
 Calculate and save observations. More...
 
subroutine prt_ot_flow (this, icbcfl, ibudfl, icbcun)
 Save flows. More...
 
subroutine prt_ot_saveflow (this, nja, flowja, icbcfl, icbcun)
 Save intercell flows. More...
 
subroutine prt_ot_printflow (this, ibudfl, flowja)
 Print intercell flows. More...
 
subroutine prt_ot_dv (this, idvsave, idvprint, ipflag)
 Print dependent variables. More...
 
subroutine prt_ot_bdsummary (this, ibudfl, ipflag)
 Print budget summary. More...
 
subroutine prt_da (this)
 Deallocate. More...
 
subroutine allocate_scalars (this, modelname)
 Allocate memory for non-allocatable members. More...
 
subroutine allocate_arrays (this)
 Allocate arrays. More...
 
subroutine package_create (this, filtyp, ipakid, ipaknum, pakname, mempath, inunit, iout)
 Create boundary condition packages for this model. More...
 
subroutine ftype_check (this, indis)
 Check to make sure required input files have been specified. More...
 
subroutine prt_solve (this)
 Solve the model. More...
 
subroutine create_bndpkgs (this, bndpkgs, pkgtypes, pkgnames, mempaths, inunits)
 Source package info and begin to process. More...
 
subroutine create_packages (this)
 Source package info and begin to process. More...
 
subroutine log_namfile_options (this, found)
 Write model namfile options to list file. More...
 

Variables

integer(i4b), parameter nbditems = 1
 
character(len=lenbudtxt), dimension(nbditemsbudtxt
 
integer(i4b), parameter, public prt_nbasepkg = 50
 PRT base package array descriptors. More...
 
character(len=lenpackagetype), dimension(prt_nbasepkg), public prt_basepkg
 
integer(i4b), parameter, public prt_nmultipkg = 50
 PRT multi package array descriptors. More...
 
character(len=lenpackagetype), dimension(prt_nmultipkg), public prt_multipkg
 
integer(i4b), parameter niunit_prt = PRT_NBASEPKG + PRT_NMULTIPKG
 

Function/Subroutine Documentation

◆ allocate_arrays()

subroutine prtmodule::allocate_arrays ( class(prtmodeltype this)
private

Definition at line 822 of file prt.f90.

824  class(PrtModelType) :: this
825  integer(I4B) :: n
826 
827  ! -- Allocate arrays in parent type
828  this%nja = this%dis%nja
829  call this%NumericalModelType%allocate_arrays()
830 
831  ! -- Allocate and initialize arrays
832  call mem_allocate(this%masssto, this%dis%nodes, &
833  'MASSSTO', this%memoryPath)
834  call mem_allocate(this%massstoold, this%dis%nodes, &
835  'MASSSTOOLD', this%memoryPath)
836  call mem_allocate(this%ratesto, this%dis%nodes, &
837  'RATESTO', this%memoryPath)
838  ! -- explicit model, so these must be manually allocated
839  call mem_allocate(this%x, this%dis%nodes, 'X', this%memoryPath)
840  call mem_allocate(this%rhs, this%dis%nodes, 'RHS', this%memoryPath)
841  call mem_allocate(this%ibound, this%dis%nodes, 'IBOUND', this%memoryPath)
842  do n = 1, this%dis%nodes
843  this%masssto(n) = dzero
844  this%massstoold(n) = dzero
845  this%ratesto(n) = dzero
846  this%x(n) = dzero
847  this%rhs(n) = dzero
848  this%ibound(n) = 1
849  end do

◆ allocate_scalars()

subroutine prtmodule::allocate_scalars ( class(prtmodeltype this,
character(len=*), intent(in)  modelname 
)

Definition at line 789 of file prt.f90.

790  ! -- dummy
791  class(PrtModelType) :: this
792  character(len=*), intent(in) :: modelname
793 
794  ! -- allocate members from parent class
795  call this%NumericalModelType%allocate_scalars(modelname)
796 
797  ! -- allocate members that are part of model class
798  call mem_allocate(this%infmi, 'INFMI', this%memoryPath)
799  call mem_allocate(this%inmip, 'INMIP', this%memoryPath)
800  call mem_allocate(this%inmvt, 'INMVT', this%memoryPath)
801  call mem_allocate(this%inmst, 'INMST', this%memoryPath)
802  call mem_allocate(this%inadv, 'INADV', this%memoryPath)
803  call mem_allocate(this%indsp, 'INDSP', this%memoryPath)
804  call mem_allocate(this%inssm, 'INSSM', this%memoryPath)
805  call mem_allocate(this%inoc, 'INOC ', this%memoryPath)
806  call mem_allocate(this%inobs, 'INOBS', this%memoryPath)
807  call mem_allocate(this%nprp, 'NPRP', this%memoryPath) ! kluge?
808 
809  this%infmi = 0
810  this%inmip = 0
811  this%inmvt = 0
812  this%inmst = 0
813  this%inadv = 0
814  this%indsp = 0
815  this%inssm = 0
816  this%inoc = 0
817  this%inobs = 0
818  this%nprp = 0

◆ create_bndpkgs()

subroutine prtmodule::create_bndpkgs ( class(prtmodeltype this,
integer(i4b), dimension(:), intent(inout), allocatable  bndpkgs,
type(characterstringtype), dimension(:), intent(inout), pointer, contiguous  pkgtypes,
type(characterstringtype), dimension(:), intent(inout), pointer, contiguous  pkgnames,
type(characterstringtype), dimension(:), intent(inout), pointer, contiguous  mempaths,
integer(i4b), dimension(:), intent(inout), pointer, contiguous  inunits 
)

Definition at line 1008 of file prt.f90.

1010  ! -- modules
1013  ! -- dummy
1014  class(PrtModelType) :: this
1015  integer(I4B), dimension(:), allocatable, intent(inout) :: bndpkgs
1016  type(CharacterStringType), dimension(:), contiguous, &
1017  pointer, intent(inout) :: pkgtypes
1018  type(CharacterStringType), dimension(:), contiguous, &
1019  pointer, intent(inout) :: pkgnames
1020  type(CharacterStringType), dimension(:), contiguous, &
1021  pointer, intent(inout) :: mempaths
1022  integer(I4B), dimension(:), contiguous, &
1023  pointer, intent(inout) :: inunits
1024  ! -- local
1025  integer(I4B) :: ipakid, ipaknum
1026  character(len=LENFTYPE) :: pkgtype, bndptype
1027  character(len=LENPACKAGENAME) :: pkgname
1028  character(len=LENMEMPATH) :: mempath
1029  integer(I4B), pointer :: inunit
1030  integer(I4B) :: n
1031 
1032  if (allocated(bndpkgs)) then
1033  !
1034  ! -- create stress packages
1035  ipakid = 1
1036  bndptype = ''
1037  do n = 1, size(bndpkgs)
1038  !
1039  pkgtype = pkgtypes(bndpkgs(n))
1040  pkgname = pkgnames(bndpkgs(n))
1041  mempath = mempaths(bndpkgs(n))
1042  inunit => inunits(bndpkgs(n))
1043  !
1044  if (bndptype /= pkgtype) then
1045  ipaknum = 1
1046  bndptype = pkgtype
1047  end if
1048  !
1049  call this%package_create(pkgtype, ipakid, ipaknum, pkgname, mempath, &
1050  inunit, this%iout)
1051  ipakid = ipakid + 1
1052  ipaknum = ipaknum + 1
1053  end do
1054  !
1055  ! -- cleanup
1056  deallocate (bndpkgs)
1057  end if
1058 
This module contains simulation constants.
Definition: Constants.f90:9
integer(i4b), parameter linelength
maximum length of a standard line
Definition: Constants.f90:44
integer(i4b), parameter lenpackagename
maximum length of the package name
Definition: Constants.f90:22
This class is used to store a single deferred-length character string. It was designed to work in an ...
Definition: CharString.f90:23

◆ create_packages()

subroutine prtmodule::create_packages ( class(prtmodeltype this)

Definition at line 1062 of file prt.f90.

1063  ! -- modules
1066  use arrayhandlersmodule, only: expandarray
1067  use memorymanagermodule, only: mem_setptr
1069  use simvariablesmodule, only: idm_context
1070  use budgetmodule, only: budget_cr
1074  use prtmipmodule, only: mip_cr
1075  use prtfmimodule, only: fmi_cr
1076  use prtocmodule, only: oc_cr
1077  use prtobsmodule, only: prt_obs_cr
1078  ! -- dummy
1079  class(PrtModelType) :: this
1080  ! -- local
1081  type(CharacterStringType), dimension(:), contiguous, &
1082  pointer :: pkgtypes => null()
1083  type(CharacterStringType), dimension(:), contiguous, &
1084  pointer :: pkgnames => null()
1085  type(CharacterStringType), dimension(:), contiguous, &
1086  pointer :: mempaths => null()
1087  integer(I4B), dimension(:), contiguous, &
1088  pointer :: inunits => null()
1089  character(len=LENMEMPATH) :: model_mempath
1090  character(len=LENFTYPE) :: pkgtype
1091  character(len=LENPACKAGENAME) :: pkgname
1092  character(len=LENMEMPATH) :: mempath
1093  integer(I4B), pointer :: inunit
1094  integer(I4B), dimension(:), allocatable :: bndpkgs
1095  integer(I4B) :: n
1096  integer(I4B) :: indis = 0 ! DIS enabled flag
1097  character(len=LENMEMPATH) :: mempathmip = ''
1098 
1099  ! -- set input memory paths, input/model and input/model/namfile
1100  model_mempath = create_mem_path(component=this%name, context=idm_context)
1101 
1102  ! -- set pointers to model path package info
1103  call mem_setptr(pkgtypes, 'PKGTYPES', model_mempath)
1104  call mem_setptr(pkgnames, 'PKGNAMES', model_mempath)
1105  call mem_setptr(mempaths, 'MEMPATHS', model_mempath)
1106  call mem_setptr(inunits, 'INUNITS', model_mempath)
1107 
1108  do n = 1, size(pkgtypes)
1109  ! attributes for this input package
1110  pkgtype = pkgtypes(n)
1111  pkgname = pkgnames(n)
1112  mempath = mempaths(n)
1113  inunit => inunits(n)
1114 
1115  ! -- create dis package first as it is a prerequisite for other packages
1116  select case (pkgtype)
1117  case ('DIS6')
1118  indis = 1
1119  call dis_cr(this%dis, this%name, mempath, indis, this%iout)
1120  case ('DISV6')
1121  indis = 1
1122  call disv_cr(this%dis, this%name, mempath, indis, this%iout)
1123  case ('DISU6')
1124  indis = 1
1125  call disu_cr(this%dis, this%name, mempath, indis, this%iout)
1126  case ('MIP6')
1127  this%inmip = 1
1128  mempathmip = mempath
1129  case ('FMI6')
1130  this%infmi = inunit
1131  case ('OC6')
1132  this%inoc = inunit
1133  case ('OBS6')
1134  this%inobs = inunit
1135  case ('PRP6')
1136  call expandarray(bndpkgs)
1137  bndpkgs(size(bndpkgs)) = n
1138  case default
1139  call pstop(1, "Unrecognized package type: "//pkgtype)
1140  end select
1141  end do
1142 
1143  ! -- Create budget manager
1144  call budget_cr(this%budget, this%name)
1145 
1146  ! -- Create tracking method pools
1147  call create_method_pool()
1150 
1151  ! -- Create packages that are tied directly to model
1152  call mip_cr(this%mip, this%name, mempathmip, this%inmip, this%iout, this%dis)
1153  call fmi_cr(this%fmi, this%name, this%infmi, this%iout)
1154  call oc_cr(this%oc, this%name, this%inoc, this%iout)
1155  call prt_obs_cr(this%obs, this%inobs)
1156 
1157  ! -- Check to make sure that required ftype's have been specified
1158  call this%ftype_check(indis)
1159 
1160  ! -- Create boundary packages
1161  call this%create_bndpkgs(bndpkgs, pkgtypes, pkgnames, mempaths, inunits)
This module contains the BudgetModule.
Definition: Budget.f90:20
subroutine, public budget_cr(this, name_model)
@ brief Create a new budget object
Definition: Budget.f90:84
character(len=lenmempath) function create_mem_path(component, subcomponent, context)
returns the path to the memory object
Cell-level tracking methods.
subroutine, public create_method_cell_pool()
Create the cell method pool.
Model-level tracking methods.
Definition: MethodPool.f90:2
subroutine, public create_method_pool()
Create the method pool.
Definition: MethodPool.f90:18
Subcell-level tracking methods.
subroutine, public create_method_subcell_pool()
Create the subcell method pool.
subroutine, public fmi_cr(fmiobj, name_model, inunit, iout)
Create a new PrtFmi object.
Definition: prt-fmi.f90:37
subroutine, public mip_cr(mip, name_model, input_mempath, inunit, iout, dis)
Create a model input object.
Definition: prt-mip.f90:35
subroutine, public prt_obs_cr(obs, inobs)
Create a new PrtObsType object.
Definition: prt-obs.f90:34
subroutine, public oc_cr(ocobj, name_model, inunit, iout)
@ brief Create an output control object
Definition: prt-oc.f90:46
This module contains simulation variables.
Definition: SimVariables.f90:9
character(len=linelength) idm_context
Here is the call graph for this function:

◆ ftype_check()

subroutine prtmodule::ftype_check ( class(prtmodeltype this,
integer(i4b), intent(in)  indis 
)

Definition at line 903 of file prt.f90.

904  ! -- dummy
905  class(PrtModelType) :: this
906  integer(I4B), intent(in) :: indis
907  ! -- local
908  character(len=LINELENGTH) :: errmsg
909 
910  ! -- Check for DIS(u) and MIP. Stop if not present.
911  if (indis == 0) then
912  write (errmsg, '(1x,a)') &
913  'Discretization (DIS6, DISV6, or DISU6) package not specified.'
914  call store_error(errmsg)
915  end if
916  if (this%inmip == 0) then
917  write (errmsg, '(1x,a)') &
918  'Model input (MIP6) package not specified.'
919  call store_error(errmsg)
920  end if
921 
922  if (count_errors() > 0) then
923  write (errmsg, '(1x,a)') 'One or more required package(s) not specified.'
924  call store_error(errmsg)
925  call store_error_filename(this%filename)
926  end if
Here is the call graph for this function:

◆ log_namfile_options()

subroutine prtmodule::log_namfile_options ( class(prtmodeltype this,
type(gwfnamparamfoundtype), intent(in)  found 
)

Definition at line 1165 of file prt.f90.

1167  class(PrtModelType) :: this
1168  type(GwfNamParamFoundType), intent(in) :: found
1169 
1170  write (this%iout, '(1x,a)') 'NAMEFILE OPTIONS:'
1171 
1172  if (found%newton) then
1173  write (this%iout, '(4x,a)') &
1174  'NEWTON-RAPHSON method enabled for the model.'
1175  if (found%under_relaxation) then
1176  write (this%iout, '(4x,a,a)') &
1177  'NEWTON-RAPHSON UNDER-RELAXATION based on the bottom ', &
1178  'elevation of the model will be applied to the model.'
1179  end if
1180  end if
1181 
1182  if (found%print_input) then
1183  write (this%iout, '(4x,a)') 'STRESS PACKAGE INPUT WILL BE PRINTED '// &
1184  'FOR ALL MODEL STRESS PACKAGES'
1185  end if
1186 
1187  if (found%print_flows) then
1188  write (this%iout, '(4x,a)') 'PACKAGE FLOWS WILL BE PRINTED '// &
1189  'FOR ALL MODEL PACKAGES'
1190  end if
1191 
1192  if (found%save_flows) then
1193  write (this%iout, '(4x,a)') &
1194  'FLOWS WILL BE SAVED TO BUDGET FILE SPECIFIED IN OUTPUT CONTROL'
1195  end if
1196 
1197  write (this%iout, '(1x,a)') 'END NAMEFILE OPTIONS:'

◆ package_create()

subroutine prtmodule::package_create ( class(prtmodeltype this,
character(len=*), intent(in)  filtyp,
integer(i4b), intent(in)  ipakid,
integer(i4b), intent(in)  ipaknum,
character(len=*), intent(in)  pakname,
character(len=*), intent(in)  mempath,
integer(i4b), intent(in)  inunit,
integer(i4b), intent(in)  iout 
)

Definition at line 853 of file prt.f90.

855  ! -- modules
856  use constantsmodule, only: linelength
857  use prtprpmodule, only: prp_create
858  use apimodule, only: api_create
859  ! -- dummy
860  class(PrtModelType) :: this
861  character(len=*), intent(in) :: filtyp
862  character(len=LINELENGTH) :: errmsg
863  integer(I4B), intent(in) :: ipakid
864  integer(I4B), intent(in) :: ipaknum
865  character(len=*), intent(in) :: pakname
866  character(len=*), intent(in) :: mempath
867  integer(I4B), intent(in) :: inunit
868  integer(I4B), intent(in) :: iout
869  ! -- local
870  class(BndType), pointer :: packobj
871  class(BndType), pointer :: packobj2
872  integer(I4B) :: ip
873 
874  ! -- This part creates the package object
875  select case (filtyp)
876  case ('PRP6')
877  this%nprp = this%nprp + 1
878  call prp_create(packobj, ipakid, ipaknum, inunit, iout, &
879  this%name, pakname, mempath, this%fmi)
880  case ('API6')
881  call api_create(packobj, ipakid, ipaknum, inunit, iout, &
882  this%name, pakname)
883  case default
884  write (errmsg, *) 'Invalid package type: ', filtyp
885  call store_error(errmsg, terminate=.true.)
886  end select
887 
888  ! -- Packages is the bndlist that is associated with the parent model
889  ! -- The following statement puts a pointer to this package in the ipakid
890  ! -- position of packages.
891  do ip = 1, this%bndlist%Count()
892  packobj2 => getbndfromlist(this%bndlist, ip)
893  if (packobj2%packName == pakname) then
894  write (errmsg, '(a,a)') 'Cannot create package. Package name '// &
895  'already exists: ', trim(pakname)
896  call store_error(errmsg, terminate=.true.)
897  end if
898  end do
899  call addbndtolist(this%bndlist, packobj)
This module contains the API package methods.
Definition: gwf-api.f90:12
subroutine, public api_create(packobj, id, ibcnum, inunit, iout, namemodel, pakname)
@ brief Create a new package object
Definition: gwf-api.f90:49
subroutine, public prp_create(packobj, id, ibcnum, inunit, iout, namemodel, pakname, mempath, fmi)
Create a new particle release point package.
Definition: prt-prp.f90:89
Here is the call graph for this function:

◆ prt_ad()

subroutine prtmodule::prt_ad ( class(prtmodeltype this)

Definition at line 325 of file prt.f90.

326  ! -- modules
328  ! -- dummy
329  class(PrtModelType) :: this
330  class(BndType), pointer :: packobj
331  ! -- local
332  integer(I4B) :: irestore
333  integer(I4B) :: ip, n, i
334 
335  ! -- Reset state variable
336  irestore = 0
337  if (ifailedstepretry > 0) irestore = 1
338 
339  ! -- Copy masssto into massstoold
340  do n = 1, this%dis%nodes
341  this%massstoold(n) = this%masssto(n)
342  end do
343 
344  ! -- Advance fmi
345  call this%fmi%fmi_ad()
346 
347  ! -- Advance
348  do ip = 1, this%bndlist%Count()
349  packobj => getbndfromlist(this%bndlist, ip)
350  call packobj%bnd_ad()
351  if (isimcheck > 0) then
352  call packobj%bnd_ck()
353  end if
354  end do
355 
356  ! -- Push simulated values to preceding time/subtime step
357  call this%obs%obs_ad()
358  !
359  ! -- Initialize the flowja array. Flowja is calculated each time,
360  ! even if output is suppressed. (Flowja represents flow of particle
361  ! mass and is positive into a cell. Currently, each particle is assigned
362  ! unit mass.) Flowja is updated continually as particles are tracked
363  ! over the time step and at the end of the time step. The diagonal
364  ! position of the flowja array will contain the flow residual.
365  do i = 1, this%dis%nja
366  this%flowja(i) = dzero
367  end do
integer(i4b) isimcheck
simulation input check flag (1) to check input, (0) to ignore checks
integer(i4b) ifailedstepretry
current retry for this time step
Here is the call graph for this function:

◆ prt_ar()

subroutine prtmodule::prt_ar ( class(prtmodeltype this)

(1) allocates and reads packages part of this model, (2) allocates memory for arrays part of this model object

Definition at line 232 of file prt.f90.

233  ! -- modules
234  use constantsmodule, only: dhnoflo
235  use prtprpmodule, only: prtprptype
236  use prtmipmodule, only: prtmiptype
238  ! -- dummy
239  class(PrtModelType) :: this
240  ! -- locals
241  integer(I4B) :: ip
242  class(BndType), pointer :: packobj
243 
244  ! -- Allocate and read modules attached to model
245  call this%fmi%fmi_ar(this%ibound)
246  if (this%inmip > 0) call this%mip%mip_ar()
247 
248  ! -- set up output control
249  call this%oc%oc_ar(this%masssto, this%dis, dhnoflo)
250  call this%budget%set_ibudcsv(this%oc%ibudcsv)
251 
252  ! -- Package input files now open, so allocate and read
253  do ip = 1, this%bndlist%Count()
254  packobj => getbndfromlist(this%bndlist, ip)
255  select type (packobj)
256  type is (prtprptype)
257  call packobj%prp_set_pointers(this%ibound, this%mip%izone, &
258  this%trackfilectl)
259  end select
260  ! -- Read and allocate package
261  call packobj%bnd_ar()
262  end do
263 
264  ! -- Initialize tracking method
265  select type (dis => this%dis)
266  type is (distype)
267  call method_dis%init( &
268  fmi=this%fmi, &
269  trackfilectl=this%trackfilectl, &
270  izone=this%mip%izone, &
271  flowja=this%flowja, &
272  porosity=this%mip%porosity, &
273  retfactor=this%mip%retfactor, &
274  tracktimes=this%oc%tracktimes)
275  this%method => method_dis
276  type is (disvtype)
277  call method_disv%init( &
278  fmi=this%fmi, &
279  trackfilectl=this%trackfilectl, &
280  izone=this%mip%izone, &
281  flowja=this%flowja, &
282  porosity=this%mip%porosity, &
283  retfactor=this%mip%retfactor, &
284  tracktimes=this%oc%tracktimes)
285  this%method => method_disv
286  method_disv%zeromethod = this%mip%zeromethod
287  end select
288 
289  ! -- Initialize track output files and reporting options
290  if (this%oc%itrkout > 0) &
291  call this%trackfilectl%init_track_file(this%oc%itrkout)
292  if (this%oc%itrkcsv > 0) &
293  call this%trackfilectl%init_track_file(this%oc%itrkcsv, csv=.true.)
294  call this%trackfilectl%set_track_events( &
295  this%oc%trackrelease, &
296  this%oc%tracktransit, &
297  this%oc%tracktimestep, &
298  this%oc%trackterminate, &
299  this%oc%trackweaksink, &
300  this%oc%trackusertime)
real(dp), parameter dhnoflo
real no flow constant
Definition: Constants.f90:92
type(methoddisvtype), pointer, public method_disv
Definition: MethodPool.f90:12
type(methoddistype), pointer, public method_dis
Definition: MethodPool.f90:11
Particle release point (PRP) package.
Definition: prt-prp.f90:36
Here is the call graph for this function:

◆ prt_bd()

subroutine prtmodule::prt_bd ( class(prtmodeltype this,
integer(i4b), intent(in)  icnvg,
integer(i4b), intent(in)  isuppress_output 
)

(1) Calculate intercell flows (flowja) (2) Calculate package contributions to model budget

Definition at line 471 of file prt.f90.

472  ! -- modules
473  use tdismodule, only: delt
474  use budgetmodule, only: rate_accumulator
475  ! -- dummy
476  class(PrtModelType) :: this
477  integer(I4B), intent(in) :: icnvg
478  integer(I4B), intent(in) :: isuppress_output
479  ! -- local
480  integer(I4B) :: ip
481  class(BndType), pointer :: packobj
482  real(DP) :: rin
483  real(DP) :: rout
484 
485  ! -- Budget routines (start by resetting). Sole purpose of this section
486  ! is to add in and outs to model budget. All ins and out for a model
487  ! should be added here to this%budget. In a subsequent exchange call,
488  ! exchange flows might also be added.
489  call this%budget%reset()
490  call rate_accumulator(this%ratesto, rin, rout)
491  call this%budget%addentry(rin, rout, delt, budtxt(1), &
492  isuppress_output, ' PRT')
493  do ip = 1, this%bndlist%Count()
494  packobj => getbndfromlist(this%bndlist, ip)
495  call packobj%bnd_bd(this%budget)
496  end do
subroutine, public rate_accumulator(flow, rin, rout)
@ brief Rate accumulator subroutine
Definition: Budget.f90:664
real(dp), pointer, public delt
length of the current time step
Definition: tdis.f90:29
Here is the call graph for this function:

◆ prt_cq()

subroutine prtmodule::prt_cq ( class(prtmodeltype this,
integer(i4b), intent(in)  icnvg,
integer(i4b), intent(in)  isuppress_output 
)

Definition at line 371 of file prt.f90.

372  ! -- modules
373  use sparsemodule, only: csr_diagsum
374  use tdismodule, only: delt
375  use prtprpmodule, only: prtprptype
376  ! -- dummy
377  class(PrtModelType) :: this
378  integer(I4B), intent(in) :: icnvg
379  integer(I4B), intent(in) :: isuppress_output
380  ! -- local
381  integer(I4B) :: i
382  integer(I4B) :: ip
383  class(BndType), pointer :: packobj
384  real(DP) :: tled
385 
386  ! -- Flowja is calculated each time, even if output is suppressed.
387  ! Flowja represents flow of particle mass and is positive into a cell.
388  ! Currently, each particle is assigned unit mass.
389  !
390  ! -- Reciprocal of time step size.
391  tled = done / delt
392  !
393  ! -- Flowja was updated continually as particles were tracked over the
394  ! time step. At this point, flowja contains the net particle mass
395  ! exchanged between cells during the time step. To convert these to
396  ! flow rates (particle mass per time), divide by the time step size.
397  do i = 1, this%dis%nja
398  this%flowja(i) = this%flowja(i) * tled
399  end do
400 
401  ! -- Particle mass storage
402  call this%prt_cq_sto()
403 
404  ! -- Go through packages and call cq routines. Just a formality.
405  do ip = 1, this%bndlist%Count()
406  packobj => getbndfromlist(this%bndlist, ip)
407  call packobj%bnd_cq(this%masssto, this%flowja)
408  end do
409 
410  ! -- Finalize calculation of flowja by adding face flows to the diagonal.
411  ! This results in the flow residual being stored in the diagonal
412  ! position for each cell.
413  call csr_diagsum(this%dis%con%ia, this%flowja)
subroutine csr_diagsum(ia, flowja)
Definition: Sparse.f90:281
Here is the call graph for this function:

◆ prt_cq_sto()

subroutine prtmodule::prt_cq_sto ( class(prtmodeltype this)

Definition at line 417 of file prt.f90.

418  ! -- modules
419  use tdismodule, only: delt
420  use prtprpmodule, only: prtprptype
421  ! -- dummy
422  class(PrtModelType) :: this
423  ! -- local
424  integer(I4B) :: ip
425  class(BndType), pointer :: packobj
426  integer(I4B) :: n
427  integer(I4B) :: np
428  integer(I4B) :: idiag
429  integer(I4B) :: istatus
430  real(DP) :: tled
431  real(DP) :: rate
432 
433  ! -- Reciprocal of time step size.
434  tled = done / delt
435 
436  ! -- Particle mass storage rate
437  do n = 1, this%dis%nodes
438  this%masssto(n) = dzero
439  this%ratesto(n) = dzero
440  end do
441  do ip = 1, this%bndlist%Count() ! kluge note: could accumulate masssto on the fly in prt_solve instead
442  packobj => getbndfromlist(this%bndlist, ip)
443  select type (packobj)
444  type is (prtprptype)
445  do np = 1, packobj%nparticles
446  istatus = packobj%particles%istatus(np)
447  ! refine these conditions as necessary
448  ! (status 8 is permanently unreleased)
449  if ((istatus > 0) .and. (istatus /= 8)) then
450  n = packobj%particles%idomain(np, 2)
451  ! -- Each particle currently assigned unit mass
452  this%masssto(n) = this%masssto(n) + done
453  end if
454  end do
455  end select
456  end do
457  do n = 1, this%dis%nodes ! kluge note: set rate to zero and skip inactive nodes?
458  rate = -(this%masssto(n) - this%massstoold(n)) * tled
459  this%ratesto(n) = rate
460  idiag = this%dis%con%ia(n)
461  this%flowja(idiag) = this%flowja(idiag) + rate
462  end do
Here is the call graph for this function:

◆ prt_cr()

subroutine, public prtmodule::prt_cr ( character(len=*), intent(in)  filename,
integer(i4b), intent(in)  id,
character(len=*), intent(in)  modelname 
)

Definition at line 122 of file prt.f90.

123  ! -- modules
124  use listsmodule, only: basemodellist
127  use compilerversion
132  ! -- dummy
133  character(len=*), intent(in) :: filename
134  integer(I4B), intent(in) :: id
135  character(len=*), intent(in) :: modelname
136  ! -- local
137  type(PrtModelType), pointer :: this
138  class(BaseModelType), pointer :: model
139  character(len=LENMEMPATH) :: input_mempath
140  character(len=LINELENGTH) :: lst_fname
141  type(GwfNamParamFoundType) :: found
142 
143  ! -- Allocate a new PRT Model (this)
144  allocate (this)
145 
146  ! -- Set this before any allocs in the memory manager can be done
147  this%memoryPath = create_mem_path(modelname)
148 
149  ! -- Allocate track control object
150  allocate (this%trackfilectl)
151 
152  ! -- Allocate scalars and add model to basemodellist
153  call this%allocate_scalars(modelname)
154  model => this
155  call addbasemodeltolist(basemodellist, model)
156 
157  ! -- Assign variables
158  this%filename = filename
159  this%name = modelname
160  this%macronym = 'PRT'
161  this%id = id
162 
163  ! -- Set input model namfile memory path
164  input_mempath = create_mem_path(modelname, 'NAM', idm_context)
165 
166  ! -- Copy options from input context
167  call mem_set_value(this%iprpak, 'PRINT_INPUT', input_mempath, &
168  found%print_input)
169  call mem_set_value(this%iprflow, 'PRINT_FLOWS', input_mempath, &
170  found%print_flows)
171  call mem_set_value(this%ipakcb, 'SAVE_FLOWS', input_mempath, &
172  found%save_flows)
173 
174  ! -- Create the list file
175  call this%create_lstfile(lst_fname, filename, found%list, &
176  'PARTICLE TRACKING MODEL (PRT)')
177 
178  ! -- Activate save_flows if found
179  if (found%save_flows) then
180  this%ipakcb = -1
181  end if
182 
183  ! -- Log options
184  if (this%iout > 0) then
185  call this%log_namfile_options(found)
186  end if
187 
188  ! -- Create model packages
189  call this%create_packages()
subroutine, public addbasemodeltolist(list, model)
Definition: BaseModel.f90:161
type(listtype), public basemodellist
Definition: mf6lists.f90:16
Here is the call graph for this function:
Here is the caller graph for this function:

◆ prt_da()

subroutine prtmodule::prt_da ( class(prtmodeltype this)

Definition at line 720 of file prt.f90.

721  ! -- modules
728  ! -- dummy
729  class(PrtModelType) :: this
730  ! -- local
731  integer(I4B) :: ip
732  class(BndType), pointer :: packobj
733 
734  ! -- Deallocate idm memory
735  call memorylist_remove(this%name, 'NAM', idm_context)
736  call memorylist_remove(component=this%name, context=idm_context)
737 
738  ! -- Internal packages
739  call this%dis%dis_da()
740  call this%fmi%fmi_da()
741  call this%mip%mip_da()
742  call this%budget%budget_da()
743  call this%oc%oc_da()
744  call this%obs%obs_da()
745  deallocate (this%dis)
746  deallocate (this%fmi)
747  deallocate (this%mip)
748  deallocate (this%budget)
749  deallocate (this%oc)
750  deallocate (this%obs)
751 
752  ! -- Method objects
755  call destroy_method_pool()
756 
757  ! -- Boundary packages
758  do ip = 1, this%bndlist%Count()
759  packobj => getbndfromlist(this%bndlist, ip)
760  call packobj%bnd_da()
761  deallocate (packobj)
762  end do
763 
764  ! -- Scalars
765  call mem_deallocate(this%infmi)
766  call mem_deallocate(this%inmip)
767  call mem_deallocate(this%inadv)
768  call mem_deallocate(this%indsp)
769  call mem_deallocate(this%inssm)
770  call mem_deallocate(this%inmst)
771  call mem_deallocate(this%inmvt)
772  call mem_deallocate(this%inoc)
773  call mem_deallocate(this%inobs)
774  call mem_deallocate(this%nprp)
775 
776  ! -- Arrays
777  call mem_deallocate(this%masssto)
778  call mem_deallocate(this%massstoold)
779  call mem_deallocate(this%ratesto)
780 
781  ! -- Track file control
782  deallocate (this%trackfilectl)
783 
784  ! -- Parent type
785  call this%NumericalModelType%model_da()
subroutine, public memorylist_remove(component, subcomponent, context)
subroutine, public destroy_method_cell_pool()
Destroy the cell method pool.
subroutine, public destroy_method_pool()
Destroy the method pool.
Definition: MethodPool.f90:24
subroutine, public destroy_method_subcell_pool()
Destroy the subcell method pool.
Here is the call graph for this function:

◆ prt_df()

subroutine prtmodule::prt_df ( class(prtmodeltype this)

(1) call df routines for each package (2) set variables and pointers

Definition at line 197 of file prt.f90.

198  ! -- modules
199  use prtprpmodule, only: prtprptype
200  ! -- dummy
201  class(PrtModelType) :: this
202  ! -- local
203  integer(I4B) :: ip
204  class(BndType), pointer :: packobj
205 
206  ! -- Define packages and utility objects
207  call this%dis%dis_df()
208  call this%fmi%fmi_df(this%dis, 1)
209  call this%oc%oc_df()
210  call this%budget%budget_df(niunit_prt, 'MASS', 'M')
211 
212  ! -- Define packages and assign iout for time series managers
213  do ip = 1, this%bndlist%Count()
214  packobj => getbndfromlist(this%bndlist, ip)
215  call packobj%bnd_df(this%dis%nodes, this%dis)
216  packobj%TsManager%iout = this%iout
217  packobj%TasManager%iout = this%iout
218  end do
219 
220  ! -- Allocate model arrays
221  call this%allocate_arrays()
222 
223  ! -- Store information needed for observations
224  call this%obs%obs_df(this%iout, this%name, 'PRT', this%dis)
Here is the call graph for this function:

◆ prt_ot()

subroutine prtmodule::prt_ot ( class(prtmodeltype this)

Definition at line 500 of file prt.f90.

501  use tdismodule, only: tdis_ot, endofperiod
502  ! -- dummy
503  class(PrtModelType) :: this
504  ! -- local
505  integer(I4B) :: idvsave
506  integer(I4B) :: idvprint
507  integer(I4B) :: icbcfl
508  integer(I4B) :: icbcun
509  integer(I4B) :: ibudfl
510  integer(I4B) :: ipflag
511 
512  ! -- Note: particle tracking output is handled elsewhere
513 
514  ! -- Set write and print flags
515  idvsave = 0
516  idvprint = 0
517  icbcfl = 0
518  ibudfl = 0
519  if (this%oc%oc_save('CONCENTRATION')) idvsave = 1
520  if (this%oc%oc_print('CONCENTRATION')) idvprint = 1
521  if (this%oc%oc_save('BUDGET')) icbcfl = 1
522  if (this%oc%oc_print('BUDGET')) ibudfl = 1
523  icbcun = this%oc%oc_save_unit('BUDGET')
524 
525  ! -- Override ibudfl and idvprint flags for nonconvergence
526  ! and end of period
527  ibudfl = this%oc%set_print_flag('BUDGET', 1, endofperiod)
528  idvprint = this%oc%set_print_flag('CONCENTRATION', 1, endofperiod)
529 
530  ! -- Calculate and save observations
531  call this%prt_ot_obs()
532 
533  ! -- Save and print flows
534  call this%prt_ot_flow(icbcfl, ibudfl, icbcun)
535 
536  ! -- Save and print dependent variables
537  call this%prt_ot_dv(idvsave, idvprint, ipflag)
538 
539  ! -- Print budget summaries
540  call this%prt_ot_bdsummary(ibudfl, ipflag)
541 
542  ! -- Timing Output; if any dependent variables or budgets
543  ! are printed, then ipflag is set to 1.
544  if (ipflag == 1) call tdis_ot(this%iout)
logical(lgp), pointer, public endofperiod
flag indicating end of stress period
Definition: tdis.f90:27
subroutine, public tdis_ot(iout)
Print simulation time.
Definition: tdis.f90:349
Here is the call graph for this function:

◆ prt_ot_bdsummary()

subroutine prtmodule::prt_ot_bdsummary ( class(prtmodeltype this,
integer(i4b), intent(in)  ibudfl,
integer(i4b), intent(inout)  ipflag 
)
private

Definition at line 690 of file prt.f90.

691  ! -- modules
692  use tdismodule, only: kstp, kper, totim, delt
693  ! -- dummy
694  class(PrtModelType) :: this
695  integer(I4B), intent(in) :: ibudfl
696  integer(I4B), intent(inout) :: ipflag
697  ! -- local
698  class(BndType), pointer :: packobj
699  integer(I4B) :: ip
700 
701  ! -- Package budget summary
702  do ip = 1, this%bndlist%Count()
703  packobj => getbndfromlist(this%bndlist, ip)
704  call packobj%bnd_ot_bdsummary(kstp, kper, this%iout, ibudfl)
705  end do
706 
707  ! -- model budget summary
708  call this%budget%finalize_step(delt)
709  if (ibudfl /= 0) then
710  ipflag = 1
711  ! -- model budget summary
712  call this%budget%budget_ot(kstp, kper, this%iout)
713  end if
714 
715  ! -- Write to budget csv
716  call this%budget%writecsv(totim)
real(dp), pointer, public totim
time relative to start of simulation
Definition: tdis.f90:32
integer(i4b), pointer, public kstp
current time step number
Definition: tdis.f90:24
integer(i4b), pointer, public kper
current stress period number
Definition: tdis.f90:23
Here is the call graph for this function:

◆ prt_ot_dv()

subroutine prtmodule::prt_ot_dv ( class(prtmodeltype this,
integer(i4b), intent(in)  idvsave,
integer(i4b), intent(in)  idvprint,
integer(i4b), intent(inout)  ipflag 
)

Definition at line 669 of file prt.f90.

670  ! -- dummy
671  class(PrtModelType) :: this
672  integer(I4B), intent(in) :: idvsave
673  integer(I4B), intent(in) :: idvprint
674  integer(I4B), intent(inout) :: ipflag
675  ! -- local
676  class(BndType), pointer :: packobj
677  integer(I4B) :: ip
678 
679  ! -- Print advanced package dependent variables
680  do ip = 1, this%bndlist%Count()
681  packobj => getbndfromlist(this%bndlist, ip)
682  call packobj%bnd_ot_dv(idvsave, idvprint)
683  end do
684 
685  ! -- save head and print head
686  call this%oc%oc_ot(ipflag)
Here is the call graph for this function:

◆ prt_ot_flow()

subroutine prtmodule::prt_ot_flow ( class(prtmodeltype this,
integer(i4b), intent(in)  icbcfl,
integer(i4b), intent(in)  ibudfl,
integer(i4b), intent(in)  icbcun 
)
private

Definition at line 566 of file prt.f90.

567  use prtprpmodule, only: prtprptype
568  class(PrtModelType) :: this
569  integer(I4B), intent(in) :: icbcfl
570  integer(I4B), intent(in) :: ibudfl
571  integer(I4B), intent(in) :: icbcun
572  class(BndType), pointer :: packobj
573  integer(I4B) :: ip
574 
575  ! -- Save PRT flows
576  call this%prt_ot_saveflow(this%dis%nja, this%flowja, icbcfl, icbcun)
577  do ip = 1, this%bndlist%Count()
578  packobj => getbndfromlist(this%bndlist, ip)
579  call packobj%bnd_ot_model_flows(icbcfl=icbcfl, ibudfl=0, icbcun=icbcun)
580  end do
581 
582  ! -- Save advanced package flows
583  do ip = 1, this%bndlist%Count()
584  packobj => getbndfromlist(this%bndlist, ip)
585  call packobj%bnd_ot_package_flows(icbcfl=icbcfl, ibudfl=0)
586  end do
587 
588  ! -- Print PRT flows
589  call this%prt_ot_printflow(ibudfl, this%flowja)
590  do ip = 1, this%bndlist%Count()
591  packobj => getbndfromlist(this%bndlist, ip)
592  call packobj%bnd_ot_model_flows(icbcfl=icbcfl, ibudfl=ibudfl, icbcun=0)
593  end do
594 
595  ! -- Print advanced package flows
596  do ip = 1, this%bndlist%Count()
597  packobj => getbndfromlist(this%bndlist, ip)
598  call packobj%bnd_ot_package_flows(icbcfl=0, ibudfl=ibudfl)
599  end do
Here is the call graph for this function:

◆ prt_ot_obs()

subroutine prtmodule::prt_ot_obs ( class(prtmodeltype this)

Definition at line 548 of file prt.f90.

549  class(PrtModelType) :: this
550  class(BndType), pointer :: packobj
551  integer(I4B) :: ip
552 
553  ! -- Calculate and save observations
554  call this%obs%obs_bd()
555  call this%obs%obs_ot()
556 
557  ! -- Calculate and save package obserations
558  do ip = 1, this%bndlist%Count()
559  packobj => getbndfromlist(this%bndlist, ip)
560  call packobj%bnd_bd_obs()
561  call packobj%bnd_ot_obs()
562  end do
Here is the call graph for this function:

◆ prt_ot_printflow()

subroutine prtmodule::prt_ot_printflow ( class(prtmodeltype this,
integer(i4b), intent(in)  ibudfl,
real(dp), dimension(:), intent(inout)  flowja 
)
private

Definition at line 630 of file prt.f90.

631  ! -- modules
632  use tdismodule, only: kper, kstp
633  use constantsmodule, only: lenbigline
634  ! -- dummy
635  class(PrtModelType) :: this
636  integer(I4B), intent(in) :: ibudfl
637  real(DP), intent(inout), dimension(:) :: flowja
638  ! -- local
639  character(len=LENBIGLINE) :: line
640  character(len=30) :: tempstr
641  integer(I4B) :: n, ipos, m
642  real(DP) :: qnm
643  ! -- formats
644  character(len=*), parameter :: fmtiprflow = &
645  "(/,4x,'CALCULATED INTERCELL FLOW &
646  &FOR PERIOD ', i0, ' STEP ', i0)"
647 
648  ! -- Write flowja to list file if requested
649  if (ibudfl /= 0 .and. this%iprflow > 0) then
650  write (this%iout, fmtiprflow) kper, kstp
651  do n = 1, this%dis%nodes
652  line = ''
653  call this%dis%noder_to_string(n, tempstr)
654  line = trim(tempstr)//':'
655  do ipos = this%dis%con%ia(n) + 1, this%dis%con%ia(n + 1) - 1
656  m = this%dis%con%ja(ipos)
657  call this%dis%noder_to_string(m, tempstr)
658  line = trim(line)//' '//trim(tempstr)
659  qnm = flowja(ipos)
660  write (tempstr, '(1pg15.6)') qnm
661  line = trim(line)//' '//trim(adjustl(tempstr))
662  end do
663  write (this%iout, '(a)') trim(line)
664  end do
665  end if
integer(i4b), parameter lenbigline
maximum length of a big line
Definition: Constants.f90:15

◆ prt_ot_saveflow()

subroutine prtmodule::prt_ot_saveflow ( class(prtmodeltype this,
integer(i4b), intent(in)  nja,
real(dp), dimension(nja), intent(in)  flowja,
integer(i4b), intent(in)  icbcfl,
integer(i4b), intent(in)  icbcun 
)

Definition at line 603 of file prt.f90.

604  ! -- dummy
605  class(PrtModelType) :: this
606  integer(I4B), intent(in) :: nja
607  real(DP), dimension(nja), intent(in) :: flowja
608  integer(I4B), intent(in) :: icbcfl
609  integer(I4B), intent(in) :: icbcun
610  ! -- local
611  integer(I4B) :: ibinun
612 
613  ! -- Set unit number for binary output
614  if (this%ipakcb < 0) then
615  ibinun = icbcun
616  elseif (this%ipakcb == 0) then
617  ibinun = 0
618  else
619  ibinun = this%ipakcb
620  end if
621  if (icbcfl == 0) ibinun = 0
622 
623  ! -- Write the face flows if requested
624  if (ibinun /= 0) then
625  call this%dis%record_connection_array(flowja, ibinun, this%iout)
626  end if

◆ prt_rp()

subroutine prtmodule::prt_rp ( class(prtmodeltype this)

Definition at line 304 of file prt.f90.

305  use tdismodule, only: readnewdata
306  ! -- dummy
307  class(PrtModelType) :: this
308  ! -- local
309  class(BndType), pointer :: packobj
310  integer(I4B) :: ip
311 
312  ! -- Check with TDIS on whether or not it is time to RP
313  if (.not. readnewdata) return
314 
315  ! -- Read and prepare
316  if (this%inoc > 0) call this%oc%oc_rp()
317  do ip = 1, this%bndlist%Count()
318  packobj => getbndfromlist(this%bndlist, ip)
319  call packobj%bnd_rp()
320  call packobj%bnd_rp_obs()
321  end do
logical(lgp), pointer, public readnewdata
flag indicating time to read new data
Definition: tdis.f90:26
Here is the call graph for this function:

◆ prt_solve()

subroutine prtmodule::prt_solve ( class(prtmodeltype this)
private

Definition at line 930 of file prt.f90.

931  ! -- modules
932  use tdismodule, only: kper, kstp, totimc, nper, nstp, delt
933  use prtprpmodule, only: prtprptype
934  ! -- dummy variables
935  class(PrtModelType) :: this
936  ! -- local variables
937  integer(I4B) :: np, ip
938  class(BndType), pointer :: packobj
939  type(ParticleType), pointer :: particle
940  real(DP) :: tmax
941  integer(I4B) :: iprp
942 
943  ! -- Initialize particle
944  call create_particle(particle)
945 
946  ! -- Loop over PRP packages
947  iprp = 0
948  do ip = 1, this%bndlist%Count()
949  packobj => getbndfromlist(this%bndlist, ip)
950  select type (packobj)
951  type is (prtprptype)
952  ! -- Update PRP index
953  iprp = iprp + 1
954 
955  ! -- Initialize PRP-specific track files, if enabled
956  if (packobj%itrkout > 0) then
957  call this%trackfilectl%init_track_file( &
958  packobj%itrkout, &
959  iprp=iprp)
960  end if
961  if (packobj%itrkcsv > 0) then
962  call this%trackfilectl%init_track_file( &
963  packobj%itrkcsv, &
964  csv=.true., &
965  iprp=iprp)
966  end if
967 
968  ! -- Loop over particles in package
969  do np = 1, packobj%nparticles
970  ! -- Load particle from storage
971  call particle%load_from_store(packobj%particles, &
972  this%id, iprp, np)
973 
974  ! -- If particle is permanently unreleased, record its initial/terminal state
975  if (particle%istatus == 8) &
976  call this%method%save(particle, reason=3) ! reason=3: termination
977 
978  ! -- If particle is inactive or not yet to be released, cycle
979  if (particle%istatus > 1) cycle
980 
981  ! -- If particle released this time step, record its initial state
982  particle%istatus = 1
983  if (particle%trelease >= totimc) &
984  call this%method%save(particle, reason=0) ! reason=0: release
985 
986  ! -- Maximum time is end of time step unless this is the last
987  ! time step in the simulation, which case it's the particle
988  ! stop time.
989  tmax = totimc + delt
990  if (nper == kper .and. nstp(kper) == kstp) &
991  tmax = particle%tstop
992 
993  ! -- Get and apply the tracking method
994  call this%method%apply(particle, tmax)
995 
996  ! -- Update particle storage
997  call packobj%particles%load_from_particle(particle, np)
998  end do
999  end select
1000  end do
1001 
1002  ! -- Destroy particle
1003  call particle%destroy()
1004  deallocate (particle)
integer(i4b), dimension(:), pointer, public, contiguous nstp
number of time steps in each stress period
Definition: tdis.f90:39
real(dp), pointer, public totimc
simulation time at start of time step
Definition: tdis.f90:33
integer(i4b), pointer, public nper
number of stress period
Definition: tdis.f90:21
Here is the call graph for this function:

Variable Documentation

◆ budtxt

character(len=lenbudtxt), dimension(nbditems) prtmodule::budtxt
private

Definition at line 37 of file prt.f90.

37  character(len=LENBUDTXT), dimension(NBDITEMS) :: budtxt

◆ nbditems

integer(i4b), parameter prtmodule::nbditems = 1
private

Definition at line 36 of file prt.f90.

36  integer(I4B), parameter :: NBDITEMS = 1

◆ niunit_prt

integer(i4b), parameter prtmodule::niunit_prt = PRT_NBASEPKG + PRT_NMULTIPKG
private

Definition at line 117 of file prt.f90.

117  integer(I4B), parameter :: NIUNIT_PRT = prt_nbasepkg + prt_nmultipkg

◆ prt_basepkg

character(len=lenpackagetype), dimension(prt_nbasepkg), public prtmodule::prt_basepkg

Definition at line 98 of file prt.f90.

98  character(len=LENPACKAGETYPE), dimension(PRT_NBASEPKG) :: PRT_BASEPKG

◆ prt_multipkg

character(len=lenpackagetype), dimension(prt_nmultipkg), public prtmodule::prt_multipkg

Definition at line 112 of file prt.f90.

112  character(len=LENPACKAGETYPE), dimension(PRT_NMULTIPKG) :: PRT_MULTIPKG

◆ prt_nbasepkg

integer(i4b), parameter, public prtmodule::prt_nbasepkg = 50

PRT6 model base package types. Only listed packages are candidates for input and these will be loaded in the order specified.

Definition at line 97 of file prt.f90.

97  integer(I4B), parameter :: PRT_NBASEPKG = 50

◆ prt_nmultipkg

integer(i4b), parameter, public prtmodule::prt_nmultipkg = 50

PRT6 model multi-instance package types. Only listed packages are candidates for input and these will be loaded in the order specified.

Definition at line 111 of file prt.f90.

111  integer(I4B), parameter :: PRT_NMULTIPKG = 50