Skip to content

bpip

bpip

PyAERMOD BPIP Module - Building Profile Input Program Calculations

Computes direction-dependent building dimensions for AERMOD's PRIME downwash algorithm. AERMOD requires 36 values (one per 10° wind sector) for each building parameter: BUILDHGT, BUILDWID, BUILDLEN, XBADJ, YBADJ.

This module provides: - Building: rectangular building geometry definition - BPIPCalculator: direction-dependent projection engine - BPIPResult: container for the 36-value arrays

Reference: EPA BPIP User's Guide, AERMOD Implementation Guide (Section 3.3)

Building dataclass

Rectangular building footprint for BPIP calculations.

Parameters:

Name Type Description Default
building_id str

Identifier for this building (e.g., "BLDG1").

required
corners list of (float, float)

Four (x, y) corner coordinates defining the rectangular footprint, in the same coordinate system as sources/receptors (typically UTM meters).

required
height float

Building height in meters (above ground level).

required
tiers list of (float, float)

Multi-tier definition as (tier_height, coverage_fraction) pairs. Each tier_height must exceed the base height. Coverage fraction is the proportion of the footprint covered by that tier (0-1). If omitted, the building is treated as a single-tier structure.

None

get_effective_height

get_effective_height() -> float

Effective building height for downwash calculations.

For single-tier buildings, returns the base height. For multi-tier, returns the coverage-fraction-weighted average of all tier heights plus the base contribution.

get_footprint_area

get_footprint_area() -> float

Compute footprint area using the shoelace formula.

Returns:

Type Description
float

Area of the quadrilateral in square meters.

get_centroid

get_centroid() -> Tuple[float, float]

Compute centroid (average of corner coordinates).

Returns:

Type Description
tuple of (float, float)

(x, y) centroid coordinates.

BPIPResult dataclass

Container for 36 direction-dependent building parameters.

Each list contains exactly 36 values corresponding to wind directions 10°, 20°, ..., 360° (measured clockwise from north).

BPIPCalculator

Computes direction-dependent building dimensions for AERMOD PRIME.

For each of 36 wind directions (10° increments), the algorithm: 1. Translates building corners so the stack is at the origin 2. Rotates corners to align the wind direction with the +Y axis 3. Computes projected width (perpendicular to wind) and length (along wind) 4. Computes XBADJ/YBADJ offsets from the projected building centroid

Parameters:

Name Type Description Default
building Building

The building geometry.

required
stack_x float

X-coordinate of the affected stack.

required
stack_y float

Y-coordinate of the affected stack.

required

calculate_all

calculate_all() -> BPIPResult

Calculate building parameters for all 36 wind directions.

Directions are 10°, 20°, ..., 360° (AERMOD convention).

Returns:

Type Description
BPIPResult

Contains 36-value arrays for each building parameter.