Blitz++ User's Guide

Blitz++ User's Guide

Todd Veldhuizen
<tveldhui@acm.org>

Version 0.5, June 1999



Chapter 1: Introduction

1.1: About this document
1.2: Platform notes
1.2.1: KAI C++
1.2.2: Intel C++
1.2.3: gcc
1.2.4: DECcxx
1.2.5: Cray T3E/Cray T90/Cray C90/Cray J90
1.3: How to download Blitz++
1.4: Installation and porting
1.4.1: Installation
1.4.2: The Blitz++ directory tree
1.4.3: Porting Blitz++
1.5: Compiling with Blitz++
1.5.1: Header files
1.5.2: Linking to the Blitz++ library
1.5.3: An example Makefile
1.5.4: Explicit instantiation
1.6: Licensing terms
1.7: Mailing lists and support
1.7.1: How to get help
1.7.2: How to subscribe to a mailing list
1.7.3: blitz-bugs
1.7.4: blitz-dev
1.7.5: blitz-support

Chapter 2: Arrays

2.1: Getting started
2.1.1: Template parameters
2.1.2: Array types
2.1.3: A simple example
2.1.4: Storage orders
2.2: Public types
2.3: Constructors
2.3.1: Default constructor
2.3.2: Creating an array from an expression
2.3.3: Constructors which take extent parameters
2.3.4: Constructors with Range arguments
2.3.5: Referencing another array
2.3.6: Constructing an array from an expression
2.3.7: Creating an array from pre-existing data
2.3.8: Interlacing arrays
2.3.9: A note about reference counting
2.4: Indexing, subarrays, and slicing
2.4.1: Indexing
2.4.2: Subarrays
2.4.3: Slicing
2.4.4: More about Range objects
2.4.5: A note about assignment
2.4.6: An example
2.5: Debug mode
2.6: Member functions
2.6.1: A note about dimension parameters
2.6.2: Member function descriptions
2.7: Global functions
2.8: Inputting and Outputting Arrays
2.8.1: Output formatting
2.8.2: Inputting arrays
2.9: Array storage orders
2.9.1: Fortran and C-style arrays
2.9.2: Creating custom storage orders
2.9.3: Storage orders example

Chapter 3: Array Expressions

3.1: Expression evaluation order
3.2: Expression operands
3.3: Array operands
3.4: Expression operators
3.5: Assignment operators
3.6: Index placeholders
3.7: Type promotion
3.8: Single-argument math functions
3.9: Two-argument math functions
3.10: Declaring your own math functions on arrays
3.11: Tensor notation
3.12: Array reductions
3.13: Complete reductions
3.14: Partial Reductions
3.15: where statements

Chapter 4: Stencils

4.1: Motivation: a nicer notation for stencils
4.2: Declaring stencil objects
4.3: Automatic determination of stencil extent
4.4: Stencil operators
4.4.1: Central differences
4.4.2: Forward differences
4.4.3: Backward differences
4.4.4: Laplacian operators
4.4.5: Gradient operators
4.4.6: Jacobian operators
4.4.7: Grad-squared operators
4.4.8: Curl operators
4.4.9: Divergence operators
4.4.10: Mixed partial derivatives
4.5: Declaring your own stencil operators
4.6: Applying a stencil

Chapter 5: Multicomponent, complex, and user type arrays

5.1: Multicomponent and complex arrays
5.1.1: Extracting components
5.1.2: Special support for complex arrays
5.1.3: Zipping together expressions
5.2: Creating arrays of a user type

Chapter 6: Indirection

6.1: Indirection
6.2: Indirection using lists of array positions
6.3: Cartesian-product indirection
6.4: Indirection with lists of strips

Chapter 7: TinyVector

7.1: Template parameters and types
7.2: Constructors
7.3: Member functions
7.4: Assignment operators
7.5: Expressions
7.6: Global functions
7.7: Arrays of TinyVector
7.8: Input/output

Chapter 8: Random Number Generators

8.1: Overview
8.2: Note: Parallel random number generators
8.3: Seeding a random number generator
8.4: Detailed description of RNGs
8.5: Template parameters
8.6: Member functions
8.7: Detailed listing of RNGs
8.7.1: random/uniform.h
8.7.2: random/normal.h
8.7.3: random/exponential.h
8.7.4: random/beta.h
8.7.5: random/chisquare.h
8.7.6: random/gamma.h
8.7.7: random/F.h
8.7.8: random/discrete-uniform.h

Chapter 9: Numeric properties

9.1: Introduction
9.2: Function descriptions

Chapter 10: Frequently Asked Questions

10.1: Questions about installation
10.2: Questions about Blitz++ functionality