26#ifndef dftefePoissonSolverDealiiMatrixFreeFE_h
27#define dftefePoissonSolverDealiiMatrixFreeFE_h
46#ifdef DFTEFE_WITH_DEVICE
53 namespace electrostatics
78 template <
typename ValueTypeOperator,
79 typename ValueTypeOperand,
108 dim>> feBasisManagerField,
111 feBasisDataStorageStiffnessMatrix,
116 &feBasisDataStorageRhs,
133 dim>> feBasisManagerField,
136 feBasisDataStorageStiffnessMatrix,
139 feBasisDataStorageRhs,
151 dim>> feBasisManagerField,
163 dim>> feBasisManagerField,
170 solve(
const double absTolerance,
const size_type maxNumberIterations);
209 AX(
const dealii::MatrixFree<dim, double> &matrixFreeData,
212 const std::pair<size_type, size_type> &cell_range)
const;
215 CGsolve(
const double absTolerance,
217 bool distributeFlag);
232 bool distributeFlag);
257 std::shared_ptr<dealii::MatrixFree<dim, ValueTypeOperator>>
260 const dealii::AffineConstraints<ValueTypeOperand>
291 std::shared_ptr<linearAlgebra::LinAlgOpContext<memorySpace>>
298 std::unique_ptr<linearAlgebra::Vector<ValueTypeOperator, memorySpace>>
300 std::unique_ptr<linearAlgebra::Vector<ValueTypeOperator, memorySpace>>
302 std::unique_ptr<linearAlgebra::Vector<ValueTypeOperator, memorySpace>>
308#ifdef DFTEFE_WITH_DEVICE
310 double * d_devSumPtr;
316 d_mpiPatternP2PDevice;
323 d_matrixFreeWrapperDevice;
330 applyPreconditionAndComputeDotProduct(
const double *jacobi);
337 applyPreconditionComputeDotProductAndSadd(
const double *jacobi);
344 scaleXRandComputeNorm(
double *x,
const double &alpha);
MatrixFreeWrapper class.
Definition: MatrixFreeWrapper.h:155
An abstract class to store and access data for a given basis, such as the basis function values on a ...
Definition: FEBasisDataStorage.h:54
An abstract class to encapsulate the partitioning of a finite element basis across multiple processor...
Definition: FEBasisManager.h:44
dealii::LinearAlgebra::distributed::Vector< T, dealii::MemorySpace::Host > distributedCPUVec
Definition: DealiiFEEvaluationWrapper.h:47
A derived class of linearAlgebra::LinearSolverFunction to encapsulate the Poisson partial differentia...
Definition: PoissonSolverDealiiMatrixFreeFE.h:83
std::unique_ptr< linearAlgebra::Vector< ValueTypeOperator, memorySpace > > d_initialDevice
Definition: PoissonSolverDealiiMatrixFreeFE.h:303
size_type d_dofHandlerIndex
Definition: PoissonSolverDealiiMatrixFreeFE.h:266
const distributedCPUVec< ValueTypeOperand > & getRhs() const
Definition: PoissonSolverDealiiMatrixFreeFE.t.cpp:601
std::shared_ptr< basis::FEBasisManager< ValueTypeOperand, ValueTypeOperator, memorySpaceHost, dim > > d_feBasisManagerHomo
Definition: PoissonSolverDealiiMatrixFreeFE.h:254
linearAlgebra::PreconditionerType d_pcType
Definition: PoissonSolverDealiiMatrixFreeFE.h:246
std::vector< dealii::Quadrature< dim > > d_dealiiQuadratureRuleVec
Definition: PoissonSolverDealiiMatrixFreeFE.h:279
void reinit(std::shared_ptr< const basis::FEBasisManager< ValueTypeOperand, ValueTypeOperator, memorySpaceHost, dim > > feBasisManagerField, const quadrature::QuadratureValuesContainer< ValueType, memorySpaceHost > &inpRhs)
void reinit(std::shared_ptr< const basis::FEBasisManager< ValueTypeOperand, ValueTypeOperator, memorySpaceHost, dim > > feBasisManagerField, const std::map< std::string, const quadrature::QuadratureValuesContainer< ValueType, memorySpaceHost > & > &inpRhs)
Definition: PoissonSolverDealiiMatrixFreeFE.t.cpp:430
std::map< dealii::CellId, size_type > d_cellIdToCellIndexMap
Definition: PoissonSolverDealiiMatrixFreeFE.h:277
linearAlgebra::Vector< ValueTypeOperator, memorySpace > d_dvec
Definition: PoissonSolverDealiiMatrixFreeFE.h:306
std::shared_ptr< linearAlgebra::LinAlgOpContext< memorySpace > > d_linAlgOpContext
Definition: PoissonSolverDealiiMatrixFreeFE.h:292
void vmult(distributedCPUVec< double > &Ax, distributedCPUVec< double > &x)
Definition: PoissonSolverDealiiMatrixFreeFE.t.cpp:816
size_type d_feOrder
Definition: PoissonSolverDealiiMatrixFreeFE.h:265
const dealii::AffineConstraints< ValueTypeOperand > * d_dealiiAffineConstraintMatrix
Definition: PoissonSolverDealiiMatrixFreeFE.h:261
void CGsolve(const double absTolerance, const size_type maxNumberIterations, bool distributeFlag)
Definition: PoissonSolverDealiiMatrixFreeFE.t.cpp:1064
const linearAlgebra::Vector< ValueTypeOperator, utils::MemorySpace::DEVICE > & getInitialGuessDevice() const
Definition: PoissonSolverDealiiMatrixFreeFE.t.cpp:642
utils::ConditionalOStream pcout
Definition: PoissonSolverDealiiMatrixFreeFE.h:282
const distributedCPUVec< ValueType > & getInitialGuess() const
Definition: PoissonSolverDealiiMatrixFreeFE.t.cpp:616
void AX(const dealii::MatrixFree< dim, double > &matrixFreeData, distributedCPUVec< double > &dst, const distributedCPUVec< double > &src, const std::pair< size_type, size_type > &cell_range) const
Definition: PoissonSolverDealiiMatrixFreeFE.t.cpp:673
linearAlgebra::MultiVector< linearAlgebra::blasLapack::scalar_type< ValueTypeOperator, ValueTypeOperand >, memorySpaceHost > d_scratchMultiVecHost
Definition: PoissonSolverDealiiMatrixFreeFE.h:288
std::shared_ptr< dealii::MatrixFree< dim, ValueTypeOperator > > d_dealiiMatrixFree
Definition: PoissonSolverDealiiMatrixFreeFE.h:258
std::map< std::string, size_type > d_num1DQuadPointsRhs
Definition: PoissonSolverDealiiMatrixFreeFE.h:264
void getSolution(linearAlgebra::MultiVector< ValueType, memorySpaceHost > &solution)
Definition: PoissonSolverDealiiMatrixFreeFE.t.cpp:563
PoissonSolverDealiiMatrixFreeFE(std::shared_ptr< const basis::FEBasisManager< ValueTypeOperand, ValueTypeOperator, memorySpaceHost, dim > > feBasisManagerField, std::shared_ptr< const basis::FEBasisDataStorage< ValueTypeOperator, memorySpaceHost > > feBasisDataStorageStiffnessMatrix, std::shared_ptr< const basis::FEBasisDataStorage< ValueTypeOperator, memorySpaceHost > > feBasisDataStorageRhs, const quadrature::QuadratureValuesContainer< ValueType, memorySpaceHost > &inpRhs, const linearAlgebra::PreconditionerType pcType, std::shared_ptr< linearAlgebra::LinAlgOpContext< memorySpace > > linAlgOpContext)
This constructor creates an instance of a base LinearSolverFunction called PoissonSolverDealiiMatrixF...
linearAlgebra::Vector< ValueTypeOperator, memorySpace > d_rvec
Definition: PoissonSolverDealiiMatrixFreeFE.h:305
void computeDiagonalA()
Definition: PoissonSolverDealiiMatrixFreeFE.t.cpp:722
distributedCPUVec< ValueTypeOperator > d_diagonalA
Definition: PoissonSolverDealiiMatrixFreeFE.h:256
void computeAXDevice(linearAlgebra::Vector< ValueTypeOperator, utils::MemorySpace::DEVICE > &Ax, linearAlgebra::Vector< ValueTypeOperator, utils::MemorySpace::DEVICE > &x)
Definition: PoissonSolverDealiiMatrixFreeFE.t.cpp:1235
size_type d_matrixFreeQuadCompStiffnessMatrix
Definition: PoissonSolverDealiiMatrixFreeFE.h:276
linearAlgebra::Vector< ValueTypeOperator, memorySpace > d_qvec
define some temporary vectors for cgsolver device
Definition: PoissonSolverDealiiMatrixFreeFE.h:305
distributedCPUVec< ValueTypeOperator > d_initial
Definition: PoissonSolverDealiiMatrixFreeFE.h:256
std::vector< distributedCPUVec< ValueType > > d_nonTensorSructuredQuadeRhs
Definition: PoissonSolverDealiiMatrixFreeFE.h:274
void CGsolveDevice(const double absTolerance, const size_type maxNumberIterations, bool distributeFlag)
Definition: PoissonSolverDealiiMatrixFreeFE.t.cpp:1338
void solve(const double absTolerance, const size_type maxNumberIterations)
Definition: PoissonSolverDealiiMatrixFreeFE.t.cpp:655
const linearAlgebra::Vector< ValueTypeOperator, utils::MemorySpace::DEVICE > & getRhsDevice() const
Definition: PoissonSolverDealiiMatrixFreeFE.t.cpp:629
const dealii::AffineConstraints< ValueTypeOperand > * d_constraintsInfo
Definition: PoissonSolverDealiiMatrixFreeFE.h:262
std::shared_ptr< const basis::FEBasisManager< ValueTypeOperand, ValueTypeOperator, memorySpaceHost, dim > > d_feBasisManagerField
Definition: PoissonSolverDealiiMatrixFreeFE.h:245
void precondition_Jacobi(distributedCPUVec< double > &dst, const distributedCPUVec< double > &src) const
Definition: PoissonSolverDealiiMatrixFreeFE.t.cpp:796
std::map< std::string, std::shared_ptr< const basis::FEBasisDataStorage< ValueTypeOperator, memorySpaceHost > > > d_feBasisDataStorageRhs
Definition: PoissonSolverDealiiMatrixFreeFE.h:272
const utils::mpi::MPIComm & getMPIComm() const
Definition: PoissonSolverDealiiMatrixFreeFE.t.cpp:1049
distributedCPUVec< ValueTypeOperator > d_x
Definition: PoissonSolverDealiiMatrixFreeFE.h:256
dealii::MappingQ1< dim, dim > d_mappingDealii
Definition: PoissonSolverDealiiMatrixFreeFE.h:280
basis::FEEvaluationWrapperBase::distributedCPUVec< T > distributedCPUVec
define ValueType as the superior (bigger set) of the ValueTypeOperator and ValueTypeOperand (e....
Definition: PoissonSolverDealiiMatrixFreeFE.h:94
std::unique_ptr< linearAlgebra::Vector< ValueTypeOperator, memorySpace > > d_diagonalADevice
Definition: PoissonSolverDealiiMatrixFreeFE.h:299
std::unique_ptr< linearAlgebra::Vector< ValueTypeOperator, memorySpace > > d_rhsDevice
Definition: PoissonSolverDealiiMatrixFreeFE.h:301
~PoissonSolverDealiiMatrixFreeFE()=default
utils::Profiler< memorySpace > d_p
Definition: PoissonSolverDealiiMatrixFreeFE.h:247
distributedCPUVec< ValueTypeOperator > d_rhs
Definition: PoissonSolverDealiiMatrixFreeFE.h:256
void computeRhs(distributedCPUVec< double > &rhs, const std::map< std::string, const quadrature::QuadratureValuesContainer< linearAlgebra::blasLapack::scalar_type< ValueTypeOperator, ValueTypeOperand >, memorySpaceHost > & > &inpRhs)
Definition: PoissonSolverDealiiMatrixFreeFE.t.cpp:838
std::shared_ptr< const dealii::DoFHandler< dim > > d_dealiiDofHandler
Definition: PoissonSolverDealiiMatrixFreeFE.h:259
linearAlgebra::blasLapack::scalar_type< ValueTypeOperator, ValueTypeOperand > ValueType
Definition: PoissonSolverDealiiMatrixFreeFE.h:98
size_type d_num1DQuadPointsStiffnessMatrix
Definition: PoissonSolverDealiiMatrixFreeFE.h:263
size_type d_numComponents
Definition: PoissonSolverDealiiMatrixFreeFE.h:240
void setSolution(const distributedCPUVec< ValueType > &x)
Definition: PoissonSolverDealiiMatrixFreeFE.t.cpp:549
Definition: LinAlgOpContext.h:52
An class template to encapsulate a MultiVector. A MultiVector is a collection of vectors belonging t...
Definition: MultiVector.h:134
A class that encapsulates a vector. This is a vector in the mathematical sense and not in the sense o...
Definition: Vector.h:122
Definition: QuadratureValuesContainer.h:39
Provides an interface to print based on whether a certain condition is met or not....
Definition: ConditionalOStream.h:47
Definition: MemoryStorage.h:38
Definition: Profiler.h:50
A class template to store the communication pattern (i.e., which entries/nodes to receive from which ...
Definition: MPIPatternP2P.h:197
static constexpr utils::MemorySpace memorySpaceHost
Definition: PoissonSolverDealiiMatrixFreeFE.h:55
typeInternal::scalar_type< ValueType1, ValueType2 > scalar_type
Definition: BlasLapackTypedef.h:183
PreconditionerType
Definition: LinearAlgebraTypes.h:41
int MPIComm
Definition: MPITypes.h:84
MemorySpace
Definition: MemorySpaceType.h:37
dealii includes
Definition: AtomFieldDataSpherical.cpp:31
std::uint64_t size_type
Definition: TypeConfig.h:9
@ Laplace
Definition: MatrixFreeDevice.h:34