177 lines
4.6 KiB
Python
177 lines
4.6 KiB
Python
import numpy as np
|
|
from ..pakbase import Package
|
|
from ..utils import Util2d, Util3d
|
|
|
|
|
|
class ModflowBct(Package):
|
|
"""
|
|
Block centered transport package class for MODFLOW-USG
|
|
"""
|
|
|
|
def __init__(
|
|
self,
|
|
model,
|
|
itrnsp=1,
|
|
ibctcb=0,
|
|
mcomp=1,
|
|
ic_ibound_flg=1,
|
|
itvd=1,
|
|
iadsorb=0,
|
|
ict=0,
|
|
cinact=-999.0,
|
|
ciclose=1.0e-6,
|
|
idisp=1,
|
|
ixdisp=0,
|
|
diffnc=0.0,
|
|
izod=0,
|
|
ifod=0,
|
|
icbund=1,
|
|
porosity=0.1,
|
|
bulkd=1.0,
|
|
arad=0.0,
|
|
dlh=0.0,
|
|
dlv=0.0,
|
|
dth=0.0,
|
|
dtv=0.0,
|
|
sconc=0.0,
|
|
extension="bct",
|
|
unitnumber=None,
|
|
):
|
|
|
|
# set default unit number of one is not specified
|
|
if unitnumber is None:
|
|
unitnumber = ModflowBct.defaultunit()
|
|
|
|
# Call ancestor's init to set self.parent, extension, name and unit
|
|
# number
|
|
Package.__init__(
|
|
self, model, extension, ModflowBct.ftype(), unitnumber
|
|
)
|
|
|
|
self.url = "bct.htm"
|
|
nrow, ncol, nlay, nper = self.parent.nrow_ncol_nlay_nper
|
|
self.itrnsp = itrnsp
|
|
self.ibctcb = ibctcb
|
|
self.mcomp = mcomp
|
|
self.ic_ibound_flg = ic_ibound_flg
|
|
self.itvd = itvd
|
|
self.iadsorb = iadsorb
|
|
self.ict = ict
|
|
self.cinact = cinact
|
|
self.ciclose = ciclose
|
|
self.idisp = idisp
|
|
self.ixdisp = ixdisp
|
|
self.diffnc = diffnc
|
|
self.izod = izod
|
|
self.ifod = ifod
|
|
self.icbund = Util3d(
|
|
model,
|
|
(nlay, nrow, ncol),
|
|
np.float32,
|
|
icbund,
|
|
"icbund",
|
|
)
|
|
self.porosity = Util3d(
|
|
model, (nlay, nrow, ncol), np.float32, porosity, "porosity"
|
|
)
|
|
# self.arad = Util2d(model, (1, nja), np.float32,
|
|
# arad, 'arad')
|
|
self.dlh = Util3d(model, (nlay, nrow, ncol), np.float32, dlh, "dlh")
|
|
self.dlv = Util3d(model, (nlay, nrow, ncol), np.float32, dlv, "dlv")
|
|
self.dth = Util3d(model, (nlay, nrow, ncol), np.float32, dth, "dth")
|
|
self.dtv = Util3d(model, (nlay, nrow, ncol), np.float32, dth, "dtv")
|
|
self.sconc = Util3d(
|
|
model,
|
|
(nlay, nrow, ncol),
|
|
np.float32,
|
|
sconc,
|
|
"sconc",
|
|
)
|
|
self.parent.add_package(self)
|
|
return
|
|
|
|
def write_file(self):
|
|
"""
|
|
Write the package file.
|
|
|
|
Returns
|
|
-------
|
|
None
|
|
|
|
"""
|
|
nrow, ncol, nlay, nper = self.parent.nrow_ncol_nlay_nper
|
|
# Open file for writing
|
|
f_bct = open(self.fn_path, "w")
|
|
# Item 1: ITRNSP, IBCTCB, MCOMP, IC_IBOUND_FLG, ITVD, IADSORB,
|
|
# ICT, CINACT, CICLOSE, IDISP, IXDISP, DIFFNC, IZOD, IFOD
|
|
s = "{0} {1} {2} {3} {4} {5} {6} {7} {8} {9} {10} {11} {12} {13}"
|
|
s = s.format(
|
|
self.itrnsp,
|
|
self.ibctcb,
|
|
self.mcomp,
|
|
self.ic_ibound_flg,
|
|
self.itvd,
|
|
self.iadsorb,
|
|
self.ict,
|
|
self.cinact,
|
|
self.ciclose,
|
|
self.idisp,
|
|
self.ixdisp,
|
|
self.diffnc,
|
|
self.izod,
|
|
self.ifod,
|
|
)
|
|
f_bct.write(s + "\n")
|
|
#
|
|
# ibound
|
|
if self.ic_ibound_flg == 0:
|
|
for k in range(nlay):
|
|
f_bct.write(self.icbund[k].get_file_entry())
|
|
#
|
|
# porosity
|
|
for k in range(nlay):
|
|
f_bct.write(self.porosity[k].get_file_entry())
|
|
#
|
|
# bulkd
|
|
if self.iadsorb != 0:
|
|
for k in range(nlay):
|
|
f_bct.write(self.bulkd[k].get_file_entry())
|
|
#
|
|
# arad
|
|
if self.idisp != 0:
|
|
f_bct.write("open/close arad.dat 1.0 (free) -1" + "\n")
|
|
#
|
|
# dlh
|
|
if self.idisp == 1:
|
|
for k in range(nlay):
|
|
f_bct.write(self.dlh[k].get_file_entry())
|
|
#
|
|
# dlv
|
|
if self.idisp == 2:
|
|
for k in range(nlay):
|
|
f_bct.write(self.dlv[k].get_file_entry())
|
|
#
|
|
# dth
|
|
if self.idisp == 1:
|
|
for k in range(nlay):
|
|
f_bct.write(self.dth[k].get_file_entry())
|
|
#
|
|
# dtv
|
|
if self.idisp == 2:
|
|
for k in range(nlay):
|
|
f_bct.write(self.dtv[k].get_file_entry())
|
|
#
|
|
# sconc
|
|
for k in range(nlay):
|
|
f_bct.write(self.sconc[k].get_file_entry())
|
|
|
|
return
|
|
|
|
@staticmethod
|
|
def ftype():
|
|
return "BCT"
|
|
|
|
@staticmethod
|
|
def defaultunit():
|
|
return 35
|