Run Models#
This section demonstrates how to assemble, write, and execute the MODFLOW 6 groundwater flow model and the MODPATH 7 particle tracking models. It also includes routines for visualizing model outputs to validate and interpret simulation results.
Importing Libraries and Loading Variables#
All required libraries are imported, and variables from previous workflow steps—including model configuration, grid geometry, boundary conditions, and CHD data—are loaded using the %store magic command.
Show code cell source
# Import Libraries
%run /Users/u4eeevmq/Documents/Python/HyporheicFloPy/VQuintana/notebooks/common_imports.py
# Retrieve stored variables
%store -r md6_exe_path
%store -r md7_exe_path
%store -r sim_name
%store -r workspace
%store -r figs_path
%store -r gwf_name
%store -r mp7_name
%store -r gwf_ws
%store -r mp7_ws
%store -r headfile
%store -r head_filerecord
%store -r budgetfile
%store -r budget_filerecord
%store -r write
%store -r run
%store -r plot
%store -r plot_show
%store -r plot_save
# Retrieve model parameters
%store -r length_units
%store -r time_units
%store -r nper
%store -r cell_size_x
%store -r cell_size_y
%store -r gw_mod_depth
%store -r z
%store -r kh
%store -r kv
%store -r gw_offset
%store -r porosity
%store -r rch_iface
%store -r rch_iflowface
%store -r recharge_rate
%store -r nstp
%store -r perlen
%store -r tsmult
# Retrieve spatial data
%store -r hec_ras_crs
%store -r terrain_elevation
%store -r raster_transform
%store -r transform
%store -r raster_crs
%store -r terrain_output_raster
%store -r water_surface_output_raster
%store -r ground_water_domain
%store -r left_boundary
%store -r right_boundary
# retrieve model domain data
%store -r terrain_elevation
%store -r raster_transform
%store -r raster_crs
%store -r raster_bounds_box
%store -r bed_elevation
%store -r raster_width
%store -r raster_height
%store -r ncol
%store -r nrow
%store -r top
%store -r nlay
%store -r grid_x
%store -r grid_y
%store -r grid_points
%store -r intersecting_points
%store -r xorigin
%store -r yorigin
%store -r xmin
%store -r ymin
%store -r xmax
%store -r ymax
%store -r tops
%store -r botm
# retrieve model boundary data
%store -r left_start
%store -r left_end
%store -r right_start
%store -r right_end
%store -r upstream_start_x
%store -r upstream_start_y
%store -r upstream_end_x
%store -r upstream_end_y
%store -r downstream_start_x
%store -r downstream_start_y
%store -r downstream_end_x
%store -r downstream_end_y
%store -r upstream_line
%store -r downstream_line
%store -r upstream_boundary
%store -r downstream_boundary
%store -r grid_cells
%store -r grid_gdf
%store -r idomain
# retrieve model boundary conditions
%store -r boundary_cells
%store -r left_boundary_cells
%store -r right_boundary_cells
%store -r upstream_boundary_cells
%store -r downstream_boundary_cells
%store -r all_boundary_cells
%store -r unique_boundary_cells
%store -r left_boundary_cells_first_layer
%store -r right_boundary_cells_first_layer
%store -r upstream_boundary_cells_first_layer
%store -r downstream_boundary_cells_first_layer
%store -r max_elevation_upstream
%store -r max_elevation_downstream
%store -r gw_elevation_left_first
%store -r gw_elevation_left_last
%store -r gw_elevation_right_first
%store -r gw_elevation_right_last
%store -r gw_elevation_upstream_first
%store -r gw_elevation_upstream_last
%store -r gw_elevation_downstream_first
%store -r gw_elevation_downstream_last
%store -r gw_elevation_left
%store -r gw_elevation_right
%store -r gw_elevation_upstream
%store -r gw_elevation_downstream
%store -r grid_points_coords
%store -r elevation_values
%store -r grid_points_df
%store -r output_csv
%store -r cropped_df
%store -r river_cells
%store -r river_x
%store -r river_y
%store -r river_elevation
%store -r chd_data
%store -r unique_chd_cells
%store -r duplicate_chd_cells
%store -r chd_data_converted
# retrieve well data
%store -r wel_data
# retrieve nodes
# %store -r nodes
Defining Input and Output Variables#
Additional variables for simulation output are specified. These paths help organize model results and facilitate integration with geospatial data for visualization and analysis.
#------------------------ Define Input Variables -----------------------#
output_folder="Hyporheic_output" # Default output folder for simulation results
direction = "Forward" # or "Backward" based on your scenario
# Path to the satellite image
sat_image_path = None
groundwater_domain_shp_path = None
# Parameters
output_folder = "Hyporheic_output"
direction = "Forward"
sat_image_path = "C:\\Users\\u4eeevmq\\Documents\\Python\\HyporheicFloPy\\CH00365\\GMS\\HighResOrtho\\HighResOrtho_23Oct2014_Clip.tif"
groundwater_domain_shp_path = "C:\\Users\\u4eeevmq\\Documents\\Python\\HyporheicFloPy\\CH00365\\InputShapefiles\\GWDomain.shp"
Model Configuration Object#
A configuration object (cfg) is initialized, bundling all relevant settings and data arrays needed to construct and run the MODFLOW 6 model. This object streamlines the passing of parameters to setup and plotting functions, and helps maintain clarity and organization within the workflow.
# Initialize cfg with required attributes
cfg = SimpleNamespace(
# Simulation and workspace settings
sim_name=sim_name,
gwf_ws=gwf_ws,
gwf_name =gwf_name,
mp7_name=mp7_name,
mp7_ws=mp7_ws,
md6_exe_path=md6_exe_path,
md7_exe_path=md7_exe_path,
raster_crs=raster_crs, # Coordinate reference system of the raster
ground_water_domain=ground_water_domain, # GeoDataFrame for groundwater domain
left_boundary=left_boundary, # GeoDataFrame for left boundary
right_boundary=right_boundary, # GeoDataFrame for right boundary
cropped_water_surface_raster=water_surface_output_raster, # Cropped water surface raster
gw_offset=gw_offset, # Offset below water surface elevation
nper =nper, # Number of stress periods
perlen =perlen, # Length of each stress period
tsmult =tsmult, # Time step multiplier
nstp =nstp, # Number of time steps per stress period
cell_size_x=cell_size_x, # Cell size in x-direction
cell_size_y=cell_size_y, # Cell size in y-direction
xmin=xmin, # Minimum x-coordinate of the grid
ymin=ymin, # Minimum y-coordinate of the grid
xmax=xmax, # Maximum x-coordinate of the grid
ymax=ymax, # Maximum y-coordinate of the grid
nlay=nlay, # Number of layers
nrow=nrow, # Number of rows
ncol=ncol, # Number of columns
tops=tops, # List of top elevations for each layer
botm=botm, # List of bottom elevations for each layer
grid_x=grid_x, # Grid x-coordinates
grid_y=grid_y, # Grid y-coordinates
grid_points=grid_points, # GeoDataFrame of grid points
length_units = length_units,
time_units = time_units,
budgetfile=budgetfile, # Budget file name
headfile=headfile, # Head file name
bed_elevation=bed_elevation, # Bed elevation
kv =kv, # Vertical hydraulic conductivity
kh =kh, # Horizontal hydraulic conductivity
porosity=porosity, # Porosity
gw_mod_depth=gw_mod_depth, # Depth of the groundwater model
)
# Debugging: Print cfg to verify attributes
print(cfg)
Show code cell output
namespace(sim_name='Hyporheic_Project', gwf_ws=WindowsPath('HP_workspace/gwf_workspace'), gwf_name='gwf_model', mp7_name='mp7_model', mp7_ws=WindowsPath('HP_workspace/mp7_workspace'), md6_exe_path='C:\\Users\\u4eeevmq\\Documents\\Python\\Flo_Py\\flopy\\modflowExe\\mf6.exe', md7_exe_path='C:\\Users\\u4eeevmq\\Documents\\Python\\Flo_Py\\flopy\\modflowExe\\mp7.exe', raster_crs=CRS.from_wkt('PROJCS["NAD83 / Texas Central (ftUS)",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101004,AUTHORITY["EPSG","7019"]],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["latitude_of_origin",29.6666666666667],PARAMETER["central_meridian",-100.333333333333],PARAMETER["standard_parallel_1",30.1166666666667],PARAMETER["standard_parallel_2",31.8833333333333],PARAMETER["false_easting",2296583.33333333],PARAMETER["false_northing",9842500],UNIT["US survey foot",0.304800609601219,AUTHORITY["EPSG","9003"]],AXIS["Easting",EAST],AXIS["Northing",NORTH]]'), ground_water_domain= FID Count Length Area \
0 0 7 1761.189154 194450.482058
geometry
0 POLYGON ((2407087.969 10515373.906, 2407068.10... , left_boundary= FID Count Length geometry
0 0 2 565.535644 LINESTRING (2407358.236 10515701.163, 2407570...., right_boundary= FID Count Length geometry
0 0 3 492.847861 LINESTRING (2407065.519 10515580.277, 2407081...., cropped_water_surface_raster='cropped_water_surface_elevation_raster.tif', gw_offset=0.5, nper=1, perlen=1.0, tsmult=1.0, nstp=1, cell_size_x=5.0, cell_size_y=5.0, xmin=2406093.5149272773, ymin=10514475.360625861, xmax=2408251.1279889615, ymax=10516401.62506268, nlay=40, nrow=385, ncol=431, tops=[masked_array(
data=[[1626.0625, 1626.0625, 1626.0625, ..., 1637.46875, 1637.71875,
1637.71875],
[1626.0625, 1626.0625, 1626.0625, ..., 1637.46875, 1637.71875,
1637.71875],
[1626.125, 1626.125, 1626.125, ..., 1637.46875, 1637.71875,
1637.71875],
...,
[1633.03125, 1633.03125, 1632.90625, ..., 1639.59375, 1639.59375,
1639.59375],
[1633.03125, 1633.03125, 1632.90625, ..., 1639.625, 1639.625,
1639.625],
[1633.03125, 1633.03125, 1632.90625, ..., 1639.625, 1639.625,
1639.625]],
mask=[[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
...,
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False]],
fill_value=1e+20), masked_array(
data=[[1599.8125, 1599.8125, 1599.8125, ..., 1599.8125, 1599.8125,
1599.8125],
[1599.8125, 1599.8125, 1599.8125, ..., 1599.8125, 1599.8125,
1599.8125],
[1599.8125, 1599.8125, 1599.8125, ..., 1599.8125, 1599.8125,
1599.8125],
...,
[1599.8125, 1599.8125, 1599.8125, ..., 1599.8125, 1599.8125,
1599.8125],
[1599.8125, 1599.8125, 1599.8125, ..., 1599.8125, 1599.8125,
1599.8125],
[1599.8125, 1599.8125, 1599.8125, ..., 1599.8125, 1599.8125,
1599.8125]],
mask=[[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
...,
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False]],
fill_value=1e+20), masked_array(
data=[[1599.3125, 1599.3125, 1599.3125, ..., 1599.3125, 1599.3125,
1599.3125],
[1599.3125, 1599.3125, 1599.3125, ..., 1599.3125, 1599.3125,
1599.3125],
[1599.3125, 1599.3125, 1599.3125, ..., 1599.3125, 1599.3125,
1599.3125],
...,
[1599.3125, 1599.3125, 1599.3125, ..., 1599.3125, 1599.3125,
1599.3125],
[1599.3125, 1599.3125, 1599.3125, ..., 1599.3125, 1599.3125,
1599.3125],
[1599.3125, 1599.3125, 1599.3125, ..., 1599.3125, 1599.3125,
1599.3125]],
mask=[[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
...,
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False]],
fill_value=1e+20), masked_array(
data=[[1598.8125, 1598.8125, 1598.8125, ..., 1598.8125, 1598.8125,
1598.8125],
[1598.8125, 1598.8125, 1598.8125, ..., 1598.8125, 1598.8125,
1598.8125],
[1598.8125, 1598.8125, 1598.8125, ..., 1598.8125, 1598.8125,
1598.8125],
...,
[1598.8125, 1598.8125, 1598.8125, ..., 1598.8125, 1598.8125,
1598.8125],
[1598.8125, 1598.8125, 1598.8125, ..., 1598.8125, 1598.8125,
1598.8125],
[1598.8125, 1598.8125, 1598.8125, ..., 1598.8125, 1598.8125,
1598.8125]],
mask=[[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
...,
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False]],
fill_value=1e+20), masked_array(
data=[[1598.3125, 1598.3125, 1598.3125, ..., 1598.3125, 1598.3125,
1598.3125],
[1598.3125, 1598.3125, 1598.3125, ..., 1598.3125, 1598.3125,
1598.3125],
[1598.3125, 1598.3125, 1598.3125, ..., 1598.3125, 1598.3125,
1598.3125],
...,
[1598.3125, 1598.3125, 1598.3125, ..., 1598.3125, 1598.3125,
1598.3125],
[1598.3125, 1598.3125, 1598.3125, ..., 1598.3125, 1598.3125,
1598.3125],
[1598.3125, 1598.3125, 1598.3125, ..., 1598.3125, 1598.3125,
1598.3125]],
mask=[[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
...,
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False]],
fill_value=1e+20), masked_array(
data=[[1597.8125, 1597.8125, 1597.8125, ..., 1597.8125, 1597.8125,
1597.8125],
[1597.8125, 1597.8125, 1597.8125, ..., 1597.8125, 1597.8125,
1597.8125],
[1597.8125, 1597.8125, 1597.8125, ..., 1597.8125, 1597.8125,
1597.8125],
...,
[1597.8125, 1597.8125, 1597.8125, ..., 1597.8125, 1597.8125,
1597.8125],
[1597.8125, 1597.8125, 1597.8125, ..., 1597.8125, 1597.8125,
1597.8125],
[1597.8125, 1597.8125, 1597.8125, ..., 1597.8125, 1597.8125,
1597.8125]],
mask=[[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
...,
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False]],
fill_value=1e+20), masked_array(
data=[[1597.3125, 1597.3125, 1597.3125, ..., 1597.3125, 1597.3125,
1597.3125],
[1597.3125, 1597.3125, 1597.3125, ..., 1597.3125, 1597.3125,
1597.3125],
[1597.3125, 1597.3125, 1597.3125, ..., 1597.3125, 1597.3125,
1597.3125],
...,
[1597.3125, 1597.3125, 1597.3125, ..., 1597.3125, 1597.3125,
1597.3125],
[1597.3125, 1597.3125, 1597.3125, ..., 1597.3125, 1597.3125,
1597.3125],
[1597.3125, 1597.3125, 1597.3125, ..., 1597.3125, 1597.3125,
1597.3125]],
mask=[[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
...,
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False]],
fill_value=1e+20), masked_array(
data=[[1596.8125, 1596.8125, 1596.8125, ..., 1596.8125, 1596.8125,
1596.8125],
[1596.8125, 1596.8125, 1596.8125, ..., 1596.8125, 1596.8125,
1596.8125],
[1596.8125, 1596.8125, 1596.8125, ..., 1596.8125, 1596.8125,
1596.8125],
...,
[1596.8125, 1596.8125, 1596.8125, ..., 1596.8125, 1596.8125,
1596.8125],
[1596.8125, 1596.8125, 1596.8125, ..., 1596.8125, 1596.8125,
1596.8125],
[1596.8125, 1596.8125, 1596.8125, ..., 1596.8125, 1596.8125,
1596.8125]],
mask=[[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
...,
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False]],
fill_value=1e+20), masked_array(
data=[[1596.3125, 1596.3125, 1596.3125, ..., 1596.3125, 1596.3125,
1596.3125],
[1596.3125, 1596.3125, 1596.3125, ..., 1596.3125, 1596.3125,
1596.3125],
[1596.3125, 1596.3125, 1596.3125, ..., 1596.3125, 1596.3125,
1596.3125],
...,
[1596.3125, 1596.3125, 1596.3125, ..., 1596.3125, 1596.3125,
1596.3125],
[1596.3125, 1596.3125, 1596.3125, ..., 1596.3125, 1596.3125,
1596.3125],
[1596.3125, 1596.3125, 1596.3125, ..., 1596.3125, 1596.3125,
1596.3125]],
mask=[[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
...,
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False]],
fill_value=1e+20), masked_array(
data=[[1595.8125, 1595.8125, 1595.8125, ..., 1595.8125, 1595.8125,
1595.8125],
[1595.8125, 1595.8125, 1595.8125, ..., 1595.8125, 1595.8125,
1595.8125],
[1595.8125, 1595.8125, 1595.8125, ..., 1595.8125, 1595.8125,
1595.8125],
...,
[1595.8125, 1595.8125, 1595.8125, ..., 1595.8125, 1595.8125,
1595.8125],
[1595.8125, 1595.8125, 1595.8125, ..., 1595.8125, 1595.8125,
1595.8125],
[1595.8125, 1595.8125, 1595.8125, ..., 1595.8125, 1595.8125,
1595.8125]],
mask=[[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
...,
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False]],
fill_value=1e+20), masked_array(
data=[[1595.3125, 1595.3125, 1595.3125, ..., 1595.3125, 1595.3125,
1595.3125],
[1595.3125, 1595.3125, 1595.3125, ..., 1595.3125, 1595.3125,
1595.3125],
[1595.3125, 1595.3125, 1595.3125, ..., 1595.3125, 1595.3125,
1595.3125],
...,
[1595.3125, 1595.3125, 1595.3125, ..., 1595.3125, 1595.3125,
1595.3125],
[1595.3125, 1595.3125, 1595.3125, ..., 1595.3125, 1595.3125,
1595.3125],
[1595.3125, 1595.3125, 1595.3125, ..., 1595.3125, 1595.3125,
1595.3125]],
mask=[[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
...,
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False]],
fill_value=1e+20), masked_array(
data=[[1594.8125, 1594.8125, 1594.8125, ..., 1594.8125, 1594.8125,
1594.8125],
[1594.8125, 1594.8125, 1594.8125, ..., 1594.8125, 1594.8125,
1594.8125],
[1594.8125, 1594.8125, 1594.8125, ..., 1594.8125, 1594.8125,
1594.8125],
...,
[1594.8125, 1594.8125, 1594.8125, ..., 1594.8125, 1594.8125,
1594.8125],
[1594.8125, 1594.8125, 1594.8125, ..., 1594.8125, 1594.8125,
1594.8125],
[1594.8125, 1594.8125, 1594.8125, ..., 1594.8125, 1594.8125,
1594.8125]],
mask=[[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
...,
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False]],
fill_value=1e+20), masked_array(
data=[[1594.3125, 1594.3125, 1594.3125, ..., 1594.3125, 1594.3125,
1594.3125],
[1594.3125, 1594.3125, 1594.3125, ..., 1594.3125, 1594.3125,
1594.3125],
[1594.3125, 1594.3125, 1594.3125, ..., 1594.3125, 1594.3125,
1594.3125],
...,
[1594.3125, 1594.3125, 1594.3125, ..., 1594.3125, 1594.3125,
1594.3125],
[1594.3125, 1594.3125, 1594.3125, ..., 1594.3125, 1594.3125,
1594.3125],
[1594.3125, 1594.3125, 1594.3125, ..., 1594.3125, 1594.3125,
1594.3125]],
mask=[[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
...,
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False]],
fill_value=1e+20), masked_array(
data=[[1593.8125, 1593.8125, 1593.8125, ..., 1593.8125, 1593.8125,
1593.8125],
[1593.8125, 1593.8125, 1593.8125, ..., 1593.8125, 1593.8125,
1593.8125],
[1593.8125, 1593.8125, 1593.8125, ..., 1593.8125, 1593.8125,
1593.8125],
...,
[1593.8125, 1593.8125, 1593.8125, ..., 1593.8125, 1593.8125,
1593.8125],
[1593.8125, 1593.8125, 1593.8125, ..., 1593.8125, 1593.8125,
1593.8125],
[1593.8125, 1593.8125, 1593.8125, ..., 1593.8125, 1593.8125,
1593.8125]],
mask=[[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
...,
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False]],
fill_value=1e+20), masked_array(
data=[[1593.3125, 1593.3125, 1593.3125, ..., 1593.3125, 1593.3125,
1593.3125],
[1593.3125, 1593.3125, 1593.3125, ..., 1593.3125, 1593.3125,
1593.3125],
[1593.3125, 1593.3125, 1593.3125, ..., 1593.3125, 1593.3125,
1593.3125],
...,
[1593.3125, 1593.3125, 1593.3125, ..., 1593.3125, 1593.3125,
1593.3125],
[1593.3125, 1593.3125, 1593.3125, ..., 1593.3125, 1593.3125,
1593.3125],
[1593.3125, 1593.3125, 1593.3125, ..., 1593.3125, 1593.3125,
1593.3125]],
mask=[[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
...,
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False]],
fill_value=1e+20), masked_array(
data=[[1592.8125, 1592.8125, 1592.8125, ..., 1592.8125, 1592.8125,
1592.8125],
[1592.8125, 1592.8125, 1592.8125, ..., 1592.8125, 1592.8125,
1592.8125],
[1592.8125, 1592.8125, 1592.8125, ..., 1592.8125, 1592.8125,
1592.8125],
...,
[1592.8125, 1592.8125, 1592.8125, ..., 1592.8125, 1592.8125,
1592.8125],
[1592.8125, 1592.8125, 1592.8125, ..., 1592.8125, 1592.8125,
1592.8125],
[1592.8125, 1592.8125, 1592.8125, ..., 1592.8125, 1592.8125,
1592.8125]],
mask=[[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
...,
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False]],
fill_value=1e+20), masked_array(
data=[[1592.3125, 1592.3125, 1592.3125, ..., 1592.3125, 1592.3125,
1592.3125],
[1592.3125, 1592.3125, 1592.3125, ..., 1592.3125, 1592.3125,
1592.3125],
[1592.3125, 1592.3125, 1592.3125, ..., 1592.3125, 1592.3125,
1592.3125],
...,
[1592.3125, 1592.3125, 1592.3125, ..., 1592.3125, 1592.3125,
1592.3125],
[1592.3125, 1592.3125, 1592.3125, ..., 1592.3125, 1592.3125,
1592.3125],
[1592.3125, 1592.3125, 1592.3125, ..., 1592.3125, 1592.3125,
1592.3125]],
mask=[[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
...,
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False]],
fill_value=1e+20), masked_array(
data=[[1591.8125, 1591.8125, 1591.8125, ..., 1591.8125, 1591.8125,
1591.8125],
[1591.8125, 1591.8125, 1591.8125, ..., 1591.8125, 1591.8125,
1591.8125],
[1591.8125, 1591.8125, 1591.8125, ..., 1591.8125, 1591.8125,
1591.8125],
...,
[1591.8125, 1591.8125, 1591.8125, ..., 1591.8125, 1591.8125,
1591.8125],
[1591.8125, 1591.8125, 1591.8125, ..., 1591.8125, 1591.8125,
1591.8125],
[1591.8125, 1591.8125, 1591.8125, ..., 1591.8125, 1591.8125,
1591.8125]],
mask=[[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
...,
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False]],
fill_value=1e+20), masked_array(
data=[[1591.3125, 1591.3125, 1591.3125, ..., 1591.3125, 1591.3125,
1591.3125],
[1591.3125, 1591.3125, 1591.3125, ..., 1591.3125, 1591.3125,
1591.3125],
[1591.3125, 1591.3125, 1591.3125, ..., 1591.3125, 1591.3125,
1591.3125],
...,
[1591.3125, 1591.3125, 1591.3125, ..., 1591.3125, 1591.3125,
1591.3125],
[1591.3125, 1591.3125, 1591.3125, ..., 1591.3125, 1591.3125,
1591.3125],
[1591.3125, 1591.3125, 1591.3125, ..., 1591.3125, 1591.3125,
1591.3125]],
mask=[[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
...,
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False]],
fill_value=1e+20), masked_array(
data=[[1590.8125, 1590.8125, 1590.8125, ..., 1590.8125, 1590.8125,
1590.8125],
[1590.8125, 1590.8125, 1590.8125, ..., 1590.8125, 1590.8125,
1590.8125],
[1590.8125, 1590.8125, 1590.8125, ..., 1590.8125, 1590.8125,
1590.8125],
...,
[1590.8125, 1590.8125, 1590.8125, ..., 1590.8125, 1590.8125,
1590.8125],
[1590.8125, 1590.8125, 1590.8125, ..., 1590.8125, 1590.8125,
1590.8125],
[1590.8125, 1590.8125, 1590.8125, ..., 1590.8125, 1590.8125,
1590.8125]],
mask=[[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
...,
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False]],
fill_value=1e+20), masked_array(
data=[[1590.3125, 1590.3125, 1590.3125, ..., 1590.3125, 1590.3125,
1590.3125],
[1590.3125, 1590.3125, 1590.3125, ..., 1590.3125, 1590.3125,
1590.3125],
[1590.3125, 1590.3125, 1590.3125, ..., 1590.3125, 1590.3125,
1590.3125],
...,
[1590.3125, 1590.3125, 1590.3125, ..., 1590.3125, 1590.3125,
1590.3125],
[1590.3125, 1590.3125, 1590.3125, ..., 1590.3125, 1590.3125,
1590.3125],
[1590.3125, 1590.3125, 1590.3125, ..., 1590.3125, 1590.3125,
1590.3125]],
mask=[[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
...,
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False]],
fill_value=1e+20), masked_array(
data=[[1589.8125, 1589.8125, 1589.8125, ..., 1589.8125, 1589.8125,
1589.8125],
[1589.8125, 1589.8125, 1589.8125, ..., 1589.8125, 1589.8125,
1589.8125],
[1589.8125, 1589.8125, 1589.8125, ..., 1589.8125, 1589.8125,
1589.8125],
...,
[1589.8125, 1589.8125, 1589.8125, ..., 1589.8125, 1589.8125,
1589.8125],
[1589.8125, 1589.8125, 1589.8125, ..., 1589.8125, 1589.8125,
1589.8125],
[1589.8125, 1589.8125, 1589.8125, ..., 1589.8125, 1589.8125,
1589.8125]],
mask=[[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
...,
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False]],
fill_value=1e+20), masked_array(
data=[[1589.3125, 1589.3125, 1589.3125, ..., 1589.3125, 1589.3125,
1589.3125],
[1589.3125, 1589.3125, 1589.3125, ..., 1589.3125, 1589.3125,
1589.3125],
[1589.3125, 1589.3125, 1589.3125, ..., 1589.3125, 1589.3125,
1589.3125],
...,
[1589.3125, 1589.3125, 1589.3125, ..., 1589.3125, 1589.3125,
1589.3125],
[1589.3125, 1589.3125, 1589.3125, ..., 1589.3125, 1589.3125,
1589.3125],
[1589.3125, 1589.3125, 1589.3125, ..., 1589.3125, 1589.3125,
1589.3125]],
mask=[[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
...,
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False]],
fill_value=1e+20), masked_array(
data=[[1588.8125, 1588.8125, 1588.8125, ..., 1588.8125, 1588.8125,
1588.8125],
[1588.8125, 1588.8125, 1588.8125, ..., 1588.8125, 1588.8125,
1588.8125],
[1588.8125, 1588.8125, 1588.8125, ..., 1588.8125, 1588.8125,
1588.8125],
...,
[1588.8125, 1588.8125, 1588.8125, ..., 1588.8125, 1588.8125,
1588.8125],
[1588.8125, 1588.8125, 1588.8125, ..., 1588.8125, 1588.8125,
1588.8125],
[1588.8125, 1588.8125, 1588.8125, ..., 1588.8125, 1588.8125,
1588.8125]],
mask=[[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
...,
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False]],
fill_value=1e+20), masked_array(
data=[[1588.3125, 1588.3125, 1588.3125, ..., 1588.3125, 1588.3125,
1588.3125],
[1588.3125, 1588.3125, 1588.3125, ..., 1588.3125, 1588.3125,
1588.3125],
[1588.3125, 1588.3125, 1588.3125, ..., 1588.3125, 1588.3125,
1588.3125],
...,
[1588.3125, 1588.3125, 1588.3125, ..., 1588.3125, 1588.3125,
1588.3125],
[1588.3125, 1588.3125, 1588.3125, ..., 1588.3125, 1588.3125,
1588.3125],
[1588.3125, 1588.3125, 1588.3125, ..., 1588.3125, 1588.3125,
1588.3125]],
mask=[[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
...,
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False]],
fill_value=1e+20), masked_array(
data=[[1587.8125, 1587.8125, 1587.8125, ..., 1587.8125, 1587.8125,
1587.8125],
[1587.8125, 1587.8125, 1587.8125, ..., 1587.8125, 1587.8125,
1587.8125],
[1587.8125, 1587.8125, 1587.8125, ..., 1587.8125, 1587.8125,
1587.8125],
...,
[1587.8125, 1587.8125, 1587.8125, ..., 1587.8125, 1587.8125,
1587.8125],
[1587.8125, 1587.8125, 1587.8125, ..., 1587.8125, 1587.8125,
1587.8125],
[1587.8125, 1587.8125, 1587.8125, ..., 1587.8125, 1587.8125,
1587.8125]],
mask=[[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
...,
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False]],
fill_value=1e+20), masked_array(
data=[[1587.3125, 1587.3125, 1587.3125, ..., 1587.3125, 1587.3125,
1587.3125],
[1587.3125, 1587.3125, 1587.3125, ..., 1587.3125, 1587.3125,
1587.3125],
[1587.3125, 1587.3125, 1587.3125, ..., 1587.3125, 1587.3125,
1587.3125],
...,
[1587.3125, 1587.3125, 1587.3125, ..., 1587.3125, 1587.3125,
1587.3125],
[1587.3125, 1587.3125, 1587.3125, ..., 1587.3125, 1587.3125,
1587.3125],
[1587.3125, 1587.3125, 1587.3125, ..., 1587.3125, 1587.3125,
1587.3125]],
mask=[[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
...,
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False]],
fill_value=1e+20), masked_array(
data=[[1586.8125, 1586.8125, 1586.8125, ..., 1586.8125, 1586.8125,
1586.8125],
[1586.8125, 1586.8125, 1586.8125, ..., 1586.8125, 1586.8125,
1586.8125],
[1586.8125, 1586.8125, 1586.8125, ..., 1586.8125, 1586.8125,
1586.8125],
...,
[1586.8125, 1586.8125, 1586.8125, ..., 1586.8125, 1586.8125,
1586.8125],
[1586.8125, 1586.8125, 1586.8125, ..., 1586.8125, 1586.8125,
1586.8125],
[1586.8125, 1586.8125, 1586.8125, ..., 1586.8125, 1586.8125,
1586.8125]],
mask=[[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
...,
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False]],
fill_value=1e+20), masked_array(
data=[[1586.3125, 1586.3125, 1586.3125, ..., 1586.3125, 1586.3125,
1586.3125],
[1586.3125, 1586.3125, 1586.3125, ..., 1586.3125, 1586.3125,
1586.3125],
[1586.3125, 1586.3125, 1586.3125, ..., 1586.3125, 1586.3125,
1586.3125],
...,
[1586.3125, 1586.3125, 1586.3125, ..., 1586.3125, 1586.3125,
1586.3125],
[1586.3125, 1586.3125, 1586.3125, ..., 1586.3125, 1586.3125,
1586.3125],
[1586.3125, 1586.3125, 1586.3125, ..., 1586.3125, 1586.3125,
1586.3125]],
mask=[[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
...,
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False]],
fill_value=1e+20), masked_array(
data=[[1585.8125, 1585.8125, 1585.8125, ..., 1585.8125, 1585.8125,
1585.8125],
[1585.8125, 1585.8125, 1585.8125, ..., 1585.8125, 1585.8125,
1585.8125],
[1585.8125, 1585.8125, 1585.8125, ..., 1585.8125, 1585.8125,
1585.8125],
...,
[1585.8125, 1585.8125, 1585.8125, ..., 1585.8125, 1585.8125,
1585.8125],
[1585.8125, 1585.8125, 1585.8125, ..., 1585.8125, 1585.8125,
1585.8125],
[1585.8125, 1585.8125, 1585.8125, ..., 1585.8125, 1585.8125,
1585.8125]],
mask=[[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
...,
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False]],
fill_value=1e+20), masked_array(
data=[[1585.3125, 1585.3125, 1585.3125, ..., 1585.3125, 1585.3125,
1585.3125],
[1585.3125, 1585.3125, 1585.3125, ..., 1585.3125, 1585.3125,
1585.3125],
[1585.3125, 1585.3125, 1585.3125, ..., 1585.3125, 1585.3125,
1585.3125],
...,
[1585.3125, 1585.3125, 1585.3125, ..., 1585.3125, 1585.3125,
1585.3125],
[1585.3125, 1585.3125, 1585.3125, ..., 1585.3125, 1585.3125,
1585.3125],
[1585.3125, 1585.3125, 1585.3125, ..., 1585.3125, 1585.3125,
1585.3125]],
mask=[[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
...,
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False]],
fill_value=1e+20), masked_array(
data=[[1584.8125, 1584.8125, 1584.8125, ..., 1584.8125, 1584.8125,
1584.8125],
[1584.8125, 1584.8125, 1584.8125, ..., 1584.8125, 1584.8125,
1584.8125],
[1584.8125, 1584.8125, 1584.8125, ..., 1584.8125, 1584.8125,
1584.8125],
...,
[1584.8125, 1584.8125, 1584.8125, ..., 1584.8125, 1584.8125,
1584.8125],
[1584.8125, 1584.8125, 1584.8125, ..., 1584.8125, 1584.8125,
1584.8125],
[1584.8125, 1584.8125, 1584.8125, ..., 1584.8125, 1584.8125,
1584.8125]],
mask=[[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
...,
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False]],
fill_value=1e+20), masked_array(
data=[[1584.3125, 1584.3125, 1584.3125, ..., 1584.3125, 1584.3125,
1584.3125],
[1584.3125, 1584.3125, 1584.3125, ..., 1584.3125, 1584.3125,
1584.3125],
[1584.3125, 1584.3125, 1584.3125, ..., 1584.3125, 1584.3125,
1584.3125],
...,
[1584.3125, 1584.3125, 1584.3125, ..., 1584.3125, 1584.3125,
1584.3125],
[1584.3125, 1584.3125, 1584.3125, ..., 1584.3125, 1584.3125,
1584.3125],
[1584.3125, 1584.3125, 1584.3125, ..., 1584.3125, 1584.3125,
1584.3125]],
mask=[[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
...,
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False]],
fill_value=1e+20), masked_array(
data=[[1583.8125, 1583.8125, 1583.8125, ..., 1583.8125, 1583.8125,
1583.8125],
[1583.8125, 1583.8125, 1583.8125, ..., 1583.8125, 1583.8125,
1583.8125],
[1583.8125, 1583.8125, 1583.8125, ..., 1583.8125, 1583.8125,
1583.8125],
...,
[1583.8125, 1583.8125, 1583.8125, ..., 1583.8125, 1583.8125,
1583.8125],
[1583.8125, 1583.8125, 1583.8125, ..., 1583.8125, 1583.8125,
1583.8125],
[1583.8125, 1583.8125, 1583.8125, ..., 1583.8125, 1583.8125,
1583.8125]],
mask=[[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
...,
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False]],
fill_value=1e+20), masked_array(
data=[[1583.3125, 1583.3125, 1583.3125, ..., 1583.3125, 1583.3125,
1583.3125],
[1583.3125, 1583.3125, 1583.3125, ..., 1583.3125, 1583.3125,
1583.3125],
[1583.3125, 1583.3125, 1583.3125, ..., 1583.3125, 1583.3125,
1583.3125],
...,
[1583.3125, 1583.3125, 1583.3125, ..., 1583.3125, 1583.3125,
1583.3125],
[1583.3125, 1583.3125, 1583.3125, ..., 1583.3125, 1583.3125,
1583.3125],
[1583.3125, 1583.3125, 1583.3125, ..., 1583.3125, 1583.3125,
1583.3125]],
mask=[[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
...,
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False]],
fill_value=1e+20), masked_array(
data=[[1582.8125, 1582.8125, 1582.8125, ..., 1582.8125, 1582.8125,
1582.8125],
[1582.8125, 1582.8125, 1582.8125, ..., 1582.8125, 1582.8125,
1582.8125],
[1582.8125, 1582.8125, 1582.8125, ..., 1582.8125, 1582.8125,
1582.8125],
...,
[1582.8125, 1582.8125, 1582.8125, ..., 1582.8125, 1582.8125,
1582.8125],
[1582.8125, 1582.8125, 1582.8125, ..., 1582.8125, 1582.8125,
1582.8125],
[1582.8125, 1582.8125, 1582.8125, ..., 1582.8125, 1582.8125,
1582.8125]],
mask=[[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
...,
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False]],
fill_value=1e+20), masked_array(
data=[[1582.3125, 1582.3125, 1582.3125, ..., 1582.3125, 1582.3125,
1582.3125],
[1582.3125, 1582.3125, 1582.3125, ..., 1582.3125, 1582.3125,
1582.3125],
[1582.3125, 1582.3125, 1582.3125, ..., 1582.3125, 1582.3125,
1582.3125],
...,
[1582.3125, 1582.3125, 1582.3125, ..., 1582.3125, 1582.3125,
1582.3125],
[1582.3125, 1582.3125, 1582.3125, ..., 1582.3125, 1582.3125,
1582.3125],
[1582.3125, 1582.3125, 1582.3125, ..., 1582.3125, 1582.3125,
1582.3125]],
mask=[[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
...,
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False]],
fill_value=1e+20), masked_array(
data=[[1581.8125, 1581.8125, 1581.8125, ..., 1581.8125, 1581.8125,
1581.8125],
[1581.8125, 1581.8125, 1581.8125, ..., 1581.8125, 1581.8125,
1581.8125],
[1581.8125, 1581.8125, 1581.8125, ..., 1581.8125, 1581.8125,
1581.8125],
...,
[1581.8125, 1581.8125, 1581.8125, ..., 1581.8125, 1581.8125,
1581.8125],
[1581.8125, 1581.8125, 1581.8125, ..., 1581.8125, 1581.8125,
1581.8125],
[1581.8125, 1581.8125, 1581.8125, ..., 1581.8125, 1581.8125,
1581.8125]],
mask=[[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
...,
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False]],
fill_value=1e+20), masked_array(
data=[[1581.3125, 1581.3125, 1581.3125, ..., 1581.3125, 1581.3125,
1581.3125],
[1581.3125, 1581.3125, 1581.3125, ..., 1581.3125, 1581.3125,
1581.3125],
[1581.3125, 1581.3125, 1581.3125, ..., 1581.3125, 1581.3125,
1581.3125],
...,
[1581.3125, 1581.3125, 1581.3125, ..., 1581.3125, 1581.3125,
1581.3125],
[1581.3125, 1581.3125, 1581.3125, ..., 1581.3125, 1581.3125,
1581.3125],
[1581.3125, 1581.3125, 1581.3125, ..., 1581.3125, 1581.3125,
1581.3125]],
mask=[[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
...,
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False]],
fill_value=1e+20), masked_array(
data=[[1580.8125, 1580.8125, 1580.8125, ..., 1580.8125, 1580.8125,
1580.8125],
[1580.8125, 1580.8125, 1580.8125, ..., 1580.8125, 1580.8125,
1580.8125],
[1580.8125, 1580.8125, 1580.8125, ..., 1580.8125, 1580.8125,
1580.8125],
...,
[1580.8125, 1580.8125, 1580.8125, ..., 1580.8125, 1580.8125,
1580.8125],
[1580.8125, 1580.8125, 1580.8125, ..., 1580.8125, 1580.8125,
1580.8125],
[1580.8125, 1580.8125, 1580.8125, ..., 1580.8125, 1580.8125,
1580.8125]],
mask=[[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
...,
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False]],
fill_value=1e+20)], botm=[masked_array(
data=[[1599.8125, 1599.8125, 1599.8125, ..., 1599.8125, 1599.8125,
1599.8125],
[1599.8125, 1599.8125, 1599.8125, ..., 1599.8125, 1599.8125,
1599.8125],
[1599.8125, 1599.8125, 1599.8125, ..., 1599.8125, 1599.8125,
1599.8125],
...,
[1599.8125, 1599.8125, 1599.8125, ..., 1599.8125, 1599.8125,
1599.8125],
[1599.8125, 1599.8125, 1599.8125, ..., 1599.8125, 1599.8125,
1599.8125],
[1599.8125, 1599.8125, 1599.8125, ..., 1599.8125, 1599.8125,
1599.8125]],
mask=[[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
...,
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False]],
fill_value=1e+20), masked_array(
data=[[1599.3125, 1599.3125, 1599.3125, ..., 1599.3125, 1599.3125,
1599.3125],
[1599.3125, 1599.3125, 1599.3125, ..., 1599.3125, 1599.3125,
1599.3125],
[1599.3125, 1599.3125, 1599.3125, ..., 1599.3125, 1599.3125,
1599.3125],
...,
[1599.3125, 1599.3125, 1599.3125, ..., 1599.3125, 1599.3125,
1599.3125],
[1599.3125, 1599.3125, 1599.3125, ..., 1599.3125, 1599.3125,
1599.3125],
[1599.3125, 1599.3125, 1599.3125, ..., 1599.3125, 1599.3125,
1599.3125]],
mask=[[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
...,
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False]],
fill_value=1e+20), masked_array(
data=[[1598.8125, 1598.8125, 1598.8125, ..., 1598.8125, 1598.8125,
1598.8125],
[1598.8125, 1598.8125, 1598.8125, ..., 1598.8125, 1598.8125,
1598.8125],
[1598.8125, 1598.8125, 1598.8125, ..., 1598.8125, 1598.8125,
1598.8125],
...,
[1598.8125, 1598.8125, 1598.8125, ..., 1598.8125, 1598.8125,
1598.8125],
[1598.8125, 1598.8125, 1598.8125, ..., 1598.8125, 1598.8125,
1598.8125],
[1598.8125, 1598.8125, 1598.8125, ..., 1598.8125, 1598.8125,
1598.8125]],
mask=[[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
...,
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False]],
fill_value=1e+20), masked_array(
data=[[1598.3125, 1598.3125, 1598.3125, ..., 1598.3125, 1598.3125,
1598.3125],
[1598.3125, 1598.3125, 1598.3125, ..., 1598.3125, 1598.3125,
1598.3125],
[1598.3125, 1598.3125, 1598.3125, ..., 1598.3125, 1598.3125,
1598.3125],
...,
[1598.3125, 1598.3125, 1598.3125, ..., 1598.3125, 1598.3125,
1598.3125],
[1598.3125, 1598.3125, 1598.3125, ..., 1598.3125, 1598.3125,
1598.3125],
[1598.3125, 1598.3125, 1598.3125, ..., 1598.3125, 1598.3125,
1598.3125]],
mask=[[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
...,
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False]],
fill_value=1e+20), masked_array(
data=[[1597.8125, 1597.8125, 1597.8125, ..., 1597.8125, 1597.8125,
1597.8125],
[1597.8125, 1597.8125, 1597.8125, ..., 1597.8125, 1597.8125,
1597.8125],
[1597.8125, 1597.8125, 1597.8125, ..., 1597.8125, 1597.8125,
1597.8125],
...,
[1597.8125, 1597.8125, 1597.8125, ..., 1597.8125, 1597.8125,
1597.8125],
[1597.8125, 1597.8125, 1597.8125, ..., 1597.8125, 1597.8125,
1597.8125],
[1597.8125, 1597.8125, 1597.8125, ..., 1597.8125, 1597.8125,
1597.8125]],
mask=[[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
...,
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False]],
fill_value=1e+20), masked_array(
data=[[1597.3125, 1597.3125, 1597.3125, ..., 1597.3125, 1597.3125,
1597.3125],
[1597.3125, 1597.3125, 1597.3125, ..., 1597.3125, 1597.3125,
1597.3125],
[1597.3125, 1597.3125, 1597.3125, ..., 1597.3125, 1597.3125,
1597.3125],
...,
[1597.3125, 1597.3125, 1597.3125, ..., 1597.3125, 1597.3125,
1597.3125],
[1597.3125, 1597.3125, 1597.3125, ..., 1597.3125, 1597.3125,
1597.3125],
[1597.3125, 1597.3125, 1597.3125, ..., 1597.3125, 1597.3125,
1597.3125]],
mask=[[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
...,
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False]],
fill_value=1e+20), masked_array(
data=[[1596.8125, 1596.8125, 1596.8125, ..., 1596.8125, 1596.8125,
1596.8125],
[1596.8125, 1596.8125, 1596.8125, ..., 1596.8125, 1596.8125,
1596.8125],
[1596.8125, 1596.8125, 1596.8125, ..., 1596.8125, 1596.8125,
1596.8125],
...,
[1596.8125, 1596.8125, 1596.8125, ..., 1596.8125, 1596.8125,
1596.8125],
[1596.8125, 1596.8125, 1596.8125, ..., 1596.8125, 1596.8125,
1596.8125],
[1596.8125, 1596.8125, 1596.8125, ..., 1596.8125, 1596.8125,
1596.8125]],
mask=[[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
...,
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False]],
fill_value=1e+20), masked_array(
data=[[1596.3125, 1596.3125, 1596.3125, ..., 1596.3125, 1596.3125,
1596.3125],
[1596.3125, 1596.3125, 1596.3125, ..., 1596.3125, 1596.3125,
1596.3125],
[1596.3125, 1596.3125, 1596.3125, ..., 1596.3125, 1596.3125,
1596.3125],
...,
[1596.3125, 1596.3125, 1596.3125, ..., 1596.3125, 1596.3125,
1596.3125],
[1596.3125, 1596.3125, 1596.3125, ..., 1596.3125, 1596.3125,
1596.3125],
[1596.3125, 1596.3125, 1596.3125, ..., 1596.3125, 1596.3125,
1596.3125]],
mask=[[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
...,
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False]],
fill_value=1e+20), masked_array(
data=[[1595.8125, 1595.8125, 1595.8125, ..., 1595.8125, 1595.8125,
1595.8125],
[1595.8125, 1595.8125, 1595.8125, ..., 1595.8125, 1595.8125,
1595.8125],
[1595.8125, 1595.8125, 1595.8125, ..., 1595.8125, 1595.8125,
1595.8125],
...,
[1595.8125, 1595.8125, 1595.8125, ..., 1595.8125, 1595.8125,
1595.8125],
[1595.8125, 1595.8125, 1595.8125, ..., 1595.8125, 1595.8125,
1595.8125],
[1595.8125, 1595.8125, 1595.8125, ..., 1595.8125, 1595.8125,
1595.8125]],
mask=[[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
...,
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False]],
fill_value=1e+20), masked_array(
data=[[1595.3125, 1595.3125, 1595.3125, ..., 1595.3125, 1595.3125,
1595.3125],
[1595.3125, 1595.3125, 1595.3125, ..., 1595.3125, 1595.3125,
1595.3125],
[1595.3125, 1595.3125, 1595.3125, ..., 1595.3125, 1595.3125,
1595.3125],
...,
[1595.3125, 1595.3125, 1595.3125, ..., 1595.3125, 1595.3125,
1595.3125],
[1595.3125, 1595.3125, 1595.3125, ..., 1595.3125, 1595.3125,
1595.3125],
[1595.3125, 1595.3125, 1595.3125, ..., 1595.3125, 1595.3125,
1595.3125]],
mask=[[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
...,
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False]],
fill_value=1e+20), masked_array(
data=[[1594.8125, 1594.8125, 1594.8125, ..., 1594.8125, 1594.8125,
1594.8125],
[1594.8125, 1594.8125, 1594.8125, ..., 1594.8125, 1594.8125,
1594.8125],
[1594.8125, 1594.8125, 1594.8125, ..., 1594.8125, 1594.8125,
1594.8125],
...,
[1594.8125, 1594.8125, 1594.8125, ..., 1594.8125, 1594.8125,
1594.8125],
[1594.8125, 1594.8125, 1594.8125, ..., 1594.8125, 1594.8125,
1594.8125],
[1594.8125, 1594.8125, 1594.8125, ..., 1594.8125, 1594.8125,
1594.8125]],
mask=[[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
...,
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False]],
fill_value=1e+20), masked_array(
data=[[1594.3125, 1594.3125, 1594.3125, ..., 1594.3125, 1594.3125,
1594.3125],
[1594.3125, 1594.3125, 1594.3125, ..., 1594.3125, 1594.3125,
1594.3125],
[1594.3125, 1594.3125, 1594.3125, ..., 1594.3125, 1594.3125,
1594.3125],
...,
[1594.3125, 1594.3125, 1594.3125, ..., 1594.3125, 1594.3125,
1594.3125],
[1594.3125, 1594.3125, 1594.3125, ..., 1594.3125, 1594.3125,
1594.3125],
[1594.3125, 1594.3125, 1594.3125, ..., 1594.3125, 1594.3125,
1594.3125]],
mask=[[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
...,
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False]],
fill_value=1e+20), masked_array(
data=[[1593.8125, 1593.8125, 1593.8125, ..., 1593.8125, 1593.8125,
1593.8125],
[1593.8125, 1593.8125, 1593.8125, ..., 1593.8125, 1593.8125,
1593.8125],
[1593.8125, 1593.8125, 1593.8125, ..., 1593.8125, 1593.8125,
1593.8125],
...,
[1593.8125, 1593.8125, 1593.8125, ..., 1593.8125, 1593.8125,
1593.8125],
[1593.8125, 1593.8125, 1593.8125, ..., 1593.8125, 1593.8125,
1593.8125],
[1593.8125, 1593.8125, 1593.8125, ..., 1593.8125, 1593.8125,
1593.8125]],
mask=[[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
...,
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False]],
fill_value=1e+20), masked_array(
data=[[1593.3125, 1593.3125, 1593.3125, ..., 1593.3125, 1593.3125,
1593.3125],
[1593.3125, 1593.3125, 1593.3125, ..., 1593.3125, 1593.3125,
1593.3125],
[1593.3125, 1593.3125, 1593.3125, ..., 1593.3125, 1593.3125,
1593.3125],
...,
[1593.3125, 1593.3125, 1593.3125, ..., 1593.3125, 1593.3125,
1593.3125],
[1593.3125, 1593.3125, 1593.3125, ..., 1593.3125, 1593.3125,
1593.3125],
[1593.3125, 1593.3125, 1593.3125, ..., 1593.3125, 1593.3125,
1593.3125]],
mask=[[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
...,
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False]],
fill_value=1e+20), masked_array(
data=[[1592.8125, 1592.8125, 1592.8125, ..., 1592.8125, 1592.8125,
1592.8125],
[1592.8125, 1592.8125, 1592.8125, ..., 1592.8125, 1592.8125,
1592.8125],
[1592.8125, 1592.8125, 1592.8125, ..., 1592.8125, 1592.8125,
1592.8125],
...,
[1592.8125, 1592.8125, 1592.8125, ..., 1592.8125, 1592.8125,
1592.8125],
[1592.8125, 1592.8125, 1592.8125, ..., 1592.8125, 1592.8125,
1592.8125],
[1592.8125, 1592.8125, 1592.8125, ..., 1592.8125, 1592.8125,
1592.8125]],
mask=[[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
...,
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False]],
fill_value=1e+20), masked_array(
data=[[1592.3125, 1592.3125, 1592.3125, ..., 1592.3125, 1592.3125,
1592.3125],
[1592.3125, 1592.3125, 1592.3125, ..., 1592.3125, 1592.3125,
1592.3125],
[1592.3125, 1592.3125, 1592.3125, ..., 1592.3125, 1592.3125,
1592.3125],
...,
[1592.3125, 1592.3125, 1592.3125, ..., 1592.3125, 1592.3125,
1592.3125],
[1592.3125, 1592.3125, 1592.3125, ..., 1592.3125, 1592.3125,
1592.3125],
[1592.3125, 1592.3125, 1592.3125, ..., 1592.3125, 1592.3125,
1592.3125]],
mask=[[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
...,
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False]],
fill_value=1e+20), masked_array(
data=[[1591.8125, 1591.8125, 1591.8125, ..., 1591.8125, 1591.8125,
1591.8125],
[1591.8125, 1591.8125, 1591.8125, ..., 1591.8125, 1591.8125,
1591.8125],
[1591.8125, 1591.8125, 1591.8125, ..., 1591.8125, 1591.8125,
1591.8125],
...,
[1591.8125, 1591.8125, 1591.8125, ..., 1591.8125, 1591.8125,
1591.8125],
[1591.8125, 1591.8125, 1591.8125, ..., 1591.8125, 1591.8125,
1591.8125],
[1591.8125, 1591.8125, 1591.8125, ..., 1591.8125, 1591.8125,
1591.8125]],
mask=[[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
...,
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False]],
fill_value=1e+20), masked_array(
data=[[1591.3125, 1591.3125, 1591.3125, ..., 1591.3125, 1591.3125,
1591.3125],
[1591.3125, 1591.3125, 1591.3125, ..., 1591.3125, 1591.3125,
1591.3125],
[1591.3125, 1591.3125, 1591.3125, ..., 1591.3125, 1591.3125,
1591.3125],
...,
[1591.3125, 1591.3125, 1591.3125, ..., 1591.3125, 1591.3125,
1591.3125],
[1591.3125, 1591.3125, 1591.3125, ..., 1591.3125, 1591.3125,
1591.3125],
[1591.3125, 1591.3125, 1591.3125, ..., 1591.3125, 1591.3125,
1591.3125]],
mask=[[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
...,
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False]],
fill_value=1e+20), masked_array(
data=[[1590.8125, 1590.8125, 1590.8125, ..., 1590.8125, 1590.8125,
1590.8125],
[1590.8125, 1590.8125, 1590.8125, ..., 1590.8125, 1590.8125,
1590.8125],
[1590.8125, 1590.8125, 1590.8125, ..., 1590.8125, 1590.8125,
1590.8125],
...,
[1590.8125, 1590.8125, 1590.8125, ..., 1590.8125, 1590.8125,
1590.8125],
[1590.8125, 1590.8125, 1590.8125, ..., 1590.8125, 1590.8125,
1590.8125],
[1590.8125, 1590.8125, 1590.8125, ..., 1590.8125, 1590.8125,
1590.8125]],
mask=[[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
...,
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False]],
fill_value=1e+20), masked_array(
data=[[1590.3125, 1590.3125, 1590.3125, ..., 1590.3125, 1590.3125,
1590.3125],
[1590.3125, 1590.3125, 1590.3125, ..., 1590.3125, 1590.3125,
1590.3125],
[1590.3125, 1590.3125, 1590.3125, ..., 1590.3125, 1590.3125,
1590.3125],
...,
[1590.3125, 1590.3125, 1590.3125, ..., 1590.3125, 1590.3125,
1590.3125],
[1590.3125, 1590.3125, 1590.3125, ..., 1590.3125, 1590.3125,
1590.3125],
[1590.3125, 1590.3125, 1590.3125, ..., 1590.3125, 1590.3125,
1590.3125]],
mask=[[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
...,
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False]],
fill_value=1e+20), masked_array(
data=[[1589.8125, 1589.8125, 1589.8125, ..., 1589.8125, 1589.8125,
1589.8125],
[1589.8125, 1589.8125, 1589.8125, ..., 1589.8125, 1589.8125,
1589.8125],
[1589.8125, 1589.8125, 1589.8125, ..., 1589.8125, 1589.8125,
1589.8125],
...,
[1589.8125, 1589.8125, 1589.8125, ..., 1589.8125, 1589.8125,
1589.8125],
[1589.8125, 1589.8125, 1589.8125, ..., 1589.8125, 1589.8125,
1589.8125],
[1589.8125, 1589.8125, 1589.8125, ..., 1589.8125, 1589.8125,
1589.8125]],
mask=[[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
...,
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False]],
fill_value=1e+20), masked_array(
data=[[1589.3125, 1589.3125, 1589.3125, ..., 1589.3125, 1589.3125,
1589.3125],
[1589.3125, 1589.3125, 1589.3125, ..., 1589.3125, 1589.3125,
1589.3125],
[1589.3125, 1589.3125, 1589.3125, ..., 1589.3125, 1589.3125,
1589.3125],
...,
[1589.3125, 1589.3125, 1589.3125, ..., 1589.3125, 1589.3125,
1589.3125],
[1589.3125, 1589.3125, 1589.3125, ..., 1589.3125, 1589.3125,
1589.3125],
[1589.3125, 1589.3125, 1589.3125, ..., 1589.3125, 1589.3125,
1589.3125]],
mask=[[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
...,
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False]],
fill_value=1e+20), masked_array(
data=[[1588.8125, 1588.8125, 1588.8125, ..., 1588.8125, 1588.8125,
1588.8125],
[1588.8125, 1588.8125, 1588.8125, ..., 1588.8125, 1588.8125,
1588.8125],
[1588.8125, 1588.8125, 1588.8125, ..., 1588.8125, 1588.8125,
1588.8125],
...,
[1588.8125, 1588.8125, 1588.8125, ..., 1588.8125, 1588.8125,
1588.8125],
[1588.8125, 1588.8125, 1588.8125, ..., 1588.8125, 1588.8125,
1588.8125],
[1588.8125, 1588.8125, 1588.8125, ..., 1588.8125, 1588.8125,
1588.8125]],
mask=[[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
...,
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False]],
fill_value=1e+20), masked_array(
data=[[1588.3125, 1588.3125, 1588.3125, ..., 1588.3125, 1588.3125,
1588.3125],
[1588.3125, 1588.3125, 1588.3125, ..., 1588.3125, 1588.3125,
1588.3125],
[1588.3125, 1588.3125, 1588.3125, ..., 1588.3125, 1588.3125,
1588.3125],
...,
[1588.3125, 1588.3125, 1588.3125, ..., 1588.3125, 1588.3125,
1588.3125],
[1588.3125, 1588.3125, 1588.3125, ..., 1588.3125, 1588.3125,
1588.3125],
[1588.3125, 1588.3125, 1588.3125, ..., 1588.3125, 1588.3125,
1588.3125]],
mask=[[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
...,
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False]],
fill_value=1e+20), masked_array(
data=[[1587.8125, 1587.8125, 1587.8125, ..., 1587.8125, 1587.8125,
1587.8125],
[1587.8125, 1587.8125, 1587.8125, ..., 1587.8125, 1587.8125,
1587.8125],
[1587.8125, 1587.8125, 1587.8125, ..., 1587.8125, 1587.8125,
1587.8125],
...,
[1587.8125, 1587.8125, 1587.8125, ..., 1587.8125, 1587.8125,
1587.8125],
[1587.8125, 1587.8125, 1587.8125, ..., 1587.8125, 1587.8125,
1587.8125],
[1587.8125, 1587.8125, 1587.8125, ..., 1587.8125, 1587.8125,
1587.8125]],
mask=[[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
...,
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False]],
fill_value=1e+20), masked_array(
data=[[1587.3125, 1587.3125, 1587.3125, ..., 1587.3125, 1587.3125,
1587.3125],
[1587.3125, 1587.3125, 1587.3125, ..., 1587.3125, 1587.3125,
1587.3125],
[1587.3125, 1587.3125, 1587.3125, ..., 1587.3125, 1587.3125,
1587.3125],
...,
[1587.3125, 1587.3125, 1587.3125, ..., 1587.3125, 1587.3125,
1587.3125],
[1587.3125, 1587.3125, 1587.3125, ..., 1587.3125, 1587.3125,
1587.3125],
[1587.3125, 1587.3125, 1587.3125, ..., 1587.3125, 1587.3125,
1587.3125]],
mask=[[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
...,
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False]],
fill_value=1e+20), masked_array(
data=[[1586.8125, 1586.8125, 1586.8125, ..., 1586.8125, 1586.8125,
1586.8125],
[1586.8125, 1586.8125, 1586.8125, ..., 1586.8125, 1586.8125,
1586.8125],
[1586.8125, 1586.8125, 1586.8125, ..., 1586.8125, 1586.8125,
1586.8125],
...,
[1586.8125, 1586.8125, 1586.8125, ..., 1586.8125, 1586.8125,
1586.8125],
[1586.8125, 1586.8125, 1586.8125, ..., 1586.8125, 1586.8125,
1586.8125],
[1586.8125, 1586.8125, 1586.8125, ..., 1586.8125, 1586.8125,
1586.8125]],
mask=[[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
...,
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False]],
fill_value=1e+20), masked_array(
data=[[1586.3125, 1586.3125, 1586.3125, ..., 1586.3125, 1586.3125,
1586.3125],
[1586.3125, 1586.3125, 1586.3125, ..., 1586.3125, 1586.3125,
1586.3125],
[1586.3125, 1586.3125, 1586.3125, ..., 1586.3125, 1586.3125,
1586.3125],
...,
[1586.3125, 1586.3125, 1586.3125, ..., 1586.3125, 1586.3125,
1586.3125],
[1586.3125, 1586.3125, 1586.3125, ..., 1586.3125, 1586.3125,
1586.3125],
[1586.3125, 1586.3125, 1586.3125, ..., 1586.3125, 1586.3125,
1586.3125]],
mask=[[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
...,
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False]],
fill_value=1e+20), masked_array(
data=[[1585.8125, 1585.8125, 1585.8125, ..., 1585.8125, 1585.8125,
1585.8125],
[1585.8125, 1585.8125, 1585.8125, ..., 1585.8125, 1585.8125,
1585.8125],
[1585.8125, 1585.8125, 1585.8125, ..., 1585.8125, 1585.8125,
1585.8125],
...,
[1585.8125, 1585.8125, 1585.8125, ..., 1585.8125, 1585.8125,
1585.8125],
[1585.8125, 1585.8125, 1585.8125, ..., 1585.8125, 1585.8125,
1585.8125],
[1585.8125, 1585.8125, 1585.8125, ..., 1585.8125, 1585.8125,
1585.8125]],
mask=[[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
...,
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False]],
fill_value=1e+20), masked_array(
data=[[1585.3125, 1585.3125, 1585.3125, ..., 1585.3125, 1585.3125,
1585.3125],
[1585.3125, 1585.3125, 1585.3125, ..., 1585.3125, 1585.3125,
1585.3125],
[1585.3125, 1585.3125, 1585.3125, ..., 1585.3125, 1585.3125,
1585.3125],
...,
[1585.3125, 1585.3125, 1585.3125, ..., 1585.3125, 1585.3125,
1585.3125],
[1585.3125, 1585.3125, 1585.3125, ..., 1585.3125, 1585.3125,
1585.3125],
[1585.3125, 1585.3125, 1585.3125, ..., 1585.3125, 1585.3125,
1585.3125]],
mask=[[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
...,
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False]],
fill_value=1e+20), masked_array(
data=[[1584.8125, 1584.8125, 1584.8125, ..., 1584.8125, 1584.8125,
1584.8125],
[1584.8125, 1584.8125, 1584.8125, ..., 1584.8125, 1584.8125,
1584.8125],
[1584.8125, 1584.8125, 1584.8125, ..., 1584.8125, 1584.8125,
1584.8125],
...,
[1584.8125, 1584.8125, 1584.8125, ..., 1584.8125, 1584.8125,
1584.8125],
[1584.8125, 1584.8125, 1584.8125, ..., 1584.8125, 1584.8125,
1584.8125],
[1584.8125, 1584.8125, 1584.8125, ..., 1584.8125, 1584.8125,
1584.8125]],
mask=[[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
...,
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False]],
fill_value=1e+20), masked_array(
data=[[1584.3125, 1584.3125, 1584.3125, ..., 1584.3125, 1584.3125,
1584.3125],
[1584.3125, 1584.3125, 1584.3125, ..., 1584.3125, 1584.3125,
1584.3125],
[1584.3125, 1584.3125, 1584.3125, ..., 1584.3125, 1584.3125,
1584.3125],
...,
[1584.3125, 1584.3125, 1584.3125, ..., 1584.3125, 1584.3125,
1584.3125],
[1584.3125, 1584.3125, 1584.3125, ..., 1584.3125, 1584.3125,
1584.3125],
[1584.3125, 1584.3125, 1584.3125, ..., 1584.3125, 1584.3125,
1584.3125]],
mask=[[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
...,
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False]],
fill_value=1e+20), masked_array(
data=[[1583.8125, 1583.8125, 1583.8125, ..., 1583.8125, 1583.8125,
1583.8125],
[1583.8125, 1583.8125, 1583.8125, ..., 1583.8125, 1583.8125,
1583.8125],
[1583.8125, 1583.8125, 1583.8125, ..., 1583.8125, 1583.8125,
1583.8125],
...,
[1583.8125, 1583.8125, 1583.8125, ..., 1583.8125, 1583.8125,
1583.8125],
[1583.8125, 1583.8125, 1583.8125, ..., 1583.8125, 1583.8125,
1583.8125],
[1583.8125, 1583.8125, 1583.8125, ..., 1583.8125, 1583.8125,
1583.8125]],
mask=[[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
...,
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False]],
fill_value=1e+20), masked_array(
data=[[1583.3125, 1583.3125, 1583.3125, ..., 1583.3125, 1583.3125,
1583.3125],
[1583.3125, 1583.3125, 1583.3125, ..., 1583.3125, 1583.3125,
1583.3125],
[1583.3125, 1583.3125, 1583.3125, ..., 1583.3125, 1583.3125,
1583.3125],
...,
[1583.3125, 1583.3125, 1583.3125, ..., 1583.3125, 1583.3125,
1583.3125],
[1583.3125, 1583.3125, 1583.3125, ..., 1583.3125, 1583.3125,
1583.3125],
[1583.3125, 1583.3125, 1583.3125, ..., 1583.3125, 1583.3125,
1583.3125]],
mask=[[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
...,
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False]],
fill_value=1e+20), masked_array(
data=[[1582.8125, 1582.8125, 1582.8125, ..., 1582.8125, 1582.8125,
1582.8125],
[1582.8125, 1582.8125, 1582.8125, ..., 1582.8125, 1582.8125,
1582.8125],
[1582.8125, 1582.8125, 1582.8125, ..., 1582.8125, 1582.8125,
1582.8125],
...,
[1582.8125, 1582.8125, 1582.8125, ..., 1582.8125, 1582.8125,
1582.8125],
[1582.8125, 1582.8125, 1582.8125, ..., 1582.8125, 1582.8125,
1582.8125],
[1582.8125, 1582.8125, 1582.8125, ..., 1582.8125, 1582.8125,
1582.8125]],
mask=[[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
...,
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False]],
fill_value=1e+20), masked_array(
data=[[1582.3125, 1582.3125, 1582.3125, ..., 1582.3125, 1582.3125,
1582.3125],
[1582.3125, 1582.3125, 1582.3125, ..., 1582.3125, 1582.3125,
1582.3125],
[1582.3125, 1582.3125, 1582.3125, ..., 1582.3125, 1582.3125,
1582.3125],
...,
[1582.3125, 1582.3125, 1582.3125, ..., 1582.3125, 1582.3125,
1582.3125],
[1582.3125, 1582.3125, 1582.3125, ..., 1582.3125, 1582.3125,
1582.3125],
[1582.3125, 1582.3125, 1582.3125, ..., 1582.3125, 1582.3125,
1582.3125]],
mask=[[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
...,
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False]],
fill_value=1e+20), masked_array(
data=[[1581.8125, 1581.8125, 1581.8125, ..., 1581.8125, 1581.8125,
1581.8125],
[1581.8125, 1581.8125, 1581.8125, ..., 1581.8125, 1581.8125,
1581.8125],
[1581.8125, 1581.8125, 1581.8125, ..., 1581.8125, 1581.8125,
1581.8125],
...,
[1581.8125, 1581.8125, 1581.8125, ..., 1581.8125, 1581.8125,
1581.8125],
[1581.8125, 1581.8125, 1581.8125, ..., 1581.8125, 1581.8125,
1581.8125],
[1581.8125, 1581.8125, 1581.8125, ..., 1581.8125, 1581.8125,
1581.8125]],
mask=[[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
...,
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False]],
fill_value=1e+20), masked_array(
data=[[1581.3125, 1581.3125, 1581.3125, ..., 1581.3125, 1581.3125,
1581.3125],
[1581.3125, 1581.3125, 1581.3125, ..., 1581.3125, 1581.3125,
1581.3125],
[1581.3125, 1581.3125, 1581.3125, ..., 1581.3125, 1581.3125,
1581.3125],
...,
[1581.3125, 1581.3125, 1581.3125, ..., 1581.3125, 1581.3125,
1581.3125],
[1581.3125, 1581.3125, 1581.3125, ..., 1581.3125, 1581.3125,
1581.3125],
[1581.3125, 1581.3125, 1581.3125, ..., 1581.3125, 1581.3125,
1581.3125]],
mask=[[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
...,
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False]],
fill_value=1e+20), masked_array(
data=[[1580.8125, 1580.8125, 1580.8125, ..., 1580.8125, 1580.8125,
1580.8125],
[1580.8125, 1580.8125, 1580.8125, ..., 1580.8125, 1580.8125,
1580.8125],
[1580.8125, 1580.8125, 1580.8125, ..., 1580.8125, 1580.8125,
1580.8125],
...,
[1580.8125, 1580.8125, 1580.8125, ..., 1580.8125, 1580.8125,
1580.8125],
[1580.8125, 1580.8125, 1580.8125, ..., 1580.8125, 1580.8125,
1580.8125],
[1580.8125, 1580.8125, 1580.8125, ..., 1580.8125, 1580.8125,
1580.8125]],
mask=[[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
...,
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False]],
fill_value=1e+20), masked_array(
data=[[1580.3125, 1580.3125, 1580.3125, ..., 1580.3125, 1580.3125,
1580.3125],
[1580.3125, 1580.3125, 1580.3125, ..., 1580.3125, 1580.3125,
1580.3125],
[1580.3125, 1580.3125, 1580.3125, ..., 1580.3125, 1580.3125,
1580.3125],
...,
[1580.3125, 1580.3125, 1580.3125, ..., 1580.3125, 1580.3125,
1580.3125],
[1580.3125, 1580.3125, 1580.3125, ..., 1580.3125, 1580.3125,
1580.3125],
[1580.3125, 1580.3125, 1580.3125, ..., 1580.3125, 1580.3125,
1580.3125]],
mask=[[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
...,
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False]],
fill_value=1e+20)], grid_x=array([[2406093.51492728, 2406098.53263207, 2406103.55033687, ...,
2408241.09257937, 2408246.11028417, 2408251.12798896],
[2406093.51492728, 2406098.53263207, 2406103.55033687, ...,
2408241.09257937, 2408246.11028417, 2408251.12798896],
[2406093.51492728, 2406098.53263207, 2406103.55033687, ...,
2408241.09257937, 2408246.11028417, 2408251.12798896],
...,
[2406093.51492728, 2406098.53263207, 2406103.55033687, ...,
2408241.09257937, 2408246.11028417, 2408251.12798896],
[2406093.51492728, 2406098.53263207, 2406103.55033687, ...,
2408241.09257937, 2408246.11028417, 2408251.12798896],
[2406093.51492728, 2406098.53263207, 2406103.55033687, ...,
2408241.09257937, 2408246.11028417, 2408251.12798896]],
shape=(385, 431)), grid_y=array([[10514475.36062586, 10514475.36062586, 10514475.36062586, ...,
10514475.36062586, 10514475.36062586, 10514475.36062586],
[10514480.3769395 , 10514480.3769395 , 10514480.3769395 , ...,
10514480.3769395 , 10514480.3769395 , 10514480.3769395 ],
[10514485.39325314, 10514485.39325314, 10514485.39325314, ...,
10514485.39325314, 10514485.39325314, 10514485.39325314],
...,
[10516391.5924354 , 10516391.5924354 , 10516391.5924354 , ...,
10516391.5924354 , 10516391.5924354 , 10516391.5924354 ],
[10516396.60874904, 10516396.60874904, 10516396.60874904, ...,
10516396.60874904, 10516396.60874904, 10516396.60874904],
[10516401.62506268, 10516401.62506268, 10516401.62506268, ...,
10516401.62506268, 10516401.62506268, 10516401.62506268]],
shape=(385, 431)), grid_points= geometry
0 POINT (2406093.515 10514475.361)
1 POINT (2406098.533 10514475.361)
2 POINT (2406103.55 10514475.361)
3 POINT (2406108.568 10514475.361)
4 POINT (2406113.586 10514475.361)
... ...
165930 POINT (2408231.057 10516401.625)
165931 POINT (2408236.075 10516401.625)
165932 POINT (2408241.093 10516401.625)
165933 POINT (2408246.11 10516401.625)
165934 POINT (2408251.128 10516401.625)
[165935 rows x 1 columns], length_units='feet', time_units='days', budgetfile='gwf_model.cbb', headfile='gwf_model.hds', bed_elevation=np.float32(1599.8125), kv=1.0, kh=10.0, porosity=0.1, gw_mod_depth=20.0)
MODFLOW 6 Groundwater Model Construction#
A function (build_gwf_model) is provided to set up a standalone MODFLOW 6 groundwater flow model. This function uses the configuration object, a list of constant head boundary conditions, and an idomain mask to construct the model grid, assign hydraulic properties, set up initial and boundary conditions, and configure output files. Arrays are externalized for efficient processing and quality assurance.
#----------------------Model Setup Functions ------------------------#
def build_gwf_model(
cfg: Any, # config/settings instance
chd_data: Sequence[Sequence[float]], # CHD rows/records
idomain: np.ndarray, # (nlay, nrow, ncol) activity mask
) -> Tuple[flopy.mf6.MFSimulation, flopy.mf6.ModflowGwf]:
"""
Construct a stand-alone MODFLOW 6 GWF model using information held
in `cfg` plus the caller-supplied `chd_data` and `idomain` array.
Returns
-------
(sim, gwf) tuple – ready for sim.write_simulation() and sim.run_simulation().
"""
# --- Sanity checks -------------------------------------------------
if cfg.nlay is None or cfg.nrow is None or cfg.ncol is None:
raise ValueError("cfg.nlay / nrow / ncol must be populated first.")
if idomain.shape != (cfg.nlay, cfg.nrow, cfg.ncol):
raise ValueError("`idomain` dimensions don’t match cfg grid.")
# --- 1. Simulation container ---------------------------------------
sim = flopy.mf6.MFSimulation(
sim_name = cfg.sim_name,
exe_name = str(cfg.md6_exe_path),
sim_ws = str(cfg.gwf_ws),
)
flopy.mf6.ModflowTdis(
sim,
time_units = cfg.time_units.upper(),
nper = cfg.nper,
perioddata = [(cfg.perlen, cfg.nstp, cfg.tsmult)],
)
# --- 2. Groundwater-flow model -------------------------------------
gwf = flopy.mf6.ModflowGwf(
sim,
modelname = cfg.gwf_name,
save_flows = True,
)
flopy.mf6.ModflowGwfdis(
gwf,
nlay = cfg.nlay,
nrow = cfg.nrow,
ncol = cfg.ncol,
delr = cfg.cell_size_x,
delc = cfg.cell_size_y,
top = cfg.tops[0],
botm = cfg.botm,
idomain = idomain,
xorigin = cfg.xmin,
yorigin = cfg.ymin,
)
# Set or update the model grid crs and coordinate info
gwf.modelgrid.crs = cfg.raster_crs
gwf.modelgrid.set_coord_info(cfg.xmin, cfg.ymin, crs=cfg.raster_crs)
# --- 3. Packages ---------------------------------------------------
# 3-a. initial heads
strt = np.full((cfg.nlay, cfg.nrow, cfg.ncol), cfg.bed_elevation, dtype=float)
flopy.mf6.ModflowGwfic(gwf, strt=strt)
# 3-b. hydraulic properties
flopy.mf6.ModflowGwfnpf(
gwf,
icelltype = 2,
k = cfg.kh,
k33 = cfg.kv,
save_flows = True,
save_saturation = True,
save_specific_discharge = True,
)
# 3-c. constant-head boundaries
if chd_data:
flopy.mf6.ModflowGwfchd(
gwf,
maxbound = len(chd_data),
stress_period_data = {0: chd_data},
save_flows = True,
)
# 3-d. output control
budgetfile = f"{sim_name}.cbb"
flopy.mf6.ModflowGwfoc(
gwf,
saverecord = [("HEAD", "ALL"), ("BUDGET", "ALL")],
head_filerecord = [cfg.headfile],
budget_filerecord = [cfg.budgetfile],
printrecord = [("HEAD", "LAST")],
)
# --- 4. IMS solver -------------------------------------------------
flopy.mf6.ModflowIms(
sim,
print_option = "SUMMARY",
outer_dvclose = 1e-4,
outer_maximum = 200,
inner_maximum = 500,
inner_dvclose = 1e-4,
rcloserecord = 1e-4,
linear_acceleration = "BICGSTAB",
relaxation_factor = 0.97,
)
# --- 5. Externalize big arrays for disk IO & QA --------------------
external_dir = Path(gwf.model_ws) / "arrays"
external_dir.mkdir(exist_ok=True)
dis = gwf.get_package("DIS")
ic = gwf.get_package("IC")
def _layered_records(array: np.ndarray, basename: str) -> list[dict]:
return [{
"filename": str(PurePath("arrays") / f"{basename}_L{lay+1}.bin"),
"binary": True,
"data": np.asarray(array[lay]),
"iprn": 0,
"factor": 1.0,
} for lay in range(array.shape[0])]
# Externalize DIS arrays
if dis is not None:
dis.top.set_record({
"filename": str(PurePath("arrays") / "top.bin"),
"binary": True,
"data": np.asarray(dis.top.array),
"iprn": 0,
"factor": 1.0,
})
dis.botm.set_record(_layered_records(dis.botm.array, "botm"))
if hasattr(dis, "idomain") and dis.idomain.array is not None:
dis.idomain.set_record(_layered_records(dis.idomain.array, "idomain"))
# Externalize IC array
if ic is not None:
ic.strt.set_record(_layered_records(ic.strt.array, "strt"))
return sim, gwf
MODPATH 7 Particle Tracking#
Another function (build_particle_models) is included to set up forward and backward MODPATH 7 models for particle tracking. Particles are released from river cells and tracked through the groundwater flow field, providing insights into flowpaths and residence times.
def build_particle_models(
sim_name: str,
gwf: flopy.mf6.ModflowGwf,
river_cells: list[tuple[int, int, int]],
*,
mp7_ws: Path | str | None = None,
exe_path: str | Path | None = None,
) -> tuple[Modpath7, Modpath7]:
"""
Create **forward** *and* **backward** MODPATH 7 models that start particles
in every cell listed in *river_cells*.
Parameters
----------
sim_name : str
Base name – “_mp_forward / _mp_backward” are appended automatically.
gwf : flopy.mf6.ModflowGwf
The built groundwater-flow model whose grid MODPATH inherits.
river_cells : list[(k, i, j)]
Sequence of (layer,row,col) indices where particles should be released.
mp7_ws, exe_path
Optional overrides. If omitted workspace & exe are taken from *gwf*
(``gwf.simulation.sim_path`` and ``os.getenv("MP7")``).
Returns
-------
(mp_forward, mp_backward) : tuple[flopy.modpath.Modpath7, Modpath7]
"""
# ── defaults from the GWF simulation ──────────────────────────────
if mp7_ws is None:
mp7_ws = Path(gwf.simulation.sim_path).parent / "mp7_workspace"
mp7_ws = Path(mp7_ws).absolute()
mp7_ws.mkdir(exist_ok=True)
if exe_path is None:
exe_path = "mp7" # rely on PATH
def _make(direction: str) -> flopy.modpath.Modpath7:
mp = Modpath7.create_mp7(
modelname=f"{sim_name}_mp_{direction}",
trackdir=direction,
flowmodel=gwf,
model_ws=mp7_ws,
exe_name=str(exe_path),
rowcelldivisions=1,
columncelldivisions=1,
layercelldivisions=1,
)
# Particle locations: ensure only (k, i, j) shape
partlocs = [(k, i, j) for (k, i, j, *_) in river_cells]
# Create ParticleData and ParticleGroup
particle_data = ParticleData(partlocs, structured=True, drape=0)
pg = ParticleGroup(particledata=particle_data)
# Assign to model's MPSIM package
mpsim = mp.get_package("MPSIM")
mpsim.particlegroups.clear()
mpsim.particlegroups.append(pg)
return mp
mp_forward = _make("forward")
mp_backward = _make("backward")
return mp_forward, mp_backward
Simulation Settings#
Utility functions are defined to write model input files to disk and execute the MODFLOW 6 and MODPATH 7 models. These functions include timing and status reporting to aid in troubleshooting and performance monitoring.
def write_models(*sims, silent=False):
for sim in sims:
if isinstance(sim, flopy.mf6.MFSimulation):
sim.write_simulation(silent=silent)
else:
sim.write_input()
@timed
def run_models(*sims, silent=False):
for sim in sims:
if isinstance(sim, flopy.mf6.MFSimulation):
print(f"Running simulation: {sim.name}")
success, buff = sim.run_simulation(silent=silent, report=True)
else:
print(f"Running model: {sim.name}")
success, buff = sim.run_model(silent=silent, report=True)
if not success:
print(f"Simulation {sim.name} failed.")
print(buff)
break
else:
print(f"Simulation {sim.name} succeeded.")
Process and Export Particle Tracking Results#
This section is dedicated to post-processing and exporting the results of particle tracking simulations performed with MODPATH 7. By analyzing the movement of particles through the groundwater model, we can gain valuable insights into hyporheic exchange, residence times, and subsurface flowpaths within the modeled domain.
def process_and_export_modpath7_results(
workspace,
workspace_gwf,
sim_name,
gwf_model_name,
hec_ras_crs,
bed_elevation,
ncol,
nrow,
z,
nlay,
river_cells,
gwf,
xorigin_value,
yorigin_value,
output_folder,
direction,
endpoints_file=None,
pathline_file=None,
):
os.makedirs(output_folder, exist_ok=True)
# --- Load grid and head ---
dis = gwf.get_package("DIS")
delr = dis.delr.array
delc = dis.delc.array
z_value = z
idomain = dis.idomain.array
delr_mean = np.mean(delr)
delc_mean = np.mean(delc)
extent = [xorigin_value, xorigin_value + delr.sum(), yorigin_value, yorigin_value + delc.sum()]
# --- Files ---
if pathline_file is None:
pathline_file = os.path.join(workspace, f"{sim_name}_mp_{direction.lower()}.mppth")
if endpoints_file is None:
endpoints_file = os.path.join(workspace, f"{sim_name}_mp_{direction.lower()}.mpend")
# --- Head ---
hds = flopy.utils.HeadFile(os.path.join(workspace_gwf, f"{gwf_model_name}.hds"))
head_array = hds.get_data()
if head_array.ndim == 4:
head_array = head_array[-1]
# --- Endpoints and filtered ids ---
endpoint_reader = flopy.utils.EndpointFile(endpoints_file)
endpoints = endpoint_reader.get_alldata()
filtered_particles = [
ep for ep in endpoints
if (
(ep['z'] >= bed_elevation) and
(ep['x'], ep['y']) != (ep['x0'], ep['y0']) and
abs(ep['z'] - ep['z0']) > 0
)
]
filtered_particle_ids = [int(ep['particleid']) for ep in filtered_particles]
# --- Pathlines DataFrame ---
pathline_reader = flopy.utils.PathlineFile(pathline_file)
filtered_pathlines = []
for pid in filtered_particle_ids:
filtered_pathlines.extend(pathline_reader.get_data(partid=pid))
column_names = [
'particleid', 'particlegroup', 'sequencenumber', 'particleidloc', 'time',
'x', 'y', 'z', 'k', 'node', 'xloc', 'yloc', 'zloc', 'stressperiod', 'timestep'
]
filtered_pathlines_df = pd.DataFrame.from_records(filtered_pathlines, columns=column_names)
grouped_pathlines = filtered_pathlines_df.groupby('particleid')
# --- Length filter ---
mean_cell_width = (delr_mean + delc_mean) / 2
threshold_in_feet = 3 * mean_cell_width # Tolerance threshold for pathline length
def pathline_length(group):
group = group.sort_values(by='time')
x, y = group['x'].to_numpy(), group['y'].to_numpy()
dist = np.sqrt(np.diff(x) ** 2 + np.diff(y) ** 2)
return dist.sum()
lengths = grouped_pathlines.apply(pathline_length)
long_path_particleids = lengths[lengths >= threshold_in_feet].index
filtered_long_pathlines_df = filtered_pathlines_df[
filtered_pathlines_df['particleid'].isin(long_path_particleids)
]
grouped_long_pathlines = filtered_long_pathlines_df.groupby('particleid')
# --- PLOT: Start & End Points ---
start_points = np.array([(ep['x0'], ep['y0'], ep['z0']) for ep in endpoints])
end_points = np.array([(ep['x'], ep['y'], ep['z']) for ep in endpoints])
plt.figure(figsize=(10, 8))
plt.scatter(start_points[:, 0], start_points[:, 1], c='blue', label='Start Points', alpha=0.6)
plt.scatter(end_points[:, 0], end_points[:, 1], c='red', label='Start Points', alpha=0.6)
plt.xlabel('X Coordinate')
plt.ylabel('Y Coordinate')
plt.title(f'Start and End Points of {direction} Particles')
plt.legend()
plt.grid(True)
plt.savefig(os.path.join(output_folder, f"{direction}_start_end_points.png"), dpi=300)
plt.close()
# --- PLOT: Top view all pathlines ---
plt.figure(figsize=(8, 8))
mm = flopy.plot.PlotMapView(model=gwf)
mm.plot_grid(lw=0)
mm.plot_pathline(filtered_pathlines_df, layer="all", colors="red", label="Pathlines")
mm.plot_endpoint(endpoints, direction="starting", colorbar=True)
mm.ax.set_xlim(extent[0], extent[1])
mm.ax.set_ylim(extent[2], extent[3])
plt.title(f"MODPATH 7 Output: {direction} Pathlines and Endpoints")
mm.ax.legend()
plt.savefig(os.path.join(output_folder, f"{direction}_pathlines_endpoints.png"), dpi=300)
plt.close()
# --- PLOT: Filtered pathlines top view ---
plt.figure(figsize=(8, 8))
mm = flopy.plot.PlotMapView(model=gwf)
mm.plot_grid(lw=0)
mm.plot_pathline(filtered_long_pathlines_df, layer="all", colors="red", label="Pathlines")
mm.plot_endpoint(endpoints, direction="starting", colorbar=True)
mm.ax.set_xlim(extent[0], extent[1])
mm.ax.set_ylim(extent[2], extent[3])
plt.title(f"MODPATH 7 Output - {direction} Tracking Top View (Outliers Removed)")
mm.ax.legend()
plt.savefig(os.path.join(output_folder, f"filtered_{direction}_pathlines_endpoints.png"), dpi=300)
plt.close()
# --- PLOT: 3D pathlines ---
fig = plt.figure(figsize=(12, 8))
ax = fig.add_subplot(111, projection='3d')
for particle_id, group in grouped_long_pathlines:
group = group.sort_values(by='time')
x = group['x'].to_numpy()
y = group['y'].to_numpy()
z = group['z'].to_numpy()
ax.plot(x, y, z, alpha=0.5)
ax.set_title(f"{direction} Particle Pathlines in 3D")
ax.set_xlabel("X")
ax.set_ylabel("Y")
ax.set_zlabel("Z")
plt.tight_layout()
plt.savefig(os.path.join(output_folder, f"{direction}_pathlines_3d.png"), dpi=300)
plt.close()
# --- PATHLINE STATS & PLOTS ---
lengths_, widths_, depths_, path_lengths_ = [], [], [], []
for particle_id, group in grouped_long_pathlines:
group = group.sort_values(by='time')
x = group['x'].to_numpy()
y = group['y'].to_numpy()
z = group['z'].to_numpy()
coords = np.stack((x, y, z), axis=1)
diffs = np.diff(coords, axis=0)
dists = np.linalg.norm(diffs, axis=1)
path_length = dists.sum()
length = y.max() - y.min() if len(y) > 0 else 0
width = x.max() - x.min() if len(x) > 0 else 0
depth = z.max() - z.min() if len(z) > 0 else 0
lengths_.append(length)
widths_.append(width)
depths_.append(depth)
path_lengths_.append(path_length)
fig, axs = plt.subplots(1, 3, figsize=(18, 5))
sns.histplot(path_lengths_, kde=True, ax=axs[0], color='royalblue')
axs[0].set_title('Path Length Distribution (ft)')
sns.histplot(widths_, kde=True, ax=axs[1], color='royalblue')
axs[1].set_title('Path Width Distribution (x-range, ft)')
sns.histplot(depths_, kde=True, ax=axs[2], color='royalblue')
axs[2].set_title('Path Depth Distribution (z-range, ft)')
plt.tight_layout()
plt.savefig(os.path.join(output_folder, f"{direction}_pathline_length_width_depth_distributions.png"), dpi=300)
plt.close()
# --- Export statistics ---
def get_stats(arr):
arr = np.array(arr)
arr = arr[~np.isnan(arr)]
return {
"mean": np.mean(arr),
"median": np.median(arr),
"min": np.min(arr),
"max": np.max(arr),
"range": np.ptp(arr)
}
stats_dict = {
"Linear Path Length (y-range, ft)": get_stats(lengths_),
"Path Width (x-range, ft)": get_stats(widths_),
"Path Depth (z-range, ft)": get_stats(depths_),
"Net Path Length (ft)": get_stats(path_lengths_),
}
# Write stats to a text file in the output folder
stats_path = os.path.join(output_folder, f"{direction}_pathline_stats.txt")
with open(stats_path, "w") as f:
for name, stats in stats_dict.items():
f.write(f"{name}\n")
for statname, value in stats.items():
f.write(f" {statname}: {value:.2f}\n")
f.write("\n")
print(f"Statistics exported to {stats_path}")
# --- Residence time plot ---
residence_times = filtered_long_pathlines_df.groupby('particleid')['time'].max().to_numpy()
plt.figure(figsize=(8, 5))
sns.histplot(residence_times[(residence_times > 0) & (~np.isnan(residence_times))], kde=True, color='royalblue')
plt.xlabel('Residence Time (days)')
plt.ylabel('Number of Particles')
plt.title('Distribution of Residence Times')
plt.tight_layout()
plt.savefig(os.path.join(output_folder, "residence_time_distribution.png"), dpi=300)
plt.close()
# --- Velocity plot ---
particle_velocities = []
for particle_id, group in filtered_long_pathlines_df.groupby('particleid'):
group = group.sort_values(by='time')
x, y, z = group['x'].to_numpy(), group['y'].to_numpy(), group['z'].to_numpy()
coords = np.stack((x, y, z), axis=1)
dists = np.linalg.norm(np.diff(coords, axis=0), axis=1)
path_length = dists.sum()
time_elapsed = group['time'].iloc[-1] - group['time'].iloc[0]
avg_velocity = path_length / time_elapsed if time_elapsed > 0 else np.nan
particle_velocities.append(avg_velocity)
plt.figure(figsize=(8, 5))
sns.histplot(pd.Series(particle_velocities).dropna(), kde=True, color='royalblue')
plt.xlabel('Average Particle Velocity (ft/day)')
plt.ylabel('Number of Particles')
plt.title('Distribution of Particle Velocities')
plt.tight_layout()
plt.savefig(os.path.join(output_folder, "velocity_distribution.png"), dpi=300)
plt.close()
# --- Budget Analysis ---
cbc_f = os.path.join(workspace_gwf, f"{gwf_model_name}.cbb")
cbc = CellBudgetFile(cbc_f)
print("Available budget record types in CellBudgetFile:")
print(cbc.get_unique_record_names())
# --- Your workflow begins ---
budget_term = 'FLOW-JA-FACE' # or from user input if dynamic
arr = cbc.get_data(text=budget_term)[-1]
print("Budget array shape:", arr.shape)
# Get flow across cell faces for specific discharge
flow_ja_face = cbc.get_data(text='FLOW-JA-FACE')[0]
print("FLOW-JA-FACE array shape:", flow_ja_face.shape)
# ---- Collect Unique Starting and Ending Cells ----
start_cells = set()
end_cells = set()
for ep in filtered_particles:
k0 = int(ep['z0']) if 'z0' in ep.dtype.names else int(ep['k0'])
j0 = int(ep['y0'] / delc_mean)
i0 = int(ep['x0'] / delr_mean)
k1 = int(ep['z']) if 'z' in ep.dtype.names else int(ep['k'])
j1 = int(ep['y'] / delc_mean)
i1 = int(ep['x'] / delr_mean)
start_cells.add((k0, j0, i0))
end_cells.add((k1, j1, i1))
print("Start cells:", len(start_cells))
print("End cells:", len(end_cells))
# ---- Print Cell Coordinates ----
print("Start cell ranges:")
print(f" Elevation: {min([k for k, j, i in start_cells])} to {max([k for k, j, i in start_cells])}")
print(f" Row: {min([j for k, j, i in start_cells])} to {max([j for k, j, i in start_cells])}")
print(f" Col: {min([i for k, j, i in start_cells])} to {max([i for k, j, i in start_cells])}")
print("End cell ranges:")
print(f" Elevation: {min([k for k, j, i in end_cells])} to {max([k for k, j, i in end_cells])}")
print(f" Row: {min([j for k, j, i in end_cells])} to {max([j for k, j, i in end_cells])}")
print(f" Col: {min([i for k, j, i in end_cells])} to {max([i for k, j, i in end_cells])}")
# Initialize thickness array
top = gwf.modelgrid.top
bot = gwf.modelgrid.botm[0, :, :]
cell_volumes = np.zeros((nlay, nrow, ncol))
river_stage_array = np.zeros((nrow, ncol))
for cell in river_cells:
k, i, j, stage = cell
if k == 0:
river_stage_array[i, j] = stage
uniform_thickness = z_value
for k in range(1, nlay):
cell_volumes[k, :, :] = delr_mean * delc_mean * uniform_thickness
use_river = river_stage_array > 0
thickness_top = np.where(use_river, river_stage_array - bot, 0)
cell_volumes[0, :, :] = delr_mean * delc_mean * thickness_top
# Initialize thickness array
layer_thicknesses = np.ones((nlay, nrow, ncol)) * z_value
layer_thicknesses[0, :, :] = top - bed_elevation
print("Layer thicknesses shape:", layer_thicknesses.shape)
print("Layer 0 thickness range:", layer_thicknesses[0, :, :].min(), "to", layer_thicknesses[0, :, :].max())
print("Other layers thickness (should be 0.5 ft):", np.unique(layer_thicknesses[1:, :, :]))
# PLOT: Cell Volumes
plt.figure(figsize=(10, 8))
c = plt.pcolormesh(thickness_top, cmap='viridis', shading='auto')
plt.colorbar(c, label='Cell Volume (cubic ft)')
plt.title('Top Layer Cell Volumes (River cells use river stage)')
plt.xlabel('Column')
plt.ylabel('Row')
plt.gca().invert_yaxis()
plt.tight_layout()
plt.savefig(os.path.join(output_folder, "top_layer_cell_volumes.png"), dpi=300)
plt.close()
# find layer location of particles
layer_tops = np.zeros((nlay, nrow, ncol))
layer_bots = np.zeros((nlay, nrow, ncol))
layer_tops[0, :, :] = top
layer_bots[0, :, :] = top - layer_thicknesses[0, :, :]
for k in range(1, nlay):
layer_tops[k, :, :] = layer_bots[k-1, :, :]
layer_bots[k, :, :] = layer_tops[k, :, :] - layer_thicknesses[k, :, :]
# find layer location of particles
# def get_layer_from_z(z, row, col, layer_tops, layer_bots):
# nlay = layer_tops.shape[0]
# for k in range(nlay):
# top_elev = layer_tops[k, row, col]
# bot_elev = layer_bots[k, row, col]
# if bot_elev <= z < top_elev:
# return k
# print(f"WARNING: No layer found for z={z}, row={row}, col={col}")
# print(
# f"DEBUG: For (row={row}, col={col}), z={z}, "
# f"model top={layer_tops[0, row, col]}, "
# f"model bottom={layer_bots[-1, row, col]}"
# )
# return None
def get_layer_from_z(z, row, col, layer_tops, layer_bots, eps=0.0): # account for rpundind error
nlay = layer_tops.shape[0]
for k in range(nlay):
top_elev = layer_tops[k, row, col]
bot_elev = layer_bots[k, row, col]
# Allow for a small tolerance above the top and below the bottom
if k == 0 and z > top_elev and (z - top_elev) < eps:
return k
if k == nlay-1 and z < bot_elev and (bot_elev - z) < eps:
return k
if bot_elev - eps <= z <= top_elev + eps:
return k
print(f"WARNING: No layer found for z={z}, row={row}, col={col}")
print(
f"DEBUG: For (row={row}, col={col}), z={z}, "
f"model top={layer_tops[0, row, col]}, "
f"model bottom={layer_bots[-1, row, col]}"
)
return None
# Assign layers for each start cell
start_cells_zone = [
{
'layer': get_layer_from_z(z, row, col, layer_tops, layer_bots),
'row': row,
'col': col,
'z': z
}
for z, row, col in start_cells
if get_layer_from_z(z, row, col, layer_tops, layer_bots) is not None
]
end_cells_zone = [
{
'layer': get_layer_from_z(z, row, col, layer_tops, layer_bots),
'row': row,
'col': col,
'z': z
}
for z, row, col in end_cells
if get_layer_from_z(z, row, col, layer_tops, layer_bots) is not None
]
start_cells_df = pd.DataFrame(start_cells_zone)
end_cells_df = pd.DataFrame(end_cells_zone)
print("First 5 start cells with layer info:")
print(start_cells_df.head())
print("First 5 end cells with layer info:")
print(end_cells_df.head())
# --- Zone Array Initialization ---
nlay, nrow, ncol = gwf.modelgrid.nlay, gwf.modelgrid.nrow, gwf.modelgrid.ncol
zone_array = np.zeros((nlay, nrow, ncol), dtype=int)
print(type(gwf.modelgrid))
ncpl = gwf.modelgrid.ncpl
print("Number of cells per layer (ncpl):", ncpl)
# --- Load flow data ---
flow_ja_face = cbc.get_data(kstpkper=(0, 0), text='FLOW-JA-FACE', full3D=True)[0]
print("flow_ja_face shape:", flow_ja_face.shape)
# --- Get global cell indices ---
start_flows = []
for cell in start_cells_zone:
k, j, i = cell['layer'], cell['row'], cell['col']
print(f"Processing start cell: layer={k}, row={j}, col={i}")
if not (0 <= k < nlay and 0 <= j < nrow and 0 <= i < ncol):
print(f"Skipping invalid cell: layer={k}, row={j}, col={i}")
continue
icell = gwf.modelgrid.get_node((k, j, i))
start_flows.append(flow_ja_face[0, 0, icell])
start_flows = np.array(start_flows)
end_flows = []
for cell in end_cells_zone:
k, j, i = cell['layer'], cell['row'], cell['col']
print(f"Processing end cell: layer={k}, row={j}, col={i}")
if not (0 <= k < nlay and 0 <= j < nrow and 0 <= i < ncol):
print(f"Skipping invalid cell: layer={k}, row={j}, col={i}")
continue
icell = gwf.modelgrid.get_node((k, j, i))
end_flows.append(flow_ja_face[0, 0, icell])
end_flows = np.array(end_flows)
print("Start flows shape:", start_flows.shape)
print("End flows shape:", end_flows.shape)
total_start_flow = np.sum(start_flows)
total_end_flow = np.sum(end_flows)
print(f"Total start flow: {total_start_flow}")
print(f"Total end flow: {total_end_flow}")
hyporheic_flow_rate_ft3_d = abs(total_start_flow) + total_end_flow
print(f"Hyporheic flow rate (ft³/d): {hyporheic_flow_rate_ft3_d}")
average_hyporheic_flow_rate_ft3_d = (total_start_flow + total_end_flow) / 2
print(f"Average hyporheic flow rate (ft³/d): {average_hyporheic_flow_rate_ft3_d}")
# Optionally, write results to file
with open(stats_path, "a") as f:
f.write("Zone Budget Summary\n")
f.write(f"Total number of start cells: {len(start_cells)}\n")
f.write(f"Total start flow: {total_start_flow}\n")
f.write(f"Total number of end cells: {len(end_cells)}\n")
f.write(f"Total end flow: {total_end_flow}\n")
f.write(f"Average Hyporheic flow rate (ft³/d): {average_hyporheic_flow_rate_ft3_d}\n")
f.write(f"Hyporheic flow rate (ft³/d): {hyporheic_flow_rate_ft3_d}\n")
print(f"Zone budget summary (particles and MODFLOW cell budgets) appended to {stats_path}")
# --- Cell and hyporheic volumes ---
binary_presence = np.zeros((nlay, nrow, ncol), dtype=int)
x_local = filtered_long_pathlines_df['x'].values
y_local = filtered_long_pathlines_df['y'].values
x_spatial, y_spatial = gwf.modelgrid.get_coords(x_local, y_local)
z_array = filtered_long_pathlines_df['z'].values if 'z' in filtered_long_pathlines_df else [None]*len(filtered_long_pathlines_df)
def get_layer_indices(z_points, j_indices, i_indices, layer_tops, layer_bots):
npoints = len(z_points)
nlay = layer_tops.shape[0]
k_indices = np.full(npoints, np.nan)
for idx in range(npoints):
j = j_indices[idx]
i = i_indices[idx]
z = z_points[idx]
# Only for valid i, j (not off-grid)
if (0 <= j < layer_tops.shape[1]) and (0 <= i < layer_tops.shape[2]):
for k in range(nlay):
top = layer_tops[k, j, i]
bot = layer_bots[k, j, i]
if (bot <= z < top): # z between bot and top
k_indices[idx] = k
break
return k_indices
i = np.floor((x_spatial - xorigin_value) / delr_mean).astype(int)
j = np.floor((y_spatial - yorigin_value) / delc_mean).astype(int)
k = get_layer_indices(z_array, j, i, layer_tops, layer_bots)
results = list(zip(k, j, i))
# --- Attach to DataFrame ---
layers, rows, cols = zip(*results)
filtered_long_pathlines_df['layer'] = layers
filtered_long_pathlines_df['row'] = rows
filtered_long_pathlines_df['col'] = cols
# --- Mark binary presence for valid cells and print ---
for k, j, i in results:
if (not np.isnan(k)) and (not np.isnan(j)) and (not np.isnan(i)):
k_int, j_int, i_int = int(k), int(j), int(i)
if 0 <= k_int < nlay and 0 <= j_int < nrow and 0 <= i_int < ncol:
binary_presence[k_int, j_int, i_int] = 1
#print(f"Particle intersects at layer {k_int}, row {j_int}, column {i_int}")
# --- Count intersected cells ---
num_intersected_cells = np.sum(binary_presence)
print(f"Number of unique cells intersected by pathlines: {num_intersected_cells}")
hyporheic_volumes = cell_volumes * binary_presence
total_vol_per_xy = np.nansum(hyporheic_volumes, axis=0)
masked_vol = np.where(idomain[0,:,:] == 1, total_vol_per_xy, np.nan)
masked_vol_plot = np.ma.masked_less_equal(masked_vol, 0)
plt.figure(figsize=(10, 8))
c = plt.pcolormesh(masked_vol_plot, cmap='viridis', shading='auto')
plt.colorbar(c, label='Total Hyporheic Volume (cubic ft)')
plt.title('2D Map of Total Hyporheic Space (idomain extent)')
plt.xlabel('Column')
plt.ylabel('Row')
plt.gca().invert_yaxis()
plt.tight_layout()
plt.savefig(os.path.join(output_folder, f"{direction}_hyporheic_space_2d_map.png"), dpi=300)
plt.close()
# --- Pathline segment and summary calculation ---
hyporheic_vols = []
for k, j, i in zip(filtered_long_pathlines_df['layer'], filtered_long_pathlines_df['row'], filtered_long_pathlines_df['col']):
if not np.isnan(k) and not np.isnan(j) and not np.isnan(i):
k, j, i = int(k), int(j), int(i)
hyp_vol = hyporheic_volumes[k, j, i]
else:
hyp_vol = 0.0
hyporheic_vols.append(hyp_vol)
filtered_long_pathlines_df['hyporheic_volume'] = hyporheic_vols
df = filtered_long_pathlines_df.copy()
df = df.sort_values(['particleid', 'time']).reset_index(drop=True)
df['dx'] = df.groupby('particleid')['x'].diff()
df['dy'] = df.groupby('particleid')['y'].diff()
df['dz'] = df.groupby('particleid')['z'].diff()
df['dt'] = df.groupby('particleid')['time'].diff()
df['segment_length'] = np.sqrt(df['dx']**2 + df['dy']**2 + df['dz']**2)
df['particle_velocity'] = df['segment_length'] / df['dt']
df['flow_rate'] = df['hyporheic_volume'] / df['dt']
def get_head(row):
try:
return head_array[int(row['layer']), int(row['row']), int(row['col'])]
except Exception:
return np.nan
df['head'] = df.apply(get_head, axis=1)
df['head_start'] = df.groupby('particleid')['head'].shift(1)
df['head_end'] = df['head']
df['hydraulic_gradient'] = (df['head_start'] - df['head_end']) / df['segment_length']
df['cumulative_segment_length'] = df.groupby('particleid')['segment_length'].cumsum()
df_clean = df.dropna(subset=['row', 'col', 'particleid']).copy()
df_clean['row_int'] = df_clean['row'].astype(int)
df_clean['col_int'] = df_clean['col'].astype(int)
agg_dict = {
'z': 'min', 'hyporheic_volume': 'sum', 'dt': 'sum', 'time': 'max',
'segment_length': 'sum', 'cumulative_segment_length': 'max',
'particle_velocity': 'mean', 'flow_rate': 'sum', 'hydraulic_gradient': 'mean',
'head': 'mean', 'head_start': 'mean', 'head_end': 'mean',
}
df_prc = df_clean.groupby(['particleid', 'row_int', 'col_int'], as_index=False).agg(agg_dict)
df_prc = df_prc.rename(columns={
'row_int': 'row', 'col_int': 'col', 'z': 'z_elevation',
'hyporheic_volume': 'hyporheic_volume_cubic_ft', 'dt': 'cell_residence_time_days',
'time': 'total_residence_time_days', 'segment_length': 'length_in_cell_ft',
'cumulative_segment_length': 'total_length_ft', 'particle_velocity': 'particle_velocity_ft_per_day',
'flow_rate': 'flow_rate_cubic_ft_per_day', 'hydraulic_gradient': 'hydraulic_gradient',
'head': 'hydraulic_head', 'head_start': 'starting_hydraulic_head', 'head_end': 'ending_hydraulic_head',
})
total_volume_per_cell = np.nansum(cell_volumes, axis=0)
df_prc['total_volume_cubic_ft'] = [
total_volume_per_cell[int(row), int(col)] if (
0 <= int(row) < total_volume_per_cell.shape[0] and
0 <= int(col) < total_volume_per_cell.shape[1]
) else np.nan
for row, col in zip(df_prc['row'], df_prc['col'])
]
df_prc['x_coord'] = df_prc['col'] * delr_mean + xorigin_value + delr_mean / 2
df_prc['y_coord'] = (nrow - 1 - df_prc['row']) * delc_mean + yorigin_value + delc_mean / 2 # align with top left origin matching MODFLOW orientation
df_prc = df_prc.replace([np.inf, -np.inf], np.nan)
df_prc = df_prc.dropna()
# --- Particle summary ---
total_volume_available_along_path = df_prc.groupby('particleid')['total_volume_cubic_ft'].sum().reset_index()
total_hyporheic_volume_per_particle = df_prc.groupby('particleid')['hyporheic_volume_cubic_ft'].sum().reset_index()
starting_hydraulic_head_per_particle = df_prc.groupby('particleid')['starting_hydraulic_head'].mean().reset_index()
ending_hydraulic_head_per_particle = df_prc.groupby('particleid')['ending_hydraulic_head'].mean().reset_index()
min_elevation_per_particle = df_prc.groupby('particleid')['z_elevation'].min().reset_index()
total_residence_time_per_particle = df_prc.groupby('particleid')['total_residence_time_days'].max().reset_index()
total_length_per_particle = df_prc.groupby('particleid')['total_length_ft'].max().reset_index()
average_particle_velocity_per_particle = df_prc.groupby('particleid')['particle_velocity_ft_per_day'].mean().reset_index()
average_flow_rate_per_particle = df_prc.groupby('particleid')['flow_rate_cubic_ft_per_day'].mean().reset_index()
# --- Export statistics for particle-level summary variables ---
def export_stats_from_df(df, column, varname, f):
arr = df[column].to_numpy()
arr = arr[~np.isnan(arr)]
if arr.size > 0:
f.write(f"{varname}\n")
f.write(f" mean: {np.mean(arr):.4f}\n")
f.write(f" median: {np.median(arr):.4f}\n")
f.write(f" min: {np.min(arr):.4f}\n")
f.write(f" max: {np.max(arr):.4f}\n")
f.write(f" range: {np.ptp(arr):.4f}\n\n")
else:
f.write(f"{varname}\n No valid data.\n\n")
with open(stats_path, "a") as f:
export_stats_from_df(df_prc, "total_volume_cubic_ft", "Per Cell: Total Volume Available (ft³)", f)
export_stats_from_df(df_prc, "hyporheic_volume_cubic_ft", "Per Cell: Total Hyporheic Volume (ft³)", f)
export_stats_from_df(df_prc, "starting_hydraulic_head", "Per Cell: Starting Hydraulic Head", f)
export_stats_from_df(df_prc, "ending_hydraulic_head", "Per Cell: Ending Hydraulic Head", f)
export_stats_from_df(df_prc, "z_elevation", "Per Cell: Particle Depth", f)
export_stats_from_df(df_prc, "total_residence_time_days", "Per Cell: Residence Time (days)", f)
export_stats_from_df(df_prc, "total_length_ft", "Per Cell: Path Length (ft)", f)
export_stats_from_df(df_prc, "particle_velocity_ft_per_day", "Per Cell: Particle Velocity (ft/day)", f)
export_stats_from_df(df_prc, "flow_rate_cubic_ft_per_day", "Per Cell: Flow Rate (ft³/day)", f)
export_stats_from_df(df_prc, "hydraulic_gradient", "Per Cell: Hydraulic Gradient", f)
print(f"Per-cell summary statistics exported to {stats_path}")
df_particle_summary = total_volume_available_along_path \
.merge(total_hyporheic_volume_per_particle, on='particleid', how='left') \
.merge(starting_hydraulic_head_per_particle, on='particleid', how='left') \
.merge(ending_hydraulic_head_per_particle, on='particleid', how='left') \
.merge(min_elevation_per_particle, on='particleid', how='left') \
.merge(total_residence_time_per_particle, on='particleid', how='left') \
.merge(total_length_per_particle, on='particleid', how='left') \
.merge(average_particle_velocity_per_particle, on='particleid', how='left') \
.merge(average_flow_rate_per_particle, on='particleid', how='left')
df_particle_summary['hydraulic_gradient'] = (
df_particle_summary['starting_hydraulic_head'] - df_particle_summary['ending_hydraulic_head']
) / df_particle_summary['total_length_ft']
df_particle_summary['x_cell_size_ft'] = delr_mean
df_particle_summary['y_cell_size_ft'] = delc_mean
df_particle_summary['z_cell_size_ft'] = 0.5
with open(stats_path, "a") as f:
export_stats_from_df(df_particle_summary, "total_volume_cubic_ft", "Particle Path: Total Volume Available Along Path (ft³)", f)
export_stats_from_df(df_particle_summary, "hyporheic_volume_cubic_ft", "Particle Path: Hyporheic Volume Along Path (ft³)", f)
export_stats_from_df(df_particle_summary, "starting_hydraulic_head", "Particle Path: Starting Hydraulic Head", f)
export_stats_from_df(df_particle_summary, "ending_hydraulic_head", "Particle Path: Ending Hydraulic Head", f)
export_stats_from_df(df_particle_summary, "z_elevation", "Particle Path: Depth", f)
export_stats_from_df(df_particle_summary, "total_residence_time_days", "Particle Path: Residence Time (days)", f)
export_stats_from_df(df_particle_summary, "total_length_ft", "Particle Path: Length (ft)", f)
export_stats_from_df(df_particle_summary, "particle_velocity_ft_per_day", "Particle Path: Average Velocity (ft/day)", f)
export_stats_from_df(df_particle_summary, "flow_rate_cubic_ft_per_day", "Particle Path: Average Flow Rate (ft³/day)", f)
export_stats_from_df(df_particle_summary, "hydraulic_gradient", "Particle Path: Hydraulic Gradient", f)
# Optionally, if you want stats for cell sizes per particle (they should be constant, so not very interesting):
# export_stats_from_df(df_particle_summary, "x_cell_size_ft", "Particle Path: X Cell Size (ft)", f)
# export_stats_from_df(df_particle_summary, "y_cell_size_ft", "Particle Path: Y Cell Size (ft)", f)
# export_stats_from_df(df_particle_summary, "z_cell_size_ft", "Particle Path: Z Cell Size (ft)", f)
print(f"Pathline summary statistics for particles exported to {stats_path}")
# Clean up column names to less than 10 characters for ESRI
custom_map_points = {
"row": "row", # model row
"col": "col", # model col
"z_elevation": "zelev", # elevation
"hyporheic_volume_cubic_ft": "hypvol_ft", # hyporheic vol (ft^3)
"cell_residence_time_days": "cel_res_t", # cell res time (days)
"total_residence_time_days": "res_time", # total res time (days)
"length_in_cell_ft": "Len_ft", # length in cell (ft)
"total_length_ft": "tot_len_ft", # total length (ft)
"particle_velocity_ft_per_day": "vel_ftday", # velocity (ft/day)
"flow_rate_cubic_ft_per_day": "flow_ftday", # flow rate (ft^3/day)
"hydraulic_gradient": "hyd_grad", # hydraulic gradient
"hydraulic_head": "hyd_head", # head
"starting_hydraulic_head": "head_strt", # start head
"ending_hydraulic_head": "head_end", # end head
"x_coord": "xcoord", # x coordinate
"y_coord": "ycoord", # y coordinate
"total_volume_cubic_ft": "tot_vol_ft", # total vol (ft^3)
# Add others as needed
}
custom_map_summary = {
"particleid": "particleid", # particle id
"total_volume_cubic_ft": "tot_vol_ft",# total volume (ft^3)
"hyporheic_volume_cubic_ft": "hypvol_ft", # hyporheic volume (ft^3)
"starting_hydraulic_head": "head_strt", # start head
"ending_hydraulic_head": "head_end", # end head
"min_elevation_per_particle": "min_elev", # min elevation
"total_residence_time_per_particle": "res_time", # residence time
"total_length_per_particle": "tot_len_ft",# total length (ft)
"average_particle_velocity_per_particle": "vel_ftday", # velocity (ft/day)
"average_flow_rate_per_particle": "flow_ftday", # flow rate (ft^3/day)
}
df_particle_summary = df_particle_summary.rename(columns=custom_map_summary)
df_prc = df_prc.rename(columns=custom_map_points)
# Prepare CRS
if isinstance(hec_ras_crs, str):
hec_ras_crs = CRS.from_string(hec_ras_crs)
# --- Points GeoDataFrame ---
df_prc['geometry'] = df_prc.apply(lambda row: Point(row['xcoord'], row['ycoord']), axis=1)
points_gdf = gpd.GeoDataFrame(df_prc, geometry='geometry', crs=hec_ras_crs)
# --- Lines GeoDataFrame ---
def make_linestring(group):
group = group.sort_values('res_time')
points = list(zip(group['xcoord'], group['ycoord']))
if len(points) > 1:
return LineString(points)
else:
return None
lines = df_prc.groupby('particleid').apply(make_linestring)
lines = lines.dropna()
lines = lines.reset_index()
lines_gdf = gpd.GeoDataFrame({'particleid': lines['particleid'], 'geometry': lines[0]}, crs=hec_ras_crs)
lines_gdf = lines_gdf.merge(df_particle_summary, on='particleid', how='left')
# --- Spatial outputs (SHP, KML, KMZ, GPKG) ---
points_gdf_wgs84 = points_gdf.to_crs(epsg=4326)
lines_gdf_wgs84 = lines_gdf.to_crs(epsg=4326)
points_gdf.to_file(os.path.join(output_folder, f"{direction}_hyporheic_points_HECRAS_CRS.shp"), driver="ESRI Shapefile")
lines_gdf.to_file(os.path.join(output_folder, f"{direction}_hyporheic_pathlines_HECRAS_CRS.shp"), driver="ESRI Shapefile")
points_gdf_wgs84.to_file(os.path.join(output_folder, f"{direction}_hyporheic_points.shp"), driver="ESRI Shapefile")
lines_gdf_wgs84.to_file(os.path.join(output_folder, f"{direction}_hyporheic_pathlines.shp"), driver="ESRI Shapefile")
points_kml = os.path.join(output_folder, f"{direction}_hyporheic_points.kml")
lines_kml = os.path.join(output_folder, f"{direction}_hyporheic_pathlines.kml")
points_gdf_wgs84.to_file(points_kml, driver="KML")
lines_gdf_wgs84.to_file(lines_kml, driver="KML")
points_kmz = os.path.join(output_folder, f"{direction}_hyporheic_points.kmz")
lines_kmz = os.path.join(output_folder, f"{direction}_hyporheic_pathlines.kmz")
with zipfile.ZipFile(points_kmz, "w", zipfile.ZIP_DEFLATED) as kmz:
kmz.write(points_kml, os.path.basename(points_kml))
with zipfile.ZipFile(lines_kmz, "w", zipfile.ZIP_DEFLATED) as kmz:
kmz.write(lines_kml, os.path.basename(lines_kml))
gpkg_points = os.path.join(output_folder, f"{direction}_hyporheic_points.gpkg")
gpkg_lines = os.path.join(output_folder, f"{direction}_hyporheic_pathlines.gpkg")
points_gdf.to_file(gpkg_points, layer="points", driver="GPKG")
lines_gdf.to_file(gpkg_lines, layer="lines", driver="GPKG")
# --- CSVs ---
particle_summary_path = os.path.join(output_folder, f"{direction}_particle_data.csv")
df_prc.to_csv(particle_summary_path, index=False)
particle_summary_table_path = os.path.join(output_folder, f"{direction}_particle_summary_table.csv")
df_particle_summary.to_csv(particle_summary_table_path, index=False)
return {
"results": stats_path,
"csv": particle_summary_path,
"csv_summary": particle_summary_table_path,
"points_shp": os.path.join(output_folder, f"{direction}_hyporheic_points_HECRAS_CRS.shp"),
"lines_shp": os.path.join(output_folder, f"{direction}_hyporheic_pathlines_HECRAS_CRS.shp"),
"points_kml": points_kml,
"lines_kml": lines_kml,
"points_kmz": points_kmz,
"lines_kmz": lines_kmz,
"points_gpkg": gpkg_points,
"lines_gpkg": gpkg_lines,
"plots": [
f"{direction}_start_end_points.png",
f"{direction}_pathlines_endpoints.png",
f"filtered_{direction}_pathlines_endpoints.png",
f"{direction}_pathlines_3d.png",
f"{direction}_pathline_length_width_depth_distributions.png",
f"{direction}_residence_time_distribution.png",
f"{direction}_velocity_distribution.png",
"top_layer_cell_volumes.png",
f"{direction}_hyporheic_space_2d_map.png"
]
}
Plot Simulation Results#
This section provides visualization routines for interpreting and presenting the results of the groundwater flow and particle tracking simulations.
def plot_hyporheic_workflow(
sim_name,
sim_path,
exe_name,
sat_image_path,
gw_domain_shapefile_path,
particle_points_shp,
pathlines_shp,
river_cells,
particle_data_csv,
pathline_stats_txt,
direction,
output_folder,
plot_layer=1,
mx_origin=0,
my_origin=0,
zfac_3d=8.0,
zfac_long=50.0,
xfac_long=2.0,
yfac_long=8.0,
save_summary_csv="Model_Workflow_Summary.csv"
):
# Ensure output folder exists
os.makedirs(output_folder, exist_ok=True)
# --- Step 1: Load MODFLOW 6 Simulation and GWF Model ---
gwfsim = flopy.mf6.MFSimulation.load(sim_name=sim_name, sim_ws=sim_path, exe_name=exe_name)
gwf = gwfsim.get_model(gwfsim.model_names[0])
# --- Step 2: Load Head Data ---
head_file = os.path.join(sim_path, f"{gwf.name}.hds")
head_obj = flopy.utils.HeadFile(head_file)
head = head_obj.get_data(totim=head_obj.get_times()[-1]) # shape: (nlay, nrow, ncol)
# --- Step 3: Get idomain for masking ---
dis = gwf.get_package("DIS")
idomain = dis.idomain.array # shape: (nlay, nrow, ncol)
# --- Use variables ---
layer_to_plot = plot_layer
head_layer = head[layer_to_plot, :, :]
idomain_layer = idomain[layer_to_plot, :, :]
head_layer_masked = np.ma.masked_where(idomain_layer == 0, head_layer)
# --- Satellite image ---
with rasterio.open(sat_image_path) as src:
if src.count >= 3:
img = np.dstack([src.read(i) for i in [1,2,3]])
img = img.astype(float)
for i in range(3):
band = img[:,:,i]
img[:,:,i] = (band - band.min()) / (band.max() - band.min())
else:
img = src.read(1)
extent = [src.bounds.left, src.bounds.right, src.bounds.bottom, src.bounds.top]
img_crs = src.crs
# --- Load groundwater domain shapefile ---
gdf = gpd.read_file(gw_domain_shapefile_path)
if gdf.crs != img_crs:
gdf = gdf.to_crs(img_crs)
domain_polygon = gdf.unary_union # single multipolygon
# --- Get MODFLOW grid cell centers ---
nrow, ncol = head_layer.shape
x = np.linspace(extent[0], extent[1], ncol)
y = np.linspace(extent[2], extent[3], nrow)
Xc, Yc = np.meshgrid(x, y)
# --- Clip head data to shapefile polygon ---
mask_shape = np.zeros_like(head_layer_masked, dtype=bool)
for i in range(nrow):
for j in range(ncol):
pt = Point(Xc[i, j], Yc[i, j])
mask_shape[i, j] = domain_polygon.contains(pt)
head_layer_clipped = np.ma.masked_where(~mask_shape, head_layer_masked)
levels = np.linspace(np.nanmin(head_layer_clipped), np.nanmax(head_layer_clipped), 20)
# --- Load particle points GeoDataFrame ---
gdf_points = gpd.read_file(particle_points_shp)
if gdf_points.crs != img_crs:
gdf_points = gdf_points.to_crs(img_crs)
gdf_points_sorted = gdf_points.sort_values(['particleid', 'res_time'])
start_points = gdf_points_sorted.groupby('particleid').first()
end_points = gdf_points_sorted.groupby('particleid').last()
# --- Load pathlines GeoDataFrame ---
gdf_lines = gpd.read_file(pathlines_shp)
if gdf_lines.crs != img_crs:
gdf_lines = gdf_lines.to_crs(img_crs)
# --- 2D Plot of Groundwater Head Layer ---
fig, ax = plt.subplots(figsize=(12, 10))
ax.imshow(img, extent=extent, origin='upper', zorder=1)
# Contour plots
contourf = ax.contourf(Xc, Yc, head_layer_clipped, levels=levels, cmap='viridis', alpha=1.0, zorder=0)
contour = ax.contour(Xc, Yc, head_layer_clipped, levels=levels, cmap='viridis', zorder=2)
# Plot groundwater domain boundary in white
gdf.boundary.plot(ax=ax, edgecolor='white', linewidth=2, zorder=6)
# Custom legend handles
start_handle = mlines.Line2D([], [], color='lime', marker='o', linestyle='None', markersize=1, label='Start Points')
end_handle = mlines.Line2D([], [], color='red', marker='o', linestyle='None', markersize=5, label='End Points')
line_handle = mlines.Line2D([], [], color='blue', linewidth=2, label='Pathlines')
ax.legend(handles=[start_handle, end_handle, line_handle], loc='upper right', fontsize=12, frameon=True)
# Colorbar on the left
divider = make_axes_locatable(ax)
cax = divider.append_axes("left", size="5%", pad=1.0)
cb = fig.colorbar(contourf, cax=cax)
cax.yaxis.set_ticks_position('left')
cb.set_label('Groundwater Head (ft)')
plt.title(f"{direction} Hyporheic Head Layer")
ax.set_xlabel('Easting (UTM)')
ax.set_ylabel('Northing (UTM)')
plt.tight_layout()
fig.savefig(os.path.join(output_folder, f"{direction}_hyporheic_headlayer.png"), dpi=300)
plt.close(fig)
# --- 2D Plot Pathlines and Points ---
fig, ax = plt.subplots(figsize=(12, 10))
ax.imshow(img, extent=extent, origin='upper')
gdf.boundary.plot(ax=ax, edgecolor='white', linewidth=2, zorder=2)
start_points.plot(ax=ax, marker='o', color='lime', markersize=2, label='Start Points', zorder=5)
end_points.plot(ax=ax, marker='x', color='red', markersize=10, label='End Points', zorder=4)
gdf_lines.plot(ax=ax, color='blue', linewidth=0.2, label='Pathlines', zorder=3)
plt.legend()
plt.xlabel('Easting (UTM)')
plt.ylabel('Northing (UTM)')
plt.title(f"{direction} Hyporheic Pathlines and Points")
plt.tight_layout()
fig.savefig(os.path.join(output_folder, f"{direction}_hyporheic_pathlines_points.png"), dpi=300)
plt.show()
plt.close(fig)
# --- 2D Plot (with pathlines and points) Zoomed to IDomain ---
fig, ax = plt.subplots(figsize=(12, 10))
ax.imshow(img, extent=extent, origin='upper', zorder=1)
contourf = ax.contourf(Xc, Yc, head_layer_clipped, levels=levels, cmap='viridis', alpha=1.0, zorder=0)
contour = ax.contour(Xc, Yc, head_layer_clipped, levels=levels, cmap='viridis', zorder=2)
gdf_lines.plot(ax=ax, color='blue', linewidth=0.5, label='_nolegend_', zorder=3)
ax.scatter(start_points.geometry.x, start_points.geometry.y, color='lime', s=20, label='Start Points', zorder=5)
ax.scatter(end_points.geometry.x, end_points.geometry.y, color='red', s=20, label='End Points', zorder=6)
gdf.boundary.plot(ax=ax, edgecolor='white', linewidth=2, zorder=6)
xmin, ymin, xmax, ymax = gdf.total_bounds
ax.set_xlim(xmin, xmax)
ax.set_ylim(ymin, ymax)
start_handle = mlines.Line2D([], [], color='lime', marker='o', linestyle='None', markersize=5, label='Start Points')
end_handle = mlines.Line2D([], [], color='red', marker='o', linestyle='None', markersize=5, label='End Points')
line_handle = mlines.Line2D([], [], color='blue', linewidth=2, label='Pathlines')
ax.legend(handles=[start_handle, end_handle, line_handle], loc='upper right', fontsize=12, frameon=True)
divider = make_axes_locatable(ax)
cax = divider.append_axes("left", size="5%", pad=1.0)
cb = fig.colorbar(contourf, cax=cax)
cax.yaxis.set_ticks_position('left')
cb.set_label('Groundwater Head (ft)')
ax.set_xlabel('Easting (UTM)')
ax.set_ylabel('Northing (UTM)')
plt.tight_layout()
fig.savefig(os.path.join(output_folder, f"{direction}_hyporheic_zoomed_idomain.png"), dpi=300)
plt.show()
plt.close(fig)
# --- 3D Plots ---
delr = dis.delr.array
delc = dis.delc.array
x = np.cumsum(np.insert(delr, 0, 0))[:-1]
y = np.cumsum(np.insert(delc, 0, 0))[:-1]
X, Y = np.meshgrid(x, y)
top = dis.top.array.copy()
botm = dis.botm.array
for cell in river_cells:
k, j, i, stage = cell
if k == 0:
top[j, i] = stage
part_sum = pd.read_csv(particle_data_csv)
cols = part_sum['col'].astype(int).values
rows = part_sum['row'].astype(int).values
nrow, ncol = top.shape
xcoord = np.array([delr[:i].sum() + delr[i]/2 + mx_origin for i in cols])
ycoord = np.array([delc[:nrow - 1 - j].sum() + delc[nrow - 1 - j]/2 + my_origin for j in rows])
part_sum['m_xcoord'] = xcoord
part_sum['m_ycoord'] = ycoord
start_points = part_sum.loc[part_sum.groupby('particleid')['res_time'].idxmin()]
end_points = part_sum.loc[part_sum.groupby('particleid')['res_time'].idxmax()]
start_x = start_points['m_xcoord'].values
start_y = start_points['m_ycoord'].values
start_z = start_points['zelev'].values
end_x = end_points['m_xcoord'].values
end_y = end_points['m_ycoord'].values
end_z = end_points['zelev'].values
# --- Isometric View ---
fig = plt.figure(figsize=(18, 18))
ax = fig.add_subplot(111, projection='3d')
top_scaled = top * zfac_3d
botm_scaled = botm[-1] * zfac_3d
surf_top = ax.plot_surface(X, Y, top, rstride=1, cstride=1, edgecolor='black', linewidth=0.1, color='white', alpha=0.05, antialiased=True)
surf_bot = ax.plot_surface(X, Y, botm[-1], rstride=1, cstride=1, edgecolor='black', linewidth=0.1, color='white', alpha=0.05, antialiased=True)
y_side = y
x_side = x
Z2 = np.column_stack([botm[-1, :, 0], top[:, 0]])
ax.plot_surface(np.zeros((nrow, 2)) + x[0], np.repeat(y_side[:, None], 2, axis=1), Z2, rstride=1, cstride=1, edgecolor='black', linewidth=0.1, color='white', alpha=0.05)
Z2 = np.column_stack([botm[-1, :, -1], top[:, -1]])
ax.plot_surface(np.full((nrow, 2), x[-1]), np.repeat(y_side[:, None], 2, axis=1), Z2, rstride=1, cstride=1, edgecolor='black', linewidth=0.1, color='white', alpha=0.05)
Z2 = np.column_stack([botm[-1, 0, :], top[0, :]])
ax.plot_surface(np.repeat(x_side[:, None], 2, axis=1), np.zeros((ncol, 2)) + y[0], Z2, rstride=1, cstride=1, edgecolor='black', linewidth=0.1, color='white', alpha=0.05)
Z2 = np.column_stack([botm[-1, -1, :], top[-1, :]])
ax.plot_surface(np.repeat(x_side[:, None], 2, axis=1), np.full((ncol, 2), y[-1]), Z2, rstride=1, cstride=1, edgecolor='black', linewidth=0.1, color='white', alpha=0.05)
first_pathline = True
for particleid, group in part_sum.groupby('particleid'):
group = group.sort_values('res_time')
if first_pathline:
ax.plot(group['m_xcoord'], group['m_ycoord'], group['zelev'], color='blue', linewidth=0.2, alpha=0.8, label='Pathline')
first_pathline = False
else:
ax.plot(group['m_xcoord'], group['m_ycoord'], group['zelev'], color='blue', linewidth=0.5, alpha=0.8)
ax.scatter(end_x, end_y, end_z, color='red', s=5, label='End Points', zorder=2)
ax.scatter(start_x, start_y, start_z, color='lime', s=5, label='Start Points', zorder=1)
ax.set_box_aspect([X.max() - X.min(), Y.max() - Y.min(), top_scaled.max() - botm_scaled[-1].min()])
ax.set_xlabel('Easting (m)', labelpad=15, fontsize=12)
ax.set_ylabel('Northing (m)', labelpad=15, fontsize=12)
ax.set_zlabel('Elevation (ft)', labelpad=15, fontsize=12)
plt.legend()
ax.set_title(f'{direction} Hyporheic Isometric View')
ax.zaxis.labelpad = -0.8
fig.savefig(os.path.join(output_folder, f"{direction}_hyporheic_3d_isometric.png"), dpi=300)
plt.show()
plt.close(fig)
# --- Longitudinal View ---
fig = plt.figure(figsize=(20, 18))
ax = fig.add_subplot(111, projection='3d')
top_scaled = top * zfac_long
botm_scaled = botm[-1] * zfac_long
surf_top = ax.plot_surface(X, Y, top, rstride=1, cstride=1, edgecolor='black', linewidth=0.1, color='white', alpha=0.05, antialiased=True)
surf_bot = ax.plot_surface(X, Y, botm[-1], rstride=1, cstride=1, edgecolor='black', linewidth=0.1, color='white', alpha=0.05, antialiased=True)
Z2 = np.column_stack([botm[-1, :, 0], top[:, 0]])
ax.plot_surface(np.zeros((nrow, 2)) + x[0], np.repeat(y_side[:, None], 2, axis=1), Z2, rstride=1, cstride=1, edgecolor='black', linewidth=0.1, color='white', alpha=0.05)
Z2 = np.column_stack([botm[-1, :, -1], top[:, -1]])
ax.plot_surface(np.full((nrow, 2), x[-1]), np.repeat(y_side[:, None], 2, axis=1), Z2, rstride=1, cstride=1, edgecolor='black', linewidth=0.1, color='white', alpha=0.05)
Z2 = np.column_stack([botm[-1, 0, :], top[0, :]])
ax.plot_surface(np.repeat(x_side[:, None], 2, axis=1), np.zeros((ncol, 2)) + y[0], Z2, rstride=1, cstride=1, edgecolor='black', linewidth=0.1, color='white', alpha=0.05)
Z2 = np.column_stack([botm[-1, -1, :], top[-1, :]])
ax.plot_surface(np.repeat(x_side[:, None], 2, axis=1), np.full((ncol, 2), y[-1]), Z2, rstride=1, cstride=1, edgecolor='black', linewidth=0.1, color='white', alpha=0.05)
first_pathline = True
for particleid, group in part_sum.groupby('particleid'):
group = group.sort_values('res_time')
if first_pathline:
ax.plot(group['m_xcoord'], group['m_ycoord'], group['zelev'], color='blue', linewidth=0.5, alpha=1.0, label='Pathline')
first_pathline = False
else:
ax.plot(group['m_xcoord'], group['m_ycoord'], group['zelev'], color='blue', linewidth=0.2, alpha=0.8)
ax.scatter(end_x, end_y, end_z, color='red', s=5, label='End Points', zorder=2)
ax.scatter(start_x, start_y, start_z, color='lime', s=5, label='Start Points', zorder=1)
Y_scaled = Y * yfac_long
X_scaled = X * xfac_long
ax.set_box_aspect([X_scaled.max() - X_scaled.min(), Y_scaled.max() - Y_scaled.min(), top_scaled.max() - botm_scaled[-1].min()])
ax.set_xlabel('Easting (m)', labelpad=15, fontsize=12)
ax.set_ylabel('Northing (m)', labelpad=40, fontsize=12)
ax.set_zlabel('Elevation (ft)', labelpad=15, fontsize=12)
plt.legend()
ax.set_title(f'{direction} Hyporheic Longitudinal View')
ax.view_init(elev=1, azim=180)
fig.savefig(os.path.join(output_folder, f"{direction}_hyporheic_3d_longitudinal.png"), dpi=300)
plt.show()
plt.close(fig)
# --- Parse stats file and print publication-ready table ---
def parse_stats_file(filepath):
results = []
group = None
with open(filepath, 'r') as f:
lines = f.readlines()
for line in lines:
line = line.strip()
is_group_header = (
line and
not line.startswith(('mean:', 'median:', 'min:', 'max:', 'range:')) and
':' not in line and
not line.startswith('(')
)
is_special_group = line.startswith(('Per Cell:', 'Particle Path:'))
if is_group_header or is_special_group:
group = line
elif group and ':' in line:
stat, val = line.split(':', 1)
stat = stat.strip()
try:
value = float(val.strip())
except ValueError:
value = val.strip()
results.append({'Group': group, 'Stat': stat, 'Value': value})
df = pd.DataFrame(results)
return df
df_stats = parse_stats_file(pathline_stats_txt)
summary_csv_path = os.path.join(output_folder, save_summary_csv)
df_stats.to_csv(summary_csv_path, index=False)
def publication_ready_table(df, float_format="{:,.3f}"):
df = df.copy()
df['Group'] = df['Group'].str.strip()
df['Stat'] = df['Stat'].str.strip()
lines = []
prev_group = None
for idx, row in df.iterrows():
group, stat, value = row['Group'], row['Stat'], row['Value']
if isinstance(value, float):
if abs(value) > 1e5 or (abs(value) < 1e-3 and value != 0):
value_fmt = f"{value:.3e}"
else:
value_fmt = float_format.format(value)
else:
value_fmt = str(value)
if group != prev_group:
lines.append(f"\n**{group}**")
prev_group = group
lines.append(f" - {stat}: {value_fmt}")
return "\n".join(lines)
print(publication_ready_table(df_stats))
Run Simulations#
This section orchestrates the end-to-end simulation workflow, including model building, execution, and post-processing.
#---------------------- Simulation Scenario ------------------------#
def scenario(
river_cells,
cfg,
chd_data,
ncol,
nrow,
nlay,
z,
xorigin,
yorigin,
cell_size_x,
cell_size_y,
bed_elevation,
hec_ras_crs,
direction,
mp7_name,
gwf_name,
mp7_ws,
gwf_ws,
sim_name,
mp7_exe_path,
output_folder,
write=True,
run=True,
plot=True,
silent=False,
):
"""
Orchestrates the building, running, and plotting of the MODFLOW 6 and MODPATH 7models.
"""
# Build the GWF model using the new signature
gwfsim, gwf = build_gwf_model(cfg, chd_data, idomain)
print("GWF model built:", gwfsim)
if write:
write_models(gwfsim, silent=silent)
print("GWF files written to:", cfg.gwf_ws)
if run:
print("Running MODFLOW model...")
run_models(gwfsim, silent=False)
print("FINISHED! Running GWF MODFLOW 6")
if plot:
print("Plotting Groundwater Flow Model")
#plot_gwf_all(gwfsim)
# plot_groundwater_model(
# gwfsim,
# gwf_name=gwf_name,
# xorigin=xorigin,
# yorigin=yorigin,
# cell_size_x=cell_size_x,
# cell_size_y=cell_size_y,
# cfg=cfg
# )
try:
# Build both MODPATH 7 forward and backward models
mp_forward, mp_backward = build_particle_models(
cfg.sim_name, gwf, river_cells, mp7_ws=mp7_ws, exe_path=mp7_exe_path
)
print("MODPATH 7 forward model built:", mp_forward)
print("MODPATH 7 backward model built:", mp_backward)
if write:
write_models(mp_forward, silent=silent)
write_models(mp_backward, silent=silent)
print("MODPATH 7 files written to:", mp7_ws)
if run:
print("Running MODPATH 7 forward model...")
run_models(mp_forward, silent=silent)
print("FINISHED! Running MODPATH 7 forward model")
print("Running MODPATH 7 backward model...")
run_models(mp_backward, silent=silent)
print("FINISHED! Running MODPATH 7 backward model")
if plot:
print("Processing and Exporting MODPATH 7 Results")
process_and_export_modpath7_results(
workspace=mp7_ws,
workspace_gwf=gwf_ws,
sim_name=sim_name,
gwf_model_name=gwf_name,
hec_ras_crs= hec_ras_crs,
bed_elevation=bed_elevation,
ncol=ncol,
nrow=nrow,
z=z,
nlay=nlay,
river_cells=river_cells,
gwf=gwf,
xorigin_value=xorigin,
yorigin_value=yorigin,
direction = "Forward",
# direction=direction, # Can be used to input forward or backward processing
output_folder=output_folder,
)
print("MODPATH 7 forward results processed and exported successfully.")
process_and_export_modpath7_results( # Comment this out if you only want forward results
workspace=mp7_ws,
workspace_gwf=gwf_ws,
sim_name=sim_name,
gwf_model_name=gwf_name,
hec_ras_crs= hec_ras_crs,
bed_elevation=bed_elevation,
ncol=ncol,
nrow=nrow,
z=z,
nlay=nlay,
river_cells=river_cells,
gwf=gwf,
xorigin_value=xorigin,
yorigin_value=yorigin,
direction = "Backward",
output_folder=output_folder,
)
print("MODPATH 7 backward results processed and exported successfully.")
except Exception as e:
print(f"An error occurred while building, running, or plotting the MODPATH 7 models: {e}")
print('\a') # This will make a beep in most terminals
# Example usage (assuming you have constructed cfg, chd_data, idomain, river_cells):
scenario(
river_cells=river_cells,
cfg=cfg,
chd_data=chd_data,
mp7_ws=mp7_ws,
mp7_exe_path=md7_exe_path,
write=True,
run=True,
plot=True,
silent=True,
ncol=ncol,
nrow=nrow,
nlay=nlay,
z=z,
xorigin=xorigin,
yorigin=yorigin,
cell_size_x = cell_size_x,
cell_size_y = cell_size_y,
bed_elevation=bed_elevation,
hec_ras_crs=hec_ras_crs,
mp7_name=mp7_name,
gwf_name=gwf_name,
gwf_ws=gwf_ws,
sim_name=sim_name,
direction=direction,
output_folder=output_folder
)
GWF model built: sim_name = Hyporheic_Project
sim_path = C:\Users\u4eeevmq\Documents\Python\HyporheicFloPy\VQuintana\notebooks\HP_workspace\gwf_workspace
exe_name = C:\Users\u4eeevmq\Documents\Python\Flo_Py\flopy\modflowExe\mf6.exe
###################
Package mfsim.nam
###################
package_name = mfsim.nam
filename = mfsim.nam
package_type = nam
model_or_simulation_package = simulation
simulation_name = Hyporheic_Project
###################
Package Hyporheic_Project.tdis
###################
package_name = Hyporheic_Project.tdis
filename = Hyporheic_Project.tdis
package_type = tdis
model_or_simulation_package = simulation
simulation_name = Hyporheic_Project
###################
Package ims_-1
###################
package_name = ims_-1
filename = Hyporheic_Project.ims
package_type = ims
model_or_simulation_package = simulation
simulation_name = Hyporheic_Project
@@@@@@@@@@@@@@@@@@@@
Model gwf_model
@@@@@@@@@@@@@@@@@@@@
name = gwf_model
model_type = gwf6
version = mf6
model_relative_path = .
###################
Package dis
###################
package_name = dis
filename = gwf_model.dis
package_type = dis
model_or_simulation_package = model
model_name = gwf_model
###################
Package ic
###################
package_name = ic
filename = gwf_model.ic
package_type = ic
model_or_simulation_package = model
model_name = gwf_model
###################
Package npf
###################
package_name = npf
filename = gwf_model.npf
package_type = npf
model_or_simulation_package = model
model_name = gwf_model
###################
Package chd_0
###################
package_name = chd_0
filename = gwf_model.chd
package_type = chd
model_or_simulation_package = model
model_name = gwf_model
###################
Package oc
###################
package_name = oc
filename = gwf_model.oc
package_type = oc
model_or_simulation_package = model
model_name = gwf_model
GWF files written to: HP_workspace\gwf_workspace
Running MODFLOW model...
Running simulation: Hyporheic_Project
FloPy is using the following executable to run the model: ..\..\..\..\..\Flo_Py\flopy\modflowExe\mf6.exe
MODFLOW 6
U.S. GEOLOGICAL SURVEY MODULAR HYDROLOGIC MODEL
VERSION 6.5.0 05/23/2024
MODFLOW 6 compiled Jun 21 2024 02:57:23 with Intel(R) Fortran Intel(R) 64
Compiler Classic for applications running on Intel(R) 64, Version 2021.7.0
Build 20220726_000000
This software has been approved for release by the U.S. Geological
Survey (USGS). Although the software has been subjected to rigorous
review, the USGS reserves the right to update the software as needed
pursuant to further analysis and review. No warranty, expressed or
implied, is made by the USGS or the U.S. Government as to the
functionality of the software and related material nor shall the
fact of release constitute any such warranty. Furthermore, the
software is released on condition that neither the USGS nor the U.S.
Government shall be held liable for any damages resulting from its
authorized or unauthorized use. Also refer to the USGS Water
Resources Software User Rights Notice for complete use, copyright,
and distribution information.
MODFLOW runs in SEQUENTIAL mode
Run start date and time (yyyy/mm/dd hh:mm:ss): 2025/08/18 9:25:09
Writing simulation list file: mfsim.lst
Using Simulation name file: mfsim.nam
Solving: Stress period: 1 Time step: 1
Run end date and time (yyyy/mm/dd hh:mm:ss): 2025/08/18 9:25:17
Elapsed run time: 7.829 Seconds
Normal termination of simulation.
Simulation Hyporheic_Project succeeded.
run_models took 7905.13 ms
FINISHED! Running GWF MODFLOW 6
Plotting Groundwater Flow Model
MODPATH 7 forward model built: MODPATH 7 model
MODPATH 7 backward model built: MODPATH 7 model
MODPATH 7 files written to: HP_workspace\mp7_workspace
Running MODPATH 7 forward model...
Running model: Hyporheic_Project_mp_forward
Simulation Hyporheic_Project_mp_forward succeeded.
run_models took 97273.67 ms
FINISHED! Running MODPATH 7 forward model
Running MODPATH 7 backward model...
Running model: Hyporheic_Project_mp_backward
Simulation Hyporheic_Project_mp_backward succeeded.
run_models took 96540.63 ms
FINISHED! Running MODPATH 7 backward model
Processing and Exporting MODPATH 7 Results
C:\Users\u4eeevmq\AppData\Local\Temp\ipykernel_21176\1915477162.py:81: DeprecationWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.
lengths = grouped_pathlines.apply(pathline_length)
Statistics exported to Hyporheic_output\Forward_pathline_stats.txt
Available budget record types in CellBudgetFile:
[np.bytes_(b' FLOW-JA-FACE'), np.bytes_(b' DATA-SPDIS'), np.bytes_(b' DATA-SAT'), np.bytes_(b' CHD')]
Budget array shape: (1, 1, 2191822)
FLOW-JA-FACE array shape: (1, 1, 2191822)
Start cells: 1233
End cells: 28
Start cell ranges:
Elevation: 1599 to 1602
Row: 145 to 253
Col: 206 to 275
End cell ranges:
Elevation: 1599 to 1602
Row: 156 to 254
Col: 229 to 276
Layer thicknesses shape: (40, 385, 431)
Layer 0 thickness range: 0.0625 to 43.0625
Other layers thickness (should be 0.5 ft): [0.5]
WARNING: No layer found for z=1601, row=166, col=235
DEBUG: For (row=166, col=235), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=167, col=235
DEBUG: For (row=167, col=235), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1602, row=157, col=239
DEBUG: For (row=157, col=239), z=1602, model top=1600.8125, model bottom=1580.3125
WARNING: No layer found for z=1601, row=154, col=237
DEBUG: For (row=154, col=237), z=1601, model top=1600.75, model bottom=1580.3125
WARNING: No layer found for z=1601, row=155, col=238
DEBUG: For (row=155, col=238), z=1601, model top=1600.75, model bottom=1580.3125
WARNING: No layer found for z=1601, row=169, col=235
DEBUG: For (row=169, col=235), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1602, row=168, col=238
DEBUG: For (row=168, col=238), z=1602, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=170, col=236
DEBUG: For (row=170, col=236), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=158, col=238
DEBUG: For (row=158, col=238), z=1601, model top=1600.84375, model bottom=1580.3125
WARNING: No layer found for z=1601, row=180, col=234
DEBUG: For (row=180, col=234), z=1601, model top=1600.9375, model bottom=1580.3125
WARNING: No layer found for z=1601, row=172, col=235
DEBUG: For (row=172, col=235), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=161, col=234
DEBUG: For (row=161, col=234), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=171, col=237
DEBUG: For (row=171, col=237), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=164, col=234
DEBUG: For (row=164, col=234), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=156, col=235
DEBUG: For (row=156, col=235), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1602, row=156, col=239
DEBUG: For (row=156, col=239), z=1602, model top=1600.78125, model bottom=1580.3125
WARNING: No layer found for z=1601, row=152, col=237
DEBUG: For (row=152, col=237), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=153, col=238
DEBUG: For (row=153, col=238), z=1601, model top=1600.6875, model bottom=1580.3125
WARNING: No layer found for z=1602, row=166, col=238
DEBUG: For (row=166, col=238), z=1602, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=167, col=234
DEBUG: For (row=167, col=234), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=168, col=235
DEBUG: For (row=168, col=235), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=155, col=237
DEBUG: For (row=155, col=237), z=1601, model top=1600.78125, model bottom=1580.3125
WARNING: No layer found for z=1601, row=156, col=238
DEBUG: For (row=156, col=238), z=1601, model top=1600.78125, model bottom=1580.3125
WARNING: No layer found for z=1601, row=178, col=234
DEBUG: For (row=178, col=234), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=170, col=235
DEBUG: For (row=170, col=235), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=166, col=237
DEBUG: For (row=166, col=237), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=158, col=237
DEBUG: For (row=158, col=237), z=1601, model top=1600.875, model bottom=1580.3125
WARNING: No layer found for z=1601, row=154, col=239
DEBUG: For (row=154, col=239), z=1601, model top=1600.71875, model bottom=1580.3125
WARNING: No layer found for z=1601, row=181, col=234
DEBUG: For (row=181, col=234), z=1601, model top=1600.9375, model bottom=1580.3125
WARNING: No layer found for z=1601, row=169, col=237
DEBUG: For (row=169, col=237), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=161, col=233
DEBUG: For (row=161, col=233), z=1601, model top=1600.9375, model bottom=1580.3125
WARNING: No layer found for z=1601, row=162, col=234
DEBUG: For (row=162, col=234), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=184, col=234
DEBUG: For (row=184, col=234), z=1601, model top=1600.96875, model bottom=1580.3125
WARNING: No layer found for z=1601, row=172, col=237
DEBUG: For (row=172, col=237), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=165, col=234
DEBUG: For (row=165, col=234), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=161, col=236
DEBUG: For (row=161, col=236), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=153, col=237
DEBUG: For (row=153, col=237), z=1601, model top=1600.8125, model bottom=1580.3125
WARNING: No layer found for z=1602, row=167, col=238
DEBUG: For (row=167, col=238), z=1602, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=168, col=234
DEBUG: For (row=168, col=234), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=164, col=236
DEBUG: For (row=164, col=236), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=156, col=237
DEBUG: For (row=156, col=237), z=1601, model top=1600.8125, model bottom=1580.3125
WARNING: No layer found for z=1601, row=152, col=239
DEBUG: For (row=152, col=239), z=1601, model top=1600.625, model bottom=1580.3125
WARNING: No layer found for z=1602, row=166, col=240
DEBUG: For (row=166, col=240), z=1602, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=167, col=236
DEBUG: For (row=167, col=236), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=160, col=233
DEBUG: For (row=160, col=233), z=1601, model top=1600.96875, model bottom=1580.3125
WARNING: No layer found for z=1601, row=155, col=239
DEBUG: For (row=155, col=239), z=1601, model top=1600.75, model bottom=1580.3125
WARNING: No layer found for z=1601, row=170, col=237
DEBUG: For (row=170, col=237), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=162, col=233
DEBUG: For (row=162, col=233), z=1601, model top=1600.9375, model bottom=1580.3125
WARNING: No layer found for z=1601, row=163, col=233
DEBUG: For (row=163, col=233), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=161, col=235
DEBUG: For (row=161, col=235), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=162, col=236
DEBUG: For (row=162, col=236), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=150, col=238
DEBUG: For (row=150, col=238), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=164, col=235
DEBUG: For (row=164, col=235), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=165, col=236
DEBUG: For (row=165, col=236), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1602, row=164, col=239
DEBUG: For (row=164, col=239), z=1602, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1602, row=156, col=240
DEBUG: For (row=156, col=240), z=1602, model top=1600.78125, model bottom=1580.3125
WARNING: No layer found for z=1601, row=153, col=239
DEBUG: For (row=153, col=239), z=1601, model top=1600.65625, model bottom=1580.3125
WARNING: No layer found for z=1602, row=166, col=239
DEBUG: For (row=166, col=239), z=1602, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=168, col=236
DEBUG: For (row=168, col=236), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=178, col=235
DEBUG: For (row=178, col=235), z=1601, model top=1600.96875, model bottom=1580.3125
WARNING: No layer found for z=1601, row=179, col=235
DEBUG: For (row=179, col=235), z=1601, model top=1600.96875, model bottom=1580.3125
WARNING: No layer found for z=1601, row=159, col=234
DEBUG: For (row=159, col=234), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=162, col=235
DEBUG: For (row=162, col=235), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1602, row=161, col=238
DEBUG: For (row=161, col=238), z=1602, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=163, col=235
DEBUG: For (row=163, col=235), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=151, col=238
DEBUG: For (row=151, col=238), z=1601, model top=1600.6875, model bottom=1580.3125
WARNING: No layer found for z=1601, row=165, col=235
DEBUG: For (row=165, col=235), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1602, row=164, col=238
DEBUG: For (row=164, col=238), z=1602, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1602, row=165, col=239
DEBUG: For (row=165, col=239), z=1602, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=161, col=237
DEBUG: For (row=161, col=237), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1602, row=167, col=239
DEBUG: For (row=167, col=239), z=1602, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=164, col=237
DEBUG: For (row=164, col=237), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=179, col=234
DEBUG: For (row=179, col=234), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=167, col=237
DEBUG: For (row=167, col=237), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1602, row=159, col=238
DEBUG: For (row=159, col=238), z=1602, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=160, col=234
DEBUG: For (row=160, col=234), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1602, row=166, col=231
DEBUG: For (row=166, col=231), z=1602, model top=1601.28125, model bottom=1580.3125
WARNING: No layer found for z=1602, row=162, col=238
DEBUG: For (row=162, col=238), z=1602, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=163, col=234
DEBUG: For (row=163, col=234), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1602, row=163, col=239
DEBUG: For (row=163, col=239), z=1602, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=159, col=236
DEBUG: For (row=159, col=236), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1602, row=165, col=238
DEBUG: For (row=165, col=238), z=1602, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=162, col=237
DEBUG: For (row=162, col=237), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=150, col=239
DEBUG: For (row=150, col=239), z=1601, model top=1600.625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=177, col=234
DEBUG: For (row=177, col=234), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=173, col=236
DEBUG: For (row=173, col=236), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=165, col=237
DEBUG: For (row=165, col=237), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=168, col=237
DEBUG: For (row=168, col=237), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=157, col=236
DEBUG: For (row=157, col=236), z=1601, model top=1600.84375, model bottom=1580.3125
WARNING: No layer found for z=1602, row=163, col=238
DEBUG: For (row=163, col=238), z=1602, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=159, col=235
DEBUG: For (row=159, col=235), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=160, col=236
DEBUG: For (row=160, col=236), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=163, col=236
DEBUG: For (row=163, col=236), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=151, col=239
DEBUG: For (row=151, col=239), z=1601, model top=1600.625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=173, col=235
DEBUG: For (row=173, col=235), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=174, col=236
DEBUG: For (row=174, col=236), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1602, row=165, col=240
DEBUG: For (row=165, col=240), z=1602, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=176, col=235
DEBUG: For (row=176, col=235), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=157, col=235
DEBUG: For (row=157, col=235), z=1601, model top=1600.875, model bottom=1580.3125
WARNING: No layer found for z=1601, row=158, col=235
DEBUG: For (row=158, col=235), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=160, col=235
DEBUG: For (row=160, col=235), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=157, col=238
DEBUG: For (row=157, col=238), z=1601, model top=1600.8125, model bottom=1580.3125
WARNING: No layer found for z=1601, row=149, col=239
DEBUG: For (row=149, col=239), z=1601, model top=1600.71875, model bottom=1580.3125
WARNING: No layer found for z=1602, row=166, col=232
DEBUG: For (row=166, col=232), z=1602, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1602, row=167, col=233
DEBUG: For (row=167, col=233), z=1602, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=159, col=237
DEBUG: For (row=159, col=237), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=174, col=235
DEBUG: For (row=174, col=235), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=175, col=235
DEBUG: For (row=175, col=235), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=177, col=235
DEBUG: For (row=177, col=235), z=1601, model top=1600.9375, model bottom=1580.3125
WARNING: No layer found for z=1601, row=173, col=237
DEBUG: For (row=173, col=237), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=166, col=234
DEBUG: For (row=166, col=234), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=158, col=234
DEBUG: For (row=158, col=234), z=1601, model top=1600.96875, model bottom=1580.3125
WARNING: No layer found for z=1602, row=158, col=239
DEBUG: For (row=158, col=239), z=1602, model top=1600.84375, model bottom=1580.3125
WARNING: No layer found for z=1601, row=169, col=234
DEBUG: For (row=169, col=234), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1602, row=160, col=238
DEBUG: For (row=160, col=238), z=1602, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=157, col=237
DEBUG: For (row=157, col=237), z=1601, model top=1600.84375, model bottom=1580.3125
WARNING: No layer found for z=1601, row=160, col=237
DEBUG: For (row=160, col=237), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=171, col=236
DEBUG: For (row=171, col=236), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=164, col=233
DEBUG: For (row=164, col=233), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=163, col=237
DEBUG: For (row=163, col=237), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=186, col=234
DEBUG: For (row=186, col=234), z=1601, model top=1600.96875, model bottom=1580.3125
WARNING: No layer found for z=1601, row=174, col=237
DEBUG: For (row=174, col=237), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=166, col=233
DEBUG: For (row=166, col=233), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1602, row=154, col=240
DEBUG: For (row=154, col=240), z=1602, model top=1600.6875, model bottom=1580.3125
WARNING: No layer found for z=1601, row=155, col=236
DEBUG: For (row=155, col=236), z=1601, model top=1600.84375, model bottom=1580.3125
WARNING: No layer found for z=1601, row=170, col=234
DEBUG: For (row=170, col=234), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=166, col=236
DEBUG: For (row=166, col=236), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=158, col=236
DEBUG: For (row=158, col=236), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=154, col=238
DEBUG: For (row=154, col=238), z=1601, model top=1600.71875, model bottom=1580.3125
WARNING: No layer found for z=1601, row=169, col=236
DEBUG: For (row=169, col=236), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=171, col=235
DEBUG: For (row=171, col=235), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=172, col=236
DEBUG: For (row=172, col=236), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=165, col=233
DEBUG: For (row=165, col=233), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=175, col=236
DEBUG: For (row=175, col=236), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=168, col=233
DEBUG: For (row=168, col=233), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1602, row=155, col=240
DEBUG: For (row=155, col=240), z=1602, model top=1600.71875, model bottom=1580.3125
WARNING: No layer found for z=1601, row=156, col=236
DEBUG: For (row=156, col=236), z=1601, model top=1600.8125, model bottom=1580.3125
WARNING: No layer found for z=1601, row=152, col=238
DEBUG: For (row=152, col=238), z=1601, model top=1600.65625, model bottom=1580.3125
First 5 start cells with layer info:
layer row col z
0 0 163 229 1601
1 0 155 225 1601
2 0 156 226 1601
3 0 233 237 1600
4 0 159 231 1601
First 5 end cells with layer info:
layer row col z
0 0 254 267 1600
1 2 156 257 1599
2 0 186 230 1602
3 0 247 246 1600
4 0 246 245 1601
<class 'flopy.discretization.structuredgrid.StructuredGrid'>
Number of cells per layer (ncpl): 165935
flow_ja_face shape: (1, 1, 2191822)
Processing start cell: layer=0, row=163, col=229
Processing start cell: layer=0, row=155, col=225
Processing start cell: layer=0, row=156, col=226
Processing start cell: layer=0, row=233, col=237
Processing start cell: layer=0, row=159, col=231
Processing start cell: layer=0, row=232, col=241
Processing start cell: layer=0, row=225, col=238
Processing start cell: layer=0, row=217, col=234
Processing start cell: layer=0, row=236, col=247
Processing start cell: layer=0, row=151, col=232
Processing start cell: layer=0, row=228, col=243
Processing start cell: layer=0, row=229, col=244
Processing start cell: layer=0, row=221, col=240
Processing start cell: layer=0, row=147, col=234
Processing start cell: layer=0, row=159, col=208
Processing start cell: layer=0, row=232, col=254
Processing start cell: layer=0, row=224, col=250
Processing start cell: layer=2, row=248, col=266
Processing start cell: layer=0, row=155, col=215
Processing start cell: layer=0, row=198, col=233
Processing start cell: layer=0, row=158, col=225
Processing start cell: layer=0, row=247, col=247
Processing start cell: layer=0, row=162, col=232
Processing start cell: layer=0, row=151, col=222
Processing start cell: layer=0, row=154, col=227
Processing start cell: layer=0, row=239, col=248
Processing start cell: layer=0, row=231, col=244
Processing start cell: layer=0, row=242, col=253
Processing start cell: layer=0, row=187, col=237
Processing start cell: layer=0, row=220, col=234
Processing start cell: layer=0, row=223, col=239
Processing start cell: layer=0, row=243, col=254
Processing start cell: layer=0, row=235, col=250
Processing start cell: layer=0, row=232, col=244
Processing start cell: layer=0, row=192, col=231
Processing start cell: layer=0, row=224, col=240
Processing start cell: layer=0, row=216, col=236
Processing start cell: layer=0, row=161, col=212
Processing start cell: layer=0, row=150, col=234
Processing start cell: layer=2, row=250, col=266
Processing start cell: layer=0, row=246, col=264
Processing start cell: layer=0, row=217, col=237
Processing start cell: layer=0, row=209, col=233
Processing start cell: layer=0, row=227, col=250
Processing start cell: layer=0, row=219, col=246
Processing start cell: layer=2, row=251, col=266
Processing start cell: layer=0, row=201, col=234
Processing start cell: layer=0, row=158, col=215
Processing start cell: layer=0, row=154, col=217
Processing start cell: layer=0, row=165, col=232
Processing start cell: layer=0, row=157, col=228
Processing start cell: layer=0, row=235, col=240
Processing start cell: layer=0, row=245, col=253
Processing start cell: layer=0, row=158, col=228
Processing start cell: layer=0, row=150, col=224
Processing start cell: layer=0, row=238, col=250
Processing start cell: layer=0, row=153, col=235
Processing start cell: layer=0, row=230, col=246
Processing start cell: layer=0, row=227, col=240
Processing start cell: layer=0, row=219, col=236
Processing start cell: layer=0, row=239, col=251
Processing start cell: layer=0, row=211, col=232
Processing start cell: layer=0, row=231, col=247
Processing start cell: layer=0, row=242, col=256
Processing start cell: layer=0, row=241, col=260
Processing start cell: layer=0, row=220, col=237
Processing start cell: layer=0, row=212, col=233
Processing start cell: layer=0, row=223, col=242
Processing start cell: layer=0, row=234, col=257
Processing start cell: layer=2, row=249, col=268
Processing start cell: layer=2, row=250, col=269
Processing start cell: layer=2, row=239, col=259
Processing start cell: layer=0, row=184, col=235
Processing start cell: layer=0, row=157, col=218
Processing start cell: layer=0, row=193, col=233
Processing start cell: layer=0, row=160, col=228
Processing start cell: layer=0, row=238, col=240
Processing start cell: layer=0, row=153, col=225
Processing start cell: layer=0, row=230, col=236
Processing start cell: layer=0, row=231, col=237
Processing start cell: layer=0, row=157, col=231
Processing start cell: layer=0, row=241, col=250
Processing start cell: layer=0, row=233, col=246
Processing start cell: layer=0, row=234, col=247
Processing start cell: layer=0, row=149, col=232
Processing start cell: layer=0, row=226, col=243
Processing start cell: layer=0, row=218, col=239
Processing start cell: layer=0, row=237, col=252
Processing start cell: layer=0, row=215, col=233
Processing start cell: layer=0, row=187, col=231
Processing start cell: layer=0, row=230, col=249
Processing start cell: layer=0, row=186, col=235
Processing start cell: layer=2, row=252, col=268
Processing start cell: layer=0, row=229, col=253
Processing start cell: layer=0, row=157, col=208
Processing start cell: layer=0, row=219, col=239
Processing start cell: layer=0, row=211, col=235
Processing start cell: layer=2, row=253, col=269
Processing start cell: layer=0, row=203, col=236
Processing start cell: layer=0, row=195, col=232
Processing start cell: layer=0, row=196, col=233
Processing start cell: layer=0, row=192, col=235
Processing start cell: layer=0, row=156, col=225
Processing start cell: layer=0, row=244, col=245
Processing start cell: layer=0, row=159, col=230
Processing start cell: layer=0, row=245, col=246
Processing start cell: layer=0, row=160, col=231
Processing start cell: layer=0, row=237, col=242
Processing start cell: layer=0, row=152, col=227
Processing start cell: layer=0, row=229, col=243
Processing start cell: layer=0, row=221, col=239
Processing start cell: layer=0, row=240, col=252
Processing start cell: layer=0, row=147, col=233
Processing start cell: layer=0, row=190, col=231
Processing start cell: layer=0, row=222, col=240
Processing start cell: layer=0, row=241, col=253
Processing start cell: layer=0, row=214, col=236
Processing start cell: layer=0, row=233, col=249
Processing start cell: layer=0, row=148, col=234
Processing start cell: layer=0, row=160, col=208
Processing start cell: layer=0, row=225, col=250
Processing start cell: layer=0, row=206, col=236
Processing start cell: layer=2, row=252, col=271
Processing start cell: layer=2, row=251, col=275
Processing start cell: layer=0, row=156, col=215
Processing start cell: layer=0, row=195, col=235
Processing start cell: layer=0, row=163, col=231
Processing start cell: layer=0, row=155, col=227
Processing start cell: layer=0, row=243, col=253
Processing start cell: layer=0, row=156, col=228
Processing start cell: layer=0, row=159, col=233
Processing start cell: layer=0, row=232, col=243
Processing start cell: layer=0, row=225, col=240
Processing start cell: layer=0, row=217, col=236
Processing start cell: layer=0, row=236, col=249
Processing start cell: layer=0, row=209, col=232
Processing start cell: layer=0, row=151, col=234
Processing start cell: layer=0, row=228, col=245
Processing start cell: layer=0, row=210, col=233
Processing start cell: layer=0, row=221, col=242
Processing start cell: layer=0, row=147, col=236
Processing start cell: layer=0, row=188, col=237
Processing start cell: layer=0, row=159, col=210
Processing start cell: layer=0, row=232, col=256
Processing start cell: layer=0, row=154, col=216
Processing start cell: layer=0, row=155, col=217
Processing start cell: layer=0, row=198, col=235
Processing start cell: layer=0, row=235, col=239
Processing start cell: layer=0, row=158, col=227
Processing start cell: layer=0, row=247, col=249
Processing start cell: layer=0, row=236, col=239
Processing start cell: layer=0, row=151, col=224
Processing start cell: layer=0, row=228, col=235
Processing start cell: layer=0, row=154, col=229
Processing start cell: layer=0, row=239, col=250
Processing start cell: layer=0, row=231, col=246
Processing start cell: layer=0, row=242, col=255
Processing start cell: layer=0, row=220, col=236
Processing start cell: layer=0, row=212, col=232
Processing start cell: layer=0, row=223, col=241
Processing start cell: layer=0, row=235, col=252
Processing start cell: layer=0, row=213, col=233
Processing start cell: layer=0, row=232, col=246
Processing start cell: layer=0, row=224, col=242
Processing start cell: layer=0, row=216, col=238
Processing start cell: layer=0, row=150, col=236
Processing start cell: layer=2, row=250, col=268
Processing start cell: layer=0, row=246, col=266
Processing start cell: layer=0, row=249, col=271
Processing start cell: layer=0, row=209, col=235
Processing start cell: layer=0, row=227, col=252
Processing start cell: layer=2, row=251, col=268
Processing start cell: layer=0, row=193, col=232
Processing start cell: layer=0, row=180, col=236
Processing start cell: layer=0, row=157, col=221
Processing start cell: layer=0, row=194, col=232
Processing start cell: layer=0, row=154, col=219
Processing start cell: layer=0, row=242, col=245
Processing start cell: layer=0, row=157, col=230
Processing start cell: layer=0, row=235, col=242
Processing start cell: layer=0, row=234, col=246
Processing start cell: layer=0, row=237, col=251
Processing start cell: layer=0, row=150, col=226
Processing start cell: layer=0, row=187, col=230
Processing start cell: layer=0, row=238, col=252
Processing start cell: layer=0, row=230, col=248
Processing start cell: layer=0, row=227, col=242
Processing start cell: layer=0, row=219, col=238
Processing start cell: layer=0, row=211, col=234
Processing start cell: layer=0, row=231, col=249
Processing start cell: layer=2, row=253, col=268
Processing start cell: layer=0, row=220, col=239
Processing start cell: layer=0, row=212, col=235
Processing start cell: layer=0, row=223, col=244
Processing start cell: layer=0, row=158, col=207
Processing start cell: layer=2, row=249, col=270
Processing start cell: layer=0, row=196, col=232
Processing start cell: layer=0, row=183, col=236
Processing start cell: layer=2, row=250, col=271
Processing start cell: layer=0, row=192, col=234
Processing start cell: layer=0, row=175, col=237
Processing start cell: layer=0, row=193, col=235
Processing start cell: layer=0, row=245, col=245
Processing start cell: layer=0, row=160, col=230
Processing start cell: layer=0, row=237, col=241
Processing start cell: layer=0, row=152, col=226
Processing start cell: layer=0, row=246, col=246
Processing start cell: layer=0, row=238, col=242
Processing start cell: layer=0, row=153, col=227
Processing start cell: layer=0, row=230, col=238
Processing start cell: layer=0, row=190, col=230
Processing start cell: layer=0, row=222, col=239
Processing start cell: layer=0, row=241, col=252
Processing start cell: layer=0, row=233, col=248
Processing start cell: layer=0, row=148, col=233
Processing start cell: layer=0, row=191, col=231
Processing start cell: layer=0, row=234, col=249
Processing start cell: layer=0, row=149, col=234
Processing start cell: layer=0, row=226, col=245
Processing start cell: layer=0, row=218, col=241
Processing start cell: layer=0, row=237, col=254
Processing start cell: layer=0, row=215, col=235
Processing start cell: layer=0, row=145, col=236
Processing start cell: layer=2, row=252, col=270
Processing start cell: layer=0, row=229, col=255
Processing start cell: layer=0, row=157, col=210
Processing start cell: layer=0, row=208, col=232
Processing start cell: layer=0, row=211, col=237
Processing start cell: layer=0, row=159, col=224
Processing start cell: layer=0, row=195, col=234
Processing start cell: layer=0, row=153, col=217
Processing start cell: layer=0, row=164, col=226
Processing start cell: layer=0, row=196, col=235
Processing start cell: layer=0, row=163, col=230
Processing start cell: layer=0, row=156, col=227
Processing start cell: layer=0, row=233, col=238
Processing start cell: layer=0, row=244, col=247
Processing start cell: layer=0, row=159, col=232
Processing start cell: layer=0, row=234, col=239
Processing start cell: layer=0, row=226, col=235
Processing start cell: layer=0, row=237, col=244
Processing start cell: layer=0, row=152, col=229
Processing start cell: layer=0, row=236, col=248
Processing start cell: layer=0, row=210, col=232
Processing start cell: layer=0, row=229, col=245
Processing start cell: layer=0, row=221, col=241
Processing start cell: layer=0, row=240, col=254
Processing start cell: layer=0, row=147, col=235
Processing start cell: layer=0, row=159, col=209
Processing start cell: layer=0, row=190, col=233
Processing start cell: layer=0, row=222, col=242
Processing start cell: layer=0, row=214, col=238
Processing start cell: layer=0, row=233, col=251
Processing start cell: layer=0, row=148, col=236
Processing start cell: layer=0, row=189, col=237
Processing start cell: layer=0, row=160, col=210
Processing start cell: layer=0, row=232, col=255
Processing start cell: layer=2, row=248, col=267
Processing start cell: layer=0, row=155, col=216
Processing start cell: layer=0, row=198, col=234
Processing start cell: layer=0, row=178, col=236
Processing start cell: layer=0, row=166, col=230
Processing start cell: layer=0, row=156, col=217
Processing start cell: layer=0, row=247, col=248
Processing start cell: layer=0, row=152, col=219
Processing start cell: layer=0, row=151, col=223
Processing start cell: layer=0, row=228, col=234
Processing start cell: layer=0, row=154, col=228
Processing start cell: layer=0, row=240, col=244
Processing start cell: layer=0, row=155, col=229
Processing start cell: layer=0, row=235, col=251
Processing start cell: layer=0, row=232, col=245
Processing start cell: layer=0, row=192, col=232
Processing start cell: layer=0, row=224, col=241
Processing start cell: layer=0, row=150, col=235
Processing start cell: layer=0, row=247, col=261
Processing start cell: layer=0, row=225, col=242
Processing start cell: layer=0, row=185, col=229
Processing start cell: layer=0, row=217, col=238
Processing start cell: layer=0, row=236, col=251
Processing start cell: layer=0, row=209, col=234
Processing start cell: layer=0, row=151, col=236
Processing start cell: layer=0, row=228, col=247
Processing start cell: layer=0, row=210, col=235
Processing start cell: layer=2, row=251, col=267
Processing start cell: layer=0, row=147, col=238
Processing start cell: layer=0, row=180, col=235
Processing start cell: layer=0, row=159, col=212
Processing start cell: layer=0, row=181, col=236
Processing start cell: layer=0, row=154, col=218
Processing start cell: layer=0, row=155, col=219
Processing start cell: layer=0, row=243, col=245
Processing start cell: layer=0, row=235, col=241
Processing start cell: layer=0, row=158, col=229
Processing start cell: layer=0, row=150, col=225
Processing start cell: layer=0, row=151, col=226
Processing start cell: layer=0, row=228, col=237
Processing start cell: layer=0, row=154, col=231
Processing start cell: layer=0, row=239, col=252
Processing start cell: layer=0, row=231, col=248
Processing start cell: layer=0, row=242, col=257
Processing start cell: layer=0, row=220, col=238
Processing start cell: layer=0, row=212, col=234
Processing start cell: layer=0, row=223, col=243
Processing start cell: layer=0, row=235, col=254
Processing start cell: layer=0, row=158, col=206
Processing start cell: layer=0, row=213, col=235
Processing start cell: layer=0, row=224, col=244
Processing start cell: layer=0, row=216, col=240
Processing start cell: layer=2, row=250, col=270
Processing start cell: layer=0, row=184, col=236
Processing start cell: layer=0, row=193, col=234
Processing start cell: layer=0, row=238, col=241
Processing start cell: layer=0, row=230, col=237
Processing start cell: layer=0, row=239, col=242
Processing start cell: layer=0, row=231, col=238
Processing start cell: layer=0, row=242, col=247
Processing start cell: layer=0, row=157, col=232
Processing start cell: layer=0, row=223, col=233
Processing start cell: layer=0, row=234, col=248
Processing start cell: layer=0, row=226, col=244
Processing start cell: layer=0, row=237, col=253
Processing start cell: layer=0, row=215, col=234
Processing start cell: layer=0, row=238, col=254
Processing start cell: layer=0, row=230, col=250
Processing start cell: layer=0, row=249, col=263
Processing start cell: layer=0, row=157, col=209
Processing start cell: layer=0, row=227, col=244
Processing start cell: layer=0, row=219, col=240
Processing start cell: layer=0, row=211, col=236
Processing start cell: layer=0, row=212, col=237
Processing start cell: layer=0, row=204, col=233
Processing start cell: layer=0, row=158, col=209
Processing start cell: layer=0, row=196, col=234
Processing start cell: layer=0, row=244, col=246
Processing start cell: layer=0, row=234, col=238
Processing start cell: layer=0, row=226, col=234
Processing start cell: layer=0, row=245, col=247
Processing start cell: layer=0, row=160, col=232
Processing start cell: layer=0, row=237, col=243
Processing start cell: layer=0, row=152, col=228
Processing start cell: layer=0, row=238, col=244
Processing start cell: layer=0, row=153, col=229
Processing start cell: layer=0, row=230, col=240
Processing start cell: layer=0, row=227, col=234
Processing start cell: layer=0, row=240, col=253
Processing start cell: layer=0, row=190, col=232
Processing start cell: layer=0, row=222, col=241
Processing start cell: layer=0, row=241, col=254
Processing start cell: layer=0, row=214, col=237
Processing start cell: layer=0, row=233, col=250
Processing start cell: layer=0, row=148, col=235
Processing start cell: layer=0, row=160, col=209
Processing start cell: layer=0, row=191, col=233
Processing start cell: layer=0, row=234, col=251
Processing start cell: layer=0, row=149, col=236
Processing start cell: layer=0, row=226, col=247
Processing start cell: layer=0, row=218, col=243
Processing start cell: layer=0, row=237, col=256
Processing start cell: layer=0, row=215, col=237
Processing start cell: layer=0, row=207, col=233
Processing start cell: layer=2, row=252, col=272
Processing start cell: layer=0, row=157, col=212
Processing start cell: layer=0, row=156, col=216
Processing start cell: layer=0, row=153, col=219
Processing start cell: layer=0, row=248, col=247
Processing start cell: layer=0, row=163, col=232
Processing start cell: layer=0, row=240, col=243
Processing start cell: layer=0, row=155, col=228
Processing start cell: layer=0, row=241, col=244
Processing start cell: layer=0, row=156, col=229
Processing start cell: layer=0, row=233, col=240
Processing start cell: layer=0, row=244, col=249
Processing start cell: layer=0, row=226, col=237
Processing start cell: layer=0, row=218, col=233
Processing start cell: layer=0, row=152, col=231
Processing start cell: layer=0, row=225, col=241
Processing start cell: layer=0, row=236, col=250
Processing start cell: layer=0, row=151, col=235
Processing start cell: layer=0, row=228, col=246
Processing start cell: layer=0, row=210, col=234
Processing start cell: layer=0, row=229, col=247
Processing start cell: layer=0, row=221, col=243
Processing start cell: layer=0, row=240, col=256
Processing start cell: layer=0, row=147, col=237
Processing start cell: layer=0, row=159, col=211
Processing start cell: layer=0, row=222, col=244
Processing start cell: layer=0, row=214, col=240
Processing start cell: layer=0, row=148, col=238
Processing start cell: layer=0, row=181, col=235
Processing start cell: layer=0, row=160, col=212
Processing start cell: layer=0, row=182, col=236
Processing start cell: layer=0, row=155, col=218
Processing start cell: layer=0, row=156, col=219
Processing start cell: layer=0, row=247, col=250
Processing start cell: layer=0, row=236, col=240
Processing start cell: layer=0, row=151, col=225
Processing start cell: layer=0, row=228, col=236
Processing start cell: layer=0, row=154, col=230
Processing start cell: layer=0, row=229, col=237
Processing start cell: layer=0, row=221, col=233
Processing start cell: layer=0, row=240, col=246
Processing start cell: layer=0, row=155, col=231
Processing start cell: layer=0, row=235, col=253
Processing start cell: layer=0, row=213, col=234
Processing start cell: layer=0, row=232, col=247
Processing start cell: layer=0, row=224, col=243
Processing start cell: layer=0, row=216, col=239
Processing start cell: layer=0, row=150, col=237
Processing start cell: layer=0, row=247, col=263
Processing start cell: layer=0, row=246, col=267
Processing start cell: layer=0, row=225, col=244
Processing start cell: layer=0, row=217, col=240
Processing start cell: layer=0, row=236, col=253
Processing start cell: layer=0, row=209, col=236
Processing start cell: layer=0, row=228, col=249
Processing start cell: layer=0, row=250, col=273
Processing start cell: layer=2, row=251, col=269
Processing start cell: layer=0, row=180, col=237
Processing start cell: layer=0, row=157, col=222
Processing start cell: layer=0, row=194, col=233
Processing start cell: layer=0, row=154, col=220
Processing start cell: layer=0, row=242, col=246
Processing start cell: layer=0, row=155, col=221
Processing start cell: layer=0, row=243, col=247
Processing start cell: layer=0, row=235, col=243
Processing start cell: layer=0, row=232, col=237
Processing start cell: layer=0, row=224, col=233
Processing start cell: layer=0, row=158, col=231
Processing start cell: layer=0, row=150, col=227
Processing start cell: layer=0, row=238, col=253
Processing start cell: layer=0, row=249, col=262
Processing start cell: layer=0, row=151, col=228
Processing start cell: layer=0, row=154, col=233
Processing start cell: layer=0, row=227, col=243
Processing start cell: layer=0, row=239, col=254
Processing start cell: layer=0, row=231, col=250
Processing start cell: layer=0, row=242, col=259
Processing start cell: layer=0, row=188, col=231
Processing start cell: layer=0, row=220, col=240
Processing start cell: layer=0, row=212, col=236
Processing start cell: layer=0, row=204, col=232
Processing start cell: layer=0, row=146, col=234
Processing start cell: layer=0, row=223, col=245
Processing start cell: layer=0, row=158, col=208
Processing start cell: layer=0, row=213, col=237
Processing start cell: layer=0, row=205, col=233
Processing start cell: layer=0, row=216, col=242
Processing start cell: layer=0, row=183, col=237
Processing start cell: layer=2, row=250, col=272
Processing start cell: layer=0, row=161, col=227
Processing start cell: layer=0, row=246, col=247
Processing start cell: layer=0, row=238, col=243
Processing start cell: layer=0, row=153, col=228
Processing start cell: layer=0, row=230, col=239
Processing start cell: layer=0, row=239, col=244
Processing start cell: layer=0, row=231, col=240
Processing start cell: layer=0, row=242, col=249
Processing start cell: layer=0, row=157, col=234
Processing start cell: layer=0, row=223, col=235
Processing start cell: layer=0, row=234, col=250
Processing start cell: layer=0, row=149, col=235
Processing start cell: layer=0, row=226, col=246
Processing start cell: layer=0, row=218, col=242
Processing start cell: layer=0, row=237, col=255
Processing start cell: layer=0, row=215, col=236
Processing start cell: layer=0, row=207, col=232
Processing start cell: layer=0, row=187, col=234
Processing start cell: layer=0, row=238, col=256
Processing start cell: layer=0, row=230, col=252
Processing start cell: layer=0, row=145, col=237
Processing start cell: layer=0, row=157, col=211
Processing start cell: layer=0, row=248, col=269
Processing start cell: layer=0, row=208, col=233
Processing start cell: layer=0, row=227, col=246
Processing start cell: layer=0, row=219, col=242
Processing start cell: layer=0, row=211, col=238
Processing start cell: layer=0, row=204, col=235
Processing start cell: layer=0, row=153, col=218
Processing start cell: layer=0, row=164, col=227
Processing start cell: layer=0, row=157, col=224
Processing start cell: layer=0, row=241, col=243
Processing start cell: layer=0, row=233, col=239
Processing start cell: layer=0, row=244, col=248
Processing start cell: layer=0, row=234, col=240
Processing start cell: layer=0, row=226, col=236
Processing start cell: layer=0, row=245, col=249
Processing start cell: layer=0, row=218, col=232
Processing start cell: layer=0, row=237, col=245
Processing start cell: layer=0, row=152, col=230
Processing start cell: layer=0, row=153, col=231
Processing start cell: layer=0, row=230, col=242
Processing start cell: layer=0, row=229, col=246
Processing start cell: layer=0, row=240, col=255
Processing start cell: layer=0, row=219, col=232
Processing start cell: layer=0, row=190, col=234
Processing start cell: layer=0, row=222, col=243
Processing start cell: layer=0, row=241, col=256
Processing start cell: layer=0, row=214, col=239
Processing start cell: layer=0, row=233, col=252
Processing start cell: layer=0, row=148, col=237
Processing start cell: layer=0, row=244, col=261
Processing start cell: layer=0, row=160, col=211
Processing start cell: layer=0, row=149, col=238
Processing start cell: layer=0, row=226, col=249
Processing start cell: layer=0, row=182, col=235
Processing start cell: layer=2, row=248, col=268
Processing start cell: layer=0, row=215, col=239
Processing start cell: layer=0, row=207, col=235
Processing start cell: layer=0, row=178, col=237
Processing start cell: layer=0, row=156, col=218
Processing start cell: layer=0, row=152, col=220
Processing start cell: layer=0, row=229, col=236
Processing start cell: layer=0, row=248, col=249
Processing start cell: layer=0, row=221, col=232
Processing start cell: layer=0, row=240, col=245
Processing start cell: layer=0, row=155, col=230
Processing start cell: layer=0, row=222, col=233
Processing start cell: layer=0, row=241, col=246
Processing start cell: layer=0, row=156, col=231
Processing start cell: layer=0, row=233, col=242
Processing start cell: layer=0, row=244, col=251
Processing start cell: layer=0, row=247, col=262
Processing start cell: layer=0, row=218, col=235
Processing start cell: layer=0, row=225, col=243
Processing start cell: layer=0, row=217, col=239
Processing start cell: layer=0, row=236, col=252
Processing start cell: layer=0, row=151, col=237
Processing start cell: layer=0, row=228, col=248
Processing start cell: layer=0, row=186, col=231
Processing start cell: layer=0, row=210, col=236
Processing start cell: layer=0, row=229, col=249
Processing start cell: layer=0, row=221, col=245
Processing start cell: layer=0, row=240, col=258
Processing start cell: layer=0, row=159, col=213
Processing start cell: layer=0, row=181, col=237
Processing start cell: layer=0, row=203, col=232
Processing start cell: layer=0, row=155, col=220
Processing start cell: layer=0, row=243, col=246
Processing start cell: layer=0, row=156, col=221
Processing start cell: layer=0, row=159, col=226
Processing start cell: layer=0, row=191, col=235
Processing start cell: layer=0, row=158, col=230
Processing start cell: layer=0, row=225, col=233
Processing start cell: layer=0, row=236, col=242
Processing start cell: layer=0, row=151, col=227
Processing start cell: layer=0, row=228, col=238
Processing start cell: layer=0, row=154, col=232
Processing start cell: layer=0, row=239, col=253
Processing start cell: layer=0, row=242, col=258
Processing start cell: layer=0, row=221, col=235
Processing start cell: layer=0, row=155, col=233
Processing start cell: layer=0, row=188, col=230
Processing start cell: layer=0, row=243, col=259
Processing start cell: layer=0, row=235, col=255
Processing start cell: layer=0, row=189, col=231
Processing start cell: layer=0, row=213, col=236
Processing start cell: layer=0, row=232, col=249
Processing start cell: layer=0, row=205, col=232
Processing start cell: layer=0, row=224, col=245
Processing start cell: layer=0, row=216, col=241
Processing start cell: layer=0, row=225, col=246
Processing start cell: layer=0, row=217, col=242
Processing start cell: layer=0, row=228, col=251
Processing start cell: layer=0, row=184, col=237
Processing start cell: layer=0, row=206, col=232
Processing start cell: layer=2, row=251, col=271
Processing start cell: layer=0, row=165, col=228
Processing start cell: layer=0, row=161, col=226
Processing start cell: layer=0, row=162, col=227
Processing start cell: layer=0, row=194, col=235
Processing start cell: layer=0, row=154, col=222
Processing start cell: layer=0, row=239, col=243
Processing start cell: layer=0, row=231, col=239
Processing start cell: layer=0, row=242, col=248
Processing start cell: layer=0, row=157, col=233
Processing start cell: layer=0, row=223, col=234
Processing start cell: layer=0, row=243, col=249
Processing start cell: layer=0, row=235, col=245
Processing start cell: layer=0, row=232, col=239
Processing start cell: layer=0, row=224, col=235
Processing start cell: layer=0, row=216, col=231
Processing start cell: layer=0, row=158, col=233
Processing start cell: layer=0, row=150, col=229
Processing start cell: layer=0, row=238, col=255
Processing start cell: layer=0, row=230, col=251
Processing start cell: layer=0, row=249, col=264
Processing start cell: layer=0, row=227, col=245
Processing start cell: layer=0, row=219, col=241
Processing start cell: layer=0, row=239, col=256
Processing start cell: layer=0, row=231, col=252
Processing start cell: layer=0, row=250, col=265
Processing start cell: layer=0, row=242, col=261
Processing start cell: layer=0, row=188, col=233
Processing start cell: layer=0, row=220, col=242
Processing start cell: layer=0, row=212, col=238
Processing start cell: layer=0, row=204, col=234
Processing start cell: layer=0, row=146, col=236
Processing start cell: layer=0, row=223, col=247
Processing start cell: layer=0, row=158, col=210
Processing start cell: layer=0, row=205, col=235
Processing start cell: layer=0, row=157, col=223
Processing start cell: layer=0, row=176, col=236
Processing start cell: layer=0, row=161, col=229
Processing start cell: layer=0, row=245, col=248
Processing start cell: layer=0, row=238, col=245
Processing start cell: layer=0, row=153, col=230
Processing start cell: layer=0, row=230, col=241
Processing start cell: layer=0, row=227, col=235
Processing start cell: layer=0, row=231, col=242
Processing start cell: layer=0, row=241, col=255
Processing start cell: layer=0, row=220, col=232
Processing start cell: layer=0, row=244, col=260
Processing start cell: layer=0, row=223, col=237
Processing start cell: layer=0, row=234, col=252
Processing start cell: layer=0, row=149, col=237
Processing start cell: layer=0, row=226, col=248
Processing start cell: layer=0, row=245, col=261
Processing start cell: layer=0, row=218, col=244
Processing start cell: layer=0, row=237, col=257
Processing start cell: layer=0, row=215, col=238
Processing start cell: layer=0, row=160, col=214
Processing start cell: layer=0, row=207, col=234
Processing start cell: layer=0, row=187, col=236
Processing start cell: layer=0, row=230, col=254
Processing start cell: layer=2, row=252, col=273
Processing start cell: layer=0, row=157, col=213
Processing start cell: layer=0, row=208, col=235
Processing start cell: layer=0, row=219, col=244
Processing start cell: layer=0, row=179, col=236
Processing start cell: layer=0, row=153, col=220
Processing start cell: layer=0, row=164, col=229
Processing start cell: layer=0, row=222, col=232
Processing start cell: layer=0, row=241, col=245
Processing start cell: layer=0, row=156, col=230
Processing start cell: layer=0, row=233, col=241
Processing start cell: layer=0, row=244, col=250
Processing start cell: layer=0, row=234, col=242
Processing start cell: layer=0, row=149, col=227
Processing start cell: layer=0, row=226, col=238
Processing start cell: layer=0, row=245, col=251
Processing start cell: layer=0, row=218, col=234
Processing start cell: layer=0, row=237, col=247
Processing start cell: layer=0, row=152, col=232
Processing start cell: layer=0, row=186, col=230
Processing start cell: layer=0, row=229, col=248
Processing start cell: layer=0, row=248, col=261
Processing start cell: layer=0, row=221, col=244
Processing start cell: layer=0, row=240, col=257
Processing start cell: layer=0, row=222, col=245
Processing start cell: layer=0, row=241, col=258
Processing start cell: layer=0, row=214, col=241
Processing start cell: layer=0, row=233, col=254
Processing start cell: layer=0, row=244, col=263
Processing start cell: layer=0, row=160, col=213
Processing start cell: layer=0, row=182, col=237
Processing start cell: layer=0, row=199, col=233
Processing start cell: layer=0, row=156, col=220
Processing start cell: layer=0, row=159, col=225
Processing start cell: layer=0, row=191, col=234
Processing start cell: layer=0, row=160, col=226
Processing start cell: layer=0, row=152, col=222
Processing start cell: layer=0, row=236, col=241
Processing start cell: layer=0, row=248, col=251
Processing start cell: layer=0, row=221, col=234
Processing start cell: layer=0, row=240, col=247
Processing start cell: layer=0, row=155, col=232
Processing start cell: layer=0, row=222, col=235
Processing start cell: layer=0, row=156, col=233
Processing start cell: layer=0, row=233, col=244
Processing start cell: layer=0, row=148, col=229
Processing start cell: layer=0, row=189, col=230
Processing start cell: layer=0, row=232, col=248
Processing start cell: layer=0, row=247, col=264
Processing start cell: layer=0, row=225, col=245
Processing start cell: layer=0, row=217, col=241
Processing start cell: layer=0, row=236, col=254
Processing start cell: layer=0, row=209, col=237
Processing start cell: layer=0, row=228, col=250
Processing start cell: layer=0, row=250, col=274
Processing start cell: layer=0, row=210, col=238
Processing start cell: layer=0, row=229, col=251
Processing start cell: layer=0, row=221, col=247
Processing start cell: layer=2, row=251, col=270
Processing start cell: layer=0, row=156, col=210
Processing start cell: layer=0, row=202, col=233
Processing start cell: layer=0, row=162, col=226
Processing start cell: layer=0, row=194, col=234
Processing start cell: layer=0, row=154, col=221
Processing start cell: layer=0, row=163, col=226
Processing start cell: layer=0, row=155, col=222
Processing start cell: layer=0, row=190, col=236
Processing start cell: layer=0, row=243, col=248
Processing start cell: layer=0, row=235, col=244
Processing start cell: layer=0, row=232, col=238
Processing start cell: layer=0, row=224, col=234
Processing start cell: layer=0, row=158, col=232
Processing start cell: layer=0, row=150, col=228
Processing start cell: layer=0, row=225, col=235
Processing start cell: layer=0, row=217, col=231
Processing start cell: layer=0, row=236, col=244
Processing start cell: layer=0, row=151, col=229
Processing start cell: layer=0, row=228, col=240
Processing start cell: layer=0, row=154, col=234
Processing start cell: layer=0, row=239, col=255
Processing start cell: layer=0, row=231, col=251
Processing start cell: layer=0, row=250, col=264
Processing start cell: layer=0, row=242, col=260
Processing start cell: layer=0, row=221, col=237
Processing start cell: layer=0, row=147, col=231
Processing start cell: layer=0, row=188, col=232
Processing start cell: layer=0, row=220, col=241
Processing start cell: layer=0, row=251, col=265
Processing start cell: layer=0, row=223, col=246
Processing start cell: layer=0, row=146, col=235
Processing start cell: layer=0, row=243, col=261
Processing start cell: layer=0, row=235, col=257
Processing start cell: layer=0, row=189, col=233
Processing start cell: layer=0, row=213, col=238
Processing start cell: layer=0, row=232, col=251
Processing start cell: layer=0, row=205, col=234
Processing start cell: layer=0, row=224, col=247
Processing start cell: layer=0, row=155, col=212
Processing start cell: layer=0, row=206, col=234
Processing start cell: layer=0, row=177, col=236
Processing start cell: layer=2, row=251, col=273
Processing start cell: layer=0, row=161, col=228
Processing start cell: layer=0, row=162, col=229
Processing start cell: layer=0, row=246, col=248
Processing start cell: layer=0, row=154, col=224
Processing start cell: layer=0, row=239, col=245
Processing start cell: layer=0, row=231, col=241
Processing start cell: layer=0, row=242, col=250
Processing start cell: layer=0, row=223, col=236
Processing start cell: layer=0, row=243, col=251
Processing start cell: layer=0, row=235, col=247
Processing start cell: layer=0, row=245, col=260
Processing start cell: layer=0, row=224, col=237
Processing start cell: layer=0, row=216, col=233
Processing start cell: layer=0, row=150, col=231
Processing start cell: layer=0, row=246, col=261
Processing start cell: layer=0, row=187, col=235
Processing start cell: layer=0, row=238, col=257
Processing start cell: layer=0, row=230, col=253
Processing start cell: layer=0, row=208, col=234
Processing start cell: layer=0, row=227, col=247
Processing start cell: layer=0, row=219, col=243
Processing start cell: layer=0, row=239, col=258
Processing start cell: layer=0, row=211, col=239
Processing start cell: layer=0, row=231, col=254
Processing start cell: layer=0, row=188, col=235
Processing start cell: layer=0, row=220, col=244
Processing start cell: layer=0, row=204, col=236
Processing start cell: layer=0, row=223, col=249
Processing start cell: layer=0, row=158, col=212
Processing start cell: layer=0, row=197, col=233
Processing start cell: layer=0, row=164, col=228
Processing start cell: layer=0, row=165, col=229
Processing start cell: layer=0, row=157, col=225
Processing start cell: layer=0, row=161, col=231
Processing start cell: layer=0, row=234, col=241
Processing start cell: layer=0, row=245, col=250
Processing start cell: layer=0, row=237, col=246
Processing start cell: layer=0, row=238, col=247
Processing start cell: layer=0, row=153, col=232
Processing start cell: layer=0, row=230, col=243
Processing start cell: layer=0, row=227, col=237
Processing start cell: layer=0, row=219, col=233
Processing start cell: layer=0, row=190, col=235
Processing start cell: layer=0, row=241, col=257
Processing start cell: layer=0, row=233, col=253
Processing start cell: layer=0, row=252, col=266
Processing start cell: layer=0, row=244, col=262
Processing start cell: layer=0, row=234, col=254
Processing start cell: layer=0, row=253, col=267
Processing start cell: layer=0, row=226, col=250
Processing start cell: layer=0, row=245, col=263
Processing start cell: layer=0, row=215, col=240
Processing start cell: layer=0, row=207, col=236
Processing start cell: layer=0, row=199, col=232
Processing start cell: layer=0, row=157, col=215
Processing start cell: layer=0, row=208, col=237
Processing start cell: layer=0, row=200, col=233
Processing start cell: layer=0, row=160, col=225
Processing start cell: layer=0, row=152, col=221
Processing start cell: layer=0, row=153, col=222
Processing start cell: layer=0, row=164, col=231
Processing start cell: layer=0, row=188, col=236
Processing start cell: layer=0, row=222, col=234
Processing start cell: layer=0, row=241, col=247
Processing start cell: layer=0, row=159, col=206
Processing start cell: layer=0, row=156, col=232
Processing start cell: layer=0, row=233, col=243
Processing start cell: layer=0, row=244, col=252
Processing start cell: layer=0, row=234, col=244
Processing start cell: layer=0, row=149, col=229
Processing start cell: layer=0, row=226, col=240
Processing start cell: layer=0, row=218, col=236
Processing start cell: layer=0, row=237, col=249
Processing start cell: layer=0, row=152, col=234
Processing start cell: layer=0, row=210, col=237
Processing start cell: layer=0, row=229, col=250
Processing start cell: layer=0, row=248, col=263
Processing start cell: layer=0, row=221, col=246
Processing start cell: layer=0, row=240, col=259
Processing start cell: layer=0, row=159, col=214
Processing start cell: layer=0, row=202, col=232
Processing start cell: layer=0, row=222, col=247
Processing start cell: layer=0, row=233, col=256
Processing start cell: layer=0, row=203, col=233
Processing start cell: layer=0, row=199, col=235
Processing start cell: layer=0, row=156, col=222
Processing start cell: layer=0, row=159, col=227
Processing start cell: layer=0, row=191, col=236
Processing start cell: layer=0, row=152, col=224
Processing start cell: layer=0, row=225, col=234
Processing start cell: layer=0, row=236, col=243
Processing start cell: layer=0, row=228, col=239
Processing start cell: layer=0, row=229, col=240
Processing start cell: layer=0, row=221, col=236
Processing start cell: layer=0, row=240, col=249
Processing start cell: layer=0, row=155, col=234
Processing start cell: layer=0, row=243, col=260
Processing start cell: layer=0, row=222, col=237
Processing start cell: layer=0, row=235, col=256
Processing start cell: layer=0, row=214, col=233
Processing start cell: layer=0, row=148, col=231
Processing start cell: layer=0, row=189, col=232
Processing start cell: layer=0, row=232, col=250
Processing start cell: layer=0, row=224, col=246
Processing start cell: layer=0, row=247, col=266
Processing start cell: layer=0, row=225, col=247
Processing start cell: layer=0, row=185, col=234
Processing start cell: layer=0, row=217, col=243
Processing start cell: layer=0, row=236, col=256
Processing start cell: layer=0, row=228, col=252
Processing start cell: layer=0, row=206, col=233
Processing start cell: layer=2, row=251, col=272
Processing start cell: layer=0, row=156, col=212
Processing start cell: layer=0, row=202, col=235
Processing start cell: layer=0, row=162, col=228
Processing start cell: layer=0, row=154, col=223
Processing start cell: layer=0, row=163, col=228
Processing start cell: layer=0, row=155, col=224
Processing start cell: layer=0, row=243, col=250
Processing start cell: layer=0, row=235, col=246
Processing start cell: layer=0, row=232, col=240
Processing start cell: layer=0, row=224, col=236
Processing start cell: layer=0, row=216, col=232
Processing start cell: layer=0, row=150, col=230
Processing start cell: layer=0, row=246, col=260
Processing start cell: layer=0, row=225, col=237
Processing start cell: layer=0, row=217, col=233
Processing start cell: layer=0, row=236, col=246
Processing start cell: layer=0, row=249, col=265
Processing start cell: layer=0, row=151, col=231
Processing start cell: layer=0, row=228, col=242
Processing start cell: layer=0, row=154, col=236
Processing start cell: layer=0, row=239, col=257
Processing start cell: layer=0, row=231, col=253
Processing start cell: layer=0, row=188, col=234
Processing start cell: layer=0, row=220, col=243
Processing start cell: layer=0, row=212, col=239
Processing start cell: layer=0, row=159, col=207
Processing start cell: layer=0, row=146, col=237
Processing start cell: layer=0, row=223, col=248
Processing start cell: layer=0, row=158, col=211
Processing start cell: layer=0, row=189, col=235
Processing start cell: layer=0, row=213, col=240
Processing start cell: layer=0, row=232, col=253
Processing start cell: layer=0, row=205, col=236
Processing start cell: layer=0, row=224, col=249
Processing start cell: layer=0, row=197, col=232
Processing start cell: layer=0, row=176, col=237
Processing start cell: layer=0, row=155, col=214
Processing start cell: layer=0, row=198, col=232
Processing start cell: layer=0, row=161, col=230
Processing start cell: layer=0, row=158, col=224
Processing start cell: layer=0, row=162, col=231
Processing start cell: layer=0, row=246, col=250
Processing start cell: layer=0, row=238, col=246
Processing start cell: layer=0, row=154, col=226
Processing start cell: layer=0, row=227, col=236
Processing start cell: layer=0, row=239, col=247
Processing start cell: layer=0, row=231, col=243
Processing start cell: layer=0, row=242, col=252
Processing start cell: layer=0, row=220, col=233
Processing start cell: layer=0, row=223, col=238
Processing start cell: layer=0, row=235, col=249
Processing start cell: layer=0, row=234, col=253
Processing start cell: layer=0, row=253, col=266
Processing start cell: layer=0, row=245, col=262
Processing start cell: layer=0, row=224, col=239
Processing start cell: layer=0, row=216, col=235
Processing start cell: layer=0, row=161, col=211
Processing start cell: layer=0, row=150, col=233
Processing start cell: layer=0, row=246, col=263
Processing start cell: layer=0, row=230, col=255
Processing start cell: layer=0, row=157, col=214
Processing start cell: layer=0, row=208, col=236
Processing start cell: layer=0, row=227, col=249
Processing start cell: layer=0, row=200, col=232
Processing start cell: layer=0, row=219, col=245
Processing start cell: layer=0, row=231, col=256
Processing start cell: layer=0, row=201, col=233
Processing start cell: layer=0, row=220, col=246
Processing start cell: layer=0, row=179, col=237
Processing start cell: layer=0, row=158, col=214
Processing start cell: layer=0, row=197, col=235
Processing start cell: layer=0, row=153, col=221
Processing start cell: layer=0, row=164, col=230
Processing start cell: layer=0, row=165, col=231
Processing start cell: layer=0, row=157, col=227
Processing start cell: layer=0, row=189, col=236
Processing start cell: layer=0, row=234, col=243
Processing start cell: layer=0, row=149, col=228
Processing start cell: layer=0, row=226, col=239
Processing start cell: layer=0, row=245, col=252
Processing start cell: layer=0, row=237, col=248
Processing start cell: layer=0, row=152, col=233
Processing start cell: layer=0, row=246, col=253
Processing start cell: layer=0, row=238, col=249
Processing start cell: layer=0, row=153, col=234
Processing start cell: layer=0, row=230, col=245
Processing start cell: layer=0, row=248, col=262
Processing start cell: layer=0, row=227, col=239
Processing start cell: layer=0, row=219, col=235
Processing start cell: layer=0, row=190, col=237
Processing start cell: layer=0, row=222, col=246
Processing start cell: layer=0, row=241, col=259
Processing start cell: layer=0, row=233, col=255
Processing start cell: layer=0, row=234, col=256
Processing start cell: layer=2, row=249, col=267
Processing start cell: layer=0, row=245, col=265
Processing start cell: layer=0, row=215, col=242
Processing start cell: layer=0, row=199, col=234
Processing start cell: layer=0, row=157, col=217
Processing start cell: layer=0, row=200, col=235
Processing start cell: layer=0, row=160, col=227
Processing start cell: layer=0, row=152, col=223
Processing start cell: layer=0, row=153, col=224
Processing start cell: layer=0, row=248, col=252
Processing start cell: layer=0, row=240, col=248
Processing start cell: layer=0, row=222, col=236
Processing start cell: layer=0, row=241, col=249
Processing start cell: layer=0, row=214, col=232
Processing start cell: layer=0, row=156, col=234
Processing start cell: layer=0, row=233, col=245
Processing start cell: layer=0, row=148, col=230
Processing start cell: layer=0, row=244, col=254
Processing start cell: layer=0, row=247, col=265
Processing start cell: layer=0, row=149, col=231
Processing start cell: layer=0, row=226, col=242
Processing start cell: layer=0, row=218, col=238
Processing start cell: layer=0, row=152, col=236
Processing start cell: layer=0, row=236, col=255
Processing start cell: layer=0, row=215, col=232
Processing start cell: layer=2, row=252, col=267
Processing start cell: layer=0, row=229, col=252
Processing start cell: layer=0, row=248, col=265
Processing start cell: layer=0, row=156, col=211
Processing start cell: layer=0, row=202, col=234
Processing start cell: layer=0, row=203, col=235
Processing start cell: layer=0, row=163, col=227
Processing start cell: layer=0, row=155, col=223
Processing start cell: layer=0, row=156, col=224
Processing start cell: layer=0, row=159, col=229
Processing start cell: layer=0, row=225, col=236
Processing start cell: layer=0, row=217, col=232
Processing start cell: layer=0, row=236, col=245
Processing start cell: layer=0, row=151, col=230
Processing start cell: layer=0, row=228, col=241
Processing start cell: layer=0, row=154, col=235
Processing start cell: layer=0, row=229, col=242
Processing start cell: layer=0, row=221, col=238
Processing start cell: layer=0, row=240, col=251
Processing start cell: layer=0, row=147, col=232
Processing start cell: layer=0, row=243, col=262
Processing start cell: layer=0, row=214, col=235
Processing start cell: layer=0, row=189, col=234
Processing start cell: layer=0, row=213, col=239
Processing start cell: layer=0, row=232, col=252
Processing start cell: layer=0, row=224, col=248
Processing start cell: layer=0, row=247, col=268
Processing start cell: layer=0, row=225, col=249
Processing start cell: layer=0, row=185, col=236
Processing start cell: layer=0, row=155, col=213
Processing start cell: layer=0, row=206, col=235
Processing start cell: layer=0, row=177, col=237
Processing start cell: layer=2, row=251, col=274
Processing start cell: layer=0, row=156, col=214
Processing start cell: layer=0, row=162, col=230
Processing start cell: layer=0, row=154, col=225
Processing start cell: layer=0, row=239, col=246
Processing start cell: layer=0, row=242, col=251
Processing start cell: layer=0, row=155, col=226
Processing start cell: layer=0, row=243, col=252
Processing start cell: layer=0, row=235, col=248
Processing start cell: layer=0, row=232, col=242
Processing start cell: layer=0, row=224, col=238
Processing start cell: layer=0, row=216, col=234
Processing start cell: layer=0, row=150, col=232
Processing start cell: layer=0, row=246, col=262
Processing start cell: layer=0, row=225, col=239
Processing start cell: layer=0, row=217, col=235
Processing start cell: layer=0, row=151, col=233
Processing start cell: layer=0, row=228, col=244
Processing start cell: layer=0, row=227, col=248
Processing start cell: layer=0, row=231, col=255
Processing start cell: layer=0, row=201, col=232
Processing start cell: layer=0, row=220, col=245
Processing start cell: layer=0, row=158, col=213
Processing start cell: layer=0, row=197, col=234
Processing start cell: layer=0, row=154, col=215
Processing start cell: layer=0, row=165, col=230
Processing start cell: layer=0, row=157, col=226
Processing start cell: layer=0, row=161, col=232
Processing start cell: layer=0, row=185, col=237
Processing start cell: layer=0, row=158, col=226
Processing start cell: layer=0, row=246, col=252
Processing start cell: layer=0, row=238, col=248
Processing start cell: layer=0, row=153, col=233
Processing start cell: layer=0, row=230, col=244
Processing start cell: layer=0, row=186, col=237
Processing start cell: layer=0, row=227, col=238
Processing start cell: layer=0, row=219, col=234
Processing start cell: layer=0, row=239, col=249
Processing start cell: layer=0, row=231, col=245
Processing start cell: layer=0, row=242, col=254
Processing start cell: layer=0, row=220, col=235
Processing start cell: layer=0, row=223, col=240
Processing start cell: layer=0, row=191, col=237
Processing start cell: layer=0, row=234, col=255
Processing start cell: layer=2, row=249, col=266
Processing start cell: layer=0, row=213, col=232
Processing start cell: layer=0, row=245, col=264
Processing start cell: layer=0, row=216, col=237
Processing start cell: layer=0, row=215, col=241
Processing start cell: layer=2, row=250, col=267
Processing start cell: layer=0, row=246, col=265
Processing start cell: layer=0, row=157, col=216
Processing start cell: layer=0, row=227, col=251
Processing start cell: layer=0, row=200, col=234
Processing start cell: layer=0, row=201, col=235
Processing start cell: layer=0, row=158, col=216
Processing start cell: layer=0, row=153, col=223
Processing start cell: layer=0, row=164, col=232
Processing start cell: layer=0, row=242, col=244
Processing start cell: layer=0, row=157, col=229
Processing start cell: layer=0, row=241, col=248
Processing start cell: layer=0, row=244, col=253
Processing start cell: layer=0, row=234, col=245
Processing start cell: layer=0, row=149, col=230
Processing start cell: layer=0, row=226, col=241
Processing start cell: layer=0, row=245, col=254
Processing start cell: layer=0, row=218, col=237
Processing start cell: layer=0, row=237, col=250
Processing start cell: layer=0, row=152, col=235
Processing start cell: layer=0, row=160, col=207
Processing start cell: layer=0, row=238, col=251
Processing start cell: layer=0, row=153, col=236
Processing start cell: layer=0, row=230, col=247
Processing start cell: layer=0, row=248, col=264
Processing start cell: layer=0, row=227, col=241
Processing start cell: layer=0, row=219, col=237
Processing start cell: layer=0, row=211, col=233
Processing start cell: layer=0, row=222, col=248
Processing start cell: layer=0, row=203, col=234
Processing start cell: layer=0, row=192, col=233
Processing start cell: layer=0, row=156, col=223
Processing start cell: layer=0, row=159, col=228
Processing start cell: layer=0, row=160, col=229
Processing start cell: layer=0, row=237, col=240
Processing start cell: layer=0, row=152, col=225
Processing start cell: layer=0, row=153, col=226
Processing start cell: layer=0, row=229, col=241
Processing start cell: layer=0, row=240, col=250
Processing start cell: layer=0, row=155, col=235
Processing start cell: layer=0, row=222, col=238
Processing start cell: layer=0, row=241, col=251
Processing start cell: layer=0, row=214, col=234
Processing start cell: layer=0, row=233, col=247
Processing start cell: layer=0, row=148, col=232
Processing start cell: layer=0, row=247, col=267
Processing start cell: layer=0, row=149, col=233
Processing start cell: layer=0, row=218, col=240
Processing start cell: layer=0, row=225, col=248
Processing start cell: layer=0, row=185, col=235
Processing start cell: layer=0, row=236, col=257
Processing start cell: layer=0, row=228, col=253
Processing start cell: layer=0, row=186, col=236
Processing start cell: layer=2, row=252, col=269
Processing start cell: layer=0, row=229, col=254
Processing start cell: layer=0, row=156, col=213
Processing start cell: layer=0, row=195, col=233
Processing end cell: layer=0, row=254, col=267
Processing end cell: layer=2, row=156, col=257
Processing end cell: layer=0, row=186, col=230
Processing end cell: layer=0, row=247, col=246
Processing end cell: layer=0, row=246, col=245
Processing end cell: layer=0, row=248, col=250
Processing end cell: layer=0, row=169, col=262
Processing end cell: layer=0, row=191, col=230
Processing end cell: layer=0, row=251, col=276
Processing end cell: layer=2, row=159, col=258
Processing end cell: layer=0, row=246, col=249
Processing end cell: layer=0, row=247, col=251
Processing end cell: layer=0, row=248, col=252
Processing end cell: layer=0, row=185, col=230
Processing end cell: layer=0, row=191, col=230
Processing end cell: layer=2, row=165, col=261
Processing end cell: layer=2, row=253, col=270
Processing end cell: layer=0, row=247, col=247
Processing end cell: layer=0, row=246, col=251
Processing end cell: layer=0, row=191, col=230
Processing end cell: layer=0, row=248, col=251
Processing end cell: layer=2, row=163, col=260
Processing end cell: layer=0, row=248, col=248
Processing end cell: layer=2, row=168, col=262
Processing end cell: layer=2, row=252, col=274
Processing end cell: layer=0, row=185, col=229
Processing end cell: layer=2, row=204, col=237
Processing end cell: layer=0, row=166, col=261
Start flows shape: (1095, 1)
End flows shape: (28, 1)
Total start flow: -2.1916794971643707
Total end flow: -0.5307783814464528
Hyporheic flow rate (ft³/d): 1.6609011157179179
Average hyporheic flow rate (ft³/d): -1.3612289393054118
Zone budget summary (particles and MODFLOW cell budgets) appended to Hyporheic_output\Forward_pathline_stats.txt
C:\Users\u4eeevmq\AppData\Local\Temp\ipykernel_21176\1915477162.py:488: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead
See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
filtered_long_pathlines_df['layer'] = layers
C:\Users\u4eeevmq\AppData\Local\Temp\ipykernel_21176\1915477162.py:489: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead
See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
filtered_long_pathlines_df['row'] = rows
C:\Users\u4eeevmq\AppData\Local\Temp\ipykernel_21176\1915477162.py:490: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead
See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
filtered_long_pathlines_df['col'] = cols
Number of unique cells intersected by pathlines: 46273
C:\Users\u4eeevmq\AppData\Local\Temp\ipykernel_21176\1915477162.py:529: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead
See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
filtered_long_pathlines_df['hyporheic_volume'] = hyporheic_vols
Per-cell summary statistics exported to Hyporheic_output\Forward_pathline_stats.txt
Pathline summary statistics for particles exported to Hyporheic_output\Forward_pathline_stats.txt
C:\Users\u4eeevmq\AppData\Local\Temp\ipykernel_21176\1915477162.py:708: DeprecationWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.
lines = df_prc.groupby('particleid').apply(make_linestring)
INFO:pyogrio._io:Created 91,511 records
C:\Users\u4eeevmq\AppData\Local\Temp\ipykernel_21176\1915477162.py:718: UserWarning: Column names longer than 10 characters will be truncated when saved to ESRI Shapefile.
lines_gdf.to_file(os.path.join(output_folder, f"{direction}_hyporheic_pathlines_HECRAS_CRS.shp"), driver="ESRI Shapefile")
INFO:pyogrio._io:Created 1,185 records
INFO:pyogrio._io:Created 91,511 records
C:\Users\u4eeevmq\AppData\Local\Temp\ipykernel_21176\1915477162.py:720: UserWarning: Column names longer than 10 characters will be truncated when saved to ESRI Shapefile.
lines_gdf_wgs84.to_file(os.path.join(output_folder, f"{direction}_hyporheic_pathlines.shp"), driver="ESRI Shapefile")
INFO:pyogrio._io:Created 1,185 records
INFO:pyogrio._io:Created 91,511 records
INFO:pyogrio._io:Created 1,185 records
INFO:pyogrio._io:Created 91,511 records
INFO:pyogrio._io:Created 1,185 records
MODPATH 7 forward results processed and exported successfully.
C:\Users\u4eeevmq\AppData\Local\Temp\ipykernel_21176\1915477162.py:81: DeprecationWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.
lengths = grouped_pathlines.apply(pathline_length)
Statistics exported to Hyporheic_output\Backward_pathline_stats.txt
Available budget record types in CellBudgetFile:
[np.bytes_(b' FLOW-JA-FACE'), np.bytes_(b' DATA-SPDIS'), np.bytes_(b' DATA-SAT'), np.bytes_(b' CHD')]
Budget array shape: (1, 1, 2191822)
FLOW-JA-FACE array shape: (1, 1, 2191822)
Start cells: 1222
End cells: 164
Start cell ranges:
Elevation: 1599 to 1602
Row: 145 to 254
Col: 206 to 276
End cell ranges:
Elevation: 1599 to 1605
Row: 143 to 256
Col: 197 to 289
Layer thicknesses shape: (40, 385, 431)
Layer 0 thickness range: 0.0625 to 43.0625
Other layers thickness (should be 0.5 ft): [0.5]
WARNING: No layer found for z=1601, row=166, col=235
DEBUG: For (row=166, col=235), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=167, col=235
DEBUG: For (row=167, col=235), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1602, row=157, col=239
DEBUG: For (row=157, col=239), z=1602, model top=1600.8125, model bottom=1580.3125
WARNING: No layer found for z=1601, row=170, col=237
DEBUG: For (row=170, col=237), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=162, col=233
DEBUG: For (row=162, col=233), z=1601, model top=1600.9375, model bottom=1580.3125
WARNING: No layer found for z=1601, row=154, col=237
DEBUG: For (row=154, col=237), z=1601, model top=1600.75, model bottom=1580.3125
WARNING: No layer found for z=1601, row=163, col=233
DEBUG: For (row=163, col=233), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=155, col=238
DEBUG: For (row=155, col=238), z=1601, model top=1600.75, model bottom=1580.3125
WARNING: No layer found for z=1601, row=177, col=235
DEBUG: For (row=177, col=235), z=1601, model top=1600.9375, model bottom=1580.3125
WARNING: No layer found for z=1602, row=165, col=238
DEBUG: For (row=165, col=238), z=1602, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=173, col=237
DEBUG: For (row=173, col=237), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=162, col=237
DEBUG: For (row=162, col=237), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=166, col=234
DEBUG: For (row=166, col=234), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=169, col=235
DEBUG: For (row=169, col=235), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1602, row=168, col=238
DEBUG: For (row=168, col=238), z=1602, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=170, col=236
DEBUG: For (row=170, col=236), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=158, col=234
DEBUG: For (row=158, col=234), z=1601, model top=1600.96875, model bottom=1580.3125
WARNING: No layer found for z=1601, row=150, col=239
DEBUG: For (row=150, col=239), z=1601, model top=1600.625, model bottom=1580.3125
WARNING: No layer found for z=1602, row=158, col=239
DEBUG: For (row=158, col=239), z=1602, model top=1600.84375, model bottom=1580.3125
WARNING: No layer found for z=1601, row=177, col=234
DEBUG: For (row=177, col=234), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=161, col=235
DEBUG: For (row=161, col=235), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=173, col=236
DEBUG: For (row=173, col=236), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=162, col=236
DEBUG: For (row=162, col=236), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=158, col=238
DEBUG: For (row=158, col=238), z=1601, model top=1600.84375, model bottom=1580.3125
WARNING: No layer found for z=1601, row=165, col=237
DEBUG: For (row=165, col=237), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=180, col=234
DEBUG: For (row=180, col=234), z=1601, model top=1600.9375, model bottom=1580.3125
WARNING: No layer found for z=1601, row=169, col=234
DEBUG: For (row=169, col=234), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=150, col=238
DEBUG: For (row=150, col=238), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=172, col=235
DEBUG: For (row=172, col=235), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1602, row=160, col=238
DEBUG: For (row=160, col=238), z=1602, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=157, col=237
DEBUG: For (row=157, col=237), z=1601, model top=1600.84375, model bottom=1580.3125
WARNING: No layer found for z=1601, row=161, col=234
DEBUG: For (row=161, col=234), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=164, col=235
DEBUG: For (row=164, col=235), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=165, col=236
DEBUG: For (row=165, col=236), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1602, row=164, col=239
DEBUG: For (row=164, col=239), z=1602, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=168, col=237
DEBUG: For (row=168, col=237), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1602, row=156, col=240
DEBUG: For (row=156, col=240), z=1602, model top=1600.78125, model bottom=1580.3125
WARNING: No layer found for z=1601, row=153, col=239
DEBUG: For (row=153, col=239), z=1601, model top=1600.65625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=157, col=236
DEBUG: For (row=157, col=236), z=1601, model top=1600.84375, model bottom=1580.3125
WARNING: No layer found for z=1601, row=171, col=237
DEBUG: For (row=171, col=237), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=160, col=237
DEBUG: For (row=160, col=237), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=164, col=234
DEBUG: For (row=164, col=234), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1602, row=166, col=239
DEBUG: For (row=166, col=239), z=1602, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=156, col=235
DEBUG: For (row=156, col=235), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=168, col=236
DEBUG: For (row=168, col=236), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1602, row=156, col=239
DEBUG: For (row=156, col=239), z=1602, model top=1600.78125, model bottom=1580.3125
WARNING: No layer found for z=1601, row=152, col=237
DEBUG: For (row=152, col=237), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=153, col=238
DEBUG: For (row=153, col=238), z=1601, model top=1600.6875, model bottom=1580.3125
WARNING: No layer found for z=1602, row=163, col=238
DEBUG: For (row=163, col=238), z=1602, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=159, col=235
DEBUG: For (row=159, col=235), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=171, col=236
DEBUG: For (row=171, col=236), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=160, col=236
DEBUG: For (row=160, col=236), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=164, col=233
DEBUG: For (row=164, col=233), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=163, col=237
DEBUG: For (row=163, col=237), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=178, col=235
DEBUG: For (row=178, col=235), z=1601, model top=1600.96875, model bottom=1580.3125
WARNING: No layer found for z=1602, row=166, col=238
DEBUG: For (row=166, col=238), z=1602, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=167, col=234
DEBUG: For (row=167, col=234), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=179, col=235
DEBUG: For (row=179, col=235), z=1601, model top=1600.96875, model bottom=1580.3125
WARNING: No layer found for z=1601, row=168, col=235
DEBUG: For (row=168, col=235), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=186, col=234
DEBUG: For (row=186, col=234), z=1601, model top=1600.96875, model bottom=1580.3125
WARNING: No layer found for z=1601, row=155, col=237
DEBUG: For (row=155, col=237), z=1601, model top=1600.78125, model bottom=1580.3125
WARNING: No layer found for z=1601, row=159, col=234
DEBUG: For (row=159, col=234), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=156, col=238
DEBUG: For (row=156, col=238), z=1601, model top=1600.78125, model bottom=1580.3125
WARNING: No layer found for z=1601, row=174, col=237
DEBUG: For (row=174, col=237), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=166, col=233
DEBUG: For (row=166, col=233), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=178, col=234
DEBUG: For (row=178, col=234), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=163, col=236
DEBUG: For (row=163, col=236), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=170, col=235
DEBUG: For (row=170, col=235), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=151, col=239
DEBUG: For (row=151, col=239), z=1601, model top=1600.625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=166, col=237
DEBUG: For (row=166, col=237), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1602, row=154, col=240
DEBUG: For (row=154, col=240), z=1602, model top=1600.6875, model bottom=1580.3125
WARNING: No layer found for z=1601, row=155, col=236
DEBUG: For (row=155, col=236), z=1601, model top=1600.84375, model bottom=1580.3125
WARNING: No layer found for z=1601, row=158, col=237
DEBUG: For (row=158, col=237), z=1601, model top=1600.875, model bottom=1580.3125
WARNING: No layer found for z=1601, row=173, col=235
DEBUG: For (row=173, col=235), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=162, col=235
DEBUG: For (row=162, col=235), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1602, row=161, col=238
DEBUG: For (row=161, col=238), z=1602, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=174, col=236
DEBUG: For (row=174, col=236), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=154, col=239
DEBUG: For (row=154, col=239), z=1601, model top=1600.71875, model bottom=1580.3125
WARNING: No layer found for z=1601, row=163, col=235
DEBUG: For (row=163, col=235), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1602, row=165, col=240
DEBUG: For (row=165, col=240), z=1602, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=181, col=234
DEBUG: For (row=181, col=234), z=1601, model top=1600.9375, model bottom=1580.3125
WARNING: No layer found for z=1601, row=170, col=234
DEBUG: For (row=170, col=234), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=166, col=236
DEBUG: For (row=166, col=236), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=151, col=238
DEBUG: For (row=151, col=238), z=1601, model top=1600.6875, model bottom=1580.3125
WARNING: No layer found for z=1601, row=169, col=237
DEBUG: For (row=169, col=237), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=161, col=233
DEBUG: For (row=161, col=233), z=1601, model top=1600.9375, model bottom=1580.3125
WARNING: No layer found for z=1601, row=162, col=234
DEBUG: For (row=162, col=234), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=158, col=236
DEBUG: For (row=158, col=236), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=154, col=238
DEBUG: For (row=154, col=238), z=1601, model top=1600.71875, model bottom=1580.3125
WARNING: No layer found for z=1601, row=176, col=235
DEBUG: For (row=176, col=235), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=165, col=235
DEBUG: For (row=165, col=235), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1602, row=164, col=238
DEBUG: For (row=164, col=238), z=1602, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1602, row=165, col=239
DEBUG: For (row=165, col=239), z=1602, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=161, col=237
DEBUG: For (row=161, col=237), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=184, col=234
DEBUG: For (row=184, col=234), z=1601, model top=1600.96875, model bottom=1580.3125
WARNING: No layer found for z=1601, row=157, col=235
DEBUG: For (row=157, col=235), z=1601, model top=1600.875, model bottom=1580.3125
WARNING: No layer found for z=1601, row=169, col=236
DEBUG: For (row=169, col=236), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=158, col=235
DEBUG: For (row=158, col=235), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=172, col=237
DEBUG: For (row=172, col=237), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=165, col=234
DEBUG: For (row=165, col=234), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1602, row=167, col=239
DEBUG: For (row=167, col=239), z=1602, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=161, col=236
DEBUG: For (row=161, col=236), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=164, col=237
DEBUG: For (row=164, col=237), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=153, col=237
DEBUG: For (row=153, col=237), z=1601, model top=1600.8125, model bottom=1580.3125
WARNING: No layer found for z=1601, row=171, col=235
DEBUG: For (row=171, col=235), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=160, col=235
DEBUG: For (row=160, col=235), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=172, col=236
DEBUG: For (row=172, col=236), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=165, col=233
DEBUG: For (row=165, col=233), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=157, col=238
DEBUG: For (row=157, col=238), z=1601, model top=1600.8125, model bottom=1580.3125
WARNING: No layer found for z=1602, row=167, col=238
DEBUG: For (row=167, col=238), z=1602, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=179, col=234
DEBUG: For (row=179, col=234), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=168, col=234
DEBUG: For (row=168, col=234), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=149, col=239
DEBUG: For (row=149, col=239), z=1601, model top=1600.71875, model bottom=1580.3125
WARNING: No layer found for z=1601, row=164, col=236
DEBUG: For (row=164, col=236), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1602, row=166, col=232
DEBUG: For (row=166, col=232), z=1602, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=167, col=237
DEBUG: For (row=167, col=237), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=156, col=237
DEBUG: For (row=156, col=237), z=1601, model top=1600.8125, model bottom=1580.3125
WARNING: No layer found for z=1602, row=167, col=233
DEBUG: For (row=167, col=233), z=1602, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1602, row=159, col=238
DEBUG: For (row=159, col=238), z=1602, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=160, col=234
DEBUG: For (row=160, col=234), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=152, col=239
DEBUG: For (row=152, col=239), z=1601, model top=1600.625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=175, col=236
DEBUG: For (row=175, col=236), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=159, col=237
DEBUG: For (row=159, col=237), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=168, col=233
DEBUG: For (row=168, col=233), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1602, row=166, col=231
DEBUG: For (row=166, col=231), z=1602, model top=1601.28125, model bottom=1580.3125
WARNING: No layer found for z=1602, row=166, col=240
DEBUG: For (row=166, col=240), z=1602, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1602, row=155, col=240
DEBUG: For (row=155, col=240), z=1602, model top=1600.71875, model bottom=1580.3125
WARNING: No layer found for z=1601, row=167, col=236
DEBUG: For (row=167, col=236), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=156, col=236
DEBUG: For (row=156, col=236), z=1601, model top=1600.8125, model bottom=1580.3125
WARNING: No layer found for z=1601, row=160, col=233
DEBUG: For (row=160, col=233), z=1601, model top=1600.96875, model bottom=1580.3125
WARNING: No layer found for z=1601, row=152, col=238
DEBUG: For (row=152, col=238), z=1601, model top=1600.65625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=174, col=235
DEBUG: For (row=174, col=235), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1602, row=162, col=238
DEBUG: For (row=162, col=238), z=1602, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=163, col=234
DEBUG: For (row=163, col=234), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=155, col=239
DEBUG: For (row=155, col=239), z=1601, model top=1600.75, model bottom=1580.3125
WARNING: No layer found for z=1602, row=163, col=239
DEBUG: For (row=163, col=239), z=1602, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=175, col=235
DEBUG: For (row=175, col=235), z=1601, model top=1600.90625, model bottom=1580.3125
WARNING: No layer found for z=1601, row=159, col=236
DEBUG: For (row=159, col=236), z=1601, model top=1600.90625, model bottom=1580.3125
First 5 start cells with layer info:
layer row col z
0 0 151 237 1601
1 0 228 248 1600
2 0 155 216 1601
3 0 186 231 1601
4 0 229 240 1600
First 5 end cells with layer info:
layer row col z
0 0 148 231 1603
1 2 149 227 1599
2 0 246 214 1602
3 0 158 208 1603
4 0 212 279 1600
<class 'flopy.discretization.structuredgrid.StructuredGrid'>
Number of cells per layer (ncpl): 165935
flow_ja_face shape: (1, 1, 2191822)
Processing start cell: layer=0, row=151, col=237
Processing start cell: layer=0, row=228, col=248
Processing start cell: layer=0, row=155, col=216
Processing start cell: layer=0, row=186, col=231
Processing start cell: layer=0, row=229, col=240
Processing start cell: layer=0, row=163, col=229
Processing start cell: layer=0, row=155, col=225
Processing start cell: layer=0, row=221, col=236
Processing start cell: layer=0, row=210, col=236
Processing start cell: layer=0, row=240, col=249
Processing start cell: layer=0, row=229, col=249
Processing start cell: layer=0, row=198, col=234
Processing start cell: layer=0, row=221, col=245
Processing start cell: layer=0, row=178, col=236
Processing start cell: layer=0, row=240, col=258
Processing start cell: layer=0, row=155, col=234
Processing start cell: layer=0, row=149, col=230
Processing start cell: layer=0, row=166, col=230
Processing start cell: layer=0, row=156, col=217
Processing start cell: layer=0, row=149, col=229
Processing start cell: layer=0, row=243, col=260
Processing start cell: layer=0, row=156, col=226
Processing start cell: layer=0, row=233, col=237
Processing start cell: layer=0, row=235, col=256
Processing start cell: layer=0, row=222, col=237
Processing start cell: layer=0, row=214, col=233
Processing start cell: layer=0, row=159, col=231
Processing start cell: layer=0, row=189, col=232
Processing start cell: layer=0, row=232, col=241
Processing start cell: layer=0, row=148, col=231
Processing start cell: layer=0, row=232, col=250
Processing start cell: layer=0, row=181, col=237
Processing start cell: layer=0, row=247, col=248
Processing start cell: layer=0, row=224, col=246
Processing start cell: layer=0, row=203, col=232
Processing start cell: layer=0, row=247, col=266
Processing start cell: layer=0, row=225, col=238
Processing start cell: layer=0, row=151, col=223
Processing start cell: layer=0, row=228, col=234
Processing start cell: layer=0, row=217, col=234
Processing start cell: layer=0, row=236, col=247
Processing start cell: layer=0, row=225, col=247
Processing start cell: layer=0, row=185, col=234
Processing start cell: layer=0, row=228, col=243
Processing start cell: layer=0, row=217, col=243
Processing start cell: layer=0, row=236, col=256
Processing start cell: layer=0, row=154, col=228
Processing start cell: layer=0, row=151, col=232
Processing start cell: layer=0, row=228, col=252
Processing start cell: layer=0, row=206, col=233
Processing start cell: layer=0, row=155, col=220
Processing start cell: layer=0, row=240, col=244
Processing start cell: layer=0, row=229, col=244
Processing start cell: layer=0, row=155, col=229
Processing start cell: layer=0, row=221, col=240
Processing start cell: layer=0, row=147, col=234
Processing start cell: layer=0, row=243, col=246
Processing start cell: layer=2, row=251, col=272
Processing start cell: layer=0, row=159, col=208
Processing start cell: layer=0, row=156, col=221
Processing start cell: layer=0, row=235, col=251
Processing start cell: layer=0, row=159, col=226
Processing start cell: layer=0, row=202, col=235
Processing start cell: layer=0, row=191, col=235
Processing start cell: layer=0, row=232, col=245
Processing start cell: layer=0, row=192, col=232
Processing start cell: layer=0, row=224, col=241
Processing start cell: layer=0, row=158, col=230
Processing start cell: layer=0, row=232, col=254
Processing start cell: layer=0, row=162, col=228
Processing start cell: layer=0, row=157, col=223
Processing start cell: layer=0, row=247, col=252
Processing start cell: layer=0, row=224, col=250
Processing start cell: layer=0, row=150, col=235
Processing start cell: layer=0, row=247, col=261
Processing start cell: layer=0, row=225, col=233
Processing start cell: layer=0, row=236, col=242
Processing start cell: layer=0, row=225, col=242
Processing start cell: layer=0, row=185, col=229
Processing start cell: layer=0, row=228, col=238
Processing start cell: layer=2, row=248, col=266
Processing start cell: layer=0, row=236, col=251
Processing start cell: layer=0, row=217, col=238
Processing start cell: layer=0, row=209, col=234
Processing start cell: layer=0, row=228, col=247
Processing start cell: layer=0, row=154, col=223
Processing start cell: layer=0, row=154, col=232
Processing start cell: layer=0, row=151, col=236
Processing start cell: layer=0, row=151, col=227
Processing start cell: layer=0, row=239, col=253
Processing start cell: layer=0, row=155, col=215
Processing start cell: layer=0, row=163, col=228
Processing start cell: layer=0, row=229, col=239
Processing start cell: layer=0, row=242, col=258
Processing start cell: layer=0, row=155, col=224
Processing start cell: layer=0, row=221, col=235
Processing start cell: layer=0, row=210, col=235
Processing start cell: layer=0, row=198, col=233
Processing start cell: layer=0, row=155, col=233
Processing start cell: layer=0, row=188, col=230
Processing start cell: layer=2, row=251, col=267
Processing start cell: layer=0, row=147, col=238
Processing start cell: layer=0, row=243, col=250
Processing start cell: layer=0, row=180, col=235
Processing start cell: layer=0, row=235, col=246
Processing start cell: layer=0, row=243, col=259
Processing start cell: layer=0, row=235, col=255
Processing start cell: layer=0, row=189, col=231
Processing start cell: layer=0, row=232, col=240
Processing start cell: layer=0, row=158, col=225
Processing start cell: layer=0, row=224, col=236
Processing start cell: layer=0, row=213, col=236
Processing start cell: layer=0, row=232, col=249
Processing start cell: layer=0, row=216, col=232
Processing start cell: layer=0, row=205, col=232
Processing start cell: layer=0, row=247, col=247
Processing start cell: layer=0, row=224, col=245
Processing start cell: layer=0, row=181, col=236
Processing start cell: layer=0, row=216, col=241
Processing start cell: layer=0, row=162, col=232
Processing start cell: layer=0, row=153, col=223
Processing start cell: layer=0, row=150, col=230
Processing start cell: layer=0, row=246, col=260
Processing start cell: layer=0, row=225, col=237
Processing start cell: layer=0, row=217, col=233
Processing start cell: layer=0, row=236, col=246
Processing start cell: layer=0, row=249, col=265
Processing start cell: layer=0, row=225, col=246
Processing start cell: layer=0, row=228, col=242
Processing start cell: layer=0, row=217, col=242
Processing start cell: layer=0, row=154, col=218
Processing start cell: layer=0, row=154, col=227
Processing start cell: layer=0, row=151, col=231
Processing start cell: layer=0, row=228, col=251
Processing start cell: layer=0, row=154, col=236
Processing start cell: layer=0, row=184, col=237
Processing start cell: layer=0, row=239, col=248
Processing start cell: layer=0, row=231, col=244
Processing start cell: layer=0, row=239, col=257
Processing start cell: layer=0, row=206, col=232
Processing start cell: layer=0, row=242, col=253
Processing start cell: layer=0, row=231, col=253
Processing start cell: layer=0, row=155, col=219
Processing start cell: layer=0, row=187, col=237
Processing start cell: layer=0, row=220, col=234
Processing start cell: layer=0, row=188, col=234
Processing start cell: layer=0, row=243, col=245
Processing start cell: layer=2, row=251, col=271
Processing start cell: layer=0, row=220, col=243
Processing start cell: layer=0, row=235, col=241
Processing start cell: layer=0, row=223, col=239
Processing start cell: layer=0, row=243, col=254
Processing start cell: layer=0, row=212, col=239
Processing start cell: layer=0, row=235, col=250
Processing start cell: layer=0, row=223, col=248
Processing start cell: layer=0, row=165, col=228
Processing start cell: layer=0, row=161, col=226
Processing start cell: layer=0, row=146, col=237
Processing start cell: layer=0, row=189, col=235
Processing start cell: layer=0, row=232, col=244
Processing start cell: layer=0, row=192, col=231
Processing start cell: layer=0, row=224, col=240
Processing start cell: layer=0, row=213, col=240
Processing start cell: layer=0, row=232, col=253
Processing start cell: layer=0, row=216, col=236
Processing start cell: layer=0, row=205, col=236
Processing start cell: layer=0, row=224, col=249
Processing start cell: layer=0, row=197, col=232
Processing start cell: layer=0, row=162, col=227
Processing start cell: layer=0, row=150, col=225
Processing start cell: layer=0, row=150, col=234
Processing start cell: layer=2, row=250, col=266
Processing start cell: layer=0, row=246, col=264
Processing start cell: layer=0, row=151, col=226
Processing start cell: layer=0, row=228, col=237
Processing start cell: layer=0, row=217, col=237
Processing start cell: layer=0, row=194, col=235
Processing start cell: layer=0, row=209, col=233
Processing start cell: layer=0, row=154, col=222
Processing start cell: layer=0, row=154, col=231
Processing start cell: layer=0, row=239, col=243
Processing start cell: layer=0, row=231, col=239
Processing start cell: layer=0, row=239, col=252
Processing start cell: layer=0, row=227, col=250
Processing start cell: layer=0, row=176, col=237
Processing start cell: layer=0, row=242, col=248
Processing start cell: layer=0, row=231, col=248
Processing start cell: layer=0, row=225, col=243
Processing start cell: layer=0, row=219, col=246
Processing start cell: layer=0, row=242, col=257
Processing start cell: layer=0, row=157, col=233
Processing start cell: layer=0, row=198, col=232
Processing start cell: layer=0, row=155, col=214
Processing start cell: layer=0, row=220, col=238
Processing start cell: layer=2, row=251, col=266
Processing start cell: layer=0, row=223, col=234
Processing start cell: layer=0, row=212, col=234
Processing start cell: layer=0, row=243, col=249
Processing start cell: layer=0, row=201, col=234
Processing start cell: layer=0, row=235, col=245
Processing start cell: layer=0, row=223, col=243
Processing start cell: layer=0, row=161, col=230
Processing start cell: layer=0, row=235, col=254
Processing start cell: layer=0, row=158, col=206
Processing start cell: layer=0, row=158, col=215
Processing start cell: layer=0, row=232, col=239
Processing start cell: layer=0, row=158, col=224
Processing start cell: layer=0, row=224, col=235
Processing start cell: layer=0, row=213, col=235
Processing start cell: layer=0, row=216, col=231
Processing start cell: layer=0, row=158, col=233
Processing start cell: layer=0, row=224, col=244
Processing start cell: layer=0, row=162, col=231
Processing start cell: layer=0, row=216, col=240
Processing start cell: layer=0, row=150, col=229
Processing start cell: layer=0, row=246, col=250
Processing start cell: layer=0, row=238, col=246
Processing start cell: layer=2, row=250, col=270
Processing start cell: layer=0, row=238, col=255
Processing start cell: layer=0, row=230, col=251
Processing start cell: layer=0, row=154, col=217
Processing start cell: layer=0, row=249, col=264
Processing start cell: layer=0, row=154, col=226
Processing start cell: layer=0, row=227, col=236
Processing start cell: layer=0, row=184, col=236
Processing start cell: layer=0, row=239, col=247
Processing start cell: layer=0, row=227, col=245
Processing start cell: layer=0, row=165, col=232
Processing start cell: layer=0, row=231, col=243
Processing start cell: layer=0, row=219, col=241
Processing start cell: layer=0, row=239, col=256
Processing start cell: layer=0, row=157, col=228
Processing start cell: layer=0, row=242, col=252
Processing start cell: layer=0, row=231, col=252
Processing start cell: layer=0, row=250, col=265
Processing start cell: layer=0, row=242, col=261
Processing start cell: layer=0, row=220, col=233
Processing start cell: layer=0, row=188, col=233
Processing start cell: layer=0, row=220, col=242
Processing start cell: layer=0, row=235, col=240
Processing start cell: layer=0, row=223, col=238
Processing start cell: layer=0, row=212, col=238
Processing start cell: layer=0, row=204, col=234
Processing start cell: layer=0, row=193, col=234
Processing start cell: layer=0, row=235, col=249
Processing start cell: layer=0, row=223, col=247
Processing start cell: layer=0, row=146, col=236
Processing start cell: layer=0, row=158, col=210
Processing start cell: layer=0, row=245, col=253
Processing start cell: layer=0, row=234, col=253
Processing start cell: layer=0, row=253, col=266
Processing start cell: layer=0, row=245, col=262
Processing start cell: layer=0, row=158, col=228
Processing start cell: layer=0, row=224, col=239
Processing start cell: layer=0, row=216, col=235
Processing start cell: layer=0, row=205, col=235
Processing start cell: layer=0, row=150, col=233
Processing start cell: layer=0, row=246, col=245
Processing start cell: layer=0, row=238, col=241
Processing start cell: layer=0, row=230, col=237
Processing start cell: layer=0, row=238, col=250
Processing start cell: layer=0, row=246, col=263
Processing start cell: layer=0, row=230, col=246
Processing start cell: layer=0, row=153, col=235
Processing start cell: layer=0, row=230, col=255
Processing start cell: layer=0, row=239, col=242
Processing start cell: layer=0, row=227, col=240
Processing start cell: layer=0, row=157, col=214
Processing start cell: layer=0, row=231, col=238
Processing start cell: layer=0, row=219, col=236
Processing start cell: layer=0, row=239, col=251
Processing start cell: layer=0, row=227, col=249
Processing start cell: layer=0, row=211, col=232
Processing start cell: layer=0, row=242, col=247
Processing start cell: layer=0, row=231, col=247
Processing start cell: layer=0, row=219, col=245
Processing start cell: layer=0, row=208, col=236
Processing start cell: layer=0, row=200, col=232
Processing start cell: layer=0, row=242, col=256
Processing start cell: layer=0, row=231, col=256
Processing start cell: layer=0, row=176, col=236
Processing start cell: layer=0, row=157, col=232
Processing start cell: layer=0, row=149, col=234
Processing start cell: layer=0, row=241, col=260
Processing start cell: layer=0, row=220, col=237
Processing start cell: layer=0, row=223, col=233
Processing start cell: layer=0, row=212, col=233
Processing start cell: layer=0, row=220, col=246
Processing start cell: layer=0, row=201, col=233
Processing start cell: layer=0, row=223, col=242
Processing start cell: layer=0, row=161, col=229
Processing start cell: layer=0, row=191, col=230
Processing start cell: layer=0, row=179, col=237
Processing start cell: layer=0, row=245, col=248
Processing start cell: layer=0, row=234, col=248
Processing start cell: layer=0, row=226, col=244
Processing start cell: layer=0, row=234, col=257
Processing start cell: layer=2, row=249, col=268
Processing start cell: layer=0, row=237, col=253
Processing start cell: layer=0, row=197, col=235
Processing start cell: layer=0, row=215, col=234
Processing start cell: layer=0, row=246, col=249
Processing start cell: layer=0, row=153, col=221
Processing start cell: layer=0, row=238, col=245
Processing start cell: layer=0, row=164, col=230
Processing start cell: layer=0, row=230, col=241
Processing start cell: layer=2, row=250, col=269
Processing start cell: layer=0, row=238, col=254
Processing start cell: layer=0, row=153, col=230
Processing start cell: layer=0, row=230, col=250
Processing start cell: layer=0, row=249, col=263
Processing start cell: layer=0, row=227, col=235
Processing start cell: layer=2, row=239, col=259
Processing start cell: layer=0, row=227, col=244
Processing start cell: layer=0, row=184, col=235
Processing start cell: layer=0, row=165, col=231
Processing start cell: layer=0, row=231, col=242
Processing start cell: layer=0, row=219, col=240
Processing start cell: layer=0, row=157, col=218
Processing start cell: layer=0, row=211, col=236
Processing start cell: layer=0, row=189, col=236
Processing start cell: layer=0, row=157, col=227
Processing start cell: layer=2, row=253, col=270
Processing start cell: layer=0, row=241, col=255
Processing start cell: layer=0, row=220, col=232
Processing start cell: layer=0, row=244, col=260
Processing start cell: layer=0, row=223, col=237
Processing start cell: layer=0, row=212, col=237
Processing start cell: layer=0, row=204, col=233
Processing start cell: layer=0, row=193, col=233
Processing start cell: layer=0, row=234, col=243
Processing start cell: layer=0, row=160, col=228
Processing start cell: layer=0, row=226, col=239
Processing start cell: layer=0, row=149, col=228
Processing start cell: layer=0, row=245, col=252
Processing start cell: layer=0, row=234, col=252
Processing start cell: layer=0, row=237, col=248
Processing start cell: layer=0, row=226, col=248
Processing start cell: layer=0, row=245, col=261
Processing start cell: layer=0, row=218, col=244
Processing start cell: layer=0, row=237, col=257
Processing start cell: layer=0, row=152, col=233
Processing start cell: layer=0, row=149, col=237
Processing start cell: layer=0, row=238, col=240
Processing start cell: layer=0, row=215, col=238
Processing start cell: layer=0, row=246, col=253
Processing start cell: layer=0, row=230, col=236
Processing start cell: layer=0, row=207, col=234
Processing start cell: layer=0, row=238, col=249
Processing start cell: layer=0, row=196, col=234
Processing start cell: layer=0, row=187, col=236
Processing start cell: layer=0, row=230, col=245
Processing start cell: layer=0, row=153, col=225
Processing start cell: layer=0, row=153, col=234
Processing start cell: layer=0, row=230, col=254
Processing start cell: layer=0, row=248, col=262
Processing start cell: layer=2, row=252, col=273
Processing start cell: layer=0, row=227, col=239
Processing start cell: layer=0, row=231, col=237
Processing start cell: layer=0, row=219, col=235
Processing start cell: layer=0, row=208, col=235
Processing start cell: layer=0, row=219, col=244
Processing start cell: layer=0, row=157, col=231
Processing start cell: layer=0, row=241, col=250
Processing start cell: layer=0, row=190, col=237
Processing start cell: layer=0, row=244, col=246
Processing start cell: layer=0, row=233, col=246
Processing start cell: layer=0, row=241, col=259
Processing start cell: layer=0, row=222, col=246
Processing start cell: layer=0, row=233, col=255
Processing start cell: layer=0, row=234, col=238
Processing start cell: layer=0, row=226, col=234
Processing start cell: layer=0, row=179, col=236
Processing start cell: layer=0, row=234, col=247
Processing start cell: layer=0, row=245, col=247
Processing start cell: layer=0, row=237, col=243
Processing start cell: layer=0, row=226, col=243
Processing start cell: layer=0, row=234, col=256
Processing start cell: layer=0, row=218, col=239
Processing start cell: layer=2, row=249, col=267
Processing start cell: layer=0, row=237, col=252
Processing start cell: layer=0, row=160, col=232
Processing start cell: layer=0, row=245, col=265
Processing start cell: layer=0, row=152, col=228
Processing start cell: layer=0, row=215, col=233
Processing start cell: layer=0, row=153, col=220
Processing start cell: layer=0, row=238, col=244
Processing start cell: layer=0, row=215, col=242
Processing start cell: layer=0, row=187, col=231
Processing start cell: layer=0, row=230, col=240
Processing start cell: layer=0, row=164, col=229
Processing start cell: layer=0, row=153, col=229
Processing start cell: layer=0, row=199, col=234
Processing start cell: layer=0, row=230, col=249
Processing start cell: layer=0, row=248, col=248
Processing start cell: layer=0, row=186, col=235
Processing start cell: layer=2, row=252, col=268
Processing start cell: layer=0, row=240, col=253
Processing start cell: layer=0, row=229, col=253
Processing start cell: layer=0, row=227, col=234
Processing start cell: layer=0, row=157, col=208
Processing start cell: layer=0, row=157, col=217
Processing start cell: layer=0, row=219, col=239
Processing start cell: layer=0, row=211, col=235
Processing start cell: layer=0, row=200, col=235
Processing start cell: layer=0, row=222, col=232
Processing start cell: layer=0, row=241, col=245
Processing start cell: layer=0, row=190, col=232
Processing start cell: layer=0, row=233, col=241
Processing start cell: layer=2, row=253, col=269
Processing start cell: layer=0, row=241, col=254
Processing start cell: layer=0, row=222, col=241
Processing start cell: layer=0, row=214, col=237
Processing start cell: layer=0, row=244, col=250
Processing start cell: layer=0, row=233, col=250
Processing start cell: layer=0, row=156, col=230
Processing start cell: layer=0, row=148, col=235
Processing start cell: layer=0, row=160, col=209
Processing start cell: layer=0, row=191, col=233
Processing start cell: layer=0, row=234, col=242
Processing start cell: layer=0, row=160, col=227
Processing start cell: layer=0, row=226, col=238
Processing start cell: layer=0, row=203, col=236
Processing start cell: layer=0, row=245, col=251
Processing start cell: layer=0, row=234, col=251
Processing start cell: layer=0, row=218, col=234
Processing start cell: layer=0, row=237, col=247
Processing start cell: layer=0, row=226, col=247
Processing start cell: layer=0, row=195, col=232
Processing start cell: layer=0, row=218, col=243
Processing start cell: layer=0, row=237, col=256
Processing start cell: layer=0, row=152, col=232
Processing start cell: layer=0, row=149, col=236
Processing start cell: layer=0, row=215, col=237
Processing start cell: layer=0, row=153, col=224
Processing start cell: layer=0, row=207, col=233
Processing start cell: layer=0, row=196, col=233
Processing start cell: layer=0, row=186, col=230
Processing start cell: layer=0, row=248, col=252
Processing start cell: layer=0, row=240, col=248
Processing start cell: layer=0, row=229, col=248
Processing start cell: layer=0, row=248, col=261
Processing start cell: layer=0, row=221, col=244
Processing start cell: layer=2, row=252, col=272
Processing start cell: layer=0, row=240, col=257
Processing start cell: layer=0, row=157, col=212
Processing start cell: layer=0, row=156, col=216
Processing start cell: layer=0, row=192, col=235
Processing start cell: layer=0, row=222, col=236
Processing start cell: layer=0, row=156, col=225
Processing start cell: layer=0, row=241, col=249
Processing start cell: layer=0, row=214, col=232
Processing start cell: layer=0, row=244, col=245
Processing start cell: layer=0, row=233, col=245
Processing start cell: layer=0, row=241, col=258
Processing start cell: layer=0, row=222, col=245
Processing start cell: layer=0, row=214, col=241
Processing start cell: layer=0, row=244, col=254
Processing start cell: layer=0, row=233, col=254
Processing start cell: layer=0, row=159, col=230
Processing start cell: layer=0, row=156, col=234
Processing start cell: layer=0, row=148, col=230
Processing start cell: layer=0, row=244, col=263
Processing start cell: layer=0, row=245, col=246
Processing start cell: layer=0, row=247, col=265
Processing start cell: layer=0, row=237, col=242
Processing start cell: layer=0, row=226, col=242
Processing start cell: layer=0, row=160, col=231
Processing start cell: layer=0, row=218, col=238
Processing start cell: layer=0, row=152, col=227
Processing start cell: layer=0, row=149, col=231
Processing start cell: layer=0, row=152, col=236
Processing start cell: layer=0, row=182, col=237
Processing start cell: layer=0, row=236, col=255
Processing start cell: layer=0, row=215, col=232
Processing start cell: layer=0, row=153, col=219
Processing start cell: layer=0, row=207, col=237
Processing start cell: layer=0, row=199, col=233
Processing start cell: layer=0, row=248, col=247
Processing start cell: layer=0, row=240, col=243
Processing start cell: layer=0, row=229, col=243
Processing start cell: layer=0, row=163, col=232
Processing start cell: layer=0, row=221, col=239
Processing start cell: layer=2, row=252, col=267
Processing start cell: layer=0, row=240, col=252
Processing start cell: layer=0, row=229, col=252
Processing start cell: layer=0, row=248, col=265
Processing start cell: layer=0, row=155, col=228
Processing start cell: layer=0, row=147, col=233
Processing start cell: layer=0, row=156, col=220
Processing start cell: layer=0, row=241, col=244
Processing start cell: layer=0, row=156, col=232
Processing start cell: layer=0, row=190, col=231
Processing start cell: layer=0, row=251, col=276
Processing start cell: layer=0, row=233, col=240
Processing start cell: layer=0, row=241, col=253
Processing start cell: layer=0, row=222, col=240
Processing start cell: layer=0, row=214, col=236
Processing start cell: layer=0, row=244, col=249
Processing start cell: layer=0, row=233, col=249
Processing start cell: layer=0, row=202, col=234
Processing start cell: layer=0, row=191, col=234
Processing start cell: layer=0, row=159, col=225
Processing start cell: layer=0, row=156, col=231
Processing start cell: layer=0, row=160, col=208
Processing start cell: layer=0, row=148, col=234
Processing start cell: layer=0, row=247, col=251
Processing start cell: layer=0, row=247, col=260
Processing start cell: layer=0, row=160, col=226
Processing start cell: layer=0, row=226, col=237
Processing start cell: layer=0, row=203, col=235
Processing start cell: layer=0, row=152, col=222
Processing start cell: layer=0, row=218, col=233
Processing start cell: layer=0, row=152, col=231
Processing start cell: layer=0, row=236, col=241
Processing start cell: layer=0, row=225, col=241
Processing start cell: layer=0, row=236, col=250
Processing start cell: layer=0, row=225, col=250
Processing start cell: layer=0, row=228, col=246
Processing start cell: layer=0, row=151, col=235
Processing start cell: layer=0, row=163, col=227
Processing start cell: layer=0, row=229, col=238
Processing start cell: layer=0, row=206, col=236
Processing start cell: layer=0, row=248, col=251
Processing start cell: layer=0, row=221, col=234
Processing start cell: layer=0, row=210, col=234
Processing start cell: layer=0, row=240, col=247
Processing start cell: layer=0, row=229, col=247
Processing start cell: layer=0, row=221, col=243
Processing start cell: layer=2, row=252, col=271
Processing start cell: layer=0, row=240, col=256
Processing start cell: layer=0, row=155, col=232
Processing start cell: layer=0, row=147, col=237
Processing start cell: layer=2, row=251, col=275
Processing start cell: layer=0, row=156, col=215
Processing start cell: layer=0, row=159, col=211
Processing start cell: layer=0, row=156, col=224
Processing start cell: layer=0, row=222, col=235
Processing start cell: layer=0, row=254, col=267
Processing start cell: layer=0, row=156, col=233
Processing start cell: layer=0, row=233, col=244
Processing start cell: layer=0, row=222, col=244
Processing start cell: layer=0, row=159, col=229
Processing start cell: layer=0, row=214, col=240
Processing start cell: layer=0, row=189, col=230
Processing start cell: layer=0, row=148, col=238
Processing start cell: layer=0, row=232, col=248
Processing start cell: layer=0, row=181, col=235
Processing start cell: layer=0, row=247, col=246
Processing start cell: layer=0, row=247, col=264
Processing start cell: layer=0, row=195, col=235
Processing start cell: layer=0, row=225, col=236
Processing start cell: layer=0, row=217, col=232
Processing start cell: layer=0, row=182, col=236
Processing start cell: layer=0, row=236, col=245
Processing start cell: layer=0, row=225, col=245
Processing start cell: layer=0, row=151, col=230
Processing start cell: layer=0, row=228, col=241
Processing start cell: layer=0, row=217, col=241
Processing start cell: layer=0, row=236, col=254
Processing start cell: layer=0, row=209, col=237
Processing start cell: layer=0, row=228, col=250
Processing start cell: layer=0, row=154, col=235
Processing start cell: layer=0, row=155, col=218
Processing start cell: layer=0, row=163, col=231
Processing start cell: layer=0, row=229, col=242
Processing start cell: layer=0, row=155, col=227
Processing start cell: layer=0, row=250, col=274
Processing start cell: layer=0, row=221, col=238
Processing start cell: layer=0, row=240, col=251
Processing start cell: layer=0, row=229, col=251
Processing start cell: layer=0, row=210, col=238
Processing start cell: layer=0, row=221, col=247
Processing start cell: layer=0, row=158, col=229
Processing start cell: layer=0, row=147, col=232
Processing start cell: layer=2, row=251, col=270
Processing start cell: layer=0, row=243, col=253
Processing start cell: layer=0, row=156, col=219
Processing start cell: layer=0, row=243, col=262
Processing start cell: layer=0, row=156, col=228
Processing start cell: layer=0, row=214, col=235
Processing start cell: layer=0, row=202, col=233
Processing start cell: layer=0, row=159, col=233
Processing start cell: layer=0, row=189, col=234
Processing start cell: layer=0, row=232, col=243
Processing start cell: layer=0, row=213, col=239
Processing start cell: layer=0, row=232, col=252
Processing start cell: layer=0, row=162, col=226
Processing start cell: layer=0, row=247, col=250
Processing start cell: layer=0, row=224, col=248
Processing start cell: layer=0, row=247, col=268
Processing start cell: layer=0, row=236, col=240
Processing start cell: layer=0, row=225, col=240
Processing start cell: layer=0, row=151, col=225
Processing start cell: layer=0, row=228, col=236
Processing start cell: layer=0, row=217, col=236
Processing start cell: layer=0, row=236, col=249
Processing start cell: layer=0, row=225, col=249
Processing start cell: layer=0, row=209, col=232
Processing start cell: layer=0, row=228, col=245
Processing start cell: layer=0, row=194, col=234
Processing start cell: layer=0, row=185, col=236
Processing start cell: layer=0, row=154, col=221
Processing start cell: layer=0, row=154, col=230
Processing start cell: layer=0, row=151, col=234
Processing start cell: layer=0, row=163, col=226
Processing start cell: layer=0, row=229, col=237
Processing start cell: layer=0, row=206, col=235
Processing start cell: layer=0, row=155, col=222
Processing start cell: layer=0, row=221, col=233
Processing start cell: layer=0, row=210, col=233
Processing start cell: layer=0, row=240, col=246
Processing start cell: layer=0, row=155, col=231
Processing start cell: layer=0, row=221, col=242
Processing start cell: layer=0, row=190, col=236
Processing start cell: layer=0, row=147, col=236
Processing start cell: layer=0, row=188, col=237
Processing start cell: layer=0, row=243, col=248
Processing start cell: layer=2, row=251, col=274
Processing start cell: layer=0, row=177, col=237
Processing start cell: layer=0, row=235, col=244
Processing start cell: layer=0, row=156, col=214
Processing start cell: layer=0, row=235, col=253
Processing start cell: layer=0, row=232, col=238
Processing start cell: layer=0, row=224, col=234
Processing start cell: layer=0, row=213, col=234
Processing start cell: layer=0, row=232, col=247
Processing start cell: layer=0, row=224, col=243
Processing start cell: layer=0, row=232, col=256
Processing start cell: layer=0, row=216, col=239
Processing start cell: layer=0, row=162, col=230
Processing start cell: layer=0, row=158, col=232
Processing start cell: layer=0, row=150, col=228
Processing start cell: layer=0, row=150, col=237
Processing start cell: layer=0, row=247, col=263
Processing start cell: layer=0, row=225, col=235
Processing start cell: layer=0, row=246, col=267
Processing start cell: layer=0, row=217, col=231
Processing start cell: layer=0, row=236, col=244
Processing start cell: layer=0, row=225, col=244
Processing start cell: layer=0, row=154, col=216
Processing start cell: layer=0, row=228, col=240
Processing start cell: layer=0, row=217, col=240
Processing start cell: layer=0, row=236, col=253
Processing start cell: layer=0, row=209, col=236
Processing start cell: layer=0, row=154, col=225
Processing start cell: layer=0, row=228, col=249
Processing start cell: layer=0, row=151, col=229
Processing start cell: layer=0, row=154, col=234
Processing start cell: layer=0, row=239, col=246
Processing start cell: layer=0, row=239, col=255
Processing start cell: layer=0, row=242, col=251
Processing start cell: layer=0, row=231, col=251
Processing start cell: layer=0, row=250, col=264
Processing start cell: layer=0, row=155, col=217
Processing start cell: layer=0, row=242, col=260
Processing start cell: layer=0, row=155, col=226
Processing start cell: layer=0, row=250, col=273
Processing start cell: layer=0, row=221, col=237
Processing start cell: layer=0, row=198, col=235
Processing start cell: layer=0, row=188, col=232
Processing start cell: layer=0, row=220, col=241
Processing start cell: layer=2, row=251, col=269
Processing start cell: layer=0, row=235, col=239
Processing start cell: layer=0, row=243, col=252
Processing start cell: layer=0, row=251, col=265
Processing start cell: layer=0, row=235, col=248
Processing start cell: layer=0, row=223, col=246
Processing start cell: layer=0, row=243, col=261
Processing start cell: layer=0, row=180, col=237
Processing start cell: layer=0, row=235, col=257
Processing start cell: layer=0, row=157, col=222
Processing start cell: layer=0, row=146, col=235
Processing start cell: layer=0, row=189, col=233
Processing start cell: layer=0, row=232, col=242
Processing start cell: layer=0, row=158, col=227
Processing start cell: layer=0, row=224, col=238
Processing start cell: layer=0, row=213, col=238
Processing start cell: layer=0, row=232, col=251
Processing start cell: layer=0, row=216, col=234
Processing start cell: layer=0, row=205, col=234
Processing start cell: layer=0, row=247, col=249
Processing start cell: layer=0, row=224, col=247
Processing start cell: layer=0, row=150, col=232
Processing start cell: layer=0, row=149, col=232
Processing start cell: layer=0, row=246, col=262
Processing start cell: layer=0, row=236, col=239
Processing start cell: layer=0, row=225, col=239
Processing start cell: layer=0, row=151, col=224
Processing start cell: layer=0, row=228, col=235
Processing start cell: layer=0, row=217, col=235
Processing start cell: layer=0, row=194, col=233
Processing start cell: layer=0, row=154, col=220
Processing start cell: layer=0, row=151, col=233
Processing start cell: layer=0, row=228, col=244
Processing start cell: layer=0, row=154, col=229
Processing start cell: layer=0, row=239, col=250
Processing start cell: layer=0, row=227, col=248
Processing start cell: layer=0, row=242, col=246
Processing start cell: layer=0, row=231, col=246
Processing start cell: layer=0, row=206, col=234
Processing start cell: layer=0, row=242, col=255
Processing start cell: layer=0, row=231, col=255
Processing start cell: layer=0, row=155, col=221
Processing start cell: layer=0, row=220, col=236
Processing start cell: layer=0, row=212, col=232
Processing start cell: layer=0, row=201, col=232
Processing start cell: layer=0, row=243, col=247
Processing start cell: layer=2, row=251, col=273
Processing start cell: layer=0, row=220, col=245
Processing start cell: layer=0, row=235, col=243
Processing start cell: layer=0, row=223, col=241
Processing start cell: layer=0, row=177, col=236
Processing start cell: layer=0, row=204, col=237
Processing start cell: layer=0, row=161, col=228
Processing start cell: layer=0, row=235, col=252
Processing start cell: layer=0, row=232, col=237
Processing start cell: layer=0, row=224, col=233
Processing start cell: layer=0, row=213, col=233
Processing start cell: layer=0, row=232, col=246
Processing start cell: layer=0, row=158, col=231
Processing start cell: layer=0, row=224, col=242
Processing start cell: layer=0, row=162, col=229
Processing start cell: layer=0, row=216, col=238
Processing start cell: layer=0, row=150, col=227
Processing start cell: layer=0, row=197, col=234
Processing start cell: layer=0, row=150, col=236
Processing start cell: layer=0, row=246, col=248
Processing start cell: layer=2, row=250, col=268
Processing start cell: layer=0, row=238, col=253
Processing start cell: layer=0, row=246, col=266
Processing start cell: layer=0, row=154, col=215
Processing start cell: layer=0, row=249, col=262
Processing start cell: layer=0, row=151, col=228
Processing start cell: layer=0, row=154, col=224
Processing start cell: layer=0, row=249, col=271
Processing start cell: layer=0, row=209, col=235
Processing start cell: layer=0, row=154, col=233
Processing start cell: layer=0, row=239, col=245
Processing start cell: layer=0, row=227, col=243
Processing start cell: layer=0, row=165, col=230
Processing start cell: layer=0, row=231, col=241
Processing start cell: layer=0, row=239, col=254
Processing start cell: layer=0, row=227, col=252
Processing start cell: layer=0, row=157, col=226
Processing start cell: layer=0, row=242, col=250
Processing start cell: layer=0, row=231, col=250
Processing start cell: layer=0, row=242, col=259
Processing start cell: layer=0, row=188, col=231
Processing start cell: layer=0, row=220, col=240
Processing start cell: layer=2, row=251, col=268
Processing start cell: layer=0, row=223, col=236
Processing start cell: layer=0, row=212, col=236
Processing start cell: layer=0, row=243, col=251
Processing start cell: layer=0, row=204, col=232
Processing start cell: layer=0, row=193, col=232
Processing start cell: layer=0, row=235, col=247
Processing start cell: layer=0, row=223, col=245
Processing start cell: layer=0, row=180, col=236
Processing start cell: layer=0, row=161, col=232
Processing start cell: layer=0, row=157, col=221
Processing start cell: layer=0, row=185, col=237
Processing start cell: layer=0, row=245, col=260
Processing start cell: layer=0, row=158, col=226
Processing start cell: layer=0, row=224, col=237
Processing start cell: layer=0, row=213, col=237
Processing start cell: layer=0, row=216, col=233
Processing start cell: layer=0, row=205, col=233
Processing start cell: layer=0, row=150, col=231
Processing start cell: layer=0, row=216, col=242
Processing start cell: layer=0, row=246, col=252
Processing start cell: layer=0, row=183, col=237
Processing start cell: layer=0, row=238, col=248
Processing start cell: layer=0, row=246, col=261
Processing start cell: layer=0, row=230, col=244
Processing start cell: layer=2, row=250, col=272
Processing start cell: layer=0, row=238, col=257
Processing start cell: layer=0, row=187, col=235
Processing start cell: layer=0, row=194, col=232
Processing start cell: layer=0, row=230, col=253
Processing start cell: layer=0, row=154, col=219
Processing start cell: layer=0, row=153, col=233
Processing start cell: layer=0, row=186, col=237
Processing start cell: layer=0, row=227, col=238
Processing start cell: layer=0, row=184, col=229
Processing start cell: layer=0, row=219, col=234
Processing start cell: layer=0, row=208, col=234
Processing start cell: layer=0, row=239, col=249
Processing start cell: layer=0, row=227, col=247
Processing start cell: layer=0, row=242, col=245
Processing start cell: layer=0, row=231, col=245
Processing start cell: layer=0, row=239, col=258
Processing start cell: layer=0, row=219, col=243
Processing start cell: layer=0, row=211, col=239
Processing start cell: layer=0, row=242, col=254
Processing start cell: layer=0, row=231, col=254
Processing start cell: layer=0, row=157, col=230
Processing start cell: layer=0, row=220, col=235
Processing start cell: layer=0, row=188, col=235
Processing start cell: layer=0, row=220, col=244
Processing start cell: layer=0, row=235, col=242
Processing start cell: layer=0, row=223, col=240
Processing start cell: layer=0, row=161, col=227
Processing start cell: layer=0, row=204, col=236
Processing start cell: layer=0, row=223, col=249
Processing start cell: layer=0, row=191, col=237
Processing start cell: layer=0, row=234, col=246
Processing start cell: layer=0, row=158, col=212
Processing start cell: layer=0, row=234, col=255
Processing start cell: layer=2, row=249, col=266
Processing start cell: layer=0, row=237, col=251
Processing start cell: layer=0, row=213, col=232
Processing start cell: layer=0, row=245, col=264
Processing start cell: layer=0, row=150, col=226
Processing start cell: layer=0, row=216, col=237
Processing start cell: layer=0, row=197, col=233
Processing start cell: layer=0, row=246, col=247
Processing start cell: layer=0, row=238, col=243
Processing start cell: layer=0, row=215, col=241
Processing start cell: layer=0, row=187, col=230
Processing start cell: layer=0, row=230, col=239
Processing start cell: layer=2, row=250, col=267
Processing start cell: layer=0, row=238, col=252
Processing start cell: layer=0, row=164, col=228
Processing start cell: layer=0, row=246, col=265
Processing start cell: layer=0, row=230, col=248
Processing start cell: layer=0, row=153, col=228
Processing start cell: layer=0, row=239, col=244
Processing start cell: layer=0, row=227, col=242
Processing start cell: layer=0, row=165, col=229
Processing start cell: layer=0, row=231, col=240
Processing start cell: layer=0, row=219, col=238
Processing start cell: layer=0, row=227, col=251
Processing start cell: layer=0, row=211, col=234
Processing start cell: layer=0, row=200, col=234
Processing start cell: layer=0, row=242, col=249
Processing start cell: layer=0, row=231, col=249
Processing start cell: layer=0, row=157, col=225
Processing start cell: layer=0, row=157, col=234
Processing start cell: layer=2, row=253, col=268
Processing start cell: layer=0, row=220, col=239
Processing start cell: layer=0, row=223, col=235
Processing start cell: layer=0, row=212, col=235
Processing start cell: layer=0, row=201, col=235
Processing start cell: layer=0, row=223, col=244
Processing start cell: layer=0, row=161, col=231
Processing start cell: layer=0, row=234, col=241
Processing start cell: layer=0, row=158, col=207
Processing start cell: layer=0, row=245, col=250
Processing start cell: layer=0, row=234, col=250
Processing start cell: layer=0, row=237, col=246
Processing start cell: layer=0, row=226, col=246
Processing start cell: layer=0, row=218, col=242
Processing start cell: layer=2, row=249, col=270
Processing start cell: layer=0, row=237, col=255
Processing start cell: layer=0, row=158, col=216
Processing start cell: layer=0, row=149, col=235
Processing start cell: layer=0, row=160, col=230
Processing start cell: layer=0, row=215, col=236
Processing start cell: layer=0, row=246, col=251
Processing start cell: layer=0, row=207, col=232
Processing start cell: layer=0, row=196, col=232
Processing start cell: layer=0, row=238, col=247
Processing start cell: layer=0, row=183, col=236
Processing start cell: layer=0, row=187, col=234
Processing start cell: layer=0, row=230, col=243
Processing start cell: layer=2, row=250, col=271
Processing start cell: layer=0, row=238, col=256
Processing start cell: layer=0, row=164, col=232
Processing start cell: layer=0, row=230, col=252
Processing start cell: layer=0, row=155, col=223
Processing start cell: layer=0, row=153, col=232
Processing start cell: layer=0, row=145, col=237
Processing start cell: layer=0, row=227, col=237
Processing start cell: layer=0, row=157, col=211
Processing start cell: layer=0, row=248, col=269
Processing start cell: layer=0, row=219, col=233
Processing start cell: layer=0, row=227, col=246
Processing start cell: layer=0, row=208, col=233
Processing start cell: layer=0, row=242, col=244
Processing start cell: layer=0, row=219, col=242
Processing start cell: layer=0, row=157, col=229
Processing start cell: layer=0, row=211, col=238
Processing start cell: layer=0, row=192, col=234
Processing start cell: layer=0, row=175, col=237
Processing start cell: layer=0, row=241, col=248
Processing start cell: layer=0, row=190, col=235
Processing start cell: layer=0, row=241, col=257
Processing start cell: layer=0, row=244, col=253
Processing start cell: layer=0, row=233, col=253
Processing start cell: layer=0, row=252, col=266
Processing start cell: layer=0, row=244, col=262
Processing start cell: layer=0, row=204, col=235
Processing start cell: layer=0, row=193, col=235
Processing start cell: layer=0, row=245, col=245
Processing start cell: layer=0, row=234, col=245
Processing start cell: layer=0, row=237, col=241
Processing start cell: layer=0, row=226, col=241
Processing start cell: layer=0, row=245, col=254
Processing start cell: layer=0, row=234, col=254
Processing start cell: layer=0, row=253, col=267
Processing start cell: layer=0, row=237, col=250
Processing start cell: layer=0, row=226, col=250
Processing start cell: layer=0, row=245, col=263
Processing start cell: layer=0, row=218, col=237
Processing start cell: layer=0, row=152, col=226
Processing start cell: layer=0, row=152, col=235
Processing start cell: layer=0, row=160, col=207
Processing start cell: layer=0, row=246, col=246
Processing start cell: layer=0, row=153, col=218
Processing start cell: layer=0, row=238, col=242
Processing start cell: layer=0, row=215, col=240
Processing start cell: layer=0, row=164, col=227
Processing start cell: layer=0, row=230, col=238
Processing start cell: layer=0, row=207, col=236
Processing start cell: layer=0, row=238, col=251
Processing start cell: layer=0, row=199, col=232
Processing start cell: layer=0, row=230, col=247
Processing start cell: layer=0, row=156, col=229
Processing start cell: layer=0, row=153, col=227
Processing start cell: layer=0, row=153, col=236
Processing start cell: layer=0, row=248, col=264
Processing start cell: layer=0, row=227, col=241
Processing start cell: layer=0, row=157, col=215
Processing start cell: layer=0, row=219, col=237
Processing start cell: layer=0, row=208, col=237
Processing start cell: layer=0, row=211, col=233
Processing start cell: layer=0, row=200, col=233
Processing start cell: layer=0, row=157, col=224
Processing start cell: layer=0, row=241, col=243
Processing start cell: layer=0, row=190, col=230
Processing start cell: layer=0, row=233, col=239
Processing start cell: layer=0, row=222, col=239
Processing start cell: layer=0, row=241, col=252
Processing start cell: layer=0, row=244, col=248
Processing start cell: layer=0, row=233, col=248
Processing start cell: layer=0, row=222, col=248
Processing start cell: layer=0, row=148, col=233
Processing start cell: layer=0, row=191, col=231
Processing start cell: layer=0, row=234, col=240
Processing start cell: layer=0, row=160, col=225
Processing start cell: layer=0, row=226, col=236
Processing start cell: layer=0, row=203, col=234
Processing start cell: layer=0, row=245, col=249
Processing start cell: layer=0, row=234, col=249
Processing start cell: layer=0, row=218, col=232
Processing start cell: layer=0, row=237, col=245
Processing start cell: layer=0, row=226, col=245
Processing start cell: layer=0, row=218, col=241
Processing start cell: layer=2, row=249, col=269
Processing start cell: layer=0, row=237, col=254
Processing start cell: layer=0, row=152, col=221
Processing start cell: layer=0, row=152, col=230
Processing start cell: layer=0, row=215, col=235
Processing start cell: layer=0, row=153, col=222
Processing start cell: layer=0, row=183, col=235
Processing start cell: layer=0, row=164, col=231
Processing start cell: layer=0, row=230, col=242
Processing start cell: layer=0, row=153, col=231
Processing start cell: layer=0, row=188, col=236
Processing start cell: layer=0, row=248, col=250
Processing start cell: layer=0, row=229, col=246
Processing start cell: layer=2, row=252, col=270
Processing start cell: layer=0, row=240, col=255
Processing start cell: layer=0, row=229, col=255
Processing start cell: layer=0, row=219, col=232
Processing start cell: layer=0, row=208, col=232
Processing start cell: layer=0, row=157, col=210
Processing start cell: layer=0, row=211, col=237
Processing start cell: layer=0, row=192, col=233
Processing start cell: layer=0, row=222, col=234
Processing start cell: layer=0, row=241, col=247
Processing start cell: layer=0, row=159, col=206
Processing start cell: layer=0, row=190, col=234
Processing start cell: layer=0, row=233, col=243
Processing start cell: layer=0, row=222, col=243
Processing start cell: layer=0, row=241, col=256
Processing start cell: layer=0, row=214, col=239
Processing start cell: layer=0, row=159, col=228
Processing start cell: layer=0, row=244, col=252
Processing start cell: layer=0, row=233, col=252
Processing start cell: layer=0, row=159, col=224
Processing start cell: layer=0, row=148, col=237
Processing start cell: layer=0, row=244, col=261
Processing start cell: layer=0, row=234, col=244
Processing start cell: layer=0, row=160, col=229
Processing start cell: layer=0, row=237, col=240
Processing start cell: layer=0, row=226, col=240
Processing start cell: layer=0, row=152, col=225
Processing start cell: layer=0, row=218, col=236
Processing start cell: layer=0, row=195, col=234
Processing start cell: layer=0, row=237, col=249
Processing start cell: layer=0, row=226, col=249
Processing start cell: layer=0, row=152, col=234
Processing start cell: layer=0, row=182, col=235
Processing start cell: layer=0, row=149, col=238
Processing start cell: layer=2, row=248, col=268
Processing start cell: layer=0, row=153, col=217
Processing start cell: layer=0, row=215, col=239
Processing start cell: layer=0, row=164, col=226
Processing start cell: layer=0, row=207, col=235
Processing start cell: layer=0, row=196, col=235
Processing start cell: layer=0, row=153, col=226
Processing start cell: layer=0, row=163, col=230
Processing start cell: layer=0, row=229, col=241
Processing start cell: layer=0, row=217, col=239
Processing start cell: layer=0, row=210, col=237
Processing start cell: layer=0, row=240, col=250
Processing start cell: layer=0, row=229, col=250
Processing start cell: layer=0, row=248, col=263
Processing start cell: layer=0, row=221, col=246
Processing start cell: layer=2, row=252, col=274
Processing start cell: layer=0, row=240, col=259
Processing start cell: layer=0, row=178, col=237
Processing start cell: layer=0, row=155, col=235
Processing start cell: layer=0, row=152, col=223
Processing start cell: layer=0, row=156, col=218
Processing start cell: layer=0, row=159, col=214
Processing start cell: layer=0, row=156, col=227
Processing start cell: layer=0, row=233, col=238
Processing start cell: layer=0, row=222, col=238
Processing start cell: layer=0, row=241, col=251
Processing start cell: layer=0, row=214, col=234
Processing start cell: layer=0, row=202, col=232
Processing start cell: layer=0, row=244, col=247
Processing start cell: layer=0, row=233, col=247
Processing start cell: layer=0, row=222, col=247
Processing start cell: layer=0, row=159, col=232
Processing start cell: layer=0, row=233, col=256
Processing start cell: layer=0, row=148, col=232
Processing start cell: layer=0, row=234, col=239
Processing start cell: layer=0, row=226, col=235
Processing start cell: layer=0, row=203, col=233
Processing start cell: layer=0, row=152, col=220
Processing start cell: layer=0, row=247, col=267
Processing start cell: layer=0, row=237, col=244
Processing start cell: layer=0, row=149, col=233
Processing start cell: layer=0, row=152, col=229
Processing start cell: layer=0, row=218, col=240
Processing start cell: layer=0, row=236, col=248
Processing start cell: layer=0, row=225, col=248
Processing start cell: layer=0, row=185, col=235
Processing start cell: layer=0, row=236, col=257
Processing start cell: layer=0, row=228, col=253
Processing start cell: layer=0, row=199, col=235
Processing start cell: layer=0, row=229, col=236
Processing start cell: layer=0, row=248, col=249
Processing start cell: layer=0, row=221, col=232
Processing start cell: layer=0, row=210, col=232
Processing start cell: layer=0, row=240, col=245
Processing start cell: layer=0, row=229, col=245
Processing start cell: layer=0, row=186, col=236
Processing start cell: layer=0, row=221, col=241
Processing start cell: layer=2, row=252, col=269
Processing start cell: layer=0, row=240, col=254
Processing start cell: layer=0, row=229, col=254
Processing start cell: layer=0, row=155, col=230
Processing start cell: layer=0, row=147, col=235
Processing start cell: layer=0, row=156, col=223
Processing start cell: layer=0, row=156, col=222
Processing start cell: layer=0, row=222, col=233
Processing start cell: layer=0, row=241, col=246
Processing start cell: layer=0, row=190, col=233
Processing start cell: layer=0, row=233, col=242
Processing start cell: layer=0, row=222, col=242
Processing start cell: layer=0, row=159, col=227
Processing start cell: layer=0, row=214, col=238
Processing start cell: layer=0, row=191, col=236
Processing start cell: layer=0, row=244, col=251
Processing start cell: layer=0, row=233, col=251
Processing start cell: layer=0, row=189, col=237
Processing start cell: layer=0, row=148, col=236
Processing start cell: layer=0, row=160, col=210
Processing start cell: layer=0, row=232, col=255
Processing start cell: layer=0, row=247, col=262
Processing start cell: layer=0, row=152, col=224
Processing start cell: layer=0, row=218, col=235
Processing start cell: layer=0, row=225, col=234
Processing start cell: layer=0, row=195, col=233
Processing start cell: layer=0, row=236, col=243
Processing start cell: layer=0, row=185, col=230
Processing start cell: layer=0, row=228, col=239
Processing start cell: layer=2, row=248, col=267
Processing start cell: layer=0, row=236, col=252
Processing end cell: layer=0, row=148, col=231
Processing end cell: layer=2, row=149, col=227
Processing end cell: layer=0, row=246, col=214
Processing end cell: layer=0, row=158, col=208
Processing end cell: layer=0, row=212, col=279
Processing end cell: layer=2, row=251, col=277
Processing end cell: layer=2, row=158, col=205
Processing end cell: layer=2, row=200, col=275
Processing end cell: layer=2, row=232, col=209
Processing end cell: layer=0, row=157, col=209
Processing end cell: layer=2, row=183, col=268
Processing end cell: layer=2, row=160, col=202
Processing end cell: layer=2, row=160, col=211
Processing end cell: layer=2, row=158, col=214
Processing end cell: layer=2, row=234, col=288
Processing end cell: layer=2, row=192, col=197
Processing end cell: layer=0, row=158, col=210
Processing end cell: layer=2, row=247, col=215
Processing end cell: layer=0, row=146, col=235
Processing end cell: layer=0, row=145, col=237
Processing end cell: layer=2, row=227, col=285
Processing end cell: layer=0, row=159, col=208
Processing end cell: layer=2, row=160, col=213
Processing end cell: layer=2, row=198, col=197
Processing end cell: layer=2, row=235, col=289
Processing end cell: layer=2, row=147, col=231
Processing end cell: layer=0, row=158, col=212
Processing end cell: layer=0, row=160, col=209
Processing end cell: layer=2, row=237, col=289
Processing end cell: layer=2, row=228, col=286
Processing end cell: layer=0, row=156, col=214
Processing end cell: layer=2, row=243, col=213
Processing end cell: layer=0, row=224, col=284
Processing end cell: layer=2, row=234, col=210
Processing end cell: layer=0, row=228, col=207
Processing end cell: layer=2, row=226, col=206
Processing end cell: layer=2, row=158, col=209
Processing end cell: layer=0, row=159, col=210
Processing end cell: layer=2, row=256, col=259
Processing end cell: layer=0, row=160, col=207
Processing end cell: layer=2, row=161, col=198
Processing end cell: layer=0, row=147, col=232
Processing end cell: layer=2, row=156, col=211
Processing end cell: layer=0, row=158, col=214
Processing end cell: layer=2, row=236, col=210
Processing end cell: layer=2, row=159, col=207
Processing end cell: layer=2, row=210, col=200
Processing end cell: layer=0, row=248, col=215
Processing end cell: layer=0, row=216, col=281
Processing end cell: layer=2, row=214, col=280
Processing end cell: layer=2, row=197, col=273
Processing end cell: layer=2, row=155, col=212
Processing end cell: layer=2, row=158, col=211
Processing end cell: layer=0, row=254, col=266
Processing end cell: layer=0, row=241, col=212
Processing end cell: layer=2, row=224, col=284
Processing end cell: layer=2, row=215, col=281
Processing end cell: layer=2, row=255, col=262
Processing end cell: layer=2, row=144, col=239
Processing end cell: layer=2, row=213, col=201
Processing end cell: layer=0, row=147, col=234
Processing end cell: layer=2, row=156, col=213
Processing end cell: layer=2, row=159, col=209
Processing end cell: layer=2, row=237, col=211
Processing end cell: layer=0, row=216, col=202
Processing end cell: layer=2, row=161, col=212
Processing end cell: layer=0, row=172, col=263
Processing end cell: layer=2, row=160, col=201
Processing end cell: layer=2, row=206, col=198
Processing end cell: layer=2, row=158, col=213
Processing end cell: layer=2, row=218, col=282
Processing end cell: layer=0, row=157, col=217
Processing end cell: layer=0, row=159, col=214
Processing end cell: layer=2, row=255, col=264
Processing end cell: layer=2, row=254, col=266
Processing end cell: layer=0, row=158, col=209
Processing end cell: layer=0, row=204, col=276
Processing end cell: layer=2, row=194, col=272
Processing end cell: layer=2, row=148, col=229
Processing end cell: layer=0, row=157, col=210
Processing end cell: layer=0, row=246, col=214
Processing end cell: layer=2, row=233, col=209
Processing end cell: layer=2, row=158, col=206
Processing end cell: layer=0, row=151, col=224
Processing end cell: layer=2, row=216, col=202
Processing end cell: layer=2, row=207, col=199
Processing end cell: layer=0, row=150, col=225
Processing end cell: layer=2, row=159, col=204
Processing end cell: layer=2, row=157, col=216
Processing end cell: layer=0, row=192, col=197
Processing end cell: layer=2, row=204, col=276
Processing end cell: layer=2, row=195, col=273
Processing end cell: layer=0, row=149, col=229
Processing end cell: layer=2, row=158, col=208
Processing end cell: layer=0, row=246, col=214
Processing end cell: layer=0, row=160, col=214
Processing end cell: layer=2, row=246, col=214
Processing end cell: layer=0, row=159, col=208
Processing end cell: layer=0, row=155, col=214
Processing end cell: layer=2, row=156, col=210
Processing end cell: layer=2, row=171, col=263
Processing end cell: layer=0, row=148, col=230
Processing end cell: layer=2, row=157, col=209
Processing end cell: layer=0, row=150, col=227
Processing end cell: layer=2, row=161, col=200
Processing end cell: layer=0, row=194, col=272
Processing end cell: layer=2, row=222, col=283
Processing end cell: layer=0, row=158, col=206
Processing end cell: layer=0, row=157, col=214
Processing end cell: layer=2, row=230, col=287
Processing end cell: layer=2, row=174, col=264
Processing end cell: layer=0, row=153, col=219
Processing end cell: layer=0, row=226, col=206
Processing end cell: layer=2, row=161, col=211
Processing end cell: layer=0, row=219, col=282
Processing end cell: layer=2, row=238, col=211
Processing end cell: layer=0, row=152, col=220
Processing end cell: layer=2, row=155, col=213
Processing end cell: layer=2, row=160, col=212
Processing end cell: layer=0, row=171, col=263
Processing end cell: layer=2, row=222, col=205
Processing end cell: layer=2, row=157, col=213
Processing end cell: layer=2, row=195, col=197
Processing end cell: layer=2, row=159, col=210
Processing end cell: layer=2, row=209, col=278
Processing end cell: layer=0, row=226, col=206
Processing end cell: layer=0, row=158, col=211
Processing end cell: layer=2, row=192, col=271
Processing end cell: layer=2, row=143, col=241
Processing end cell: layer=2, row=241, col=212
Processing end cell: layer=0, row=151, col=223
Processing end cell: layer=0, row=152, col=222
Processing end cell: layer=0, row=146, col=236
Processing end cell: layer=2, row=202, col=275
Processing end cell: layer=0, row=158, col=206
Processing end cell: layer=2, row=160, col=214
Processing end cell: layer=2, row=249, col=216
Processing end cell: layer=2, row=159, col=203
Processing end cell: layer=2, row=152, col=219
Processing end cell: layer=0, row=171, col=263
Processing end cell: layer=2, row=229, col=286
Processing end cell: layer=0, row=158, col=213
Processing end cell: layer=2, row=212, col=279
Processing end cell: layer=0, row=160, col=210
Processing end cell: layer=0, row=224, col=284
Processing end cell: layer=0, row=149, col=228
Processing end cell: layer=0, row=238, col=211
Processing end cell: layer=0, row=159, col=211
Processing end cell: layer=0, row=158, col=206
Processing end cell: layer=0, row=216, col=281
Processing end cell: layer=0, row=194, col=272
Processing end cell: layer=2, row=232, col=287
Processing end cell: layer=0, row=159, col=207
Processing end cell: layer=2, row=189, col=197
Processing end cell: layer=2, row=206, col=277
Processing end cell: layer=2, row=150, col=224
Processing end cell: layer=2, row=144, col=238
Processing end cell: layer=2, row=180, col=267
Processing end cell: layer=2, row=161, col=199
Processing end cell: layer=2, row=156, col=212
Processing end cell: layer=0, row=158, col=215
Processing end cell: layer=0, row=241, col=212
Processing end cell: layer=2, row=228, col=207
Processing end cell: layer=2, row=182, col=267
Start flows shape: (1084, 1)
End flows shape: (164, 1)
Total start flow: 1.422780354296206
Total end flow: 2.73316597613531
Hyporheic flow rate (ft³/d): 4.155946330431516
Average hyporheic flow rate (ft³/d): 2.077973165215758
Zone budget summary (particles and MODFLOW cell budgets) appended to Hyporheic_output\Backward_pathline_stats.txt
C:\Users\u4eeevmq\AppData\Local\Temp\ipykernel_21176\1915477162.py:488: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead
See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
filtered_long_pathlines_df['layer'] = layers
C:\Users\u4eeevmq\AppData\Local\Temp\ipykernel_21176\1915477162.py:489: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead
See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
filtered_long_pathlines_df['row'] = rows
C:\Users\u4eeevmq\AppData\Local\Temp\ipykernel_21176\1915477162.py:490: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead
See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
filtered_long_pathlines_df['col'] = cols
Number of unique cells intersected by pathlines: 75789
C:\Users\u4eeevmq\AppData\Local\Temp\ipykernel_21176\1915477162.py:529: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead
See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
filtered_long_pathlines_df['hyporheic_volume'] = hyporheic_vols
Per-cell summary statistics exported to Hyporheic_output\Backward_pathline_stats.txt
Pathline summary statistics for particles exported to Hyporheic_output\Backward_pathline_stats.txt
C:\Users\u4eeevmq\AppData\Local\Temp\ipykernel_21176\1915477162.py:708: DeprecationWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.
lines = df_prc.groupby('particleid').apply(make_linestring)
INFO:pyogrio._io:Created 62,799 records
C:\Users\u4eeevmq\AppData\Local\Temp\ipykernel_21176\1915477162.py:718: UserWarning: Column names longer than 10 characters will be truncated when saved to ESRI Shapefile.
lines_gdf.to_file(os.path.join(output_folder, f"{direction}_hyporheic_pathlines_HECRAS_CRS.shp"), driver="ESRI Shapefile")
INFO:pyogrio._io:Created 1,141 records
INFO:pyogrio._io:Created 62,799 records
C:\Users\u4eeevmq\AppData\Local\Temp\ipykernel_21176\1915477162.py:720: UserWarning: Column names longer than 10 characters will be truncated when saved to ESRI Shapefile.
lines_gdf_wgs84.to_file(os.path.join(output_folder, f"{direction}_hyporheic_pathlines.shp"), driver="ESRI Shapefile")
INFO:pyogrio._io:Created 1,141 records
INFO:pyogrio._io:Created 62,799 records
INFO:pyogrio._io:Created 1,141 records
INFO:pyogrio._io:Created 62,799 records
INFO:pyogrio._io:Created 1,141 records
MODPATH 7 backward results processed and exported successfully.
Visualization of Model Results#
A plotting function is provided to visualize the three-dimensional model domain, as well as two-dimensional maps of surface elevation and simulated groundwater heads. These visualizations help verify model setup and interpret the distribution of hydraulic heads across layers and the domain. A table of computed results from the simulation is also provided.
# points_shp = r"C:\Users\u4eeevmq\Documents\Python\HyporheicFloPy\Hyporheic_output\Forward_hyporheic_points.shp"
# lines_shp = r"C:\Users\u4eeevmq\Documents\Python\HyporheicFloPy\Hyporheic_output\Forward_hyporheic_pathlines_HECRAS_CRS.shp"
# csv = r"C:\Users\u4eeevmq\Documents\Python\HyporheicFloPy\Hyporheic_output\particle_data.csv"
# results = r"C:\Users\u4eeevmq\Documents\Python\HyporheicFloPy\Hyporheic_output\pathline_stats.txt"
# sim_path = r"C:\Users\u4eeevmq\Documents\Python\HyporheicFloPy\HP_workspace\gwf_workspace"
# output_folder = "Hyporheic_output"
# direction = "Forward" # or "Backward" based on your scenario
base_dir = Path.cwd() # or set to your project root Path("C:/Users/you/Documents/Python/HyporheicFloPy")
# Build file paths dynamically
points_shp = os.path.join(base_dir, output_folder, f"{direction}_hyporheic_points_HECRAS_CRS.shp")
lines_shp = os.path.join(base_dir, output_folder, f"{direction}_hyporheic_pathlines_HECRAS_CRS.shp")
csv = os.path.join(base_dir, output_folder, f"{direction}_particle_data.csv")
results = os.path.join(base_dir, output_folder, f"{direction}_pathline_stats.txt")
print("Plot Simulation Results")
if __name__ == "__main__":
plot_hyporheic_workflow(
sim_name = sim_name, # Simulation name
sim_path = gwf_ws, # Path to the gwf simulation folder
exe_name = md6_exe_path, # Path to the MODFLOW 6 executable
sat_image_path = sat_image_path, # Path to the satellite image
gw_domain_shapefile_path = groundwater_domain_shp_path, # Path to the groundwater domain shapefile
particle_points_shp = points_shp, # Path to the particle points shapefile
pathlines_shp = lines_shp, # Path to the pathlines shapefile
river_cells = river_cells, # Path to the river cells CSV
particle_data_csv = csv,
pathline_stats_txt = results,
direction="Forward", # or "Backward" based on your scenario
output_folder=output_folder,
plot_layer=1, # can edit this to change the layer to plot
mx_origin=0,
my_origin=0,
zfac_3d=8.0, # can edit these factors to scale the 3D and longitudinal views
zfac_long=50.0, # can edit these factors to scale the 3D and longitudinal views
xfac_long=2.0, # can edit these factors to scale the 3D and longitudinal views
yfac_long=8.0, # can edit these factors to scale the 3D and longitudinal views
save_summary_csv="Forward_Model_Workflow_Summary.csv"
)
plot_hyporheic_workflow(
sim_name = sim_name, # Simulation name
sim_path = gwf_ws, # Path to the gwf simulation folder
exe_name = md6_exe_path, # Path to the MODFLOW 6 executable
sat_image_path = sat_image_path, # Path to the satellite image
gw_domain_shapefile_path = groundwater_domain_shp_path, # Path to the groundwater domain shapefile
particle_points_shp = points_shp, # Path to the particle points shapefile
pathlines_shp = lines_shp, # Path to the pathlines shapefile
river_cells = river_cells, # Path to the river cells CSV
particle_data_csv = csv,
pathline_stats_txt = results,
direction="Backward", # or "Backward" based on your scenario
output_folder=output_folder,
plot_layer=1, # can edit this to change the layer to plot
mx_origin=0,
my_origin=0,
zfac_3d=8.0, # can edit these factors to scale the 3D and longitudinal views
zfac_long=50.0, # can edit these factors to scale the 3D and longitudinal views
xfac_long=2.0, # can edit these factors to scale the 3D and longitudinal views
yfac_long=8.0, # can edit these factors to scale the 3D and longitudinal views
save_summary_csv="Backward_Model_Workflow_Summary.csv"
)
Plot Simulation Results
loading simulation...
loading simulation name file...
loading tdis package...
loading model gwf6...
loading package dis...
loading package ic...
loading package npf...
loading package chd...
loading package oc...
loading solution package gwf_model...
C:\Users\u4eeevmq\AppData\Local\Temp\ipykernel_21176\1327895980.py:62: DeprecationWarning: The 'unary_union' attribute is deprecated, use the 'union_all()' method instead.
domain_polygon = gdf.unary_union # single multipolygon
C:\Users\u4eeevmq\AppData\Local\Temp\ipykernel_21176\1327895980.py:238: UserWarning: Creating legend with loc="best" can be slow with large amounts of data.
fig.savefig(os.path.join(output_folder, f"{direction}_hyporheic_3d_isometric.png"), dpi=300)
c:\Users\u4eeevmq\Documents\Python\HyporheicFloPy\.venv\Lib\site-packages\IPython\core\pylabtools.py:170: UserWarning: Creating legend with loc="best" can be slow with large amounts of data.
fig.canvas.print_figure(bytes_io, **kw)
C:\Users\u4eeevmq\AppData\Local\Temp\ipykernel_21176\1327895980.py:276: UserWarning: Creating legend with loc="best" can be slow with large amounts of data.
fig.savefig(os.path.join(output_folder, f"{direction}_hyporheic_3d_longitudinal.png"), dpi=300)
**Linear Path Length (y-range, ft)**
- mean: 246.340
- median: 177.500
- min: 2.500
- max: 544.610
- range: 542.110
**Path Width (x-range, ft)**
- mean: 148.510
- median: 158.440
- min: 1.450
- max: 351.160
- range: 349.710
**Path Depth (z-range, ft)**
- mean: 5.840
- median: 1.310
- min: 0.030
- max: 21.560
- range: 21.530
**Net Path Length (ft)**
- mean: 326.760
- median: 261.280
- min: 15.600
- max: 692.360
- range: 676.760
**Zone Budget Summary**
- Total number of start cells: 1,233.000
- Total start flow: -2.192
- Total number of end cells: 28.000
- Total end flow: -0.531
- Average Hyporheic flow rate (ft³/d): -1.361
- Hyporheic flow rate (ft³/d): 1.661
**Per Cell: Total Volume Available (ft³)**
- mean: 501.595
- median: 487.500
- min: 487.500
- max: 611.163
- range: 123.663
**Per Cell: Total Hyporheic Volume (ft³)**
- mean: 41.264
- median: 0.000
- min: 0.000
- max: 12,489.996
- range: 12,489.996
**Per Cell: Starting Hydraulic Head**
- mean: 6.472e+28
- median: 1,603.110
- min: -1.000e+30
- max: 1.000e+30
- range: 2.000e+30
**Per Cell: Ending Hydraulic Head**
- mean: 8.028e+28
- median: 1,603.174
- min: -1.000e+30
- max: 1.000e+30
- range: 2.000e+30
**Per Cell: Particle Depth**
- mean: 1,596.158
- median: 1,600.344
- min: 1,580.329
- max: 1,602.688
- range: 22.358
**Per Cell: Residence Time (days)**
- mean: 6,894.413
- median: 1,768.123
- min: 1.000
- max: 5.461e+05
- range: 5.461e+05
**Per Cell: Path Length (ft)**
- mean: 223.124
- median: 182.940
- min: 0.014
- max: 692.358
- range: 692.345
**Per Cell: Particle Velocity (ft/day)**
- mean: 1.437
- median: 0.120
- min: 1.000e-04
- max: 4,096.012
- range: 4,096.012
**Per Cell: Flow Rate (ft³/day)**
- mean: 2,378.834
- median: 0.000
- min: 0.000
- max: 1.237e+06
- range: 1.237e+06
**Per Cell: Hydraulic Gradient**
- mean: -6.301e+27
- median: 0.000
- min: -3.973e+31
- max: 3.198e+31
- range: 7.171e+31
**Particle Path: Total Volume Available Along Path (ft³)**
- mean: 38,735.423
- median: 31,687.500
- min: 1,028.766
- max: 88,030.414
- range: 87,001.648
**Particle Path: Hyporheic Volume Along Path (ft³)**
- mean: 3,186.558
- median: 1,937.500
- min: 0.000
- max: 14,969.803
- range: 14,969.803
**Particle Path: Starting Hydraulic Head**
- mean: 1.629e+29
- median: 3.637e+28
- min: -1.000e+30
- max: 1.000e+30
- range: 2.000e+30
**Particle Path: Ending Hydraulic Head**
- mean: 1.839e+29
- median: 5.350e+28
- min: -1.000e+30
- max: 1.000e+30
- range: 2.000e+30
**Particle Path: Depth**
- mean: 1,595.546
- median: 1,599.875
- min: 1,580.329
- max: 1,601.188
- range: 20.858
**Particle Path: Residence Time (days)**
- mean: 72,385.148
- median: 15,232.655
- min: 102.618
- max: 5.461e+05
- range: 5.460e+05
**Particle Path: Length (ft)**
- mean: 320.643
- median: 254.838
- min: 12.935
- max: 692.358
- range: 679.424
**Particle Path: Average Velocity (ft/day)**
- mean: 2.580
- median: 0.178
- min: 0.006
- max: 260.303
- range: 260.297
**Particle Path: Average Flow Rate (ft³/day)**
- mean: 4,391.673
- median: 3.288
- min: 0.000
- max: 1.778e+05
- range: 1.778e+05
**Particle Path: Hydraulic Gradient**
- mean: -1.873e+26
- median: -2.507e+25
- min: -1.359e+28
- max: 1.837e+28
- range: 3.196e+28
loading simulation...
loading simulation name file...
loading tdis package...
loading model gwf6...
loading package dis...
loading package ic...
loading package npf...
loading package chd...
loading package oc...
loading solution package gwf_model...
C:\Users\u4eeevmq\AppData\Local\Temp\ipykernel_21176\1327895980.py:62: DeprecationWarning: The 'unary_union' attribute is deprecated, use the 'union_all()' method instead.
domain_polygon = gdf.unary_union # single multipolygon
C:\Users\u4eeevmq\AppData\Local\Temp\ipykernel_21176\1327895980.py:238: UserWarning: Creating legend with loc="best" can be slow with large amounts of data.
fig.savefig(os.path.join(output_folder, f"{direction}_hyporheic_3d_isometric.png"), dpi=300)
c:\Users\u4eeevmq\Documents\Python\HyporheicFloPy\.venv\Lib\site-packages\IPython\core\pylabtools.py:170: UserWarning: Creating legend with loc="best" can be slow with large amounts of data.
fig.canvas.print_figure(bytes_io, **kw)
C:\Users\u4eeevmq\AppData\Local\Temp\ipykernel_21176\1327895980.py:276: UserWarning: Creating legend with loc="best" can be slow with large amounts of data.
fig.savefig(os.path.join(output_folder, f"{direction}_hyporheic_3d_longitudinal.png"), dpi=300)
**Linear Path Length (y-range, ft)**
- mean: 246.340
- median: 177.500
- min: 2.500
- max: 544.610
- range: 542.110
**Path Width (x-range, ft)**
- mean: 148.510
- median: 158.440
- min: 1.450
- max: 351.160
- range: 349.710
**Path Depth (z-range, ft)**
- mean: 5.840
- median: 1.310
- min: 0.030
- max: 21.560
- range: 21.530
**Net Path Length (ft)**
- mean: 326.760
- median: 261.280
- min: 15.600
- max: 692.360
- range: 676.760
**Zone Budget Summary**
- Total number of start cells: 1,233.000
- Total start flow: -2.192
- Total number of end cells: 28.000
- Total end flow: -0.531
- Average Hyporheic flow rate (ft³/d): -1.361
- Hyporheic flow rate (ft³/d): 1.661
**Per Cell: Total Volume Available (ft³)**
- mean: 501.595
- median: 487.500
- min: 487.500
- max: 611.163
- range: 123.663
**Per Cell: Total Hyporheic Volume (ft³)**
- mean: 41.264
- median: 0.000
- min: 0.000
- max: 12,489.996
- range: 12,489.996
**Per Cell: Starting Hydraulic Head**
- mean: 6.472e+28
- median: 1,603.110
- min: -1.000e+30
- max: 1.000e+30
- range: 2.000e+30
**Per Cell: Ending Hydraulic Head**
- mean: 8.028e+28
- median: 1,603.174
- min: -1.000e+30
- max: 1.000e+30
- range: 2.000e+30
**Per Cell: Particle Depth**
- mean: 1,596.158
- median: 1,600.344
- min: 1,580.329
- max: 1,602.688
- range: 22.358
**Per Cell: Residence Time (days)**
- mean: 6,894.413
- median: 1,768.123
- min: 1.000
- max: 5.461e+05
- range: 5.461e+05
**Per Cell: Path Length (ft)**
- mean: 223.124
- median: 182.940
- min: 0.014
- max: 692.358
- range: 692.345
**Per Cell: Particle Velocity (ft/day)**
- mean: 1.437
- median: 0.120
- min: 1.000e-04
- max: 4,096.012
- range: 4,096.012
**Per Cell: Flow Rate (ft³/day)**
- mean: 2,378.834
- median: 0.000
- min: 0.000
- max: 1.237e+06
- range: 1.237e+06
**Per Cell: Hydraulic Gradient**
- mean: -6.301e+27
- median: 0.000
- min: -3.973e+31
- max: 3.198e+31
- range: 7.171e+31
**Particle Path: Total Volume Available Along Path (ft³)**
- mean: 38,735.423
- median: 31,687.500
- min: 1,028.766
- max: 88,030.414
- range: 87,001.648
**Particle Path: Hyporheic Volume Along Path (ft³)**
- mean: 3,186.558
- median: 1,937.500
- min: 0.000
- max: 14,969.803
- range: 14,969.803
**Particle Path: Starting Hydraulic Head**
- mean: 1.629e+29
- median: 3.637e+28
- min: -1.000e+30
- max: 1.000e+30
- range: 2.000e+30
**Particle Path: Ending Hydraulic Head**
- mean: 1.839e+29
- median: 5.350e+28
- min: -1.000e+30
- max: 1.000e+30
- range: 2.000e+30
**Particle Path: Depth**
- mean: 1,595.546
- median: 1,599.875
- min: 1,580.329
- max: 1,601.188
- range: 20.858
**Particle Path: Residence Time (days)**
- mean: 72,385.148
- median: 15,232.655
- min: 102.618
- max: 5.461e+05
- range: 5.460e+05
**Particle Path: Length (ft)**
- mean: 320.643
- median: 254.838
- min: 12.935
- max: 692.358
- range: 679.424
**Particle Path: Average Velocity (ft/day)**
- mean: 2.580
- median: 0.178
- min: 0.006
- max: 260.303
- range: 260.297
**Particle Path: Average Flow Rate (ft³/day)**
- mean: 4,391.673
- median: 3.288
- min: 0.000
- max: 1.778e+05
- range: 1.778e+05
**Particle Path: Hydraulic Gradient**
- mean: -1.873e+26
- median: -2.507e+25
- min: -1.359e+28
- max: 1.837e+28
- range: 3.196e+28
Summary#
By the end of this section, you will have constructed, written, and executed a groundwater flow model (and optionally a particle tracking model), and produced visualizations to validate and analyze the model results.