19#ifndef poissonSolverProblem_H_
20#define poissonSolverProblem_H_
36 template <
unsigned int FEOrder,
unsigned int FEOrderElectro>
62 const std::shared_ptr<
64 FEBasisOperations<double, double, dftfe::utils::MemorySpace::HOST>>
67 const dealii::AffineConstraints<double> &constraintMatrix,
68 const unsigned int matrixFreeVectorComponent,
69 const unsigned int matrixFreeQuadratureComponentRhsDensity,
70 const unsigned int matrixFreeQuadratureComponentAX,
71 const std::map<dealii::types::global_dof_index, double> &atoms,
72 const std::map<dealii::CellId, std::vector<double>> &smearedChargeValues,
73 const unsigned int smearedChargeQuadratureId,
76 const bool isComputeDiagonalA =
true,
77 const bool isComputeMeanValueConstraints =
false,
78 const bool smearedNuclearCharges =
false,
79 const bool isRhoValues =
true,
80 const bool isGradSmearedChargeRhs =
false,
81 const unsigned int smearedChargeGradientComponentId = 0,
82 const bool storeSmearedChargeRhs =
false,
83 const bool reuseSmearedChargeRhs =
false,
84 const bool reinitializeFastConstraints =
false);
117 const double omega)
const;
130 const std::string & identifier =
"")
const {};
136 const std::string & identifier =
"")
const {};
151 AX(
const dealii::MatrixFree<3, double> & matrixFreeData,
154 const std::pair<unsigned int, unsigned int> &cell_range)
const;
227 const std::map<dealii::CellId, std::vector<double>>
235 const std::map<dealii::types::global_dof_index, double> *
d_atomsPtr;
271 FEBasisOperations<double, double, dftfe::utils::MemorySpace::HOST>>
dealiiLinearSolverProblem()
Constructor.
Overloads dealii's distribute and distribute_local_to_global functions associated with constraints cl...
Definition constraintMatrixInfo.h:43
unsigned int d_matrixFreeQuadratureComponentAX
matrix free quadrature index
Definition poissonSolverProblem.h:221
const dftfe::utils::MemoryStorage< double, dftfe::utils::MemorySpace::HOST > * d_rhoValuesPtr
pointer to electron density cell quadrature data
Definition poissonSolverProblem.h:225
distributedCPUVec< double > & getX()
get the reference to x field
void AX(const dealii::MatrixFree< 3, double > &matrixFreeData, distributedCPUVec< double > &dst, const distributedCPUVec< double > &src, const std::pair< unsigned int, unsigned int > &cell_range) const
required for the cell_loop operation in dealii's MatrixFree class
void subscribe(std::atomic< bool > *const validity, const std::string &identifier="") const
Definition poissonSolverProblem.h:129
const dealii::AffineConstraints< double > * d_constraintMatrixPtr
pointer to dealii dealii::AffineConstraints<double> object
Definition poissonSolverProblem.h:211
bool d_isFastConstraintsInitialized
Definition poissonSolverProblem.h:274
void clear()
clears all datamembers and reset to original state.
const MPI_Comm mpi_communicator
Definition poissonSolverProblem.h:276
unsigned int d_matrixFreeVectorComponent
Definition poissonSolverProblem.h:215
void computeMeanValueConstraint()
Compute mean value constraint which is required in case of fully periodic boundary conditions.
void distributeX()
distribute x to the constrained nodes.
void computeDiagonalA()
Compute the diagonal of A.
distributedCPUVec< double > d_diagonalA
storage for diagonal of the A matrix
Definition poissonSolverProblem.h:198
void meanValueConstraintDistributeSlaveToMaster(distributedCPUVec< double > &vec) const
Mean value constraint distibute slave to master.
void meanValueConstraintSetZero(distributedCPUVec< double > &vec) const
Mean value constraint set zero.
unsigned int d_smearedChargeQuadratureId
Definition poissonSolverProblem.h:231
void computeRhs(distributedCPUVec< double > &rhs)
Compute right hand side vector for the problem Ax = rhs.
void meanValueConstraintDistribute(distributedCPUVec< double > &vec) const
Mean value constraint distibute.
bool d_isStoreSmearedChargeRhs
Definition poissonSolverProblem.h:251
unsigned int d_meanValueConstraintProcId
Definition poissonSolverProblem.h:264
dealii::ConditionalOStream pcout
Definition poissonSolverProblem.h:279
std::vector< double > d_cellShapeFunctionGradientIntegralFlattened
shape function gradient integral storage
Definition poissonSolverProblem.h:238
dftUtils::constraintMatrixInfo< dftfe::utils::MemorySpace::HOST > d_constraintsInfo
duplicate constraints object with flattened maps for faster access
Definition poissonSolverProblem.h:268
distributedCPUVec< double > d_rhsSmearedCharge
Definition poissonSolverProblem.h:202
const dealii::MatrixFree< 3, double > * d_matrixFreeDataPtr
pointer to dealii MatrixFree object
Definition poissonSolverProblem.h:205
const unsigned int n_mpi_processes
Definition poissonSolverProblem.h:277
const std::map< dealii::CellId, std::vector< double > > * d_smearedChargeValuesPtr
pointer to smeared charge cell quadrature data
Definition poissonSolverProblem.h:228
std::shared_ptr< dftfe::basis::FEBasisOperations< double, double, dftfe::utils::MemorySpace::HOST > > d_basisOperationsPtr
Definition poissonSolverProblem.h:272
void reinit(const std::shared_ptr< dftfe::basis::FEBasisOperations< double, double, dftfe::utils::MemorySpace::HOST > > &basisOperationsPtr, distributedCPUVec< double > &x, const dealii::AffineConstraints< double > &constraintMatrix, const unsigned int matrixFreeVectorComponent, const unsigned int matrixFreeQuadratureComponentRhsDensity, const unsigned int matrixFreeQuadratureComponentAX, const std::map< dealii::types::global_dof_index, double > &atoms, const std::map< dealii::CellId, std::vector< double > > &smearedChargeValues, const unsigned int smearedChargeQuadratureId, const dftfe::utils::MemoryStorage< double, dftfe::utils::MemorySpace::HOST > &rhoValues, const bool isComputeDiagonalA=true, const bool isComputeMeanValueConstraints=false, const bool smearedNuclearCharges=false, const bool isRhoValues=true, const bool isGradSmearedChargeRhs=false, const unsigned int smearedChargeGradientComponentId=0, const bool storeSmearedChargeRhs=false, const bool reuseSmearedChargeRhs=false, const bool reinitializeFastConstraints=false)
reinitialize data structures for total electrostatic potential solve.
bool d_isMeanValueConstraintComputed
Definition poissonSolverProblem.h:245
void vmult(distributedCPUVec< double > &Ax, distributedCPUVec< double > &x)
Compute A matrix multipled by x.
bool operator!=(double val) const
function needed by dealii to mimic SparseMatrix
Definition poissonSolverProblem.h:140
dealii::types::global_dof_index d_meanValueConstraintNodeId
mean value constraints: mean value constrained node
Definition poissonSolverProblem.h:260
void unsubscribe(std::atomic< bool > *const validity, const std::string &identifier="") const
Definition poissonSolverProblem.h:135
distributedCPUVec< double > d_meanValueConstraintVec
storage for mean value constraint vector
Definition poissonSolverProblem.h:241
distributedCPUVec< double > * d_xPtr
pointer to the x vector being solved for
Definition poissonSolverProblem.h:208
unsigned int d_matrixFreeQuadratureComponentRhsDensity
matrix free quadrature index
Definition poissonSolverProblem.h:218
unsigned int d_smearedChargeGradientComponentId
Definition poissonSolverProblem.h:257
bool d_isReuseSmearedChargeRhs
Definition poissonSolverProblem.h:254
poissonSolverProblem(const MPI_Comm &mpi_comm)
Constructor.
bool d_isGradSmearedChargeRhs
Definition poissonSolverProblem.h:248
const std::map< dealii::types::global_dof_index, double > * d_atomsPtr
Definition poissonSolverProblem.h:235
const unsigned int this_mpi_process
Definition poissonSolverProblem.h:278
void precondition_Jacobi(distributedCPUVec< double > &dst, const distributedCPUVec< double > &src, const double omega) const
Jacobi preconditioning.
Definition MemoryStorage.h:33
Definition FEBasisOperations.h:30
Definition pseudoPotentialToDftfeConverter.cc:34
dealii::LinearAlgebra::distributed::Vector< elem_type, dealii::MemorySpace::Host > distributedCPUVec
Definition headers.h:92