LibRom: POD-Based Reduced Order Modeling
LibRom is a library designed to facilitate Proper Orthogonal Decomposition (POD) based Reduced Order Modeling (ROM). In POD ROM one attempts to represent the solution of a full order model (FOM) by a set of basis vectors in a reduced (hopefully greatly reduced) dimension sub-space. libROM generates basis vectors from FOM solutions, by providing guidance for selecting appropriate solution snapshots, and computing the associated singular value decomposition (SVD) incrementally.
LibROM addresses a fundamental issue in POD ROM, namely how the solution snapshots should be optimally selected. One of the key features of libROM is an adaptive sampling algorithm that controls out of sub-space error with a minimum number of snapshots. This produces accurate ROMs of minimum dimension which may be generated and evaluated in correspondingly less time.
The library implements 3 different variations of the fundamental basis generation algorithm. All 3 variations are parallel. In the fundamental algorithm an SVD of the solution snapshots is performed. The column vectors of that SVD form the basis vectors. The first 2 variations are implementations of the incremental SVD algorithms described by Matthew Brand (Incremental singular value decomposition of uncertain data with missing values in Computer VisionECCV 2002, Springer, 2002, pp. 707-720). These algorithms are parallel and scalable. Details of the algorithms and their parallel performance are included in the library documentation. The third algorithm is a fairly literal interpretation of the fundamental algorithm. It requires that an SVD be performed on the globalized snapshots and is therefore clearly not scalable. It is included in the library primarily for completeness.
It has been our experience that inserting libROM into an existing code to generate basis vectors is fairly easy and non-invasive. The use of the basis vectors to form and evaluate the ROM are highly problem dependent and therefore not addressable by an external library such as libROM.
Download: libROM on GitHub