43 const MPI_Comm &mpi_comm_domain,
44 const MPI_Comm &mpi_intercomm_kpts,
66 std::vector<
const dealii::AffineConstraints<double> *> &constraintsVector,
67 const dealii::AffineConstraints<double> &onlyHangingNodeConstraints,
68 const dealii::DoFHandler<3> &dofHandler,
69 const dealii::AffineConstraints<double> &constraintMatrix,
70 const std::vector<std::vector<double>> &atomLocations,
71 const std::vector<std::vector<double>> &imagePositions,
72 const std::vector<dftfe::Int> &imageIds,
73 const std::vector<double> &imageCharges,
74 const double radiusAtomBall);
93 std::vector<
const dealii::AffineConstraints<double> *> &constraintsVector,
94 const dealii::AffineConstraints<double> &onlyHangingNodeConstraints,
95 const dealii::DoFHandler<3> &dofHandler,
96 const dealii::AffineConstraints<double> &constraintMatrix,
97 const std::vector<std::vector<double>> &atomLocations,
98 const std::vector<std::vector<double>> &imagePositions,
99 const std::vector<dftfe::Int> &imageIds,
100 const std::vector<double> &imageCharges,
101 const bool vselfPerturbationUpdateForStress =
false);
121 const std::shared_ptr<
123 FEBasisOperations<double, double, dftfe::utils::MemorySpace::HOST>>
127 const dealii::AffineConstraints<double> &hangingPeriodicConstraintMatrix,
128 const std::vector<std::vector<double>> &imagePositions,
129 const std::vector<dftfe::Int> &imageIds,
130 const std::vector<double> &imageCharges,
131 std::vector<std::vector<double>> &localVselfs,
132 std::map<dealii::CellId, std::vector<double>> &bQuadValuesAllAtoms,
133 std::map<dealii::CellId, std::vector<dftfe::Int>> &bQuadAtomIdsAllAtoms,
134 std::map<dealii::CellId, std::vector<dftfe::Int>>
135 &bQuadAtomIdsAllAtomsImages,
136 std::map<dealii::CellId, std::vector<dftfe::uInt>>
137 &bCellNonTrivialAtomIds,
138 std::vector<std::map<dealii::CellId, std::vector<dftfe::uInt>>>
139 &bCellNonTrivialAtomIdsBins,
140 std::map<dealii::CellId, std::vector<dftfe::uInt>>
141 &bCellNonTrivialAtomImageIds,
142 std::vector<std::map<dealii::CellId, std::vector<dftfe::uInt>>>
143 &bCellNonTrivialAtomImageIdsBins,
144 const std::vector<double> &smearingWidths,
145 std::vector<double> &smearedChargeScaling,
147 const bool useSmearedCharges =
false,
148 const bool isVselfPerturbationSolve =
false);
150# ifdef DFTFE_WITH_DEVICE
167 solveVselfInBinsDevice(
168 const std::shared_ptr<
170 FEBasisOperations<double, double, dftfe::utils::MemorySpace::HOST>>
177 &cellGradNIGradNJIntergralDevice,
178 const std::shared_ptr<
181 const dealii::AffineConstraints<double> &hangingPeriodicConstraintMatrix,
182 const std::vector<std::vector<double>> &imagePositions,
183 const std::vector<dftfe::Int> &imageIds,
184 const std::vector<double> &imageCharges,
185 std::vector<std::vector<double>> &localVselfs,
186 std::map<dealii::CellId, std::vector<double>> &bQuadValuesAllAtoms,
187 std::map<dealii::CellId, std::vector<dftfe::Int>> &bQuadAtomIdsAllAtoms,
188 std::map<dealii::CellId, std::vector<dftfe::Int>>
189 &bQuadAtomIdsAllAtomsImages,
190 std::map<dealii::CellId, std::vector<dftfe::uInt>>
191 &bCellNonTrivialAtomIds,
192 std::vector<std::map<dealii::CellId, std::vector<dftfe::uInt>>>
193 &bCellNonTrivialAtomIdsBins,
194 std::map<dealii::CellId, std::vector<dftfe::uInt>>
195 &bCellNonTrivialAtomImageIds,
196 std::vector<std::map<dealii::CellId, std::vector<dftfe::uInt>>>
197 &bCellNonTrivialAtomImageIdsBins,
198 const std::vector<double> &smearingWidths,
199 std::vector<double> &smearedChargeScaling,
201 const bool useSmearedCharges =
false,
202 const bool isVselfPerturbationSolve =
false);
213 const std::shared_ptr<
215 FEBasisOperations<double, double, dftfe::utils::MemorySpace::HOST>>
220# ifdef DFTFE_WITH_DEVICE
223 &cellGradNIGradNJIntergralDevice,
224 const std::shared_ptr<
228 const dealii::AffineConstraints<double> &hangingPeriodicConstraintMatrix,
229 const std::vector<std::vector<double>> &imagePositions,
230 const std::vector<dftfe::Int> &imageIds,
231 const std::vector<double> &imageCharges,
232 const std::vector<double> &smearingWidths,
234 const bool useSmearedCharges =
false);
237 const std::map<dftfe::Int, std::set<dftfe::Int>> &
241 const std::map<dftfe::Int, std::set<dftfe::Int>> &
246 const std::vector<std::map<dealii::types::global_dof_index, dftfe::Int>> &
251 const std::vector<std::map<dealii::types::global_dof_index, dftfe::Int>> &
256 const std::vector<std::map<dealii::types::global_dof_index, dftfe::Int>> &
262 std::map<dealii::types::global_dof_index, dealii::Point<3>>> &
266 const std::vector<distributedCPUVec<double>> &
270 const std::vector<distributedCPUVec<double>> &
276 const std::vector<distributedCPUVec<double>> &
280 const std::map<dftfe::uInt, dftfe::uInt> &
302 const dealii::DoFHandler<3> &dofHandler,
303 const dealii::AffineConstraints<double> &onlyHangingNodeConstraints);
316 std::map<dftfe::Int, std::set<dftfe::Int>>
d_bins;
323 std::vector<std::map<dealii::types::global_dof_index, dftfe::Int>>
328 std::vector<std::map<dealii::types::global_dof_index, dftfe::Int>>
332 std::vector<std::map<dealii::types::global_dof_index, dealii::Point<3>>>
336 std::vector<std::map<dealii::types::global_dof_index, double>>
340 std::vector<std::map<dealii::types::global_dof_index, dftfe::Int>>
362 std::vector<std::map<dealii::types::global_dof_index, double>>
d_atomsInBin;
void solveVselfInBins(const std::shared_ptr< dftfe::basis::FEBasisOperations< double, double, dftfe::utils::MemorySpace::HOST > > &basisOperationsPtr, const dftfe::uInt offset, const dftfe::uInt matrixFreeQuadratureIdAX, const dealii::AffineConstraints< double > &hangingPeriodicConstraintMatrix, const std::vector< std::vector< double > > &imagePositions, const std::vector< dftfe::Int > &imageIds, const std::vector< double > &imageCharges, std::vector< std::vector< double > > &localVselfs, std::map< dealii::CellId, std::vector< double > > &bQuadValuesAllAtoms, std::map< dealii::CellId, std::vector< dftfe::Int > > &bQuadAtomIdsAllAtoms, std::map< dealii::CellId, std::vector< dftfe::Int > > &bQuadAtomIdsAllAtomsImages, std::map< dealii::CellId, std::vector< dftfe::uInt > > &bCellNonTrivialAtomIds, std::vector< std::map< dealii::CellId, std::vector< dftfe::uInt > > > &bCellNonTrivialAtomIdsBins, std::map< dealii::CellId, std::vector< dftfe::uInt > > &bCellNonTrivialAtomImageIds, std::vector< std::map< dealii::CellId, std::vector< dftfe::uInt > > > &bCellNonTrivialAtomImageIdsBins, const std::vector< double > &smearingWidths, std::vector< double > &smearedChargeScaling, const dftfe::uInt smearedChargeQuadratureId, const bool useSmearedCharges=false, const bool isVselfPerturbationSolve=false)
Solve nuclear electrostatic self-potential of atoms in each bin one-by-one.