MODFLOW 6  version 6.6.0.dev0
USGS Modular Hydrologic Model
gwfmvrmodule Module Reference

Data Types

type  gwfmvrtype
 

Functions/Subroutines

subroutine, public mvr_cr (mvrobj, name_parent, inunit, iout, dis, iexgmvr)
 Create a new mvr object. More...
 
subroutine mvr_init (this, name_parent, inunit, iout, dis, iexgmvr)
 
subroutine mvr_ar (this)
 Allocate and read water mover information. More...
 
subroutine mvr_rp (this)
 Read and Prepare. More...
 
subroutine initialize_movers (this, nr_active_movers)
 
subroutine mvr_ad (this)
 
subroutine mvr_fc (this)
 Calculate qfrommvr as a function of qtomvr. More...
 
subroutine mvr_cc (this, innertot, kiter, iend, icnvgmod, cpak, ipak, dpak)
 Extra convergence check for mover. More...
 
subroutine mvr_bd (this)
 Fill the mover budget object. More...
 
subroutine mvr_bdsav (this, icbcfl, ibudfl, isuppress_output)
 Write mover terms. More...
 
subroutine mvr_ot_saveflow (this, icbcfl, ibudfl)
 Write mover terms. More...
 
subroutine mvr_ot_printflow (this, icbcfl, ibudfl)
 Print mover flow table. More...
 
subroutine mvr_ot_bdsummary (this, ibudfl)
 Write mover budget to listing file. More...
 
subroutine mvr_da (this)
 Deallocate. More...
 
subroutine read_options (this)
 Read options specified in the input options block. More...
 
subroutine check_options (this)
 Check MODELNAMES option set correctly. More...
 
subroutine read_dimensions (this)
 Read the dimensions for this package. More...
 
subroutine read_packages (this)
 Read the packages that will be managed by this mover. More...
 
subroutine check_packages (this)
 Check to make sure packages have mover activated. More...
 
subroutine assign_packagemovers (this)
 Assign pointer to each package's packagemover object. More...
 
subroutine allocate_scalars (this)
 Allocate package scalars. More...
 
subroutine allocate_arrays (this)
 Allocate package arrays. More...
 
subroutine mvr_setup_budobj (this)
 Set up the budget object that stores all the mvr flows. More...
 
subroutine fill_budobj (this)
 Fill budget object. More...
 
subroutine mvr_setup_outputtab (this)
 Set up output table. More...
 
subroutine mvr_print_outputtab (this)
 Set up output table. More...
 
subroutine set_mapped_id (this)
 Set mapped id. More...
 

Function/Subroutine Documentation

◆ allocate_arrays()

subroutine gwfmvrmodule::allocate_arrays ( class(gwfmvrtype this)

Definition at line 1025 of file gwf-mvr.f90.

1026  ! -- modules
1028  use constantsmodule, only: dzero
1030  ! -- dummy
1031  class(GwfMvrType) :: this
1032  ! -- local
1033  integer(I4B) :: i
1034  !
1035  ! -- Allocate
1036  allocate (this%mvr(this%maxmvr))
1037  allocate (this%pckMemPaths(this%maxpackages))
1038  allocate (this%paknames(this%maxpackages))
1039  allocate (this%pakmovers(this%maxpackages))
1040  !
1041  ! -- nullify the pakmovers
1042  do i = 1, this%maxpackages
1043  call nulllify_packagemover_pointer(this%pakmovers(i))
1044  end do
1045  !
1046  ! -- allocate the perioddata object
1047  call this%gwfmvrperioddata%construct(this%maxmvr, this%memoryPath)
1048  !
1049  !
1050  ! -- allocate the object and assign values to object variables
1051  call mem_allocate(this%ientries, this%maxcomb, 'IENTRIES', this%memoryPath)
1052  !
1053  ! -- initialize ientries
1054  do i = 1, this%maxcomb
1055  this%ientries(i) = 0
1056  end do
1057  !
1058  ! -- setup the output table
1059  call this%mvr_setup_outputtab()
This module contains simulation constants.
Definition: Constants.f90:9
real(dp), parameter dzero
real constant zero
Definition: Constants.f90:65
subroutine, public nulllify_packagemover_pointer(packagemover)
Here is the call graph for this function:

◆ allocate_scalars()

subroutine gwfmvrmodule::allocate_scalars ( class(gwfmvrtype this)

Definition at line 987 of file gwf-mvr.f90.

988  ! -- modules
989  use constantsmodule, only: done
991  ! -- dummy
992  class(GwfMvrType) :: this
993  !
994  ! -- allocate scalars in NumericalPackageType
995  call this%NumericalPackageType%allocate_scalars()
996  !
997  ! -- Allocate
998  call mem_allocate(this%reset_mapped_id, 'RESET_MAPPED_ID', this%memoryPath)
999  call mem_allocate(this%ibudgetout, 'IBUDGETOUT', this%memoryPath)
1000  call mem_allocate(this%ibudcsv, 'IBUDCSV', this%memoryPath)
1001  call mem_allocate(this%maxmvr, 'MAXMVR', this%memoryPath)
1002  call mem_allocate(this%maxpackages, 'MAXPACKAGES', this%memoryPath)
1003  call mem_allocate(this%maxcomb, 'MAXCOMB', this%memoryPath)
1004  call mem_allocate(this%nmvr, 'NMVR', this%memoryPath)
1005  call mem_allocate(this%iexgmvr, 'IEXGMVR', this%memoryPath)
1006  call mem_allocate(this%imodelnames, 'IMODELNAMES', this%memoryPath)
1007  !
1008  ! -- Initialize
1009  this%reset_mapped_id = .false.
1010  this%ibudgetout = 0
1011  this%ibudcsv = 0
1012  this%maxmvr = -1
1013  this%maxpackages = -1
1014  this%maxcomb = 0
1015  this%nmvr = 0
1016  this%iexgmvr = 0
1017  this%imodelnames = 0
1018  !
1019  ! -- allocate the period data input object
1020  allocate (this%gwfmvrperioddata)
real(dp), parameter done
real constant 1
Definition: Constants.f90:76

◆ assign_packagemovers()

subroutine gwfmvrmodule::assign_packagemovers ( class(gwfmvrtype), intent(inout)  this)

Definition at line 968 of file gwf-mvr.f90.

969  ! -- modules
971  ! -- dummy
972  class(GwfMvrType), intent(inout) :: this
973  ! -- local
974  integer(I4B) :: i
975  !
976  ! -- Assign the package mover pointer if it hasn't been assigned yet
977  do i = 1, size(this%pckMemPaths)
978  if (this%pakmovers(i)%memoryPath == '') then
979  call set_packagemover_pointer(this%pakmovers(i), &
980  trim(this%pckMemPaths(i)))
981  end if
982  end do
subroutine, public set_packagemover_pointer(packagemover, memPath)
Here is the call graph for this function:

◆ check_options()

subroutine gwfmvrmodule::check_options ( class(gwfmvrtype this)

Definition at line 775 of file gwf-mvr.f90.

776  ! -- modules
777  use constantsmodule, only: linelength
779  ! -- dummy
780  class(GwfMvrType) :: this
781  ! -- local
782  character(len=LINELENGTH) :: errmsg
783  !
784  ! -- Check if not exchange mover but model names are specified
785  if (this%iexgmvr == 0 .and. this%imodelnames == 1) then
786  write (errmsg, '(a,a)') &
787  'MODELNAMES cannot be specified unless the '// &
788  'mover package is for an exchange.'
789  call store_error(errmsg)
790  call this%parser%StoreErrorUnit()
791  end if
792  !
793  ! -- Check if exchange mover but model names not specified
794  if (this%iexgmvr /= 0 .and. this%imodelnames == 0) then
795  write (errmsg, '(a,a)') &
796  'MODELNAMES option must be specified because '// &
797  'mover package is for an exchange.'
798  call store_error(errmsg)
799  call this%parser%StoreErrorUnit()
800  end if
integer(i4b), parameter linelength
maximum length of a standard line
Definition: Constants.f90:45
This module contains simulation methods.
Definition: Sim.f90:10
subroutine, public store_error(msg, terminate)
Store an error message.
Definition: Sim.f90:92
subroutine, public store_error_unit(iunit, terminate)
Store the file unit number.
Definition: Sim.f90:168
Here is the call graph for this function:

◆ check_packages()

subroutine gwfmvrmodule::check_packages ( class(gwfmvrtype), intent(inout)  this)

Definition at line 935 of file gwf-mvr.f90.

936  ! -- modules
937  use constantsmodule, only: linelength
940  ! -- dummy
941  class(GwfMvrType), intent(inout) :: this
942  ! -- local
943  character(len=LINELENGTH) :: errmsg
944  integer(I4B) :: i
945  integer(I4B), pointer :: imover_ptr
946  !
947  ! -- Check to make sure mover is activated for each package
948  do i = 1, size(this%pckMemPaths)
949  imover_ptr => null()
950  call mem_setptr(imover_ptr, 'IMOVER', trim(this%pckMemPaths(i)))
951  if (imover_ptr == 0) then
952  write (errmsg, '(a, a, a)') &
953  'ERROR. MODEL AND PACKAGE "', &
954  trim(this%pckMemPaths(i)), &
955  '" DOES NOT HAVE MOVER SPECIFIED IN OPTIONS BLOCK.'
956  call store_error(errmsg)
957  end if
958  end do
959  !
960  ! -- Terminate if errors detected.
961  if (count_errors() > 0) then
962  call this%parser%StoreErrorUnit()
963  end if
integer(i4b) function, public count_errors()
Return number of errors.
Definition: Sim.f90:59
Here is the call graph for this function:

◆ fill_budobj()

subroutine gwfmvrmodule::fill_budobj ( class(gwfmvrtype this)

Definition at line 1125 of file gwf-mvr.f90.

1126  ! -- modules
1127  ! -- dummy
1128  class(GwfMvrType) :: this
1129  ! -- local
1130  integer(I4B) :: idx
1131  integer(I4B) :: i
1132  integer(I4B) :: j
1133  integer(I4B) :: n, n1, n2
1134  integer(I4B) :: ipos
1135  integer(I4B) :: ival
1136  integer(I4B) :: nitems
1137  integer(I4B) :: lloc
1138  integer(I4B) :: istart
1139  integer(I4B) :: istop
1140  real(DP) :: rval
1141  character(len=LENMODELNAME) :: modelname1, modelname2
1142  character(len=LENPACKAGENAME) :: packagename1, packagename2
1143  character(len=LENMEMPATH) :: pckMemPathsDummy
1144  real(DP) :: q
1145  !
1146  ! -- initialize counter
1147  idx = 0
1148 
1149  do i = 1, this%maxpackages
1150  ! -- Retrieve modelname1 and packagename1
1151  lloc = 1
1152  call urword(this%pckMemPaths(i), lloc, istart, istop, 1, ival, rval, -1, -1)
1153  pckmempathsdummy = this%pckMemPaths(i)
1154  modelname1 = pckmempathsdummy(istart:istop)
1155  call urword(this%pckMemPaths(i), lloc, istart, istop, 1, ival, rval, -1, -1)
1156  pckmempathsdummy = this%pckMemPaths(i)
1157  packagename1 = pckmempathsdummy(istart:istop)
1158  do j = 1, this%maxpackages
1159  ! -- Retrieve modelname2 and packagename2
1160  lloc = 1
1161  call urword(this%pckMemPaths(j), lloc, istart, istop, 1, ival, rval, &
1162  -1, -1)
1163  pckmempathsdummy = this%pckMemPaths(j)
1164  modelname2 = pckmempathsdummy(istart:istop)
1165  call urword(this%pckMemPaths(j), lloc, istart, istop, 1, ival, rval, &
1166  -1, -1)
1167  pckmempathsdummy = this%pckMemPaths(j)
1168  packagename2 = pckmempathsdummy(istart:istop)
1169  ipos = (i - 1) * this%maxpackages + j
1170  nitems = this%ientries(ipos)
1171  !
1172  ! -- nitems is the number of mover connections for this
1173  ! model-package / model-package combination. Cycle if none.
1174  idx = idx + 1
1175  call this%budobj%budterm(idx)%reset(nitems)
1176  if (nitems < 1) cycle
1177  do n = 1, this%nmvr
1178  !
1179  ! -- pname1 is provider, pname2 is receiver
1180  ! flow is always negative because it is coming from provider
1181  if (this%pckMemPaths(i) == this%mvr(n)%mem_path_src) then
1182  if (this%pckMemPaths(j) == this%mvr(n)%mem_path_tgt) then
1183  !
1184  ! -- set q to qpactual
1185  q = -this%mvr(n)%qpactual
1186  !
1187  ! -- use mapped index (needed for lake to map outlet to lake number)
1188  n1 = this%mvr(n)%iRchNrSrcMapped
1189  !
1190  ! -- set receiver id to irch2
1191  n2 = this%mvr(n)%iRchNrTgt
1192  !
1193  ! -- check record into budget object
1194  call this%budobj%budterm(idx)%update_term(n1, n2, q)
1195  end if
1196  end if
1197  end do
1198  end do
1199  end do
1200  !
1201  ! --Terms are filled, now accumulate them for this time step
1202  call this%budobj%accumulate_terms()
Here is the call graph for this function:

◆ initialize_movers()

subroutine gwfmvrmodule::initialize_movers ( class(gwfmvrtype this,
integer(i4b)  nr_active_movers 
)

Definition at line 404 of file gwf-mvr.f90.

405  class(GwfMvrType) :: this
406  integer(I4B) :: nr_active_movers
407  ! local
408  integer(I4B) :: i
409 
410  do i = 1, nr_active_movers
411  call this%mvr(i)%set_values(this%gwfmvrperioddata%mname1(i), &
412  this%gwfmvrperioddata%pname1(i), &
413  this%gwfmvrperioddata%id1(i), &
414  this%gwfmvrperioddata%mname2(i), &
415  this%gwfmvrperioddata%pname2(i), &
416  this%gwfmvrperioddata%id2(i), &
417  this%gwfmvrperioddata%imvrtype(i), &
418  this%gwfmvrperioddata%value(i))
419  end do
420 

◆ mvr_ad()

subroutine gwfmvrmodule::mvr_ad ( class(gwfmvrtype this)
private

Definition at line 423 of file gwf-mvr.f90.

424  ! -- dummy
425  class(GwfMvrType) :: this
426  ! -- locals
427  integer(I4B) :: i
428  !
429  do i = 1, this%nmvr
430  call this%mvr(i)%advance()
431  end do

◆ mvr_ar()

subroutine gwfmvrmodule::mvr_ar ( class(gwfmvrtype this)
private

Definition at line 240 of file gwf-mvr.f90.

241  ! -- dummy
242  class(GwfMvrType) :: this
243  !
244  ! -- Print a message identifying the water mover package.
245  write (this%iout, 1) this%inunit
246 1 format(1x, /1x, 'MVR -- WATER MOVER PACKAGE, VERSION 8, 1/29/2016', &
247  ' INPUT READ FROM UNIT ', i0)
248  !
249  ! -- Read and check options
250  call this%read_options()
251  call this%check_options()
252  !
253  ! -- Read options
254  call this%read_dimensions()
255  !
256  ! -- Allocate arrays
257  call this%allocate_arrays()
258  !
259  ! -- Read and check package names
260  call this%read_packages()
261  call this%check_packages()
262  !
263  ! -- Define the budget object to be the size of package names
264  call this%budget%budget_df(this%maxpackages, 'WATER MOVER')
265  call this%budget%set_ibudcsv(this%ibudcsv)
266  !
267  ! -- setup the budget object
268  call this%mvr_setup_budobj()

◆ mvr_bd()

subroutine gwfmvrmodule::mvr_bd ( class(gwfmvrtype this)
private

Definition at line 477 of file gwf-mvr.f90.

478  ! -- dummy
479  class(GwfMvrType) :: this
480  ! -- locals
481  ! -- formats
482  !
483  ! -- set the feature maps; for performance reasons,
484  ! this should only be called for the first time
485  ! step of a stress period in which a new set of
486  ! movers was provided in a period block.
487  if (this%reset_mapped_id) then
488  call this%set_mapped_id()
489  this%reset_mapped_id = .false.
490  end if
491  !
492  ! -- fill the budget object
493  call this%fill_budobj()

◆ mvr_bdsav()

subroutine gwfmvrmodule::mvr_bdsav ( class(gwfmvrtype this,
integer(i4b), intent(in)  icbcfl,
integer(i4b), intent(in)  ibudfl,
integer(i4b), intent(in)  isuppress_output 
)
private

Definition at line 498 of file gwf-mvr.f90.

499  ! -- modules
500  use tdismodule, only: kstp, kper, delt, pertim, totim
501  ! -- dummy
502  class(GwfMvrType) :: this
503  integer(I4B), intent(in) :: icbcfl
504  integer(I4B), intent(in) :: ibudfl
505  integer(I4B), intent(in) :: isuppress_output
506  ! -- locals
507  integer(I4B) :: ibinun
508  ! -- formats
509  character(len=*), parameter :: fmttkk = &
510  "(1X,/1X,A,' PERIOD ',I0,' STEP ',I0)"
511  !
512  ! -- Print the mover flow table
513  if (ibudfl /= 0 .and. this%iprflow /= 0 .and. isuppress_output == 0) then
514  call this%mvr_print_outputtab()
515  end if
516  !
517  ! -- Save the mover flows from the budobj to a mover binary file
518  ibinun = 0
519  if (this%ibudgetout /= 0) then
520  ibinun = this%ibudgetout
521  end if
522  if (icbcfl == 0) ibinun = 0
523  if (isuppress_output /= 0) ibinun = 0
524  if (ibinun > 0) then
525  call this%budobj%save_flows(this%dis, ibinun, kstp, kper, delt, &
526  pertim, totim, this%iout)
527  end if
real(dp), pointer, public pertim
time relative to start of stress period
Definition: tdis.f90:30
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
real(dp), pointer, public delt
length of the current time step
Definition: tdis.f90:29

◆ mvr_cc()

subroutine gwfmvrmodule::mvr_cc ( class(gwfmvrtype this,
integer(i4b), intent(in)  innertot,
integer(i4b), intent(in)  kiter,
integer(i4b), intent(in)  iend,
integer(i4b), intent(in)  icnvgmod,
character(len=lenpakloc), intent(inout)  cpak,
integer(i4b), intent(inout)  ipak,
real(dp), intent(inout)  dpak 
)
private

Definition at line 450 of file gwf-mvr.f90.

451  ! -- dummy
452  class(GwfMvrType) :: this
453  integer(I4B), intent(in) :: innertot
454  integer(I4B), intent(in) :: kiter
455  integer(I4B), intent(in) :: iend
456  integer(I4B), intent(in) :: icnvgmod
457  character(len=LENPAKLOC), intent(inout) :: cpak
458  integer(I4B), intent(inout) :: ipak
459  real(DP), intent(inout) :: dpak
460  ! -- formats
461  character(len=*), parameter :: fmtmvrcnvg = &
462  "(/,1x,'MOVER PACKAGE REQUIRES AT LEAST TWO OUTER ITERATIONS. CONVERGE &
463  &FLAG HAS BEEN RESET TO FALSE.')"
464  !
465  ! -- If there are active movers, then at least 2 outers required
466  if (this%nmvr > 0) then
467  if (icnvgmod == 1 .and. kiter == 1) then
468  dpak = dnodata
469  cpak = trim(this%packName)
470  write (this%iout, fmtmvrcnvg)
471  end if
472  end if

◆ mvr_cr()

subroutine, public gwfmvrmodule::mvr_cr ( type(gwfmvrtype), pointer  mvrobj,
character(len=*), intent(in)  name_parent,
integer(i4b), intent(in)  inunit,
integer(i4b), intent(in)  iout,
class(disbasetype), intent(in), pointer  dis,
integer(i4b), optional  iexgmvr 
)

Definition at line 185 of file gwf-mvr.f90.

186  ! -- dummy
187  type(GwfMvrType), pointer :: mvrobj
188  character(len=*), intent(in) :: name_parent
189  integer(I4B), intent(in) :: inunit
190  integer(I4B), intent(in) :: iout
191  class(DisBaseType), pointer, intent(in) :: dis
192  integer(I4B), optional :: iexgmvr
193  !
194  ! -- Create the object
195  allocate (mvrobj)
196  !
197  ! -- Init
198  call mvrobj%mvr_init(name_parent, inunit, iout, dis, iexgmvr)
Here is the caller graph for this function:

◆ mvr_da()

subroutine gwfmvrmodule::mvr_da ( class(gwfmvrtype this)

Definition at line 632 of file gwf-mvr.f90.

633  ! -- modules
634  use constantsmodule, only: done
636  ! -- dummy
637  class(GwfMvrType) :: this
638  !
639  ! -- Arrays
640  if (this%inunit > 0) then
641  call mem_deallocate(this%ientries)
642  deallocate (this%mvr)
643  deallocate (this%pckMemPaths)
644  deallocate (this%paknames)
645  deallocate (this%pakmovers)
646  !
647  ! -- allocate the perioddata object
648  call this%gwfmvrperioddata%destroy()
649  deallocate (this%gwfmvrperioddata)
650  nullify (this%gwfmvrperioddata)
651  !
652  ! -- budget object
653  call this%budget%budget_da()
654  deallocate (this%budget)
655  !
656  ! -- budobj
657  call this%budobj%budgetobject_da()
658  deallocate (this%budobj)
659  nullify (this%budobj)
660  !
661  ! -- output table object
662  if (associated(this%outputtab)) then
663  call this%outputtab%table_da()
664  deallocate (this%outputtab)
665  nullify (this%outputtab)
666  end if
667  end if
668  !
669  ! -- Scalars
670  call mem_deallocate(this%reset_mapped_id)
671  call mem_deallocate(this%ibudgetout)
672  call mem_deallocate(this%ibudcsv)
673  call mem_deallocate(this%maxmvr)
674  call mem_deallocate(this%maxpackages)
675  call mem_deallocate(this%maxcomb)
676  call mem_deallocate(this%nmvr)
677  call mem_deallocate(this%iexgmvr)
678  call mem_deallocate(this%imodelnames)
679  !
680  ! -- deallocate scalars in NumericalPackageType
681  call this%NumericalPackageType%da()

◆ mvr_fc()

subroutine gwfmvrmodule::mvr_fc ( class(gwfmvrtype this)
private

Definition at line 436 of file gwf-mvr.f90.

437  class(GwfMvrType) :: this
438  ! local
439  integer(I4B) :: i
440 
441  do i = 1, this%nmvr
442  call this%mvr(i)%update_provider()
443  call this%mvr(i)%update_receiver()
444  end do
445 

◆ mvr_init()

subroutine gwfmvrmodule::mvr_init ( class(gwfmvrtype this,
character(len=*), intent(in)  name_parent,
integer(i4b), intent(in)  inunit,
integer(i4b), intent(in)  iout,
class(disbasetype), intent(in), pointer  dis,
integer(i4b), optional  iexgmvr 
)
private

Definition at line 201 of file gwf-mvr.f90.

202  class(GwfMvrType) :: this
203  character(len=*), intent(in) :: name_parent
204  integer(I4B), intent(in) :: inunit
205  integer(I4B), intent(in) :: iout
206  class(DisBaseType), pointer, intent(in) :: dis
207  integer(I4B), optional :: iexgmvr
208  !
209  ! -- create name and memory paths. name_parent will either be model name or the
210  ! exchange name.
211  call this%set_names(1, name_parent, 'MVR', 'MVR')
212  !
213  ! -- Allocate scalars
214  call this%allocate_scalars()
215  !
216  ! -- Set pointer to dis
217  this%dis => dis
218  !
219  ! -- Set variables
220  this%inunit = inunit
221  this%iout = iout
222  !
223  ! -- Set iexgmvr
224  if (present(iexgmvr)) this%iexgmvr = iexgmvr
225  !
226  ! -- Create the budget object
227  if (inunit > 0) then
228  call budget_cr(this%budget, this%memoryPath)
229  !
230  ! -- Initialize block parser
231  call this%parser%Initialize(this%inunit, this%iout)
232  end if
233  !
234  ! -- instantiate the budget object
235  call budgetobject_cr(this%budobj, 'WATER MOVER')
Here is the call graph for this function:

◆ mvr_ot_bdsummary()

subroutine gwfmvrmodule::mvr_ot_bdsummary ( class(gwfmvrtype this,
integer(i4b), intent(in)  ibudfl 
)
private

Definition at line 570 of file gwf-mvr.f90.

571  ! -- modules
572  use tdismodule, only: kstp, kper, delt, totim
573  ! -- dummy
574  class(GwfMvrType) :: this
575  integer(I4B), intent(in) :: ibudfl
576  ! -- locals
577  character(len=LENMEMPATH) :: pckMemPath
578  integer(I4B) :: i, j
579  real(DP), allocatable, dimension(:) :: ratin, ratout
580  !
581  ! -- Allocate and initialize ratin/ratout
582  allocate (ratin(this%maxpackages), ratout(this%maxpackages))
583  do j = 1, this%maxpackages
584  ratin(j) = dzero
585  ratout(j) = dzero
586  end do
587  !
588  ! -- Accumulate the rates
589  do i = 1, this%nmvr
590  do j = 1, this%maxpackages
591  if (this%pckMemPaths(j) == this%mvr(i)%mem_path_src) then
592  ratin(j) = ratin(j) + this%mvr(i)%qpactual
593  end if
594  if (this%pckMemPaths(j) == this%mvr(i)%mem_path_tgt) then
595  ratout(j) = ratout(j) + this%mvr(i)%qpactual
596  end if
597  end do
598  end do
599  !
600  ! -- Send rates to budget object
601  call this%budget%reset()
602  do j = 1, this%maxpackages
603  if ((this%iexgmvr) == 1) then
604  pckmempath = this%pckMemPaths(j)
605  else
606  pckmempath = this%paknames(j)
607  end if
608  call this%budget%addentry(ratin(j), ratout(j), delt, pckmempath)
609  end do
610  !
611  ! -- Write the budget
612  call this%budget%finalize_step(delt)
613  if (ibudfl /= 0) then
614  call this%budget%budget_ot(kstp, kper, this%iout)
615  end if
616  !
617  ! -- Write budget csv
618  call this%budget%writecsv(totim)
619  !
620  ! -- Deallocate
621  deallocate (ratin, ratout)
622  !
623  ! -- Output mvr budget
624  ! Not using budobj write_table here because it would result
625  ! in a table that has one entry. A custom table looks
626  ! better here with a row for each package.
627  !call this%budobj%write_budtable(kstp, kper, this%iout)

◆ mvr_ot_printflow()

subroutine gwfmvrmodule::mvr_ot_printflow ( class(gwfmvrtype this,
integer(i4b), intent(in)  icbcfl,
integer(i4b), intent(in)  ibudfl 
)

Definition at line 556 of file gwf-mvr.f90.

557  ! -- dummy
558  class(GwfMvrType) :: this
559  integer(I4B), intent(in) :: icbcfl
560  integer(I4B), intent(in) :: ibudfl
561  !
562  ! -- Print the mover flow table
563  if (ibudfl /= 0 .and. this%iprflow /= 0) then
564  call this%mvr_print_outputtab()
565  end if

◆ mvr_ot_saveflow()

subroutine gwfmvrmodule::mvr_ot_saveflow ( class(gwfmvrtype this,
integer(i4b), intent(in)  icbcfl,
integer(i4b), intent(in)  ibudfl 
)

Definition at line 532 of file gwf-mvr.f90.

533  ! -- modules
534  use tdismodule, only: kstp, kper, delt, pertim, totim
535  ! -- dummy
536  class(GwfMvrType) :: this
537  integer(I4B), intent(in) :: icbcfl
538  integer(I4B), intent(in) :: ibudfl
539  ! -- locals
540  integer(I4B) :: ibinun
541  !
542  ! -- Save the mover flows from the budobj to a mover binary file
543  ibinun = 0
544  if (this%ibudgetout /= 0) then
545  ibinun = this%ibudgetout
546  end if
547  if (icbcfl == 0) ibinun = 0
548  if (ibinun > 0) then
549  call this%budobj%save_flows(this%dis, ibinun, kstp, kper, delt, &
550  pertim, totim, this%iout)
551  end if

◆ mvr_print_outputtab()

subroutine gwfmvrmodule::mvr_print_outputtab ( class(gwfmvrtype), intent(inout)  this)
private

Definition at line 1250 of file gwf-mvr.f90.

1251  ! -- module
1252  use tdismodule, only: kstp, kper
1253  ! -- dummy
1254  class(GwfMvrType), intent(inout) :: this
1255  ! -- local
1256  character(len=LINELENGTH) :: title
1257  integer(I4B) :: i
1258  !
1259  ! -- set table kstp and kper
1260  call this%outputtab%set_kstpkper(kstp, kper)
1261  !
1262  ! -- Add terms and print the table
1263  title = 'WATER MOVER PACKAGE ('//trim(this%packName)// &
1264  ') FLOW RATES'
1265  call this%outputtab%set_title(title)
1266  call this%outputtab%set_maxbound(this%nmvr)
1267  do i = 1, this%nmvr
1268  call this%outputtab%add_term(i)
1269  call this%outputtab%add_term(this%mvr(i)%mem_path_src)
1270  call this%outputtab%add_term(this%mvr(i)%iRchNrSrc)
1271  call this%outputtab%add_term(this%mvr(i)%qavailable)
1272  call this%outputtab%add_term(this%mvr(i)%qpactual)
1273  call this%outputtab%add_term(this%mvr(i)%mem_path_tgt)
1274  call this%outputtab%add_term(this%mvr(i)%iRchNrTgt)
1275  end do

◆ mvr_rp()

subroutine gwfmvrmodule::mvr_rp ( class(gwfmvrtype), intent(inout)  this)
private

Read itmp and read new boundaries if itmp > 0

Definition at line 275 of file gwf-mvr.f90.

276  ! -- modules
277  use constantsmodule, only: linelength
278  use tdismodule, only: kper, nper
280  use arrayhandlersmodule, only: ifind
281  ! -- dummy
282  class(GwfMvrType), intent(inout) :: this
283  ! -- local
284  integer(I4B) :: i, ierr, nlist, ipos
285  integer(I4B) :: ii, jj
286  logical :: isfound
287  character(len=LINELENGTH) :: line, errmsg
288  character(len=LENMODELNAME) :: mname
289  ! -- formats
290  character(len=*), parameter :: fmtblkerr = &
291  &"('Error. Looking for BEGIN PERIOD iper. Found ', a, ' instead.')"
292  character(len=*), parameter :: fmtlsp = &
293  &"(1X,/1X,'REUSING ',A,'S FROM LAST STRESS PERIOD')"
294  character(len=*), parameter :: fmtnbd = &
295  "(1X,/1X,'THE NUMBER OF ACTIVE ',A,'S (',I6, &
296  &') IS GREATER THAN MAXIMUM(',I6,')')"
297  !
298  ! -- Set ionper to the stress period number for which a new block of data
299  ! will be read.
300  if (this%inunit == 0) return
301  !
302  ! -- get stress period data
303  if (this%ionper < kper) then
304  !
305  ! -- get period block
306  call this%parser%GetBlock('PERIOD', isfound, ierr, &
307  supportopenclose=.true., &
308  blockrequired=.false.)
309  if (isfound) then
310  !
311  ! -- read ionper and check for increasing period numbers
312  call this%read_check_ionper()
313  else
314  !
315  ! -- PERIOD block not found
316  if (ierr < 0) then
317  ! -- End of file found; data applies for remainder of simulation.
318  this%ionper = nper + 1
319  else
320  ! -- Found invalid block
321  call this%parser%GetCurrentLine(line)
322  write (errmsg, fmtblkerr) adjustl(trim(line))
323  call store_error(errmsg)
324  call this%parser%StoreErrorUnit()
325  end if
326  end if
327  end if
328  !
329  ! -- read data if ionper == kper
330  if (this%ionper == kper) then
331  write (this%iout, '(/,2x,a,i0)') 'READING WATER MOVERS FOR PERIOD ', kper
332  nlist = -1
333  i = 1
334  this%reset_mapped_id = .true.
335  !
336  ! -- set mname to '' if this is an exchange mover, or to the model name
337  if (this%iexgmvr == 0) then
338  mname = this%name_model
339  else
340  mname = ''
341  end if
342  !
343  ! -- Assign a pointer to the package mover object. The pointer assignment
344  ! will happen only the first time
345  call this%assign_packagemovers()
346  !
347  ! -- Call the period data input reader
348  call this%gwfmvrperioddata%read_from_parser(this%parser, nlist, mname)
349  !
350  ! -- Process the input data into the individual mover objects
351  call this%initialize_movers(nlist)
352  !
353  ! -- assign the pointers
354  do i = 1, nlist
355  call this%mvr(i)%prepare(this%parser%iuactive, &
356  this%pckMemPaths, &
357  this%pakmovers)
358  if (this%iprpak == 1) call this%mvr(i)%echo(this%iout)
359  end do
360  write (this%iout, '(/,1x,a,1x,i6,/)') 'END OF DATA FOR PERIOD', kper
361  !
362  ! -- Set the number of movers for this period to nlist
363  this%nmvr = nlist
364  write (this%iout, '(4x, i0, a, i0)') this%nmvr, &
365  ' MOVERS READ FOR PERIOD ', kper
366  !
367  ! -- Check to make sure all providers and receivers are properly stored
368  do i = 1, this%nmvr
369  ipos = ifind(this%pckMemPaths, this%mvr(i)%mem_path_src)
370  if (ipos < 1) then
371  write (errmsg, '(a,a,a)') 'Provider ', &
372  trim(this%mvr(i)%mem_path_src), ' not listed in packages block.'
373  call store_error(errmsg)
374  end if
375  ipos = ifind(this%pckMemPaths, this%mvr(i)%mem_path_tgt)
376  if (ipos < 1) then
377  write (errmsg, '(a,a,a)') 'Receiver ', &
378  trim(this%mvr(i)%mem_path_tgt), ' not listed in packages block.'
379  call store_error(errmsg)
380  end if
381  end do
382  if (count_errors() > 0) then
383  call this%parser%StoreErrorUnit()
384  end if
385  !
386  ! -- reset ientries
387  do i = 1, this%maxcomb
388  this%ientries(i) = 0
389  end do
390  !
391  ! --
392  do i = 1, this%nmvr
393  ii = ifind(this%pckMemPaths, this%mvr(i)%mem_path_src)
394  jj = ifind(this%pckMemPaths, this%mvr(i)%mem_path_tgt)
395  ipos = (ii - 1) * this%maxpackages + jj
396  this%ientries(ipos) = this%ientries(ipos) + 1
397  end do
398  else
399  write (this%iout, fmtlsp) 'MVR'
400  !
401  end if
integer(i4b), pointer, public nper
number of stress period
Definition: tdis.f90:21
Here is the call graph for this function:

◆ mvr_setup_budobj()

subroutine gwfmvrmodule::mvr_setup_budobj ( class(gwfmvrtype this)

Definition at line 1064 of file gwf-mvr.f90.

1065  ! -- modules
1066  use constantsmodule, only: lenbudtxt
1068  ! -- dummy
1069  class(GwfMvrType) :: this
1070  ! -- local
1071  integer(I4B) :: nbudterm
1072  integer(I4B) :: ncv
1073  integer(I4B) :: i
1074  integer(I4B) :: j
1075  integer(I4B) :: naux
1076  character(len=LENMODELNAME) :: modelname1, modelname2
1077  character(len=LENPACKAGENAME) :: packagename1, packagename2
1078  integer(I4B) :: maxlist
1079  integer(I4B) :: idx
1080  character(len=LENBUDTXT) :: text
1081  !
1082  ! -- Determine the number of mover budget terms. These are fixed for
1083  ! the simulation and cannot change. A separate term is required
1084  ! for each possible provider/receiver combination.
1085  nbudterm = 0
1086  do i = 1, this%maxpackages
1087  do j = 1, this%maxpackages
1088  nbudterm = nbudterm + 1
1089  end do
1090  end do
1091  !
1092  ! -- Number of control volumes is set to be 0, because there aren't
1093  ! any for the mover
1094  ncv = 0
1095  !
1096  ! -- set up budobj
1097  call this%budobj%budgetobject_df(ncv, nbudterm, 0, 0)
1098  idx = 0
1099  !
1100  ! -- Go through and set up each budget term
1101  text = ' MOVER-FLOW'
1102  maxlist = this%maxmvr
1103  naux = 0
1104  do i = 1, this%maxpackages
1105 
1106  call split_mem_path(this%pckMemPaths(i), modelname1, packagename1)
1107 
1108  do j = 1, this%maxpackages
1109 
1110  idx = idx + 1
1111  call split_mem_path(this%pckMemPaths(j), modelname2, packagename2)
1112  call this%budobj%budterm(idx)%initialize(text, &
1113  modelname1, &
1114  packagename1, &
1115  modelname2, &
1116  packagename2, &
1117  maxlist, .false., .false., &
1118  naux)
1119  end do
1120  end do
integer(i4b), parameter lenbudtxt
maximum length of a budget component names
Definition: Constants.f90:37
subroutine split_mem_path(mem_path, component, subcomponent)
Split the memory path into component(s)
Here is the call graph for this function:

◆ mvr_setup_outputtab()

subroutine gwfmvrmodule::mvr_setup_outputtab ( class(gwfmvrtype), intent(inout)  this)
private

Definition at line 1207 of file gwf-mvr.f90.

1208  ! -- dummy
1209  class(GwfMvrType), intent(inout) :: this
1210  ! -- local
1211  character(len=LINELENGTH) :: title
1212  character(len=LINELENGTH) :: text
1213  integer(I4B) :: ntabcol
1214  integer(I4B) :: ilen
1215  !
1216  ! -- allocate and initialize the output table
1217  if (this%iprflow /= 0) then
1218  !
1219  ! -- dimension table
1220  ntabcol = 7
1221  !
1222  ! -- initialize the output table object
1223  title = 'WATER MOVER PACKAGE ('//trim(this%packName)// &
1224  ') FLOW RATES'
1225  call table_cr(this%outputtab, this%packName, title)
1226  call this%outputtab%table_df(this%maxmvr, ntabcol, this%iout, &
1227  transient=.true.)
1228  text = 'NUMBER'
1229  call this%outputtab%initialize_column(text, 10, alignment=tabcenter)
1230  text = 'PROVIDER LOCATION'
1231  ilen = lenmodelname + lenpackagename + 1
1232  call this%outputtab%initialize_column(text, ilen)
1233  text = 'PROVIDER ID'
1234  call this%outputtab%initialize_column(text, 10)
1235  text = 'AVAILABLE RATE'
1236  call this%outputtab%initialize_column(text, 10)
1237  text = 'PROVIDED RATE'
1238  call this%outputtab%initialize_column(text, 10)
1239  text = 'RECEIVER LOCATION'
1240  ilen = lenmodelname + lenpackagename + 1
1241  call this%outputtab%initialize_column(text, ilen)
1242  text = 'RECEIVER ID'
1243  call this%outputtab%initialize_column(text, 10)
1244  !
1245  end if
Here is the call graph for this function:

◆ read_dimensions()

subroutine gwfmvrmodule::read_dimensions ( class(gwfmvrtype), intent(inout)  this)

Definition at line 805 of file gwf-mvr.f90.

806  ! -- modules
807  use constantsmodule, only: linelength
809  ! -- dummy
810  class(GwfMvrType), intent(inout) :: this
811  ! -- local
812  character(len=LINELENGTH) :: errmsg, keyword
813  integer(I4B) :: ierr
814  logical :: isfound, endOfBlock
815  integer(I4B) :: i
816  integer(I4B) :: j
817  !
818  ! -- get dimensions block
819  call this%parser%GetBlock('DIMENSIONS', isfound, ierr, &
820  supportopenclose=.true.)
821  !
822  ! -- parse dimensions block if detected
823  if (isfound) then
824  write (this%iout, '(/1x,a)') 'PROCESSING MVR DIMENSIONS'
825  do
826  call this%parser%GetNextLine(endofblock)
827  if (endofblock) exit
828  call this%parser%GetStringCaps(keyword)
829  select case (keyword)
830  case ('MAXMVR')
831  this%maxmvr = this%parser%GetInteger()
832  write (this%iout, '(4x,a,i0)') 'MAXMVR = ', this%maxmvr
833  case ('MAXPACKAGES')
834  this%maxpackages = this%parser%GetInteger()
835  write (this%iout, '(4x,a,i0)') 'MAXPACKAGES = ', this%maxpackages
836  case default
837  write (errmsg, '(a,a)') &
838  'Unknown MVR dimension: ', trim(keyword)
839  call store_error(errmsg)
840  call this%parser%StoreErrorUnit()
841  end select
842  end do
843  write (this%iout, '(1x,a)') 'END OF MVR DIMENSIONS'
844  else
845  call store_error('Required DIMENSIONS block not found.')
846  call this%parser%StoreErrorUnit()
847  end if
848  !
849  ! -- calculate maximum number of combinations
850  this%maxcomb = 0
851  do i = 1, this%maxpackages
852  do j = 1, this%maxpackages
853  this%maxcomb = this%maxcomb + 1
854  end do
855  end do
856  !
857  ! -- verify dimensions were set
858  if (this%maxmvr < 0) then
859  write (errmsg, '(a)') &
860  'MAXMVR was not specified or was specified incorrectly.'
861  call store_error(errmsg)
862  call this%parser%StoreErrorUnit()
863  end if
864  if (this%maxpackages < 0) then
865  write (errmsg, '(a)') &
866  'MAXPACKAGES was not specified or was specified incorrectly.'
867  call store_error(errmsg)
868  call this%parser%StoreErrorUnit()
869  end if
Here is the call graph for this function:

◆ read_options()

subroutine gwfmvrmodule::read_options ( class(gwfmvrtype this)

Definition at line 686 of file gwf-mvr.f90.

687  ! -- modules
688  use constantsmodule, only: linelength, dzero, done
689  use openspecmodule, only: access, form
692  ! -- dummy
693  class(GwfMvrType) :: this
694  ! -- local
695  character(len=LINELENGTH) :: errmsg
696  character(len=MAXCHARLEN) :: fname, keyword
697  integer(I4B) :: ierr
698  logical :: isfound, endOfBlock
699  ! -- formats
700  character(len=*), parameter :: fmtmvrbin = &
701  "(4x, 'MVR ', 1x, a, 1x, ' WILL BE SAVED TO FILE: ', a, /4x, 'OPENED ON &
702  &UNIT: ', I0)"
703  !
704  ! -- get options block
705  call this%parser%GetBlock('OPTIONS', isfound, ierr, &
706  supportopenclose=.true., blockrequired=.false.)
707  !
708  ! -- parse options block if detected
709  if (isfound) then
710  write (this%iout, '(1x,a)') 'PROCESSING MVR OPTIONS'
711  do
712  call this%parser%GetNextLine(endofblock)
713  if (endofblock) exit
714  call this%parser%GetStringCaps(keyword)
715  select case (keyword)
716  case ('BUDGET')
717  if (this%suppress_fileout) cycle
718  call this%parser%GetStringCaps(keyword)
719  if (keyword == 'FILEOUT') then
720  call this%parser%GetString(fname)
721  this%ibudgetout = getunit()
722  call openfile(this%ibudgetout, this%iout, fname, 'DATA(BINARY)', &
723  form, access, 'REPLACE')
724  write (this%iout, fmtmvrbin) 'BUDGET', trim(adjustl(fname)), &
725  this%ibudgetout
726  else
727  call store_error('OPTIONAL BUDGET KEYWORD MUST &
728  &BE FOLLOWED BY FILEOUT')
729  end if
730  case ('BUDGETCSV')
731  if (this%suppress_fileout) cycle
732  call this%parser%GetStringCaps(keyword)
733  if (keyword == 'FILEOUT') then
734  call this%parser%GetString(fname)
735  this%ibudcsv = getunit()
736  call openfile(this%ibudcsv, this%iout, fname, 'CSV', &
737  filstat_opt='REPLACE')
738  write (this%iout, fmtmvrbin) 'BUDGET CSV', trim(adjustl(fname)), &
739  this%ibudcsv
740  else
741  call store_error('OPTIONAL BUDGETCSV KEYWORD MUST BE FOLLOWED BY &
742  &FILEOUT')
743  end if
744  case ('PRINT_INPUT')
745  this%iprpak = 1
746  write (this%iout, '(4x,a)') 'WATER MOVER INPUT '// &
747  'WILL BE PRINTED TO LIST FILE.'
748  case ('PRINT_FLOWS')
749  this%iprflow = 1
750  write (this%iout, '(4x,a)') 'LISTS OF WATER MOVER FLOWS '// &
751  'WILL BE PRINTED TO LIST FILE.'
752  case ('MODELNAMES')
753  this%imodelnames = 1
754  write (this%iout, '(4x,a)') 'ALL PACKAGE NAMES ARE PRECEDED '// &
755  'BY THE NAME OF THE MODEL CONTAINING THE PACKAGE.'
756  if (this%iexgmvr == 0) then
757  write (errmsg, '(a,a)') &
758  'MODELNAMES cannot be specified unless the '// &
759  'mover package is for an exchange.'
760  call store_error(errmsg)
761  call this%parser%StoreErrorUnit()
762  end if
763  case default
764  write (errmsg, '(a,a)') 'Unknown MVR option: ', trim(keyword)
765  call store_error(errmsg)
766  call this%parser%StoreErrorUnit()
767  end select
768  end do
769  write (this%iout, '(1x,a)') 'END OF MVR OPTIONS'
770  end if
integer(i4b) function, public getunit()
Get a free unit number.
subroutine, public openfile(iu, iout, fname, ftype, fmtarg_opt, accarg_opt, filstat_opt, mode_opt)
Open a file.
Definition: InputOutput.f90:30
subroutine, public urword(line, icol, istart, istop, ncode, n, r, iout, in)
Extract a word from a string.
character(len=20) access
Definition: OpenSpec.f90:7
character(len=20) form
Definition: OpenSpec.f90:7
Here is the call graph for this function:

◆ read_packages()

subroutine gwfmvrmodule::read_packages ( class(gwfmvrtype), intent(inout)  this)

Definition at line 874 of file gwf-mvr.f90.

875  ! -- modules
876  use constantsmodule, only: linelength
879  ! -- dummy
880  class(GwfMvrType), intent(inout) :: this
881  ! -- local
882  character(len=LINELENGTH) :: errmsg, word, word1, word2
883  integer(I4B) :: lloc, ierr
884  integer(I4B) :: npak
885  logical :: isfound, endOfBlock
886  !
887  ! -- get packages block
888  call this%parser%GetBlock('PACKAGES', isfound, ierr, &
889  supportopenclose=.true.)
890  !
891  ! -- parse packages block
892  if (isfound) then
893  write (this%iout, '(/1x,a)') 'PROCESSING MVR PACKAGES'
894  npak = 0
895  do
896  call this%parser%GetNextLine(endofblock)
897  if (endofblock) exit
898  call this%parser%GetStringCaps(word1)
899  lloc = 1
900  npak = npak + 1
901  if (npak > this%maxpackages) then
902  call store_error('ERROR. MAXPACKAGES NOT SET LARGE ENOUGH.')
903  call this%parser%StoreErrorUnit()
904  end if
905  if (this%iexgmvr == 0) then
906  this%pckMemPaths(npak) = create_mem_path(this%name_model, word1)
907  word = word1
908  else
909  call this%parser%GetStringCaps(word2)
910  this%pckMemPaths(npak) = create_mem_path(word1, word2)
911  word = word2
912  end if
913  this%paknames(npak) = trim(word)
914  write (this%iout, '(3x,a,a)') 'INCLUDING PACKAGE: ', &
915  trim(this%pckMemPaths(npak))
916  end do
917  write (this%iout, '(1x,a)') 'END OF MVR PACKAGES'
918  else
919  call store_error('ERROR. REQUIRED PACKAGES BLOCK NOT FOUND.')
920  call this%parser%StoreErrorUnit()
921  end if
922  !
923  ! -- Check to make sure npak = this%maxpackages
924  if (npak /= this%maxpackages) then
925  write (errmsg, '(a, i0, a, i0, a)') &
926  'ERROR. NUMBER OF PACKAGES (', npak, ') DOES NOT EQUAL '// &
927  'MAXPACKAGES (', this%maxpackages, ').'
928  call store_error(errmsg)
929  call this%parser%StoreErrorUnit()
930  end if
character(len=lenmempath) function create_mem_path(component, subcomponent, context)
returns the path to the memory object
Here is the call graph for this function:

◆ set_mapped_id()

subroutine gwfmvrmodule::set_mapped_id ( class(gwfmvrtype this)

For the budget output, we don't write outlet number, instead we write the lake number. Normally the receiver number is the same as the feature number provided by the user. For moving water from a lake, the user specifies the outlet number, not the lake number, in the mover package. The iRchNrSrcMapped variable contains the lake number, not the outlet number, and is written to the budget files. For other packages, the iRchNrSrcMapped value is simply the well number, the stream reach, or the uzf cell number. This routine needs to be called each time a new set of movers is read. It can't be called from within mvr_rp because the iprmap isn't updated by lake until lak_rp, which is called after mvr_rp.

Definition at line 1294 of file gwf-mvr.f90.

1295  ! -- dummy
1296  class(GwfMvrType) :: this
1297  ! -- locals
1298  integer(I4B) :: i, mapped_id
1299  class(PackageMoverType), pointer :: pkg_mvr
1300  ! -- formats
1301  !
1302  ! -- set the feature maps
1303  allocate (pkg_mvr)
1304  do i = 1, this%nmvr
1305  call set_packagemover_pointer(pkg_mvr, this%mvr(i)%mem_path_src)
1306  mapped_id = pkg_mvr%iprmap(this%mvr(i)%iRchNrSrc)
1307  this%mvr(i)%iRchNrSrcMapped = mapped_id
1308  end do
1309  deallocate (pkg_mvr)
Here is the call graph for this function: