46 #ifndef _PEXSI_PSELINV_UNSYM_HPP_
47 #define _PEXSI_PSELINV_UNSYM_HPP_
75 bool LBlockEqualComparator(
const LBlock<T> & a,
const LBlock<T> & b){
76 return a.blockIdx==b.blockIdx;
79 bool LBlockComparator(
const LBlock<T> & a,
const LBlock<T> & b){
80 return a.blockIdx<b.blockIdx;
84 bool UBlockComparator(
const UBlock<T> & a,
const UBlock<T> & b){
85 return a.blockIdx<b.blockIdx;
157 class PMatrixUnsym:
public PMatrix<T>{
165 std::vector<std::vector<UBlock<T> > > Ucol_;
166 std::vector<std::vector<LBlock<T> > > Lrow_;
168 std::vector<Int > UcolSize_;
169 std::vector<Int > LrowSize_;
176 SELINV_TAG_U_CONTENT,
178 SELINV_TAG_L_CONTENT,
179 SELINV_TAG_UCOL_SIZE,
180 SELINV_TAG_UCOL_CONTENT,
181 SELINV_TAG_LROW_SIZE,
182 SELINV_TAG_LROW_CONTENT,
186 SELINV_TAG_D_CONTENT,
188 SELINV_TAG_U_SIZE_CD,
189 SELINV_TAG_U_CONTENT_CD,
190 SELINV_TAG_L_SIZE_CD,
191 SELINV_TAG_L_CONTENT_CD,
200 std::vector<Int> ColLocalPtr;
201 std::vector<Int> BlockIdxLocalU;
202 std::vector<char> SstrLrowSend;
203 std::vector<char> SstrUcolSend;
204 std::vector<char> SstrLrowRecv;
205 std::vector<char> SstrUcolRecv;
206 Int SizeSstrLrowSend;
207 Int SizeSstrUcolSend;
208 Int SizeSstrLrowRecv;
209 Int SizeSstrUcolRecv;
238 std::vector<SuperNodeBufferTypeUnsym > & arrSuperNodes,
243 inline void SendRecvSizesCD(std::vector<Int > & arrSuperNodes, Int stepSuper,
CDBuffers & buffers);
244 inline void IRecvContentCD( std::vector<Int > & arrSuperNodes, Int stepSuper,
CDBuffers & buffers);
245 inline void WaitContentLCD( std::vector<Int > & arrSuperNodes, Int stepSuper,
CDBuffers & buffers);
246 inline void WaitContentUCD( std::vector<Int > & arrSuperNodes, Int stepSuper,
CDBuffers & buffers);
277 std::vector<LBlock<T> >&
Lrow( Int iLocal ) {
return Lrow_[iLocal]; }
281 std::vector<UBlock<T> >&
Ucol( Int jLocal ) {
return Ucol_[jLocal]; }
457 #endif //_PEXSI_PSELINV_UNSYM_HPP_
void UnpackData(SuperNodeBufferTypeUnsym &snode, std::vector< LBlock< T > > &LcolRecv, std::vector< LBlock< T > > &LrowRecv, std::vector< UBlock< T > > &UcolRecv, std::vector< UBlock< T > > &UrowRecv)
UnpackData.
Definition: pselinv_unsym_impl.hpp:1727
void SelInvIntra_P2p(Int lidx)
SelInvIntra_P2p.
Definition: pselinv_unsym_impl.hpp:1925
A thin interface for passing parameters to set the SuperLU options.
Definition: superlu_dist_internal.hpp:62
void ComputeDiagUpdate(SuperNodeBufferTypeUnsym &snode)
ComputeDiagUpdate.
Definition: pselinv_unsym_impl.hpp:1862
SuperNodeType describes mapping between supernode and column, the permutation information, and potentially the elimination tree (not implemented here).
Definition: pselinv.hpp:165
Interface with SuperLU_Dist (version 3.0 and later)
Thin interface to LAPACK.
void SelInv_lookup_indexes(SuperNodeBufferTypeUnsym &snode, std::vector< LBlock< T > > &LcolRecv, std::vector< LBlock< T > > &LrowRecv, std::vector< UBlock< T > > &UcolRecv, std::vector< UBlock< T > > &UrowRecv, NumMat< T > &AinvBuf, NumMat< T > &LBuf, NumMat< T > &UBuf)
SelInv_lookup_indexes.
Definition: pselinv_unsym_impl.hpp:112
Main file for parallel selected inversion.
Definition: pselinv.hpp:598
Definition: pselinv_unsym_impl.hpp:434
LBlock stores a nonzero block in the lower triangular part or the diagonal part in PSelInv...
Definition: pselinv.hpp:181
Sparse matrix and Distributed sparse matrix in compressed column format.
GridType is the PSelInv way of defining the grid.
Definition: pselinv.hpp:128
Interface with MPI to facilitate communication.
std::vector< LBlock< T > > & Lrow(Int iLocal)
NumBlockL returns the number of nonzero L blocks for the local block column jLocal.
Definition: pselinv_unsym.hpp:277
Various utility subroutines.
virtual void ConstructCommunicationPattern()
ConstructCommunicationPattern constructs the communication pattern to be used later in the selected i...
Definition: pselinv_unsym_impl.hpp:3557
Implementation of the parallel SelInv.
UBlock stores a nonzero block in the upper triangular part in PSelInv.
Definition: pselinv.hpp:233
Definition: pselinv_unsym.hpp:198
PMatrix contains the main data structure and the computational routine for the parallel selected inve...
Definition: ngchol_interf.hpp:57
void SendRecvCD(std::vector< SuperNodeBufferTypeUnsym > &arrSuperNodes, Int stepSuper)
SendRecvCD_UpdateU.
Definition: pselinv_unsym_impl.hpp:1124
std::vector< UBlock< T > > & Ucol(Int jLocal)
Ucol returns the vector of nonzero U blocks for the local block col jLocal.
Definition: pselinv_unsym.hpp:281
virtual void SelInv()
SelInv is the main function for the selected inversion.
Definition: pselinv_unsym_impl.hpp:3258
void ConstructCommunicationPattern_P2p()
ConstructCommunicationPattern_P2p constructs the communication pattern to be used later in the select...
Definition: pselinv_unsym_impl.hpp:3565
A thin interface for passing parameters to set the PSelInv options.
Definition: pselinv.hpp:101
virtual void PreSelInv()
PreSelInv prepares the structure in L_ and U_ so that SelInv only involves matrix-matrix multiplicati...
Definition: pselinv_unsym_impl.hpp:3306
void SelInv_P2p()
Point-to-point version of the selected inversion.
Definition: pselinv_unsym_impl.hpp:3264
PMatrixUnsym contains the main data structure and the computational routine for the parallel selected...
Definition: pselinv.hpp:978