ProfileSPDDirectSkypack

#include <system_of_eqn/linearSOE/profileSPD/ProfileSPDLinDirectSkypackSolver.h>

class ProfileSPDLinDirectSkypackSolver: public LinearSOESolver

A ProfileSPDLinDirectSkypackSolver object can be constructed to solve a ProfileSPDLinSOE object. It does this by direct means using the routines supplied in the SKYPACK library, a library which uses the BLAS levels 1,2 and 3 for the factorization and substitution.

The routines in SKYPACK require a number of work areas: int block[3\[ * and *double invD\[size\] . In addition, to allow the use of the BLAS 2 and 3, work areas double rw[mRows x mCols\[ *, *double tw\[mRows x mRows\] and int index[max(mCols,mRows)$$ are created.

A unique class tag (defined in <classTags.h>) is passed to the ProfileSPDLinSolver constructor. Sets mCols and mRows equal to \(0\) and does not try and allocate any memory for the work arrays.

A unique class tag (defined in <classTags.h>) is passed to the ProfileSPDLinSolver constructor. Sets mCols and mRows and allocates space in memory for the work arrays rw, tw and index. If not enough memory is available in memory, mCols and mRows is set equal to \(0\) and an error message is printed.


Invokes delete on any work areas that have been constructed.


The solver first copies the B vector into X and then solves the BandSPDLinSOE system. If the matrix has not been factored, the matrix is first factored using the SKYPACK routine skysf2(), if mCols and mRows equal \(0\), or skypf2(). skysf2() is a routine which uses the BLAS level 1 routines, skypf2() is a routine which uses BLAS levels 2 and 3. If skypf2() has been called, invD is set up. Once the matrix has been factored, skyss() is called. If the solution is successfully obtained, i.e. the skyss() routine returns \(0\) in the INFO argument, \(0\) is returned, otherwise it prints a warning message and returns INFO. The solve process changes \(A\) and \(X\).

Is responsible for setting the block information required by the SKYPACK routines (block[0\[ =1; block\[1\] =size, block[2$$ =1) and for creating space for the invD work array. Returns \(0\) if successful, otherwise a warning message is printed and a \(-1\) is returned.

Does nothing but return \(0\).

Does nothing but return \(0\).