46 #ifndef _PEXSI_SUPERLUMATRIX_IMPL_HPP_
47 #define _PEXSI_SUPERLUMATRIX_IMPL_HPP_
51 inline SuperLUMatrix<Real>::SuperLUMatrix ( )
57 inline SuperLUMatrix<Real>::SuperLUMatrix (
const SuperLUGrid<Real>& g,
const SuperLUOptions& opt )
59 ptrData =
new RealSuperLUData(g,opt);
62 inline SuperLUMatrix<Real>::~SuperLUMatrix ( )
71 inline SuperLUMatrix<Real>::SuperLUMatrix(
const SuperLUMatrix<Real> & g){
76 ptrData =
new RealSuperLUData(*g.ptrData);
80 inline SuperLUMatrix<Real> & SuperLUMatrix<Real>::operator = (
const SuperLUMatrix<Real> & g){
91 ptrData =
new RealSuperLUData(*g.ptrData);
103 SuperLUMatrix<Real>::Setup (
const SuperLUGrid<Real>& g,
const SuperLUOptions& opt )
106 ptrData =
new RealSuperLUData(g,opt);
116 inline Int SuperLUMatrix<Real>::m ( )
const
123 inline Int SuperLUMatrix<Real>::n ( )
const
131 ptrData->DistSparseMatrixToSuperMatrixNRloc(sparseA, opt );
139 ptrData->DestroyAOnly();
147 ptrData->SymbolicFactorize();
156 ptrData->Distribute();
165 ptrData->NumericalFactorize();
174 ptrData->ConvertNRlocToNC(AGlobal.ptrData);
182 ptrData->MultiplyGlobalMultiVector(xGlobal, bGlobal);
191 ptrData->DistributeGlobalMultiVector(xGlobal, xLocal );
199 ptrData->GatherDistributedMultiVector(xGlobal, xLocal );
208 ptrData->SolveDistMultiVector(bLocal, berr );
217 ptrData->CheckErrorDistMultiVector(xLocal, xTrueLocal );
226 ptrData->LUstructToPMatrix(PMloc);
236 ptrData->SymbolicToSuperNode(super);
245 inline SuperLUMatrix<Complex>::SuperLUMatrix ( )
251 inline SuperLUMatrix<Complex>::SuperLUMatrix (
const SuperLUGrid<Complex>& g,
const SuperLUOptions& opt )
253 ptrData =
new ComplexSuperLUData(g,opt);
256 inline SuperLUMatrix<Complex>::~SuperLUMatrix ( )
258 if( ptrData != NULL ){
264 inline SuperLUMatrix<Complex>::SuperLUMatrix(
const SuperLUMatrix<Complex> & g){
269 ptrData =
new ComplexSuperLUData(*g.ptrData);
273 inline SuperLUMatrix<Complex> & SuperLUMatrix<Complex>::operator = (
const SuperLUMatrix<Complex> & g){
284 ptrData =
new ComplexSuperLUData(*g.ptrData);
295 SuperLUMatrix<Complex>::Setup (
const SuperLUGrid<Complex>& g,
const SuperLUOptions& opt )
298 ptrData =
new ComplexSuperLUData(g,opt);
306 inline Int SuperLUMatrix<Complex>::m ( )
const
311 inline Int SuperLUMatrix<Complex>::n ( )
const
319 ptrData->DistSparseMatrixToSuperMatrixNRloc(sparseA, opt);
326 ptrData->DestroyAOnly();
334 ptrData->SymbolicFactorize();
342 ptrData->Distribute();
350 ptrData->NumericalFactorize();
358 ptrData->ConvertNRlocToNC(AGlobal.ptrData);
366 ptrData->MultiplyGlobalMultiVector(xGlobal, bGlobal);
374 ptrData->DistributeGlobalMultiVector(xGlobal, xLocal );
381 ptrData->GatherDistributedMultiVector(xGlobal, xLocal );
389 ptrData->SolveDistMultiVector(bLocal, berr );
397 ptrData->CheckErrorDistMultiVector(xLocal, xTrueLocal );
405 ptrData->LUstructToPMatrix(PMloc);
413 ptrData->SymbolicToSuperNode(super);
420 #endif //_PEXSI_SUPERLUMATRIX_IMPL_HPP_
void CheckErrorDistMultiVector(NumMat< T > &xLocal, NumMat< T > &xTrueLocal)
Prints out the error by direct comparison with the true solution in distributed format.
Definition: SuperLUMatrix.hpp:192
void SymbolicToSuperNode(SuperNodeType &super)
SymbolicToSuperNode converts the symbolic information to SuperNode structure in SelInv.
Definition: SuperLUMatrix.hpp:203
A thin interface for passing parameters to set the SuperLU options.
Definition: superlu_dist_internal.hpp:62
void DistSparseMatrixToSuperMatrixNRloc(DistSparseMatrix< T > &sparseA, const SuperLUOptions &options)
Convert a distributed sparse matrix in compressed sparse column format into the SuperLU compressed ro...
Definition: SuperLUMatrix.hpp:117
SuperNodeType describes mapping between supernode and column, the permutation information, and potentially the elimination tree (not implemented here).
Definition: pselinv.hpp:177
void DistributeGlobalMultiVector(NumMat< T > &xGlobal, NumMat< T > &xLocal)
DistributeGlobalMultiVector distributes a global multivector into a local multivector according to th...
Definition: SuperLUMatrix.hpp:175
void NumericalFactorize()
Performs LU factorization numerically.
Definition: SuperLUMatrix.hpp:154
void SymbolicFactorize()
Factorizes the superlu matrix symbolically.
Definition: SuperLUMatrix.hpp:139
void SolveDistMultiVector(NumMat< T > &bLocal, DblNumVec &berr)
Solve A x = b with b overwritten by x for distributed multivector.
Definition: SuperLUMatrix.hpp:184
An thin interface to keep the main code insulated from the source code of SuperLU.
Definition: SuperLUMatrix.hpp:75
void DestroyAOnly()
Releases the data in A but keeps other data, such as LUstruct.
Definition: SuperLUMatrix.hpp:128
void ConvertNRlocToNC(SuperLUMatrix< T > &AGlobal)
ConvertNRlocToNC converts a distributed compressed sparse row matrix to a global compressed sparse co...
Definition: SuperLUMatrix.hpp:160
Numerical matrix.
Definition: NumMat.hpp:61
void Distribute()
Distribute redistrbutes the SuperMatrix in parallel so that it is ready for the numerical factorizati...
Definition: SuperLUMatrix.hpp:146
void LUstructToPMatrix(PMatrix< T > &PMloc)
LUstructToPMatrix converts the data in LUstruct to PMatrix.
Definition: SuperLUMatrix.hpp:197
void MultiplyGlobalMultiVector(NumMat< T > &xGlobal, NumMat< T > &bGlobal)
MultiplyGlobalMultiVector computes b = A * x.
Definition: SuperLUMatrix.hpp:168