23#if defined(DFTFE_WITH_DEVICE)
24# ifndef poissonSolverProblemDevice_H_
25# define poissonSolverProblemDevice_H_
46 template <dftfe::uInt FEOrderElectro>
47 class poissonSolverProblemDevice :
public linearSolverProblemDevice
51 poissonSolverProblemDevice(
const MPI_Comm &mpi_comm);
70 const std::shared_ptr<
72 FEBasisOperations<double, double, dftfe::utils::MemorySpace::HOST>>
74 distributedCPUVec<double> &x,
75 const dealii::AffineConstraints<double> &constraintMatrix,
77 const dftfe::uInt matrixFreeQuadratureComponentRhsDensity,
79 const std::map<dealii::types::global_dof_index, double> &atoms,
80 const std::map<dealii::CellId, std::vector<double>> &smearedChargeValues,
82 const dftfe::utils::MemoryStorage<double, dftfe::utils::MemorySpace::HOST>
84 const std::shared_ptr<
85 dftfe::linearAlgebra::BLASWrapper<dftfe::utils::MemorySpace::DEVICE>>
87 const bool isComputeDiagonalA =
true,
88 const bool isComputeMeanValueConstraints =
false,
89 const bool smearedNuclearCharges =
false,
90 const bool isRhoValues =
true,
91 const bool isGradSmearedChargeRhs =
false,
92 const dftfe::uInt smearedChargeGradientComponentId = 0,
93 const bool storeSmearedChargeRhs =
false,
94 const bool reuseSmearedChargeRhs =
false,
95 const bool reinitializeFastConstraints =
false);
102 computeAX(distributedDeviceVec<double> &Ax,
103 distributedDeviceVec<double> &x);
111 computeRhs(distributedCPUVec<double> &rhs);
118 distributedDeviceVec<double> &
126 distributedDeviceVec<double> &
134 copyXfromDeviceToHost();
169 computeMeanValueConstraint();
176 meanValueConstraintDistribute(distributedDeviceVec<double> &vec)
const;
183 meanValueConstraintDistributeSlaveToMaster(
184 distributedDeviceVec<double> &vec)
const;
187 meanValueConstraintDistributeSlaveToMaster(
188 distributedCPUVec<double> &vec)
const;
195 meanValueConstraintSetZero(distributedCPUVec<double> &vec)
const;
198 distributedCPUVec<double> d_diagonalA;
199 distributedDeviceVec<double> d_diagonalAdevice;
203 distributedCPUVec<double> d_rhsSmearedCharge;
206 const dealii::MatrixFree<3, double> *d_matrixFreeDataPtr;
209 distributedCPUVec<double> *d_xPtr;
210 distributedDeviceVec<double> d_xDevice;
214 dftfe::Int d_nLocalCells, d_xLocalDof, d_xLen;
218 dftfe::MatrixFreeWrapperClass<double,
222 d_matrixFreeWrapperDevice;
225 dftUtils::constraintMatrixInfo<dftfe::utils::MemorySpace::DEVICE>
226 d_inhomogenousConstraintsTotalPotentialInfo;
229 const dealii::AffineConstraints<double> *d_constraintMatrixPtr;
236 dftfe::uInt d_matrixFreeQuadratureComponentRhsDensity;
242 const dftfe::utils::MemoryStorage<double, dftfe::utils::MemorySpace::HOST>
246 const std::map<dealii::CellId, std::vector<double>>
247 *d_smearedChargeValuesPtr;
254 const std::map<dealii::types::global_dof_index, double> *d_atomsPtr;
257 std::vector<double> d_cellShapeFunctionGradientIntegralFlattened;
260 distributedCPUVec<double> d_meanValueConstraintVec;
263 distributedDeviceVec<double> d_meanValueConstraintDeviceVec;
267 bool d_isMeanValueConstraintComputed;
270 bool d_isGradSmearedChargeRhs;
273 bool d_isStoreSmearedChargeRhs;
276 bool d_isReuseSmearedChargeRhs;
282 dealii::types::global_dof_index d_meanValueConstraintNodeId;
285 dealii::types::global_dof_index d_meanValueConstraintNodeIdLocal;
292 dftUtils::constraintMatrixInfo<dftfe::utils::MemorySpace::HOST>
296 FEBasisOperations<double, double, dftfe::utils::MemorySpace::HOST>>
297 d_basisOperationsPtr;
300 dftfe::linearAlgebra::BLASWrapper<dftfe::utils::MemorySpace::DEVICE>>
302 bool d_isFastConstraintsInitialized;
303 bool d_isHomogenousConstraintsInitialized;
305 const MPI_Comm mpi_communicator;
308 dealii::ConditionalOStream pcout;
@ DEVICE
Definition MemorySpaceType.h:36
Definition pseudoPotentialToDftfeConverter.cc:34
std::uint32_t uInt
Definition TypeConfig.h:10
@ Laplace
Definition MatrixFreeDevice.h:38
std::int32_t Int
Definition TypeConfig.h:11