pymor.algorithms.ei

This module contains algorithms for the empirical interpolation of Operators.

The main work for generating the necessary interpolation data is handled by the ei_greedy method. The objects returned by this method can be used to instantiate an EmpiricalInterpolatedOperator.

As a convenience, the interpolate_operators method allows to perform the empirical interpolation of the Operators of a given model with a single function call.

Module Contents

pymor.algorithms.ei.deim(U, modes=None, pod=True, atol=None, rtol=None, product=None, pod_options={})[source]

Generate data for empirical interpolation using DEIM algorithm.

Given a VectorArray U, this method generates a collateral basis and interpolation DOFs for empirical interpolation of the vectors contained in U. The returned objects can be used to instantiate an EmpiricalInterpolatedOperator (with triangular=False).

The collateral basis is determined by the first pod modes of U.

Parameters:
  • U – A VectorArray of vectors to interpolate.

  • modes – Dimension of the collateral basis i.e. number of POD modes of the vectors in U.

  • pod – If True, perform a POD of U to obtain the collateral basis. If False, U is used as collateral basis.

  • atol – Absolute POD tolerance.

  • rtol – Relative POD tolerance.

  • product – Inner product Operator used for the POD.

  • pod_options – Dictionary of additional options to pass to the pod algorithm.

Returns:

  • interpolation_dofsNumPy array of the DOFs at which the vectors are interpolated.

  • collateral_basisVectorArray containing the generated collateral basis.

  • data – Dict containing the following fields:

    svals:

    POD singular values.

pymor.algorithms.ei.ei_greedy(U, error_norm=None, atol=None, rtol=None, max_interpolation_dofs=None, nodal_basis=False, copy=True, pool=dummy_pool)[source]

Generate data for empirical interpolation using EI-Greedy algorithm.

Given a VectorArray U, this method generates a collateral basis and interpolation DOFs for empirical interpolation of the vectors contained in U. The returned objects can be used to instantiate an EmpiricalInterpolatedOperator (with triangular=True).

The interpolation data is generated by a greedy search algorithm, where in each loop iteration the worst approximated vector in U is added to the collateral basis.

Parameters:
  • U – A VectorArray of vectors to interpolate.

  • error_norm – Norm w.r.t. which to calculate the interpolation error. If None, the Euclidean norm is used. If 'sup', the sup-norm of the dofs is used.

  • atol – Stop the greedy search if the largest approximation error is below this threshold.

  • rtol – Stop the greedy search if the largest relative approximation error is below this threshold.

  • max_interpolation_dofs – Stop the greedy search if the number of interpolation DOF (= dimension of the collateral basis) reaches this value.

  • nodal_basis – If True, a nodal interpolation basis is constructed. Note that nodal bases are not hierarchical. Their construction involves the inversion of the associated interpolation matrix, which might lead to decreased numerical accuracy.

  • copy – If False, U will be modified during executing of the algorithm.

  • pool – If not None, the WorkerPool to use for parallelization.

Returns:

  • interpolation_dofsNumPy array of the DOFs at which the vectors are evaluated.

  • collateral_basisVectorArray containing the generated collateral basis.

  • data – Dict containing the following fields:

    errors:

    Sequence of maximum approximation errors during greedy search.

    triangularity_errors:

    Sequence of maximum absolute values of interpolation matrix coefficients in the upper triangle (should be near zero).

    coefficients:

    NumPy array of coefficients such that collateral_basis is given by U.lincomb(coefficients).

    interpolation_matrix:

    The interpolation matrix, i.e., the evaluation of collateral_basis at interpolation_dofs.

pymor.algorithms.ei.interpolate_function(function, parameter_sample, evaluation_points, atol=None, rtol=None, max_interpolation_dofs=None)[source]

Parameter separable approximation of a Function using Empirical Interpolation.

This method computes a parameter separated LincombFunction approximating the input Function using Empirical Interpolation :cite`BMNP04`. The actual EI Greedy algorithm is contained in ei_greedy. This function acts as a convenience wrapper, which computes the training data and constructs an EmpiricalInterpolatedFunction from the data returned by ei_greedy.

Note

If possible, choose evaluation_points identical to the coordinates at which the interpolated function is going to be evaluated. Otherwise function will have to be re-evaluated at all new evaluation points for all parameter values given by parameter_sample.

Parameters:
  • function – The function to interpolate.

  • parameter_sample – A list of Parameters for which function is evaluated to generate the training data.

  • evaluation_pointsNumPy array of coordinates at which function should be evaluated to generate the training data.

  • atol – See ei_greedy.

  • rtol – See ei_greedy.

  • max_interpolation_dofs – See ei_greedy.

Returns:

pymor.algorithms.ei.interpolate_operators(fom, operator_names, parameter_sample, error_norm=None, product=None, atol=None, rtol=None, max_interpolation_dofs=None, pod_options={}, alg='ei_greedy', pool=dummy_pool)[source]

Empirical operator interpolation using the EI-Greedy/DEIM algorithm.

This is a convenience method to facilitate the use of ei_greedy or deim. Given a Model, names of Operators, and a sample of Parameters, first the operators are evaluated on the solution snapshots of the model for the provided parameters. These evaluations are then used as input for ei_greedy/deim. Finally the resulting interpolation data is used to create EmpiricalInterpolatedOperators and a new model with the interpolated operators is returned.

Note that this implementation creates one common collateral basis for all specified operators, which might not be what you want.

Parameters:
  • fom – The Model whose Operators will be interpolated.

  • operator_names – List of keys in the operators dict of the model. The corresponding Operators will be interpolated.

  • parameter_sample – A list of Parameters for which solution snapshots are calculated.

  • error_norm – See ei_greedy. Has no effect if alg == 'deim'.

  • product – Inner product for POD computation in deim. Has no effect if alg == 'ei_greedy'.

  • atol – See ei_greedy.

  • rtol – See ei_greedy.

  • max_interpolation_dofs – See ei_greedy.

  • pod_options – Further options for pod algorithm. Has no effect if alg == 'ei_greedy'.

  • alg – Either ei_greedy or deim.

  • pool – If not None, the WorkerPool to use for parallelization.

Returns: