pymor.reductors package

Submodules

basic module


class pymor.reductors.basic.DelayLTIPGReductor(fom, W, V, E_biorthonormal=False)[source]

Bases: pymor.reductors.basic.ProjectionBasedReductor

Petrov-Galerkin projection of an LinearDelayModel.

Parameters

fom

The full order Model to reduce.

W

The basis of the test space.

V

The basis of the ansatz space.

E_biorthonormal

If True, no E matrix will be assembled for the reduced Model. Set to True if W and V are biorthonormal w.r.t. fom.E.

Methods

DelayLTIPGReductor

build_rom, extend_basis, project_operators, project_operators_to_subbasis, reconstruct

ProjectionBasedReductor

assemble_estimator, assemble_estimator_for_subbasis, reduce

BasicInterface

disable_logging, enable_logging, has_interface_name, implementor_names, implementors

reconstruct(u, basis='V')[source]

Reconstruct high-dimensional vector from reduced vector u.


class pymor.reductors.basic.InstationaryRBReductor(fom, RB=None, product=None, initial_data_product=None, product_is_mass=False, check_orthonormality=None, check_tol=None)[source]

Bases: pymor.reductors.basic.ProjectionBasedReductor

Galerkin projection of an InstationaryModel.

Parameters

fom

The full order Model to reduce.

RB

The basis of the reduced space onto which to project. If None an empty basis is used.

product

Inner product Operator w.r.t. which RB is orthonormalized. If None, the the Euclidean inner product is used.

initial_data_product

Inner product Operator w.r.t. which the initial_data of fom is orthogonally projected. If None, the Euclidean inner product is used.

product_is_mass

If True, no mass matrix for the reduced Model is assembled. Set to True if RB is orthonormal w.r.t. the mass matrix of fom.

check_orthonormality

See ProjectionBasedReductor.

check_tol

See ProjectionBasedReductor.

Methods

InstationaryRBReductor

build_rom, project_operators, project_operators_to_subbasis

ProjectionBasedReductor

assemble_estimator, assemble_estimator_for_subbasis, extend_basis, reconstruct, reduce

BasicInterface

disable_logging, enable_logging, has_interface_name, implementor_names, implementors


class pymor.reductors.basic.LTIPGReductor(fom, W, V, E_biorthonormal=False)[source]

Bases: pymor.reductors.basic.ProjectionBasedReductor

Petrov-Galerkin projection of an LTIModel.

Parameters

fom

The full order Model to reduce.

W

The basis of the test space.

V

The basis of the ansatz space.

E_biorthonormal

If True, no E matrix will be assembled for the reduced Model. Set to True if W and V are biorthonormal w.r.t. fom.E.

Methods

LTIPGReductor

build_rom, extend_basis, project_operators, project_operators_to_subbasis, reconstruct

ProjectionBasedReductor

assemble_estimator, assemble_estimator_for_subbasis, reduce

BasicInterface

disable_logging, enable_logging, has_interface_name, implementor_names, implementors

reconstruct(u, basis='V')[source]

Reconstruct high-dimensional vector from reduced vector u.


class pymor.reductors.basic.ProjectionBasedReductor(fom, bases, products={}, check_orthonormality=True, check_tol=0.001)[source]

Bases: pymor.core.interfaces.BasicInterface

Generic projection based reductor.

Parameters

fom

The full order Model to reduce.

bases

A dict of VectorArrays of basis vectors.

products

A dict of inner product Operators w.r.t. which the corresponding bases are orthonormalized. A value of None corresponds to orthonormalization of the basis w.r.t. the Euclidean inner product.

check_orthonormality

If True, check if bases which have a corresponding entry in the products dict are orthonormal w.r.t. the given inner product. After each basis extension, orthonormality is checked again.

check_tol

If check_orthonormality is True, the numerical tolerance with which the checks are performed.

Methods

ProjectionBasedReductor

assemble_estimator, assemble_estimator_for_subbasis, build_rom, extend_basis, project_operators, project_operators_to_subbasis, reconstruct, reduce

BasicInterface

disable_logging, enable_logging, has_interface_name, implementor_names, implementors

reconstruct(u, basis='RB')[source]

Reconstruct high-dimensional vector from reduced vector u.


class pymor.reductors.basic.SOLTIPGReductor(fom, W, V, M_biorthonormal=False)[source]

Bases: pymor.reductors.basic.ProjectionBasedReductor

Petrov-Galerkin projection of an SecondOrderModel.

Parameters

fom

The full order Model to reduce.

W

The basis of the test space.

V

The basis of the ansatz space.

E_biorthonormal

If True, no E matrix will be assembled for the reduced Model. Set to True if W and V are biorthonormal w.r.t. fom.E.

Methods

SOLTIPGReductor

build_rom, extend_basis, project_operators, project_operators_to_subbasis, reconstruct

ProjectionBasedReductor

assemble_estimator, assemble_estimator_for_subbasis, reduce

BasicInterface

disable_logging, enable_logging, has_interface_name, implementor_names, implementors

reconstruct(u, basis='V')[source]

Reconstruct high-dimensional vector from reduced vector u.


class pymor.reductors.basic.StationaryRBReductor(fom, RB=None, product=None, check_orthonormality=None, check_tol=None)[source]

Bases: pymor.reductors.basic.ProjectionBasedReductor

Galerkin projection of a StationaryModel.

Parameters

fom

The full order Model to reduce.

RB

The basis of the reduced space onto which to project. If None an empty basis is used.

product

Inner product Operator w.r.t. which RB is orthonormalized. If None, the Euclidean inner product is used.

check_orthonormality

See ProjectionBasedReductor.

check_tol

See ProjectionBasedReductor.

Methods

StationaryRBReductor

build_rom, project_operators, project_operators_to_subbasis

ProjectionBasedReductor

assemble_estimator, assemble_estimator_for_subbasis, extend_basis, reconstruct, reduce

BasicInterface

disable_logging, enable_logging, has_interface_name, implementor_names, implementors


pymor.reductors.basic.extend_basis(U, basis, product=None, method='gram_schmidt', pod_modes=1, pod_orthonormalize=True, copy_U=True)[source]

bt module


class pymor.reductors.bt.BRBTReductor(fom, gamma=1, mu=None, solver_options=None)[source]

Bases: pymor.reductors.bt.GenericBTReductor

Bounded Real (BR) Balanced Truncation reductor.

See [A05] (Section 7.5.3) and [OJ88].

Parameters

fom

The full-order LTIModel to reduce.

gamma

Upper bound for the \mathcal{H}_\infty-norm.

mu

Parameter.

solver_options

The solver options to use to solve the positive Riccati equations.

error_bounds()[source]

Returns error bounds for all possible reduced orders.


class pymor.reductors.bt.BTReductor(fom, mu=None)[source]

Bases: pymor.reductors.bt.GenericBTReductor

Standard (Lyapunov) Balanced Truncation reductor.

See Section 7.3 in [A05].

Parameters

fom

The full-order LTIModel to reduce.

mu

Parameter.

error_bounds()[source]

Returns error bounds for all possible reduced orders.


class pymor.reductors.bt.GenericBTReductor(fom, mu=None)[source]

Bases: pymor.core.interfaces.BasicInterface

Generic Balanced Truncation reductor.

Parameters

fom

The full-order LTIModel to reduce.

mu

Parameter.

error_bounds()[source]

Returns error bounds for all possible reduced orders.

reconstruct(u)[source]

Reconstruct high-dimensional vector from reduced vector u.

reduce(r=None, tol=None, projection='bfsr')[source]

Generic Balanced Truncation.

Parameters

r

Order of the reduced model if tol is None, maximum order if tol is specified.

tol

Tolerance for the error bound if r is None.

projection

Projection method used:

  • 'sr': square root method

  • 'bfsr': balancing-free square root method (default, since it avoids scaling by singular values and orthogonalizes the projection matrices, which might make it more accurate than the square root method)

  • 'biorth': like the balancing-free square root method, except it biorthogonalizes the projection matrices (using gram_schmidt_biorth)

Returns

rom

Reduced-order model.


class pymor.reductors.bt.LQGBTReductor(fom, mu=None, solver_options=None)[source]

Bases: pymor.reductors.bt.GenericBTReductor

Linear Quadratic Gaussian (LQG) Balanced Truncation reductor.

See Section 3 in [MG91].

Parameters

fom

The full-order LTIModel to reduce.

mu

Parameter.

solver_options

The solver options to use to solve the Riccati equations.

error_bounds()[source]

Returns error bounds for all possible reduced orders.

coercive module


class pymor.reductors.coercive.CoerciveRBEstimator(residual, residual_range_dims, coercivity_estimator)[source]

Bases: pymor.core.interfaces.ImmutableInterface

Instantiated by CoerciveRBReductor.

Not to be used directly.


class pymor.reductors.coercive.CoerciveRBReductor(fom, RB=None, product=None, coercivity_estimator=None, check_orthonormality=None, check_tol=None)[source]

Bases: pymor.reductors.basic.StationaryRBReductor

Reduced Basis reductor for StationaryModels with coercive linear operator.

The only addition to StationaryRBReductor is an error estimator which evaluates the dual norm of the residual with respect to a given inner product. For the reduction of the residual we use ResidualReductor for improved numerical stability [BEOR14].

Parameters

fom

The Model which is to be reduced.

RB

VectorArray containing the reduced basis on which to project.

product

Inner product for the orthonormalization of RB, the projection of the Operators given by vector_ranged_operators and for the computation of Riesz representatives of the residual. If None, the Euclidean product is used.

coercivity_estimator

None or a ParameterFunctional returning a lower bound for the coercivity constant of the given problem. Note that the computed error estimate is only guaranteed to be an upper bound for the error when an appropriate coercivity estimate is specified.

Methods

CoerciveRBReductor

assemble_estimator, assemble_estimator_for_subbasis

StationaryRBReductor

build_rom, project_operators, project_operators_to_subbasis

ProjectionBasedReductor

extend_basis, reconstruct, reduce

BasicInterface

disable_logging, enable_logging, has_interface_name, implementor_names, implementors


class pymor.reductors.coercive.SimpleCoerciveRBEstimator(estimator_matrix, coercivity_estimator)[source]

Bases: pymor.core.interfaces.ImmutableInterface

Instantiated by SimpleCoerciveRBReductor.

Not to be used directly.


class pymor.reductors.coercive.SimpleCoerciveRBReductor(fom, RB=None, product=None, coercivity_estimator=None, check_orthonormality=None, check_tol=None)[source]

Bases: pymor.reductors.basic.StationaryRBReductor

Reductor for linear StationaryModels with affinely decomposed operator and rhs.

Note

The reductor CoerciveRBReductor can be used for arbitrary coercive StationaryModels and offers an improved error estimator with better numerical stability.

The only addition is to StationaryRBReductor is an error estimator, which evaluates the norm of the residual with respect to a given inner product.

Parameters

fom

The Model which is to be reduced.

RB

VectorArray containing the reduced basis on which to project.

product

Inner product for the orthonormalization of RB, the projection of the Operators given by vector_ranged_operators and for the computation of Riesz representatives of the residual. If None, the Euclidean product is used.

coercivity_estimator

None or a ParameterFunctional returning a lower bound for the coercivity constant of the given problem. Note that the computed error estimate is only guaranteed to be an upper bound for the error when an appropriate coercivity estimate is specified.

Methods

SimpleCoerciveRBReductor

assemble_estimator, assemble_estimator_for_subbasis

StationaryRBReductor

build_rom, project_operators, project_operators_to_subbasis

ProjectionBasedReductor

extend_basis, reconstruct, reduce

BasicInterface

disable_logging, enable_logging, has_interface_name, implementor_names, implementors

h2 module


class pymor.reductors.h2.IRKAReductor(fom, mu=None)[source]

Bases: pymor.core.interfaces.BasicInterface

Iterative Rational Krylov Algorithm reductor.

Parameters

fom

The full-order LTIModel to reduce.

mu

Parameter.

reconstruct(u)[source]

Reconstruct high-dimensional vector from reduced vector u.

reduce(r, sigma=None, b=None, c=None, rom0=None, tol=0.0001, maxit=100, num_prev=1, force_sigma_in_rhp=False, projection='orth', conv_crit='sigma', compute_errors=False)[source]

Reduce using IRKA.

See [GAB08] (Algorithm 4.1) and [ABG10] (Algorithm 1).

Parameters

r

Order of the reduced order model.

sigma

Initial interpolation points (closed under conjugation).

If None, interpolation points are log-spaced between 0.1 and 10. If sigma is an int, it is used as a seed to generate it randomly. Otherwise, it needs to be a one-dimensional array-like of length r.

sigma and rom0 cannot both be not None.

b

Initial right tangential directions.

If None, if is chosen as all ones. If b is an int, it is used as a seed to generate it randomly. Otherwise, it needs to be a VectorArray of length r from fom.B.source.

b and rom0 cannot both be not None.

c

Initial left tangential directions.

If None, if is chosen as all ones. If c is an int, it is used as a seed to generate it randomly. Otherwise, it needs to be a VectorArray of length r from fom.C.range.

c and rom0 cannot both be not None.

rom0

Initial reduced order model.

If None, then sigma, b, and c are used. Otherwise, it needs to be an LTIModel of order r and it is used to construct sigma, b, and c.

tol

Tolerance for the convergence criterion.

maxit

Maximum number of iterations.

num_prev

Number of previous iterations to compare the current iteration to. Larger number can avoid occasional cyclic behavior of IRKA.

force_sigma_in_rhp

If False, new interpolation are reflections of the current reduced order model’s poles. Otherwise, only poles in the left half-plane are reflected.

projection

Projection method:

  • 'orth': projection matrices are orthogonalized with respect to the Euclidean inner product

  • 'biorth': projection matrices are biorthogolized with respect to the E product

  • 'arnoldi': projection matrices are orthogonalized using the Arnoldi process (available only for SISO systems).

conv_crit

Convergence criterion:

  • 'sigma': relative change in interpolation points

  • 'h2': relative \mathcal{H}_2 distance of reduced-order models

compute_errors

Should the relative \mathcal{H}_2-errors of intermediate reduced order models be computed.

Warning

Computing \mathcal{H}_2-errors is expensive. Use this option only if necessary.

Returns

rom

Reduced LTIModel model.


class pymor.reductors.h2.OneSidedIRKAReductor(fom, version, mu=None)[source]

Bases: pymor.core.interfaces.BasicInterface

One-Sided Iterative Rational Krylov Algorithm reductor.

Parameters

fom

The full-order LTIModel to reduce.

version

Version of the one-sided IRKA:

  • 'V': Galerkin projection using the input Krylov subspace,

  • 'W': Galerkin projection using the output Krylov subspace.

mu

Parameter.

reconstruct(u)[source]

Reconstruct high-dimensional vector from reduced vector u.

reduce(r, sigma=None, b=None, c=None, rd0=None, tol=0.0001, maxit=100, num_prev=1, force_sigma_in_rhp=False, projection='orth', conv_crit='sigma', compute_errors=False)[source]

Reduce using one-sided IRKA.

Parameters

r

Order of the reduced order model.

sigma

Initial interpolation points (closed under conjugation).

If None, interpolation points are log-spaced between 0.1 and 10. If sigma is an int, it is used as a seed to generate it randomly. Otherwise, it needs to be a one-dimensional array-like of length r.

sigma and rd0 cannot both be not None.

b

Initial right tangential directions.

If None, if is chosen as all ones. If b is an int, it is used as a seed to generate it randomly. Otherwise, it needs to be a VectorArray of length r from fom.B.source.

b and rd0 cannot both be not None.

c

Initial left tangential directions.

If None, if is chosen as all ones. If c is an int, it is used as a seed to generate it randomly. Otherwise, it needs to be a VectorArray of length r from fom.C.range.

c and rd0 cannot both be not None.

rd0

Initial reduced order model.

If None, then sigma, b, and c are used. Otherwise, it needs to be an LTIModel of order r and it is used to construct sigma, b, and c.

tol

Tolerance for the largest change in interpolation points.

maxit

Maximum number of iterations.

num_prev

Number of previous iterations to compare the current iteration to. A larger number can avoid occasional cyclic behavior.

force_sigma_in_rhp

If ‘False`, new interpolation are reflections of reduced order model’s poles. Otherwise, they are always in the right half-plane.

projection

Projection method:

  • 'orth': projection matrix is orthogonalized with respect to the Euclidean inner product,

  • 'Eorth': projection matrix is orthogonalized with respect to the E product.

conv_crit

Convergence criterion:

  • 'sigma': relative change in interpolation points,

  • 'h2': relative \mathcal{H}_2 distance of reduced order models.

compute_errors

Should the relative \mathcal{H}_2-errors of intermediate reduced order models be computed.

Warning

Computing \mathcal{H}_2-errors is expensive. Use this option only if necessary.

Returns

rom

Reduced LTIModel model.


class pymor.reductors.h2.TFIRKAReductor(fom, mu=None)[source]

Bases: pymor.core.interfaces.BasicInterface

Realization-independent IRKA reductor.

See [BG12].

Parameters

fom

The full-order Model with eval_tf and eval_dtf methods.

mu

Parameter.

reconstruct(u)[source]

Reconstruct high-dimensional vector from reduced vector u.

reduce(r, sigma=None, b=None, c=None, rom0=None, tol=0.0001, maxit=100, num_prev=1, force_sigma_in_rhp=False, conv_crit='sigma')[source]

Reduce using TF-IRKA.

Parameters

r

Order of the reduced order model.

sigma

Initial interpolation points (closed under conjugation).

If None, interpolation points are log-spaced between 0.1 and 10. If sigma is an int, it is used as a seed to generate it randomly. Otherwise, it needs to be a one-dimensional array-like of length r.

sigma and rom0 cannot both be not None.

b

Initial right tangential directions.

If None, if is chosen as all ones. If b is an int, it is used as a seed to generate it randomly. Otherwise, it needs to be a NumPy array of shape (m, r).

b and rom0 cannot both be not None.

c

Initial left tangential directions.

If None, if is chosen as all ones. If c is an int, it is used as a seed to generate it randomly. Otherwise, it needs to be a NumPy array of shape (p, r).

c and rom0 cannot both be not None.

rom0

Initial reduced order model.

If None, then sigma, b, and c are used. Otherwise, it needs to be an LTIModel of order r and it is used to construct sigma, b, and c.

tol

Tolerance for the convergence criterion.

maxit

Maximum number of iterations.

num_prev

Number of previous iterations to compare the current iteration to. Larger number can avoid occasional cyclic behavior of TF-IRKA.

force_sigma_in_rhp

If False, new interpolation are reflections of the current reduced order model’s poles. Otherwise, only the poles in the left half-plane are reflected.

conv_crit

Convergence criterion:

  • 'sigma': relative change in interpolation points

  • 'h2': relative \mathcal{H}_2 distance of reduced-order models

Returns

rom

Reduced LTIModel model.


class pymor.reductors.h2.TSIAReductor(fom, mu=None)[source]

Bases: pymor.core.interfaces.BasicInterface

Two-Sided Iteration Algorithm reductor.

Parameters

fom

The full-order LTIModel to reduce.

mu

Parameter.

reconstruct(u)[source]

Reconstruct high-dimensional vector from reduced vector u.

reduce(rom0, tol=0.0001, maxit=100, num_prev=1, projection='orth', conv_crit='sigma', compute_errors=False)[source]

Reduce using TSIA.

See [XZ11] (Algorithm 1) and [BKS11].

In exact arithmetic, TSIA is equivalent to IRKA (under some assumptions on the poles of the reduced model). The main difference in implementation is that TSIA computes the Schur decomposition of the reduced matrices, while IRKA computes the eigenvalue decomposition. Therefore, TSIA might behave better for non-normal reduced matrices.

Parameters

rom0

Initial reduced order model.

tol

Tolerance for the convergence criterion.

maxit

Maximum number of iterations.

num_prev

Number of previous iterations to compare the current iteration to. Larger number can avoid occasional cyclic behavior of TSIA.

projection

Projection method:

  • 'orth': projection matrices are orthogonalized with respect to the Euclidean inner product

  • 'biorth': projection matrices are biorthogolized with respect to the E product

conv_crit

Convergence criterion:

  • 'sigma': relative change in interpolation points

  • 'h2': relative \mathcal{H}_2 distance of reduced-order models

compute_errors

Should the relative \mathcal{H}_2-errors of intermediate reduced order models be computed.

Warning

Computing \mathcal{H}_2-errors is expensive. Use this option only if necessary.

Returns

rom

Reduced LTIModel.


pymor.reductors.h2._convergence_criterion(data, conv_crit)[source]

Compute the convergence criterion for given data.


pymor.reductors.h2._poles_and_tangential_directions(rom)[source]

Compute the poles and tangential directions of a reduced order model.

interpolation module


class pymor.reductors.interpolation.DelayBHIReductor(fom, mu=None)[source]

Bases: pymor.reductors.interpolation.GenericBHIReductor

Bitangential Hermite interpolation for LinearDelayModels.

Parameters

fom

The full-order LinearDelayModel to reduce.

mu

Parameter.


class pymor.reductors.interpolation.GenericBHIReductor(fom, mu=None)[source]

Bases: pymor.core.interfaces.BasicInterface

Generic bitangential Hermite interpolation reductor.

This is a generic reductor for reducing any linear InputStateOutputModel with the transfer function which can be written in the generalized coprime factorization \mathcal{C}(s) \mathcal{K}(s)^{-1}
\mathcal{B}(s) as in [BG09]. The interpolation here is limited to only up to the first derivative. Hence, interpolation points are assumed to be pairwise distinct.

Parameters

fom

The full-order Model to reduce.

mu

Parameter.

reconstruct(u)[source]

Reconstruct high-dimensional vector from reduced vector u.

reduce(sigma, b, c, projection='orth')[source]

Bitangential Hermite interpolation.

Parameters

sigma

Interpolation points (closed under conjugation), list of length r.

b

Right tangential directions, VectorArray of length r from self.fom.input_space.

c

Left tangential directions, VectorArray of length r from self.fom.output_space.

projection

Projection method:

  • 'orth': projection matrices are orthogonalized with respect to the Euclidean inner product

  • 'biorth': projection matrices are biorthogolized with respect to the E product

Returns

rom

Reduced-order model.


class pymor.reductors.interpolation.LTIBHIReductor(fom, mu=None)[source]

Bases: pymor.reductors.interpolation.GenericBHIReductor

Bitangential Hermite interpolation for LTIModels.

Parameters

fom

The full-order LTIModel to reduce.

mu

Parameter.

reduce(sigma, b, c, projection='orth')[source]

Bitangential Hermite interpolation.

Parameters

sigma

Interpolation points (closed under conjugation), list of length r.

b

Right tangential directions, VectorArray of length r from self.fom.input_space.

c

Left tangential directions, VectorArray of length r from self.fom.output_space.

projection

Projection method:

  • 'orth': projection matrices are orthogonalized with respect to the Euclidean inner product

  • 'biorth': projection matrices are biorthogolized with respect to the E product

  • 'arnoldi': projection matrices are orthogonalized using the Arnoldi process (available only for SISO systems).

Returns

rom

Reduced-order model.


class pymor.reductors.interpolation.SOBHIReductor(fom, mu=None)[source]

Bases: pymor.reductors.interpolation.GenericBHIReductor

Bitangential Hermite interpolation for SecondOrderModels.

Parameters

fom

The full-order SecondOrderModel to reduce.

mu

Parameter.


class pymor.reductors.interpolation.TFBHIReductor(fom, mu=None)[source]

Bases: pymor.core.interfaces.BasicInterface

Loewner bitangential Hermite interpolation reductor.

See [BG12].

Parameters

fom

The Model with eval_tf and eval_dtf methods.

mu

Parameter.

reconstruct(u)[source]

Reconstruct high-dimensional vector from reduced vector u.

reduce(sigma, b, c)[source]

Realization-independent tangential Hermite interpolation.

Parameters

sigma

Interpolation points (closed under conjugation), list of length r.

b

Right tangential directions, NumPy array of shape (fom.input_dim, r).

c

Left tangential directions, NumPy array of shape (fom.output_dim, r).

Returns

lti

The reduced-order LTIModel interpolating the transfer function of fom.

parabolic module


class pymor.reductors.parabolic.ParabolicRBEstimator(residual, residual_range_dims, initial_residual, initial_residual_range_dims, coercivity_estimator)[source]

Bases: pymor.core.interfaces.ImmutableInterface

Instantiated by ParabolicRBReductor.

Not to be used directly.


class pymor.reductors.parabolic.ParabolicRBReductor(fom, RB=None, product=None, coercivity_estimator=None, check_orthonormality=None, check_tol=None)[source]

Bases: pymor.reductors.basic.InstationaryRBReductor

Reduced Basis Reductor for parabolic equations.

This reductor uses InstationaryRBReductor for the actual RB-projection. The only addition is the assembly of an error estimator which bounds the discrete l2-in time / energy-in space error similar to [GP05], [HO08] as follows:

\left[ C_a^{-1}(\mu)\|e_N(\mu)\|^2 + \sum_{n=1}^{N} \Delta t\|e_n(\mu)\|^2_e \right]^{1/2}
    \leq \left[ C_a^{-2}(\mu)\Delta t \sum_{n=1}^{N}\|\mathcal{R}^n(u_n(\mu), \mu)\|^2_{e,-1}
                + C_a^{-1}(\mu)\|e_0\|^2 \right]^{1/2}

Here, \|\cdot\| denotes the norm induced by the problem’s mass matrix (e.g. the L^2-norm) and \|\cdot\|_e is an arbitrary energy norm w.r.t. which the space operator A(\mu) is coercive, and C_a(\mu) is a lower bound for its coercivity constant. Finally, \mathcal{R}^n denotes the implicit Euler timestepping residual for the (fixed) time step size \Delta t,

\mathcal{R}^n(u_n(\mu), \mu) :=
    f - M \frac{u_{n}(\mu) - u_{n-1}(\mu)}{\Delta t} - A(u_n(\mu), \mu),

where M denotes the mass operator and f the source term. The dual norm of the residual is computed using the numerically stable projection from [BEOR14].

Parameters

fom

The InstationaryModel which is to be reduced.

RB

VectorArray containing the reduced basis on which to project.

product

The energy inner product Operator w.r.t. which the reduction error is estimated and RB is orthonormalized.

coercivity_estimator

None or a ParameterFunctional returning a lower bound C_a(\mu) for the coercivity constant of fom.operator w.r.t. product.

Methods

ParabolicRBReductor

assemble_estimator, assemble_estimator_for_subbasis

InstationaryRBReductor

build_rom, project_operators, project_operators_to_subbasis

ProjectionBasedReductor

extend_basis, reconstruct, reduce

BasicInterface

disable_logging, enable_logging, has_interface_name, implementor_names, implementors

residual module


class pymor.reductors.residual.ImplicitEulerResidualOperator(operator, mass, rhs, dt, name=None)[source]

Bases: pymor.operators.basic.OperatorBase

Instantiated by ImplicitEulerResidualReductor.

apply(U, U_old, mu=None)[source]

Apply the operator to a VectorArray.

Parameters

U

VectorArray of vectors to which the operator is applied.

mu

The Parameter for which to evaluate the operator.

Returns

VectorArray of the operator evaluations.


class pymor.reductors.residual.ImplicitEulerResidualReductor(RB, operator, mass, dt, rhs=None, product=None)[source]

Bases: pymor.core.interfaces.BasicInterface

Reduced basis residual reductor with mass operator for implicit Euler timestepping.

Given an operator, mass and a functional, the concatenation of residual operator with the Riesz isomorphism is given by:

riesz_residual.apply(U, U_old, mu)
    == product.apply_inverse(operator.apply(U, mu) + 1/dt*mass.apply(U, mu) - 1/dt*mass.apply(U_old, mu)
       - rhs.as_vector(mu))

This reductor determines a low-dimensional subspace of the image of a reduced basis space under riesz_residual using estimate_image_hierarchical, computes an orthonormal basis residual_range of this range space and then returns the Petrov-Galerkin projection

projected_riesz_residual
    == riesz_residual.projected(range_basis=residual_range, source_basis=RB)

of the riesz_residual operator. Given reduced basis coefficient vectors u and u_old, the dual norm of the residual can then be computed as

projected_riesz_residual.apply(u, u_old, mu).l2_norm()

Moreover, a reconstruct method is provided such that

residual_reductor.reconstruct(projected_riesz_residual.apply(u, u_old, mu))
    == riesz_residual.apply(RB.lincomb(u), RB.lincomb(u_old), mu)

Parameters

operator

See definition of riesz_residual.

mass

The mass operator. See definition of riesz_residual.

dt

The time step size. See definition of riesz_residual.

rhs

See definition of riesz_residual. If None, zero right-hand side is assumed.

RB

VectorArray containing a basis of the reduced space onto which to project.

product

Inner product Operator w.r.t. which to compute the Riesz representatives.

reconstruct(u)[source]

Reconstruct high-dimensional residual vector from reduced vector u.


class pymor.reductors.residual.NonProjectedImplicitEulerResidualOperator(operator, mass, rhs, dt, product)[source]

Bases: pymor.reductors.residual.ImplicitEulerResidualOperator

Instantiated by ImplicitEulerResidualReductor.

Not to be used directly.

apply(U, U_old, mu=None)[source]

Apply the operator to a VectorArray.

Parameters

U

VectorArray of vectors to which the operator is applied.

mu

The Parameter for which to evaluate the operator.

Returns

VectorArray of the operator evaluations.


class pymor.reductors.residual.NonProjectedResidualOperator(operator, rhs, riesz_representatives, product)[source]

Bases: pymor.reductors.residual.ResidualOperator

Instantiated by ResidualReductor.

Not to be used directly.

apply(U, mu=None)[source]

Apply the operator to a VectorArray.

Parameters

U

VectorArray of vectors to which the operator is applied.

mu

The Parameter for which to evaluate the operator.

Returns

VectorArray of the operator evaluations.


class pymor.reductors.residual.ResidualOperator(operator, rhs, name=None)[source]

Bases: pymor.operators.basic.OperatorBase

Instantiated by ResidualReductor.

apply(U, mu=None)[source]

Apply the operator to a VectorArray.

Parameters

U

VectorArray of vectors to which the operator is applied.

mu

The Parameter for which to evaluate the operator.

Returns

VectorArray of the operator evaluations.


class pymor.reductors.residual.ResidualReductor(RB, operator, rhs=None, product=None, riesz_representatives=False)[source]

Bases: pymor.core.interfaces.BasicInterface

Generic reduced basis residual reductor.

Given an operator and a right-hand side, the residual is given by:

residual.apply(U, mu) == operator.apply(U, mu) - rhs.as_range_array(mu)

When operator maps to functionals instead of vectors, we are interested in the Riesz representative of the residual:

residual.apply(U, mu)
    == product.apply_inverse(operator.apply(U, mu) - rhs.as_range_array(mu))

Given a basis RB of a subspace of the source space of operator, this reductor uses estimate_image_hierarchical to determine a low-dimensional subspace containing the image of the subspace under residual (resp. riesz_residual), computes an orthonormal basis residual_range for this range space and then returns the Petrov-Galerkin projection

projected_residual
    == project(residual, range_basis=residual_range, source_basis=RB)

of the residual operator. Given a reduced basis coefficient vector u, w.r.t. RB, the (dual) norm of the residual can then be computed as

projected_residual.apply(u, mu).l2_norm()

Moreover, a reconstruct method is provided such that

residual_reductor.reconstruct(projected_residual.apply(u, mu))
    == residual.apply(RB.lincomb(u), mu)

Parameters

RB

VectorArray containing a basis of the reduced space onto which to project.

operator

See definition of residual.

rhs

See definition of residual. If None, zero right-hand side is assumed.

product

Inner product Operator w.r.t. which to orthonormalize and w.r.t. which to compute the Riesz representatives in case operator maps to functionals.

riesz_representatives

If True compute the Riesz representative of the residual.

reconstruct(u)[source]

Reconstruct high-dimensional residual vector from reduced vector u.

sobt module


class pymor.reductors.sobt.GenericSOBTpvReductor(fom, mu=None)[source]

Bases: pymor.core.interfaces.BasicInterface

Generic Second-Order Balanced Truncation position/velocity reductor.

See [RS08].

Parameters

fom

The full-order SecondOrderModel to reduce.

mu

Parameter.

reconstruct(u)[source]

Reconstruct high-dimensional vector from reduced vector u.

reduce(r, projection='bfsr')[source]

Reduce using GenericSOBTpv.

Parameters

r

Order of the reduced model.

projection

Projection method used:

  • 'sr': square root method

  • 'bfsr': balancing-free square root method (default, since it avoids scaling by singular values and orthogonalizes the projection matrices, which might make it more accurate than the square root method)

  • 'biorth': like the balancing-free square root method, except it biorthogonalizes the projection matrices

Returns

rom

Reduced-order SecondOrderModel.


class pymor.reductors.sobt.SOBTReductor(fom, mu=None)[source]

Bases: pymor.core.interfaces.BasicInterface

Second-Order Balanced Truncation reductor.

See [CLVV06].

Parameters

fom

The full-order SecondOrderModel to reduce.

mu

Parameter.

reconstruct(u)[source]

Reconstruct high-dimensional vector from reduced vector u.

reduce(r, projection='bfsr')[source]

Reduce using SOBT.

Parameters

r

Order of the reduced model.

projection

Projection method used:

  • 'sr': square root method

  • 'bfsr': balancing-free square root method (default, since it avoids scaling by singular values and orthogonalizes the projection matrices, which might make it more accurate than the square root method)

  • 'biorth': like the balancing-free square root method, except it biorthogonalizes the projection matrices

Returns

rom

Reduced-order SecondOrderModel.


class pymor.reductors.sobt.SOBTfvReductor(fom, mu=None)[source]

Bases: pymor.core.interfaces.BasicInterface

Free-velocity Second-Order Balanced Truncation reductor.

See [MS96].

Parameters

fom

The full-order SecondOrderModel to reduce.

mu

Parameter.

reconstruct(u)[source]

Reconstruct high-dimensional vector from reduced vector u.

reduce(r, projection='bfsr')[source]

Reduce using SOBTfv.

Parameters

r

Order of the reduced model.

projection

Projection method used:

  • 'sr': square root method

  • 'bfsr': balancing-free square root method (default, since it avoids scaling by singular values and orthogonalizes the projection matrices, which might make it more accurate than the square root method)

  • 'biorth': like the balancing-free square root method, except it biorthogonalizes the projection matrices

Returns

rom

Reduced-order SecondOrderModel.


class pymor.reductors.sobt.SOBTpReductor(fom, mu=None)[source]

Bases: pymor.reductors.sobt.GenericSOBTpvReductor

Second-Order Balanced Truncation position reductor.

See [RS08].

Parameters

fom

The full-order SecondOrderModel to reduce.

mu

Parameter.


class pymor.reductors.sobt.SOBTpvReductor(fom, mu=None)[source]

Bases: pymor.reductors.sobt.GenericSOBTpvReductor

Second-Order Balanced Truncation position-velocity reductor.

See [RS08].

Parameters

fom

The full-order SecondOrderModel to reduce.

mu

Parameter.


class pymor.reductors.sobt.SOBTvReductor(fom, mu=None)[source]

Bases: pymor.reductors.sobt.GenericSOBTpvReductor

Second-Order Balanced Truncation velocity reductor.

See [RS08].

Parameters

fom

The full-order SecondOrderModel to reduce.

mu

Parameter.


class pymor.reductors.sobt.SOBTvpReductor(fom, mu=None)[source]

Bases: pymor.reductors.sobt.GenericSOBTpvReductor

Second-Order Balanced Truncation velocity-position reductor.

See [RS08].

Parameters

fom

The full-order SecondOrderModel to reduce.

mu

Parameter.

sor_irka module


class pymor.reductors.sor_irka.SORIRKAReductor(fom, mu=None)[source]

Bases: pymor.core.interfaces.BasicInterface

SOR-IRKA reductor.

Parameters

fom

The full-order SecondOrderModel to reduce.

mu

Parameter.

reconstruct(u)[source]

Reconstruct high-dimensional vector from reduced vector u.

reduce(r, sigma=None, b=None, c=None, rom0=None, tol=0.0001, maxit=100, num_prev=1, force_sigma_in_rhp=False, projection='orth', conv_crit='sigma', compute_errors=False, irka_options=None)[source]

Reduce using SOR-IRKA.

It uses IRKA as the intermediate reductor, to reduce from 2r to r poles. See Section 5.3.2 in [W12].

Parameters

r

Order of the reduced order model.

sigma

Initial interpolation points (closed under conjugation).

If None, interpolation points are log-spaced between 0.1 and 10. If sigma is an int, it is used as a seed to generate it randomly. Otherwise, it needs to be a one-dimensional array-like of length r.

sigma and rom0 cannot both be not None.

b

Initial right tangential directions.

If None, if is chosen as all ones. If b is an int, it is used as a seed to generate it randomly. Otherwise, it needs to be a VectorArray of length r from fom.B.source.

b and rom0 cannot both be not None.

c

Initial left tangential directions.

If None, if is chosen as all ones. If c is an int, it is used as a seed to generate it randomly. Otherwise, it needs to be a VectorArray of length r from fom.Cp.range.

c and rom0 cannot both be not None.

rom0

Initial reduced order model.

If None, then sigma, b, and c are used. Otherwise, it needs to be an LTIModel of order r and it is used to construct sigma, b, and c.

tol

Tolerance for the convergence criterion.

maxit

Maximum number of iterations.

num_prev

Number of previous iterations to compare the current iteration to. Larger number can avoid occasional cyclic behavior of IRKA.

force_sigma_in_rhp

If False, new interpolation are reflections of the current reduced order model’s poles. Otherwise, only the poles in the left half-plane are reflected.

projection

Projection method:

  • 'orth': projection matrices are orthogonalized with respect to the Euclidean inner product

  • 'biorth': projection matrices are biorthogolized with respect to the E product

conv_crit

Convergence criterion:

  • 'sigma': relative change in interpolation points

  • 'h2': relative \mathcal{H}_2 distance of reduced-order models

compute_errors

Should the relative \mathcal{H}_2-errors of intermediate reduced order models be computed.

Warning

Computing \mathcal{H}_2-errors is expensive. Use this option only if necessary.

irka_options

Dict of options for IRKAReductor.reduce.

Returns

rom

Reduced-order SecondOrderModel.