Source code for pysofe.pde.poisson

"""
Provides the data structure that represents the Poisson equation.
"""

# IMPORTS

from .base import PDE
from ..spaces import operators

from scipy.sparse import linalg as sparse_linalg

# DEBUGGING
from IPython import embed as IPS

[docs]class Poisson(PDE): """ Represents the linear Poisson equation .. math:: - a \Delta u = f Parameters ---------- fe_space : pysofe.spaces.space.FESpace The considered function space a : callable The coefficient function f : callable The right hand site function bc : pysofe.pde.conditions.BoundaryCondition, iterable The boundary condition(s) """ def __init__(self, fe_space, a=1., f=0., bc=None): PDE.__init__(self, fe_space, bc) # get operators self._laplacian = operators.Laplacian(fe_space, a) self._l2product = operators.L2Product(fe_space, f) def assemble(self): # compute stiffnes matrix and load vector self.stiffness = self._laplacian.assemble(codim=0, mask=None) self.load = self._l2product.assemble(codim=0, mask=None) # apply boundary conditions self.apply_conditions() def solve(self): # first, assemble the system self.assemble() # next, transform matrix formats for faster arithmetic rhs = self.stiffness.tocsr() lhs = self.load.tocsr() # then, solve the discrete system self.solution = sparse_linalg.spsolve(rhs, lhs) return self.solution