18#if defined(DFTFE_WITH_DEVICE)
19# ifndef poissonSolverProblemDevice_H_
20# define poissonSolverProblemDevice_H_
41 template <
unsigned int FEOrder,
unsigned int FEOrderElectro>
42 class poissonSolverProblemDevice :
public linearSolverProblemDevice
46 poissonSolverProblemDevice(
const MPI_Comm &mpi_comm);
65 const std::shared_ptr<
67 FEBasisOperations<double, double, dftfe::utils::MemorySpace::HOST>>
69 distributedCPUVec<double> & x,
70 const dealii::AffineConstraints<double> &constraintMatrix,
71 const unsigned int matrixFreeVectorComponent,
72 const unsigned int matrixFreeQuadratureComponentRhsDensity,
73 const unsigned int matrixFreeQuadratureComponentAX,
74 const std::map<dealii::types::global_dof_index, double> &atoms,
75 const std::map<dealii::CellId, std::vector<double>> &smearedChargeValues,
76 const unsigned int smearedChargeQuadratureId,
77 const dftfe::utils::MemoryStorage<double, dftfe::utils::MemorySpace::HOST>
79 const std::shared_ptr<
80 dftfe::linearAlgebra::BLASWrapper<dftfe::utils::MemorySpace::DEVICE>>
82 const bool isComputeDiagonalA =
true,
83 const bool isComputeMeanValueConstraints =
false,
84 const bool smearedNuclearCharges =
false,
85 const bool isRhoValues =
true,
86 const bool isGradSmearedChargeRhs =
false,
87 const unsigned int smearedChargeGradientComponentId = 0,
88 const bool storeSmearedChargeRhs =
false,
89 const bool reuseSmearedChargeRhs =
false,
90 const bool reinitializeFastConstraints =
false);
97 computeAX(distributedDeviceVec<double> &Ax,
98 distributedDeviceVec<double> &x);
106 computeRhs(distributedCPUVec<double> &rhs);
113 distributedDeviceVec<double> &
121 distributedDeviceVec<double> &
129 copyXfromDeviceToHost();
141 subscribe(std::atomic<bool> *
const validity,
142 const std::string & identifier =
"")
const {};
147 unsubscribe(std::atomic<bool> *
const validity,
148 const std::string & identifier =
"")
const {};
152 operator!=(
double val)
const
189 computeMeanValueConstraint();
196 meanValueConstraintDistribute(distributedDeviceVec<double> &vec)
const;
203 meanValueConstraintDistributeSlaveToMaster(
204 distributedDeviceVec<double> &vec)
const;
207 meanValueConstraintDistributeSlaveToMaster(
208 distributedCPUVec<double> &vec)
const;
215 meanValueConstraintSetZero(distributedDeviceVec<double> &vec)
const;
218 meanValueConstraintSetZero(distributedCPUVec<double> &vec)
const;
221 distributedCPUVec<double> d_diagonalA;
222 distributedDeviceVec<double> d_diagonalAdevice;
226 distributedCPUVec<double> d_rhsSmearedCharge;
229 const dealii::MatrixFree<3, double> *d_matrixFreeDataPtr;
232 distributedCPUVec<double> * d_xPtr;
233 distributedDeviceVec<double> d_xDevice;
237 int d_nLocalCells, d_xLocalDof, d_xLen;
240 dftfe::utils::MemoryStorage<double, dftfe::utils::MemorySpace::DEVICE>
241 d_shapeFunction, d_jacobianFactor;
242 dftfe::utils::MemoryStorage<int, dftfe::utils::MemorySpace::DEVICE> d_map;
246 double *d_shapeFunctionPtr;
247 double *d_jacobianFactorPtr;
252 dftUtils::constraintMatrixInfo<dftfe::utils::MemorySpace::DEVICE>
253 d_constraintsTotalPotentialInfo,
254 d_inhomogenousConstraintsTotalPotentialInfo;
257 const dealii::AffineConstraints<double> *d_constraintMatrixPtr;
261 unsigned int d_matrixFreeVectorComponent;
264 unsigned int d_matrixFreeQuadratureComponentRhsDensity;
267 unsigned int d_matrixFreeQuadratureComponentAX;
270 const dftfe::utils::MemoryStorage<double, dftfe::utils::MemorySpace::HOST>
274 const std::map<dealii::CellId, std::vector<double>>
275 *d_smearedChargeValuesPtr;
278 unsigned int d_smearedChargeQuadratureId;
282 const std::map<dealii::types::global_dof_index, double> *d_atomsPtr;
285 std::vector<double> d_cellShapeFunctionGradientIntegralFlattened;
288 distributedCPUVec<double> d_meanValueConstraintVec;
291 distributedDeviceVec<double> d_meanValueConstraintDeviceVec;
295 bool d_isMeanValueConstraintComputed;
298 bool d_isGradSmearedChargeRhs;
301 bool d_isStoreSmearedChargeRhs;
304 bool d_isReuseSmearedChargeRhs;
307 unsigned int d_smearedChargeGradientComponentId;
310 dealii::types::global_dof_index d_meanValueConstraintNodeId;
313 dealii::types::global_dof_index d_meanValueConstraintNodeIdLocal;
317 unsigned int d_meanValueConstraintProcId;
320 dftUtils::constraintMatrixInfo<dftfe::utils::MemorySpace::HOST>
324 FEBasisOperations<double, double, dftfe::utils::MemorySpace::HOST>>
325 d_basisOperationsPtr;
328 dftfe::linearAlgebra::BLASWrapper<dftfe::utils::MemorySpace::DEVICE>>
330 bool d_isFastConstraintsInitialized;
331 bool d_isHomogenousConstraintsInitialized;
333 const MPI_Comm mpi_communicator;
334 const unsigned int n_mpi_processes;
335 const unsigned int this_mpi_process;
336 dealii::ConditionalOStream pcout;
Definition pseudoPotentialToDftfeConverter.cc:34