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.

Hide 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)
Hide 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
_images/e676aac8659e88b35293b63d23be6a1abc8f8212cc9f5abfb8538d8ed0931dc0.png _images/dea2a8c29a8b3b75bd57507b43f70c5fe9a9a006fb9ec20edd1e73d3805ad294.png
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)
_images/1b87df1ca72146873e5052a91afbc9df7ce472ea65d0b6692a035aa241cea460.png
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)
_images/db41e6ee999aece77010a1687ab063e59826cfe508a406a34a642b4db42deac9.png
**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
_images/a6db12504f5688bebcf24e8ac4c802b3a2126d667d567d2e20c916a7885bf665.png _images/dea2a8c29a8b3b75bd57507b43f70c5fe9a9a006fb9ec20edd1e73d3805ad294.png
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)
_images/1248feb167e5df50f911861d6283835a4956de498756a82000b81303001fcf25.png
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)
_images/3ec18b166ac4634cca52f379995319f1d1835a04c38d12ec2490dbb45ef193ce.png
**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.