Skip to content
Hierarchical Approximate Proper Orthogonal Decomposition
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.

HAPOD - Hierarchical Approximate Proper Orthogonal Decomposition

  • HAPOD - Hierarchical Approximate POD
  • version: 2.0 ( 2019-01-21 )
  • by: Christian Himpe (0000-0003-2194-6754), Stephan Rave (0000-0003-0439-7212)
  • under: BSD 2-Clause License (open-source)
  • summary: Distributed or incremental POD / SVD computation


  • Proper Orthogonal Decomposition (POD)
  • (Truncated) Singular Value Decomposition (SVD)
  • (Sparse) Principal Component Analysis (PCA)
  • Empirical Orthogonal Functions (EOF)
  • Empirical Eigenfunctions
  • Karhunen-Loeve Decomposition
  • Dimension Reduction
  • Model Reduction | Model Order Reduction


  • Standard POD
  • Incremental (HA)POD
  • Distributed (HA)POD
  • Custom SVD backend
  • Method of Snapshots


  • GNU Octave >= 4.2
  • Mathworks MATLAB >= 2013b

Basic Usage

[svec,sval,snfo] = hapod(data,bound,type,relax,config,mysvd)



  • data {cell array}
  • bound {scalar} L2 mean projection error bound
  • type {string} HAPOD tree type
    • 'incr' Incremental HAPOD (Complete)
    • 'incr_1' Incremental HAPOD (Non-root node)
    • 'incr_r' Incremental HAPOD (Root node)
    • 'dist' Distributed HAPOD (Complete)
    • 'dist_1' Distributed HAPOD (Non-root node)
    • 'dist_r' Distributed HAPOD (Root node)
    • 'none' Standard POD
  • relax {scalar} Relaxation parameter in (0,1] by default: 0.5.
  • config {structure} Configuration structure by default empty.
    • nLevels - Total number of levels in tree
    • nSnapshots - Number of data snapshots (columns) seen at each node
    • nModes - Number of modes resulting at each node
    • tNode - Time consumed at each node
  • mysvd {handle} Function handle to a custom POD method.
    • by default an economic SVD is used.
    • alternatively the method-of-snapshots can be used via 'mos'.
    • otherwise a function handle can be provided.

Return Values

  • svec {matrix} POD modes (column vectors)
  • sval {vector} Singular values
  • snfo {structure} Information structure


If all data partitions can be passed as the data argument, the types: none (standard POD), incr(emental) HAPOD or dist(ributed) HAPOD are applicable. In case only a single partition can be passed, the types: incr_1 and dist_1 should be used for the non-root nodes of the associated HAPOD tree, while the types: incr_r and dist_r should be used for the root node. The returned information structure (or a cell-array thereof) can be passed to the parent nodes in the associated HAPOD tree.

Information and Configuration Structure

  • nLevels - Total number of levels in tree
  • nSnapshots - Number of data columns passed to this hapod and its children.
  • nModes - Number of intermediate modes
  • tNode - computational time at this hapod's branch

Only for incr_1, the number of levels nLevels in the tree needs to be provided in a structure. The other fields are filled by the hapod function.

Custom SVD Backend

Signature, arguments and return values as for MATLAB's svd function.

[U,D,V] = mysvd(X)

Getting Started

Run the sample code:


which demonstrates the different implemented HAPOD variants and can be used as a template.

Cite As

C. Himpe, T. Leibner and S. Rave. "Hierarchical Approximate Proper Orthogonal Decomposition". SIAM Journal on Scientific Computing, 40(5): A3267--A3292, 2018.

Used In

You can’t perform that action at this time.