Source code for pymor.analyticalproblems.instationary
# This file is part of the pyMOR project (http://www.pymor.org).
# Copyright 2013-2020 pyMOR developers and contributors. All rights reserved.
# License: BSD 2-Clause License (http://opensource.org/licenses/BSD-2-Clause)
from pymor.parameters.base import ParametricObject, ParameterSpace
from pymor.tools.frozendict import FrozenDict
[docs]class InstationaryProblem(ParametricObject):
"""Instationary problem description.
This class describes an instationary problem of the form ::
| ∂_t u(x, t, μ) + A(u(x, t, μ), t, μ) = f(x, t, μ),
| u(x, 0, μ) = u_0(x, μ)
where A, f are given by the problem's `stationary_part` and
t is allowed to vary in the interval [0, T].
Parameters
----------
stationary_part
The stationary part of the problem.
initial_data
|Function| providing the initial values u_0.
T
The final time T.
parameter_ranges
Ranges of interest for the |Parameters| of the problem.
name
Name of the problem.
Attributes
----------
T
stationary_part
parameter_ranges
name
"""
def __init__(self, stationary_part, initial_data, T=1., parameter_ranges=None, name=None):
name = name or ('instationary_' + stationary_part.name)
assert (initial_data is None
or initial_data.dim_domain == stationary_part.domain.dim and initial_data.shape_range == ())
assert (parameter_ranges is None
or (isinstance(parameter_ranges, (list, tuple))
and len(parameter_ranges) == 2
and parameter_ranges[0] <= parameter_ranges[1])
or (isinstance(parameter_ranges, dict)
and all(isinstance(v, (list, tuple)) and len(v) == 2 and v[0] <= v[1]
for v in parameter_ranges.values())))
parameter_ranges = (
None if parameter_ranges is None else
tuple(parameter_ranges) if isinstance(parameter_ranges, (list, tuple)) else
FrozenDict((k, tuple(v)) for k, v in parameter_ranges.items())
)
self.__auto_init(locals())
def with_stationary_part(self, **kwargs):
return self.with_(stationary_part=self.stationary_part.with_(**kwargs))
@property
def parameter_space(self):
if self.parameter_ranges is None:
return None
else:
return ParameterSpace(self.parameters, self.parameter_ranges)