Source code for UQpy.surrogates.polynomial_chaos.physics_informed.PdePCE

import numpy as np
from UQpy.surrogates.polynomial_chaos.physics_informed.PdeData import PdeData
from typing import Callable
from UQpy.surrogates.polynomial_chaos.PolynomialChaosExpansion import PolynomialChaosExpansion

[docs]class PdePCE: def __init__(self, pde_data: PdeData, pde_basis: Callable, pde_source: Callable = None, boundary_conditions_evaluate: Callable = None, boundary_conditions_sampling: Callable = None, virtual_points_sampling: Callable = None, nonlinear: bool = False): """ Class containing information about PDE needed for physics-informed PCE :param pde_data: an object of the :code:`UQpy` :class:`.PdeData` class :param pde_basis: pde defined in basis functions :param pde_source: source term of pde :param boundary_conditions_evaluate: evaluation of boundary conditions for estimation of an error :param boundary_conditions_sampling: function for sampling of boundary conditions :param virtual_points_sampling: function for sampling of virtual samples :param nonlinear: if True, prescribed pde is non-linear """ self.pde_data = pde_data self.pde_basis = pde_basis self.pde_source = pde_source self.boundary_conditions_sampling = boundary_conditions_sampling self.boundary_conditions_evaluate = boundary_conditions_evaluate self.virtual_points_sampling = virtual_points_sampling self.nonlinear = nonlinear def evaluate_pde(self, standardized_sample: np.ndarray, pce: PolynomialChaosExpansion, coefficients: np.ndarray = None): pde_basis = self.pde_basis(standardized_sample, pce) if coefficients is not None: return np.sum(pde_basis * np.array(coefficients).T, axis=1) else: return pde_basis def evaluate_boundary_conditions(self, nsim: np.ndarray, pce: PolynomialChaosExpansion): return self.boundary_conditions_evaluate(nsim, pce) def evaluate_pde_source(self, standardized_sample: np.ndarray, multindex: np.ndarray = None, coefficients: np.ndarray = None): if self.pde_source is not None: if self.nonlinear: return self.pde_source(standardized_sample, multindex, coefficients) else: return self.pde_source(standardized_sample) else: return 0