diff --git a/msvs/mf6core.vfproj b/msvs/mf6core.vfproj
index dbc042f220d..a9b6413ba3c 100644
--- a/msvs/mf6core.vfproj
+++ b/msvs/mf6core.vfproj
@@ -139,6 +139,7 @@
+
@@ -171,6 +172,7 @@
+
diff --git a/src/Model/GroundWaterFlow/gwf3.f90 b/src/Model/GroundWaterFlow/gwf3.f90
index 3f17c8bc77c..17cc29f6dac 100644
--- a/src/Model/GroundWaterFlow/gwf3.f90
+++ b/src/Model/GroundWaterFlow/gwf3.f90
@@ -309,8 +309,8 @@ subroutine gwf_ar(this)
class(BndType), pointer :: packobj
! ------------------------------------------------------------------------------
!
- ! -- Allocate and read modules attached to model
- if (this%inic > 0) call this%ic%ic_ar(this%x)
+ ! -- Load modules attached to model
+ if (this%inic > 0) call this%ic%ic_load(this%x)
if (this%innpf > 0) call this%npf%npf_ar(this%ic, this%vsc, this%ibound, &
this%x)
if (this%invsc > 0) call this%vsc%vsc_ar(this%ibound)
@@ -1497,6 +1497,7 @@ subroutine create_packages(this)
integer(I4B) :: n
integer(I4B) :: indis = 0 ! DIS enabled flag
character(len=LENMEMPATH) :: mempathnpf = ''
+ character(len=LENMEMPATH) :: mempathic = ''
!
! -- set input model memory path
model_mempath = create_mem_path(component=this%name, context=idm_context)
@@ -1542,7 +1543,8 @@ subroutine create_packages(this)
case ('CSUB6')
this%incsub = inunit
case ('IC6')
- this%inic = inunit
+ this%inic = 1
+ mempathic = mempath
case ('MVR6')
this%inmvr = inunit
case ('OC6')
@@ -1569,7 +1571,7 @@ subroutine create_packages(this)
call sto_cr(this%sto, this%name, this%insto, this%iout)
call csub_cr(this%csub, this%name, this%insto, this%sto%packName, &
this%incsub, this%iout)
- call ic_cr(this%ic, this%name, this%inic, this%iout, this%dis)
+ call ic_cr(this%ic, this%name, mempathic, this%inic, this%iout, this%dis)
call mvr_cr(this%mvr, this%name, this%inmvr, this%iout, this%dis)
call oc_cr(this%oc, this%name, this%inoc, this%iout)
call gwf_obs_cr(this%obs, this%inobs)
diff --git a/src/Model/GroundWaterFlow/gwf3ic8.f90 b/src/Model/GroundWaterFlow/gwf3ic8.f90
index 033f565819b..7d2448e32b1 100644
--- a/src/Model/GroundWaterFlow/gwf3ic8.f90
+++ b/src/Model/GroundWaterFlow/gwf3ic8.f90
@@ -1,6 +1,7 @@
module GwfIcModule
- use KindModule, only: DP, I4B
+ use KindModule, only: DP, I4B, LGP
+ use ConstantsModule, only: LINELENGTH
use NumericalPackageModule, only: NumericalPackageType
use BlockParserModule, only: BlockParserType
use BaseDisModule, only: DisBaseType
@@ -13,59 +14,53 @@ module GwfIcModule
type, extends(NumericalPackageType) :: GwfIcType
real(DP), dimension(:), pointer, contiguous :: strt => null() ! starting head
contains
- procedure :: ic_ar
+ procedure :: ic_load
procedure :: ic_da
procedure, private :: allocate_arrays
- procedure, private :: read_options
- procedure :: read_data
+ procedure, private :: source_griddata
end type GwfIcType
contains
- subroutine ic_cr(ic, name_model, inunit, iout, dis)
-! ******************************************************************************
-! ic_cr -- Create a new initial conditions object
-! ******************************************************************************
-!
-! SPECIFICATIONS:
-! ------------------------------------------------------------------------------
+ !> @brief Create a new initial conditions object
+ subroutine ic_cr(ic, name_model, input_mempath, inunit, iout, dis)
+ ! -- modules
+ use MemoryManagerExtModule, only: mem_set_value
! -- dummy
type(GwfIcType), pointer :: ic
character(len=*), intent(in) :: name_model
+ character(len=*), intent(in) :: input_mempath
integer(I4B), intent(in) :: inunit
integer(I4B), intent(in) :: iout
class(DisBaseType), pointer, intent(in) :: dis
-! ------------------------------------------------------------------------------
+ ! -- formats
+ character(len=*), parameter :: fmtic = &
+ "(1x, /1x, 'IC -- Initial Conditions Package, Version 8, 3/28/2015', &
+ &' input read from mempath: ', A, //)"
!
- ! -- Create the object
+ ! -- create IC object
allocate (ic)
!
! -- create name and memory path
- call ic%set_names(1, name_model, 'IC', 'IC')
+ call ic%set_names(1, name_model, 'IC', 'IC', input_mempath)
!
- ! -- Allocate scalars
+ ! -- allocate scalars
call ic%allocate_scalars()
!
+ ! -- set variables
ic%inunit = inunit
ic%iout = iout
!
- ! -- set pointers
+ ! -- set points
ic%dis => dis
!
- ! -- Initialize block parser
- call ic%parser%Initialize(ic%inunit, ic%iout)
- !
- ! -- Return
- return
+ ! -- if package is enabled, print message identifying it
+ if (inunit > 0) &
+ write (ic%iout, fmtic) input_mempath
end subroutine ic_cr
- subroutine ic_ar(this, x)
-! ******************************************************************************
-! ic_ar -- Allocate and read initial conditions
-! ******************************************************************************
-!
-! SPECIFICATIONS:
-! ------------------------------------------------------------------------------
+ !> @brief Load initial conditions
+ subroutine ic_load(this, x)
! -- modules
use BaseDisModule, only: DisBaseType
use SimModule, only: store_error
@@ -74,175 +69,77 @@ subroutine ic_ar(this, x)
real(DP), dimension(:), intent(inout) :: x
! -- locals
integer(I4B) :: n
-! ------------------------------------------------------------------------------
!
- ! -- Print a message identifying the initial conditions package.
- write (this%iout, 1) this%inunit
-1 format(1x, /1x, 'IC -- INITIAL CONDITIONS PACKAGE, VERSION 8, 3/28/2015', &
- ' INPUT READ FROM UNIT ', i0)
- !
- ! -- Allocate arrays
+ ! -- allocate arrays
call this%allocate_arrays(this%dis%nodes)
!
- ! -- Read options
- call this%read_options()
- !
- ! -- Read data
- call this%read_data()
+ ! -- read grid data
+ call this%source_griddata()
!
- ! -- Assign x equal to strt
+ ! -- assign starting head
do n = 1, this%dis%nodes
x(n) = this%strt(n)
end do
- !
- ! -- Return
- return
- end subroutine ic_ar
+ end subroutine ic_load
+ !> @brief Deallocate
subroutine ic_da(this)
-! ******************************************************************************
-! ic_da -- Deallocate
-! ******************************************************************************
-!
-! SPECIFICATIONS:
-! ------------------------------------------------------------------------------
! -- modules
use MemoryManagerModule, only: mem_deallocate
+ use MemoryManagerExtModule, only: memorylist_remove
+ use SimVariablesModule, only: idm_context
! -- dummy
class(GwfIcType) :: this
-! ------------------------------------------------------------------------------
!
- ! -- deallocate parent
- call this%NumericalPackageType%da()
- !
- ! -- Scalars
+ ! -- deallocate IDM memory
+ call memorylist_remove(this%name_model, 'IC', idm_context)
!
- ! -- Arrays
+ ! -- deallocate arrays
call mem_deallocate(this%strt)
!
- ! -- Return
- return
+ ! -- deallocate parent
+ call this%NumericalPackageType%da()
end subroutine ic_da
+ ! @brief Allocate arrays
subroutine allocate_arrays(this, nodes)
-! ******************************************************************************
-! allocate_arrays
-! ******************************************************************************
-!
-! SPECIFICATIONS:
-! ------------------------------------------------------------------------------
! -- modules
use MemoryManagerModule, only: mem_allocate
! -- dummy
class(GwfIcType) :: this
integer(I4B), intent(in) :: nodes
- ! -- local
-! ------------------------------------------------------------------------------
!
! -- Allocate
call mem_allocate(this%strt, nodes, 'STRT', this%memoryPath)
- !
- ! -- Return
- return
end subroutine allocate_arrays
- subroutine read_options(this)
-! ******************************************************************************
-! read_options
-! ******************************************************************************
-!
-! SPECIFICATIONS:
-! ------------------------------------------------------------------------------
- ! -- modules
- use ConstantsModule, only: LINELENGTH
- use SimModule, only: store_error
- ! -- dummy
- class(GwfIcType) :: this
- ! -- local
- character(len=LINELENGTH) :: errmsg, keyword
- integer(I4B) :: ierr
- logical :: isfound, endOfBlock
- ! -- formats
-! ------------------------------------------------------------------------------
- !
- ! -- get options block
- call this%parser%GetBlock('OPTIONS', isfound, ierr, &
- supportOpenClose=.true., blockRequired=.false.)
- !
- ! -- parse options block if detected
- if (isfound) then
- write (this%iout, '(1x,a)') 'PROCESSING IC OPTIONS'
- do
- call this%parser%GetNextLine(endOfBlock)
- if (endOfBlock) exit
- call this%parser%GetStringCaps(keyword)
- select case (keyword)
- case default
- write (errmsg, '(a,a)') 'Unknown IC option: ', trim(keyword)
- call store_error(errmsg)
- call this%parser%StoreErrorUnit()
- end select
- end do
- write (this%iout, '(1x,a)') 'END OF IC OPTIONS'
- end if
- !
- ! -- Return
- return
- end subroutine read_options
-
- subroutine read_data(this)
-! ******************************************************************************
-! read_data
-! ******************************************************************************
-!
-! SPECIFICATIONS:
-! ------------------------------------------------------------------------------
+ !> @brief Copy grid data from IDM into package
+ subroutine source_griddata(this)
! -- modules
- use ConstantsModule, only: LINELENGTH
use SimModule, only: store_error
+ use MemoryManagerExtModule, only: mem_set_value
+ use GwfIcInputModule, only: GwfIcParamFoundType
! -- dummy
class(GwfIcType) :: this
! -- local
- character(len=LINELENGTH) :: errmsg, keyword
- character(len=:), allocatable :: line
- integer(I4B) :: istart, istop, lloc, ierr
- logical :: isfound, endOfBlock
- character(len=24) :: aname(1)
- ! -- formats
-! ------------------------------------------------------------------------------
- !
- ! -- Setup the label
- aname(1) = ' INITIAL HEAD'
- !
- ! -- get griddata block
- call this%parser%GetBlock('GRIDDATA', isfound, ierr)
- if (isfound) then
- write (this%iout, '(1x,a)') 'PROCESSING GRIDDATA'
- do
- call this%parser%GetNextLine(endOfBlock)
- if (endOfBlock) exit
- call this%parser%GetStringCaps(keyword)
- call this%parser%GetRemainingLine(line)
- lloc = 1
- select case (keyword)
- case ('STRT')
- call this%dis%read_grid_array(line, lloc, istart, istop, this%iout, &
- this%parser%iuactive, this%strt, &
- aname(1))
- case default
- write (errmsg, '(a,a)') 'Unknown GRIDDATA tag: ', trim(keyword)
- call store_error(errmsg)
- call this%parser%StoreErrorUnit()
- end select
- end do
- write (this%iout, '(1x,a)') 'END PROCESSING GRIDDATA'
- else
- call store_error('Required GRIDDATA block not found.')
- call this%parser%StoreErrorUnit()
+ character(len=LINELENGTH) :: errmsg
+ type(GwfIcParamFoundType) :: found
+ integer(I4B), dimension(:), pointer, contiguous :: map
+ !
+ ! -- set map to convert user to reduced node data
+ map => null()
+ if (this%dis%nodes < this%dis%nodesuser) map => this%dis%nodeuser
+ !
+ ! -- set values
+ call mem_set_value(this%strt, 'STRT', this%input_mempath, map, found%strt)
+ !
+ ! -- ensure STRT was found
+ if (.not. found%strt) then
+ write (errmsg, '(a)') 'Error in GRIDDATA block: STRT not found.'
+ call store_error(errmsg)
+ else if (this%iout > 0) then
+ write (this%iout, '(4x,a)') 'STRT set from input file'
end if
- !
- ! -- Return
- return
- end subroutine read_data
+ end subroutine source_griddata
end module GwfIcModule
diff --git a/src/Model/GroundWaterFlow/gwf3ic8idm.f90 b/src/Model/GroundWaterFlow/gwf3ic8idm.f90
new file mode 100644
index 00000000000..558c8e68295
--- /dev/null
+++ b/src/Model/GroundWaterFlow/gwf3ic8idm.f90
@@ -0,0 +1,82 @@
+! ** Do Not Modify! MODFLOW 6 system generated file. **
+module GwfIcInputModule
+ use ConstantsModule, only: LENVARNAME
+ use InputDefinitionModule, only: InputParamDefinitionType, &
+ InputBlockDefinitionType
+ private
+ public gwf_ic_param_definitions
+ public gwf_ic_aggregate_definitions
+ public gwf_ic_block_definitions
+ public GwfIcParamFoundType
+ public gwf_ic_multi_package
+ public gwf_ic_aux_sfac_param
+
+ type GwfIcParamFoundType
+ logical :: strt = .false.
+ end type GwfIcParamFoundType
+
+ logical :: gwf_ic_multi_package = .false.
+
+ character(len=LENVARNAME) :: gwf_ic_aux_sfac_param = ''
+
+ type(InputParamDefinitionType), parameter :: &
+ gwfic_strt = InputParamDefinitionType &
+ ( &
+ 'GWF', & ! component
+ 'IC', & ! subcomponent
+ 'GRIDDATA', & ! block
+ 'STRT', & ! tag name
+ 'STRT', & ! fortran variable
+ 'DOUBLE1D', & ! type
+ 'NODES', & ! shape
+ .true., & ! required
+ .false., & ! multi-record
+ .false., & ! preserve case
+ .true., & ! layered
+ .false. & ! timeseries
+ )
+
+ type(InputParamDefinitionType), parameter :: &
+ gwf_ic_param_definitions(*) = &
+ [ &
+ gwfic_strt &
+ ]
+
+ type(InputParamDefinitionType), parameter :: &
+ gwf_ic_aggregate_definitions(*) = &
+ [ &
+ InputParamDefinitionType &
+ ( &
+ '', & ! component
+ '', & ! subcomponent
+ '', & ! block
+ '', & ! tag name
+ '', & ! fortran variable
+ '', & ! type
+ '', & ! shape
+ .false., & ! required
+ .false., & ! multi-record
+ .false., & ! preserve case
+ .false., & ! layered
+ .false. & ! timeseries
+ ) &
+ ]
+
+ type(InputBlockDefinitionType), parameter :: &
+ gwf_ic_block_definitions(*) = &
+ [ &
+ InputBlockDefinitionType( &
+ 'OPTIONS', & ! blockname
+ .false., & ! required
+ .false., & ! aggregate
+ .false. & ! block_variable
+ ), &
+ InputBlockDefinitionType( &
+ 'GRIDDATA', & ! blockname
+ .true., & ! required
+ .false., & ! aggregate
+ .false. & ! block_variable
+ ) &
+ ]
+
+end module GwfIcInputModule
diff --git a/src/Model/GroundWaterTransport/gwt1.f90 b/src/Model/GroundWaterTransport/gwt1.f90
index d8bbc3ff975..b9a491cf82d 100644
--- a/src/Model/GroundWaterTransport/gwt1.f90
+++ b/src/Model/GroundWaterTransport/gwt1.f90
@@ -269,7 +269,7 @@ subroutine gwt_ar(this)
! -- Allocate and read modules attached to model
call this%fmi%fmi_ar(this%ibound)
if (this%inmvt > 0) call this%mvt%mvt_ar()
- if (this%inic > 0) call this%ic%ic_ar(this%x)
+ if (this%inic > 0) call this%ic%ic_load(this%x)
if (this%inmst > 0) call this%mst%mst_ar(this%dis, this%ibound)
if (this%inadv > 0) call this%adv%adv_ar(this%dis, this%ibound)
if (this%indsp > 0) call this%dsp%dsp_ar(this%ibound, this%mst%thetam)
diff --git a/src/Model/GroundWaterTransport/gwt1ic1idm.f90 b/src/Model/GroundWaterTransport/gwt1ic1idm.f90
new file mode 100644
index 00000000000..d7f92a03045
--- /dev/null
+++ b/src/Model/GroundWaterTransport/gwt1ic1idm.f90
@@ -0,0 +1,82 @@
+! ** Do Not Modify! MODFLOW 6 system generated file. **
+module GwtIcInputModule
+ use ConstantsModule, only: LENVARNAME
+ use InputDefinitionModule, only: InputParamDefinitionType, &
+ InputBlockDefinitionType
+ private
+ public gwt_ic_param_definitions
+ public gwt_ic_aggregate_definitions
+ public gwt_ic_block_definitions
+ public GwtIcParamFoundType
+ public gwt_ic_multi_package
+ public gwt_ic_aux_sfac_param
+
+ type GwtIcParamFoundType
+ logical :: strt = .false.
+ end type GwtIcParamFoundType
+
+ logical :: gwt_ic_multi_package = .false.
+
+ character(len=LENVARNAME) :: gwt_ic_aux_sfac_param = ''
+
+ type(InputParamDefinitionType), parameter :: &
+ gwtic_strt = InputParamDefinitionType &
+ ( &
+ 'GWT', & ! component
+ 'IC', & ! subcomponent
+ 'GRIDDATA', & ! block
+ 'STRT', & ! tag name
+ 'STRT', & ! fortran variable
+ 'DOUBLE1D', & ! type
+ 'NODES', & ! shape
+ .true., & ! required
+ .false., & ! multi-record
+ .false., & ! preserve case
+ .true., & ! layered
+ .false. & ! timeseries
+ )
+
+ type(InputParamDefinitionType), parameter :: &
+ gwt_ic_param_definitions(*) = &
+ [ &
+ gwtic_strt &
+ ]
+
+ type(InputParamDefinitionType), parameter :: &
+ gwt_ic_aggregate_definitions(*) = &
+ [ &
+ InputParamDefinitionType &
+ ( &
+ '', & ! component
+ '', & ! subcomponent
+ '', & ! block
+ '', & ! tag name
+ '', & ! fortran variable
+ '', & ! type
+ '', & ! shape
+ .false., & ! required
+ .false., & ! multi-record
+ .false., & ! preserve case
+ .false., & ! layered
+ .false. & ! timeseries
+ ) &
+ ]
+
+ type(InputBlockDefinitionType), parameter :: &
+ gwt_ic_block_definitions(*) = &
+ [ &
+ InputBlockDefinitionType( &
+ 'OPTIONS', & ! blockname
+ .false., & ! required
+ .false., & ! aggregate
+ .false. & ! block_variable
+ ), &
+ InputBlockDefinitionType( &
+ 'GRIDDATA', & ! blockname
+ .true., & ! required
+ .false., & ! aggregate
+ .false. & ! block_variable
+ ) &
+ ]
+
+end module GwtIcInputModule
diff --git a/src/Model/TransportModel/tsp1.f90 b/src/Model/TransportModel/tsp1.f90
index 1ed3e16b313..00c999e2c18 100644
--- a/src/Model/TransportModel/tsp1.f90
+++ b/src/Model/TransportModel/tsp1.f90
@@ -778,6 +778,7 @@ subroutine create_tsp_packages(this, indis)
character(len=LENMEMPATH) :: mempath
integer(I4B), pointer :: inunit
integer(I4B) :: n
+ character(len=LENMEMPATH) :: mempathic = ''
!
! -- Initialize
indis = 0
@@ -811,7 +812,8 @@ subroutine create_tsp_packages(this, indis)
indis = 1
call disu_cr(this%dis, this%name, mempath, indis, this%iout)
case ('IC6')
- this%inic = inunit
+ this%inic = 1
+ mempathic = mempath
case ('FMI6')
this%infmi = inunit
case ('MVT6')
@@ -830,7 +832,7 @@ subroutine create_tsp_packages(this, indis)
end do
!
! -- Create packages that are tied directly to model
- call ic_cr(this%ic, this%name, this%inic, this%iout, this%dis, &
+ call ic_cr(this%ic, this%name, mempathic, this%inic, this%iout, this%dis, &
this%depvartype)
call fmi_cr(this%fmi, this%name, this%infmi, this%iout, this%eqnsclfac, &
this%depvartype)
diff --git a/src/Model/TransportModel/tsp1ic1.f90 b/src/Model/TransportModel/tsp1ic1.f90
index cb060cfb658..e36ca15a88e 100644
--- a/src/Model/TransportModel/tsp1ic1.f90
+++ b/src/Model/TransportModel/tsp1ic1.f90
@@ -15,21 +15,17 @@ module TspIcModule
type, extends(GwfIcType) :: TspIcType
! -- strings
character(len=LENVARNAME) :: depvartype = ''
-
- contains
-
- procedure :: read_data
-
end type TspIcType
contains
!> @brief Create a new initial conditions object
!<
- subroutine ic_cr(ic, name_model, inunit, iout, dis, depvartype)
+ subroutine ic_cr(ic, name_model, input_mempath, inunit, iout, dis, depvartype)
! -- dummy
type(TspIcType), pointer :: ic
character(len=*), intent(in) :: name_model
+ character(len=*), intent(in) :: input_mempath
integer(I4B), intent(in) :: inunit
integer(I4B), intent(in) :: iout
class(DisBaseType), pointer, intent(in) :: dis
@@ -39,7 +35,7 @@ subroutine ic_cr(ic, name_model, inunit, iout, dis, depvartype)
allocate (ic)
!
! -- create name and memory path
- call ic%set_names(1, name_model, 'IC', 'IC')
+ call ic%set_names(1, name_model, 'IC', 'IC', input_mempath)
!
! -- Allocate scalars
call ic%allocate_scalars()
@@ -52,65 +48,6 @@ subroutine ic_cr(ic, name_model, inunit, iout, dis, depvartype)
!
! -- Give package access to the assigned labelsd based on dependent variable
ic%depvartype = depvartype
- !
- ! -- Initialize block parser
- call ic%parser%Initialize(ic%inunit, ic%iout)
- !
- ! -- Return
- return
end subroutine ic_cr
- !> @brief Read initial conditions
- !!
- !! Read initial concentrations or temperatures depending on model type
- !<
- subroutine read_data(this)
- ! -- modules
- use ConstantsModule, only: LINELENGTH
- use SimModule, only: store_error
- ! -- dummy
- class(TspIcType) :: this
- ! -- local
- character(len=LINELENGTH) :: errmsg, keyword
- character(len=:), allocatable :: line
- integer(I4B) :: istart, istop, lloc, ierr
- logical :: isfound, endOfBlock
- character(len=24) :: aname(1)
- ! -- formats
- !
- ! -- Setup the label
- write (aname(1), '(a,1x,a)') 'INITIAL', trim(adjustl(this%depvartype))
- !
- ! -- get griddata block
- call this%parser%GetBlock('GRIDDATA', isfound, ierr)
- if (isfound) then
- write (this%iout, '(1x,a)') 'PROCESSING GRIDDATA'
- do
- call this%parser%GetNextLine(endOfBlock)
- if (endOfBlock) exit
- call this%parser%GetStringCaps(keyword)
- call this%parser%GetRemainingLine(line)
- lloc = 1
- select case (keyword)
- case ('STRT')
- call this%dis%read_grid_array(line, lloc, istart, istop, this%iout, &
- this%parser%iuactive, this%strt, &
- aname(1))
- case default
- write (errmsg, '(a,a)') 'Unknown GRIDDATA tag: ', &
- trim(keyword)
- call store_error(errmsg)
- call this%parser%StoreErrorUnit()
- end select
- end do
- write (this%iout, '(1x,a)') 'END PROCESSING GRIDDATA'
- else
- call store_error('Required GRIDDATA block not found.')
- call this%parser%StoreErrorUnit()
- end if
- !
- ! -- Return
- return
- end subroutine read_data
-
end module TspIcModule
diff --git a/src/Utilities/Idm/selector/IdmGwfDfnSelector.f90 b/src/Utilities/Idm/selector/IdmGwfDfnSelector.f90
index b4c7448a245..0957d91e525 100644
--- a/src/Utilities/Idm/selector/IdmGwfDfnSelector.f90
+++ b/src/Utilities/Idm/selector/IdmGwfDfnSelector.f90
@@ -13,6 +13,7 @@ module IdmGwfDfnSelectorModule
use GwfEvtInputModule
use GwfEvtaInputModule
use GwfGhbInputModule
+ use GwfIcInputModule
use GwfNpfInputModule
use GwfRchInputModule
use GwfRchaInputModule
@@ -104,6 +105,7 @@ module IdmGwfDfnSelectorModule
logical :: tas6_filename = .false.
logical :: ievt = .false.
logical :: bhead = .false.
+ logical :: strt = .false.
logical :: cellavg = .false.
logical :: ithickstrt = .false.
logical :: cvoptions = .false.
@@ -194,6 +196,8 @@ function gwf_param_definitions(subcomponent) result(input_definition)
call set_param_pointer(input_definition, gwf_evta_param_definitions)
case ('GHB')
call set_param_pointer(input_definition, gwf_ghb_param_definitions)
+ case ('IC')
+ call set_param_pointer(input_definition, gwf_ic_param_definitions)
case ('NPF')
call set_param_pointer(input_definition, gwf_npf_param_definitions)
case ('RCH')
@@ -232,6 +236,8 @@ function gwf_aggregate_definitions(subcomponent) result(input_definition)
call set_param_pointer(input_definition, gwf_evta_aggregate_definitions)
case ('GHB')
call set_param_pointer(input_definition, gwf_ghb_aggregate_definitions)
+ case ('IC')
+ call set_param_pointer(input_definition, gwf_ic_aggregate_definitions)
case ('NPF')
call set_param_pointer(input_definition, gwf_npf_aggregate_definitions)
case ('RCH')
@@ -270,6 +276,8 @@ function gwf_block_definitions(subcomponent) result(input_definition)
call set_block_pointer(input_definition, gwf_evta_block_definitions)
case ('GHB')
call set_block_pointer(input_definition, gwf_ghb_block_definitions)
+ case ('IC')
+ call set_block_pointer(input_definition, gwf_ic_block_definitions)
case ('NPF')
call set_block_pointer(input_definition, gwf_npf_block_definitions)
case ('RCH')
@@ -307,6 +315,8 @@ function gwf_idm_multi_package(subcomponent) result(multi_package)
multi_package = gwf_evta_multi_package
case ('GHB')
multi_package = gwf_ghb_multi_package
+ case ('IC')
+ multi_package = gwf_ic_multi_package
case ('NPF')
multi_package = gwf_npf_multi_package
case ('RCH')
@@ -347,6 +357,8 @@ function gwf_idm_sfac_param(subcomponent) result(sfac_param)
sfac_param = gwf_evta_aux_sfac_param
case ('GHB')
sfac_param = gwf_ghb_aux_sfac_param
+ case ('IC')
+ sfac_param = gwf_ic_aux_sfac_param
case ('NPF')
sfac_param = gwf_npf_aux_sfac_param
case ('RCH')
@@ -388,6 +400,8 @@ function gwf_idm_integrated(subcomponent) result(integrated)
integrated = .true.
case ('GHB')
integrated = .true.
+ case ('IC')
+ integrated = .true.
case ('NPF')
integrated = .true.
case ('RCH')
diff --git a/src/Utilities/Idm/selector/IdmGwtDfnSelector.f90 b/src/Utilities/Idm/selector/IdmGwtDfnSelector.f90
index a48af422cad..cb838552d82 100644
--- a/src/Utilities/Idm/selector/IdmGwtDfnSelector.f90
+++ b/src/Utilities/Idm/selector/IdmGwtDfnSelector.f90
@@ -10,6 +10,7 @@ module IdmGwtDfnSelectorModule
use GwtDisvInputModule
use GwtDspInputModule
use GwtCncInputModule
+ use GwtIcInputModule
use GwtNamInputModule
implicit none
@@ -83,6 +84,7 @@ module IdmGwtDfnSelectorModule
logical :: tspvar = .false.
logical :: auxvar = .false.
logical :: boundname = .false.
+ logical :: strt = .false.
logical :: list = .false.
logical :: print_input = .false.
logical :: print_flows = .false.
@@ -121,6 +123,8 @@ function gwt_param_definitions(subcomponent) result(input_definition)
call set_param_pointer(input_definition, gwt_dsp_param_definitions)
case ('CNC')
call set_param_pointer(input_definition, gwt_cnc_param_definitions)
+ case ('IC')
+ call set_param_pointer(input_definition, gwt_ic_param_definitions)
case ('NAM')
call set_param_pointer(input_definition, gwt_nam_param_definitions)
case default
@@ -143,6 +147,8 @@ function gwt_aggregate_definitions(subcomponent) result(input_definition)
call set_param_pointer(input_definition, gwt_dsp_aggregate_definitions)
case ('CNC')
call set_param_pointer(input_definition, gwt_cnc_aggregate_definitions)
+ case ('IC')
+ call set_param_pointer(input_definition, gwt_ic_aggregate_definitions)
case ('NAM')
call set_param_pointer(input_definition, gwt_nam_aggregate_definitions)
case default
@@ -165,6 +171,8 @@ function gwt_block_definitions(subcomponent) result(input_definition)
call set_block_pointer(input_definition, gwt_dsp_block_definitions)
case ('CNC')
call set_block_pointer(input_definition, gwt_cnc_block_definitions)
+ case ('IC')
+ call set_block_pointer(input_definition, gwt_ic_block_definitions)
case ('NAM')
call set_block_pointer(input_definition, gwt_nam_block_definitions)
case default
@@ -186,6 +194,8 @@ function gwt_idm_multi_package(subcomponent) result(multi_package)
multi_package = gwt_dsp_multi_package
case ('CNC')
multi_package = gwt_cnc_multi_package
+ case ('IC')
+ multi_package = gwt_ic_multi_package
case ('NAM')
multi_package = gwt_nam_multi_package
case default
@@ -210,6 +220,8 @@ function gwt_idm_sfac_param(subcomponent) result(sfac_param)
sfac_param = gwt_dsp_aux_sfac_param
case ('CNC')
sfac_param = gwt_cnc_aux_sfac_param
+ case ('IC')
+ sfac_param = gwt_ic_aux_sfac_param
case ('NAM')
sfac_param = gwt_nam_aux_sfac_param
case default
@@ -235,6 +247,8 @@ function gwt_idm_integrated(subcomponent) result(integrated)
integrated = .true.
case ('CNC')
integrated = .true.
+ case ('IC')
+ integrated = .true.
case ('NAM')
integrated = .true.
case default
diff --git a/src/meson.build b/src/meson.build
index c5ee53ab891..3367f2c0924 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -67,6 +67,7 @@ modflow_sources = files(
'Model' / 'GroundWaterFlow' / 'gwf3ghb8idm.f90',
'Model' / 'GroundWaterFlow' / 'gwf3hfb8.f90',
'Model' / 'GroundWaterFlow' / 'gwf3ic8.f90',
+ 'Model' / 'GroundWaterFlow' / 'gwf3ic8idm.f90',
'Model' / 'GroundWaterFlow' / 'gwf3idm.f90',
'Model' / 'GroundWaterFlow' / 'gwf3lak8.f90',
'Model' / 'GroundWaterFlow' / 'gwf3maw8.f90',
@@ -98,6 +99,7 @@ modflow_sources = files(
'Model' / 'GroundWaterTransport' / 'gwt1disv1idm.f90',
'Model' / 'GroundWaterTransport' / 'gwt1dsp1.f90',
'Model' / 'GroundWaterTransport' / 'gwt1dsp1idm.f90',
+ 'Model' / 'GroundWaterTransport' / 'gwt1ic1idm.f90',
'Model' / 'GroundWaterTransport' / 'gwt1idm.f90',
'Model' / 'GroundWaterTransport' / 'gwt1ist1.f90',
'Model' / 'GroundWaterTransport' / 'gwt1lkt1.f90',
diff --git a/utils/idmloader/scripts/dfn2f90.py b/utils/idmloader/scripts/dfn2f90.py
index fce6a6d7423..632b32ae39f 100644
--- a/utils/idmloader/scripts/dfn2f90.py
+++ b/utils/idmloader/scripts/dfn2f90.py
@@ -1000,6 +1000,10 @@ def _write_master_component(self, fh=None):
Path("../../../doc/mf6io/mf6ivar/dfn", "gwf-ghb.dfn"),
Path("../../../src/Model/GroundWaterFlow", "gwf3ghb8idm.f90"),
],
+ [
+ Path("../../../doc/mf6io/mf6ivar/dfn", "gwf-ic.dfn"),
+ Path("../../../src/Model/GroundWaterFlow", "gwf3ic8idm.f90"),
+ ],
[
Path("../../../doc/mf6io/mf6ivar/dfn", "gwf-npf.dfn"),
Path("../../../src/Model/GroundWaterFlow", "gwf3npf8idm.f90"),
@@ -1040,6 +1044,10 @@ def _write_master_component(self, fh=None):
Path("../../../doc/mf6io/mf6ivar/dfn", "gwt-cnc.dfn"),
Path("../../../src/Model/GroundWaterTransport", "gwt1cnc1idm.f90"),
],
+ [
+ Path("../../../doc/mf6io/mf6ivar/dfn", "gwt-ic.dfn"),
+ Path("../../../src/Model/GroundWaterTransport", "gwt1ic1idm.f90"),
+ ],
[
Path("../../../doc/mf6io/mf6ivar/dfn", "gwf-nam.dfn"),
Path("../../../src/Model/GroundWaterFlow", "gwf3idm.f90"),