diff --git a/make/makefile b/make/makefile index c61dd6fa2c7..137466623fd 100644 --- a/make/makefile +++ b/make/makefile @@ -225,6 +225,7 @@ $(OBJDIR)/CellWithNbrs.o \ $(OBJDIR)/NumericalExchange.o \ $(OBJDIR)/tsp1ssm1.o \ $(OBJDIR)/tsp1oc1.o \ +$(OBJDIR)/tsp1mvt1.o \ $(OBJDIR)/tsp1ic1.o \ $(OBJDIR)/tsp1adv1.o \ $(OBJDIR)/gwf3disv8.o \ @@ -255,7 +256,6 @@ $(OBJDIR)/gwt1src1.o \ $(OBJDIR)/gwt1sft1.o \ $(OBJDIR)/gwt1obs1.o \ $(OBJDIR)/gwt1mwt1.o \ -$(OBJDIR)/gwt1mvt1.o \ $(OBJDIR)/gwt1lkt1.o \ $(OBJDIR)/gwt1ist1.o \ $(OBJDIR)/gwt1dsp1.o \ diff --git a/msvs/mf6core.vfproj b/msvs/mf6core.vfproj index 624e667eb4e..a70e28355f0 100644 --- a/msvs/mf6core.vfproj +++ b/msvs/mf6core.vfproj @@ -174,7 +174,6 @@ - @@ -207,6 +206,7 @@ + diff --git a/src/Exchange/GwtGwtExchange.f90 b/src/Exchange/GwtGwtExchange.f90 index faf7d1345ba..bf93edda837 100644 --- a/src/Exchange/GwtGwtExchange.f90 +++ b/src/Exchange/GwtGwtExchange.f90 @@ -22,7 +22,7 @@ module GwtGwtExchangeModule use VirtualModelModule, only: get_virtual_model use DisConnExchangeModule, only: DisConnExchangeType use GwtModule, only: GwtModelType - use GwtMvtModule, only: GwtMvtType + use TspMvtModule, only: TspMvtType use ObserveModule, only: ObserveType use ObsModule, only: ObsType use SimModule, only: count_errors, store_error, & @@ -66,7 +66,7 @@ module GwtGwtExchangeModule ! ! -- Mover transport package integer(I4B), pointer :: inmvt => null() !< unit number for mover transport (0 if off) - type(GwtMvtType), pointer :: mvt => null() !< water mover object + type(TspMvtType), pointer :: mvt => null() !< water mover object ! ! -- Observation package integer(I4B), pointer :: inobs => null() !< unit number for GWT-GWT observations @@ -937,7 +937,7 @@ end function parse_option !< subroutine read_mvt(this, iout) ! -- modules - use GwtMvtModule, only: mvt_cr + use TspMvtModule, only: mvt_cr ! -- dummy class(GwtExchangeType) :: this !< GwtExchangeType integer(I4B), intent(in) :: iout @@ -947,6 +947,7 @@ subroutine read_mvt(this, iout) ! for gwtmodel1 so that a call to save flows has an associated dis ! object. call mvt_cr(this%mvt, this%name, this%inmvt, iout, this%gwtmodel1%fmi, & + this%gwtmodel1%eqnsclfac, & gwfmodelname1=this%gwfmodelname1, & gwfmodelname2=this%gwfmodelname2, & fmi2=this%gwtmodel2%fmi) diff --git a/src/Model/GroundWaterTransport/gwt1.f90 b/src/Model/GroundWaterTransport/gwt1.f90 index 5c41bb23911..b1cc864d250 100644 --- a/src/Model/GroundWaterTransport/gwt1.f90 +++ b/src/Model/GroundWaterTransport/gwt1.f90 @@ -16,8 +16,6 @@ module GwtModule use BaseModelModule, only: BaseModelType use BndModule, only: BndType, AddBndToList, GetBndFromList use GwtDspModule, only: GwtDspType - use TspSsmModule, only: TspSsmType - use GwtMvtModule, only: GwtMvtType use GwtMstModule, only: GwtMstType use GwtObsModule, only: GwtObsType use BudgetModule, only: BudgetType @@ -37,9 +35,7 @@ module GwtModule type(GwtMstType), pointer :: mst => null() ! mass storage and transfer package type(GwtDspType), pointer :: dsp => null() ! dispersion package - type(GwtMvtType), pointer :: mvt => null() ! mover transport package type(GwtObsType), pointer :: obs => null() ! observation package - integer(I4B), pointer :: inmvt => null() ! unit number MVT integer(I4B), pointer :: inmst => null() ! unit number MST integer(I4B), pointer :: indsp => null() ! DSP enabled flag integer(I4B), pointer :: inobs => null() ! unit number OBS @@ -877,7 +873,6 @@ subroutine gwt_da(this) ! -- Scalars call mem_deallocate(this%indsp) call mem_deallocate(this%inmst) - call mem_deallocate(this%inmvt) call mem_deallocate(this%inobs) ! ! -- Parent class members @@ -962,12 +957,10 @@ subroutine allocate_scalars(this, modelname) call this%allocate_tsp_scalars(modelname) ! ! -- allocate members that are part of model class - call mem_allocate(this%inmvt, 'INMVT', this%memoryPath) call mem_allocate(this%inmst, 'INMST', this%memoryPath) call mem_allocate(this%indsp, 'INDSP', this%memoryPath) call mem_allocate(this%inobs, 'INOBS', this%memoryPath) ! - this%inmvt = 0 this%inmst = 0 this%indsp = 0 this%inobs = 0 @@ -1138,7 +1131,6 @@ subroutine create_gwt_packages(this, indis) use SimVariablesModule, only: idm_context use GwtMstModule, only: mst_cr use GwtDspModule, only: dsp_cr - use GwtMvtModule, only: mvt_cr use GwtObsModule, only: gwt_obs_cr ! -- dummy class(GwtModelType) :: this @@ -1178,10 +1170,8 @@ subroutine create_gwt_packages(this, indis) mempath = mempaths(n) inunit => inunits(n) ! - ! -- create dis package first as it is a prerequisite for other packages + ! -- create dis package as it is a prerequisite for other packages select case (pkgtype) - case ('MVT6') - this%inmvt = inunit case ('MST6') this%inmst = inunit case ('DSP6') @@ -1204,7 +1194,6 @@ subroutine create_gwt_packages(this, indis) call mst_cr(this%mst, this%name, this%inmst, this%iout, this%fmi) call dsp_cr(this%dsp, this%name, mempathdsp, this%indsp, this%iout, & this%fmi) - call mvt_cr(this%mvt, this%name, this%inmvt, this%iout, this%fmi) call gwt_obs_cr(this%obs, this%inobs) ! ! -- Check to make sure that required ftype's have been specified diff --git a/src/Model/TransportModel/tsp1.f90 b/src/Model/TransportModel/tsp1.f90 index 1a3be2973cb..50547148205 100644 --- a/src/Model/TransportModel/tsp1.f90 +++ b/src/Model/TransportModel/tsp1.f90 @@ -15,6 +15,7 @@ module TransportModelModule use TspFmiModule, only: TspFmiType use TspAdvModule, only: TspAdvType use TspSsmModule, only: TspSsmType + use TspMvtModule, only: TspMvtType use TspOcModule, only: TspOcType use BudgetModule, only: BudgetType use MatrixBaseModule @@ -30,12 +31,14 @@ module TransportModelModule type(TspFmiType), pointer :: fmi => null() ! flow model interface type(TspAdvType), pointer :: adv => null() !< advection package type(TspIcType), pointer :: ic => null() !< initial conditions package + type(TspMvtType), pointer :: mvt => null() !< mover transport package type(TspOcType), pointer :: oc => null() !< output control package type(TspSsmType), pointer :: ssm => null() !< source sink mixing package type(BudgetType), pointer :: budget => null() !< budget object integer(I4B), pointer :: infmi => null() ! unit number FMI integer(I4B), pointer :: inadv => null() !< unit number ADV integer(I4B), pointer :: inic => null() !< unit number IC + integer(I4B), pointer :: inmvt => null() !< unit number MVT integer(I4B), pointer :: inoc => null() !< unit number OC integer(I4B), pointer :: inssm => null() !< unit number SSM @@ -135,7 +138,6 @@ subroutine tsp_ac(this, sparse) class(TransportModelType) :: this type(sparsematrix), intent(inout) :: sparse ! -- local -! ------------------------------------------------------------------------------ ! ! -- Return return @@ -152,7 +154,6 @@ subroutine tsp_mc(this, matrix_sln) class(TransportModelType) :: this class(MatrixBaseType), pointer :: matrix_sln !< global system matrix ! -- local -! ------------------------------------------------------------------------------ ! ! -- Return return @@ -167,7 +168,6 @@ end subroutine tsp_mc subroutine tsp_ar(this) ! -- dummy variables class(TransportModelType) :: this -! ------------------------------------------------------------------------------ ! ! -- Return return @@ -181,7 +181,6 @@ end subroutine tsp_ar subroutine tsp_rp(this) ! -- dummy variables class(TransportModelType) :: this -! ------------------------------------------------------------------------------ ! ! -- Return return @@ -195,7 +194,6 @@ end subroutine tsp_rp subroutine tsp_ad(this) ! -- dummy variables class(TransportModelType) :: this -! ------------------------------------------------------------------------------ ! ! -- Return return @@ -212,7 +210,6 @@ subroutine tsp_fc(this, kiter, matrix_sln, inwtflag) integer(I4B), intent(in) :: kiter class(MatrixBaseType), pointer :: matrix_sln integer(I4B), intent(in) :: inwtflag -! ------------------------------------------------------------------------------ ! ! -- Return return @@ -234,7 +231,6 @@ subroutine tsp_cc(this, innertot, kiter, iend, icnvgmod, cpak, ipak, dpak) integer(I4B), intent(inout) :: ipak real(DP), intent(inout) :: dpak ! -- local -! ------------------------------------------------------------------------------ ! ! -- Return return @@ -251,7 +247,6 @@ subroutine tsp_cq(this, icnvg, isuppress_output) integer(I4B), intent(in) :: icnvg integer(I4B), intent(in) :: isuppress_output ! -- local -! ------------------------------------------------------------------------------ ! ! -- Return return @@ -267,7 +262,6 @@ subroutine tsp_bd(this, icnvg, isuppress_output) class(TransportModelType) :: this integer(I4B), intent(in) :: icnvg integer(I4B), intent(in) :: isuppress_output -! ------------------------------------------------------------------------------ ! ! -- Return return @@ -283,7 +277,6 @@ subroutine allocate_tsp_scalars(this, modelname) ! -- dummy class(TransportModelType) :: this character(len=*), intent(in) :: modelname -! ------------------------------------------------------------------------------ ! ! -- allocate members from (grand)parent class call this%NumericalModelType%allocate_scalars(modelname) @@ -291,6 +284,7 @@ subroutine allocate_tsp_scalars(this, modelname) ! -- allocate members that are part of model class call mem_allocate(this%inic, 'INIC', this%memoryPath) call mem_allocate(this%infmi, 'INFMI', this%memoryPath) + call mem_allocate(this%inmvt, 'INMVT', this%memoryPath) call mem_allocate(this%inadv, 'INADV', this%memoryPath) call mem_allocate(this%inssm, 'INSSM', this%memoryPath) call mem_allocate(this%inoc, 'INOC ', this%memoryPath) @@ -298,6 +292,7 @@ subroutine allocate_tsp_scalars(this, modelname) ! this%inic = 0 this%infmi = 0 + this%inmvt = 0 this%inadv = 0 this%inssm = 0 this%inoc = 0 @@ -352,6 +347,7 @@ subroutine tsp_da(this) call mem_deallocate(this%infmi) call mem_deallocate(this%inadv) call mem_deallocate(this%inssm) + call mem_deallocate(this%inmvt) call mem_deallocate(this%inoc) call mem_deallocate(this%eqnsclfac) ! @@ -509,6 +505,7 @@ subroutine create_tsp_packages(this, indis) use TspFmiModule, only: fmi_cr use TspAdvModule, only: adv_cr use TspSsmModule, only: ssm_cr + use TspMvtModule, only: mvt_cr use TspOcModule, only: oc_cr ! -- dummy class(TransportModelType) :: this @@ -564,6 +561,8 @@ subroutine create_tsp_packages(this, indis) this%inic = inunit case ('FMI6') this%infmi = inunit + case ('MVT6') + this%inmvt = inunit case ('ADV6') this%inadv = inunit case ('SSM6') @@ -582,6 +581,8 @@ subroutine create_tsp_packages(this, indis) this%eqnsclfac) call ssm_cr(this%ssm, this%name, this%inssm, this%iout, this%fmi, & this%eqnsclfac, this%depvartype) + call mvt_cr(this%mvt, this%name, this%inmvt, this%iout, this%fmi, & + this%eqnsclfac) call oc_cr(this%oc, this%name, this%inoc, this%iout) ! diff --git a/src/Model/GroundWaterTransport/gwt1mvt1.f90 b/src/Model/TransportModel/tsp1mvt1.f90 similarity index 79% rename from src/Model/GroundWaterTransport/gwt1mvt1.f90 rename to src/Model/TransportModel/tsp1mvt1.f90 index 1f045772acc..a0b1530dc80 100644 --- a/src/Model/GroundWaterTransport/gwt1mvt1.f90 +++ b/src/Model/TransportModel/tsp1mvt1.f90 @@ -2,7 +2,7 @@ ! -- This module is responsible for sending mass from providers into ! -- receiver qmfrommvr arrays and writing a mover transport budget -module GwtMvtModule +module TspMvtModule use KindModule, only: DP, I4B use ConstantsModule, only: LINELENGTH, MAXCHARLEN, DZERO, LENPAKLOC, & @@ -19,15 +19,16 @@ module GwtMvtModule implicit none private - public :: GwtMvtType + public :: TspMvtType public :: mvt_cr - type, extends(NumericalPackageType) :: GwtMvtType + type, extends(NumericalPackageType) :: TspMvtType character(len=LENMODELNAME) :: gwfmodelname1 = '' !< name of model 1 character(len=LENMODELNAME) :: gwfmodelname2 = '' !< name of model 2 (set to modelname 1 for single model MVT) integer(I4B), pointer :: maxpackages !< max number of packages integer(I4B), pointer :: ibudgetout => null() !< unit number for budget output file integer(I4B), pointer :: ibudcsv => null() !< unit number for csv budget output file + real(DP), pointer :: eqnsclfac => null() !< governing equation scale factor; =1. for solute; =rhow*cpw for energy type(TspFmiType), pointer :: fmi1 => null() !< pointer to fmi object for model 1 type(TspFmiType), pointer :: fmi2 => null() !< pointer to fmi object for model 2 (set to fmi1 for single model) type(BudgetType), pointer :: budget => null() !< mover transport budget object (used to write balance table) @@ -58,24 +59,21 @@ module GwtMvtModule procedure :: set_fmi_pr_rc procedure, private :: mvt_setup_outputtab procedure, private :: mvt_print_outputtab - end type GwtMvtType + end type TspMvtType contains - subroutine mvt_cr(mvt, name_model, inunit, iout, fmi1, gwfmodelname1, & - gwfmodelname2, fmi2) -! ****************************************************************************** -! mvt_cr -- Create a new initial conditions object -! ****************************************************************************** -! -! SPECIFICATIONS: -! ------------------------------------------------------------------------------ + !> @brief Create a new mover transport object + !< + subroutine mvt_cr(mvt, name_model, inunit, iout, fmi1, eqnsclfac, & + gwfmodelname1, gwfmodelname2, fmi2) ! -- dummy - type(GwtMvtType), pointer :: mvt + type(TspMvtType), pointer :: mvt character(len=*), intent(in) :: name_model integer(I4B), intent(in) :: inunit integer(I4B), intent(in) :: iout type(TspFmiType), intent(in), target :: fmi1 + real(DP), intent(in), pointer :: eqnsclfac !< governing equation scale factor character(len=*), intent(in), optional :: gwfmodelname1 character(len=*), intent(in), optional :: gwfmodelname2 type(TspFmiType), intent(in), target, optional :: fmi2 @@ -113,20 +111,19 @@ subroutine mvt_cr(mvt, name_model, inunit, iout, fmi1, gwfmodelname1, & ! -- create the budget object call budgetobject_cr(mvt%budobj, 'TRANSPORT MOVER') ! + ! -- Store pointer to governing equation scale factor + mvt%eqnsclfac => eqnsclfac + ! ! -- Return return end subroutine mvt_cr + !> @brief Define mover transport object + !< subroutine mvt_df(this, dis) -! ****************************************************************************** -! mvt_df -- Define -! ****************************************************************************** -! -! SPECIFICATIONS: -! ------------------------------------------------------------------------------ ! -- modules ! -- dummy - class(GwtMvtType) :: this + class(TspMvtType) :: this class(DisBaseType), pointer, intent(in) :: dis ! -- local ! -- formats @@ -162,21 +159,17 @@ end subroutine mvt_df !! !< subroutine set_pointer_mvrbudobj(this, mvrbudobj) - class(GwtMvtType) :: this + class(TspMvtType) :: this type(BudgetObjectType), intent(in), target :: mvrbudobj this%mvrbudobj => mvrbudobj end subroutine set_pointer_mvrbudobj + !> @brief Allocate and read mover-for-transport information + !< subroutine mvt_ar(this) -! ****************************************************************************** -! mvt_ar -- Allocate and read water mover information -! ****************************************************************************** -! -! SPECIFICATIONS: -! ------------------------------------------------------------------------------ ! -- modules ! -- dummy - class(GwtMvtType) :: this + class(TspMvtType) :: this ! -- locals ! ------------------------------------------------------------------------------ ! @@ -187,17 +180,13 @@ subroutine mvt_ar(this) return end subroutine mvt_ar + !> @brief Read and prepare mover transport object + !< subroutine mvt_rp(this) -! ****************************************************************************** -! mvt_rp -- Read and prepare -! ****************************************************************************** -! -! SPECIFICATIONS: -! ------------------------------------------------------------------------------ ! -- modules use TdisModule, only: kper, kstp ! -- dummy - class(GwtMvtType) :: this + class(TspMvtType) :: this ! -- local ! -- formats ! ------------------------------------------------------------------------------ @@ -224,22 +213,18 @@ subroutine mvt_rp(this) return end subroutine mvt_rp + !> @brief Calculate coefficients and fill amat and rhs + !! + !! The mvt package adds the mass flow rate to the provider qmfrommvr array. + !! The advanced packages know enough to subract any mass that is leaving, so + !! the mvt just adds mass coming in from elsewhere. Because the movers + !! change by stress period, their solute effects must be added to the right- + !! hand side of the transport matrix equations. + !< subroutine mvt_fc(this, cnew1, cnew2) -! ****************************************************************************** -! mvt_fc -- Calculate coefficients and fill amat and rhs -! -! The mvt package adds the mass flow rate to the provider qmfrommvr -! array. The advanced packages know enough to subract any mass that is -! leaving, so the mvt just adds mass coming in from elsewhere. Because the -! movers change change by stress period, their solute effects must be -! added to the right-hand side of the gwt matrix equations. -! ****************************************************************************** -! -! SPECIFICATIONS: -! ------------------------------------------------------------------------------ ! -- modules ! -- dummy - class(GwtMvtType) :: this + class(TspMvtType) :: this real(DP), intent(in), dimension(:), contiguous, target :: cnew1 real(DP), intent(in), dimension(:), contiguous, target :: cnew2 ! -- local @@ -313,7 +298,7 @@ subroutine mvt_fc(this, cnew1, cnew2) ! water into the same receiver if (fmi_rc%iatp(irc) /= 0) then fmi_rc%datp(irc)%qmfrommvr(id2) = fmi_rc%datp(irc)%qmfrommvr(id2) - & - q * cp + q * cp * this%eqnsclfac end if end do end if @@ -325,17 +310,16 @@ end subroutine mvt_fc !> @ brief Set the fmi_pr and fmi_rc pointers !! - !! The fmi_pr and fmi_rc arguments are pointers to the provider - !! and receiver FMI Packages. If this MVT Package is owned by - !! a single GWT model, then these pointers are both set to the - !! FMI Package of this GWT model's FMI Package. If this MVT - !! Package is owned by a GWTGWT Exchange, then the fmi_pr and - !! fmi_rc pointers may be assigned to FMI Packages in different models. - !! + !! The fmi_pr and fmi_rc arguments are pointers to the provider and receiver + !! FMI Packages. If this MVT Package is owned by a single GWT model, then + !! these pointers are both set to the FMI Package of this GWT model's FMI + !! package. If this MVT package is owned by a GWTGWT exchange, then the + !! fmi_pr and fmi_rc pointers may be assigned to FMI Packages in different + !! models. !< subroutine set_fmi_pr_rc(this, ibudterm, fmi_pr, fmi_rc) ! -- dummy - class(GwtMvtType) :: this + class(TspMvtType) :: this integer(I4B), intent(in) :: ibudterm type(TspFmiType), pointer :: fmi_pr type(TspFmiType), pointer :: fmi_rc @@ -389,19 +373,16 @@ subroutine set_fmi_pr_rc(this, ibudterm, fmi_pr, fmi_rc) print *, 'Could not find FMI Package...' stop "error in set_fmi_pr_rc" end if - + ! + ! -- Return return end subroutine set_fmi_pr_rc + !> @brief Extra convergence check for mover + !< subroutine mvt_cc(this, kiter, iend, icnvgmod, cpak, dpak) -! ****************************************************************************** -! mvt_cc -- extra convergence check for mover -! ****************************************************************************** -! -! SPECIFICATIONS: -! ------------------------------------------------------------------------------ ! -- dummy - class(GwtMvtType) :: this + class(TspMvtType) :: this integer(I4B), intent(in) :: kiter integer(I4B), intent(in) :: iend integer(I4B), intent(in) :: icnvgmod @@ -412,7 +393,6 @@ subroutine mvt_cc(this, kiter, iend, icnvgmod, cpak, dpak) character(len=*), parameter :: fmtmvrcnvg = & "(/,1x,'MOVER PACKAGE REQUIRES AT LEAST TWO OUTER ITERATIONS. CONVERGE & &FLAG HAS BEEN RESET TO FALSE.')" -! ------------------------------------------------------------------------------ ! ! -- If there are active movers, then at least 2 outers required if (associated(this%mvrbudobj)) then @@ -427,16 +407,12 @@ subroutine mvt_cc(this, kiter, iend, icnvgmod, cpak, dpak) return end subroutine mvt_cc + !> @brief Write mover terms to listing file + !< subroutine mvt_bd(this, cnew1, cnew2) -! ****************************************************************************** -! mvt_bd -- Write mover terms to listing file -! ****************************************************************************** -! -! SPECIFICATIONS: -! ------------------------------------------------------------------------------ ! -- modules ! -- dummy - class(GwtMvtType) :: this + class(TspMvtType) :: this real(DP), dimension(:), contiguous, intent(in) :: cnew1 real(DP), dimension(:), contiguous, intent(in) :: cnew2 ! -- local @@ -449,17 +425,13 @@ subroutine mvt_bd(this, cnew1, cnew2) return end subroutine mvt_bd + !> @brief Write mover budget terms + !< subroutine mvt_ot_saveflow(this, icbcfl, ibudfl) -! ****************************************************************************** -! mvt_bd -- Write mover terms -! ****************************************************************************** -! -! SPECIFICATIONS: -! ------------------------------------------------------------------------------ ! -- modules use TdisModule, only: kstp, kper, delt, pertim, totim ! -- dummy - class(GwtMvttype) :: this + class(TspMvttype) :: this integer(I4B), intent(in) :: icbcfl integer(I4B), intent(in) :: ibudfl ! -- locals @@ -481,16 +453,12 @@ subroutine mvt_ot_saveflow(this, icbcfl, ibudfl) return end subroutine mvt_ot_saveflow + !> @brief Print mover flow table + !< subroutine mvt_ot_printflow(this, icbcfl, ibudfl) -! ****************************************************************************** -! mvr_ot_printflow -- Print mover flow table -! ****************************************************************************** -! -! SPECIFICATIONS: -! ------------------------------------------------------------------------------ ! -- modules ! -- dummy - class(GwtMvtType) :: this + class(TspMvtType) :: this integer(I4B), intent(in) :: icbcfl integer(I4B), intent(in) :: ibudfl ! -- locals @@ -505,18 +473,14 @@ subroutine mvt_ot_printflow(this, icbcfl, ibudfl) return end subroutine mvt_ot_printflow + !> @brief Write mover budget to listing file + !< subroutine mvt_ot_bdsummary(this, ibudfl) -! ****************************************************************************** -! mvt_ot_bdsummary -- Write mover budget to listing file -! ****************************************************************************** -! -! SPECIFICATIONS: -! ------------------------------------------------------------------------------ ! -- modules use TdisModule, only: kstp, kper, delt, totim use ArrayHandlersModule, only: ifind, expandarray ! -- dummy - class(GwtMvtType) :: this + class(TspMvtType) :: this integer(I4B), intent(in) :: ibudfl ! -- locals integer(I4B) :: i, j, n @@ -582,17 +546,15 @@ subroutine mvt_ot_bdsummary(this, ibudfl) return end subroutine mvt_ot_bdsummary + !> @ brief Deallocate memory + !! + !! Method to deallocate memory for the package. + !< subroutine mvt_da(this) -! ****************************************************************************** -! mvt_da -- deallocate -! ****************************************************************************** -! -! SPECIFICATIONS: -! ------------------------------------------------------------------------------ ! -- modules use MemoryManagerModule, only: mem_deallocate ! -- dummy - class(GwtMvtType) :: this + class(TspMvtType) :: this ! -- local ! ------------------------------------------------------------------------------ ! @@ -634,17 +596,15 @@ subroutine mvt_da(this) return end subroutine mvt_da + !> @ brief Allocate scalar variables for package + !! + !! Method to allocate scalar variables for the MVT package. + !< subroutine allocate_scalars(this) -! ****************************************************************************** -! allocate_scalars -! ****************************************************************************** -! -! SPECIFICATIONS: -! ------------------------------------------------------------------------------ ! -- modules use MemoryManagerModule, only: mem_allocate, mem_setptr ! -- dummy - class(GwtMvtType) :: this + class(TspMvtType) :: this ! -- local ! ------------------------------------------------------------------------------ ! @@ -665,18 +625,14 @@ subroutine allocate_scalars(this) return end subroutine allocate_scalars + !> @brief Read mover-for-transport options block + !< subroutine read_options(this) -! ****************************************************************************** -! read_options -- Read Options -! ****************************************************************************** -! -! SPECIFICATIONS: -! ------------------------------------------------------------------------------ ! -- modules use OpenSpecModule, only: access, form use InputOutputModule, only: getunit, openfile ! -- dummy - class(GwtMvtType) :: this + class(TspMvtType) :: this ! -- local character(len=LINELENGTH) :: errmsg, keyword character(len=MAXCHARLEN) :: fname @@ -751,17 +707,13 @@ subroutine read_options(this) return end subroutine read_options + !> @brief Set up the budget object that stores all the mvr flows + !< subroutine mvt_setup_budobj(this) -! ****************************************************************************** -! mvt_setup_budobj -- Set up the budget object that stores all the mvr flows -! ****************************************************************************** -! -! SPECIFICATIONS: -! ------------------------------------------------------------------------------ ! -- modules use ConstantsModule, only: LENBUDTXT ! -- dummy - class(GwtMvtType) :: this + class(TspMvtType) :: this ! -- local integer(I4B) :: nbudterm integer(I4B) :: ncv @@ -798,22 +750,17 @@ subroutine mvt_setup_budobj(this) maxlist, .false., .false., & naux) end do - ! - ! -- return + ! -- Return return end subroutine mvt_setup_budobj + !> @brief Copy mover-for-transport flow terms into this%budobj + !< subroutine mvt_fill_budobj(this, cnew1, cnew2) -! ****************************************************************************** -! mvt_fill_budobj -- copy flow terms into this%budobj -! ****************************************************************************** -! -! SPECIFICATIONS: -! ------------------------------------------------------------------------------ ! -- modules ! -- dummy - class(GwtMvtType) :: this + class(TspMvtType) :: this real(DP), intent(in), dimension(:), contiguous, target :: cnew1 real(DP), intent(in), dimension(:), contiguous, target :: cnew2 ! -- local @@ -864,7 +811,7 @@ subroutine mvt_fill_budobj(this, cnew1, cnew2) ! -- Calculate solute mover rate rate = DZERO if (fmi_rc%iatp(irc) /= 0) then - rate = -q * cp + rate = -q * cp * this%eqnsclfac end if ! ! -- add the rate to the budterm @@ -879,21 +826,18 @@ subroutine mvt_fill_budobj(this, cnew1, cnew2) return end subroutine mvt_fill_budobj + !> @brief Determine max number of packages in use + !! + !! Scan through the gwf water mover budget object and determine the maximum + !! number of packages and unique package names + !< subroutine mvt_scan_mvrbudobj(this) -! ****************************************************************************** -! mvt_scan_mvrbudobj -- scan through the gwf water mover budget object and -! determine the maximum number of packages and unique package names -! ****************************************************************************** -! -! SPECIFICATIONS: -! ------------------------------------------------------------------------------ - class(GwtMvtType) :: this + class(TspMvtType) :: this integer(I4B) :: nbudterm integer(I4B) :: maxpackages integer(I4B) :: i, j integer(I4B) :: ipos logical :: found -! ------------------------------------------------------------------------------ ! ! -- Calculate maxpackages, which is the the square of nbudterm nbudterm = this%mvrbudobj%nbudterm @@ -931,22 +875,17 @@ subroutine mvt_scan_mvrbudobj(this) return end subroutine mvt_scan_mvrbudobj + !> @brief Set up the mover-for-transport output table + !< subroutine mvt_setup_outputtab(this) -! ****************************************************************************** -! mvt_setup_outputtab -- set up output table -! ****************************************************************************** -! -! SPECIFICATIONS: -! ------------------------------------------------------------------------------ ! -- dummy - class(GwtMvtType), intent(inout) :: this + class(TspMvtType), intent(inout) :: this ! -- local character(len=LINELENGTH) :: title character(len=LINELENGTH) :: text integer(I4B) :: ntabcol integer(I4B) :: maxrow integer(I4B) :: ilen -! ------------------------------------------------------------------------------ ! ! -- allocate and initialize the output table if (this%iprflow /= 0) then @@ -984,17 +923,13 @@ subroutine mvt_setup_outputtab(this) return end subroutine mvt_setup_outputtab + !> @brief Set up mover-for-transport output table + !< subroutine mvt_print_outputtab(this) -! ****************************************************************************** -! mvt_print_outputtab -- set up output table -! ****************************************************************************** -! -! SPECIFICATIONS: -! ------------------------------------------------------------------------------ ! -- module use TdisModule, only: kstp, kper ! -- dummy - class(GwtMvttype), intent(inout) :: this + class(TspMvttype), intent(inout) :: this ! -- local character(len=LINELENGTH) :: title character(len=LENMODELNAME + LENPACKAGENAME + 1) :: cloc1, cloc2 @@ -1045,5 +980,5 @@ subroutine mvt_print_outputtab(this) return end subroutine mvt_print_outputtab -end module GwtMvtModule +end module TspMvtModule diff --git a/src/meson.build b/src/meson.build index 5e556012323..4f1192993d7 100644 --- a/src/meson.build +++ b/src/meson.build @@ -101,7 +101,6 @@ modflow_sources = files( 'Model' / 'GroundWaterTransport' / 'gwt1ist1.f90', 'Model' / 'GroundWaterTransport' / 'gwt1lkt1.f90', 'Model' / 'GroundWaterTransport' / 'gwt1mst1.f90', - 'Model' / 'GroundWaterTransport' / 'gwt1mvt1.f90', 'Model' / 'GroundWaterTransport' / 'gwt1mwt1.f90', 'Model' / 'GroundWaterTransport' / 'gwt1obs1.f90', 'Model' / 'GroundWaterTransport' / 'gwt1sft1.f90', @@ -133,6 +132,7 @@ modflow_sources = files( 'Model' / 'TransportModel' / 'tsp1fmi1.f90', 'Model' / 'TransportModel' / 'tsp1ic1.f90', 'Model' / 'TransportModel' / 'tsp1oc1.f90', + 'Model' / 'TransportModel' / 'tsp1mvt1.f90', 'Model' / 'TransportModel' / 'tsp1ssm1.f90', 'Model' / 'BaseModel.f90', 'Model' / 'ExplicitModel.f90',