pymor.models.basic¶
Module Contents¶
Classes¶
Generic class for models of stationary problems. |
|
Generic class for models of instationary problems. |
- class pymor.models.basic.StationaryModel(operator, rhs, output_functional=None, products=None, error_estimator=None, visualizer=None, name=None)[source]¶
Bases:
pymor.models.interface.ModelGeneric class for models of stationary problems.
This class describes discrete problems given by the equation:
L(u(μ), μ) = F(μ)
with a vector-like right-hand side F and a (possibly non-linear) operator L.
Note that even when solving a variational formulation where F is a functional and not a vector, F has to be specified as a vector-like
Operator(mapping scalars to vectors). This ensures that in the complex case both L and F are anti-linear in the test variable.Parameters
- operator
The
OperatorL.- rhs
The vector F. Either a
VectorArrayof length 1 or a vector-likeOperator.- output_functional
Operatormapping a given solution to the model output. In many applications, this will be aFunctional, i.e. anOperatormapping to scalars. This is not required, however.- products
A dict of inner product
Operatorsdefined on the discrete space the problem is posed on. For each product with key'x'a corresponding attributex_product, as well as a norm methodx_normis added to the model.- error_estimator
An error estimator for the problem. This can be any object with an
estimate_error(U, mu, m)method. Iferror_estimatoris notNone, anestimate_error(U, mu)method is added to the model which will callerror_estimator.estimate_error(U, mu, self).- visualizer
A visualizer for the problem. This can be any object with a
visualize(U, m, ...)method. Ifvisualizeris notNone, avisualize(U, *args, **kwargs)method is added to the model which forwards its arguments to the visualizer’svisualizemethod.- name
Name of the model.
- _compute_solution(self, mu=None, **kwargs)[source]¶
Compute the model’s solution for
parameter valuesmu.This method is called by the default implementation of
computeinpymor.models.interface.Model.Parameters
- mu
Parameter valuesfor which to compute the solution.- kwargs
Additional keyword arguments to customize how the solution is computed or to select additional data to be returned.
Returns
VectorArraywith the computed solution or a dict which at least must contain the key'solution'.
- _compute_solution_d_mu_single_direction(self, parameter, index, solution, mu)[source]¶
Compute the partial derivative of the solution w.r.t. a parameter index
Parameters
- parameter
parameter for which to compute the sensitivity
- index
parameter index for which to compute the sensitivity
- solution
Internal model state for the given
Parameter value.- mu
Parameter valuefor which to solve
Returns
The sensitivity of the solution as a
VectorArray.
- _compute_output_d_mu(self, solution, mu, return_array=False, use_adjoint=None)[source]¶
Compute the gradient of the output functional w.r.t. the parameters.
Parameters
- solution
Internal model state for the given
Parameter value- mu
Parameter valuefor which to compute the gradient- return_array
if
True, return the output gradient as aNumPy array. Otherwise, return a dict of gradients for eachParameter.- use_adjoint
if
Noneuse standard approach, ifTrue, use the adjoint solution for a more efficient way of computing the gradient. See Section 1.6.2 in [HPUU08] for more details. So far, the adjoint approach is only valid for linear models.
Returns
The gradient as a
NumPy arrayor a dict ofNumPy arrays.
- deaffinize(self, arg)[source]¶
Build
Modelwith linear solution space.For many
Modelsthe solution manifold is contained in an affine subspace of thesolution_space, e.g. the affine space of functions with certain fixed boundary values. Most MOR techniques, however, construct linear approximation spaces, which are not fully contained in this affine subspace, even if these spaces are created using snapshot vectors from the subspace. Depending on the FOM, neglecting the affine structure of the solution space may lead to bad approximations or even an ill-posed ROM. A standard approach to circumvent this issue is to replace the FOM with an equivalentModelwith linear solution space. This method can be used to obtain such aModel.Given a vector
u_0from the affine solution space, the returnedStationaryModelis equivalent to solving:L(u(μ) + u_0, μ) = F(μ)
When
operatoris linear, the affine shift is moved to the right-hand side to obtain:L(u(μ), μ) = F(μ) - L(u_0, μ)
Solutions of the original
Modelcan be obtained by addingu_0to the solutions of the deaffinizedModel.The
output_functionalis adapted accordingly to yield the same output for givenparameter values.Parameters
- arg
Either a
VectorArrayof length 1 containing the vectoru_0. Alternatively,parameter valuescan be provided, for which the model issolvedto obtainu_0.
Returns
The deaffinized
Model.
- class pymor.models.basic.InstationaryModel(T, initial_data, operator, rhs, mass=None, time_stepper=None, num_values=None, output_functional=None, products=None, error_estimator=None, visualizer=None, name=None)[source]¶
Bases:
pymor.models.interface.ModelGeneric class for models of instationary problems.
This class describes instationary problems given by the equations:
M * ∂_t u(t, μ) + L(u(μ), t, μ) = F(t, μ) u(0, μ) = u_0(μ)for t in [0,T], where L is a (possibly non-linear) time-dependent
Operator, F is a time-dependent vector-likeOperator, and u_0 the initial data. The massOperatorM is assumed to be linear.Parameters
- T
The final time T.
- initial_data
The initial data
u_0. Either aVectorArrayof length 1 or (for theParameter-dependent case) a vector-likeOperator(i.e. a linearOperatorwithsource.dim == 1) which applied toNumpyVectorArray(np.array([1]))will yield the initial data for givenparameter values.- operator
The
OperatorL.- rhs
The right-hand side F.
- mass
The mass
OperatorM. IfNone, the identity is assumed.- time_stepper
The
time-stepperto be used bysolve.- num_values
The number of returned vectors of the solution trajectory. If
None, each intermediate vector that is calculated is returned.- output_functional
Operatormapping a given solution to the model output. In many applications, this will be aFunctional, i.e. anOperatormapping to scalars. This is not required, however.- products
A dict of product
Operatorsdefined on the discrete space the problem is posed on. For each product with key'x'a corresponding attributex_product, as well as a norm methodx_normis added to the model.- error_estimator
An error estimator for the problem. This can be any object with an
estimate_error(U, mu, m)method. Iferror_estimatoris notNone, anestimate_error(U, mu)method is added to the model which will callerror_estimator.estimate_error(U, mu, self).- visualizer
A visualizer for the problem. This can be any object with a
visualize(U, m, ...)method. Ifvisualizeris notNone, avisualize(U, *args, **kwargs)method is added to the model which forwards its arguments to the visualizer’svisualizemethod.- name
Name of the model.
- _compute_solution(self, mu=None, **kwargs)[source]¶
Compute the model’s solution for
parameter valuesmu.This method is called by the default implementation of
computeinpymor.models.interface.Model.Parameters
- mu
Parameter valuesfor which to compute the solution.- kwargs
Additional keyword arguments to customize how the solution is computed or to select additional data to be returned.
Returns
VectorArraywith the computed solution or a dict which at least must contain the key'solution'.