def __init__(self, model, hnoflo=-9999., hdry=-8888., def_face_ct=0, bud_label=None, def_iface=None, laytyp=0, ibound=1, prsity=0.30, prsityCB=0.30, extension='mpbas', unitnumber = 86): """ Package constructor. """ Package.__init__(self, model, extension, 'MPBAS', unitnumber) nrow, ncol, nlay, nper = self.parent.mf.nrow_ncol_nlay_nper self.parent.mf.get_name_file_entries() self.heading1 = '# MPBAS for Modpath, generated by Flopy.' self.heading2 = '#' self.hnoflo = hnoflo self.hdry = hdry self.def_face_ct = def_face_ct self.bud_label = bud_label self.def_iface = def_iface self.laytyp = laytyp self.__ibound = util_3d(model, (nlay, nrow, ncol), np.int, ibound, name='ibound', locat=self.unit_number[0]) self.prsity = prsity self.prsityCB = prsityCB self.prsity = util_3d(model,(nlay,nrow,ncol),np.float32,\ prsity,name='prsity',locat=self.unit_number[0]) self.prsityCB = util_3d(model,(nlay,nrow,ncol),np.float32,\ prsityCB,name='prsityCB',locat=self.unit_number[0]) self.parent.add_package(self)
def __init__(self, model, ibound=1, strt=1.0, ifrefm=True, ixsec=False, ichflg=False, stoper=None, hnoflo=-999.99, extension='bas', unitnumber=13): """ Package constructor. """ # Call ancestor's init to set self.parent, extension, name and unit # number Package.__init__(self, model, extension, 'BAS6', unitnumber) self.url = 'bas6.htm' nrow, ncol, nlay, nper = self.parent.nrow_ncol_nlay_nper self.__ibound = util_3d(model, (nlay, nrow, ncol), np.int, ibound, name='ibound', locat=self.unit_number[0]) self.strt = util_3d(model, (nlay, nrow, ncol), np.float32, strt, name='strt', locat=self.unit_number[0]) self.heading = '# Basic package file for MODFLOW, generated by Flopy.' self.options = '' self.ixsec = ixsec self.ichflg = ichflg self.stoper = stoper self.ifrefm = ifrefm self.hnoflo = hnoflo self.parent.add_package(self) return
def __setattr__(self, key, value): var_dict = vars(self) if key in list(var_dict.keys()): old_value = var_dict[key] if isinstance(old_value, utils.util_2d): value = utils.util_2d( self.parent, old_value.shape, old_value.dtype, value, name=old_value.name, fmtin=old_value.fmtin, locat=old_value.locat, ) elif isinstance(old_value, utils.util_3d): value = utils.util_3d( self.parent, old_value.shape, old_value.dtype, value, name=old_value.name_base, fmtin=old_value.fmtin, locat=old_value.locat, ) elif isinstance(old_value, utils.transient_2d): value = utils.transient_2d( self.parent, old_value.shape, old_value.dtype, value, name=old_value.name_base, fmtin=old_value.fmtin, locat=old_value.locat, ) elif isinstance(old_value, utils.mflist): value = utils.mflist(self.parent, old_value.dtype, data=value) elif isinstance(old_value, list): if isinstance(old_value[0], utils.util_3d): new_list = [] for vo, v in zip(old_value, value): new_list.append( utils.util_3d( self.parent, vo.shape, vo.dtype, v, name=vo.name_base, fmtin=vo.fmtin, locat=vo.locat ) ) value = new_list elif isinstance(old_value[0], utils.util_2d): new_list = [] for vo, v in zip(old_value, value): new_list.append( utils.util_2d( self.parent, vo.shape, vo.dtype, v, name=vo.name, fmtin=vo.fmtin, locat=vo.locat ) ) value = new_list super(Package, self).__setattr__(key, value)
def __setattr__(self, key, value): var_dict = vars(self) if key in var_dict.keys(): old_value = var_dict[key] if isinstance(old_value, utils.util_2d): value = utils.util_2d(self.parent, old_value.shape, old_value.dtype, value, name=old_value.name, fmtin=old_value.fmtin, locat=old_value.locat) elif isinstance(old_value, utils.util_3d): value = utils.util_3d(self.parent, old_value.shape, old_value.dtype, value, name=old_value.name_base, fmtin=old_value.fmtin, locat=old_value.locat) elif isinstance(old_value, utils.transient_2d): value = utils.transient_2d(self.parent, old_value.shape, old_value.dtype, value, name=old_value.name_base, fmtin=old_value.fmtin, locat=old_value.locat) elif isinstance(old_value, utils.mflist): value = utils.mflist(self.parent, old_value.dtype, data=value) elif isinstance(old_value, list): if isinstance(old_value[0], utils.util_3d): new_list = [] for vo, v in zip(old_value, value): new_list.append( utils.util_3d(self.parent, vo.shape, vo.dtype, v, name=vo.name_base, fmtin=vo.fmtin, locat=vo.locat)) value = new_list elif isinstance(old_value[0], utils.util_2d): new_list = [] for vo, v in zip(old_value, value): new_list.append( utils.util_2d(self.parent, vo.shape, vo.dtype, v, name=vo.name, fmtin=vo.fmtin, locat=vo.locat)) value = new_list super(Package, self).__setattr__(key, value)
def __init__(self, model, al=0.01, trpt=0.1, trpv=0.01, dmcoef=1e-9, extension='dsp', multiDiff=False,**kwargs): ''' if dmcoef is passed as a list of (nlay, nrow, ncol) arrays, then the multicomponent diffusion is activated ''' # Call ancestor's init to set self.parent, extension, name and #unit number Package.__init__(self, model, extension, 'DSP', 33) nrow, ncol, nlay, nper = self.parent.mf.nrow_ncol_nlay_nper ncomp = self.parent.get_ncomp() # if multiDiff: # assert isinstance(dmcoef,list),('using multicomponent diffusion ' # 'requires dmcoef is list of ' # 'length ncomp') # if len(dmcoef) != ncomp: # raise TypeError,('using multicomponent diffusion requires ' # 'dmcoef is list of length ncomp') self.multiDiff = multiDiff #self.al = self.assignarray((nlay, nrow, ncol), np.float, al, # name='al', load=model.load ) self.al = util_3d(model,(nlay,nrow,ncol),np.float32,al,name='al', locat=self.unit_number[0]) #self.trpt = self.assignarray((nlay,), np.float, trpt, name='trpt', # load=model.load) self.trpt = util_2d(model,(nlay,),np.float32,trpt,name='trpt', locat=self.unit_number[0]) #self.trpv = self.assignarray((nlay,), np.float, trpv, name='trpv', # load=model.load) self.trpv = util_2d(model,(nlay,),np.float32,trpt,name='trpv', locat=self.unit_number[0]) self.dmcoef = [] a = util_3d(model, (nlay, nrow, ncol), np.float32, dmcoef, name='dmcoef1', locat=self.unit_number[0]) self.dmcoef.append(a) if self.multiDiff: for icomp in range(2, ncomp+1): name = "dmcoef" + str(icomp) val = 0.0 if name in list(kwargs.keys()): val = kwargs[name] kwargs.pop(name) else: print("DSP: setting dmcoef for component " +\ str(icomp) + " to zero, kwarg name " +\ name) a = util_3d(model, (nlay, nrow, ncol), np.float32, val, name=name, locat=self.unit_number[0]) self.dmcoef.append(a) if len(list(kwargs.keys())) > 0: raise Exception("DSP error: unrecognized kwargs: " + ' '.join(list(kwargs.keys()))) self.parent.add_package(self) return
def __init__(self, model, mtdnconc=1, mfnadvfd=1, nswtcpl=1, iwtable=1, densemin=1.000, densemax=1.025, dnscrit=1e-2, denseref=1.000, denseslp=.025, firstdt=0.001, indense=0, dense=1.000, extension='vdf'): # Call ancestor's init to set self.parent, extension, name and #unit number Package.__init__(self, model, extension, 'VDF', 37) nrow, ncol, nlay, nper = self.parent.mf.nrow_ncol_nlay_nper self.mtdnconc = mtdnconc self.mfnadvfd = mfnadvfd self.nswtcpl = nswtcpl self.iwtable = iwtable self.densemin = densemin self.densemax = densemax self.dnscrit = dnscrit self.denseref = denseref self.denseslp = denseslp self.firstdt = firstdt self.indense = indense #self.dense = self.assignarray((nlay,nrow,ncol), np.float, dense, # name='dense',) self.dense = util_3d(model,(nlay,nrow,ncol),np.float32,dense,name='dense') self.parent.add_package(self) return
def __init__(self, model, itrnsp=1, ibctcb=0, mcomp=1, ic_ibound_flg=1, itvd=1, iadsorb=0, ict=0, cinact=-999., ciclose=1.e-6, idisp=1, ixdisp=0, diffnc=0., izod=0, ifod=0, icbund=1, porosity=0.1, bulkd=1., dlh=0., dlv=0., dth=0., dtv=0., sconc=0., extension='bct', unitnumber=35): Package.__init__(self, model, extension, 'BCT', 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 = util_3d(model, (nlay, nrow, ncol), np.float32, icbund, 'icbund',) self.porosity = util_3d(model, (nlay, nrow, ncol), np.float32, porosity, 'porosity') self.dlh = util_3d(model, (nlay, nrow, ncol), np.float32, dlh, 'dlh') self.dlv = util_3d(model, (nlay, nrow, ncol), np.float32, dlv, 'dlv') self.dth = util_3d(model, (nlay, nrow, ncol), np.float32, dth, 'dth') self.dtv = util_3d(model, (nlay, nrow, ncol), np.float32, dth, 'dtv') self.sconc = util_3d(model, (nlay, nrow, ncol), np.float32, sconc, 'sconc',) self.parent.add_package(self) return
def __init__(self, model, npln=1, istrat=1, iswizt=53, nprn=1, toeslope=0.05, tipslope=0.05, \ zetamin=0.005, delzeta=0.05, nu=0.025, zeta=[], ssz=[], isource=0, extension='swi', fname_output='swi.zta'): """ Package constructor. """ Package.__init__(self, model) # Call ancestor's init to set self.parent nrow, ncol, nlay, nper = self.parent.nrow_ncol_nlay_nper self.unit_number = [29,53] self.extension = extension self.file_name = [ self.parent.name + '.' + self.extension, fname_output ] self.name = [ 'SWI', 'DATA(BINARY)' ] self.heading = '# Salt Water Intrusion package file for MODFLOW-2000, generated by Flopy.' self.npln = npln self.istrat = istrat self.iswizt = iswizt self.nprn = nprn self.toeslope = toeslope self.tipslope = tipslope self.zetamin = zetamin self.delzeta = delzeta # Create arrays so that they have the correct size if self.istrat == 1: #self.nu = empty( self.npln+1 ) self.nu = util_2d(model,(self.npln+1,),np.float32,nu,name='nu') else: #self.nu = empty( self.npln+2 ) self.nu = util_2d(model,(self.npln+2,),np.float32,nu,name='nu') self.zeta = [] for i in range(nlay): #self.zeta.append( empty((nrow, ncol, self.npln)) ) self.zeta #self.ssz = empty((nrow, ncol, nlay)) #self.isource = empty((nrow, ncol, nlay),dtype='int32') # Set values of arrays #self.assignarray_old( self.nu, nu ) #for i in range(nlay): # self.assignarray_old( self.zeta[i], zeta[i] ) #self.assignarray_old( self.ssz, ssz ) #self.assignarray_old( self.isource, isource ) for i in range(nlay): self.zeta.append(util_2d(model,(self.npln,nrow,ncol),np.float32,zeta[i],name='zeta_'+str(i+1))) self.ssz = util_3d(model,(nlay,nrow,ncol),np.float32,ssz,name='ssz') self.isource = util_3d(model,(nlay,nrow,ncol),np.int,isource,name='isource') self.parent.add_package(self)
def setibound(self, ibound): """ Set the ibound array. """ model = self.parent nrow, ncol, nlay, nper = model.nrow_ncol_nlay_nper self.__ibound = util_3d(model, (nlay, nrow, ncol), np.int, ibound, name='ibound', locat=self.unit_number[0]) return
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=35, ): Package.__init__(self, model, extension, "BCT", 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 = util_3d(model, (nlay, nrow, ncol), np.float32, icbund, "icbund") self.porosity = util_3d(model, (nlay, nrow, ncol), np.float32, porosity, "porosity") # self.arad = util_2d(model, (1, nja), np.float32, # arad, 'arad') self.dlh = util_3d(model, (nlay, nrow, ncol), np.float32, dlh, "dlh") self.dlv = util_3d(model, (nlay, nrow, ncol), np.float32, dlv, "dlv") self.dth = util_3d(model, (nlay, nrow, ncol), np.float32, dth, "dth") self.dtv = util_3d(model, (nlay, nrow, ncol), np.float32, dth, "dtv") self.sconc = util_3d(model, (nlay, nrow, ncol), np.float32, sconc, "sconc") self.parent.add_package(self) return
def __init__(self, model, hnoflo=-9999., hdry=-8888., def_face_ct=0, bud_label=None, def_iface=None, laytyp=0, ibound=1, prsity=0.30, prsityCB=0.30, extension='mpbas', unitnumber=86): """ Package constructor. """ Package.__init__(self, model, extension, 'MPBAS', unitnumber) nrow, ncol, nlay, nper = self.parent.mf.nrow_ncol_nlay_nper self.parent.mf.get_name_file_entries() self.heading1 = '# MPBAS for Modpath, generated by Flopy.' self.heading2 = '#' self.hnoflo = hnoflo self.hdry = hdry self.def_face_ct = def_face_ct self.bud_label = bud_label self.def_iface = def_iface self.laytyp = laytyp self.__ibound = util_3d(model, (nlay, nrow, ncol), np.int, ibound, name='ibound', locat=self.unit_number[0]) self.prsity = prsity self.prsityCB = prsityCB self.prsity = util_3d(model,(nlay,nrow,ncol),np.float32,\ prsity,name='prsity',locat=self.unit_number[0]) self.prsityCB = util_3d(model,(nlay,nrow,ncol),np.float32,\ prsityCB,name='prsityCB',locat=self.unit_number[0]) self.parent.add_package(self)
def __init__(self, model, laytyp=0, layavg=0, chani=1.0, layvka=0, laywet=0, iupwcb = 53, hdry=-1E+30, iphdry = 0,\ hk=1.0, hani=1.0, vka=1.0, ss=1e-5, sy=0.15, vkcb=0.0, noparcheck=False, \ extension='upw', unitnumber = 31): Package.__init__(self, model, extension, 'UPW', unitnumber) # Call ancestor's init to set self.parent, extension, name and unit number self.heading = '# UPW for MODFLOW-NWT, generated by Flopy.' self.url = 'upw_upstream_weighting_package.htm' nrow, ncol, nlay, nper = self.parent.nrow_ncol_nlay_nper # item 1 self.iupwcb = iupwcb # Unit number for file with cell-by-cell flow terms self.hdry = hdry # Head in cells that are converted to dry during a simulation self.npupw = 0 # number of UPW parameters self.iphdry = iphdry self.laytyp = util_2d(model,(nlay,),np.int,laytyp,name='laytyp') self.layavg = util_2d(model,(nlay,),np.int,layavg,name='layavg') self.chani = util_2d(model,(nlay,),np.int,chani,name='chani') self.layvka = util_2d(model,(nlay,),np.int,layvka,name='vka') self.laywet = util_2d(model,(nlay,),np.int,laywet,name='laywet') self.options = ' ' if noparcheck: self.options = self.options + 'NOPARCHECK ' self.hk = util_3d(model,(nlay,nrow,ncol),np.float32,hk,name='hk',locat=self.unit_number[0]) self.hani = util_3d(model,(nlay,nrow,ncol),np.float32,hani,name='hani',locat=self.unit_number[0]) self.vka = util_3d(model,(nlay,nrow,ncol),np.float32,vka,name='vka',locat=self.unit_number[0]) self.ss = util_3d(model,(nlay,nrow,ncol),np.float32,ss,name='ss',locat=self.unit_number[0]) self.sy = util_3d(model,(nlay,nrow,ncol),np.float32,sy,name='sy',locat=self.unit_number[0]) self.vkcb = util_3d(model,(nlay,nrow,ncol),np.float32,vkcb,name='vkcb',locat=self.unit_number[0]) self.parent.add_package(self)
def thickness(self): """ Get a util_3d array of cell thicknesses. Returns ------- thickness : util3d array of floats (nlay, nrow, ncol) """ thk = [] thk.append(self.top - self.botm[0]) for k in range(1,self.nlay): thk.append(self.botm[k-1] - self.botm[k]) self.__thickness = util_3d(self.parent, (self.nlay, self.nrow, self.ncol), np.float32, thk, name='thickness') return self.__thickness
def __init__(self, model, nlay=1, nrow=2, ncol=2, nper=1, delr=1.0, delc=1.0, laycbd=0, top=1, botm=0, perlen=1, nstp=1, tsmult=1, steady=True, itmuni=4, lenuni=2, extension='dis', unitnumber=11, xul=None, yul=None, rotation=0.0): # Call ancestor's init to set self.parent, extension, name and unit # number Package.__init__(self, model, extension, 'DIS', unitnumber) self.url = 'dis.htm' self.nrow = nrow self.ncol = ncol self.nlay = nlay self.nper = nper # Set values of all parameters self.heading = '# Discretization file for MODFLOW, generated by Flopy.' self.laycbd = util_2d(model, (self.nlay,), np.int, laycbd, name='laycbd') self.laycbd[-1] = 0 # bottom layer must be zero self.delr = util_2d(model, (self.ncol,), np.float32, delr, name='delr', locat=self.unit_number[0]) self.delc = util_2d(model,(self.nrow,), np.float32, delc, name='delc', locat=self.unit_number[0]) self.top = util_2d(model, (self.nrow,self.ncol), np.float32, top,name='model_top', locat=self.unit_number[0]) self.botm = util_3d(model, (self.nlay+sum(self.laycbd), self.nrow,self.ncol), np.float32, botm, 'botm', locat=self.unit_number[0]) self.perlen = util_2d(model, (self.nper,), np.float32, perlen, name='perlen') self.nstp = util_2d(model, (self.nper,), np.int, nstp, name='nstp') self.tsmult = util_2d(model, (self.nper,), np.float32, tsmult, name='tsmult') self.steady = util_2d(model, (self.nper,), np.bool, steady,name='steady') self.itmuni = int(itmuni) self.lenuni = int(lenuni) self.parent.add_package(self) self.itmuni_dict = {0: "undefined", 1: "seconds", 2: "minutes", 3: "hours", 4: "days", 5: "years"} self.sr = reference.SpatialReference(self.delr.array, self.delc.array, self.lenuni, xul=xul, yul=yul, rotation=rotation)
def thickness(self): """ Get a util_3d array of cell thicknesses. Returns ------- thickness : util3d array of floats (nlay, nrow, ncol) """ thk = [] thk.append(self.top - self.botm[0]) for k in range(1, self.nlay): thk.append(self.botm[k - 1] - self.botm[k]) self.__thickness = util_3d(self.parent, (self.nlay, self.nrow, self.ncol), np.float32, thk, name='thickness') return self.__thickness
def __init__(self, model, laytyp=0, layavg=0, chani=1.0, layvka=0, laywet=0, ilpfcb = 53, hdry=-1E+30, iwdflg=0, wetfct=0.1, iwetit=1, ihdwet=0, hk=1.0, hani=1.0, vka=1.0, ss=1e-5, sy=0.15, vkcb=0.0, wetdry=-0.01, storagecoefficient=False, constantcv=False, thickstrt=False, nocvcorrection=False, novfc=False, extension='lpf', unitnumber=15): Package.__init__(self, model, extension, 'LPF', unitnumber) # Call ancestor's init to set self.parent, extension, name and unit number self.heading = '# LPF for MODFLOW, generated by Flopy.' self.url = 'lpf.htm' nrow, ncol, nlay, nper = self.parent.nrow_ncol_nlay_nper # item 1 self.ilpfcb = ilpfcb # Unit number for file with cell-by-cell flow terms self.hdry = hdry # Head in cells that are converted to dry during a simulation self.nplpf = 0 # number of LPF parameters self.laytyp = util_2d(model,(nlay,),np.int,laytyp,name='laytyp') self.layavg = util_2d(model,(nlay,),np.int,layavg,name='layavg') self.chani = util_2d(model,(nlay,),np.float32,chani,name='chani') self.layvka = util_2d(model,(nlay,),np.int,layvka,name='layvka') self.laywet = util_2d(model,(nlay,),np.int,laywet,name='laywet') self.wetfct = wetfct # Factor that is included in the calculation of the head when a cell is converted from dry to wet self.iwetit = iwetit # Iteration interval for attempting to wet cells self.ihdwet = ihdwet # Flag that determines which equation is used to define the initial head at cells that become wet self.options = ' ' if storagecoefficient: self.options = self.options + 'STORAGECOEFFICIENT ' if constantcv: self.options = self.options + 'CONSTANTCV ' if thickstrt: self.options = self.options + 'THICKSTRT ' if nocvcorrection: self.options = self.options + 'NOCVCORRECTION ' if novfc: self.options = self.options + 'NOVFC ' self.hk = util_3d(model, (nlay,nrow,ncol), np.float32, hk, name='hk', locat=self.unit_number[0]) self.hani = util_3d(model, (nlay,nrow,ncol), np.float32, hani, name='hani', locat=self.unit_number[0]) self.vka = util_3d(model, (nlay,nrow,ncol), np.float32, vka, name='vka', locat=self.unit_number[0]) self.ss = util_3d(model, (nlay,nrow,ncol), np.float32, ss, name='ss', locat=self.unit_number[0]) self.sy = util_3d(model, (nlay,nrow,ncol), np.float32, sy, name='sy', locat=self.unit_number[0]) self.vkcb = util_3d(model, (nlay,nrow,ncol), np.float32, vkcb, name='vkcb', locat=self.unit_number[0]) self.wetdry = util_3d(model, (nlay,nrow,ncol), np.float32, wetdry, name='wetdry', locat=self.unit_number[0]) self.parent.add_package(self) return
def __init__( self, model, ibcfcb=53, intercellt=0, laycon=3, trpy=1.0, hdry=-1e30, iwdflg=0, wetfct=0.1, iwetit=1, ihdwet=0, tran=1.0, hy=1.0, vcont=1.0, sf1=1e-5, sf2=0.15, wetdry=-0.01, extension="bcf", unitnumber=15, ): Package.__init__(self, model, extension, "BCF6", unitnumber) self.url = "bcf.htm" nrow, ncol, nlay, nper = self.parent.nrow_ncol_nlay_nper # Set values of all parameters self.intercellt = util_2d(model, (nlay,), np.int, intercellt, name="laycon", locat=self.unit_number[0]) self.laycon = util_2d(model, (nlay,), np.int, laycon, name="laycon", locat=self.unit_number[0]) self.trpy = util_2d(model, (nlay,), np.int, trpy, name="Anisotropy factor", locat=self.unit_number[0]) self.ibcfcb = ibcfcb self.hdry = hdry self.iwdflg = iwdflg self.wetfct = wetfct self.iwetit = iwetit self.ihdwet = ihdwet self.tran = util_3d(model, (nlay, nrow, ncol), np.float32, tran, "Transmissivity", locat=self.unit_number[0]) self.hy = util_3d( model, (nlay, nrow, ncol), np.float32, hy, "Horizontal Hydraulic Conductivity", locat=self.unit_number[0] ) self.vcont = util_3d( model, (nlay - 1, nrow, ncol), np.float32, vcont, "Vertical Conductance", locat=self.unit_number[0] ) self.sf1 = util_3d( model, (nlay, nrow, ncol), np.float32, sf1, "Primary Storage Coefficient", locat=self.unit_number[0] ) self.sf2 = util_3d( model, (nlay, nrow, ncol), np.float32, sf2, "Secondary Storage Coefficient", locat=self.unit_number[0] ) self.wetdry = util_3d(model, (nlay, nrow, ncol), np.float32, wetdry, "WETDRY", locat=self.unit_number[0]) self.parent.add_package(self)
def __init__(self, model, isothm=0, ireact=0, igetsc=1, rhob=1.8e3, prsity2=0.1, srconc=0.0, sp1=0.0, sp2=0.0, rc1=0.0, rc2=0.0, extension='rct'): #Call ancestor's init to set self.parent, extension, name and #unit number Package.__init__(self, model, extension, 'RCT', 36) nrow, ncol, nlay, nper = self.parent.mf.nrow_ncol_nlay_nper self.heading1 = '# RCT for MT3DMS, generated by Flopy.' self.isothm = isothm self.ireact = ireact self.irctop = 2 #All RCT vars are specified as 3D arrays self.igetsc = igetsc # Set values of all parameters #self.rhob = self.assignarray((nlay, nrow, ncol), np.float, rhob, # name='rhob') self.rhob = util_3d(model,(nlay,nrow,ncol),np.float32,rhob,name='rhob', locat=self.unit_number[0]) #self.prsity2 = self.assignarray((nlay, nrow, ncol), np.float, prsity2, # name='prsity2') self.prsity2 = util_3d(model,(nlay,nrow,ncol),np.float32,prsity2, name='prsity2',locat=self.unit_number[0]) #self.srconc = self.assignarray((nlay, nrow, ncol), np.float, srconc, # name='srconc') self.srconc = util_3d(model,(nlay,nrow,ncol),np.float32,srconc, name='srconc',locat=self.unit_number[0]) #self.sp1 = self.assignarray((nlay, nrow, ncol), np.float, sp1, # name='sp1') self.sp1 = util_3d(model,(nlay,nrow,ncol),np.float32,sp1,name='sp1', locat=self.unit_number[0]) #self.sp2 = self.assignarray((nlay, nrow, ncol), np.float, sp2, # name='sp2') self.sp2 = util_3d(model,(nlay,nrow,ncol),np.float32,sp2,name='sp2', locat=self.unit_number[0]) #self.rc1 = self.assignarray((nlay, nrow, ncol), np.float, rc1, # name='rc1') self.rc1 = util_3d(model,(nlay,nrow,ncol),np.float32,rc1,name='rc1', locat=self.unit_number[0]) #self.rc2 = self.assignarray((nlay, nrow, ncol), np.float, rc2, # name='rc2') self.rc2 = util_3d(model,(nlay,nrow,ncol),np.float32,rc2,name='rc2', locat=self.unit_number[0]) self.parent.add_package(self) return
def __init__(self, model, nlay=1, nrow=2, ncol=2, nper=1, delr=1.0, delc=1.0, laycbd=0, top=1, botm=0, perlen=1, nstp=1, tsmult=1, steady=True, itmuni=4, lenuni=2, extension='dis', unitnumber=11): # Call ancestor's init to set self.parent, extension, name and unit # number Package.__init__(self, model, extension, 'DIS', unitnumber) self.url = 'dis.htm' self.nrow = nrow self.ncol = ncol self.nlay = nlay self.nper = nper # Set values of all parameters self.heading = '# Discretization file for MODFLOW, generated by Flopy.' self.laycbd = util_2d(model, (self.nlay,), np.int, laycbd, name='laycbd') self.laycbd[-1] = 0 # bottom layer must be zero self.delr = util_2d(model, (self.ncol,), np.float32, delr, name='delr', locat=self.unit_number[0]) self.delc = util_2d(model,(self.nrow,), np.float32, delc, name='delc', locat=self.unit_number[0]) self.top = util_2d(model, (self.nrow,self.ncol), np.float32, top,name='model_top', locat=self.unit_number[0]) self.botm = util_3d(model, (self.nlay+sum(self.laycbd), self.nrow,self.ncol), np.float32, botm, 'botm', locat=self.unit_number[0]) self.perlen = util_2d(model, (self.nper,), np.float32, perlen, name='perlen') self.nstp = util_2d(model, (self.nper,), np.int, nstp, name='nstp') self.tsmult = util_2d(model, (self.nper,), np.float32,tsmult, name='tsmult') self.steady = util_2d(model, (self.nper,), np.bool, steady,name='steady') self.itmuni = itmuni self.lenuni = lenuni self.parent.add_package(self)
def __init__(self, model, mtdnconc=1, mfnadvfd=1, nswtcpl=1, iwtable=1, densemin=1.000, densemax=1.025, dnscrit=1e-2, denseref=1.000, denseslp=.025, firstdt=0.001, indense=0, dense=1.000, extension='vdf'): # Call ancestor's init to set self.parent, extension, name and #unit number Package.__init__(self, model, extension, 'VDF', 37) nrow, ncol, nlay, nper = self.parent.mf.nrow_ncol_nlay_nper self.mtdnconc = mtdnconc self.mfnadvfd = mfnadvfd self.nswtcpl = nswtcpl self.iwtable = iwtable self.densemin = densemin self.densemax = densemax self.dnscrit = dnscrit self.denseref = denseref self.denseslp = denseslp self.firstdt = firstdt self.indense = indense #self.dense = self.assignarray((nlay,nrow,ncol), np.float, dense, # name='dense',) self.dense = util_3d(model, (nlay, nrow, ncol), np.float32, dense, name='dense') self.parent.add_package(self) return
def __init__(self, model, ibcfcb = 0, intercellt=0,laycon=3, trpy=1.0, hdry=-1E+30, iwdflg=0, wetfct=0.1, iwetit=1, ihdwet=0, \ tran=1.0, hy=1.0, vcont=1.0, sf1=1e-5, sf2=0.15, wetdry=-0.01, extension='bcf', unitnumber=15): Package.__init__(self, model, extension, 'BCF6', unitnumber) # Call ancestor's init to set self.parent, extension, name and unit number self.url = 'bcf.htm' nrow, ncol, nlay, nper = self.parent.nrow_ncol_nlay_nper # # Set values of all parameters # self.intercellt = self.assignarray((nlay,), np.int, intercellt, name='intercellt') # Specifies how to compute intercell conductance # self.laycon = self.assignarray((nlay,), np.int, laycon, name='laycon') # Specifies the layer type (LAYCON) # self.trpy = self.assignarray((nlay,), np.float, trpy, name='trpy') # Horizontal anisotropy factor for each layer # self.ibcfcb = ibcfcb # Unit number for file with cell-by-cell flow terms # self.hdry = hdry # Head in cells that are converted to dry during a simulation # self.iwdflg = iwdflg # Flag that determines if the wetting capability is active # self.wetfct = wetfct # Factor that is included in the calculation of the head when a cell is converted from dry to wet # self.iwetit = iwetit # Iteration interval for attempting to wet cells # self.ihdwet = ihdwet # Flag that determines which equation is used to define the initial head at cells that become wet # self.tran = self.assignarray((nlay,nrow,ncol), np.float, tran, name='tran', load=True) # self.hy = self.assignarray((nlay,nrow,ncol), np.float, hy, name='hy', load=True) # self.vcont = self.assignarray((nlay-1,nrow,ncol), np.float, vcont, name='vcont', load=True) # self.sf1 = self.assignarray((nlay,nrow,ncol), np.float, sf1, name='sf1', load=True) # self.sf2 = self.assignarray((nlay,nrow,ncol), np.float, sf2, name='sf2', load=True) # self.wetdry = self.assignarray((nlay,nrow,ncol), np.float, wetdry, name='wetdry', load=True) # Set values of all parameters #self.intercellt = self.assignarray((nlay,), np.int, intercellt, name='intercellt') # Specifies how to compute intercell conductance #self.laycon = self.assignarray((nlay,), np.int, laycon, name='laycon') # Specifies the layer type (LAYCON) self.intercellt = util_2d(model,(nlay,),np.int,intercellt,name='laycon',locat=self.unit_number[0]) self.laycon = util_2d(model,(nlay,),np.int,laycon,name='laycon',locat=self.unit_number[0]) self.trpy = util_2d(model,(nlay,),np.int,trpy,name='Anisotropy factor',locat=self.unit_number[0]) self.ibcfcb = ibcfcb # Unit number for file with cell-by-cell flow terms self.hdry = hdry # Head in cells that are converted to dry during a simulation self.iwdflg = iwdflg # Flag that determines if the wetting capability is active self.wetfct = wetfct # Factor that is included in the calculation of the head when a cell is converted from dry to wet self.iwetit = iwetit # Iteration interval for attempting to wet cells self.ihdwet = ihdwet # Flag that determines which equation is used to define the initial head at cells that become wet self.tran = util_3d(model,(nlay,nrow,ncol),np.float32,tran,'Transmissivity',locat=self.unit_number[0]) self.hy = util_3d(model,(nlay,nrow,ncol),np.float32,hy,'Horizontal Hydraulic Conductivity',locat=self.unit_number[0]) self.vcont = util_3d(model,(nlay-1,nrow,ncol),np.float32,vcont,'Vertical Conductance',locat=self.unit_number[0]) self.sf1 = util_3d(model,(nlay,nrow,ncol),np.float32,sf1,'Primary Storage Coefficient',locat=self.unit_number[0]) self.sf2 = util_3d(model,(nlay,nrow,ncol),np.float32,sf2,'Secondary Storage Coefficient',locat=self.unit_number[0]) self.wetdry = util_3d(model,(nlay,nrow,ncol),np.float32,wetdry,'WETDRY',locat=self.unit_number[0]) self.parent.add_package(self)
def __init__(self, model, ibcfcb = 0, intercellt=0,laycon=3, trpy=1.0, hdry=-1E+30, iwdflg=0, wetfct=0.1, iwetit=1, ihdwet=0, \ tran=1.0, hy=1.0, vcont=1.0, sf1=1e-5, sf2=0.15, wetdry=-0.01, extension='bcf', unitnumber=15): Package.__init__(self, model, extension, 'BCF6', unitnumber) # Call ancestor's init to set self.parent, extension, name and unit number self.url = 'bcf.htm' nrow, ncol, nlay, nper = self.parent.nrow_ncol_nlay_nper # Set values of all parameters self.intercellt = util_2d(model,(nlay,),np.int,intercellt,name='laycon',locat=self.unit_number[0]) self.laycon = util_2d(model,(nlay,),np.int,laycon,name='laycon',locat=self.unit_number[0]) self.trpy = util_2d(model,(nlay,),np.int,trpy,name='Anisotropy factor',locat=self.unit_number[0]) self.ibcfcb = ibcfcb # Unit number for file with cell-by-cell flow terms self.hdry = hdry # Head in cells that are converted to dry during a simulation self.iwdflg = iwdflg # Flag that determines if the wetting capability is active self.wetfct = wetfct # Factor that is included in the calculation of the head when a cell is converted from dry to wet self.iwetit = iwetit # Iteration interval for attempting to wet cells self.ihdwet = ihdwet # Flag that determines which equation is used to define the initial head at cells that become wet self.tran = util_3d(model,(nlay,nrow,ncol),np.float32,tran,'Transmissivity',locat=self.unit_number[0]) self.hy = util_3d(model,(nlay,nrow,ncol),np.float32,hy,'Horizontal Hydraulic Conductivity',locat=self.unit_number[0]) self.vcont = util_3d(model,(nlay-1,nrow,ncol),np.float32,vcont,'Vertical Conductance',locat=self.unit_number[0]) self.sf1 = util_3d(model,(nlay,nrow,ncol),np.float32,sf1,'Primary Storage Coefficient',locat=self.unit_number[0]) self.sf2 = util_3d(model,(nlay,nrow,ncol),np.float32,sf2,'Secondary Storage Coefficient',locat=self.unit_number[0]) self.wetdry = util_3d(model,(nlay,nrow,ncol),np.float32,wetdry,'WETDRY',locat=self.unit_number[0]) self.parent.add_package(self)
def __init__(self, model, ibcfcb=53, intercellt=0,laycon=3, trpy=1.0, hdry=-1E+30, iwdflg=0, wetfct=0.1, iwetit=1, ihdwet=0, tran=1.0, hy=1.0, vcont=1.0, sf1=1e-5, sf2=0.15, wetdry=-0.01, extension='bcf', unitnumber=15): Package.__init__(self, model, extension, 'BCF6', unitnumber) self.url = 'bcf.htm' nrow, ncol, nlay, nper = self.parent.nrow_ncol_nlay_nper # Set values of all parameters self.intercellt = util_2d(model, (nlay,), np.int,intercellt, name='laycon',locat=self.unit_number[0]) self.laycon = util_2d(model, (nlay,), np.int,laycon, name='laycon', locat=self.unit_number[0]) self.trpy = util_2d(model, (nlay,), np.int, trpy, name='Anisotropy factor',locat=self.unit_number[0]) self.ibcfcb = ibcfcb self.hdry = hdry self.iwdflg = iwdflg self.wetfct = wetfct self.iwetit = iwetit self.ihdwet = ihdwet self.tran = util_3d(model, (nlay,nrow,ncol), np.float32, tran, 'Transmissivity', locat=self.unit_number[0]) self.hy = util_3d(model, (nlay,nrow,ncol), np.float32, hy, 'Horizontal Hydraulic Conductivity', locat=self.unit_number[0]) self.vcont = util_3d(model, (nlay-1,nrow,ncol), np.float32, vcont, 'Vertical Conductance', locat=self.unit_number[0]) self.sf1 = util_3d(model, (nlay,nrow,ncol), np.float32, sf1, 'Primary Storage Coefficient', locat=self.unit_number[0]) self.sf2 = util_3d(model, (nlay,nrow,ncol), np.float32, sf2, 'Secondary Storage Coefficient', locat=self.unit_number[0]) self.wetdry = util_3d(model, (nlay,nrow,ncol), np.float32, wetdry, 'WETDRY', locat=self.unit_number[0]) self.parent.add_package(self)
def write_file(self): nrow, ncol, nlay, nper = self.parent.mf.nrow_ncol_nlay_nper ModflowDis = self.parent.mf.get_package("DIS") # Open file for writing f_btn = open(self.fn_path, "w") f_btn.write("#{0:s}\n#{1:s}\n".format(self.heading1, self.heading2)) f_btn.write( "{0:10d}{1:10d}{2:10d}{3:10d}{4:10d}{5:10d}\n".format(nlay, nrow, ncol, nper, self.ncomp, self.mcomp) ) f_btn.write("{0:4s}{1:4s}{2:4s}\n".format(self.tunit, self.lunit, self.munit)) if self.parent.adv != None: f_btn.write("{0:2s}".format("T")) else: f_btn.write("{0:2s}".format("F")) if self.parent.dsp != None: f_btn.write("{0:2s}".format("T")) else: f_btn.write("{0:2s}".format("F")) if self.parent.ssm != None: f_btn.write("{0:2s}".format("T")) else: f_btn.write("{0:2s}".format("F")) if self.parent.rct != None: f_btn.write("{0:2s}".format("T")) else: f_btn.write("{0:2s}".format("F")) if self.parent.gcg != None: f_btn.write("{0:2s}".format("T")) else: f_btn.write("{0:2s}".format("F")) f_btn.write("\n") flow_package = self.parent.mf.get_package("BCF6") if flow_package != None: lc = util_2d( self.parent, (nlay,), np.int, flow_package.laycon.get_value(), name="btn - laytype", locat=self.unit_number[0], ) else: flow_package = self.parent.mf.get_package("LPF") if flow_package != None: lc = util_2d( self.parent, (nlay,), np.int, flow_package.laytyp.get_value(), name="btn - laytype", locat=self.unit_number[0], ) # --need to reset lc fmtin lc.set_fmtin("(40I2)") f_btn.write(lc.string) delr = util_2d( self.parent, (ncol,), np.float32, ModflowDis.delr.get_value(), name="delr", locat=self.unit_number[0] ) f_btn.write(delr.get_file_entry()) delc = util_2d( self.parent, (nrow,), np.float32, ModflowDis.delc.get_value(), name="delc", locat=self.unit_number[0] ) f_btn.write(delc.get_file_entry()) top = util_2d( self.parent, (nrow, ncol), np.float32, ModflowDis.top.array, name="top", locat=self.unit_number[0] ) f_btn.write(top.get_file_entry()) thickness = util_3d( self.parent, (nlay, nrow, ncol), np.float32, ModflowDis.thickness.get_value(), name="thickness", locat=self.unit_number[0], ) f_btn.write(thickness.get_file_entry()) f_btn.write(self.prsity.get_file_entry()) f_btn.write(self.icbund.get_file_entry()) # Starting concentrations for s in range(len(self.sconc)): f_btn.write(self.sconc[s].get_file_entry()) f_btn.write("{0:10.0E}{1:10.4f}\n".format(self.cinact, self.thkmin)) f_btn.write("{0:10d}{1:10d}{2:10d}{3:10d}".format(self.ifmtcn, self.ifmtnp, self.ifmtrf, self.ifmtdp)) if self.savucn == True: ss = "T" else: ss = "F" f_btn.write("{0:>10s}\n".format(ss)) # NPRS if self.timprs == None: f_btn.write("{0:10d}\n".format(self.nprs)) else: f_btn.write("{0:10d}\n".format(len(self.timprs))) timprs = util_2d(self.parent, (len(self.timprs),), np.int, self.timprs, name="timprs", fmtin="(8F10.0)") f_btn.write(timprs.string) # OBS if self.obs == None: f_btn.write("{0:10d}{1:10d}\n".format(0, self.nprobs)) else: nobs = self.obs.shape[0] f_btn.write("{0:10d}{1:10d}\n".format(nobs, self.nprobs)) for r in range(nobs): f_btn.write("{0:10d}{1:10d}{2:10d}\n".format(self.obs[r, 0], self.obs[r, 1], self.obs[r, 2])) # CHKMAS, NPRMAS if self.chkmas == True: ss = "T" else: ss = "F" f_btn.write("{0:>10s}{1:10d}\n".format(ss, self.nprmas)) # PERLEN, NSTP, TSMULT for t in range(nper): f_btn.write( "{0:10.4g}{1:10d}{2:10f}\n".format(ModflowDis.perlen[t], ModflowDis.nstp[t], ModflowDis.tsmult[t]) ) f_btn.write( "{0:10.4g}{1:10d}{2:10f}{3:10f}\n".format(self.dt0[t], self.mxstrn[t], self.ttsmult[t], self.ttsmax[t]) ) f_btn.close()
def write_file(self): nrow, ncol, nlay, nper = self.parent.mf.nrow_ncol_nlay_nper ModflowDis = self.parent.mf.get_package('DIS') # Open file for writing f_btn = open(self.fn_path, 'w') f_btn.write('#{0:s}\n#{1:s}\n'.format(self.heading1, self.heading2)) f_btn.write('{0:10d}{1:10d}{2:10d}{3:10d}{4:10d}{5:10d}\n'.format( nlay, nrow, ncol, nper, self.ncomp, self.mcomp)) f_btn.write('{0:4s}{1:4s}{2:4s}\n'\ .format(self.tunit, self.lunit, self.munit)) if (self.parent.adv != None): f_btn.write('{0:2s}'.format('T')) else: f_btn.write('{0:2s}'.format('F')) if (self.parent.dsp != None): f_btn.write('{0:2s}'.format('T')) else: f_btn.write('{0:2s}'.format('F')) if (self.parent.ssm != None): f_btn.write('{0:2s}'.format('T')) else: f_btn.write('{0:2s}'.format('F')) if (self.parent.rct != None): f_btn.write('{0:2s}'.format('T')) else: f_btn.write('{0:2s}'.format('F')) if (self.parent.gcg != None): f_btn.write('{0:2s}'.format('T')) else: f_btn.write('{0:2s}'.format('F')) f_btn.write('\n') flow_package = self.parent.mf.get_package('BCF6') if (flow_package != None): lc = util_2d(self.parent, (nlay, ), np.int, flow_package.laycon.get_value(), name='btn - laytype', locat=self.unit_number[0]) else: flow_package = self.parent.mf.get_package('LPF') if (flow_package != None): lc = util_2d(self.parent, (nlay, ), np.int, flow_package.laytyp.get_value(), name='btn - laytype', locat=self.unit_number[0]) # need to reset lc fmtin lc.set_fmtin('(40I2)') f_btn.write(lc.string) delr = util_2d(self.parent, (ncol, ), np.float32, ModflowDis.delr.get_value(), name='delr', locat=self.unit_number[0]) f_btn.write(delr.get_file_entry()) delc = util_2d(self.parent, (nrow, ), np.float32, ModflowDis.delc.get_value(), name='delc', locat=self.unit_number[0]) f_btn.write(delc.get_file_entry()) top = util_2d(self.parent, (nrow, ncol), np.float32, ModflowDis.top.array, name='top', locat=self.unit_number[0]) f_btn.write(top.get_file_entry()) thickness = util_3d(self.parent, (nlay, nrow, ncol), np.float32, ModflowDis.thickness.get_value(), name='thickness', locat=self.unit_number[0]) f_btn.write(thickness.get_file_entry()) f_btn.write(self.prsity.get_file_entry()) f_btn.write(self.__icbund.get_file_entry()) # Starting concentrations for s in range(len(self.sconc)): f_btn.write(self.sconc[s].get_file_entry()) f_btn.write('{0:10.0E}{1:10.4f}\n'\ .format(self.cinact,self.thkmin)) f_btn.write('{0:10d}{1:10d}{2:10d}{3:10d}'\ .format(self.ifmtcn, self.ifmtnp, self.ifmtrf, self.ifmtdp)) if (self.savucn == True): ss = 'T' else: ss = 'F' f_btn.write('{0:>10s}\n'.format(ss)) # NPRS if (self.timprs == None): f_btn.write('{0:10d}\n'.format(self.nprs)) else: f_btn.write('{0:10d}\n'.format(len(self.timprs))) timprs = util_2d(self.parent, (len(self.timprs), ), np.float32, self.timprs, name='timprs', fmtin='(8G10.4)') f_btn.write(timprs.string) # OBS if (self.obs == None): f_btn.write('{0:10d}{1:10d}\n'.format(0, self.nprobs)) else: nobs = self.obs.shape[0] f_btn.write('{0:10d}{1:10d}\n'.format(nobs, self.nprobs)) for r in range(nobs): f_btn.write('{0:10d}{1:10d}{2:10d}\n'\ .format(self.obs[r, 0], self.obs[r, 1], self.obs[r, 2])) # CHKMAS, NPRMAS if (self.chkmas == True): ss = 'T' else: ss = 'F' f_btn.write('{0:>10s}{1:10d}\n'.format(ss, self.nprmas)) # PERLEN, NSTP, TSMULT for t in range(nper): f_btn.write('{0:10.4G}{1:10d}{2:10.4G}\n'.format( ModflowDis.perlen[t], ModflowDis.nstp[t], ModflowDis.tsmult[t])) f_btn.write('{0:10.4G}{1:10d}{2:10.4G}{3:10.4G}\n'.format( self.dt0[t], self.mxstrn[t], self.ttsmult[t], self.ttsmax[t])) f_btn.close()
def __init__( self, model, nsrf=1, istrat=1, nobs=0, iswizt=55, iswibd=56, iswiobs=0, options=None, nsolver=1, iprsol=0, mutsol=3, solver2params={ 'mxiter': 100, 'iter1': 20, 'npcond': 1, 'zclose': 1e-3, 'rclose': 1e-4, 'relax': 1.0, 'nbpol': 2, 'damp': 1.0, 'dampt': 1.0 }, toeslope=0.05, tipslope=0.05, alpha=None, beta=0.1, nadptmx=1, nadptmn=1, adptfct=1.0, nu=0.025, zeta=0.0, ssz=0.25, isource=0, obsnam=[], obslrc=[], extension=['swi2', 'zta', 'swb'], unit_number=29, npln=None): """ Package constructor. """ name = ['SWI2', 'DATA(BINARY)', 'DATA(BINARY)'] units = [unit_number, iswizt, iswibd] extra = ['', 'REPLACE', 'REPLACE'] if nobs > 0: extension.append('zobs') name.append('DATA') units.append(iswiobs) extra.append('REPLACE') Package.__init__( self, model, extension=extension, name=name, unit_number=units, extra=extra ) # Call ancestor's init to set self.parent, extension, name and unit number nrow, ncol, nlay, nper = self.parent.nrow_ncol_nlay_nper self.heading = '# Salt Water Intrusion (SWI2) package file for MODFLOW-2005, generated by Flopy.' #--options self.fsssopt, self.adaptive = False, False if isinstance(options, list): if len(options) < 1: self.options = None else: self.options = options for o in self.options: if o.lower() == 'fsssopt': self.fsssopt = True elif o.lower() == 'adaptive': self.adaptive = True else: self.options = None if npln is not None: print 'npln keyword is deprecated. use the nsrf keyword' nsrf = npln self.nsrf, self.istrat, self.nobs, self.iswizt, self.iswibd, self.iswiobs = nsrf, istrat, nobs, \ iswizt, iswibd, iswiobs # self.nsolver, self.iprsol, self.mutsol = nsolver, iprsol, mutsol # self.solver2params = solver2params # self.toeslope, self.tipslope, self.alpha, self.beta = toeslope, tipslope, alpha, beta self.nadptmx, self.nadptmn, self.adptfct = nadptmx, nadptmn, adptfct # Create arrays so that they have the correct size if self.istrat == 1: self.nu = util_2d(model, (self.nsrf + 1, ), np.float32, nu, name='nu') else: self.nu = util_2d(model, (self.nsrf + 2, ), np.float32, nu, name='nu') self.zeta = [] for i in range(self.nsrf): self.zeta.append( util_3d(model, (nlay, nrow, ncol), np.float32, zeta[i], name='zeta_' + str(i + 1))) self.ssz = util_3d(model, (nlay, nrow, ncol), np.float32, ssz, name='ssz') self.isource = util_3d(model, (nlay, nrow, ncol), np.int, isource, name='isource') # self.obsnam = obsnam if isinstance(obslrc, list): obslrc = np.array(obslrc, dtype=np.int) self.obslrc = obslrc # self.parent.add_package(self)
def __init__(self, model, itrnsp=1, ibctcb=0, mcomp=1, ic_ibound_flg=1, itvd=1, iadsorb=0, ict=0, cinact=-999., ciclose=1.e-6, idisp=1, ixdisp=0, diffnc=0., izod=0, ifod=0, icbund=1, porosity=0.1, bulkd=1., arad=0., dlh=0., dlv=0., dth=0., dtv=0., sconc=0., extension='bct', unitnumber=35): Package.__init__(self, model, extension, 'BCT', 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 = util_3d( model, (nlay, nrow, ncol), np.float32, icbund, 'icbund', ) self.porosity = util_3d(model, (nlay, nrow, ncol), np.float32, porosity, 'porosity') #self.arad = util_2d(model, (1, nja), np.float32, # arad, 'arad') self.dlh = util_3d(model, (nlay, nrow, ncol), np.float32, dlh, 'dlh') self.dlv = util_3d(model, (nlay, nrow, ncol), np.float32, dlv, 'dlv') self.dth = util_3d(model, (nlay, nrow, ncol), np.float32, dth, 'dth') self.dtv = util_3d(model, (nlay, nrow, ncol), np.float32, dth, 'dtv') self.sconc = util_3d( model, (nlay, nrow, ncol), np.float32, sconc, 'sconc', ) self.parent.add_package(self) return
def __init__( self, model, ncomp=None, mcomp=1, tunit="D", lunit="M", munit="KG", prsity=0.30, icbund=1, sconc=0.0, cinact=1e30, thkmin=0.01, ifmtcn=0, ifmtnp=0, ifmtrf=0, ifmtdp=0, savucn=True, nprs=0, timprs=None, obs=None, nprobs=1, chkmas=True, nprmas=1, dt0=0, mxstrn=50000, ttsmult=1.0, ttsmax=0, species_names=[], extension="btn", ): Package.__init__(self, model, extension, "BTN", 31) nrow, ncol, nlay, nper = self.parent.mf.nrow_ncol_nlay_nper self.heading1 = "# BTN for MT3DMS, generated by Flopy." self.heading2 = "#" self.mcomp = mcomp self.tunit = tunit self.lunit = lunit self.munit = munit self.cinact = cinact self.thkmin = thkmin self.ifmtcn = ifmtcn self.ifmtnp = ifmtnp self.ifmtrf = ifmtrf self.ifmtdp = ifmtdp self.savucn = savucn self.nprs = nprs self.timprs = timprs self.obs = obs self.nprobs = nprobs self.chkmas = chkmas self.nprmas = nprmas self.species_names = species_names self.prsity = util_3d(model, (nlay, nrow, ncol), np.float32, prsity, name="prsity", locat=self.unit_number[0]) self.icbund = util_3d(model, (nlay, nrow, ncol), np.int, icbund, name="icbund", locat=self.unit_number[0]) # Starting concentrations # --some defense if np.isscalar(sconc) and ncomp is None: # print 'setting ncomp == 1 and tiling scalar-valued sconc to nlay' sconc = [sconc] ncomp = 1 elif ncomp != len(sconc): raise Exception("BTN input error - ncomp not equal to len(sconc)") self.ncomp = ncomp self.sconc = [] for i in range(ncomp): u3d = util_3d( model, (nlay, nrow, ncol), np.float32, sconc[i], name="sconc" + str(i + 1), locat=self.unit_number[0] ) self.sconc.append(u3d) self.dt0 = util_2d(model, (nper,), np.float32, dt0, name="dt0") self.mxstrn = util_2d(model, (nper,), np.int, mxstrn, name="mxstrn") self.ttsmult = util_2d(model, (nper,), np.float32, ttsmult, name="ttmult") self.ttsmax = util_2d(model, (nper,), np.float32, ttsmax, name="ttsmax") self.parent.add_package(self)
def __init__(self, model, ncomp=1, mcomp=1, tunit='D', lunit='M', munit='KG', prsity=0.30, icbund=1, sconc=0.0, cinact=1e30, thkmin=0.01, ifmtcn=0, ifmtnp=0, ifmtrf=0, ifmtdp=0, savucn=True, nprs=0, timprs=None, obs=None, nprobs=1, chkmas=True, nprmas=1, dt0=0, mxstrn=50000, ttsmult=1.0, ttsmax=0, species_names=[], extension='btn', **kwargs): Package.__init__(self, model, extension, 'BTN', 31) nrow, ncol, nlay, nper = self.parent.mf.nrow_ncol_nlay_nper self.heading1 = '# BTN for MT3DMS, generated by Flopy.' self.heading2 = '#' self.mcomp = mcomp self.tunit = tunit self.lunit = lunit self.munit = munit self.cinact = cinact self.thkmin = thkmin self.ifmtcn = ifmtcn self.ifmtnp = ifmtnp self.ifmtrf = ifmtrf self.ifmtdp = ifmtdp self.savucn = savucn self.nprs = nprs self.timprs = timprs self.obs = obs self.nprobs = nprobs self.chkmas = chkmas self.nprmas = nprmas self.species_names = species_names self.prsity = util_3d(model, (nlay, nrow, ncol), np.float32, prsity, name='prsity', locat=self.unit_number[0]) self.__icbund = util_3d(model, (nlay, nrow, ncol), np.int, icbund, name='icbund', locat=self.unit_number[0]) # Starting concentrations # some defense # self.ncomp = ncomp self.sconc = [] u3d = util_3d(model, (nlay, nrow, ncol), np.float32, sconc, name='sconc1', locat=self.unit_number[0]) self.sconc.append(u3d) if ncomp > 1: for icomp in range(2, ncomp + 1): name = "sconc" + str(icomp) val = 0.0 if name in list(kwargs.keys()): val = kwargs[name] kwargs.pop(name) else: print("BTN: setting sconc for component " +\ str(icomp) + " to zero, kwarg name " +\ name) u3d = util_3d(model, (nlay, nrow, ncol), np.float32, val, name=name, locat=self.unit_number[0]) self.sconc.append(u3d) if len(list(kwargs.keys())) > 0: raise Exception("BTN error: unrecognized kwargs: " + ' '.join(list(kwargs.keys()))) self.dt0 = util_2d(model, (nper, ), np.float32, dt0, name='dt0') self.mxstrn = util_2d(model, (nper, ), np.int, mxstrn, name='mxstrn') self.ttsmult = util_2d(model, (nper, ), np.float32, ttsmult, name='ttmult') self.ttsmax = util_2d(model, (nper, ), np.float32, ttsmax, name='ttsmax') self.parent.add_package(self)
def __init__(self, model, nsrf=1, istrat=1, nobs=0, iswizt=55, iswibd=56, iswiobs=0, fsssopt=False, adaptive=False, \ nsolver=1, iprsol=0, mutsol=3, \ solver2params = {'mxiter':100, 'iter1':20, 'npcond':1, 'zclose':1e-3, 'rclose':1e-4, 'relax':1.0, 'nbpol':2, 'damp':1.0, 'dampt':1.0}, \ toeslope=0.05, tipslope=0.05, alpha=None, beta=0.1, nadptmx=1, nadptmn=1, adptfct=1.0, \ nu=0.025, zeta=[], ssz=[], isource=0, \ obsnam=[], obslrc=[], extension=['swi2','zta','swb'], unit_number=29, \ npln=None): name = ['SWI2', 'DATA(BINARY)', 'DATA(BINARY)'] units = [unit_number,iswizt,iswibd] extra = ['','REPLACE','REPLACE'] if nobs > 0: extension = name.append('zobs') name = name.append('DATA') units = units.append(iswiobs) extra = extra.append('') #Package.__init__(self, model, ) # Call ancestor's init to set self.parent #Package.__init__(self, model, extension, ['SWI', 'DATA(BINARY)', 'DATA(BINARY)'], [unit_number,iswizt,iswibd], extra=['','REPLACE','REPLACE']) # Call ancestor's init to set self.parent, extension, name and unit number Package.__init__(self, model, extension=extension, name=name, unit_number=units, extra=extra) # Call ancestor's init to set self.parent, extension, name and unit number nrow, ncol, nlay, nper = self.parent.nrow_ncol_nlay_nper self.heading = '# Salt Water Intrusion (SWI2) package file for MODFLOW-2005, generated by Flopy.' # self.fsssopt, self.adaptive = fsssopt, adaptive # if npln is not None: print 'npln keyword is deprecated. use the nsrf keyword' nsrf = npln self.nsrf, self.istrat, self.nobs, self.iswizt, self.iswibd, self.iswiobs = nsrf, istrat, nobs, iswizt, iswibd, iswiobs # self.nsolver, self.iprsol, self.mutsol = nsolver, iprsol, mutsol # self.solver2params = solver2params # self.toeslope, self.tipslope, self.alpha, self.beta = toeslope, tipslope, alpha, beta self.nadptmx, self.nadptmn, self.adptfct = nadptmx, nadptmn, adptfct # Create arrays so that they have the correct size if self.istrat == 1: #self.nu = empty( self.nsrf+1 ) self.nu = util_2d(model,(self.nsrf+1,),np.float32,nu,name='nu') else: #self.nu = empty( self.nsrf+2 ) self.nu = util_2d(model,(self.nsrf+2,),np.float32,nu,name='nu') self.zeta = [] #for i in range(nlay): # self.zeta.append( empty((nrow, ncol, self.nsrf)) ) #self.ssz = empty((nrow, ncol, nlay)) #self.isource = empty((nrow, ncol, nlay),dtype='int32') # Set values of arrays #self.assignarray_old( self.nu, nu ) for i in range(self.nsrf): #self.assignarray_old( self.zeta[i], zeta[i] ) self.zeta.append(util_3d(model,(nlay,nrow,ncol),np.float32,zeta[i],name='zeta_'+str(i+1))) #self.assignarray_old( self.ssz, ssz ) self.ssz = util_3d(model,(nlay,nrow,ncol),np.float32,ssz,name='ssz') #self.assignarray_old( self.isource, isource ) self.isource = util_3d(model,(nlay,nrow,ncol),np.int,isource,name='isource') # self.obsnam = obsnam self.obslrc = obslrc # self.parent.add_package(self)
def __init__(self, model, nlay=1, nrow=2, ncol=2, nper=1, delr=1.0, delc=1.0, laycbd=0, top=1, botm=0, perlen=1, nstp=1, tsmult=1, steady=True, itmuni=4, lenuni=2, extension='dis', unitnumber=11): # Call ancestor's init to set self.parent, extension, name and unit # number Package.__init__(self, model, extension, 'DIS', unitnumber) self.url = 'dis.htm' self.nrow = nrow self.ncol = ncol self.nlay = nlay self.nper = nper # Set values of all parameters self.heading = '# Discretization file for MODFLOW, generated by Flopy.' self.laycbd = util_2d(model, (self.nlay, ), np.int, laycbd, name='laycbd') self.laycbd[-1] = 0 # bottom layer must be zero self.delr = util_2d(model, (self.ncol, ), np.float32, delr, name='delr', locat=self.unit_number[0]) self.delc = util_2d(model, (self.nrow, ), np.float32, delc, name='delc', locat=self.unit_number[0]) self.top = util_2d(model, (self.nrow, self.ncol), np.float32, top, name='model_top', locat=self.unit_number[0]) self.botm = util_3d( model, (self.nlay + sum(self.laycbd), self.nrow, self.ncol), np.float32, botm, 'botm', locat=self.unit_number[0]) self.perlen = util_2d(model, (self.nper, ), np.float32, perlen, name='perlen') self.nstp = util_2d(model, (self.nper, ), np.int, nstp, name='nstp') self.tsmult = util_2d(model, (self.nper, ), np.float32, tsmult, name='tsmult') self.steady = util_2d(model, (self.nper, ), np.bool, steady, name='steady') self.itmuni = itmuni self.lenuni = lenuni self.parent.add_package(self) self.itmuni_dict = { 0: "undefined", 1: "seconds", 2: "minutes", 3: "hours", 4: "days", 5: "years" }
def write_file(self): nrow, ncol, nlay, nper = self.parent.mf.nrow_ncol_nlay_nper ModflowDis = self.parent.mf.get_package('DIS') # Open file for writing f_btn = open(self.fn_path, 'w') f_btn.write('#{0:s}\n#{1:s}\n'.format(self.heading1,self.heading2)) f_btn.write('{0:10d}{1:10d}{2:10d}{3:10d}{4:10d}{5:10d}\n' .format(nlay, nrow, ncol, nper, self.ncomp, self.mcomp)) f_btn.write('{0:4s}{1:4s}{2:4s}\n'\ .format(self.tunit, self.lunit, self.munit)) if (self.parent.adv != None): f_btn.write('{0:2s}'.format('T')) else: f_btn.write('{0:2s}'.format('F')) if (self.parent.dsp != None): f_btn.write('{0:2s}'.format('T')) else: f_btn.write('{0:2s}'.format('F')) if (self.parent.ssm != None): f_btn.write('{0:2s}'.format('T')) else: f_btn.write('{0:2s}'.format('F')) if (self.parent.rct != None): f_btn.write('{0:2s}'.format('T')) else: f_btn.write('{0:2s}'.format('F')) if (self.parent.gcg != None): f_btn.write('{0:2s}'.format('T')) else: f_btn.write('{0:2s}'.format('F')) f_btn.write('\n') flow_package = self.parent.mf.get_package('BCF6') if (flow_package != None): lc = util_2d(self.parent, (nlay,), np.int, flow_package.laycon.get_value(), name='btn - laytype', locat=self.unit_number[0]) else: flow_package = self.parent.mf.get_package('LPF') if (flow_package != None): lc = util_2d(self.parent, (nlay,), np.int, flow_package.laytyp.get_value(), name='btn - laytype', locat=self.unit_number[0]) #--need to reset lc fmtin lc.set_fmtin('(40I2)') f_btn.write(lc.string) delr = util_2d(self.parent, (ncol,), np.float32, ModflowDis.delr.get_value(), name='delr', locat=self.unit_number[0]) f_btn.write(delr.get_file_entry()) delc = util_2d(self.parent, (nrow,), np.float32, ModflowDis.delc.get_value(), name='delc', locat=self.unit_number[0]) f_btn.write(delc.get_file_entry()) top = util_2d(self.parent, (nrow,ncol), np.float32, ModflowDis.top.array, name='top', locat=self.unit_number[0]) f_btn.write(top.get_file_entry()) thickness = util_3d(self.parent, (nlay, nrow, ncol), np.float32, ModflowDis.thickness.get_value(), name='thickness', locat=self.unit_number[0]) f_btn.write(thickness.get_file_entry()) f_btn.write(self.prsity.get_file_entry()) f_btn.write(self.__icbund.get_file_entry()) # Starting concentrations for s in range(len(self.sconc)): f_btn.write(self.sconc[s].get_file_entry()) f_btn.write('{0:10.0E}{1:10.4f}\n'\ .format(self.cinact,self.thkmin)) f_btn.write('{0:10d}{1:10d}{2:10d}{3:10d}'\ .format(self.ifmtcn, self.ifmtnp, self.ifmtrf, self.ifmtdp)) if (self.savucn == True): ss = 'T' else: ss = 'F' f_btn.write('{0:>10s}\n'.format(ss)) # NPRS if (self.timprs == None): f_btn.write('{0:10d}\n'.format(self.nprs)) else: f_btn.write('{0:10d}\n'.format(len(self.timprs))) timprs = util_2d(self.parent, (len(self.timprs),), np.int, self.timprs, name='timprs', fmtin='(8F10.0)') f_btn.write(timprs.string) # OBS if (self.obs == None): f_btn.write('{0:10d}{1:10d}\n'.format(0, self.nprobs)) else: nobs = self.obs.shape[0] f_btn.write('{0:10d}{1:10d}\n'.format(nobs, self.nprobs)) for r in range(nobs): f_btn.write('{0:10d}{1:10d}{2:10d}\n'\ .format(self.obs[r, 0], self.obs[r, 1], self.obs[r, 2])) # CHKMAS, NPRMAS if (self.chkmas == True): ss = 'T' else: ss = 'F' f_btn.write('{0:>10s}{1:10d}\n'.format(ss, self.nprmas)) # PERLEN, NSTP, TSMULT for t in range(nper): f_btn.write('{0:10.4G}{1:10d}{2:10.4G}\n' .format(ModflowDis.perlen[t], ModflowDis.nstp[t], ModflowDis.tsmult[t])) f_btn.write('{0:10.4G}{1:10d}{2:10.4G}{3:10.4G}\n' .format(self.dt0[t], self.mxstrn[t], self.ttsmult[t], self.ttsmax[t])) f_btn.close()
def __init__(self, model, npln=1, istrat=1, iswizt=53, nprn=1, toeslope=0.05, tipslope=0.05, \ zetamin=0.005, delzeta=0.05, nu=0.025, zeta=[], ssz=[], isource=0, extension='swi', fname_output='swi.zta'): """ Package constructor. """ Package.__init__(self, model) # Call ancestor's init to set self.parent nrow, ncol, nlay, nper = self.parent.nrow_ncol_nlay_nper self.unit_number = [29, 53] self.extension = extension self.file_name = [ self.parent.name + '.' + self.extension, fname_output ] self.name = ['SWI', 'DATA(BINARY)'] self.heading = '# Salt Water Intrusion package file for MODFLOW-2000, generated by Flopy.' self.npln = npln self.istrat = istrat self.iswizt = iswizt self.nprn = nprn self.toeslope = toeslope self.tipslope = tipslope self.zetamin = zetamin self.delzeta = delzeta # Create arrays so that they have the correct size if self.istrat == 1: #self.nu = empty( self.npln+1 ) self.nu = util_2d(model, (self.npln + 1, ), np.float32, nu, name='nu') else: #self.nu = empty( self.npln+2 ) self.nu = util_2d(model, (self.npln + 2, ), np.float32, nu, name='nu') self.zeta = [] for i in range(nlay): #self.zeta.append( empty((nrow, ncol, self.npln)) ) self.zeta #self.ssz = empty((nrow, ncol, nlay)) #self.isource = empty((nrow, ncol, nlay),dtype='int32') # Set values of arrays #self.assignarray_old( self.nu, nu ) #for i in range(nlay): # self.assignarray_old( self.zeta[i], zeta[i] ) #self.assignarray_old( self.ssz, ssz ) #self.assignarray_old( self.isource, isource ) for i in range(nlay): self.zeta.append( util_2d(model, (self.npln, nrow, ncol), np.float32, zeta[i], name='zeta_' + str(i + 1))) self.ssz = util_3d(model, (nlay, nrow, ncol), np.float32, ssz, name='ssz') self.isource = util_3d(model, (nlay, nrow, ncol), np.int, isource, name='isource') self.parent.add_package(self)
def __init__( self, model, nsrf=1, istrat=1, nobs=0, iswizt=55, iswibd=56, iswiobs=0, options=None, nsolver=1, iprsol=0, mutsol=3, solver2params={ "mxiter": 100, "iter1": 20, "npcond": 1, "zclose": 1e-3, "rclose": 1e-4, "relax": 1.0, "nbpol": 2, "damp": 1.0, "dampt": 1.0, }, toeslope=0.05, tipslope=0.05, alpha=None, beta=0.1, nadptmx=1, nadptmn=1, adptfct=1.0, nu=0.025, zeta=0.0, ssz=0.25, isource=0, obsnam=[], obslrc=[], extension=["swi2", "zta", "swb"], unit_number=29, npln=None, ): """ Package constructor. """ name = ["SWI2", "DATA(BINARY)", "DATA(BINARY)"] units = [unit_number, iswizt, iswibd] extra = ["", "REPLACE", "REPLACE"] if nobs > 0: extension.append("zobs") name.append("DATA") units.append(iswiobs) extra.append("REPLACE") Package.__init__( self, model, extension=extension, name=name, unit_number=units, extra=extra ) # Call ancestor's init to set self.parent, extension, name and unit number nrow, ncol, nlay, nper = self.parent.nrow_ncol_nlay_nper self.heading = "# Salt Water Intrusion (SWI2) package file for MODFLOW-2005, generated by Flopy." # options self.fsssopt, self.adaptive = False, False if isinstance(options, list): if len(options) < 1: self.options = None else: self.options = options for o in self.options: if o.lower() == "fsssopt": self.fsssopt = True elif o.lower() == "adaptive": self.adaptive = True else: self.options = None if npln is not None: print("npln keyword is deprecated. use the nsrf keyword") nsrf = npln self.nsrf, self.istrat, self.nobs, self.iswizt, self.iswibd, self.iswiobs = ( nsrf, istrat, nobs, iswizt, iswibd, iswiobs, ) # self.nsolver, self.iprsol, self.mutsol = nsolver, iprsol, mutsol # self.solver2params = solver2params # self.toeslope, self.tipslope, self.alpha, self.beta = toeslope, tipslope, alpha, beta self.nadptmx, self.nadptmn, self.adptfct = nadptmx, nadptmn, adptfct # Create arrays so that they have the correct size if self.istrat == 1: self.nu = util_2d(model, (self.nsrf + 1,), np.float32, nu, name="nu") else: self.nu = util_2d(model, (self.nsrf + 2,), np.float32, nu, name="nu") self.zeta = [] for i in range(self.nsrf): self.zeta.append(util_3d(model, (nlay, nrow, ncol), np.float32, zeta[i], name="zeta_" + str(i + 1))) self.ssz = util_3d(model, (nlay, nrow, ncol), np.float32, ssz, name="ssz") self.isource = util_3d(model, (nlay, nrow, ncol), np.int, isource, name="isource") # self.obsnam = obsnam if isinstance(obslrc, list): obslrc = np.array(obslrc, dtype=np.int) self.obslrc = obslrc # self.parent.add_package(self)
def __init__(self, model, nsrf=1, istrat=1, nobs=0, iswizt=55, iswibd=56, iswiobs=0, options=None, nsolver=1, iprsol=0, mutsol=3, solver2params={'mxiter': 100, 'iter1': 20, 'npcond': 1, 'zclose': 1e-3, 'rclose': 1e-4, 'relax': 1.0, 'nbpol': 2, 'damp': 1.0, 'dampt': 1.0}, toeslope=0.05, tipslope=0.05, alpha=None, beta=0.1, nadptmx=1, nadptmn=1, adptfct=1.0, nu=0.025, zeta=0.0, ssz=0.25, isource=0, obsnam=[], obslrc=[], extension=['swi2', 'zta', 'swb'], unit_number=29, npln=None): """ Package constructor. """ name = ['SWI2', 'DATA(BINARY)', 'DATA(BINARY)'] units = [unit_number, iswizt, iswibd] extra = ['', 'REPLACE', 'REPLACE'] if nobs > 0: extension.append('zobs') name.append('DATA') units.append(iswiobs) extra.append('REPLACE') Package.__init__(self, model, extension=extension, name=name, unit_number=units, extra=extra) # Call ancestor's init to set self.parent, extension, name and unit number nrow, ncol, nlay, nper = self.parent.nrow_ncol_nlay_nper self.heading = '# Salt Water Intrusion (SWI2) package file for MODFLOW-2005, generated by Flopy.' #--options self.fsssopt, self.adaptive = False, False if isinstance(options, list): if len(options) < 1: self.options = None else: self.options = options for o in self.options: if o.lower() == 'fsssopt': self.fsssopt = True elif o.lower() == 'adaptive': self.adaptive = True else: self.options = None if npln is not None: print 'npln keyword is deprecated. use the nsrf keyword' nsrf = npln self.nsrf, self.istrat, self.nobs, self.iswizt, self.iswibd, self.iswiobs = nsrf, istrat, nobs, \ iswizt, iswibd, iswiobs # self.nsolver, self.iprsol, self.mutsol = nsolver, iprsol, mutsol # self.solver2params = solver2params # self.toeslope, self.tipslope, self.alpha, self.beta = toeslope, tipslope, alpha, beta self.nadptmx, self.nadptmn, self.adptfct = nadptmx, nadptmn, adptfct # Create arrays so that they have the correct size if self.istrat == 1: self.nu = util_2d(model, (self.nsrf + 1,), np.float32, nu, name='nu') else: self.nu = util_2d(model, (self.nsrf + 2,), np.float32, nu, name='nu') self.zeta = [] for i in range(self.nsrf): self.zeta.append(util_3d(model, (nlay, nrow, ncol), np.float32, zeta[i], name='zeta_' + str(i + 1))) self.ssz = util_3d(model, (nlay, nrow, ncol), np.float32, ssz, name='ssz') self.isource = util_3d(model, (nlay, nrow, ncol), np.int, isource, name='isource') # self.obsnam = obsnam if isinstance(obslrc, list): obslrc = np.array(obslrc, dtype=np.int) self.obslrc = obslrc # self.parent.add_package(self)
def __init__(self, model, al=0.01, trpt=0.1, trpv=0.01, dmcoef=1e-9, extension='dsp', multiDiff=False, **kwargs): ''' if dmcoef is passed as a list of (nlay, nrow, ncol) arrays, then the multicomponent diffusion is activated ''' # Call ancestor's init to set self.parent, extension, name and #unit number Package.__init__(self, model, extension, 'DSP', 33) nrow, ncol, nlay, nper = self.parent.mf.nrow_ncol_nlay_nper ncomp = self.parent.get_ncomp() # if multiDiff: # assert isinstance(dmcoef,list),('using multicomponent diffusion ' # 'requires dmcoef is list of ' # 'length ncomp') # if len(dmcoef) != ncomp: # raise TypeError,('using multicomponent diffusion requires ' # 'dmcoef is list of length ncomp') self.multiDiff = multiDiff #self.al = self.assignarray((nlay, nrow, ncol), np.float, al, # name='al', load=model.load ) self.al = util_3d(model, (nlay, nrow, ncol), np.float32, al, name='al', locat=self.unit_number[0]) #self.trpt = self.assignarray((nlay,), np.float, trpt, name='trpt', # load=model.load) self.trpt = util_2d(model, (nlay, ), np.float32, trpt, name='trpt', locat=self.unit_number[0]) #self.trpv = self.assignarray((nlay,), np.float, trpv, name='trpv', # load=model.load) self.trpv = util_2d(model, (nlay, ), np.float32, trpt, name='trpv', locat=self.unit_number[0]) self.dmcoef = [] a = util_3d(model, (nlay, nrow, ncol), np.float32, dmcoef, name='dmcoef1', locat=self.unit_number[0]) self.dmcoef.append(a) if self.multiDiff: for icomp in range(2, ncomp + 1): name = "dmcoef" + str(icomp) val = 0.0 if name in kwargs.keys(): val = kwargs[name] kwargs.pop(name) else: print "DSP: setting dmcoef for component " +\ str(icomp) + " to zero, kwarg name " +\ name a = util_3d(model, (nlay, nrow, ncol), np.float32, val, name=name, locat=self.unit_number[0]) self.dmcoef.append(a) if len(kwargs.keys()) > 0: raise Exception("DSP error: unrecognized kwargs: " + ' '.join(kwargs.keys())) self.parent.add_package(self) return
def __init__(self, model, laytyp=0, layavg=0, chani=1.0, layvka=0, laywet=0, ilpfcb=53, hdry=-1E+30, iwdflg=0, wetfct=0.1, iwetit=1, ihdwet=0, hk=1.0, hani=1.0, vka=1.0, ss=1e-5, sy=0.15, vkcb=0.0, wetdry=-0.01, storagecoefficient=False, constantcv=False, thickstrt=False, nocvcorrection=False, novfc=False, extension='lpf', unitnumber=15): Package.__init__( self, model, extension, 'LPF', unitnumber ) # Call ancestor's init to set self.parent, extension, name and unit number self.heading = '# LPF for MODFLOW, generated by Flopy.' self.url = 'lpf.htm' nrow, ncol, nlay, nper = self.parent.nrow_ncol_nlay_nper # item 1 self.ilpfcb = ilpfcb # Unit number for file with cell-by-cell flow terms self.hdry = hdry # Head in cells that are converted to dry during a simulation self.nplpf = 0 # number of LPF parameters self.laytyp = util_2d(model, (nlay, ), np.int, laytyp, name='laytyp') self.layavg = util_2d(model, (nlay, ), np.int, layavg, name='layavg') self.chani = util_2d(model, (nlay, ), np.int, chani, name='chani') self.layvka = util_2d(model, (nlay, ), np.int, layvka, name='layvka') self.laywet = util_2d(model, (nlay, ), np.int, laywet, name='laywet') self.wetfct = wetfct # Factor that is included in the calculation of the head when a cell is converted from dry to wet self.iwetit = iwetit # Iteration interval for attempting to wet cells self.ihdwet = ihdwet # Flag that determines which equation is used to define the initial head at cells that become wet self.options = ' ' if storagecoefficient: self.options = self.options + 'STORAGECOEFFICIENT ' if constantcv: self.options = self.options + 'CONSTANTCV ' if thickstrt: self.options = self.options + 'THICKSTRT ' if nocvcorrection: self.options = self.options + 'NOCVCORRECTION ' if novfc: self.options = self.options + 'NOVFC ' self.hk = util_3d(model, (nlay, nrow, ncol), np.float32, hk, name='hk', locat=self.unit_number[0]) self.hani = util_3d(model, (nlay, nrow, ncol), np.float32, hani, name='hani', locat=self.unit_number[0]) self.vka = util_3d(model, (nlay, nrow, ncol), np.float32, vka, name='vka', locat=self.unit_number[0]) self.ss = util_3d(model, (nlay, nrow, ncol), np.float32, ss, name='ss', locat=self.unit_number[0]) self.sy = util_3d(model, (nlay, nrow, ncol), np.float32, sy, name='sy', locat=self.unit_number[0]) self.vkcb = util_3d(model, (nlay, nrow, ncol), np.float32, vkcb, name='vkcb', locat=self.unit_number[0]) self.wetdry = util_3d(model, (nlay, nrow, ncol), np.float32, wetdry, name='wetdry', locat=self.unit_number[0]) self.parent.add_package(self) return
def read_from_cnf(self, cnf_file_name, n_per_line = 0): """ Read discretization informatio from an MT3D configuration file. """ def getn(ii, jj): if (jj == 0): n = 1 else: n = int(ii / jj) if (ii % jj != 0): n = n + 1 return n try: f_cnf = open(cnf_file_name, 'r') # nlay, nrow, ncol line = f_cnf.readline() s = line.split() cnf_nlay = int(s[0]) cnf_nrow = int(s[1]) cnf_ncol = int(s[2]) # ncol column widths delr[c] line = '' for dummy in range(getn(cnf_ncol, n_per_line)): line = line + f_cnf.readline() cnf_delr = [float(s) for s in line.split()] # nrow row widths delc[r] line = '' for dummy in range(getn(cnf_nrow, n_per_line)): line = line + f_cnf.readline() cnf_delc = [float(s) for s in line.split()] # nrow * ncol htop[r, c] line = '' for dummy in range(getn(cnf_nrow * cnf_ncol, n_per_line)): line = line + f_cnf.readline() cnf_top = [float(s) for s in line.split()] cnf_top = np.reshape(cnf_top, (cnf_nrow, cnf_ncol)) # nlay * nrow * ncol layer thickness dz[l, r, c] line = '' for dummy in range(getn(cnf_nlay * cnf_nrow * cnf_ncol, n_per_line)): line = line + f_cnf.readline() cnf_dz = [float(s) for s in line.split()] cnf_dz = np.reshape(cnf_dz, (cnf_nlay, cnf_nrow, cnf_ncol)) # cinact, cdry, not used here so commented '''line = f_cnf.readline() s = line.split() cinact = float(s[0]) cdry = float(s[1])''' f_cnf.close() finally: self.nlay = cnf_nlay self.nrow = cnf_nrow self.ncol = cnf_ncol self.delr = util_2d(model, (self.ncol,), np.float32, cnf_delr, name='delr', locat=self.unit_number[0]) self.delc = util_2d(model, (self.nrow,), np.float32, cnf_delc, name='delc', locat=self.unit_number[0]) self.top = util_2d(model, (self.nrow,self.ncol), np.float32, cnf_top, name='model_top', locat = self.unit_number[0]) cnf_botm = np.empty((self.nlay + sum(self.laycbd),self.nrow, self.ncol)) # First model layer cnf_botm[0:, :, :] = cnf_top - cnf_dz[0, :, :] # All other layers for l in range(1, self.nlay): cnf_botm[l, :, :] = cnf_botm[l - 1, :, :] - cnf_dz[l, :, :] self.botm = util_3d(model, (self.nlay + sum(self.laycbd), self.nrow, self.ncol), np.float32, cnf_botm, 'botm', locat = self.unit_number[0])
def __init__(self, model, mp_name_file = 'mp.nam', mp_list_file = 'mp.list', option_flags = [1, 2, 1, 1, 1, 2, 2, 1, 2, 1, 1, 1], endpoint_file = 'mp.end', pathline_file = 'mp.pth', time_ser_file = 'mp.tim_ser', advobs_file = 'mp.advobs', ref_time = 0, ref_time_per_stp = [0, 1, 1.0], stop_time = None, group_ct = 1, group_name = ['group_1'], group_placement = [[1, 1, 1, 0, 1, 1]], release_times = [[1, 1]], group_region = [[1, 1, 1, 1, 1, 1]], mask_nlay = [1], mask_layer = [1], mask_1lay = [1], face_ct = [1], ifaces = [[6, 1, 1]], part_ct = [[1, 1, 1]], strt_file = 'starting.locations', time_ct = 1, release_time_incr = 1, time_pts = [1], cell_bd_ct = 1, bud_loc = [[1, 1, 1]], trace_file = 'trace_file.txt', trace_id = 1, stop_zone = 1, zone = 1, retard_fac = 1.0, retard_fcCB = 1.0, extension='mpsim'): # Call ancestor's init to set self.parent, extension, name and unit number Package.__init__(self, model, extension, 'MPSIM', 32) nrow, ncol, nlay, nper = self.parent.mf.nrow_ncol_nlay_nper self.heading1 = '# MPSIM for Modpath, generated by Flopy.' self.heading2 = '#' self.mp_name_file = mp_name_file self.mp_list_file = mp_list_file options_list = ['SimulationType', 'TrackingDirection', 'WeakSinkOption', 'WeakSourceOption', 'ReferenceTimeOption', 'StopOption', 'ParticleGenerationOption', 'TimePointOption', 'BudgetOutputOption', 'ZoneArrayOption', 'RetardationOption', 'AdvectiveObservationsOption'] self.option_flags = option_flags options_dict = dict(zip(options_list, option_flags)) self.options_dict = options_dict self.endpoint_file = endpoint_file self.pathline_file = pathline_file self.time_ser_file = time_ser_file self.advobs_file = advobs_file self.ref_time = ref_time self.ref_time_per_stp = ref_time_per_stp self.stop_time = stop_time self.group_ct = group_ct self.group_name = group_name self.group_placement = group_placement self.release_times = release_times self.group_region = group_region self.mask_nlay = mask_nlay self.mask_layer = mask_layer self.mask_1lay = mask_1lay self.face_ct = face_ct self.ifaces = ifaces self.part_ct = part_ct self.strt_file = strt_file self.time_ct = time_ct self.release_time_incr = release_time_incr self.time_pts = time_pts self.cell_bd_ct = cell_bd_ct self.bud_loc = bud_loc self.trace_file = trace_file self.trace_id = trace_id self.stop_zone = stop_zone self.zone = zone self.retard_fac = retard_fac self.retard_fcCB = retard_fcCB self.mask_nlay = util_3d(model,(nlay,nrow,ncol),np.int,\ mask_nlay,name='mask_nlay',locat=self.unit_number[0]) self.mask_1lay = util_3d(model,(nlay,nrow,ncol),np.int,\ mask_1lay,name='mask_1lay',locat=self.unit_number[0]) self.stop_zone = util_3d(model,(nlay,nrow,ncol),np.int,\ stop_zone,name='stop_zone',locat=self.unit_number[0]) self.retard_fac = util_3d(model,(nlay,nrow,ncol),np.float32,\ retard_fac,name='retard_fac',locat=self.unit_number[0]) self.retard_fcCB = util_3d(model,(nlay,nrow,ncol),np.float32,\ retard_fcCB,name='retard_fcCB',locat=self.unit_number[0]) self.parent.add_package(self)
def __init__(self, model, ncomp=1, mcomp=1, tunit='D', lunit='M', munit='KG', prsity=0.30, icbund=1, sconc=0.0, cinact=1e30, thkmin=0.01, ifmtcn=0, ifmtnp=0, ifmtrf=0, ifmtdp=0, savucn=True, nprs=0, timprs=None, obs=None, nprobs=1, chkmas=True, nprmas=1, dt0=0, mxstrn=50000, ttsmult=1.0, ttsmax=0, species_names=[], extension='btn',**kwargs): Package.__init__(self, model, extension, 'BTN', 31) nrow, ncol, nlay, nper = self.parent.mf.nrow_ncol_nlay_nper self.heading1 = '# BTN for MT3DMS, generated by Flopy.' self.heading2 = '#' self.mcomp = mcomp self.tunit = tunit self.lunit = lunit self.munit = munit self.cinact = cinact self.thkmin = thkmin self.ifmtcn = ifmtcn self.ifmtnp = ifmtnp self.ifmtrf = ifmtrf self.ifmtdp = ifmtdp self.savucn = savucn self.nprs = nprs self.timprs = timprs self.obs = obs self.nprobs = nprobs self.chkmas = chkmas self.nprmas = nprmas self.species_names = species_names self.prsity = util_3d(model, (nlay, nrow, ncol), np.float32, prsity, name='prsity', locat=self.unit_number[0]) self.__icbund = util_3d(model, (nlay, nrow, ncol), np.int, icbund, name='icbund', locat=self.unit_number[0]) # Starting concentrations #--some defense # self.ncomp = ncomp self.sconc = [] u3d = util_3d(model, (nlay, nrow, ncol), np.float32, sconc, name='sconc1', locat=self.unit_number[0]) self.sconc.append(u3d) if ncomp > 1: for icomp in xrange(2,ncomp+1): name = "sconc"+str(icomp) val = 0.0 if name in kwargs.keys(): val = kwargs[name] kwargs.pop(name) else: print "BTN: setting sconc for component " +\ str(icomp) + " to zero, kwarg name " +\ name u3d = util_3d(model, (nlay, nrow, ncol), np.float32, val, name=name, locat=self.unit_number[0]) self.sconc.append(u3d) if len(kwargs.keys()) > 0: raise Exception("BTN error: unrecognized kwargs: " + ' '.join(kwargs.keys())) self.dt0 = util_2d(model, (nper,), np.float32, dt0, name='dt0') self.mxstrn = util_2d(model, (nper,), np.int, mxstrn, name='mxstrn') self.ttsmult = util_2d(model, (nper,), np.float32, ttsmult, name='ttmult') self.ttsmax = util_2d(model, (nper,), np.float32, ttsmax, name='ttsmax') self.parent.add_package(self)