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 ------- hfb : ModflowHfb object ModflowHfb object (of type :class:`flopy.modflow.mfbas.ModflowHfb`) Examples -------- >>> import flopy >>> m = flopy.modflow.Modflow() >>> hfb = flopy.modflow.ModflowHfb.load('test.hfb', m) """ if model.verbose: sys.stdout.write("loading hfb6 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 t = line.strip().split() nphfb = int(t[0]) mxfb = int(t[1]) nhfbnp = int(t[2]) # --check for no-print suppressor options = [] aux_names = [] if len(t) > 2: it = 2 while it < len(t): toption = t[it] # print it, t[it] if toption.lower() is "noprint": options.append(toption) elif "aux" in toption.lower(): options.append(" ".join(t[it : it + 2])) aux_names.append(t[it + 1].lower()) it += 1 it += 1 # --data set 2 and 3 if nphfb > 0: dt = ModflowHfb.get_empty(1).dtype pak_parms = mfparbc.load(f, nphfb, dt, model.verbose) # --data set 4 bnd_output = None if nhfbnp > 0: specified = ModflowHfb.get_empty(nhfbnp) for ibnd in range(nhfbnp): line = f.readline() if "open/close" in line.lower(): raise NotImplementedError("load() method does not support 'open/close'") t = line.strip().split() specified[ibnd] = tuple(t[: len(specified.dtype.names)]) # --convert indices to zero-based specified["k"] -= 1 specified["irow1"] -= 1 specified["icol1"] -= 1 specified["irow2"] -= 1 specified["icol2"] -= 1 bnd_output = np.recarray.copy(specified) if nphfb > 0: partype = ["hydchr"] line = f.readline() t = line.strip().split() nacthfb = int(t[0]) for iparm in range(nacthfb): line = f.readline() t = line.strip().split() pname = t[0].lower() iname = "static" par_dict, current_dict = pak_parms.get(pname) data_dict = current_dict[iname] # print par_dict # print data_dict par_current = ModflowHfb.get_empty(par_dict["nlst"]) # -- if model.mfpar.pval is None: parval = np.float(par_dict["parval"]) else: try: parval = np.float(model.mfpar.pval.pval_dict[pname]) except: parval = np.float(par_dict["parval"]) # --fill current parameter data (par_current) for ibnd, t in enumerate(data_dict): par_current[ibnd] = tuple(t[: len(par_current.dtype.names)]) # --convert indices to zero-based par_current["k"] -= 1 par_current["irow1"] -= 1 par_current["icol1"] -= 1 par_current["irow2"] -= 1 par_current["icol2"] -= 1 for ptype in partype: par_current[ptype] *= parval if bnd_output is None: bnd_output = np.recarray.copy(par_current) else: bnd_output = stack_arrays((bnd_output, par_current), asrecarray=True, usemask=False) hfb = ModflowHfb( model, nphfb=0, mxfb=0, nhfbnp=len(bnd_output), hfb_data=bnd_output, nacthfb=0, options=options ) return hfb
def load(f, model, nper=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.modflow.mf.Modflow`) to which this package will be added. nper : int The number of stress periods. If nper is None, then nper will be obtained from the model object. (default is None). 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 ------- evt : ModflowEvt object ModflowEvt object. Examples -------- >>> import flopy >>> m = flopy.modflow.Modflow() >>> evt = flopy.modflow.mfevt.load('test.evt', m) """ if model.verbose: sys.stdout.write("loading evt 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 npar = 0 if "parameter" in line.lower(): raw = line.strip().split() npar = int(raw[1]) if npar > 0: if model.verbose: print(" Parameters detected. Number of parameters = ", npar) line = f.readline() # Dataset 2 t = line.strip().split() nevtop = int(t[0]) ipakcb = 0 try: if int(t[1]) != 0: model.add_pop_key_list(int(t[1])) ipakcb = 53 except: pass # Dataset 3 and 4 - parameters data pak_parms = None if npar > 0: pak_parms = mfparbc.loadarray(f, npar, model.verbose) if nper is None: nrow, ncol, nlay, nper = model.get_nrow_ncol_nlay_nper() # Read data for every stress period surf = {} evtr = {} exdp = {} ievt = {} current_surf = [] current_evtr = [] current_exdp = [] current_ievt = [] for iper in range(nper): line = f.readline() t = line.strip().split() insurf = int(t[0]) inevtr = int(t[1]) inexdp = int(t[2]) if nevtop == 2: inievt = int(t[3]) if insurf >= 0: if model.verbose: print(" loading surf stress period {0:3d}...".format(iper + 1)) t = Util2d.load(f, model, (nrow, ncol), np.float32, "surf", ext_unit_dict) current_surf = t surf[iper] = current_surf if inevtr >= 0: if npar == 0: if model.verbose: print(" loading evtr stress period {0:3d}...".format(iper + 1)) t = Util2d.load(f, model, (nrow, ncol), np.float32, "evtr", ext_unit_dict) else: parm_dict = {} for ipar in range(inevtr): line = f.readline() t = line.strip().split() pname = t[0].lower() try: c = t[1].lower() if c in pak_parms.bc_parms: iname = c else: iname = "static" except: iname = "static" parm_dict[pname] = iname t = mfparbc.parameter_bcfill(model, (nrow, ncol), parm_dict, pak_parms) current_evtr = t evtr[iper] = current_evtr if inexdp >= 0: if model.verbose: print(" loading exdp stress period {0:3d}...".format(iper + 1)) t = Util2d.load(f, model, (nrow, ncol), np.float32, "exdp", ext_unit_dict) current_exdp = t exdp[iper] = current_exdp if nevtop == 2: if inievt >= 0: if model.verbose: print(" loading ievt stress period {0:3d}...".format(iper + 1)) t = Util2d.load(f, model, (nrow, ncol), np.int32, "ievt", ext_unit_dict) current_ievt = t ievt[iper] = current_ievt # create evt object args = {} if ievt: args["ievt"] = ievt if nevtop: args["nevtop"] = nevtop if evtr: args["evtr"] = evtr if surf: args["surf"] = surf if exdp: args["exdp"] = exdp args["ipakcb"] = ipakcb evt = ModflowEvt(model, **args) # return evt object return evt
def load(f, model, nper=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.modflow.mf.Modflow`) to which this package will be added. nper : int The number of stress periods. If nper is None, then nper will be obtained from the model object. (default is None). 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 ------- rch : ModflowRch object ModflowRch object. Examples -------- >>> import flopy >>> m = flopy.modflow.Modflow() >>> rch = flopy.modflow.ModflowRch.load('test.rch', m) """ if model.verbose: sys.stdout.write('loading rch 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 npar = 0 if "parameter" in line.lower(): raw = line.strip().split() npar = np.int(raw[1]) if npar > 0: if model.verbose: print(' Parameters detected. Number of parameters = ', npar) line = f.readline() # dataset 2 t = line.strip().split() nrchop = int(t[0]) ipakcb = 0 try: if int(t[1]) != 0: model.add_pop_key_list(int(t[1])) ipakcb = 53 except: pass # dataset 3 and 4 - parameters data pak_parms = None if npar > 0: pak_parms = mfparbc.loadarray(f, npar, model.verbose) if nper is None: nrow, ncol, nlay, nper = model.get_nrow_ncol_nlay_nper() # read data for every stress period rech = {} irch = None if nrchop == 2: irch = {} current_rech = [] current_irch = [] for iper in range(nper): line = f.readline() t = line.strip().split() inrech = int(t[0]) if nrchop == 2: inirch = int(t[1]) if inrech >= 0: if npar == 0: if model.verbose: print(' loading rech stress period {0:3d}...'.format(iper + 1)) t = Util2d.load(f, model, (nrow, ncol), np.float32, 'rech', ext_unit_dict) else: parm_dict = {} for ipar in range(inrech): line = f.readline() t = line.strip().split() pname = t[0].lower() try: c = t[1].lower() instance_dict = pak_parms.bc_parms[pname][1] if c in instance_dict: iname = c else: iname = 'static' except: iname = 'static' parm_dict[pname] = iname t = mfparbc.parameter_bcfill(model, (nrow, ncol), parm_dict, pak_parms) current_rech = t rech[iper] = current_rech if nrchop == 2: if inirch >= 0: if model.verbose: print(' loading irch stress period {0:3d}...'.format( iper + 1)) t = Util2d.load(f, model, (nrow, ncol), np.int, 'irch', ext_unit_dict) current_irch = t irch[iper] = current_irch rch = ModflowRch(model, nrchop=nrchop, ipakcb=ipakcb, rech=rech, irch=irch) return rch
def load(f, model, nper=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.modflow.mf.Modflow`) to which this package will be added. nper : int The number of stress periods. If nper is None, then nper will be obtained from the model object. (default is None). 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 ------- evt : ModflowEvt object ModflowEvt object. Examples -------- >>> import flopy >>> m = flopy.modflow.Modflow() >>> evt = flopy.modflow.mfevt.load('test.evt', m) """ if model.verbose: sys.stdout.write('loading evt 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 npar = 0 if "parameter" in line.lower(): raw = line.strip().split() npar = int(raw[1]) if npar > 0: if model.verbose: print(' Parameters detected. Number of parameters = ', npar) line = f.readline() # Dataset 2 t = line.strip().split() nevtop = int(t[0]) ipakcb = 0 try: if int(t[1]) != 0: model.add_pop_key_list(int(t[1])) ipakcb = 53 except: pass # Dataset 3 and 4 - parameters data pak_parms = None if npar > 0: pak_parms = mfparbc.loadarray(f, npar, model.verbose) if nper is None: nrow, ncol, nlay, nper = model.get_nrow_ncol_nlay_nper() # Read data for every stress period surf = {} evtr = {} exdp = {} ievt = {} current_surf = [] current_evtr = [] current_exdp = [] current_ievt = [] for iper in range(nper): line = f.readline() t = line.strip().split() insurf = int(t[0]) inevtr = int(t[1]) inexdp = int(t[2]) if (nevtop == 2): inievt = int(t[3]) if insurf >= 0: if model.verbose: print( ' loading surf stress period {0:3d}...'.format(iper + 1)) t = Util2d.load(f, model, (nrow, ncol), np.float32, 'surf', ext_unit_dict) current_surf = t surf[iper] = current_surf if inevtr >= 0: if npar == 0: if model.verbose: print(' loading evtr stress period {0:3d}...'.format( iper + 1)) t = Util2d.load(f, model, (nrow, ncol), np.float32, 'evtr', ext_unit_dict) else: parm_dict = {} for ipar in range(inevtr): line = f.readline() t = line.strip().split() pname = t[0].lower() try: c = t[1].lower() if c in pak_parms.bc_parms: iname = c else: iname = 'static' except: iname = 'static' parm_dict[pname] = iname t = mfparbc.parameter_bcfill(model, (nrow, ncol), parm_dict, pak_parms) current_evtr = t evtr[iper] = current_evtr if inexdp >= 0: if model.verbose: print( ' loading exdp stress period {0:3d}...'.format(iper + 1)) t = Util2d.load(f, model, (nrow, ncol), np.float32, 'exdp', ext_unit_dict) current_exdp = t exdp[iper] = current_exdp if nevtop == 2: if inievt >= 0: if model.verbose: print(' loading ievt stress period {0:3d}...'.format( iper + 1)) t = Util2d.load(f, model, (nrow, ncol), np.int32, 'ievt', ext_unit_dict) current_ievt = t ievt[iper] = current_ievt # create evt object args = {} if ievt: args["ievt"] = ievt if nevtop: args["nevtop"] = nevtop if evtr: args["evtr"] = evtr if surf: args["surf"] = surf if exdp: args["exdp"] = exdp args["ipakcb"] = ipakcb evt = ModflowEvt(model, **args) # return evt object return evt
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 ------- hfb : ModflowHfb object ModflowHfb object (of type :class:`flopy.modflow.mfbas.ModflowHfb`) Examples -------- >>> import flopy >>> m = flopy.modflow.Modflow() >>> hfb = flopy.modflow.ModflowHfb.load('test.hfb', m) """ if model.verbose: sys.stdout.write('loading hfb6 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 # dataset 1 t = line.strip().split() nphfb = int(t[0]) mxfb = int(t[1]) nhfbnp = int(t[2]) #--check for no-print suppressor options = [] aux_names = [] if len(t) > 2: it = 2 while it < len(t): toption = t[it] #print it, t[it] if toption.lower() is 'noprint': options.append(toption) elif 'aux' in toption.lower(): options.append(' '.join(t[it:it + 2])) aux_names.append(t[it + 1].lower()) it += 1 it += 1 #--data set 2 and 3 if nphfb > 0: dt = ModflowHfb.get_empty(1).dtype pak_parms = mfparbc.load(f, nphfb, dt, model.verbose) #--data set 4 bnd_output = None if nhfbnp > 0: specified = ModflowHfb.get_empty(nhfbnp) for ibnd in xrange(nhfbnp): line = f.readline() if "open/close" in line.lower(): raise NotImplementedError("load() method does not support \'open/close\'") t = line.strip().split() specified[ibnd] = tuple(t[:len(specified.dtype.names)]) #--convert indices to zero-based specified['k'] -= 1 specified['irow1'] -= 1 specified['icol1'] -= 1 specified['irow2'] -= 1 specified['icol2'] -= 1 bnd_output = np.recarray.copy(specified) if nphfb > 0: partype = ['hydchr'] line = f.readline() t = line.strip().split() nacthfb = int(t[0]) for iparm in xrange(nacthfb): line = f.readline() t = line.strip().split() pname = t[0].lower() iname = 'static' par_dict, current_dict = pak_parms.get(pname) data_dict = current_dict[iname] #print par_dict #print data_dict par_current = ModflowHfb.get_empty(par_dict['nlst']) #-- if model.mfpar.pval is None: parval = np.float(par_dict['parval']) else: try: parval = np.float(model.mfpar.pval.pval_dict[pname]) except: parval = np.float(par_dict['parval']) #--fill current parameter data (par_current) for ibnd, t in enumerate(data_dict): par_current[ibnd] = tuple(t[:len(par_current.dtype.names)]) #--convert indices to zero-based par_current['k'] -= 1 par_current['irow1'] -= 1 par_current['icol1'] -= 1 par_current['irow2'] -= 1 par_current['icol2'] -= 1 for ptype in partype: par_current[ptype] *= parval if bnd_output is None: bnd_output = np.recarray.copy(par_current) else: bnd_output = stack_arrays((bnd_output, par_current), asrecarray=True, usemask=False) hfb = ModflowHfb(model, nphfb=0, mxfb=0, nhfbnp=len(bnd_output), hfb_data=bnd_output, nacthfb=0, options=options) return hfb
def load(f, model, nper=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.modflow.mf.Modflow`) to which this package will be added. nper : int The number of stress periods. If nper is None, then nper will be obtained from the model object. (default is None). 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 ------- rch : ModflowRch object ModflowRch object. Examples -------- >>> import flopy >>> m = flopy.modflow.Modflow() >>> rch = flopy.modflow.ModflowRch.load('test.rch', m) """ if model.verbose: sys.stdout.write('loading rch 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 npar = 0 if "parameter" in line.lower(): raw = line.strip().split() npar = np.int(raw[1]) if npar > 0: if model.verbose: print ' Parameters detected. Number of parameters = ', npar line = f.readline() #dataset 2 t = line.strip().split() nrchop = int(t[0]) ipakcb = 0 try: if int(t[1]) != 0: model.add_pop_key_list(int(t[1])) ipakcb = 53 except: pass #--dataset 3 and 4 - parameters data pak_parms = None if npar > 0: pak_parms = mfparbc.loadarray(f, npar, model.verbose) if nper is None: nrow, ncol, nlay, nper = model.get_nrow_ncol_nlay_nper() #read data for every stress period rech = {} irch = None if nrchop == 2: irch = {} current_rech = [] current_irch = [] for iper in xrange(nper): line = f.readline() t = line.strip().split() inrech = int(t[0]) if nrchop == 2: inirch = int(t[1]) if inrech >= 0: if npar == 0: if model.verbose: print \ ' loading rech stress period {0:3d}...'.format(iper+1) t = util_2d.load(f, model, (nrow, ncol), np.float32, 'rech', ext_unit_dict) else: parm_dict = {} for ipar in xrange(inrech): line = f.readline() t = line.strip().split() pname = t[0].lower() try: c = t[1].lower() instance_dict = pak_parms.bc_parms[pname][1] if c in instance_dict: iname = c else: iname = 'static' except: iname = 'static' parm_dict[pname] = iname t = mfparbc.parameter_bcfill(model, (nrow, ncol), parm_dict, pak_parms) current_rech = t rech[iper] = current_rech if nrchop == 2: if inirch >= 0: if model.verbose: print ' loading irch stress period {0:3d}...'.format( iper+1) t = util_2d.load(f, model, (nrow,ncol), np.int, 'irch', ext_unit_dict) current_irch = t irch[iper] = current_irch rch = ModflowRch(model, nrchop=nrchop, ipakcb=ipakcb, rech=rech, irch=irch) return rch