46 #ifndef _PEXSI_SUPERLUMATRIX_IMPL_HPP_
47 #define _PEXSI_SUPERLUMATRIX_IMPL_HPP_
51 inline SuperLUMatrix<Real>::SuperLUMatrix ( )
54 PushCallStack(
"SuperLUMatrix<Real>::SuperLUMatrix");
63 inline SuperLUMatrix<Real>::SuperLUMatrix (
const SuperLUGrid<Real>& g,
const SuperLUOptions& opt )
66 PushCallStack(
"SuperLUMatrix<Real>::SuperLUMatrix");
68 ptrData =
new RealSuperLUData(g,opt);
74 inline SuperLUMatrix<Real>::~SuperLUMatrix ( )
77 PushCallStack(
"SuperLUMatrix<Real>::~SuperLUMatrix");
87 SuperLUMatrix<Real>::Setup (
const SuperLUGrid<Real>& g,
const SuperLUOptions& opt )
90 PushCallStack(
"SuperLUMatrix<Real>::Setup");
92 if( ptrData == NULL ){
93 ptrData =
new RealSuperLUData(g,opt);
96 throw std::logic_error(
"SuperLUMatrix has been set up before.");
106 inline Int SuperLUMatrix<Real>::m ( )
const
113 inline Int SuperLUMatrix<Real>::n ( )
const
122 PushCallStack(
"SuperLUMatrix<Real>::DistSparseMatrixToSuperMatrixNRloc" );
124 ptrData->DistSparseMatrixToSuperMatrixNRloc(sparseA );
136 PushCallStack(
"SuperLUMatrix<Real>::DestroyAOnly");
138 ptrData->DestroyAOnly();
150 PushCallStack(
"SuperLUMatrix<Real>::SymbolicFactorize");
152 ptrData->SymbolicFactorize();
165 PushCallStack(
"SuperLUMatrix<Real>::Distribute");
167 ptrData->Distribute();
180 PushCallStack(
"SuperLUMatrix<Real>::NumericalFactorize");
182 ptrData->NumericalFactorize();
195 PushCallStack(
"SuperLUMatrix<Real>::ConvertNRlocToNC");
197 ptrData->ConvertNRlocToNC(AGlobal.ptrData);
209 PushCallStack(
"SuperLUMatrix<Real>::MultiplyGlobalMultiVector");
211 ptrData->MultiplyGlobalMultiVector(xGlobal, bGlobal);
224 PushCallStack(
"SuperLUMatrix<Real>::DistributeGlobalMultiVector");
226 ptrData->DistributeGlobalMultiVector(xGlobal, xLocal );
238 PushCallStack(
"SuperLUMatrix<Real>::GatherDistributedMultiVector");
240 ptrData->GatherDistributedMultiVector(xGlobal, xLocal );
253 PushCallStack(
"SuperLUMatrix<Real>::SolveDistMultiVector");
255 ptrData->SolveDistMultiVector(bLocal, berr );
268 PushCallStack(
"SuperLUMatrix<Real>::CheckErrorDistMultiVector");
270 ptrData->CheckErrorDistMultiVector(xLocal, xTrueLocal );
283 PushCallStack(
"SuperLUMatrix<Real>::LUstructToPMatrix");
285 ptrData->LUstructToPMatrix(PMloc);
299 PushCallStack(
"SuperLUMatrix<Real>::SymbolicToSuperNode");
301 ptrData->SymbolicToSuperNode(super);
313 inline SuperLUMatrix<Complex>::SuperLUMatrix ( )
316 PushCallStack(
"SuperLUMatrix<Complex>::SuperLUMatrix");
325 inline SuperLUMatrix<Complex>::SuperLUMatrix (
const SuperLUGrid<Complex>& g,
const SuperLUOptions& opt )
328 PushCallStack(
"SuperLUMatrix<Complex>::SuperLUMatrix");
330 ptrData =
new ComplexSuperLUData(g,opt);
336 inline SuperLUMatrix<Complex>::~SuperLUMatrix ( )
339 PushCallStack(
"SuperLUMatrix<Complex>::~SuperLUMatrix");
341 if( ptrData != NULL )
350 SuperLUMatrix<Complex>::Setup (
const SuperLUGrid<Complex>& g,
const SuperLUOptions& opt )
353 PushCallStack(
"SuperLUMatrix<Complex>::Setup");
355 if( ptrData == NULL ){
356 ptrData =
new ComplexSuperLUData(g,opt);
359 throw std::logic_error(
"SuperLUMatrix has been set up before.");
367 inline Int SuperLUMatrix<Complex>::m ( )
const
372 inline Int SuperLUMatrix<Complex>::n ( )
const
381 PushCallStack(
"SuperLUMatrix<Complex>::DistSparseMatrixToSuperMatrixNRloc" );
383 ptrData->DistSparseMatrixToSuperMatrixNRloc(sparseA );
394 PushCallStack(
"SuperLUMatrix<Complex>::DestroyAOnly");
396 ptrData->DestroyAOnly();
408 PushCallStack(
"SuperLUMatrix<Complex>::SymbolicFactorize");
410 ptrData->SymbolicFactorize();
422 PushCallStack(
"SuperLUMatrix<Complex>::Distribute");
424 ptrData->Distribute();
436 PushCallStack(
"SuperLUMatrix<Complex>::NumericalFactorize");
438 ptrData->NumericalFactorize();
450 PushCallStack(
"SuperLUMatrix<Complex>::ConvertNRlocToNC");
452 ptrData->ConvertNRlocToNC(AGlobal.ptrData);
464 PushCallStack(
"SuperLUMatrix<Complex>::MultiplyGlobalMultiVector");
466 ptrData->MultiplyGlobalMultiVector(xGlobal, bGlobal);
478 PushCallStack(
"SuperLUMatrix<Complex>::DistributeGlobalMultiVector");
480 ptrData->DistributeGlobalMultiVector(xGlobal, xLocal );
491 PushCallStack(
"SuperLUMatrix<Complex>::GatherDistributedMultiVector");
493 ptrData->GatherDistributedMultiVector(xGlobal, xLocal );
505 PushCallStack(
"SuperLUMatrix<Complex>::SolveDistMultiVector");
507 ptrData->SolveDistMultiVector(bLocal, berr );
519 PushCallStack(
"SuperLUMatrix<Complex>::CheckErrorDistMultiVector");
521 ptrData->CheckErrorDistMultiVector(xLocal, xTrueLocal );
533 PushCallStack(
"SuperLUMatrix<Complex>::LUstructToPMatrix");
535 ptrData->LUstructToPMatrix(PMloc);
547 PushCallStack(
"SuperLUMatrix<Complex>::SymbolicToSuperNode");
549 ptrData->SymbolicToSuperNode(super);
559 #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:221
void SymbolicToSuperNode(SuperNodeType &super)
SymbolicToSuperNode converts the symbolic information to SuperNode structure in SelInv.
Definition: SuperLUMatrix.hpp:232
SuperNodeType describes mapping between supernode and column, the permutation information, and potentially the elimination tree (not implemented here).
Definition: pselinv.hpp:122
void DistributeGlobalMultiVector(NumMat< T > &xGlobal, NumMat< T > &xLocal)
DistributeGlobalMultiVector distributes a global multivector into a local multivector according to th...
Definition: SuperLUMatrix.hpp:204
void NumericalFactorize()
Performs LU factorization numerically.
Definition: SuperLUMatrix.hpp:183
void SymbolicFactorize()
Factorizes the superlu matrix symbolically.
Definition: SuperLUMatrix.hpp:168
void SolveDistMultiVector(NumMat< T > &bLocal, DblNumVec &berr)
Solve A x = b with b overwritten by x for distributed multivector.
Definition: SuperLUMatrix.hpp:213
An thin interface to keep the main code insulated from the source code of SuperLU.
Definition: SuperLUMatrix.hpp:108
void DestroyAOnly()
Releases the data in A but keeps other data, such as LUstruct.
Definition: SuperLUMatrix.hpp:157
void ConvertNRlocToNC(SuperLUMatrix< T > &AGlobal)
ConvertNRlocToNC converts a distributed compressed sparse row matrix to a global compressed sparse co...
Definition: SuperLUMatrix.hpp:189
Numerical matrix.
Definition: NumMat.hpp:61
void DistSparseMatrixToSuperMatrixNRloc(DistSparseMatrix< T > &sparseA)
Convert a distributed sparse matrix in compressed sparse column format into the SuperLU compressed ro...
Definition: SuperLUMatrix.hpp:146
void Distribute()
Distribute redistrbutes the SuperMatrix in parallel so that it is ready for the numerical factorizati...
Definition: SuperLUMatrix.hpp:175
void LUstructToPMatrix(PMatrix< T > &PMloc)
LUstructToPMatrix converts the data in LUstruct to PMatrix.
Definition: SuperLUMatrix.hpp:226
void MultiplyGlobalMultiVector(NumMat< T > &xGlobal, NumMat< T > &bGlobal)
MultiplyGlobalMultiVector computes b = A * x.
Definition: SuperLUMatrix.hpp:197