def load(f, version='mf2k', exe_name='mf2005.exe', verbose=False, model_ws=None): """ Load an existing model. Parameters ---------- f : MODFLOW name file File to load. model_ws : model workspace path Returns ------- ml : Modflow object Examples -------- >>> import flopy >>> ml = flopy.modflow.Modflow.load(f) """ ml = Modflow(f.split('.')[0], version=version, exe_name=exe_name, verbose=False, model_ws=model_ws) try: namefile_path = os.path.join(ml.model_ws, ml.namefile) ext_unit_dict = mfreadnam.parsenamefile(namefile_path, ml.mfnam_packages) except Exception as e: print "error loading namfile entries from file" print str(e) return None dis = None dis_key = None for key, item in ext_unit_dict.iteritems(): if item.filetype.lower() == "dis": dis = item dis_key = key pck = dis.package.load(dis.filename, ml, ext_unit_dict=ext_unit_dict) ext_unit_dict.pop(dis_key) if verbose: print ext_unit_dict for key, item in ext_unit_dict.iteritems(): if item.package is not None: pck = item.package.load(item.filename, ml, ext_unit_dict=ext_unit_dict) pass elif "data" not in item.filetype.lower(): if verbose: print "skipping package", item.filetype, item.filename return ml
def load(f, version='mf2k', exe_name='mf2005.exe', verbose=False, model_ws='.', load_only=None,forgive=True): """ Load an existing model. Parameters ---------- f : MODFLOW name file File to load. model_ws : model workspace path load_only : (optional) filetype(s) to load (e.g. ["bas6", "lpf"]) forgive : flag to raise exception(s) on package load failure - good for debugging Returns ------- ml : Modflow object Examples -------- >>> import flopy >>> ml = flopy.modflow.Modflow.load(f) """ # test if name file is passed with extension (i.e., is a valid file) if os.path.isfile(os.path.join(model_ws, f)): modelname = f.rpartition('.')[0] else: modelname = f # if model_ws is None: # model_ws = os.path.dirname(f) if verbose: sys.stdout.write('\nCreating new model with name: {}\n{}\n\n'. format(modelname, 50 * '-')) ml = Modflow(modelname, version=version, exe_name=exe_name, verbose=verbose, model_ws=model_ws) files_succesfully_loaded = [] files_not_loaded = [] # read name file try: namefile_path = os.path.join(ml.model_ws, f) ext_unit_dict = mfreadnam.parsenamefile(namefile_path, ml.mfnam_packages, verbose=verbose) except Exception as e: #print("error loading name file entries from file") #print(str(e)) #return None raise Exception("error loading name file entries from file:\n" + str(e)) if ml.verbose: print('\n{}\nExternal unit dictionary:\n{}\n{}\n'. format(50 * '-', ext_unit_dict, 50 * '-')) # load dis dis = None dis_key = None for key, item in ext_unit_dict.items(): if item.filetype == "DIS": dis = item dis_key = key break try: pck = dis.package.load(dis.filename, ml, ext_unit_dict=ext_unit_dict) files_succesfully_loaded.append(dis.filename) if ml.verbose: sys.stdout.write(' {:4s} package load...success\n' .format(pck.name[0])) ext_unit_dict.pop(dis_key) except Exception as e: s = 'Could not read discretization package: {}. Stopping...' \ .format(os.path.basename(dis.filename)) raise Exception(s + " " + str(e)) if load_only is None: load_only = [] for key, item in ext_unit_dict.items(): load_only.append(item.filetype) else: if not isinstance(load_only, list): load_only = [load_only] not_found = [] for i, filetype in enumerate(load_only): filetype = filetype.upper() if filetype != 'DIS': load_only[i] = filetype found = False for key, item in ext_unit_dict.items(): if item.filetype == filetype: found = True break if not found: not_found.append(filetype) if len(not_found) > 0: raise Exception("the following load_only entries were not found " "in the ext_unit_dict: " + ','.join(not_found)) # zone, mult, pval ml.mfpar.set_pval(ml, ext_unit_dict) ml.mfpar.set_zone(ml, ext_unit_dict) ml.mfpar.set_mult(ml, ext_unit_dict) # try loading packages in ext_unit_dict for key, item in ext_unit_dict.items(): if item.package is not None: if item.filetype in load_only and item.filetype != "DIS": if not forgive: pck = item.package.load(item.filename, ml, ext_unit_dict=ext_unit_dict) files_succesfully_loaded.append(item.filename) if ml.verbose: sys.stdout.write(' {:4s} package load...success\n' .format(pck.name[0])) else: try: pck = item.package.load(item.filename, ml, ext_unit_dict=ext_unit_dict) files_succesfully_loaded.append(item.filename) if ml.verbose: sys.stdout.write(' {:4s} package load...success\n' .format(pck.name[0])) except BaseException as o: ml.load_fail = True if ml.verbose: sys.stdout.write(' {:4s} package load...failed\n {!s}\n' .format(item.filetype, o)) files_not_loaded.append(item.filename) else: if ml.verbose: sys.stdout.write(' {:4s} package load...skipped\n' .format(item.filetype)) files_not_loaded.append(item.filename) elif "data" not in item.filetype.lower(): files_not_loaded.append(item.filename) if ml.verbose: sys.stdout.write(' {:4s} package load...skipped\n' .format(item.filetype)) elif "data" in item.filetype.lower(): if ml.verbose: sys.stdout.write(' {} file load...skipped\n {}\n' .format(item.filetype, os.path.basename(item.filename))) if key not in ml.pop_key_list: ml.external_fnames.append(item.filename) ml.external_units.append(key) ml.external_binflag.append("binary" in item.filetype.lower()) # pop binary output keys and any external file units that are now # internal for key in ml.pop_key_list: try: ml.remove_external(unit=key) ext_unit_dict.pop(key) except: if ml.verbose: sys.stdout.write('Warning: external file unit " +\ "{} does not exist in ext_unit_dict.\n'.format(key)) # write message indicating packages that were successfully loaded if ml.verbose: print(1 * '\n') s = ' The following {0} packages were successfully loaded.' \ .format(len(files_succesfully_loaded)) print(s) for fname in files_succesfully_loaded: print(' ' + os.path.basename(fname)) if len(files_not_loaded) > 0: s = ' The following {0} packages were not loaded.'.format( len(files_not_loaded)) print(s) for fname in files_not_loaded: print(' ' + os.path.basename(fname)) print('\n') # return model object return ml
def load(f, version='mt3dms', exe_name='mt3dms.exe', verbose=False, model_ws='.', load_only=None, forgive=False, modflowmodel=None): """ Load an existing model. Parameters ---------- f : string Full path and name of MT3D name file. version : string The version of MT3D (mt3dms, or mt3d-usgs) (default is mt3dms) exe_name : string The name of the executable to use if this loaded model is run. (default is mt3dms.exe) verbose : bool Write information on the load process if True. (default is False) model_ws : string The path for the model workspace. (default is the current working directory '.') load_only : list of strings Filetype(s) to load (e.g. ['btn', 'adv']) (default is None, which means that all will be loaded) modflowmodel : flopy.modflow.mf.Modflow This is a flopy Modflow model object upon which this Mt3dms model is based. (the default is None) Returns ------- mt : flopy.mt3d.mt.Mt3dms flopy Mt3d model object Notes ----- The load method does not retain the name for the MODFLOW-generated FTL file. This can be added manually after the MT3D model has been loaded. The syntax for doing this manually is mt.ftlfilename = 'example.ftl' Examples -------- >>> import mf2web >>> f = 'example.nam' >>> mt = mf2web.mt3d.Mt3dms.load(f) >>> mt.ftlfilename = 'example.ftl' """ # test if name file is passed with extension (i.e., is a valid file) modelname_extension = None if os.path.isfile(os.path.join(model_ws, f)): modelname = f.rpartition('.')[0] modelname_extension = f.rpartition('.')[2] else: modelname = f if verbose: sys.stdout.write( '\nCreating new model with name: {}\n{}\n\n'.format( modelname, 50 * '-')) mt = Mt3dms(modelname=modelname, namefile_ext=modelname_extension, version=version, exe_name=exe_name, verbose=verbose, model_ws=model_ws, modflowmodel=modflowmodel) files_successfully_loaded = [] files_not_loaded = [] # read name file try: # namefile_path = os.path.join(mt.model_ws, mt.namefile) # namefile_path = f namefile_path = os.path.join(mt.model_ws, f) ext_unit_dict = mfreadnam.parsenamefile(namefile_path, mt.mfnam_packages, verbose=verbose) except Exception as e: # print("error loading name file entries from file") # print(str(e)) # return None raise Exception("error loading name file entries from file:\n" + str(e)) if mt.verbose: print('\n{}\nExternal unit dictionary:\n{}\n{}\n'.format( 50 * '-', ext_unit_dict, 50 * '-')) # reset unit number for list file unitnumber = None for key, value in ext_unit_dict.items(): if value.filetype == 'LIST': unitnumber = key filepth = os.path.basename(value.filename) if unitnumber == 'LIST': unitnumber = 16 if unitnumber is not None: mt.lst.unit_number = [unitnumber] mt.lst.file_name = [filepth] # set ftl information unitnumber = None for key, value in ext_unit_dict.items(): if value.filetype == 'FTL': unitnumber = key filepth = os.path.basename(value.filename) if unitnumber == 'FTL': unitnumber = 10 if unitnumber is not None: mt.ftlunit = unitnumber mt.ftlfilename = filepth # load btn btn = None btn_key = None for key, item in ext_unit_dict.items(): if item.filetype.lower() == "btn": btn = item btn_key = key break if btn is None: return None try: pck = btn.package.load(btn.filename, mt, ext_unit_dict=ext_unit_dict) except Exception as e: raise Exception('error loading BTN: {0}'.format(str(e))) files_successfully_loaded.append(btn.filename) if mt.verbose: sys.stdout.write(' {:4s} package load...success\n'.format( pck.name[0])) ext_unit_dict.pop(btn_key) if load_only is None: load_only = [] for key, item in ext_unit_dict.items(): load_only.append(item.filetype) else: if not isinstance(load_only, list): load_only = [load_only] not_found = [] for i, filetype in enumerate(load_only): filetype = filetype.upper() if filetype != 'BTN': load_only[i] = filetype found = False for key, item in ext_unit_dict.items(): if item.filetype == filetype: found = True break if not found: not_found.append(filetype) if len(not_found) > 0: raise Exception( "the following load_only entries were not found " "in the ext_unit_dict: " + ','.join(not_found)) # try loading packages in ext_unit_dict for key, item in ext_unit_dict.items(): if item.package is not None: if item.filetype in load_only: if forgive: try: pck = item.package.load( item.filename, mt, ext_unit_dict=ext_unit_dict) files_successfully_loaded.append(item.filename) if mt.verbose: sys.stdout.write( ' {:4s} package load...success\n'.format( pck.name[0])) except BaseException as o: if mt.verbose: sys.stdout.write( ' {:4s} package load...failed\n {!s}\n' .format(item.filetype, o)) files_not_loaded.append(item.filename) else: pck = item.package.load(item.filename, mt, ext_unit_dict=ext_unit_dict) files_successfully_loaded.append(item.filename) if mt.verbose: sys.stdout.write( ' {:4s} package load...success\n'.format( pck.name[0])) else: if mt.verbose: sys.stdout.write( ' {:4s} package load...skipped\n'.format( item.filetype)) files_not_loaded.append(item.filename) elif "data" not in item.filetype.lower(): files_not_loaded.append(item.filename) if mt.verbose: sys.stdout.write( ' {:4s} package load...skipped\n'.format( item.filetype)) elif "data" in item.filetype.lower(): if mt.verbose: sys.stdout.write( ' {} file load...skipped\n {}\n'.format( item.filetype, os.path.basename(item.filename))) if key not in mt.pop_key_list: mt.external_fnames.append(item.filename) mt.external_units.append(key) mt.external_binflag.append( "binary" in item.filetype.lower()) mt.external_output.append(False) # pop binary output keys and any external file units that are now # internal for key in mt.pop_key_list: try: mt.remove_external(unit=key) ext_unit_dict.pop(key) except: if mt.verbose: sys.stdout.write('Warning: external file unit " +\ "{} does not exist in ext_unit_dict.\n'.format(key)) # write message indicating packages that were successfully loaded if mt.verbose: print(1 * '\n') s = ' The following {0} packages were successfully loaded.' \ .format(len(files_successfully_loaded)) print(s) for fname in files_successfully_loaded: print(' ' + os.path.basename(fname)) if len(files_not_loaded) > 0: s = ' The following {0} packages were not loaded.'.format( len(files_not_loaded)) print(s) for fname in files_not_loaded: print(' ' + os.path.basename(fname)) print('\n') # return model object return mt
def flopy_mf2005_load(m, load_only=None, forgive=False, check=False): """Execute the code in flopy.modflow.Modflow.load on an existing flopy.modflow.Modflow instance.""" version = m.version verbose = m.verbose model_ws = m.model_ws # similar to modflow command: if file does not exist , try file.nam namefile_path = os.path.join(model_ws, m.namefile) if (not os.path.isfile(namefile_path) and os.path.isfile(namefile_path + '.nam')): namefile_path += '.nam' if not os.path.isfile(namefile_path): raise IOError('cannot find name file: ' + str(namefile_path)) files_successfully_loaded = [] files_not_loaded = [] # set the reference information ref_attributes = SpatialReference.load(namefile_path) # read name file ext_unit_dict = mfreadnam.parsenamefile(namefile_path, m.mfnam_packages, verbose=verbose) if m.verbose: print('\n{}\nExternal unit dictionary:\n{}\n{}\n'.format( 50 * '-', ext_unit_dict, 50 * '-')) # create a dict where key is the package name, value is unitnumber ext_pkg_d = {v.filetype: k for (k, v) in ext_unit_dict.items()} # version is assumed to be mfnwt m.set_version(version) # reset unit number for list file if 'LIST' in ext_pkg_d: unitnumber = ext_pkg_d['LIST'] filepth = os.path.basename(ext_unit_dict[unitnumber].filename) m.lst.unit_number = [unitnumber] m.lst.file_name = [filepth] # look for the free format flag in bas6 bas_key = ext_pkg_d.get('BAS6') if bas_key is not None: bas = ext_unit_dict[bas_key] start = bas.filehandle.tell() line = bas.filehandle.readline() while line.startswith("#"): line = bas.filehandle.readline() if "FREE" in line.upper(): m.free_format_input = True bas.filehandle.seek(start) if verbose: print("ModflowBas6 free format:{0}\n".format(m.free_format_input)) # load dis dis_key = ext_pkg_d.get('DIS') or ext_pkg_d.get('DISU') if dis_key is None: raise KeyError('discretization entry not found in nam file') disnamdata = ext_unit_dict[dis_key] dis = disnamdata.package.load(disnamdata.filename, m, ext_unit_dict=ext_unit_dict, check=False) files_successfully_loaded.append(disnamdata.filename) if m.verbose: print(' {:4s} package load...success'.format(dis.name[0])) m.setup_grid() # reset model grid now that DIS package is loaded assert m.pop_key_list.pop() == dis_key ext_unit_dict.pop(dis_key) start_datetime = ref_attributes.pop("start_datetime", "01-01-1970") itmuni = ref_attributes.pop("itmuni", 4) ref_source = ref_attributes.pop("source", "defaults") # if m.structured: # # get model units from usgs.model.reference, if provided # if ref_source == 'usgs.model.reference': # pass # # otherwise get them from the DIS file # else: # itmuni = dis.itmuni # ref_attributes['lenuni'] = dis.lenuni # sr = SpatialReference(delr=m.dis.delr.array, delc=ml.dis.delc.array, # **ref_attributes) # else: # sr = None # dis.sr = m.sr dis.tr = TemporalReference(itmuni=itmuni, start_datetime=start_datetime) dis.start_datetime = start_datetime if load_only is None: # load all packages/files load_only = ext_pkg_d.keys() else: # check items in list if not isinstance(load_only, list): load_only = [load_only] not_found = [] for i, filetype in enumerate(load_only): load_only[i] = filetype = filetype.upper() if filetype not in ext_pkg_d: not_found.append(filetype) if not_found: raise KeyError("the following load_only entries were not found " "in the ext_unit_dict: " + str(not_found)) # try loading packages in ext_unit_dict for key, item in ext_unit_dict.items(): if item.package is not None: if item.filetype in load_only: if forgive: try: package_load_args = \ list(inspect.getargspec(item.package.load))[0] if "check" in package_load_args: pck = item.package.load( item.filename, m, ext_unit_dict=ext_unit_dict, check=False) else: pck = item.package.load( item.filename, m, ext_unit_dict=ext_unit_dict) files_successfully_loaded.append(item.filename) if m.verbose: print(' {:4s} package load...success'.format( item.filetype)) except Exception as e: m.load_fail = True if m.verbose: print(' {:4s} package load...failed\n {!s}'. format(item.filetype, e)) files_not_loaded.append(item.filename) else: package_load_args = \ list(inspect.getargspec(item.package.load))[0] if "check" in package_load_args: pck = item.package.load(item.filename, m, ext_unit_dict=ext_unit_dict, check=False) else: pck = item.package.load(item.filename, m, ext_unit_dict=ext_unit_dict) files_successfully_loaded.append(item.filename) if m.verbose: print(' {:4s} package load...success'.format( item.filetype)) else: if m.verbose: print(' {:4s} package load...skipped'.format( item.filetype)) files_not_loaded.append(item.filename) elif "data" not in item.filetype.lower(): files_not_loaded.append(item.filename) if m.verbose: print(' {:4s} package load...skipped'.format(item.filetype)) elif "data" in item.filetype.lower(): if m.verbose: print(' {} file load...skipped\n {}'.format( item.filetype, os.path.basename(item.filename))) if key not in m.pop_key_list: # do not add unit number (key) if it already exists if key not in m.external_units: m.external_fnames.append(item.filename) m.external_units.append(key) m.external_binflag.append( "binary" in item.filetype.lower()) m.external_output.append(False) else: raise KeyError('unhandled case: {}, {}'.format(key, item)) # pop binary output keys and any external file units that are now # internal for key in m.pop_key_list: try: m.remove_external(unit=key) ext_unit_dict.pop(key) except KeyError: if m.verbose: print('Warning: external file unit {} does not exist in ' 'ext_unit_dict.'.format(key)) # write message indicating packages that were successfully loaded if m.verbose: print('') print(' The following {0} packages were successfully loaded.'.format( len(files_successfully_loaded))) for fname in files_successfully_loaded: print(' ' + os.path.basename(fname)) if len(files_not_loaded) > 0: print(' The following {0} packages were not loaded.'.format( len(files_not_loaded))) for fname in files_not_loaded: print(' ' + os.path.basename(fname)) if check: m.check(f='{}.chk'.format(m.name), verbose=m.verbose, level=0) # return model object return m
def load(f, version='mf2k', exe_name='mf2005.exe', verbose=False, model_ws='.', load_only=None): """ Load an existing model. Parameters ---------- f : MODFLOW name file File to load. model_ws : model workspace path load_only : (optional) filetype(s) to load (e.g. ["bas6", "lpf"]) Returns ------- ml : Modflow object Examples -------- >>> import flopy >>> ml = flopy.modflow.Modflow.load(f) """ modelname = os.path.basename(f).split('.')[0] #if model_ws is None: # model_ws = os.path.dirname(f) if verbose: sys.stdout.write('\nCreating new model with name: {}\n{}\n\n'. format(modelname, 50*'-')) ml = Modflow(modelname, version=version, exe_name=exe_name, verbose=verbose, model_ws=model_ws) files_succesfully_loaded = [] files_not_loaded = [] # read name file try: namefile_path = os.path.join(ml.model_ws, ml.namefile) ext_unit_dict = mfreadnam.parsenamefile(namefile_path, ml.mfnam_packages, verbose=verbose) except Exception as e: print("error loading namfile entries from file") print(str(e)) return None if ml.verbose: print('\n{}\nExternal unit dictionary:\n{}\n{}\n'. format(50*'-', ext_unit_dict, 50*'-')) # load dis dis = None dis_key = None for key, item in ext_unit_dict.items(): if item.filetype.lower() == "dis": dis = item dis_key = key break try: pck = dis.package.load(dis.filename, ml, ext_unit_dict=ext_unit_dict) files_succesfully_loaded.append(dis.filename) if ml.verbose: sys.stdout.write(' {:4s} package load...success\n' .format(pck.name[0])) ext_unit_dict.pop(dis_key) except Exception as e: s = 'Could not read discretization package: {}. Stopping...'\ .format(os.path.basename(dis.filename)) raise Exception(s + " " + str(e)) if load_only is None: load_only = [] for key,item in ext_unit_dict.items(): load_only.append(item.filetype) else: if not isinstance(load_only,list): load_only = [load_only] not_found = [] for i,filetype in enumerate(load_only): filetype = filetype.upper() if filetype != 'DIS': load_only[i] = filetype found = False for key,item in ext_unit_dict.items(): if item.filetype == filetype: found = True break if not found: not_found.append(filetype) if len(not_found) > 0: raise Exception("the following load_only entries were not found " "in the ext_unit_dict: " +','.join(not_found)) # zone, mult, pval ml.mfpar.set_pval(ml, ext_unit_dict) ml.mfpar.set_zone(ml, ext_unit_dict) ml.mfpar.set_mult(ml, ext_unit_dict) # try loading packages in ext_unit_dict for key, item in ext_unit_dict.items(): if item.package is not None: if item.filetype in load_only: try: pck = item.package.load(item.filename, ml, ext_unit_dict=ext_unit_dict) files_succesfully_loaded.append(item.filename) if ml.verbose: sys.stdout.write(' {:4s} package load...success\n' .format(pck.name[0])) except BaseException as o: if ml.verbose: sys.stdout.write(' {:4s} package load...failed\n {!s}\n' .format(item.filetype, o)) files_not_loaded.append(item.filename) else: if ml.verbose: sys.stdout.write(' {:4s} package load...skipped\n' .format(item.filetype)) files_not_loaded.append(item.filename) elif "data" not in item.filetype.lower(): files_not_loaded.append(item.filename) if ml.verbose: sys.stdout.write(' {:4s} package load...skipped\n' .format(item.filetype)) elif "data" in item.filetype.lower(): if ml.verbose: sys.stdout.write(' {} file load...skipped\n {}\n' .format(item.filetype, os.path.basename(item.filename))) if key not in ml.pop_key_list: ml.external_fnames.append(item.filename) ml.external_units.append(key) ml.external_binflag.append("binary" in item.filetype.lower()) # pop binary output keys and any external file units that are now # internal for key in ml.pop_key_list: try: ml.remove_external(unit=key) ext_unit_dict.pop(key) except: if ml.verbose: sys.stdout.write('Warning: external file unit " +\ "{} does not exist in ext_unit_dict.\n'.format(key)) # write message indicating packages that were successfully loaded if ml.verbose: print(1 * '\n') s = ' The following {0} packages were successfully loaded.'\ .format(len(files_succesfully_loaded)) print(s) for fname in files_succesfully_loaded: print(' ' + os.path.basename(fname)) if len(files_not_loaded) > 0: s = ' The following {0} packages were not loaded.'.format( len(files_not_loaded)) print(s) for fname in files_not_loaded: print(' ' + os.path.basename(fname)) print('\n') # return model object return ml
def load(f, version='mf2k', exe_name='mf2005.exe', verbose=False, model_ws='.'): """ Load an existing model. Parameters ---------- f : MODFLOW name file File to load. model_ws : model workspace path Returns ------- ml : Modflow object Examples -------- >>> import flopy >>> ml = flopy.modflow.Modflow.load(f) """ modelname = os.path.basename(f).split('.')[0] #if model_ws is None: # model_ws = os.path.dirname(f) sys.stdout.write('\nCreating new model with name: {}\n{}\n\n'.format( modelname, 50 * '-')) ml = Modflow(modelname, version=version, exe_name=exe_name, verbose=verbose, model_ws=model_ws) files_succesfully_loaded = [] files_not_loaded = [] # read name file try: namefile_path = os.path.join(ml.model_ws, ml.namefile) ext_unit_dict = mfreadnam.parsenamefile(namefile_path, ml.mfnam_packages, verbose=verbose) except Exception as e: print "error loading namfile entries from file" print str(e) return None if ml.verbose: print '\n{}\nExternal unit dictionary:\n{}\n{}\n'.\ format(50*'-', ext_unit_dict, 50*'-') # load dis dis = None dis_key = None for key, item in ext_unit_dict.iteritems(): if item.filetype.lower() == "dis": dis = item dis_key = key try: pck = dis.package.load(dis.filename, ml, ext_unit_dict=ext_unit_dict) files_succesfully_loaded.append(dis.filename) sys.stdout.write(' {:4s} package load...success\n'.format( pck.name[0])) ext_unit_dict.pop(dis_key) except: s = 'Could not read discretization package: {}. Stopping...'\ .format(os.path.basename(dis.filename)) raise Exception(s) # zone, mult, pval ml.mfpar.set_pval(ml, ext_unit_dict) ml.mfpar.set_zone(ml, ext_unit_dict) ml.mfpar.set_mult(ml, ext_unit_dict) # try loading packages in ext_unit_dict for key, item in ext_unit_dict.iteritems(): if item.package is not None: try: pck = item.package.load(item.filename, ml, ext_unit_dict=ext_unit_dict) files_succesfully_loaded.append(item.filename) sys.stdout.write( ' {:4s} package load...success\n'.format( pck.name[0])) except BaseException as o: sys.stdout.write( ' {:4s} package load...failed\n {!s}\n'.format( item.filetype, o)) files_not_loaded.append(item.filename) elif "data" not in item.filetype.lower(): files_not_loaded.append(item.filename) sys.stdout.write(' {:4s} package load...skipped\n'.format( item.filetype)) elif "data" in item.filetype.lower(): sys.stdout.write( ' {} file load...skipped\n {}\n'.format( item.filetype, os.path.basename(item.filename))) if key not in ml.pop_key_list: ml.external_fnames.append(item.filename) ml.external_units.append(key) ml.external_binflag.append( "binary" in item.filetype.lower()) #--pop binary output keys and any external file units that are now #--internal for key in ml.pop_key_list: try: ml.remove_external(unit=key) ext_unit_dict.pop(key) except: if ml.verbose: sys.stdout.write('Warning: external file unit " +\ "{} does not exist in ext_unit_dict.\n'.format(key)) #--write message indicating packages that were successfully loaded print 1 * '\n' s = ' The following {0} packages were successfully loaded.'.format( len(files_succesfully_loaded)) print s for fname in files_succesfully_loaded: print ' ' + os.path.basename(fname) if len(files_not_loaded) > 0: s = ' The following {0} packages were not loaded.'.format( len(files_not_loaded)) print s for fname in files_not_loaded: print ' ' + os.path.basename(fname) print '\n' #--return model object return ml
def load(f, version='mt3dms', exe_name='mt3dms.exe', verbose=False, model_ws='.', load_only=None): """ Load an existing model. Parameters ---------- f : string Full path and name of MT3D name file. version : string The version of MT3D (mt3dms, or mt3d-usgs) (default is mt3dms) exe_name : string The name of the executable to use if this loaded model is run. (default is mt3dms.exe) verbose : bool Write information on the load process if True. (default is False) model_ws : string The path for the model workspace. (default is the current working directory '.') load_only : list of strings Filetype(s) to load (e.g. ['btn', 'adv']) (default is None, which means that all will be loaded) Returns ------- mt : flopy.mt3d.mt.Mt3dms flopy Mt3d model object Examples -------- >>> import flopy >>> mt = flopy.mt3d.mt.Mt3dms.load(f) """ # test if name file is passed with extension (i.e., is a valid file) if os.path.isfile(os.path.join(model_ws, f)): modelname = f.rpartition('.')[0] else: modelname = f if verbose: sys.stdout.write('\nCreating new model with name: {}\n{}\n\n'. format(modelname, 50 * '-')) mt = Mt3dms(modelname=modelname, version=version, exe_name=exe_name, verbose=verbose, model_ws=model_ws) files_succesfully_loaded = [] files_not_loaded = [] # read name file try: # namefile_path = os.path.join(mt.model_ws, mt.namefile) # namefile_path = f namefile_path = os.path.join(mt.model_ws, f) ext_unit_dict = mfreadnam.parsenamefile(namefile_path, mt.mfnam_packages, verbose=verbose) except Exception as e: # print("error loading name file entries from file") # print(str(e)) # return None raise Exception( "error loading name file entries from file:\n" + str(e)) if mt.verbose: print('\n{}\nExternal unit dictionary:\n{}\n{}\n'. format(50 * '-', ext_unit_dict, 50 * '-')) # load btn btn = None btn_key = None for key, item in ext_unit_dict.items(): if item.filetype.lower() == "btn": btn = item btn_key = key break try: pck = btn.package.load(btn.filename, mt, ext_unit_dict=ext_unit_dict) files_succesfully_loaded.append(btn.filename) if mt.verbose: sys.stdout.write(' {:4s} package load...success\n' .format(pck.name[0])) ext_unit_dict.pop(btn_key) except Exception as e: s = 'Could not read btn package: {}. Stopping...' \ .format(os.path.basename(btn.filename)) raise Exception(s + " " + str(e)) if load_only is None: load_only = [] for key, item in ext_unit_dict.items(): load_only.append(item.filetype) else: if not isinstance(load_only, list): load_only = [load_only] not_found = [] for i, filetype in enumerate(load_only): filetype = filetype.upper() if filetype != 'BTN': load_only[i] = filetype found = False for key, item in ext_unit_dict.items(): if item.filetype == filetype: found = True break if not found: not_found.append(filetype) if len(not_found) > 0: raise Exception( "the following load_only entries were not found " "in the ext_unit_dict: " + ','.join(not_found)) # try loading packages in ext_unit_dict for key, item in ext_unit_dict.items(): if item.package is not None: if item.filetype in load_only: try: pck = item.package.load(item.filename, mt, ext_unit_dict=ext_unit_dict) files_succesfully_loaded.append(item.filename) if mt.verbose: sys.stdout.write( ' {:4s} package load...success\n' .format(pck.name[0])) except BaseException as o: if mt.verbose: sys.stdout.write( ' {:4s} package load...failed\n {!s}\n' .format(item.filetype, o)) files_not_loaded.append(item.filename) else: if mt.verbose: sys.stdout.write(' {:4s} package load...skipped\n' .format(item.filetype)) files_not_loaded.append(item.filename) elif "data" not in item.filetype.lower(): files_not_loaded.append(item.filename) if mt.verbose: sys.stdout.write(' {:4s} package load...skipped\n' .format(item.filetype)) elif "data" in item.filetype.lower(): if mt.verbose: sys.stdout.write(' {} file load...skipped\n {}\n' .format(item.filetype, os.path.basename(item.filename))) if key not in mt.pop_key_list: mt.external_fnames.append(item.filename) mt.external_units.append(key) mt.external_binflag.append("binary" in item.filetype.lower()) # pop binary output keys and any external file units that are now # internal for key in mt.pop_key_list: try: mt.remove_external(unit=key) ext_unit_dict.pop(key) except: if mt.verbose: sys.stdout.write('Warning: external file unit " +\ "{} does not exist in ext_unit_dict.\n'.format(key)) # write message indicating packages that were successfully loaded if mt.verbose: print(1 * '\n') s = ' The following {0} packages were successfully loaded.' \ .format(len(files_succesfully_loaded)) print(s) for fname in files_succesfully_loaded: print(' ' + os.path.basename(fname)) if len(files_not_loaded) > 0: s = ' The following {0} packages were not loaded.'.format( len(files_not_loaded)) print(s) for fname in files_not_loaded: print(' ' + os.path.basename(fname)) print('\n') # return model object return mt