예제 #1
0
파일: mpbas.py 프로젝트: 2012konrad77/flopy
    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)
예제 #2
0
파일: mfbas.py 프로젝트: arkottke/flopy
    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
예제 #3
0
파일: mbase.py 프로젝트: ksl0/flopy
    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)
예제 #4
0
파일: mbase.py 프로젝트: joycezw/flopy
    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)
예제 #5
0
파일: mtdsp.py 프로젝트: ksl0/flopy
 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
예제 #6
0
 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
예제 #7
0
파일: mfbct.py 프로젝트: AgnesRiviere/flopy
 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
예제 #8
0
파일: mfswi.py 프로젝트: arkottke/flopy
    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)
예제 #9
0
파일: mfbas.py 프로젝트: arkottke/flopy
 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
예제 #10
0
파일: mfbct.py 프로젝트: ksl0/flopy
 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
예제 #11
0
파일: mpbas.py 프로젝트: joycezw/flopy
    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)
예제 #12
0
 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
예제 #13
0
    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)
예제 #14
0
파일: mfupw.py 프로젝트: ksl0/flopy
    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)
예제 #15
0
    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
예제 #16
0
파일: mfdis.py 프로젝트: arkottke/flopy
    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
예제 #17
0
파일: mfdis.py 프로젝트: 2012konrad77/flopy
    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)
예제 #18
0
파일: mfdis.py 프로젝트: Kirubaharan/flopy
    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
예제 #19
0
파일: mflpf.py 프로젝트: 2012konrad77/flopy
 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
예제 #20
0
파일: mfbcf.py 프로젝트: ksl0/flopy
 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)
예제 #21
0
파일: mtrct.py 프로젝트: joycezw/flopy
 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
예제 #22
0
파일: mfdis.py 프로젝트: AgnesRiviere/flopy
    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)
예제 #23
0
파일: swtvdf.py 프로젝트: joycezw/flopy
 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
예제 #24
0
파일: mfbcf.py 프로젝트: AgnesRiviere/flopy
    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)
예제 #25
0
 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)
예제 #26
0
 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)
예제 #27
0
파일: mtbtn.py 프로젝트: AgnesRiviere/flopy
    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()
예제 #28
0
    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()
예제 #29
0
    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)
예제 #30
0
 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
예제 #31
0
파일: mtbtn.py 프로젝트: AgnesRiviere/flopy
 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)
예제 #32
0
    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)
예제 #33
0
 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)
예제 #34
0
파일: mfdis.py 프로젝트: Kirubaharan/flopy
    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"
        }
예제 #35
0
파일: mtbtn.py 프로젝트: arkottke/flopy
    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() 
예제 #36
0
파일: mfswi.py 프로젝트: joycezw/flopy
    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)
예제 #37
0
    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)
예제 #38
0
파일: mfswi2.py 프로젝트: arkottke/flopy
    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)
예제 #39
0
파일: mtdsp.py 프로젝트: joycezw/flopy
 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
예제 #40
0
 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
예제 #41
0
파일: mfdis.py 프로젝트: 2012konrad77/flopy
    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])
예제 #42
0
파일: mpsim.py 프로젝트: AgnesRiviere/flopy
    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)
예제 #43
0
파일: mtbtn.py 프로젝트: arkottke/flopy
    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)