45 const MPI_Comm & mpi_comm_domain,
46 const MPI_Comm & mpi_intercomm_kpts,
68 std::vector<
const dealii::AffineConstraints<double> *> &constraintsVector,
69 const dealii::AffineConstraints<double> &onlyHangingNodeConstraints,
70 const dealii::DoFHandler<3> & dofHandler,
71 const dealii::AffineConstraints<double> &constraintMatrix,
72 const std::vector<std::vector<double>> & atomLocations,
73 const std::vector<std::vector<double>> & imagePositions,
74 const std::vector<int> & imageIds,
75 const std::vector<double> & imageCharges,
76 const double radiusAtomBall);
95 std::vector<
const dealii::AffineConstraints<double> *> &constraintsVector,
96 const dealii::AffineConstraints<double> &onlyHangingNodeConstraints,
97 const dealii::DoFHandler<3> & dofHandler,
98 const dealii::AffineConstraints<double> &constraintMatrix,
99 const std::vector<std::vector<double>> & atomLocations,
100 const std::vector<std::vector<double>> & imagePositions,
101 const std::vector<int> & imageIds,
102 const std::vector<double> & imageCharges,
103 const bool vselfPerturbationUpdateForStress =
false);
123 const std::shared_ptr<
125 FEBasisOperations<double, double, dftfe::utils::MemorySpace::HOST>>
126 & basisOperationsPtr,
127 const unsigned int offset,
128 const unsigned int matrixFreeQuadratureIdAX,
129 const dealii::AffineConstraints<double> &hangingPeriodicConstraintMatrix,
130 const std::vector<std::vector<double>> & imagePositions,
131 const std::vector<int> & imageIds,
132 const std::vector<double> & imageCharges,
133 std::vector<std::vector<double>> & localVselfs,
134 std::map<dealii::CellId, std::vector<double>> &bQuadValuesAllAtoms,
135 std::map<dealii::CellId, std::vector<int>> & bQuadAtomIdsAllAtoms,
136 std::map<dealii::CellId, std::vector<int>> & bQuadAtomIdsAllAtomsImages,
137 std::map<dealii::CellId, std::vector<unsigned int>>
138 &bCellNonTrivialAtomIds,
139 std::vector<std::map<dealii::CellId, std::vector<unsigned int>>>
140 &bCellNonTrivialAtomIdsBins,
141 std::map<dealii::CellId, std::vector<unsigned int>>
142 &bCellNonTrivialAtomImageIds,
143 std::vector<std::map<dealii::CellId, std::vector<unsigned int>>>
144 & bCellNonTrivialAtomImageIdsBins,
145 const std::vector<double> &smearingWidths,
146 std::vector<double> & smearedChargeScaling,
147 const unsigned int smearedChargeQuadratureId,
148 const bool useSmearedCharges =
false,
149 const bool isVselfPerturbationSolve =
false);
151# ifdef DFTFE_WITH_DEVICE
168 solveVselfInBinsDevice(
169 const std::shared_ptr<
171 FEBasisOperations<double, double, dftfe::utils::MemorySpace::HOST>>
172 & basisOperationsPtr,
173 const unsigned int mfBaseDofHandlerIndex,
174 const unsigned int matrixFreeQuadratureIdAX,
175 const unsigned int offset,
178 &cellGradNIGradNJIntergralDevice,
179 const std::shared_ptr<
182 const dealii::AffineConstraints<double> &hangingPeriodicConstraintMatrix,
183 const std::vector<std::vector<double>> & imagePositions,
184 const std::vector<int> & imageIds,
185 const std::vector<double> & imageCharges,
186 std::vector<std::vector<double>> & localVselfs,
187 std::map<dealii::CellId, std::vector<double>> &bQuadValuesAllAtoms,
188 std::map<dealii::CellId, std::vector<int>> & bQuadAtomIdsAllAtoms,
189 std::map<dealii::CellId, std::vector<int>> & bQuadAtomIdsAllAtomsImages,
190 std::map<dealii::CellId, std::vector<unsigned int>>
191 &bCellNonTrivialAtomIds,
192 std::vector<std::map<dealii::CellId, std::vector<unsigned int>>>
193 &bCellNonTrivialAtomIdsBins,
194 std::map<dealii::CellId, std::vector<unsigned int>>
195 &bCellNonTrivialAtomImageIds,
196 std::vector<std::map<dealii::CellId, std::vector<unsigned int>>>
197 & bCellNonTrivialAtomImageIdsBins,
198 const std::vector<double> &smearingWidths,
199 std::vector<double> & smearedChargeScaling,
200 const unsigned int smearedChargeQuadratureId,
201 const bool useSmearedCharges =
false,
202 const bool isVselfPerturbationSolve =
false);
213 const std::shared_ptr<
215 FEBasisOperations<double, double, dftfe::utils::MemorySpace::HOST>>
216 & basisOperationsPtr,
217 const unsigned int mfBaseDofHandlerIndex,
218 const unsigned int matrixFreeQuadratureIdAX,
219 const unsigned int offset,
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<int> & imageIds,
231 const std::vector<double> & imageCharges,
232 const std::vector<double> & smearingWidths,
233 const unsigned int smearedChargeQuadratureId,
234 const bool useSmearedCharges =
false);
237 const std::map<int, std::set<int>> &
241 const std::map<int, std::set<int>> &
246 const std::vector<std::map<dealii::types::global_dof_index, int>> &
251 const std::vector<std::map<dealii::types::global_dof_index, int>> &
256 const std::vector<std::map<dealii::types::global_dof_index, 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<unsigned int, unsigned int> &
302 const dealii::DoFHandler<3> & dofHandler,
303 const dealii::AffineConstraints<double> &onlyHangingNodeConstraints);
327 std::vector<std::map<dealii::types::global_dof_index, int>>
331 std::vector<std::map<dealii::types::global_dof_index, dealii::Point<3>>>
335 std::vector<std::map<dealii::types::global_dof_index, double>>
339 std::vector<std::map<dealii::types::global_dof_index, int>>
361 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 unsigned int offset, const unsigned int matrixFreeQuadratureIdAX, const dealii::AffineConstraints< double > &hangingPeriodicConstraintMatrix, const std::vector< std::vector< double > > &imagePositions, const std::vector< 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< int > > &bQuadAtomIdsAllAtoms, std::map< dealii::CellId, std::vector< int > > &bQuadAtomIdsAllAtomsImages, std::map< dealii::CellId, std::vector< unsigned int > > &bCellNonTrivialAtomIds, std::vector< std::map< dealii::CellId, std::vector< unsigned int > > > &bCellNonTrivialAtomIdsBins, std::map< dealii::CellId, std::vector< unsigned int > > &bCellNonTrivialAtomImageIds, std::vector< std::map< dealii::CellId, std::vector< unsigned int > > > &bCellNonTrivialAtomImageIdsBins, const std::vector< double > &smearingWidths, std::vector< double > &smearedChargeScaling, const unsigned int smearedChargeQuadratureId, const bool useSmearedCharges=false, const bool isVselfPerturbationSolve=false)
Solve nuclear electrostatic self-potential of atoms in each bin one-by-one.