19#ifndef poissonSolverProblem_H_
20#define poissonSolverProblem_H_
34 template <dftfe::uInt FEOrderElectro>
60 const std::shared_ptr<
62 FEBasisOperations<double, double, dftfe::utils::MemorySpace::HOST>>
65 const dealii::AffineConstraints<double> &constraintMatrix,
67 const dftfe::uInt matrixFreeQuadratureComponentRhsDensity,
69 const std::map<dealii::types::global_dof_index, double> &atoms,
70 const std::map<dealii::CellId, std::vector<double>> &smearedChargeValues,
74 const bool isComputeDiagonalA =
true,
75 const bool isComputeMeanValueConstraints =
false,
76 const bool smearedNuclearCharges =
false,
77 const bool isRhoValues =
true,
78 const bool isGradSmearedChargeRhs =
false,
79 const dftfe::uInt smearedChargeGradientComponentId = 0,
80 const bool storeSmearedChargeRhs =
false,
81 const bool reuseSmearedChargeRhs =
false,
82 const bool reinitializeFastConstraints =
false);
115 const double omega)
const;
128 const std::string &identifier =
"")
const {};
134 const std::string &identifier =
"")
const {};
149 AX(
const dealii::MatrixFree<3, double> &matrixFreeData,
152 const std::pair<dftfe::uInt, dftfe::uInt> &cell_range)
const;
225 const std::map<dealii::CellId, std::vector<double>>
233 const std::map<dealii::types::global_dof_index, double> *
d_atomsPtr;
269 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
dftfe::uInt d_matrixFreeVectorComponent
Definition poissonSolverProblem.h:213
const std::map< dealii::types::global_dof_index, double > * d_atomsPtr
Definition poissonSolverProblem.h:233
bool operator!=(double val) const
function needed by dealii to mimic SparseMatrix
Definition poissonSolverProblem.h:138
bool d_isMeanValueConstraintComputed
Definition poissonSolverProblem.h:243
distributedCPUVec< double > d_meanValueConstraintVec
storage for mean value constraint vector
Definition poissonSolverProblem.h:239
void computeDiagonalA()
Compute the diagonal of A.
void computeMeanValueConstraint()
Compute mean value constraint which is required in case of fully periodic boundary conditions.
distributedCPUVec< double > d_rhsSmearedCharge
Definition poissonSolverProblem.h:200
void clear()
clears all datamembers and reset to original state.
bool d_isStoreSmearedChargeRhs
Definition poissonSolverProblem.h:249
const dealii::AffineConstraints< double > * d_constraintMatrixPtr
pointer to dealii dealii::AffineConstraints<double> object
Definition poissonSolverProblem.h:209
dealii::ConditionalOStream pcout
Definition poissonSolverProblem.h:277
poissonSolverProblem(const MPI_Comm &mpi_comm)
Constructor.
dftUtils::constraintMatrixInfo< dftfe::utils::MemorySpace::HOST > d_constraintsInfo
duplicate constraints object with flattened maps for faster access
Definition poissonSolverProblem.h:266
void unsubscribe(std::atomic< bool > *const validity, const std::string &identifier="") const
Definition poissonSolverProblem.h:133
void subscribe(std::atomic< bool > *const validity, const std::string &identifier="") const
Definition poissonSolverProblem.h:127
dftfe::uInt d_matrixFreeQuadratureComponentRhsDensity
matrix free quadrature index
Definition poissonSolverProblem.h:216
const std::map< dealii::CellId, std::vector< double > > * d_smearedChargeValuesPtr
pointer to smeared charge cell quadrature data
Definition poissonSolverProblem.h:226
const MPI_Comm mpi_communicator
Definition poissonSolverProblem.h:274
void meanValueConstraintDistribute(distributedCPUVec< double > &vec) const
Mean value constraint distibute.
distributedCPUVec< double > & getX()
get the reference to x field
std::shared_ptr< dftfe::basis::FEBasisOperations< double, double, dftfe::utils::MemorySpace::HOST > > d_basisOperationsPtr
Definition poissonSolverProblem.h:270
void meanValueConstraintDistributeSlaveToMaster(distributedCPUVec< double > &vec) const
Mean value constraint distibute slave to master.
const dealii::MatrixFree< 3, double > * d_matrixFreeDataPtr
pointer to dealii MatrixFree object
Definition poissonSolverProblem.h:203
bool d_isGradSmearedChargeRhs
Definition poissonSolverProblem.h:246
dftfe::uInt d_smearedChargeQuadratureId
Definition poissonSolverProblem.h:229
const dftfe::uInt n_mpi_processes
Definition poissonSolverProblem.h:275
distributedCPUVec< double > d_diagonalA
storage for diagonal of the A matrix
Definition poissonSolverProblem.h:196
bool d_isFastConstraintsInitialized
Definition poissonSolverProblem.h:272
void precondition_Jacobi(distributedCPUVec< double > &dst, const distributedCPUVec< double > &src, const double omega) const
Jacobi preconditioning.
void computeRhs(distributedCPUVec< double > &rhs)
Compute right hand side vector for the problem Ax = rhs.
void AX(const dealii::MatrixFree< 3, double > &matrixFreeData, distributedCPUVec< double > &dst, const distributedCPUVec< double > &src, const std::pair< dftfe::uInt, dftfe::uInt > &cell_range) const
required for the cell_loop operation in dealii's MatrixFree class
void distributeX()
distribute x to the constrained nodes.
dftfe::uInt d_meanValueConstraintProcId
Definition poissonSolverProblem.h:262
const dftfe::utils::MemoryStorage< double, dftfe::utils::MemorySpace::HOST > * d_rhoValuesPtr
pointer to electron density cell quadrature data
Definition poissonSolverProblem.h:223
std::vector< double > d_cellShapeFunctionGradientIntegralFlattened
shape function gradient integral storage
Definition poissonSolverProblem.h:236
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 dftfe::uInt matrixFreeVectorComponent, const dftfe::uInt matrixFreeQuadratureComponentRhsDensity, const dftfe::uInt matrixFreeQuadratureComponentAX, const std::map< dealii::types::global_dof_index, double > &atoms, const std::map< dealii::CellId, std::vector< double > > &smearedChargeValues, const dftfe::uInt 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 dftfe::uInt smearedChargeGradientComponentId=0, const bool storeSmearedChargeRhs=false, const bool reuseSmearedChargeRhs=false, const bool reinitializeFastConstraints=false)
reinitialize data structures for total electrostatic potential solve.
bool d_isReuseSmearedChargeRhs
Definition poissonSolverProblem.h:252
dftfe::uInt d_matrixFreeQuadratureComponentAX
matrix free quadrature index
Definition poissonSolverProblem.h:219
void vmult(distributedCPUVec< double > &Ax, distributedCPUVec< double > &x)
Compute A matrix multipled by x.
const dftfe::uInt this_mpi_process
Definition poissonSolverProblem.h:276
void meanValueConstraintSetZero(distributedCPUVec< double > &vec) const
Mean value constraint set zero.
dftfe::uInt d_meanValueConstraintNodeId
mean value constraints: mean value constrained node
Definition poissonSolverProblem.h:258
dftfe::uInt d_smearedChargeGradientComponentId
Definition poissonSolverProblem.h:255
distributedCPUVec< double > * d_xPtr
pointer to the x vector being solved for
Definition poissonSolverProblem.h:206
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
std::uint32_t uInt
Definition TypeConfig.h:10