Boundary Conditions

Flexible boundary condition implementations for 2D PDEs.

This module provides functions to apply different types of boundary conditions to 2D fields, supporting Dirichlet, Neumann, periodic, and absorbing boundaries.

class pdevisualizer.boundary_conditions.BoundaryType(value)[source]

Bases: Enum

Types of boundary conditions.

DIRICHLET = 'dirichlet'
NEUMANN = 'neumann'
PERIODIC = 'periodic'
ABSORBING = 'absorbing'
class pdevisualizer.boundary_conditions.BoundarySpec(left=None, right=None, top=None, bottom=None)[source]

Bases: object

Specification for boundary conditions on all four edges.

Methods

absorbing()

Create absorbing boundary conditions.

dirichlet([value])

Create Dirichlet boundary conditions on all edges.

neumann([flux])

Create Neumann boundary conditions on all edges.

periodic()

Create periodic boundary conditions.

uniform(boundary_type[, value])

Create uniform boundary conditions on all edges.

Initialize boundary specification.

Methods

absorbing()

Create absorbing boundary conditions.

dirichlet([value])

Create Dirichlet boundary conditions on all edges.

neumann([flux])

Create Neumann boundary conditions on all edges.

periodic()

Create periodic boundary conditions.

uniform(boundary_type[, value])

Create uniform boundary conditions on all edges.

__init__(left=None, right=None, top=None, bottom=None)[source]

Initialize boundary specification.

classmethod uniform(boundary_type, value=0.0)[source]

Create uniform boundary conditions on all edges.

classmethod dirichlet(value=0.0)[source]

Create Dirichlet boundary conditions on all edges.

classmethod neumann(flux=0.0)[source]

Create Neumann boundary conditions on all edges.

classmethod periodic()[source]

Create periodic boundary conditions.

classmethod absorbing()[source]

Create absorbing boundary conditions.

pdevisualizer.boundary_conditions.apply_dirichlet_boundary(u, value)[source]

Apply Dirichlet boundary condition (fixed value).

pdevisualizer.boundary_conditions.apply_neumann_boundary(u, flux, dx, dy)[source]

Apply Neumann boundary condition (fixed flux/derivative).

pdevisualizer.boundary_conditions.apply_periodic_boundary(u)[source]

Apply periodic boundary condition (wrap-around).

pdevisualizer.boundary_conditions.apply_absorbing_boundary_first_order(u, u_prev, c, dt, dx, dy)[source]

Apply first-order absorbing boundary condition for waves.

Uses the Sommerfeld radiation condition: ∂u/∂t + c·∂u/∂n = 0 at boundaries

This prevents wave reflections at boundaries.

pdevisualizer.boundary_conditions.apply_boundary_conditions(u, boundary_spec, dx=1.0, dy=1.0, u_prev=None, c=1.0, dt=0.1)[source]

Apply boundary conditions to a 2D field.

pdevisualizer.boundary_conditions.step_heat_with_boundaries(u, α, dt, dx, dy, boundary_spec_type, boundary_value)[source]

Heat equation time step with flexible boundary conditions.

This is an enhanced version of the original step_heat function.

pdevisualizer.boundary_conditions.step_wave_with_boundaries(u, u_prev, c, dt, dx, dy, boundary_spec_type, boundary_value)[source]

Wave equation time step with flexible boundary conditions.

This is an enhanced version of the original step_wave function.

pdevisualizer.boundary_conditions.solve_heat_with_boundaries(u0, boundary_spec, α=1.0, dt=0.1, dx=1.0, dy=1.0, steps=100)[source]

Solve 2D heat equation with flexible boundary conditions.

pdevisualizer.boundary_conditions.solve_wave_with_boundaries(u0, boundary_spec, v0=None, c=1.0, dt=0.1, dx=1.0, dy=1.0, steps=100)[source]

Solve 2D wave equation with flexible boundary conditions.