DFT-FE 1.1.0-pre
Density Functional Theory With Finite-Elements
Loading...
Searching...
No Matches
dftfe::MultiVectorPoissonLinearSolverProblem< memorySpace > Class Template Reference

#include <MultiVectorPoissonLinearSolverProblem.h>

Inheritance diagram for dftfe::MultiVectorPoissonLinearSolverProblem< memorySpace >:
dftfe::MultiVectorLinearSolverProblem< memorySpace >

Public Member Functions

 MultiVectorPoissonLinearSolverProblem (const MPI_Comm &mpi_comm_parent, const MPI_Comm &mpi_comm_domain)
 
 ~MultiVectorPoissonLinearSolverProblem ()
 
void reinit (std::shared_ptr< dftfe::linearAlgebra::BLASWrapper< memorySpace > > BLASWrapperPtr, std::shared_ptr< dftfe::basis::FEBasisOperations< double, double, memorySpace > > basisOperationsPtr, const dealii::AffineConstraints< double > &constraintMatrix, const unsigned int matrixFreeVectorComponent, const unsigned int matrixFreeQuadratureComponentRhs, const unsigned int matrixFreeQuadratureComponentAX, bool isComputeMeanValueConstraint)
 
dftfe::linearAlgebra::MultiVector< double, memorySpace > & computeRhs (dftfe::linearAlgebra::MultiVector< double, memorySpace > &NDBCVec, dftfe::linearAlgebra::MultiVector< double, memorySpace > &outputVec, unsigned int blockSizeInput) override
 Compute right hand side vector for the problem Ax = rhs.
 
void vmult (dftfe::linearAlgebra::MultiVector< double, memorySpace > &Ax, dftfe::linearAlgebra::MultiVector< double, memorySpace > &x, unsigned int blockSize) override
 Compute A matrix multipled by x.
 
void distributeX () override
 Apply the constraints to the solution vector.
 
void precondition_Jacobi (dftfe::linearAlgebra::MultiVector< double, memorySpace > &dst, const dftfe::linearAlgebra::MultiVector< double, memorySpace > &src, const double omega) const override
 Jacobi preconditioning function.
 
void precondition_JacobiSqrt (dftfe::linearAlgebra::MultiVector< double, memorySpace > &dst, const dftfe::linearAlgebra::MultiVector< double, memorySpace > &src, const double omega) const override
 Apply square-root of the Jacobi preconditioner function.
 
void setDataForRhsVec (dftfe::utils::MemoryStorage< double, memorySpace > &inputQuadData)
 function to set data for Rhs Vec.
 
void clear ()
 

Private Member Functions

void tempRhsVecCalc (dftfe::linearAlgebra::MultiVector< double, memorySpace > &rhs)
 
void preComputeShapeFunction ()
 
void computeDiagonalA ()
 
void computeMeanValueConstraint ()
 

Private Attributes

bool d_isComputeDiagonalA
 
bool d_isMeanValueConstraintComputed
 
const dealii::AffineConstraints< double > * d_constraintMatrixPtr
 pointer to dealii dealii::AffineConstraints<double> object
 
dftfe::linearAlgebra::MultiVector< double, memorySpace > * d_blockedXPtr
 
dftfe::linearAlgebra::MultiVector< double, memorySpace > * d_blockedNDBCPtr
 
dftfe::linearAlgebra::MultiVector< double, memorySpace > d_rhsVec
 
unsigned int d_matrixFreeQuadratureComponentRhs
 
unsigned int d_matrixFreeVectorComponent
 
unsigned int d_blockSize
 
dftfe::utils::MemoryStorage< double, memorySpace > d_diagonalA
 
dftfe::utils::MemoryStorage< double, memorySpace > d_diagonalSqrtA
 
std::shared_ptr< dftfe::linearAlgebra::BLASWrapper< memorySpace > > d_BLASWrapperPtr
 
std::shared_ptr< dftfe::basis::FEBasisOperations< double, double, memorySpace > > d_basisOperationsPtr
 
const dealii::MatrixFree< 3, double > * d_matrixFreeDataPtr
 pointer to dealii MatrixFree object
 
const dftfe::utils::MemoryStorage< double, memorySpace > * d_cellStiffnessMatrixPtr
 
dftUtils::constraintMatrixInfo< memorySpace > d_constraintsInfo
 
const MPI_Comm mpi_communicator
 data members for the mpi implementation
 
const MPI_Comm d_mpi_parent
 
const unsigned int n_mpi_processes
 
const unsigned int this_mpi_process
 
dealii::ConditionalOStream pcout
 
size_type d_locallyOwnedSize
 
size_type d_numberDofsPerElement
 
size_type d_numCells
 
size_type d_inc
 
double d_negScalarCoeffAlpha
 
double d_scalarCoeffAlpha
 
double d_beta
 
double d_alpha
 
char d_transA
 
char d_transB
 
dftfe::utils::MemoryStorage< dftfe::global_size_type, memorySpace > d_mapNodeIdToProcId
 
dftfe::utils::MemoryStorage< dftfe::global_size_type, memorySpace > d_mapQuadIdToProcId
 
dftfe::utils::MemoryStorage< double, memorySpace > d_xCellLLevelNodalData
 
dftfe::utils::MemoryStorage< double, memorySpace > d_AxCellLLevelNodalData
 
dftfe::utils::MemoryStorage< double, memorySpace > * d_rhsQuadDataPtr
 
unsigned int d_matrixFreeQuadratureComponentAX
 
unsigned int d_nQuadsPerCell
 
const dealii::DoFHandler< 3 > * d_dofHandler
 
std::vector< double > d_cellShapeFunctionGradientIntegral
 finite-element cell level matrix to store dot product between shapeFunction gradients (\int(\nabla N_i \cdot \nabla N_j)) with first dimension traversing the macro cell id and second dimension storing the matrix of size numberNodesPerElement x numberNodesPerElement in a flattened 1D dealii Vectorized array
 
std::vector< double > d_cellShapeFunctionJxW
 finite-element cell level matrix to store dot product between shapeFunction gradients (\int(\nabla N_i )) with first dimension traversing the macro cell id and second dimension storing the matrix of size numberNodesPerElement in a flattened 1D dealii Vectorized array
 
std::vector< double > d_shapeFunctionValue
 storage for shapefunctions
 
unsigned int d_cellBlockSize
 

Constructor & Destructor Documentation

◆ MultiVectorPoissonLinearSolverProblem()

template<dftfe::utils::MemorySpace memorySpace>
dftfe::MultiVectorPoissonLinearSolverProblem< memorySpace >::MultiVectorPoissonLinearSolverProblem ( const MPI_Comm & mpi_comm_parent,
const MPI_Comm & mpi_comm_domain )

◆ ~MultiVectorPoissonLinearSolverProblem()

Member Function Documentation

◆ clear()

template<dftfe::utils::MemorySpace memorySpace>
void dftfe::MultiVectorPoissonLinearSolverProblem< memorySpace >::clear ( )

◆ computeDiagonalA()

template<dftfe::utils::MemorySpace memorySpace>
void dftfe::MultiVectorPoissonLinearSolverProblem< memorySpace >::computeDiagonalA ( )
private

◆ computeMeanValueConstraint()

template<dftfe::utils::MemorySpace memorySpace>
void dftfe::MultiVectorPoissonLinearSolverProblem< memorySpace >::computeMeanValueConstraint ( )
private

◆ computeRhs()

template<dftfe::utils::MemorySpace memorySpace>
dftfe::linearAlgebra::MultiVector< double, memorySpace > & dftfe::MultiVectorPoissonLinearSolverProblem< memorySpace >::computeRhs ( dftfe::linearAlgebra::MultiVector< double, memorySpace > & NDBCVec,
dftfe::linearAlgebra::MultiVector< double, memorySpace > & outputVec,
unsigned int blockSizeInput )
overridevirtual

Compute right hand side vector for the problem Ax = rhs.

Parameters
rhsvector for the right hand side values

Implements dftfe::MultiVectorLinearSolverProblem< memorySpace >.

◆ distributeX()

template<dftfe::utils::MemorySpace memorySpace>
void dftfe::MultiVectorPoissonLinearSolverProblem< memorySpace >::distributeX ( )
overridevirtual

Apply the constraints to the solution vector.

Implements dftfe::MultiVectorLinearSolverProblem< memorySpace >.

◆ preComputeShapeFunction()

template<dftfe::utils::MemorySpace memorySpace>
void dftfe::MultiVectorPoissonLinearSolverProblem< memorySpace >::preComputeShapeFunction ( )
private

◆ precondition_Jacobi()

template<dftfe::utils::MemorySpace memorySpace>
void dftfe::MultiVectorPoissonLinearSolverProblem< memorySpace >::precondition_Jacobi ( dftfe::linearAlgebra::MultiVector< double, memorySpace > & dst,
const dftfe::linearAlgebra::MultiVector< double, memorySpace > & src,
const double omega ) const
overridevirtual

Jacobi preconditioning function.

Implements dftfe::MultiVectorLinearSolverProblem< memorySpace >.

◆ precondition_JacobiSqrt()

template<dftfe::utils::MemorySpace memorySpace>
void dftfe::MultiVectorPoissonLinearSolverProblem< memorySpace >::precondition_JacobiSqrt ( dftfe::linearAlgebra::MultiVector< double, memorySpace > & dst,
const dftfe::linearAlgebra::MultiVector< double, memorySpace > & src,
const double omega ) const
overridevirtual

Apply square-root of the Jacobi preconditioner function.

Implements dftfe::MultiVectorLinearSolverProblem< memorySpace >.

◆ reinit()

template<dftfe::utils::MemorySpace memorySpace>
void dftfe::MultiVectorPoissonLinearSolverProblem< memorySpace >::reinit ( std::shared_ptr< dftfe::linearAlgebra::BLASWrapper< memorySpace > > BLASWrapperPtr,
std::shared_ptr< dftfe::basis::FEBasisOperations< double, double, memorySpace > > basisOperationsPtr,
const dealii::AffineConstraints< double > & constraintMatrix,
const unsigned int matrixFreeVectorComponent,
const unsigned int matrixFreeQuadratureComponentRhs,
const unsigned int matrixFreeQuadratureComponentAX,
bool isComputeMeanValueConstraint )

◆ setDataForRhsVec()

template<dftfe::utils::MemorySpace memorySpace>
void dftfe::MultiVectorPoissonLinearSolverProblem< memorySpace >::setDataForRhsVec ( dftfe::utils::MemoryStorage< double, memorySpace > & inputQuadData)

function to set data for Rhs Vec.

Parameters
[in]inputQuadDatathe value of the right hand side at the quad points

◆ tempRhsVecCalc()

template<dftfe::utils::MemorySpace memorySpace>
void dftfe::MultiVectorPoissonLinearSolverProblem< memorySpace >::tempRhsVecCalc ( dftfe::linearAlgebra::MultiVector< double, memorySpace > & rhs)
private

◆ vmult()

template<dftfe::utils::MemorySpace memorySpace>
void dftfe::MultiVectorPoissonLinearSolverProblem< memorySpace >::vmult ( dftfe::linearAlgebra::MultiVector< double, memorySpace > & Ax,
dftfe::linearAlgebra::MultiVector< double, memorySpace > & x,
unsigned int blockSize )
overridevirtual

Compute A matrix multipled by x.

Implements dftfe::MultiVectorLinearSolverProblem< memorySpace >.

Member Data Documentation

◆ d_alpha

template<dftfe::utils::MemorySpace memorySpace>
double dftfe::MultiVectorPoissonLinearSolverProblem< memorySpace >::d_alpha
private

◆ d_AxCellLLevelNodalData

template<dftfe::utils::MemorySpace memorySpace>
dftfe::utils::MemoryStorage<double, memorySpace> dftfe::MultiVectorPoissonLinearSolverProblem< memorySpace >::d_AxCellLLevelNodalData
private

◆ d_basisOperationsPtr

template<dftfe::utils::MemorySpace memorySpace>
std::shared_ptr< dftfe::basis::FEBasisOperations<double, double, memorySpace> > dftfe::MultiVectorPoissonLinearSolverProblem< memorySpace >::d_basisOperationsPtr
private

◆ d_beta

template<dftfe::utils::MemorySpace memorySpace>
double dftfe::MultiVectorPoissonLinearSolverProblem< memorySpace >::d_beta
private

◆ d_BLASWrapperPtr

template<dftfe::utils::MemorySpace memorySpace>
std::shared_ptr<dftfe::linearAlgebra::BLASWrapper<memorySpace> > dftfe::MultiVectorPoissonLinearSolverProblem< memorySpace >::d_BLASWrapperPtr
private

◆ d_blockedNDBCPtr

template<dftfe::utils::MemorySpace memorySpace>
dftfe::linearAlgebra::MultiVector<double, memorySpace> * dftfe::MultiVectorPoissonLinearSolverProblem< memorySpace >::d_blockedNDBCPtr
private

◆ d_blockedXPtr

template<dftfe::utils::MemorySpace memorySpace>
dftfe::linearAlgebra::MultiVector<double, memorySpace>* dftfe::MultiVectorPoissonLinearSolverProblem< memorySpace >::d_blockedXPtr
private

the vector that stores the output obtained by solving the poisson problem

◆ d_blockSize

template<dftfe::utils::MemorySpace memorySpace>
unsigned int dftfe::MultiVectorPoissonLinearSolverProblem< memorySpace >::d_blockSize
private

◆ d_cellBlockSize

template<dftfe::utils::MemorySpace memorySpace>
unsigned int dftfe::MultiVectorPoissonLinearSolverProblem< memorySpace >::d_cellBlockSize
private

◆ d_cellShapeFunctionGradientIntegral

template<dftfe::utils::MemorySpace memorySpace>
std::vector<double> dftfe::MultiVectorPoissonLinearSolverProblem< memorySpace >::d_cellShapeFunctionGradientIntegral
private

finite-element cell level matrix to store dot product between shapeFunction gradients (\int(\nabla N_i \cdot \nabla N_j)) with first dimension traversing the macro cell id and second dimension storing the matrix of size numberNodesPerElement x numberNodesPerElement in a flattened 1D dealii Vectorized array

◆ d_cellShapeFunctionJxW

template<dftfe::utils::MemorySpace memorySpace>
std::vector<double> dftfe::MultiVectorPoissonLinearSolverProblem< memorySpace >::d_cellShapeFunctionJxW
private

finite-element cell level matrix to store dot product between shapeFunction gradients (\int(\nabla N_i )) with first dimension traversing the macro cell id and second dimension storing the matrix of size numberNodesPerElement in a flattened 1D dealii Vectorized array

◆ d_cellStiffnessMatrixPtr

template<dftfe::utils::MemorySpace memorySpace>
const dftfe::utils::MemoryStorage<double, memorySpace>* dftfe::MultiVectorPoissonLinearSolverProblem< memorySpace >::d_cellStiffnessMatrixPtr
private

◆ d_constraintMatrixPtr

template<dftfe::utils::MemorySpace memorySpace>
const dealii::AffineConstraints<double>* dftfe::MultiVectorPoissonLinearSolverProblem< memorySpace >::d_constraintMatrixPtr
private

pointer to dealii dealii::AffineConstraints<double> object

◆ d_constraintsInfo

template<dftfe::utils::MemorySpace memorySpace>
dftUtils::constraintMatrixInfo<memorySpace> dftfe::MultiVectorPoissonLinearSolverProblem< memorySpace >::d_constraintsInfo
private

◆ d_diagonalA

template<dftfe::utils::MemorySpace memorySpace>
dftfe::utils::MemoryStorage<double, memorySpace> dftfe::MultiVectorPoissonLinearSolverProblem< memorySpace >::d_diagonalA
private

◆ d_diagonalSqrtA

template<dftfe::utils::MemorySpace memorySpace>
dftfe::utils::MemoryStorage<double, memorySpace> dftfe::MultiVectorPoissonLinearSolverProblem< memorySpace >::d_diagonalSqrtA
private

◆ d_dofHandler

template<dftfe::utils::MemorySpace memorySpace>
const dealii::DoFHandler<3>* dftfe::MultiVectorPoissonLinearSolverProblem< memorySpace >::d_dofHandler
private

pointer to the dealii::DofHandler object. This is already part of the matrixFreeData object.

◆ d_inc

template<dftfe::utils::MemorySpace memorySpace>
size_type dftfe::MultiVectorPoissonLinearSolverProblem< memorySpace >::d_inc
private

◆ d_isComputeDiagonalA

template<dftfe::utils::MemorySpace memorySpace>
bool dftfe::MultiVectorPoissonLinearSolverProblem< memorySpace >::d_isComputeDiagonalA
private

◆ d_isMeanValueConstraintComputed

template<dftfe::utils::MemorySpace memorySpace>
bool dftfe::MultiVectorPoissonLinearSolverProblem< memorySpace >::d_isMeanValueConstraintComputed
private

◆ d_locallyOwnedSize

template<dftfe::utils::MemorySpace memorySpace>
size_type dftfe::MultiVectorPoissonLinearSolverProblem< memorySpace >::d_locallyOwnedSize
private

◆ d_mapNodeIdToProcId

template<dftfe::utils::MemorySpace memorySpace>
dftfe::utils::MemoryStorage<dftfe::global_size_type, memorySpace> dftfe::MultiVectorPoissonLinearSolverProblem< memorySpace >::d_mapNodeIdToProcId
private

◆ d_mapQuadIdToProcId

template<dftfe::utils::MemorySpace memorySpace>
dftfe::utils::MemoryStorage<dftfe::global_size_type, memorySpace> dftfe::MultiVectorPoissonLinearSolverProblem< memorySpace >::d_mapQuadIdToProcId
private

◆ d_matrixFreeDataPtr

template<dftfe::utils::MemorySpace memorySpace>
const dealii::MatrixFree<3, double>* dftfe::MultiVectorPoissonLinearSolverProblem< memorySpace >::d_matrixFreeDataPtr
private

pointer to dealii MatrixFree object

◆ d_matrixFreeQuadratureComponentAX

template<dftfe::utils::MemorySpace memorySpace>
unsigned int dftfe::MultiVectorPoissonLinearSolverProblem< memorySpace >::d_matrixFreeQuadratureComponentAX
private

◆ d_matrixFreeQuadratureComponentRhs

template<dftfe::utils::MemorySpace memorySpace>
unsigned int dftfe::MultiVectorPoissonLinearSolverProblem< memorySpace >::d_matrixFreeQuadratureComponentRhs
private

◆ d_matrixFreeVectorComponent

template<dftfe::utils::MemorySpace memorySpace>
unsigned int dftfe::MultiVectorPoissonLinearSolverProblem< memorySpace >::d_matrixFreeVectorComponent
private

◆ d_mpi_parent

template<dftfe::utils::MemorySpace memorySpace>
const MPI_Comm dftfe::MultiVectorPoissonLinearSolverProblem< memorySpace >::d_mpi_parent
private

◆ d_negScalarCoeffAlpha

template<dftfe::utils::MemorySpace memorySpace>
double dftfe::MultiVectorPoissonLinearSolverProblem< memorySpace >::d_negScalarCoeffAlpha
private

◆ d_nQuadsPerCell

template<dftfe::utils::MemorySpace memorySpace>
unsigned int dftfe::MultiVectorPoissonLinearSolverProblem< memorySpace >::d_nQuadsPerCell
private

◆ d_numberDofsPerElement

template<dftfe::utils::MemorySpace memorySpace>
size_type dftfe::MultiVectorPoissonLinearSolverProblem< memorySpace >::d_numberDofsPerElement
private

◆ d_numCells

template<dftfe::utils::MemorySpace memorySpace>
size_type dftfe::MultiVectorPoissonLinearSolverProblem< memorySpace >::d_numCells
private

◆ d_rhsQuadDataPtr

template<dftfe::utils::MemorySpace memorySpace>
dftfe::utils::MemoryStorage<double, memorySpace>* dftfe::MultiVectorPoissonLinearSolverProblem< memorySpace >::d_rhsQuadDataPtr
private

◆ d_rhsVec

template<dftfe::utils::MemorySpace memorySpace>
dftfe::linearAlgebra::MultiVector<double, memorySpace> dftfe::MultiVectorPoissonLinearSolverProblem< memorySpace >::d_rhsVec
private

◆ d_scalarCoeffAlpha

template<dftfe::utils::MemorySpace memorySpace>
double dftfe::MultiVectorPoissonLinearSolverProblem< memorySpace >::d_scalarCoeffAlpha
private

◆ d_shapeFunctionValue

template<dftfe::utils::MemorySpace memorySpace>
std::vector<double> dftfe::MultiVectorPoissonLinearSolverProblem< memorySpace >::d_shapeFunctionValue
private

storage for shapefunctions

◆ d_transA

template<dftfe::utils::MemorySpace memorySpace>
char dftfe::MultiVectorPoissonLinearSolverProblem< memorySpace >::d_transA
private

◆ d_transB

template<dftfe::utils::MemorySpace memorySpace>
char dftfe::MultiVectorPoissonLinearSolverProblem< memorySpace >::d_transB
private

◆ d_xCellLLevelNodalData

template<dftfe::utils::MemorySpace memorySpace>
dftfe::utils::MemoryStorage<double, memorySpace> dftfe::MultiVectorPoissonLinearSolverProblem< memorySpace >::d_xCellLLevelNodalData
private

◆ mpi_communicator

template<dftfe::utils::MemorySpace memorySpace>
const MPI_Comm dftfe::MultiVectorPoissonLinearSolverProblem< memorySpace >::mpi_communicator
private

data members for the mpi implementation

◆ n_mpi_processes

template<dftfe::utils::MemorySpace memorySpace>
const unsigned int dftfe::MultiVectorPoissonLinearSolverProblem< memorySpace >::n_mpi_processes
private

◆ pcout

template<dftfe::utils::MemorySpace memorySpace>
dealii::ConditionalOStream dftfe::MultiVectorPoissonLinearSolverProblem< memorySpace >::pcout
private

◆ this_mpi_process

template<dftfe::utils::MemorySpace memorySpace>
const unsigned int dftfe::MultiVectorPoissonLinearSolverProblem< memorySpace >::this_mpi_process
private

The documentation for this class was generated from the following file: