Example #1
0
def test_example():
    # shapefiles defining the model grid, and the area that will include SFR
    mf_grid = '../Examples/data/grid.shp'
    mf_domain = '../Examples/data/domain.shp'

    # NHDPlus input files (see the input requirements in the SFRmaker readme file
    # (Note that multiple datasets can be supplied as lists;
    # when the SFR area covers multiple drainage basins)
    pfvaa_files = ['../Examples/data/PlusFlowlineVAA.dbf']
    plusflow_files = ['../Examples/data/PlusFlow.dbf']
    elevslope_files = ['../Examples/data/elevslope.dbf']
    flowlines = ['../Examples/data/NHDFlowlines.shp']

    # dem used for streambed elevations
    dem = '../Examples/data/dem.tif'
    dem_units_mult = 1.  # convert dem elevation units to modflow units

    ta = time.time()
    # Read in the NHD datasets
    nhd = NHDdata(NHDFlowline=flowlines,
                  PlusFlowlineVAA=pfvaa_files,
                  PlusFlow=plusflow_files,
                  elevslope=elevslope_files,
                  mf_grid=mf_grid,
                  mf_units='feet',
                  model_domain=mf_domain)
    # Setup the segments, reaches, and other basic SFR parameters
    nhd.to_sfr()

    # Write out this information to Mat1 and Mat2 tables
    nhd.write_tables(basename='temp/example')

    # Write out a shapefile that has the SFR linework
    nhd.write_linework_shapefile(basename='temp/SFRlines')
    print("preproc finished in {:.2f}s\n".format(time.time() - ta))

    # Mat 1 and Mat2 files generated from preproc.py above
    m1 = 'temp/exampleMat1.csv'
    m2 = 'temp/exampleMat2.csv'

    # Read in Mat1 and Mat2 into an SFRdata object (postproc module)
    # also include MODFLOW DIS file, NAM file, and path to model datasets
    sfr = SFRdata(Mat1=m1,
                  Mat2=m2,
                  mfgridshp=mf_grid,
                  mfdis='example.dis',
                  mfpath='temp',
                  mfnam='example.nam')

    # For interior stream reaches (not at the ends of segments),
    # assign streambed tops from the minimum DEM elevations in the model cell
    sfr.reset_m1_streambed_top_from_dem(dem, dem_units_mult=dem_units_mult)

    # Often the NHDPlus elevations don't match DEM at scales below 100k.
    # reset the segment end elevations to the minimum dem elevation
    # encountered in the end reach and all reaches upstream
    # (to use the NHDPlus elevations for the segment ends, comment this out)
    sfr.reset_segment_ends_from_dem()

    # Create array listing all unique segment sequences from headwaters to outlet
    # used by other methods, and ensures that there is no circular routing
    sfr.map_outsegs()

    # Remove any bumps in the DEM elevations,
    # so that interior elevations in the segments always decrease in the downstream direction
    sfr.smooth_interior_elevations()

    # Create a PDF showing the elevation profile of each unique segment sequence,
    # in comparison to the mean DEM elevation in each cell along the profile
    # Note: this is optional but allows for inspection to verify that the elevations are reasonable
    # on large networks (with thousands of sequences) this step may take an hour or two.
    sfr.plot_stream_profiles()

    # In cells with multiple SFR reaches (at confluences), put all conductance in the dominant reach
    # (to avoid circular routing)
    sfr.consolidate_conductance()

    # Put all SFR reaches in layer 1, and adjust layer bottoms in SFR cells accordingly,
    # so that no streambed bottoms are below the bottom of layer 1, and
    # so that there are no cell thicknesses less than 1
    # Note: This produces a new MODFLOW DIS file with the suffix "_adjusted to streambed.dis"
    # (unless another suffix is specified)
    sfr.reset_model_top_2streambed(minimum_thickness=1)

    # write out a shapefile of the SFR dataset
    sfr.write_shapefile('temp/SFR_package.shp')

    # write out updated Mat1 and Mat2 tables
    sfr.write_tables(basename='temp/example_pp_')

    # write the SFR package file
    sfr.write_sfr_package(basename='temp/example')

    # flopy now includes an SFR module, with a checker
    # run the flopy suite of diagnostics
    import flopy
    m = flopy.modflow.Modflow.load('example.nam', model_ws='temp')
    #dis = flopy.modflow.ModflowDis.load('ozarkgwmod/3-Input/A-calibration/ozark_adjusted_to_streambed.dis', m)
    sfr = flopy.modflow.ModflowSfr2.load('temp/example.sfr', m)
    sfr.check(f='flopy_SFR_check')
import sys
sys.path.insert(0, 'D:/ATLData/Documents/GitHub/SFR')
#sys.path.append('D:\JointBaseModel\SFRMakerData\TestModel')
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from rasterstats import zonal_stats
from postproc import SFRdata

path = 'D:/ATLData/SFR_testing/TestModel/'

# intantiate SFRdata object
sfr = SFRdata(Mat1=path + 'SFR_GWVmat1.txt',
              Mat2=path + 'SFR_GWVmat2.txt',
              mfgridshp='ForsyGrd.shp',
              mfgridshp_node_field='CellNum', 
              mfgridshp_row_field='ROW', mfgridshp_column_field='COLUMN')

# create columns in Mat2 of Min and Max elevation for each segment
# (these columns are not created by sfr_classes.py)
sfr.update_Mat2_elevations()

# update the reach elevations in Mat1 with minimum elevations from DEM
sfr.reset_m1_streambed_top_from_dem(dem=path + 'forsy_lid')

# trace routing from headwater segments to outlets; assign outlet to each segment
sfr.map_outsegs()

# creates table of segment confluences
sfr.map_confluences()
Example #3
0
    def __init__(self, sfrobject=None, Mat1=None, Mat2=None, sfr=None, node_column=None,
                     mfpath=None, mfnam=None, mfdis=None,
                     xll=0, yll=0, outpath=os.getcwd()):

        SFRdata.__init__(self, sfrobject=sfrobject, Mat1=Mat1, Mat2=Mat2, sfr=sfr, node_column=node_column,
                         mfpath=mfpath, mfnam=mfnam, mfdis=mfdis, xll=xll, yll=yll)
# Write out this information to Mat1 and Mat2 tables
nhd.write_tables(basename='{}/{}'.format(outdir, basename))

# Write out a shapefile that has the SFR linework
nhd.write_linework_shapefile(basename='{}/{}'.format(outdir, basename))
print("preproc finished in {:.2f}s\n".format(time.time() - ta))

# Mat 1 and Mat2 files generated from preproc.py above
m1 = '{}/{}Mat1.csv'.format(outdir, basename)
m2 = '{}/{}Mat2.csv'.format(outdir, basename)

# Read in Mat1 and Mat2 into an SFRdata object (postproc module)
# also include MODFLOW DIS file, NAM file, and path to model datasets
sfr = SFRdata(Mat1=m1, Mat2=m2, mfgridshp=mf_grid,
              mfdis=mfdis, mfpath=model_ws,
              mfnam=mfnam)

# For interior stream reaches (not at the ends of segments),
# assign streambed tops from the minimum DEM elevations in the model cell
sfr.reset_m1_streambed_top_from_dem(dem, dem_units_mult=dem_units_mult)

# Often the NHDPlus elevations don't match DEM at scales below 100k.
# reset the segment end elevations to the minimum dem elevation
# encountered in the end reach and all reaches upstream
# (to use the NHDPlus elevations for the segment ends, comment this out)
sfr.reset_segment_ends_from_dem()

# Remove any bumps in the DEM elevations,
# so that interior elevations in the segments always decrease in the downstream direction
sfr.smooth_interior_elevations()
# Write out this information to Mat1 and Mat2 tables
nhd.write_tables(basename='ozark')

# Write out a shapefile that has the SFR linework
nhd.write_linework_shapefile(basename='SFRlines')
print("preproc finished in {:.2f}s\n".format(time.time() - ta))

# Mat 1 and Mat2 files generated from preproc.py above
m1 = 'ozarkMat1.csv'
m2 = 'ozarkMat2.csv'

# Read in Mat1 and Mat2 into an SFRdata object (postproc module)
# also include MODFLOW DIS file, NAM file, and path to model datasets
sfr = SFRdata(Mat1=m1, Mat2=m2, mfgridshp=mf_grid,
              mfdis='ozark.dis', mfpath='ozarkgwmod/3-Input/A-calibration/',
              mfnam='ozark.nam',
              mfgridshp_node_field='cellnum',
              mfgridshp_row_field='irow',
              mfgridshp_column_field='icol')

# For interior stream reaches (not at the ends of segments), 
# assign streambed tops from the minimum DEM elevations in the model cell
sfr.reset_m1_streambed_top_from_dem('dem30m1.tif', dem_units_mult=1/0.3048)

# Create array listing all unique segment sequences from headwaters to outlet
# used by other methods, and ensures that there is no circular routing
sfr.map_outsegs()

# Remove any bumps in the DEM elevations, 
# so that interior elevations in the segments always decrease in the downstream direction
sfr.smooth_interior_elevations()
Example #6
0
    def __init__(self, sfrobject=None, Mat1=None, Mat2=None, sfr=None, node_column=None,
                     mfpath=None, mfnam=None, mfdis=None,
                     xll=0, yll=0, outpath=os.getcwd()):

        SFRdata.__init__(self, sfrobject=sfrobject, Mat1=Mat1, Mat2=Mat2, sfr=sfr, node_column=node_column,
                         mfpath=mfpath, mfnam=mfnam, mfdis=mfdis, xll=xll, yll=yll)
Example #7
0
# Write out this information to Mat1 and Mat2 tables
nhd.write_tables(basename='example')

# Write out a shapefile that has the SFR linework
nhd.write_linework_shapefile(basename='SFRlines')
print("preproc finished in {:.2f}s\n".format(time.time() - ta))

# Mat 1 and Mat2 files generated from preproc.py above
m1 = 'exampleMat1.csv'
m2 = 'exampleMat2.csv'

# Read in Mat1 and Mat2 into an SFRdata object (postproc module)
# also include MODFLOW DIS file, NAM file, and path to model datasets
sfr = SFRdata(Mat1=m1,
              Mat2=m2,
              mfgridshp=mf_grid,
              mfdis='example.dis',
              mfpath='data',
              mfnam='example.nam')

# For interior stream reaches (not at the ends of segments),
# assign streambed tops from the minimum DEM elevations in the model cell
sfr.reset_m1_streambed_top_from_dem(dem, dem_units_mult=dem_units_mult)

# Often the NHDPlus elevations don't match DEM at scales below 100k.
# reset the segment end elevations to the minimum dem elevation
# encountered in the end reach and all reaches upstream
# (to use the NHDPlus elevations for the segment ends, comment this out)
sfr.reset_segment_ends_from_dem()

# Create array listing all unique segment sequences from headwaters to outlet
# used by other methods, and ensures that there is no circular routing
Example #8
0
def test_example():
    # shapefiles defining the model grid, and the area that will include SFR
    mf_grid = '../Examples/data/grid.shp'
    mf_domain = '../Examples/data/domain.shp'

    # NHDPlus input files (see the input requirements in the SFRmaker readme file
    # (Note that multiple datasets can be supplied as lists;
    # when the SFR area covers multiple drainage basins)
    pfvaa_files = ['../Examples/data/PlusFlowlineVAA.dbf']
    plusflow_files = ['../Examples/data/PlusFlow.dbf']
    elevslope_files = ['../Examples/data/elevslope.dbf']
    flowlines = ['../Examples/data/NHDFlowlines.shp']

    # dem used for streambed elevations
    dem = '../Examples/data/dem.tif'
    dem_units_mult = 1. # convert dem elevation units to modflow units

    ta = time.time()
    # Read in the NHD datasets
    nhd = NHDdata(NHDFlowline=flowlines, PlusFlowlineVAA=pfvaa_files, PlusFlow=plusflow_files,
                  elevslope=elevslope_files,
                  mf_grid=mf_grid, mf_units='feet',
                  model_domain=mf_domain)
    # Setup the segments, reaches, and other basic SFR parameters
    nhd.to_sfr()

    # Write out this information to Mat1 and Mat2 tables
    nhd.write_tables(basename='temp/example')

    # Write out a shapefile that has the SFR linework
    nhd.write_linework_shapefile(basename='temp/SFRlines')
    print("preproc finished in {:.2f}s\n".format(time.time() - ta))

    # Mat 1 and Mat2 files generated from preproc.py above
    m1 = 'temp/exampleMat1.csv'
    m2 = 'temp/exampleMat2.csv'

    # Read in Mat1 and Mat2 into an SFRdata object (postproc module)
    # also include MODFLOW DIS file, NAM file, and path to model datasets
    sfr = SFRdata(Mat1=m1, Mat2=m2, mfgridshp=mf_grid,
                  mfdis='example.dis', mfpath='temp',
                  mfnam='example.nam')

    # For interior stream reaches (not at the ends of segments),
    # assign streambed tops from the minimum DEM elevations in the model cell
    sfr.reset_m1_streambed_top_from_dem(dem, dem_units_mult=dem_units_mult)

    # Often the NHDPlus elevations don't match DEM at scales below 100k.
    # reset the segment end elevations to the minimum dem elevation
    # encountered in the end reach and all reaches upstream
    # (to use the NHDPlus elevations for the segment ends, comment this out)
    sfr.reset_segment_ends_from_dem()

    # Create array listing all unique segment sequences from headwaters to outlet
    # used by other methods, and ensures that there is no circular routing
    sfr.map_outsegs()

    # Remove any bumps in the DEM elevations,
    # so that interior elevations in the segments always decrease in the downstream direction
    sfr.smooth_interior_elevations()

    # Create a PDF showing the elevation profile of each unique segment sequence,
    # in comparison to the mean DEM elevation in each cell along the profile
    # Note: this is optional but allows for inspection to verify that the elevations are reasonable
    # on large networks (with thousands of sequences) this step may take an hour or two.
    sfr.plot_stream_profiles()

    # In cells with multiple SFR reaches (at confluences), put all conductance in the dominant reach
    # (to avoid circular routing)
    sfr.consolidate_conductance()

    # Put all SFR reaches in layer 1, and adjust layer bottoms in SFR cells accordingly,
    # so that no streambed bottoms are below the bottom of layer 1, and
    # so that there are no cell thicknesses less than 1
    # Note: This produces a new MODFLOW DIS file with the suffix "_adjusted to streambed.dis"
    # (unless another suffix is specified)
    sfr.reset_model_top_2streambed(minimum_thickness=1)

    # write out a shapefile of the SFR dataset
    sfr.write_shapefile('temp/SFR_package.shp')

    # write out updated Mat1 and Mat2 tables
    sfr.write_tables(basename='temp/example_pp_')

    # write the SFR package file
    sfr.write_sfr_package(basename='temp/example')

    # flopy now includes an SFR module, with a checker
    # run the flopy suite of diagnostics
    import flopy
    m = flopy.modflow.Modflow.load('example.nam', model_ws='temp')
    #dis = flopy.modflow.ModflowDis.load('ozarkgwmod/3-Input/A-calibration/ozark_adjusted_to_streambed.dis', m)
    sfr = flopy.modflow.ModflowSfr2.load('temp/example.sfr', m)
    sfr.check(f='flopy_SFR_check')
# Write out this information to Mat1 and Mat2 tables
nhd.write_tables(basename='example')

# Write out a shapefile that has the SFR linework
nhd.write_linework_shapefile(basename='SFRlines')
print("preproc finished in {:.2f}s\n".format(time.time() - ta))

# Mat 1 and Mat2 files generated from preproc.py above
m1 = 'exampleMat1.csv'
m2 = 'exampleMat2.csv'

# Read in Mat1 and Mat2 into an SFRdata object (postproc module)
# also include MODFLOW DIS file, NAM file, and path to model datasets
sfr = SFRdata(Mat1=m1, Mat2=m2, mfgridshp=mf_grid,
              mfdis='example.dis', mfpath='data',
              mfnam='example.nam')

# For interior stream reaches (not at the ends of segments),
# assign streambed tops from the minimum DEM elevations in the model cell
sfr.reset_m1_streambed_top_from_dem(dem, dem_units_mult=dem_units_mult)

# Often the NHDPlus elevations don't match DEM at scales below 100k.
# reset the segment end elevations to the minimum dem elevation
# encountered in the end reach and all reaches upstream
# (to use the NHDPlus elevations for the segment ends, comment this out)
sfr.reset_segment_ends_from_dem()

# Create array listing all unique segment sequences from headwaters to outlet
# used by other methods, and ensures that there is no circular routing
sfr.map_outsegs()