def load(f, model, ext_unit_dict=None): """ Load an existing package. Parameters ---------- f : filename or file handle File to load. model : model object The model object (of type :class:`flopy.modflow.mf.Modflow`) to which this package will be added. ext_unit_dict : dictionary, optional If the arrays in the file are specified using EXTERNAL, or older style array control records, then `f` should be a file handle. In this case ext_unit_dict is required, which can be constructed using the function :class:`flopy.utils.mfreadnam.parsenamefile`. Returns ------- dis : ModflowLpf object ModflowLpf object. Examples -------- >>> import flopy >>> m = flopy.modflow.Modflow() >>> lpf = flopy.modflow.ModflowLpf.load('test.lpf', m) """ if model.verbose: sys.stdout.write('loading lpf package file...\n') if type(f) is not file: filename = f f = open(filename, 'r') #dataset 0 -- header while True: line = f.readline() if line[0] != '#': break # determine problem dimensions nrow, ncol, nlay, nper = model.get_nrow_ncol_nlay_nper() # Item 1: IBCFCB, HDRY, NPLPF - line already read above if model.verbose: print ' loading IBCFCB, HDRY, NPLPF...' t = line.strip().split() ilpfcb, hdry, nplpf = int(t[0]), float(t[1]), int(t[2]) if ilpfcb != 0: model.add_pop_key_list(ilpfcb) ilpfcb = 53 # options storagecoefficient = False constantcv = False thickstrt = False nocvcorrection = False novfc = False if len(t) > 3: for k in xrange(3, len(t)): if 'STORAGECOEFFICIENT' in t[k].upper(): storagecoefficient = True elif 'CONSTANTCV' in t[k].upper(): constantcv = True elif 'THICKSTRT' in t[k].upper(): thickstrt = True elif 'NOCVCORRECTION' in t[k].upper(): nocvcorrection = True elif 'NOVFC' in t[k].upper(): novfc = True # LAYTYP array if model.verbose: print ' loading LAYTYP...' laytyp = np.empty((nlay), dtype=np.int) laytyp = read1d(f, laytyp) # LAYAVG array if model.verbose: print ' loading LAYAVG...' layavg = np.empty((nlay), dtype=np.int) layavg = read1d(f, layavg) # CHANI array if model.verbose: print ' loading CHANI...' chani = np.empty((nlay), dtype=np.float32) chani = read1d(f, chani) # LAYVKA array if model.verbose: print ' loading LAYVKA...' layvka = np.empty((nlay), dtype=np.float32) layvka = read1d(f, layvka) # LAYWET array if model.verbose: print ' loading LAYWET...' laywet = np.empty((nlay), dtype=np.int) laywet = read1d(f, laywet) # Item 7: WETFCT, IWETIT, IHDWET wetfct, iwetit, ihdwet = None, None, None iwetdry = laywet.sum() if iwetdry > 0: if model.verbose: print ' loading WETFCT, IWETIT, IHDWET...' line = f.readline() t = line.strip().split() wetfct, iwetit, ihdwet = float(t[0]), int(t[1]), int(t[2]) #--parameters data par_types = [] if nplpf > 0: par_types, parm_dict = mfpar.load(f, nplpf, model.verbose) #print parm_dict #--non-parameter data transient = not model.get_package('DIS').steady.all() hk = [0] * nlay hani = [0] * nlay vka = [0] * nlay ss = [0] * nlay sy = [0] * nlay vkcb = [0] * nlay wetdry = [0] * nlay for k in range(nlay): if model.verbose: print ' loading hk layer {0:3d}...'.format(k + 1) if 'hk' not in par_types: t = util_2d.load(f, model, (nrow, ncol), np.float32, 'hk', ext_unit_dict) else: line = f.readline() t = mfpar.parameter_fill(model, (nrow, ncol), 'hk', parm_dict, findlayer=k) hk[k] = t if chani[k] < 0: if model.verbose: print ' loading hani layer {0:3d}...'.format(k + 1) if 'hani' not in par_types: t = util_2d.load(f, model, (nrow, ncol), np.float32, 'hani', ext_unit_dict) else: line = f.readline() t = mfpar.parameter_fill(model, (nrow, ncol), 'hani', parm_dict, findlayer=k) hani[k] = t if model.verbose: print ' loading vka layer {0:3d}...'.format(k + 1) if 'vka' not in par_types and 'vani' not in par_types: t = util_2d.load(f, model, (nrow, ncol), np.float32, 'vka', ext_unit_dict) else: line = f.readline() t = mfpar.parameter_fill(model, (nrow, ncol), 'vka', parm_dict, findlayer=k) vka[k] = t if transient: if model.verbose: print ' loading ss layer {0:3d}...'.format(k + 1) if 'ss' not in par_types: t = util_2d.load(f, model, (nrow, ncol), np.float32, 'ss', ext_unit_dict) else: line = f.readline() t = mfpar.parameter_fill(model, (nrow, ncol), 'ss', parm_dict, findlayer=k) ss[k] = t if laytyp[k] != 0: if model.verbose: print ' loading sy layer {0:3d}...'.format(k + 1) if 'sy' not in par_types: t = util_2d.load(f, model, (nrow, ncol), np.float32, 'sy', ext_unit_dict) else: line = f.readline() t = mfpar.parameter_fill(model, (nrow, ncol), 'sy', parm_dict, findlayer=k) sy[k] = t #if self.parent.get_package('DIS').laycbd[k] > 0: if model.get_package('DIS').laycbd[k] > 0: if model.verbose: print ' loading vkcb layer {0:3d}...'.format(k + 1) if 'vkcb' not in par_types: t = util_2d.load(f, model, (nrow, ncol), np.float32, 'vkcb', ext_unit_dict) else: line = f.readline() t = mfpar.parameter_fill(model, (nrow, ncol), 'vkcb', parm_dict, findlayer=k) vkcb[k] = t if (laywet[k] != 0 and laytyp[k] != 0): if model.verbose: print ' loading wetdry layer {0:3d}...'.format(k + 1) t = util_2d.load(f, model, (nrow, ncol), np.float32, 'wetdry', ext_unit_dict) wetdry[k] = t #--create instance of lpf class lpf = ModflowLpf(model, ilpfcb=ilpfcb, laytyp=laytyp, layavg=layavg, chani=chani, laywet=laywet, hdry=hdry, iwdflg=iwetdry, wetfct=wetfct, iwetit=iwetit, ihdwet=ihdwet, hk=hk, hani=hani, vka=vka, ss=ss, sy=sy, vkcb=vkcb, wetdry=wetdry, storagecoefficient=storagecoefficient, constantcv=constantcv, thickstrt=thickstrt, novfc=novfc) return lpf
def load(f, model, nlak=None, nper=None, ncomp=None, ext_unit_dict=None): """ Load an existing package. Parameters ---------- f : filename or file handle File to load. model : model object The model object (of type :class:`flopy.mt3d.mt.Mt3dms`) to which this package will be added. nlak : int number of lakes to be simulated nper : int number of stress periods ncomp : int number of species to be simulated ext_unit_dict : dictionary, optional If the arrays in the file are specified using EXTERNAL, or older style array control records, then `f` should be a file handle. In this case ext_unit_dict is required, which can be constructed using the function :class:`flopy.utils.mfreadnam.parsenamefile`. Returns ------- lkt : MT3D-USGS object MT3D-USGS object. Examples -------- >>> import flopy >>> import os >>> os.chdir(r'C:\EDM_LT\GitHub\mt3d-usgs\autotest\temp\LKT') >>> mt = flopy.mt3d.Mt3dms.load('lkt_mt.nam', exe_name = 'mt3d-usgs_1.0.00.exe', >>> model_ws = r'.\LKT', >>> load_only='btn') >>> lkt = flopy.mt3d.Mt3dLkt.load('test.lkt', mt) """ if model.verbose: sys.stdout.write('loading lkt package file...\n') if not hasattr(f, 'read'): filename = f f = open(filename, 'r') # Set default nlay values nlay = None nrow = None ncol = None # Set dimensions if necessary if nlay is None: nlay = model.nlay if nrow is None: nrow = model.nrow if ncol is None: ncol = model.ncol if nper is None: nper = model.nper if ncomp is None: ncomp = model.ncomp # Item 1 (NLKINIT,MXLKBC,ICBCLK,IETLAK) line = f.readline() if line[0] == '#': if model.verbose: print(' LKT package currently does not support comment lines...') sys.exit() if model.verbose: print(' loading nlkinit,mxlkbc,icbclk,ietlak ') vals = line.strip().split() nlkinit = int(vals[0]) mxlkbc = int(vals[1]) icbclk = int(vals[2]) ietlak = int(vals[3]) if model.verbose: print(' NLKINIT {}'.format(nlkinit)) print(' MXLKBC {}'.format(mxlkbc)) print(' ICBCLK {}'.format(icbclk)) print(' IETLAK {}'.format(ietlak)) if ietlak == 0: print(' Mass does not exit the model via simulated lake evaporation ') else: print(' Mass exits the lake via simulated lake evaporation ') # Item 2 (COLDLAK - Initial concentration in this instance) if model.verbose: print(' loading initial concentration ') if model.array_foramt == 'free': # ****************************** # Need to fill this section out # ****************************** pass else: # Read header line line = f.readline() # Next, read the values coldlak = np.empty((nlkinit), dtype=np.float) coldlak = read1d(f, coldlak) # dtype dtype = Mt3dLkt.get_default_dtype(ncomp) # Items 3-4 lk_stress_period_data = {} for iper in range(nper): if model.verbose: print(' loading lkt boundary condition data for kper {0:5d}' .format(iper + 1)) # Item 3: NTMP: An integer value corresponding to the number of # specified lake boundary conditions to follow. # For the first stress period, this value must be greater # than or equal to zero, but may be less than zero in # subsequent stress periods. line = f.readline() vals = line.strip().split() ntmp = int(vals[0]) if model.verbose: print(" {0:5d}".format(ntmp) + " lkt boundary conditions specified ") if (iper == 0) and (ntmp < 0): print(' ntmp < 0 not allowed for first stress period ') if (iper > 0) and (ntmp < 0): print(' use lkt boundary conditions specified in last stress period ') # Item 4: Read ntmp boundary conditions if ntmp > 0: current_lk = np.empty((ntmp), dtype=dtype) for ilkbnd in range(ntmp): line = f.readline() m_arr = line.strip().split() # These items are free format t = [] for ivar in range(2): t.append(m_arr[ivar]) cbclk = len(current_sf.dtype.names) - 2 if cbcsf > 0: for ilkvar in range(cbclk): t.append(m_arr[ilkvar + 3]) current_lk[ilkbnd] = tuple(t[:len(current_lk.dtype.names)]) # Convert ILKBC index to zero-based current_lk['ILKBC'] -= 1 current_lk = current_lk.view(np.recarray) lk_stress_period_data[iper] = current_lk else: if model.verbose: print(' No transient boundary conditions specified') pass if len(lk_stress_period_data) == 0: lk_stress_period_data = None # Construct and return LKT package lkt = Mt3dLkt(model, nlkinit=nlkinit, mxlkbc=mxlkbc, icbclk=icbclk, ietlak=ietlak, coldlak=coldlak, lk_stress_period_data=lk_stress_period_data) return lkt
def load(f, model, ext_unit_dict=None): """ Load an existing package. Parameters ---------- f : filename or file handle File to load. model : model object The model object (of type :class:`flopy.modflow.mf.Modflow`) to which this package will be added. ext_unit_dict : dictionary, optional If the arrays in the file are specified using EXTERNAL, or older style array control records, then `f` should be a file handle. In this case ext_unit_dict is required, which can be constructed using the function :class:`flopy.utils.mfreadnam.parsenamefile`. Returns ------- dis : ModflowLpf object ModflowLpf object. Examples -------- >>> import flopy >>> m = flopy.modflow.Modflow() >>> lpf = flopy.modflow.ModflowLpf.load('test.lpf', m) """ if model.verbose: sys.stdout.write('loading lpf package file...\n') if not hasattr(f, 'read'): filename = f f = open(filename, 'r') #dataset 0 -- header while True: line = f.readline() if line[0] != '#': break # determine problem dimensions nrow, ncol, nlay, nper = model.get_nrow_ncol_nlay_nper() # Item 1: IBCFCB, HDRY, NPLPF - line already read above if model.verbose: print(' loading IBCFCB, HDRY, NPLPF...') t = line.strip().split() ilpfcb, hdry, nplpf = int(t[0]), float(t[1]), int(t[2]) if ilpfcb != 0: model.add_pop_key_list(ilpfcb) ilpfcb = 53 # options storagecoefficient = False constantcv = False thickstrt = False nocvcorrection = False novfc = False if len(t) > 3: for k in range(3,len(t)): if 'STORAGECOEFFICIENT' in t[k].upper(): storagecoefficient = True elif 'CONSTANTCV' in t[k].upper(): constantcv = True elif 'THICKSTRT' in t[k].upper(): thickstrt = True elif 'NOCVCORRECTION' in t[k].upper(): nocvcorrection = True elif 'NOVFC' in t[k].upper(): novfc = True # LAYTYP array if model.verbose: print(' loading LAYTYP...') laytyp = np.empty((nlay), dtype=np.int) laytyp = read1d(f, laytyp) # LAYAVG array if model.verbose: print(' loading LAYAVG...') layavg = np.empty((nlay), dtype=np.int) layavg = read1d(f, layavg) # CHANI array if model.verbose: print(' loading CHANI...') chani = np.empty((nlay), dtype=np.float32) chani = read1d(f, chani) # LAYVKA array if model.verbose: print(' loading LAYVKA...') layvka = np.empty((nlay), dtype=np.float32) layvka = read1d(f, layvka) # LAYWET array if model.verbose: print(' loading LAYWET...') laywet = np.empty((nlay), dtype=np.int) laywet = read1d(f, laywet) # Item 7: WETFCT, IWETIT, IHDWET wetfct,iwetit,ihdwet = None, None, None iwetdry = laywet.sum() if iwetdry > 0: if model.verbose: print(' loading WETFCT, IWETIT, IHDWET...') line = f.readline() t = line.strip().split() wetfct, iwetit, ihdwet = float(t[0]), int(t[1]), int(t[2]) # parameters data par_types = [] if nplpf > 0: par_types, parm_dict = mfpar.load(f, nplpf, model.verbose) #print parm_dict # non-parameter data transient = not model.get_package('DIS').steady.all() hk = [0] * nlay hani = [0] * nlay vka = [0] * nlay ss = [0] * nlay sy = [0] * nlay vkcb = [0] * nlay wetdry = [0] * nlay for k in range(nlay): if model.verbose: print(' loading hk layer {0:3d}...'.format(k+1)) if 'hk' not in par_types: t = util_2d.load(f, model, (nrow,ncol), np.float32, 'hk', ext_unit_dict) else: line = f.readline() t = mfpar.parameter_fill(model, (nrow, ncol), 'hk', parm_dict, findlayer=k) hk[k] = t if chani[k] < 0: if model.verbose: print(' loading hani layer {0:3d}...'.format(k+1)) if 'hani' not in par_types: t = util_2d.load(f, model, (nrow, ncol), np.float32, 'hani', ext_unit_dict) else: line = f.readline() t = mfpar.parameter_fill(model, (nrow, ncol), 'hani', parm_dict, findlayer=k) hani[k] = t if model.verbose: print(' loading vka layer {0:3d}...'.format(k+1)) if 'vka' not in par_types and 'vani' not in par_types: t = util_2d.load(f, model, (nrow, ncol), np.float32, 'vka', ext_unit_dict) else: line = f.readline() key = 'vka' if 'vani' in par_types: key = 'vani' t = mfpar.parameter_fill(model, (nrow, ncol), key, parm_dict, findlayer=k) vka[k] = t if transient: if model.verbose: print(' loading ss layer {0:3d}...'.format(k+1)) if 'ss' not in par_types: t = util_2d.load(f, model, (nrow, ncol), np.float32, 'ss', ext_unit_dict) else: line = f.readline() t = mfpar.parameter_fill(model, (nrow, ncol), 'ss', parm_dict, findlayer=k) ss[k] = t if laytyp[k] != 0: if model.verbose: print(' loading sy layer {0:3d}...'.format(k+1)) if 'sy' not in par_types: t = util_2d.load(f, model, (nrow, ncol), np.float32, 'sy', ext_unit_dict) else: line = f.readline() t = mfpar.parameter_fill(model, (nrow, ncol), 'sy', parm_dict, findlayer=k) sy[k] = t #if self.parent.get_package('DIS').laycbd[k] > 0: if model.get_package('DIS').laycbd[k] > 0: if model.verbose: print(' loading vkcb layer {0:3d}...'.format(k+1)) if 'vkcb' not in par_types: t = util_2d.load(f, model, (nrow, ncol), np.float32, 'vkcb', ext_unit_dict) else: line = f.readline() t = mfpar.parameter_fill(model, (nrow, ncol), 'vkcb', parm_dict, findlayer=k) vkcb[k] = t if (laywet[k] != 0 and laytyp[k] != 0): if model.verbose: print(' loading wetdry layer {0:3d}...'.format(k+1)) t = util_2d.load(f, model, (nrow, ncol), np.float32, 'wetdry', ext_unit_dict) wetdry[k] = t # create instance of lpf class lpf = ModflowLpf(model, ilpfcb=ilpfcb, laytyp=laytyp, layavg=layavg, chani=chani, layvka=layvka, laywet=laywet, hdry=hdry, iwdflg=iwetdry, wetfct=wetfct, iwetit=iwetit, ihdwet=ihdwet, hk=hk, hani=hani, vka=vka, ss=ss, sy=sy, vkcb=vkcb, wetdry=wetdry, storagecoefficient=storagecoefficient, constantcv=constantcv,thickstrt=thickstrt,novfc=novfc) return lpf
def load(f, model, ext_unit_dict=None): """ Load an existing package. Parameters ---------- f : filename or file handle File to load. model : model object The model object (of type :class:`flopy.modflow.mf.Modflow`) to which this package will be added. ext_unit_dict : dictionary, optional If the arrays in the file are specified using EXTERNAL, or older style array control records, then `f` should be a file handle. In this case ext_unit_dict is required, which can be constructed using the function :class:`flopy.utils.mfreadnam.parsenamefile`. Returns ------- dis : ModflowDisU object ModflowDisU object. Examples -------- >>> import flopy >>> m = flopy.modflow.Modflow() >>> disu = flopy.modflow.ModflowDisU.load('test.disu', m) """ if model.verbose: sys.stdout.write('loading disu package file...\n') if not hasattr(f, 'read'): filename = f f = open(filename, 'r') # dataset 0 -- header while True: line = f.readline() if line[0] != '#': break # dataset 1 if model.verbose: print(' loading NODES, NLAY, NJAG, IVSD, NPER, ITMUNI, LENUNI,' ' IDSYMRD...') ll = line.strip().split() nodes = int(ll.pop(0)) nlay = int(ll.pop(0)) njag = int(ll.pop(0)) ivsd = int(ll.pop(0)) nper = int(ll.pop(0)) itmuni = int(ll.pop(0)) lenuni = int(ll.pop(0)) idsymrd = int(ll.pop(0)) if model.verbose: print(' NODES {}'.format(nodes)) print(' NLAY {}'.format(nlay)) print(' NJAG {}'.format(njag)) print(' IVSD {}'.format(ivsd)) print(' NPER {}'.format(nper)) print(' ITMUNI {}'.format(itmuni)) print(' LENUNI {}'.format(lenuni)) print(' IDSYMRD {}'.format(idsymrd)) # Calculate njags njags = (njag - nodes) / 2 if model.verbose: print(' NJAGS calculated as {}'.format(njags)) # dataset 2 -- laycbd if model.verbose: print(' loading LAYCBD...') laycbd = np.empty((nlay), np.int) laycbd = read1d(f, laycbd) if model.verbose: print(' LAYCBD {}'.format(laycbd)) # dataset 3 -- nodelay if model.verbose: print(' loading NODELAY...') nodelay = Util2d.load(f, model, (1, nlay), np.int, 'nodelay', ext_unit_dict) if model.verbose: print(' NODELAY {}'.format(nodelay)) # dataset 4 -- top if model.verbose: print(' loading TOP...') top = [0] * nlay for k in range(nlay): tpk = Util2d.load(f, model, (1, nodelay[k]), np.float32, 'top', ext_unit_dict) top[k] = tpk if model.verbose: for tpk in top: print(' TOP layer {}: {}'.format(k, tpk)) # dataset 5 -- bot if model.verbose: print(' loading BOT...') bot = [0] * nlay for k in range(nlay): btk = Util2d.load(f, model, (1, nodelay[k]), np.float32, 'btk', ext_unit_dict) bot[k] = btk if model.verbose: for btk in bot: print(' BOT layer {}: {}'.format(k, btk)) # dataset 6 -- area if model.verbose: print(' loading AREA...') if ivsd == -1: area = Util2d.load(f, model, (1, nodelay[0]), np.float32, 'area', ext_unit_dict) else: area = [0] * nlay #area = np.empty((nodes), dtype=np.float32) #istart = 0 for k in range(nlay): ak = Util2d.load(f, model, (1, nodelay[k]), np.float32, 'ak', ext_unit_dict) #area[istart : istart + nodelay[k]] = ak.array.reshape((nodelay[k])) #istart += nodelay[k] area[k] = ak if model.verbose: print(' AREA {}'.format(area)) # dataset 7 -- iac if model.verbose: print(' loading IAC...') iac = Util2d.load(f, model, (1, nodes), np.int, 'iac', ext_unit_dict) iac = iac.array.reshape((nodes)) if model.verbose: print(' IAC {}'.format(iac)) # dataset 8 -- ja if model.verbose: print(' loading JA...') ja = Util2d.load(f, model, (1, njag), np.int, 'ja', ext_unit_dict) ja = ja.array.reshape((njag)) if model.verbose: print(' JA {}'.format(ja)) # dataset 9 -- ivc ivc = None if ivsd == 1: if model.verbose: print(' loading IVC...') ivc = Util2d.load(f, model, (1, njag), np.int, 'ivc', ext_unit_dict) ivc = ivc.array.reshape((njag)) if model.verbose: print(' IVC {}'.format(ivc)) # dataset 10a -- cl1 cl1 = None if idsymrd == 1: if model.verbose: print(' loading CL1...') cl1 = Util2d.load(f, model, (1, njags), np.float32, 'cl1', ext_unit_dict) cl1 = cl1.array.reshape((njags)) if model.verbose: print(' CL1 {}'.format(cl1)) # dataset 10b -- cl2 cl2 = None if idsymrd == 1: if model.verbose: print(' loading CL2...') cl2 = Util2d.load(f, model, (1, njags), np.float32, 'cl2', ext_unit_dict) cl2 = cl2.array.reshape((njags)) if model.verbose: print(' CL2 {}'.format(cl2)) # dataset 11 -- cl12 cl12 = None if idsymrd == 0: if model.verbose: print(' loading CL12...') cl12 = Util2d.load(f, model, (1, njag), np.float32, 'cl12', ext_unit_dict) cl12 = cl12.array.reshape((njag)) if model.verbose: print(' CL12 {}'.format(cl12)) # dataset 12 -- fahl fahl = None if idsymrd == 0: n = njag elif idsymrd == 1: n = njags if model.verbose: print(' loading FAHL...') fahl = Util2d.load(f, model, (1, n), np.float32, 'fahl', ext_unit_dict) fahl = fahl.array.reshape((n)) if model.verbose: print(' FAHL {}'.format(fahl)) # dataset 7 -- stress period info if model.verbose: print(' loading stress period data...') perlen = [] nstp = [] tsmult = [] steady = [] for k in range(nper): line = f.readline() a1, a2, a3, a4 = line.strip().split()[0:4] a1 = float(a1) a2 = int(a2) a3 = float(a3) if a4.upper() == 'TR': a4 = False else: a4 = True perlen.append(a1) nstp.append(a2) tsmult.append(a3) steady.append(a4) if model.verbose: print(' PERLEN {}'.format(perlen)) print(' NSTP {}'.format(nstp)) print(' TSMULT {}'.format(tsmult)) print(' STEADY {}'.format(steady)) # create dis object instance disu = ModflowDisU(model, nodes=nodes, nlay=nlay, njag=njag, ivsd=ivsd, nper=nper, itmuni=itmuni, lenuni=lenuni, idsymrd=idsymrd, laycbd=laycbd, nodelay=nodelay, top=top, bot=bot, area=area, iac=iac, ja=ja, ivc=ivc, cl1=cl1, cl2=cl2, cl12=cl12, fahl=fahl, perlen=perlen, nstp=nstp, tsmult=tsmult, steady=steady) # return dis object instance return disu
def load(f, model, ext_unit_dict=None): """ Load an existing package. Parameters ---------- f : filename or file handle File to load. model : model object The model object (of type :class:`flopy.modflow.mf.Modflow`) to which this package will be added. ext_unit_dict : dictionary, optional If the arrays in the file are specified using EXTERNAL, or older style array control records, then `f` should be a file handle. In this case ext_unit_dict is required, which can be constructed using the function :class:`flopy.utils.mfreadnam.parsenamefile`. Returns ------- swt : ModflowSwt object Examples -------- >>> import flopy >>> m = flopy.modflow.Modflow() >>> swt = flopy.modflow.ModflowSwt.load('test.swt', m) """ if model.verbose: sys.stdout.write('loading swt package file...\n') if not hasattr(f, 'read'): filename = f f = open(filename, 'r') # dataset 0 -- header while True: line = f.readline() if line[0] != '#': break # determine problem dimensions nrow, ncol, nlay, nper = model.get_nrow_ncol_nlay_nper() # read dataset 1 if model.verbose: sys.stdout.write(' loading swt dataset 1\n') t = line.strip().split() ipakcb, iswtoc, nsystm, ithk, ivoid, istpcs, icrcc = int(t[0]), int(t[1]), int(t[2]), int(t[3]), \ int(t[4]), int(t[5]), int(t[6]) if ipakcb > 0: ipakcb = 53 # read dataset 2 lnwt = None if nsystm > 0: if model.verbose: sys.stdout.write(' loading swt dataset 2\n') lnwt = np.empty((nsystm), dtype=np.int) lnwt = read1d(f, lnwt) - 1 # read dataset 3 if model.verbose: sys.stdout.write(' loading swt dataset 3\n') line = f.readline() t = line.strip().split() iizcfl, izcfm, iglfl, iglfm, iestfl, \ iestfm, ipcsfl, ipcsfm, istfl, istfm = int(t[0]), int(t[1]), int(t[2]), int(t[3]), int(t[4]), \ int(t[5]), int(t[6]), int(t[7]), int(t[8]), int(t[9]) # read dataset 4 if model.verbose: sys.stdout.write(' loading swt dataset 4') gl0 = Util2d.load(f, model, (nrow, ncol), np.float32, 'gl0', ext_unit_dict) # read dataset 5 if model.verbose: sys.stdout.write(' loading swt dataset 5') sgm = Util2d.load(f, model, (nrow, ncol), np.float32, 'sgm', ext_unit_dict) # read dataset 6 if model.verbose: sys.stdout.write(' loading swt dataset 6') sgs = Util2d.load(f, model, (nrow, ncol), np.float32, 'sgs', ext_unit_dict) # read datasets 7 to 13 thick = [0] * nsystm void = [0] * nsystm sub = [0] * nsystm if icrcc == 0: sse = None ssv = None cr = [0] * nsystm cc = [0] * nsystm else: sse = [0] * nsystm ssv = [0] * nsystm cr = None cc = None for k in range(nsystm): kk = lnwt[k] + 1 # thick if model.verbose: sys.stdout.write(' loading swt dataset 7 for layer {}\n'.format(kk)) t = Util2d.load(f, model, (nrow, ncol), np.float32, 'thick layer {}'.format(kk), ext_unit_dict) thick[k] = t if icrcc != 0: # sse if model.verbose: sys.stdout.write(' loading swt dataset 8 for layer {}\n'.format(kk)) t = Util2d.load(f, model, (nrow, ncol), np.float32, 'sse layer {}'.format(kk), ext_unit_dict) sse[k] = t # ssv if model.verbose: sys.stdout.write(' loading swt dataset 9 for layer {}\n'.format(kk)) t = Util2d.load(f, model, (nrow, ncol), np.float32, 'sse layer {}'.format(kk), ext_unit_dict) ssv[k] = t else: # cr if model.verbose: sys.stdout.write(' loading swt dataset 10 for layer {}\n'.format(kk)) t = Util2d.load(f, model, (nrow, ncol), np.float32, 'cr layer {}'.format(kk), ext_unit_dict) cr[k] = t # cc if model.verbose: sys.stdout.write(' loading swt dataset 11 for layer {}\n'.format(kk)) t = Util2d.load(f, model, (nrow, ncol), np.float32, 'cc layer {}'.format(kk), ext_unit_dict) cc[k] = t # void if model.verbose: sys.stdout.write(' loading swt dataset 12 for layer {}\n'.format(kk)) t = Util2d.load(f, model, (nrow, ncol), np.float32, 'void layer {}'.format(kk), ext_unit_dict) void[k] = t # sub if model.verbose: sys.stdout.write(' loading swt dataset 13 for layer {}\n'.format(kk)) t = Util2d.load(f, model, (nrow, ncol), np.float32, 'sub layer {}'.format(kk), ext_unit_dict) sub[k] = t # dataset 14 and 15 if istpcs != 0: pcsoff = [0] * nlay pcs = None else: pcsoff = None pcs = [0] * nlay for k in range(nlay): if istpcs != 0: if model.verbose: sys.stdout.write(' loading swt dataset 14 for layer {}\n'.format(kk)) t = Util2d.load(f, model, (nrow, ncol), np.float32, 'pcsoff layer {}'.format(k + 1), ext_unit_dict) pcsoff[k] = t else: if model.verbose: sys.stdout.write(' loading swt dataset 15 for layer {}\n'.format(kk)) t = Util2d.load(f, model, (nrow, ncol), np.float32, 'pcs layer {}'.format(k + 1), ext_unit_dict) pcs[k] = t ids16 = None ids17 = None if iswtoc > 0: # dataset 16 if model.verbose: sys.stdout.write(' loading swt dataset 15 for layer {}\n'.format(kk)) ids16 = np.empty(26, dtype=np.int) ids16 = read1d(f, ids16) for k in range(1, 26, 2): model.add_pop_key_list(ids16[k]) ids16[k] = 2054 # all sub-wt data sent to unit 2054 # dataset 17 ids17 = [0] * iswtoc for k in range(iswtoc): if model.verbose: sys.stdout.write(' loading swt dataset 17 for iswtoc {}\n'.format(k + 1)) t = np.empty(30, dtype=np.int) t = read1d(f, t) t[0:4] -= 1 ids17[k] = t # close file f.close() # create sub-wt instance swt = ModflowSwt(model, ipakcb=ipakcb, iswtoc=iswtoc, nsystm=nsystm, ithk=ithk, ivoid=ivoid, istpcs=istpcs, icrcc=icrcc, lnwt=lnwt, izcfl=iizcfl, izcfm=izcfm, iglfl=iglfl, iglfm=iglfm, iestfl=iestfl, iestfm=iestfm, ipcsfl=ipcsfl, ipcsfm=ipcsfm, istfl=istfl, istfm=istfm, gl0=gl0, sgm=sgm, sgs=sgs, thick=thick, sse=sse, ssv=ssv, cr=cr, cc=cc, void=void, sub=sub, pcsoff=pcsoff, pcs=pcs, ids16=ids16, ids17=ids17) # return sut-wt instance return swt
def load(f, model, ext_unit_dict=None): """ Load an existing package. Parameters ---------- f : filename or file handle File to load. model : model object The model object (of type :class:`flopy.modflow.mf.Modflow`) to which this package will be added. ext_unit_dict : dictionary, optional If the arrays in the file are specified using EXTERNAL, or older style array control records, then `f` should be a file handle. In this case ext_unit_dict is required, which can be constructed using the function :class:`flopy.utils.mfreadnam.parsenamefile`. Returns ------- sub : ModflowSub object Examples -------- >>> import flopy >>> m = flopy.modflow.Modflow() >>> sub = flopy.modflow.ModflowSub.load('test.sub', m) """ if model.verbose: sys.stdout.write('loading sub package file...\n') if not hasattr(f, 'read'): filename = f f = open(filename, 'r') # dataset 0 -- header while True: line = f.readline() if line[0] != '#': break # determine problem dimensions nrow, ncol, nlay, nper = model.get_nrow_ncol_nlay_nper() # read dataset 1 if model.verbose: sys.stdout.write(' loading sub dataset 1\n') t = line.strip().split() ipakcb, isuboc, nndb, ndb, nmz, nn = int(t[0]), int(t[1]), int(t[2]), int(t[3]), int(t[4]), int(t[5]) ac1, ac2 = float(t[6]), float(t[7]) itmin, idsave, idrest = int(t[8]), int(t[9]), int(t[10]) if ipakcb > 0: ipakcb = 53 if idsave > 0: idsave = 2052 if idrest > 0: ext_unit_dict[2053] = ext_unit_dict.pop(idrest) idrest = 2053 ln = None if nndb > 0: if model.verbose: sys.stdout.write(' loading sub dataset 2\n') ln = np.empty((nndb), dtype=np.int) ln = read1d(f, ln) - 1 ldn = None if ndb > 0: if model.verbose: sys.stdout.write(' loading sub dataset 3\n') ldn = np.empty((ndb), dtype=np.int) ldn = read1d(f, ldn) - 1 rnb = None if ndb > 0: if model.verbose: sys.stdout.write(' loading sub dataset 4\n') rnb = [0] * ndb for k in range(ndb): t = Util2d.load(f, model, (nrow, ncol), np.float32, 'rnb delay bed {}'.format(k + 1), ext_unit_dict) rnb[k] = t hc = None sfe = None sfv = None com = None if nndb > 0: hc = [0] * nndb sfe = [0] * nndb sfv = [0] * nndb com = [0] * nndb for k in range(nndb): kk = ln[k] + 1 # hc if model.verbose: sys.stdout.write(' loading sub dataset 5 for layer {}\n'.format(kk)) t = Util2d.load(f, model, (nrow, ncol), np.float32, 'hc layer {}'.format(kk), ext_unit_dict) hc[k] = t # sfe if model.verbose: sys.stdout.write(' loading sub dataset 6 for layer {}\n'.format(kk)) t = Util2d.load(f, model, (nrow, ncol), np.float32, 'sfe layer {}'.format(kk), ext_unit_dict) sfe[k] = t # sfv if model.verbose: sys.stdout.write(' loading sub dataset 7 for layer {}\n'.format(kk)) t = Util2d.load(f, model, (nrow, ncol), np.float32, 'sfv layer {}'.format(kk), ext_unit_dict) sfv[k] = t # com if model.verbose: sys.stdout.write(' loading sub dataset 8 for layer {}\n'.format(kk)) t = Util2d.load(f, model, (nrow, ncol), np.float32, 'com layer {}'.format(kk), ext_unit_dict) com[k] = t # dp dp = None if ndb > 0: dp = np.zeros((nmz, 3), dtype=np.float32) for k in range(nmz): if model.verbose: sys.stdout.write(' loading sub dataset 9 for material zone {}\n'.format(k + 1)) line = f.readline() t = line.strip().split() dp[k, :] = float(t[0]), float(t[1]), float(t[2]) dstart = None dhc = None dcom = None dz = None nz = None if ndb > 0: dstart = [0] * ndb dhc = [0] * ndb dcom = [0] * ndb dz = [0] * ndb nz = [0] * ndb for k in range(ndb): kk = ldn[k] + 1 # dstart if model.verbose: sys.stdout.write(' loading sub dataset 10 for layer {}\n'.format(kk)) t = Util2d.load(f, model, (nrow, ncol), np.float32, 'dstart layer {}'.format(kk), ext_unit_dict) dstart[k] = t # dhc if model.verbose: sys.stdout.write(' loading sub dataset 11 for layer {}\n'.format(kk)) t = Util2d.load(f, model, (nrow, ncol), np.float32, 'dhc layer {}'.format(kk), ext_unit_dict) dhc[k] = t # dcom if model.verbose: sys.stdout.write(' loading sub dataset 12 for layer {}\n'.format(kk)) t = Util2d.load(f, model, (nrow, ncol), np.float32, 'dcom layer {}'.format(kk), ext_unit_dict) dcom[k] = t # dz if model.verbose: sys.stdout.write(' loading sub dataset 13 for layer {}\n'.format(kk)) t = Util2d.load(f, model, (nrow, ncol), np.float32, 'dz layer {}'.format(kk), ext_unit_dict) dz[k] = t # nz if model.verbose: sys.stdout.write(' loading sub dataset 14 for layer {}\n'.format(kk)) t = Util2d.load(f, model, (nrow, ncol), np.int, 'nz layer {}'.format(kk), ext_unit_dict) nz[k] = t ids15 = None ids16 = None if isuboc > 0: # dataset 15 if model.verbose: sys.stdout.write(' loading sub dataset 15 for layer {}\n'.format(kk)) ids15 = np.empty(12, dtype=np.int) ids15 = read1d(f, ids15) for k in range(1, 12, 2): model.add_pop_key_list(ids15[k]) ids15[k] = 2051 # all subsidence data sent to unit 2051 # dataset 16 ids16 = [0] * isuboc for k in range(isuboc): if model.verbose: sys.stdout.write(' loading sub dataset 16 for isuboc {}\n'.format(k + 1)) t = np.empty(17, dtype=np.int) t = read1d(f, t) t[0:4] -= 1 ids16[k] = t # close file f.close() # create sub instance sub = ModflowSub(model, ipakcb=ipakcb, isuboc=isuboc, idsave=idsave, idrest=idrest, nndb=nndb, ndb=ndb, nmz=nmz, nn=nn, ac1=ac1, ac2=ac2, itmin=itmin, ln=ln, ldn=ldn, rnb=rnb, hc=hc, sfe=sfe, sfv=sfv, com=com, dp=dp, dstart=dstart, dhc=dhc, dcom=dcom, dz=dz, nz=nz, ids15=ids15, ids16=ids16) # return sub instance return sub
def load(f, model, ext_unit_dict=None): if not hasattr(f, 'read'): filename = f f = open(filename, 'r') # A1 if model.verbose: print(' loading COMMENT LINES A1 AND A2...') line = f.readline() if model.verbose: print('A1: '.format(line.strip())) # A2 line = f.readline() if model.verbose: print('A2: '.format(line.strip())) # A3 if model.verbose: print(' loading NLAY, NROW, NCOL, NPER, NCOMP, MCOMP...') line = f.readline() nlay = int(line[0:10]) nrow = int(line[11:20]) ncol = int(line[21:30]) nper = int(line[31:40]) try: ncomp = int(line[41:50]) except: ncomp = 1 try: mcomp = int(line[51:60]) except: mcomp = 1 if model.verbose: print(' NLAY {}'.format(nlay)) print(' NROW {}'.format(nrow)) print(' NCOL {}'.format(ncol)) print(' NPER {}'.format(nper)) print(' NCOMP {}'.format(ncomp)) print(' MCOMP {}'.format(mcomp)) if model.verbose: print(' loading TUNIT, LUNIT, MUNIT...') line = f.readline() tunit = line[0:4] lunit = line[4:8] munit = line[8:12] if model.verbose: print(' TUNIT {}'.format(tunit)) print(' LUNIT {}'.format(lunit)) print(' MUNIT {}'.format(munit)) if model.verbose: print(' loading TRNOP...') trnop = f.readline()[:20].strip().split() if model.verbose: print(' TRNOP {}'.format(trnop)) if model.verbose: print(' loading LAYCON...') laycon = np.empty((nlay), np.int) laycon = read1d(f, laycon) if model.verbose: print(' LAYCON {}'.format(laycon)) if model.verbose: print(' loading DELR...') delr = Util2d.load(f, model, (ncol, 1), np.float32, 'delr', ext_unit_dict) if model.verbose: print(' DELR {}'.format(delr)) if model.verbose: print(' loading DELC...') delc = Util2d.load(f, model, (nrow, 1), np.float32, 'delc', ext_unit_dict) if model.verbose: print(' DELC {}'.format(delc)) if model.verbose: print(' loading HTOP...') htop = Util2d.load(f, model, (nrow, ncol), np.float32, 'htop', ext_unit_dict) if model.verbose: print(' HTOP {}'.format(htop)) if model.verbose: print(' loading DZ...') dz = Util3d.load(f, model, (nlay, nrow, ncol), np.float32, 'dz', ext_unit_dict) if model.verbose: print(' DZ {}'.format(dz)) if model.verbose: print(' loading PRSITY...') prsity = Util3d.load(f, model, (nlay, nrow, ncol), np.float32, 'prsity', ext_unit_dict) if model.verbose: print(' PRSITY {}'.format(prsity)) if model.verbose: print(' loading ICBUND...') icbund = Util3d.load(f, model, (nlay, nrow, ncol), np.int, 'icbund', ext_unit_dict) if model.verbose: print(' ICBUND {}'.format(icbund)) if model.verbose: print(' loading SCONC...') kwargs = {} sconc = Util3d.load(f, model, (nlay, nrow, ncol), np.float32, 'sconc1', ext_unit_dict) if ncomp > 1: for icomp in range(2, ncomp + 1): name = "sconc" + str(icomp) if model.verbose: print(' loading {}...'.format(name)) u3d = Util3d.load(f, model, (nlay, nrow, ncol), np.float32, name, ext_unit_dict) kwargs[name] = u3d if model.verbose: print(' SCONC {}'.format(sconc)) if model.verbose: print(' loading CINACT, THCKMIN...') line = f.readline() cinact = float(line[0:10]) try: thkmin = float(line[10:20]) except: thkmin = 0.01 if model.verbose: print(' CINACT {}'.format(cinact)) print(' THKMIN {}'.format(thkmin)) if model.verbose: print(' loading IFMTCN, IFMTNP, IFMTRF, IFMTDP, SAVUCN...') line = f.readline() ifmtcn = int(line[0:10]) ifmtnp = int(line[10:20]) ifmtrf = int(line[20:30]) ifmtdp = int(line[30:40]) savucn = False if 't' in line[40:50].lower(): savucn = True if model.verbose: print(' IFMTCN {}'.format(ifmtcn)) print(' IFMTNP {}'.format(ifmtnp)) print(' IFMTRF {}'.format(ifmtrf)) print(' IFMTDP {}'.format(ifmtdp)) print(' SAVUCN {}'.format(savucn)) if model.verbose: print(' loading NPRS...') line = f.readline() nprs = int(line[0:10]) if model.verbose: print(' NPRS {}'.format(nprs)) timprs = None if nprs > 0: if model.verbose: print(' loading TIMPRS...') timprs = np.empty((nprs), dtype=np.float32) read1d(f, timprs) if model.verbose: print(' TIMPRS {}'.format(timprs)) if model.verbose: print(' loading NOBS, NPROBS...') line = f.readline() nobs = int(line[0:10]) try: nprobs = int(line[10:20]) except: nprobs = 1 if model.verbose: print(' NOBS {}'.format(nobs)) print(' NPROBS {}'.format(nprobs)) obs = None if nobs > 0: if model.verbose: print(' loading KOBS, IOBS, JOBS...') obs = [] for l in range(nobs): line = f.readline() k = int(line[0:10]) i = int(line[10:20]) j = int(line[20:30]) obs.append([k, i, j]) obs = np.array(obs) if model.verbose: print(' OBS {}'.format(obs)) if model.verbose: print(' loading CHKMAS, NPRMAS...') line = f.readline() chkmas = False if 't' in line[0:10].lower(): chkmas = True try: nprmas = int(line[10:20]) except: nprmas = 1 if model.verbose: print(' CHKMAS {}'.format(chkmas)) print(' NPRMAS {}'.format(nprmas)) if model.verbose: print(' loading PERLEN, NSTP, TSMULT, TSLNGH, DT0, MXSTRN, TTSMULT, TTSMAX...') dt0, mxstrn, ttsmult, ttsmax = [], [], [], [] perlen = [] nstp = [] tsmult = [] tslngh = [] ssflag = [] for kper in range(nper): line = f.readline() perlen.append(float(line[0:10])) nstp.append(int(line[10:20])) tsmult.append(float(line[20:30])) sf = ' ' ll = line[30:].strip().split() if len(ll) > 0: if 'sstate' in ll[0].lower(): sf = 'SState' ssflag.append(sf) if tsmult[-1] < 0: t = np.empty((nstp[-1]), dtype=np.float32) read1d(f, t) tslngh.append(t) raise Exception("tsmult <= 0 not supported") line = f.readline() dt0.append(float(line[0:10])) mxstrn.append(int(line[10:20])) ttsmult.append(float(line[20:30])) ttsmax.append(float(line[30:40])) if model.verbose: print(' PERLEN {}'.format(perlen)) print(' NSTP {}'.format(nstp)) print(' TSMULT {}'.format(tsmult)) print(' SSFLAG {}'.format(ssflag)) print(' TSLNGH {}'.format(tslngh)) print(' DT0 {}'.format(dt0)) print(' MXSTRN {}'.format(mxstrn)) print(' TTSMULT {}'.format(ttsmult)) print(' TTSMAX {}'.format(ttsmax)) # Close the file f.close() btn = Mt3dBtn(model, nlay=nlay, nrow=nrow, ncol=ncol, nper=nper, ncomp=ncomp, mcomp=mcomp, tunit=tunit, laycon=laycon, delr=delr, delc=delc, htop=htop, dz=dz, lunit=lunit, munit=munit, prsity=prsity, icbund=icbund, sconc=sconc, cinact=cinact, thkmin=thkmin, ifmtcn=ifmtcn, ifmtnp=ifmtnp, ifmtrf=ifmtrf, ifmtdp=ifmtdp, savucn=savucn, nprs=nprs, timprs=timprs, obs=obs, nprobs=nprobs, chkmas=chkmas, nprmas=nprmas, perlen=perlen, nstp=nstp, tsmult=tsmult, ssflag=ssflag, dt0=dt0, mxstrn=mxstrn, ttsmult=ttsmult, ttsmax=ttsmax, **kwargs) return btn