pymor.algorithms.hapod

Module Contents

Classes

Node

LifoExecutor

FakeExecutor

Functions

inc_hapod_tree

dist_hapod_tree

default_pod_method

hapod

Compute the Hierarchical Approximate POD.

inc_hapod

Incremental Hierarchical Approximate POD.

dist_hapod

Distributed Hierarchical Approximate POD.

inc_vectorarray_hapod

Incremental Hierarchical Approximate POD.

dist_vectorarray_hapod

Distributed Hierarchical Approximate POD.

std_local_eps

class pymor.algorithms.hapod.Node(tag=None, parent=None, after=None)[source]
add_child(self, tag=None, after=None, **kwargs)[source]
property depth(self)[source]
property is_leaf(self)[source]
property is_root(self)[source]
traverse(self, return_level=False)[source]
__str__(self)[source]

Return str(self).

pymor.algorithms.hapod.inc_hapod_tree(steps)[source]
pymor.algorithms.hapod.dist_hapod_tree(num_slices, arity=None)[source]
pymor.algorithms.hapod.default_pod_method(U, eps, is_root_node, product)[source]
pymor.algorithms.hapod.hapod(tree, snapshots, local_eps, product=None, pod_method=default_pod_method, executor=None, eval_snapshots_in_executor=False)[source]

Compute the Hierarchical Approximate POD.

This is an implementation of the HAPOD algorithm from [HLR18].

Parameters

tree

A Tree defining the worker topology.

snapshots

A mapping snapshots(node) returning for each leaf node the associated snapshot vectors.

local_eps

A mapping local_eps(node, snap_count, num_vecs) assigning to each tree node node an l2 truncation error tolerance for the local pod based on the number of input vectors num_vecs and the total number of snapshot vectors below the given node snap_count.

product

Inner product Operator w.r.t. which to compute the POD.

pod_method

A function pod_method(U, eps, root_node, product) for computing the POD of the VectorArray U w.r.t. the given inner product product and the l2 error tolerance eps. root_node is set to True when the POD is computed at the root of the tree.

executor

If not None, a concurrent.futures.Executor object to use for parallelization.

eval_snapshots_in_executor

If True also parallelize the evaluation of the snapshot map.

Returns

modes

The computed POD modes.

svals

The associated singular values.

snap_count

The total number of input snapshot vectors.

pymor.algorithms.hapod.inc_hapod(steps, snapshots, eps, omega, product=None, executor=None)[source]

Incremental Hierarchical Approximate POD.

This computes the incremental HAPOD from [HLR18].

Parameters

steps

The number of incremental POD updates. Has to agree with the length of snapshots.

snapshots

An iterable returning for each incremental POD step the associated snapshot vectors.

eps

Desired l2-mean approximation error.

omega

Tuning parameter (0 < omega < 1) to balance performance with approximation quality.

product

Inner product Operator w.r.t. which to compute the POD.

executor

If not None, a concurrent.futures.Executor object to use to compute new snapshot vectors and POD updates in parallel.

Returns

modes

The computed POD modes.

svals

The associated singular values.

snap_count

The total number of input snapshot vectors.

pymor.algorithms.hapod.dist_hapod(num_slices, snapshots, eps, omega, arity=None, product=None, executor=None, eval_snapshots_in_executor=False)[source]

Distributed Hierarchical Approximate POD.

This computes the distributed HAPOD from [HLR18].

Parameters

num_slices

The number of snapshot vector slices.

snapshots

A mapping snapshots(slice) returning for each slice number the associated snapshot vectors.

eps

Desired l2-mean approximation error.

omega

Tuning parameter (0 < omega < 1) to balance performance with approximation quality.

arity

If not None, the arity of the HAPOD tree. Otherwise, a tree of depth 2 is used (one POD per slice and one additional POD of the resulting data).

product

Inner product Operator w.r.t. which to compute the POD.

executor

If not None, a concurrent.futures.Executor object to use for parallelization.

eval_snapshots_in_executor

If True also parallelize the evaluation of the snapshot map.

Returns

modes

The computed POD modes.

svals

The associated singular values.

snap_count

The total number of input snapshot vectors.

pymor.algorithms.hapod.inc_vectorarray_hapod(steps, U, eps, omega, product=None)[source]

Incremental Hierarchical Approximate POD.

This computes the incremental HAPOD from [HLR18] for a given VectorArray.

Parameters

steps

The number of incremental POD updates.

U

The VectorArray of which to compute the HAPOD.

eps

Desired l2-mean approximation error.

omega

Tuning parameter (0 < omega < 1) to balance performance with approximation quality.

product

Inner product Operator w.r.t. which to compute the POD.

Returns

modes

The computed POD modes.

svals

The associated singular values.

snap_count

The total number of input snapshot vectors.

pymor.algorithms.hapod.dist_vectorarray_hapod(num_slices, U, eps, omega, arity=None, product=None, executor=None)[source]

Distributed Hierarchical Approximate POD.

This computes the distributed HAPOD from [HLR18] of a given VectorArray.

Parameters

num_slices

The number of snapshot vector slices.

U

The VectorArray of which to compute the HAPOD.

eps

Desired l2-mean approximation error.

omega

Tuning parameter (0 < omega < 1) to balance performance with approximation quality.

arity

If not None, the arity of the HAPOD tree. Otherwise, a tree of depth 2 is used (one POD per slice and one additional POD of the resulting data).

product

Inner product Operator w.r.t. which to compute the POD.

executor

If not None, a concurrent.futures.Executor object to use for parallelization.

Returns

modes

The computed POD modes.

svals

The associated singular values.

snap_count

The total number of input snapshot vectors.

pymor.algorithms.hapod.std_local_eps(tree, eps, omega, pod_on_leafs=True)[source]
class pymor.algorithms.hapod.LifoExecutor(executor, max_workers=None)[source]
submit(self, f, *args)[source]
async run_task(self)[source]
done_callback(self, future, executor_future)[source]
class pymor.algorithms.hapod.FakeExecutor[source]
async static submit(f, *args)[source]