19#ifndef poissonSolverProblem_H_
20#define poissonSolverProblem_H_
36 template <dftfe::uInt FEOrder, dftfe::uInt FEOrderElectro>
62 const std::shared_ptr<
64 FEBasisOperations<double, double, dftfe::utils::MemorySpace::HOST>>
67 const dealii::AffineConstraints<double> &constraintMatrix,
69 const dftfe::uInt matrixFreeQuadratureComponentRhsDensity,
71 const std::map<dealii::types::global_dof_index, double> &atoms,
72 const std::map<dealii::CellId, std::vector<double>> &smearedChargeValues,
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 dftfe::uInt 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<dftfe::uInt, dftfe::uInt> &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
const dftfe::utils::MemoryStorage< double, dftfe::utils::MemorySpace::HOST > * d_rhoValuesPtr
pointer to electron density cell quadrature data
Definition poissonSolverProblem.h:225
dftfe::uInt d_meanValueConstraintNodeId
mean value constraints: mean value constrained node
Definition poissonSolverProblem.h:260
distributedCPUVec< double > & getX()
get the reference to x field
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
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
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
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.
dftfe::uInt d_smearedChargeQuadratureId
Definition poissonSolverProblem.h:231
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.
dftfe::uInt d_meanValueConstraintProcId
Definition poissonSolverProblem.h:264
void computeRhs(distributedCPUVec< double > &rhs)
Compute right hand side vector for the problem Ax = rhs.
const dftfe::uInt this_mpi_process
Definition poissonSolverProblem.h:278
void meanValueConstraintDistribute(distributedCPUVec< double > &vec) const
Mean value constraint distibute.
bool d_isStoreSmearedChargeRhs
Definition poissonSolverProblem.h:251
dealii::ConditionalOStream pcout
Definition poissonSolverProblem.h:279
dftfe::uInt d_matrixFreeQuadratureComponentRhsDensity
matrix free quadrature index
Definition poissonSolverProblem.h:218
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 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 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_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
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
bool d_isReuseSmearedChargeRhs
Definition poissonSolverProblem.h:254
dftfe::uInt d_matrixFreeVectorComponent
Definition poissonSolverProblem.h:215
dftfe::uInt d_smearedChargeGradientComponentId
Definition poissonSolverProblem.h:257
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 dftfe::uInt n_mpi_processes
Definition poissonSolverProblem.h:277
dftfe::uInt d_matrixFreeQuadratureComponentAX
matrix free quadrature index
Definition poissonSolverProblem.h:221
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
std::uint32_t uInt
Definition TypeConfig.h:10