from ..pakbase import Package
__author__ = "emorway"
[docs]class Mt3dCts(Package):
"""
MT3D-USGS Contaminant Treatment System package class
Parameters
----------
model : model object
The model object (of type :class:`flopy.mt3dms.mt.Mt3dms`) to which
this package will be added.
mxcts : int
The maximum number of contaminant transport systems implemented in a
simulation.
ictsout : int
The unit number on which well-by-well output information is written.
The default file extension assigned to the output file is TSO
mxext : int
The maximum number of extraction wells specified as part of a
contaminant treatment system
mxinj: int
The maximum number of injection wells specified as part of a
contaminant treatment system
mxwel : int
The maximum number of wells in the flow model. MXWEL is recommended
to be set equal to MXWEL as specified in the WEL file
iforce : int
A flag to force concentration in treatment systems to satisfy
specified concentration/mass values based on the treatment option
selected without considering whether treatment is necessary or not.
This flag is ignored if 'no treatment' option is selected.
0 Concentration for all injection wells is set to satisfy
treatment levels only if blended concentration exceeds
the desired concentration/mass level for a treatment system.
If the blended concentration in a treatment system is less
than the specified concentration/mass level, then injection
wells inject water with blended concentrations.
1 Concentration for all injection wells is forced to satisfy
specified concentration/mass values.
ncts : int
The number of contaminant treatment systems. If NCTS >= 0,
NCTS is the number of contaminant treatment systems. If NCTS = -1,
treatment system information from the previous stress period is reused
for the current stress period.
icts : int
The contaminant treatment system index number.
next : int
The number of extraction wells for the treatment system number ICTS.
ninj : int
The number of injection wells for the treatment system number ICTS.
itrtinj : int
Is the level of treatment provided for the treatment system number
ICTS. Each treatment system blends concentration collected from all
extraction wells contributing to the treatment system and assigns a
treated concentration to all injection wells associated with that
treatment system based on the treatment option selected
0 no treatment is provided
1 same level of treatment is provided to all injection wells.
2 different level of treatment can be provided to each
individual injection well.
qincts : float
The external flow entering a treatment system. External flow may be
flow entering a treatment system that is not a part of the model
domain but plays an important role in influencing the blended
concentration of a treatment system
cincts : float
The concentration with which the external flow enters a treatment
system
ioptinj : int
Is a treatment option. Negative values indicate removal of
concentration/mass and positive values indicate addition of
concentration/mass.
1 Percentage concentration/mass addition/removal is performed.
Percentages must be specified as fractions. Example, for 50%
concentration/mass removal is desired, -0.5 must be specified.
2 Concentration is added/removed from the blended concentration.
Specified concentration CMCHGINJ is added to the blended
concentration. If the specified concentration removal,
CMCHGINJ, is greater than the blended concentration, the
treated concentration is set to zero.
3 Mass is added/removed from the blended concentration.
Specified mass CMCHGINJ is added to the blended concentration.
If the specified mass removal, CMCHGINJ, is greater than the
blended total mass, the treated concentration is set to zero.
4 Specified concentration is set equal to the entered value
CMCHGINJ. A positive value is expected for CMCHGINJ with this
option.
cmchginj : float
Is the addition, removal, or specified concentration/mass values set
for the treatment system. Concentration/mass is added, removed, or
used as specified concentrations depending on the treatment option
IOPTINJ.
Note that concentration/mass values as specified by CMCHGINJ are
enforced if the option IFORCE is set to 1. If IFORCE is set to 0,
then CMCHGINJ is enforced only when the blended concentration exceeds
the specified concentration CNTE.
cnte : float
The concentration that is not to be exceeded for a treatment system.
Treatment is applied to blended concentration only if it exceeds
CNTE, when IFORCE is set to 0.
kinj : int
Layer index for a CTS injection well
iinj : int
Row index for a CTS injection well
jinj : int
Column index for a CTS injection well
iwinj : int
The well index number. This number corresponds to the well number as
it appears in the WEL file of the flow model.
qoutcts : float
the flow rate of outflow from a treatment system to an external sink.
This flow rate must be specified to maintain an overall treatment
system mass balance. QOUTCTS must be set equal to total inflow into a
treatment system minus total outflow to all injection wells for a
treatment system
Attributes
----------
Methods
-------
See Also
--------
Notes
-----
Parameters are not supported in FloPy.
Examples
--------
>>>
>>>
>>>
>>>
"""
def __init__(
self,
):
raise NotImplementedError()
# # unit number
# if unitnumber is None:
# unitnumber = self.unitnumber
# Package.__init__(self, model, extension, 'CTS', self.unitnumber)
#
# # Set dimensions
# nrow = model.nrow
# ncol = model.ncol
# nlay = model.nlay
# ncomp = model.ncomp
# mcomp = model.mcomp
# Set package specific parameters
[docs] @classmethod
def load(
cls,
f,
model,
nlay=None,
nrow=None,
ncol=None,
nper=None,
ncomp=None,
ext_unit_dict=None,
):
"""
Load an existing package.
Parameters
----------
f : filename or file handle
File to load.
model : model object
The model object (of type :class:`flopy.mt3d.mt.Mt3dms`) to
which this package will be added.
ext_unit_dict : dictionary, optional
If the arrays in the file are specified using EXTERNAL,
or older style array control records, then `f` should be a file
handle. In this case ext_unit_dict is required, which can be
constructed using the function
:class:`flopy.utils.mfreadnam.parsenamefile`.
Returns
-------
cts : Mt3dCts object
Mt3dCts object
Examples
--------
>>>
"""
raise NotImplementedError()
# if model.verbose:
# sys.stdout.write('loading cts package file...\n')
#
# # Open file, if necessary
# openfile = not hasattr(f, 'read')
# if openfile:
# filename = f
# f = open(filename, 'r')
#
# # Set dimensions if necessary
# if nlay is None:
# nlay = model.nlay
# if nrow is None:
# nrow = model.nrow
# if ncol is None:
# ncol = model.ncol
# if nper is None:
# nper = model.nper
# if ncomp is None:
# ncomp = model.ncomp
#
# # Item 1 (MXCTS, ICTSOUT, MXEXT, MXINJ, MXWEL, IFORCE)
# line = f.readline()
# if line[0] == '#':
# raise ValueError('CTS package does not support comment lines')
# if model.verbose:
# print(' loading MXCTS, ICTSOUT, MXEXT, MXINJ, MXWEL, IFORCE...')
#
# m_arr = line.strip().split()
# mxcts = int(m_arr[0])
# ictsout = int(m_arr[1])
# mxext = int(m_arr[2])
# mxinj = int(m_arr[3])
# mxwel = int(m_arr[4])
# iforce = int(m_arr[5])
#
# # Start of transient data
# for iper in range(nper):
#
# if model.verbose:
# print(' loading CTS data for kper {0:5d}'.format(iper + 1))
#
# # Item 2 (NCTS)
# line = f.readline()
# m_arr = line.strip().split()
# ncts = int(m_arr[0])
#
# # Start of information for each CTS
# for icts in range(ncts):
#
# if model.verbose:
# print(' loading data for system #{0:5d}'
# .format(icts + 1))
# # Item 3 (ICTS, NEXT, NINJ, ITRTINJ)
# line = f.readline()
# m_arr = line.strip().split()
# icts = int(m_arr[0])
# next = int(m_arr[1])
# ninj = int(m_arr[2])
# itrtinj = int(m_arr[3])
#
# if openfile:
# f.close()
[docs] @staticmethod
def get_default_CTS_dtype(ncomp=1, iforce=0):
"""
Construct a dtype for the recarray containing the list of cts systems
"""
raise NotImplementedError()
# # Item 3
# type_list = [("icts", int), ("next", int), ("ninj", int),
# ("itrtinj", int)]
#
# # Create a list for storing items 5, 6, & 9
# items_5_6_7_9_list = []
# if ncomp > 1:
# # Item 5 in CTS input
# for comp in range(1, ncomp+1):
# qincts_name = "qincts{0:d}".format(comp)
# cincts_name = "cincts{0:d}".format(comp)
# items_5_6_7_9_list.append((qincts_name, np.float32))
# items_5_6_7_9_list.append((cincts_name, np.float32))
#
# # Item 6 in CTS input
# for comp in range(1, ncomp+1):
# ioptinj_name = "ioptinj{0:d}".format(comp)
# cmchginj_name = "cmchginj{0:d}".format(comp)
# items_5_6_7_9_list.append((ioptinj_name, int))
# items_5_6_7_9_list.append((cmchginj_name, np.float32))
#
# if iforce == 0:
# for comp in range(1, ncomp+1):
# cnte_name = "cnte{0:d}".format(comp)
# items_5_6_7_9_list.append(cnte_name, np.float32)
#
# # Item 9 in CTS input
# items_5_6_7_9_list.append(("qoutcts", np.float32))
#
# type_list.append(items_5_6_7_9_list)
#
# # Now create a list for the records in Item 4
# ext_wels_list = [("kext", int), ("iext", int), ("jext", int),
# ("iwext", int)]
#
# type_list.append(ext_wels_list)
#
# # Now create a list for the records in Item 8
# inj_wels_list = [("kinj", int), ("iinj", int), ("jinj", int),
# ("iwinj", int)]
# type_list.append(inj_wels_list)
#
# #
#
# dtype = np.dtype(type_list)
# dtype = dtype
@staticmethod
def _ftype():
return "CTS"
@staticmethod
def _defaultunit():
return 5
@staticmethod
def _reservedunit():
return 5