8.7. Data Accessor

8.7.1. Introduction

The DataAccessor class is a helper class for extracting numpy arrays from a given ParFlow run.

8.7.2. Usage of DataAccessor

First, we’ll show some examples of using the DataAccessor class within a ParFlow Python script:

from parflow import Run

# Create a Run object from a .pfidb file
run = Run.from_definition('/path/to/pfidb/file')

# Get the DataAccessor object corresponding to the Run object
data = run.data_accessor

# Iterate through the timesteps of the DataAccessor object
# i goes from 0 to n_timesteps - 1
for i in data.times:

    #----------------------------- Evapotranspiration -------------------------------

    # nz-by-ny-by-nx array of ET values (bottom to top layer)
    print(data.et)

    #------------------------------- Overland Flow ----------------------------------

    # ny-by-nx array of overland flow values - 'OverlandKinematic' flow method
    print(data.overland_flow_grid())

    # ny-by-nx array of overland flow values - 'OverlandFlow' flow method
    print(data.overland_flow_grid(flow_method='OverlandFlow'))

    # Total outflow for the domain (scalar value) - 'OverlandKinematic' flow method
    print(data.overland_flow())

    # Total outflow for the domain (scalar value) - 'OverlandFlow' flow method
    print(data.overland_flow(flow_method='OverlandFlow'))

    #-------------------------- Subsurface/Surface Storage --------------------------

    # nz-by-ny-by-nx array of subsurface storage values (bottom to top layer)
    print(data.subsurface_storage)

    # ny-by-nx array of surface storage values
    print(data.surface_storage)

    #----------------------------- Water Table Depth --------------------------------

    # ny-by-nx array of water table depth values
    print(data.wtd)

    data.time += 1