maspack.matrix
Class Matrix3x3Block

java.lang.Object
  extended by maspack.matrix.MatrixBase
      extended by maspack.matrix.DenseMatrixBase
          extended by maspack.matrix.Matrix3dBase
              extended by maspack.matrix.Matrix3d
                  extended by maspack.matrix.Matrix3x3Block
All Implemented Interfaces:
java.io.Serializable, java.lang.Cloneable, DenseMatrix, LinearTransformNd, Matrix, MatrixBlock, Clonable
Direct Known Subclasses:
Matrix3x3DiagBlock

public class Matrix3x3Block
extends Matrix3d
implements MatrixBlock

Implements a 3 x 3 matrix block using a single Matrix3d object.

See Also:
Serialized Form

Nested Class Summary
 
Nested classes/interfaces inherited from interface maspack.matrix.Matrix
Matrix.Partition, Matrix.WriteFormat
 
Field Summary
 
Fields inherited from class maspack.matrix.Matrix3d
IDENTITY, ZERO
 
Fields inherited from class maspack.matrix.Matrix3dBase
m00, m01, m02, m10, m11, m12, m20, m21, m22
 
Fields inherited from interface maspack.matrix.Matrix
INDEFINITE, POSITIVE_DEFINITE, SPD, SYMMETRIC
 
Constructor Summary
Matrix3x3Block()
          Creates a new Matrix3x3Block.
 
Method Summary
 void add(Matrix M)
          Adds the contents of a Matrix to this matrix block.
 void addNumNonZerosByCol(int[] offsets, int idx, Matrix.Partition part)
          Adds the number of non-zero entries in each column of this block matrix to the current values stored in the array offsets, starting at the location specified by idx.
 void addNumNonZerosByRow(int[] offsets, int idx, Matrix.Partition part)
          Adds the number of non-zero entries in each row of this block matrix to the current values stored in the array offsets, starting at the location specified by idx.
 Matrix3x3Block clone()
          Creates a clone of this matrix block, with the link and offset information set to be undefined.
 MatrixBlock down()
          Returns the next matrix block in a block matrix column.
 int getBlockCCSIndices(int[] rowIdxs, int rowOff, int[] offsets, Matrix.Partition part)
          
 int getBlockCCSValues(double[] vals, int[] offsets, Matrix.Partition part)
          Stores the values of non-zero entries for this matrix block.
 int getBlockCol()
          Gets the number of the block column of this matrix block within a SparseBlockMatrix.
 int getBlockCRSIndices(int[] colIdxs, int colOff, int[] offsets, Matrix.Partition part)
          Stores the column indices of the non-zero entries for this matrix block.
 int getBlockCRSValues(double[] vals, int[] offsets, Matrix.Partition part)
          Stores the values of non-zero entries for this matrix block.
 int getBlockNumber()
          Gets the number of this block within a SparseBlockMatrix.
 int getBlockRow()
          Gets the number of the block row of this matrix block within a SparseBlockMatrix.
 void mulAdd(double[] y, int yIdx, double[] x, int xIdx)
          Pre-multiplies a column vector by this matrix block and adds the result to a set of existing values.
 void mulTransposeAdd(double[] y, int yIdx, double[] x, int xIdx)
          Post-multiplies a row vector by this matrix block and adds the result to a set of existing values.
 MatrixBlock next()
          Returns the next matrix block in a block matrix row.
 void scaledAdd(double s, Matrix M)
          Adds the scaled contents of a Matrix to this matrix block.
 void setBlockCol(int blkCol)
          Sets the number of the block column of this matrix block within a SparseBlockMatrix.
 void setBlockNumber(int num)
          Sets the number of this block within a SparseBlockMatrix.
 void setBlockRow(int blkRow)
          Sets the number of the block row of this matrix block within a SparseBlockMatrix.
 void setDown(MatrixBlock blk)
          Sets the next matrix block in a block matrix column.
 void setNext(MatrixBlock blk)
          Sets the next matrix block in a block matrix row.
 void sub(Matrix M)
          Subtract the contents of a Matrix from this matrix block.
 boolean valueIsNonZero(int i, int j)
          Returns true if the value at the specified location is structurally non-zero.
 
Methods inherited from class maspack.matrix.Matrix3d
add, add, addOuterProduct, addOuterProduct, addScaledOuterProduct, crossProduct, crossProduct, factorQR, fastInvert, inverseTransform, inverseTransform, invert, invert, main, mul, mul, mulDiagonalLeft, mulDiagonalLeft, mulDiagonalRight, mulDiagonalRight, mulInverse, mulInverseBoth, mulInverseLeft, mulInverseRight, mulTranspose, mulTransposeBoth, mulTransposeLeft, mulTransposeRight, negate, outerProduct, permuteColumns, permuteColumns, permuteRows, permuteRows, scale, scale, scaledAdd, scaledAdd, scaledAdd, set, setColumns, setDiagonal, setDiagonal, setDiagonal, setRandom, setRandom, setRandom, setRows, setSkewSymmetric, setSymmetric, setZero, sub, sub, transform, transform, transpose
 
Methods inherited from class maspack.matrix.Matrix3dBase
colSize, determinant, epsilonEquals, equals, factorQR, frobeniusNorm, get, get, getColumn, getColumn, getColumn, getRow, getRow, getRow, infinityNorm, isIdentity, mul, mul, mul, mulAdd, mulInverse, mulInverse, mulInverseTranspose, mulInverseTranspose, mulTranspose, mulTranspose, mulTransposeAdd, negate, oneNorm, orthogonalDeterminant, rowSize, set, set, set, set, setColumn, setColumn, setIdentity, setRow, setRow, trace, transpose
 
Methods inherited from class maspack.matrix.DenseMatrixBase
add, checkConsistency, set, set, set, setCCSValues, setColumn, setCRSValues, setRow, setSubMatrix
 
Methods inherited from class maspack.matrix.MatrixBase
containsNaN, epsilonEquals, equals, get, getCCSIndices, getCCSIndices, getCCSValues, getCCSValues, getColumn, getCRSIndices, getCRSIndices, getCRSValues, getCRSValues, getDefaultFormat, getRow, getSize, getSubMatrix, hasNaN, idString, isFixedSize, isSymmetric, mul, mul, mulAdd, mulAdd, mulAdd, mulTranspose, mulTranspose, mulTranspose, mulTransposeAdd, mulTransposeAdd, mulTransposeAdd, numNonZeroVals, numNonZeroVals, scan, setCRSValues, setDefaultFormat, setSize, toString, toString, toString, write, write, write, write, write, writeToFile
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
 
Methods inherited from interface maspack.matrix.MatrixBlock
scale, setZero
 
Methods inherited from interface maspack.matrix.DenseMatrix
set, set, set, setColumn, setColumn, setRow, setRow, setSubMatrix
 
Methods inherited from interface maspack.matrix.Matrix
checkConsistency, colSize, determinant, epsilonEquals, equals, frobeniusNorm, get, get, getCCSIndices, getCCSIndices, getCCSValues, getCCSValues, getColumn, getColumn, getColumn, getCRSIndices, getCRSIndices, getCRSValues, getCRSValues, getRow, getRow, getRow, getSize, getSubMatrix, infinityNorm, isFixedSize, isSymmetric, mul, mul, mul, mulAdd, mulAdd, mulAdd, mulTranspose, mulTranspose, mulTranspose, mulTransposeAdd, mulTransposeAdd, mulTransposeAdd, numNonZeroVals, numNonZeroVals, oneNorm, rowSize, scan, set, set, setCCSValues, setCRSValues, setSize, toString, trace, write, write, write
 

Constructor Detail

Matrix3x3Block

public Matrix3x3Block()
Creates a new Matrix3x3Block.

Method Detail

next

public MatrixBlock next()
Returns the next matrix block in a block matrix row.

Specified by:
next in interface MatrixBlock
Returns:
next matrix block in a row

setNext

public void setNext(MatrixBlock blk)
Sets the next matrix block in a block matrix row. Reserved for use by maspack.matrix.

Specified by:
setNext in interface MatrixBlock
Parameters:
blk - next matrix block in a row

down

public MatrixBlock down()
Returns the next matrix block in a block matrix column.

Specified by:
down in interface MatrixBlock
Returns:
next matrix block in a column

setDown

public void setDown(MatrixBlock blk)
Sets the next matrix block in a block matrix column. Reserved for use by maspack.matrix.

Specified by:
setDown in interface MatrixBlock
Parameters:
blk - next matrix block in a column

getBlockRow

public int getBlockRow()
Gets the number of the block row of this matrix block within a SparseBlockMatrix.

Specified by:
getBlockRow in interface MatrixBlock
Returns:
block row number for this block

setBlockRow

public void setBlockRow(int blkRow)
Sets the number of the block row of this matrix block within a SparseBlockMatrix. Use of this method is reserved to maspack.matrix.

Specified by:
setBlockRow in interface MatrixBlock
Parameters:
blkRow - row number for this block

getBlockCol

public int getBlockCol()
Gets the number of the block column of this matrix block within a SparseBlockMatrix.

Specified by:
getBlockCol in interface MatrixBlock
Returns:
block column number for this block

setBlockCol

public void setBlockCol(int blkCol)
Sets the number of the block column of this matrix block within a SparseBlockMatrix. Use of this method is reserved to maspack.matrix.

Specified by:
setBlockCol in interface MatrixBlock
Parameters:
blkCol - column number for this block

getBlockNumber

public int getBlockNumber()
Gets the number of this block within a SparseBlockMatrix. Block numbers are used for fast access. If the block does not belong to a SparseBlockMatrix, then -1 is returned.

Specified by:
getBlockNumber in interface MatrixBlock
Returns:
number for this block

setBlockNumber

public void setBlockNumber(int num)
Sets the number of this block within a SparseBlockMatrix. Use of this method is reserved to maspack.matrix.

Specified by:
setBlockNumber in interface MatrixBlock
Parameters:
num - number for this block

mulAdd

public void mulAdd(double[] y,
                   int yIdx,
                   double[] x,
                   int xIdx)
Pre-multiplies a column vector by this matrix block and adds the result to a set of existing values. The column vector values are supplied by the argument x, starting at location xIdx, and the result is added to values in y, starting at location yIdx.

Specified by:
mulAdd in interface MatrixBlock
Parameters:
y - accumulates resulting values
yIdx - starting index for accumulating values
x - supplies column vector values
xIdx - starting index for column vector values

mulTransposeAdd

public void mulTransposeAdd(double[] y,
                            int yIdx,
                            double[] x,
                            int xIdx)
Post-multiplies a row vector by this matrix block and adds the result to a set of existing values. The row vector values are supplied by the argument x, starting at location xIdx, and the result is added to values in y, starting at location yIdx.

Specified by:
mulTransposeAdd in interface MatrixBlock
Parameters:
y - accumulates resulting values
yIdx - starting index for accumulating values
x - supplies row vector values
xIdx - starting index for row vector values

add

public void add(Matrix M)
Adds the contents of a Matrix to this matrix block.

Specified by:
add in interface MatrixBlock
Parameters:
M - matrix to add

scaledAdd

public void scaledAdd(double s,
                      Matrix M)
Adds the scaled contents of a Matrix to this matrix block.

Specified by:
scaledAdd in interface MatrixBlock
Parameters:
s - scaling factor
M - matrix to add

sub

public void sub(Matrix M)
Subtract the contents of a Matrix from this matrix block.

Specified by:
sub in interface MatrixBlock
Parameters:
M - matrix to subtract

getBlockCRSIndices

public int getBlockCRSIndices(int[] colIdxs,
                              int colOff,
                              int[] offsets,
                              Matrix.Partition part)
Stores the column indices of the non-zero entries for this matrix block. The indices for each row i are stored contiguously within the array colIdxs, starting at a location given by offsets[i]. Indices are 0-based. Upon return, offsets[i] should be incremented by the number of non-zero values in row i.

Specified by:
getBlockCRSIndices in interface MatrixBlock
Parameters:
colIdxs - stores column indices of non-zero entries
colOff - starting column index for the first column of this block
offsets - offsets within colIdxs for storing each row's indices; upon return, should be incremented by the number of non-zero entries in each row.
part - specifies whether to store column indices for the entire block or a specified sub-portion.
Returns:
number of non-zero entries

addNumNonZerosByRow

public void addNumNonZerosByRow(int[] offsets,
                                int idx,
                                Matrix.Partition part)
Adds the number of non-zero entries in each row of this block matrix to the current values stored in the array offsets, starting at the location specified by idx.

Specified by:
addNumNonZerosByRow in interface MatrixBlock
Parameters:
offsets - values to be incremented by the number of non-zero entries in each row
idx - starting location within offsets
part - specifies whether to consider the entire block or a specified sub-portion.

getBlockCCSIndices

public int getBlockCCSIndices(int[] rowIdxs,
                              int rowOff,
                              int[] offsets,
                              Matrix.Partition part)

Specified by:
getBlockCCSIndices in interface MatrixBlock
Parameters:
rowIdxs - stores row indices of non-zero entries
rowOff - starting row index for the first row of this block
offsets - offsets within rowIdxs for storing each column's indices; upon return, should be incremented by the number of non-zero entries in each column.
part - specifies whether to store row indices for the entire block or a specified sub-portion.
Returns:
number of non-zero entries

addNumNonZerosByCol

public void addNumNonZerosByCol(int[] offsets,
                                int idx,
                                Matrix.Partition part)
Adds the number of non-zero entries in each column of this block matrix to the current values stored in the array offsets, starting at the location specified by idx.

Specified by:
addNumNonZerosByCol in interface MatrixBlock
Parameters:
offsets - values to be incremented by the number of non-zero entries in each column
idx - starting location within offsets
part - specifies whether to consider the entire block or a specified sub-portion.

getBlockCRSValues

public int getBlockCRSValues(double[] vals,
                             int[] offsets,
                             Matrix.Partition part)
Stores the values of non-zero entries for this matrix block. The values for each row i are stored contiguously within the array vals, starting at a location given by offsets[i]. Upon return, offsets[i] should be incremented by the number of non-zero values in row i.

Specified by:
getBlockCRSValues in interface MatrixBlock
Parameters:
vals - stores values of non-zero entries
offsets - offsets within vals for storing each row's values; upon return, should be incremented by the number of non-zero entries in each row.
part - specifies whether to store the entire block or a specified sub-portion.
Returns:
number of non-zero entries

getBlockCCSValues

public int getBlockCCSValues(double[] vals,
                             int[] offsets,
                             Matrix.Partition part)
Stores the values of non-zero entries for this matrix block. The values for each column j are stored contiguously within the array vals, starting at a location given by offsets[j]. Upon return, offsets[j] should be incremented by the number of non-zero values in column j.

Specified by:
getBlockCCSValues in interface MatrixBlock
Parameters:
vals - stores values of non-zero entries
offsets - offsets within vals for storing each columns's values; upon return, should be incremented by the number of non-zero entries in each column.
part - specifies whether to store the entire block or a specified sub-portion.
Returns:
number of non-zero entries

valueIsNonZero

public boolean valueIsNonZero(int i,
                              int j)
Returns true if the value at the specified location is structurally non-zero. For dense blocks, this methid will always return true.

Specified by:
valueIsNonZero in interface MatrixBlock
Parameters:
i - row index
j - column index
Returns:
true if the value at (i,j) is structurally non-zero

clone

public Matrix3x3Block clone()
Creates a clone of this matrix block, with the link and offset information set to be undefined.

Specified by:
clone in interface MatrixBlock
Specified by:
clone in interface Clonable
Overrides:
clone in class Matrix3dBase
Returns:
clone of this MatrixBlock