Source code for deepxde.icbc.initial_conditions

"""Initial conditions."""

__all__ = ["IC"]

import numpy as np

from .boundary_conditions import npfunc_range_autocache
from .. import backend as bkd
from .. import utils


[docs] class IC: """Initial conditions: y([x, t0]) = func([x, t0]).""" def __init__(self, geom, func, on_initial, component=0): self.geom = geom self.func = npfunc_range_autocache(utils.return_tensor(func)) self.on_initial = lambda x, on: np.array( [on_initial(x[i], on[i]) for i in range(len(x))] ) self.component = component
[docs] def filter(self, X): return X[self.on_initial(X, self.geom.on_initial(X))]
[docs] def collocation_points(self, X): return self.filter(X)
[docs] def error(self, X, inputs, outputs, beg, end, aux_var=None): values = self.func(X, beg, end, aux_var) if bkd.ndim(values) == 2 and bkd.shape(values)[1] != 1: raise RuntimeError( "IC function should return an array of shape N by 1 for each component." "Use argument 'component' for different output components." ) return outputs[beg:end, self.component : self.component + 1] - values