The Rice Vector Library ("RVL") provides
- a system of types for portable expression of coordinate- and representation-free ("matrix free") algorithms in optimization and linear algebra, and
- uniform mechanisms to build concrete instances of these types via computations of arbitrary complexity.
This library is written entirely in ISO C++, and uses its abstraction facilities to achieve portability across applications and environments. While other means exist to accomplish these ends, C++ is universally available in HPC systems, provides object-oriented and generic programming models, and offers easy access to many existing high performance numerical and infrastructure libraries written in C and Fortran.
The current release uses the shared pointer class from C++11, so the compiler must support these.
Obtaining RVL:
See the TRIP software page for current download instructions and release notes.
Subpackage directory:
- RVL - Fundamental interfaces defining calculus in Hilbert space: vector spaces, vectors, linear and nonlinear scalar- and vector-valued functions, and closely related concepts such as product (block data, operator) decompositions and abstract quality control tests for derivatives, adjoints, etc. Also data management types (data containers, function objects) - uniform abstract interfaces to concrete data structures and implementations.
- LocalRVL - A simple realization of the data management hierarchy for containers that expose a pointer to a contiguous block of memory (C or Fortran arrays). Useful both in itself and as building block for more complex in-core, out-of-core, and distributed data management schemes. Includes various utilities.
- MPIRVL - MPI wrappers for the local RVL classes - makes them available in various ways (from serial on rank 0 to various forms of distribution) in distributed applications.
- Algorithm - An algorithm is a von Neumann machine, that is, you start it and it runs until it stops. This subpackage contains simple abstractions for Algorithms and Terminators (objects equipped to give an answer, "yes" or "no" on various grounds, to the question, "should this algorithm continue?"). Various standard combinations build loops, lists, decision trees etc. and give an elegant mechanism for expressing virtually any iterative algorithm.
- Umin - Unconstrained minimization and iterative linear algebra algorithms, realized as RVL::Algorithms. Quasi-Newton, trust region, Krylov subspace methods for optimization, linear systems, and eigenvalue problems.
- Sequence - Example, discussed in the design paper, showing how infinite dimensional vector spaces can actually be implemented in RVL, implying that dimension cannot be a general attribute of an RVL vector space. Defines space of finite sequences, a linear operator on them (polynomial multiplication), and approximates the solution of a least squares problem.
- Tests - a small set of unit tests to verify correct installation of RVL and LocalRVL.
Installation
References
The design principles of RVL are explained in
A software framework for abstract expression of coordinate-free linear algebra and optimization algorithms, by A. D. Padula, Shannon D. Scott, and William W. Symes, ACM Transactions on Mathematical Software, 36 (2), pp. 8:1-8:36, 2009.
Tony Padula developed the Algorithm library as part of his doctoral work, which also included a study of interoperability amongst object-oriented numerical analysis packages and several applications of RVL: A. D. Padula, Software design for simulation-driven optimization, TR 05-11, CAAM, Rice University 2005.
The design of the time-stepping for optimization library was part of Marco Enriquez's PhD thesis, which also includes a discussion of adaptive timestepping in simulation-driven optimization, and application to optimizing well rates.
RVL supports all of TRIP's recent work on seismic reflection inversion, as described for example in From modelling to inversion: designing a well-adapted simulator, W. W. Symes, D. Sun, and M. Enriquez, Geophysical Prospecting, 59, pp. 813-833, 2011.
Credits
RVL grew out of the Hilbert Class Library project, whose main authors were Mark Gockenbach and William Symes. Earlier work by Jon Claerbout, Dave Nichols, Lester Dye, and others provided important inspirations for the design of HCL and later RVL. Shannon Scott, Tony Padula and William Symes created the first usable version of RVL in 2004-5. The package was subsequently refined and enhanced by Symes, Hala Dajani, Marco Enriquez, and Dong Sun. The TOMS paper describes in detail the relation between RVL and similar projects. Tony Padula invented the Algorithm package and described it in his PhD thesis. Padula also wrote the first version of the Umin package. Marco Enriquez and William Symes developed the Time-stepping for optimization package.
Development of RVL and related projects was made possible by
grants from from the National Science Foundation, the Department of
Energy, ExxonMobil Upstream Research Company, and by generous support
from the sponsors of The Rice Inversion Project.
Maintained by William W. Symessymes@caam.rice.edu Photo courtesy Ivy Gonzalez
Last modified: Sun Nov 21 12:02:44 CST 2010