DFT-FE 1.3.0-pre
Density Functional Theory With Finite-Elements
Loading...
Searching...
No Matches
configurationalForce.h
Go to the documentation of this file.
1// ---------------------------------------------------------------------
2//
3// Copyright (c) 2017-2025 The Regents of the University of Michigan and DFT-FE
4// authors.
5//
6// This file is part of the DFT-FE code.
7//
8// The DFT-FE code is free software; you can use it, redistribute
9// it, and/or modify it under the terms of the GNU Lesser General
10// Public License as published by the Free Software Foundation; either
11// version 2.1 of the License, or (at your option) any later version.
12// The full text of the license can be found in the file LICENSE at
13// the top level of the DFT-FE distribution.
14//
15// ---------------------------------------------------------------------
16
17
18#ifndef configurationalForce_H_
19#define configurationalForce_H_
20
21#include <dftd.h>
22#include <oncvClass.h>
24#include <FEBasisOperations.h>
25#include <BLASWrapper.h>
26#include <vselfBinsManager.h>
27#include <groupSymmetry.h>
28namespace dftfe
29{
30 template <dftfe::utils::MemorySpace memorySpace>
32 {
33 public:
36 BLASWrapperPtr,
37 std::shared_ptr<
39 BLASWrapperPtrHost,
40 const MPI_Comm &mpi_comm_parent,
41 const MPI_Comm &mpi_comm_domain,
42 const MPI_Comm &interpoolcomm,
43 const MPI_Comm &interBandGroupComm,
44 const dftParameters &dftParams);
45
46 void
48 const dealii::parallel::distributed::Triangulation<3>
49 &unmovedTriangulation,
50 const dealii::Triangulation<3, 3> &serialUnmovedTriangulation,
51 const std::vector<std::vector<double>> &domainBoundingVectors);
52
53
54 void
56 std::shared_ptr<
58 basisOperationsPtr,
59 std::shared_ptr<
61 double,
63 basisOperationsPtrHost,
64 std::shared_ptr<
66 basisOperationsPtrElectro,
67 std::shared_ptr<
69 FEBasisOperations<double, double, dftfe::utils::MemorySpace::HOST>>
70 basisOperationsPtrElectroHost,
71 std::shared_ptr<
73 pseudopotentialClassPtr,
74 std::shared_ptr<excManager<memorySpace>> excManagerPtr,
75 const dftfe::uInt densityQuadratureId,
76 const dftfe::uInt densityQuadratureIdElectro,
77 const dftfe::uInt lpspQuadratureId,
78 const dftfe::uInt lpspQuadratureIdElectro,
79 const dftfe::uInt nlpspQuadratureId,
80 const dftfe::uInt smearedChargeQuadratureIdElectro);
81 void
83 const dftfe::uInt &numEigenValues,
84 const std::vector<double> &kPointCoords,
85 const std::vector<double> &kPointWeights,
86 const std::vector<std::vector<double>> &domainBoundingVectors,
87 const double domainVolume,
88 const std::shared_ptr<groupSymmetryClass> &groupSymmetryPtr,
89 const dispersionCorrection &dispersionCorr,
91 &eigenVectors,
92 const std::vector<std::vector<double>> &eigenValues,
93 const std::vector<std::vector<double>> &partialOccupancies,
94 const std::vector<std::vector<double>> &atomLocations,
95 const std::vector<dftfe::Int> &imageIds,
96 const std::vector<double> &imageCharges,
97 const std::vector<std::vector<double>> &imagePositions,
98 const distributedCPUVec<double> &phiTotRhoOutValues,
99 const distributedCPUVec<double> &rhoOutNodalValues,
100 const std::vector<
102 &densityOutValues,
103 const std::vector<
105 &gradDensityOutValues,
106 const std::vector<
108 &tauOutValues,
110 &rhoTotalOutValuesLpsp,
112 &gradRhoTotalOutValuesLpsp,
113 const std::shared_ptr<AuxDensityMatrix<memorySpace>>
114 auxDensityXCOutRepresentationPtr,
115 const std::map<dealii::CellId, std::vector<double>> &rhoCoreValues,
116 const std::map<dealii::CellId, std::vector<double>> &gradRhoCoreValues,
117 const std::map<dealii::CellId, std::vector<double>> &hessianRhoCoreValues,
118 const std::map<dftfe::uInt, std::map<dealii::CellId, std::vector<double>>>
119 &gradRhoCoreAtoms,
120 const std::map<dftfe::uInt, std::map<dealii::CellId, std::vector<double>>>
121 &hessianRhoCoreAtoms,
122 const std::map<dealii::CellId, std::vector<double>> &pseudoVLocValues,
123 const std::map<dftfe::uInt, std::map<dealii::CellId, std::vector<double>>>
124 &pseudoVLocAtoms,
125 const dealii::DoFHandler<3> &dofHandlerRhoNodal,
127 const std::vector<distributedCPUVec<double>>
128 &vselfFieldGateauxDerStrainFDBins,
129 const dftfe::uInt &binsStartDofHandlerIndexElectro,
130 const std::map<dealii::CellId, std::vector<dftfe::Int>>
131 &bQuadAtomIdsAllAtoms,
132 const std::map<dealii::CellId, std::vector<dftfe::Int>>
133 &bQuadAtomIdsAllAtomsImages,
134 const std::map<dealii::CellId, std::vector<double>> &bQuadValuesAllAtoms,
135 const std::vector<double> &smearedChargeWidths,
136 const std::vector<double> &smearedChargeScaling,
137 const std::vector<double> &gaussianConstantsForce,
138 const std::vector<double> &generatorFlatTopWidths,
139 const bool floatingNuclearCharges,
140 const bool computeForce,
141 const bool computeStress);
142
143 void
145
146 void
148
149 std::vector<double> &
151
152 dealii::Tensor<2, 3, double> &
154
155
156 private:
157 void
159 std::shared_ptr<
161 nonLocalOperator,
162 const CouplingStructure couplingtype,
163 const std::vector<
165 &couplingMatrixPtrs,
166 const std::map<dftfe::uInt, dftfe::uInt> nonlocalAtomIdToGlobalIdMap,
167 const dftfe::uInt &numEigenValues,
168 const std::vector<double> &kPointCoords,
169 const std::vector<double> &kPointWeights,
171 &eigenVectors,
172 const std::vector<std::vector<double>> &eigenValues,
173 const std::vector<std::vector<double>> &partialOccupancies,
174 const bool floatingNuclearCharges,
175 const bool computeForce,
176 const bool computeStress);
177
178 void
180 std::shared_ptr<
182 nonLocalOperator,
183 const CouplingStructure couplingtype,
184 const std::vector<
186 &couplingMatrixPtrs,
187 const std::map<dftfe::uInt, dftfe::uInt> nonlocalAtomIdToGlobalIdMap,
188 const dftfe::uInt &numEigenValues,
189 const std::vector<double> &kPointCoords,
190 const std::vector<double> &kPointWeights,
192 &eigenVectors,
193 const std::vector<std::vector<double>> &eigenValues,
194 const std::vector<std::vector<double>> &partialOccupancies,
195 const bool floatingNuclearCharges,
196 const bool computeForce,
197 const bool computeStress);
198
199 void
201 const dftfe::uInt &numEigenValues,
202 const std::vector<double> &kPointCoords,
203 const std::vector<double> &kPointWeights,
205 &eigenVectors,
206 const std::vector<std::vector<double>> &eigenValues,
207 const std::vector<std::vector<double>> &partialOccupancies,
208 const bool floatingNuclearCharges,
209 const std::shared_ptr<AuxDensityMatrix<memorySpace>>
210 auxDensityXCOutRepresentationPtr,
211 const bool computeForce,
212 const bool computeStress);
213
214 void
216 const distributedCPUVec<double> &phiTotRhoOutValues,
218 &rhooutValues,
219 const bool floatingNuclearCharges,
220 const bool computeForce,
221 const bool computeStress);
222
223 void
225 const std::vector<std::vector<double>> &atomLocations,
226 const std::vector<dftfe::Int> &imageIds,
227 const std::vector<double> &imageCharges,
228 const std::vector<std::vector<double>> &imagePositions,
230 const bool floatingNuclearCharges,
231 const bool computeForce,
232 const bool computeStress);
233
234 void
236 const std::vector<std::vector<double>> &atomLocations,
237 const std::vector<std::vector<double>> &imagePositions,
239 const dftfe::uInt &binsStartDofHandlerIndexElectro,
240 const distributedCPUVec<double> &phiTotRhoOutValues,
241 const std::map<dealii::CellId, std::vector<dftfe::Int>>
242 &bQuadAtomIdsAllAtoms,
243 const std::map<dealii::CellId, std::vector<dftfe::Int>>
244 &bQuadAtomIdsAllAtomsImages,
245 const std::map<dealii::CellId, std::vector<double>> &bQuadValuesAllAtoms,
246 const bool floatingNuclearCharges,
247 const bool computeForce,
248 const bool computeStress);
249
250 void
252 const std::vector<std::vector<double>> &atomLocations,
253 const std::vector<dftfe::Int> &imageIds,
254 const std::vector<double> &imageCharges,
255 const std::vector<std::vector<double>> &imagePositions,
256 const distributedCPUVec<double> &rhoOutNodalValues,
258 &rhoTotalOutValuesLpsp,
260 &gradRhoTotalOutValuesLpsp,
261 const std::map<dealii::CellId, std::vector<double>> &pseudoVLocValues,
262 const std::map<dftfe::uInt, std::map<dealii::CellId, std::vector<double>>>
263 &pseudoVLocAtoms,
264 const dealii::DoFHandler<3> &dofHandlerRhoNodal,
266 const std::vector<distributedCPUVec<double>>
267 &vselfFieldGateauxDerStrainFDBins,
268 const std::vector<double> &smearedChargeWidths,
269 const std::vector<double> &smearedChargeScaling,
270 const bool floatingNuclearCharges,
271 const bool computeForce,
272 const bool computeStress);
273
274 void
276 const std::vector<std::vector<double>> &atomLocations,
277 const std::vector<dftfe::Int> &imageIds,
278 const std::vector<std::vector<double>> &imagePositions,
279 const std::vector<
281 &densityOutValues,
282 const std::vector<
284 &gradDensityOutValues,
285 const std::vector<
287 &tauOutValues,
288 const std::shared_ptr<AuxDensityMatrix<memorySpace>>
289 auxDensityXCOutRepresentationPtr,
290 const std::map<dealii::CellId, std::vector<double>> &rhoCoreValues,
291 const std::map<dealii::CellId, std::vector<double>> &gradRhoCoreValues,
292 const std::map<dftfe::uInt, std::map<dealii::CellId, std::vector<double>>>
293 &gradRhoCoreAtoms,
294 const std::map<dftfe::uInt, std::map<dealii::CellId, std::vector<double>>>
295 &hessianRhoCoreAtoms,
296 const bool floatingNuclearCharges,
297 const bool computeForce,
298 const bool computeStress);
299
300
301 void
303 const dealii::DoFHandler<3> &dofHandlerRhoNodal,
305 std::vector<std::vector<dealii::DoFHandler<3>::active_cell_iterator>>
306 &cellsVselfBallsDofHandler,
307 std::vector<std::vector<dealii::DoFHandler<3>::active_cell_iterator>>
308 &cellsVselfBallsDofHandlerForce,
309 std::vector<std::map<dealii::CellId, dftfe::uInt>>
310 &cellsVselfBallsClosestAtomIdDofHandler,
311 std::map<dftfe::uInt, dftfe::uInt> &AtomIdBinIdLocalDofHandler,
312 std::vector<std::map<dealii::DoFHandler<3>::active_cell_iterator,
313 std::vector<dftfe::uInt>>>
314 &cellFacesVselfBallSurfacesDofHandler,
315 std::vector<std::map<dealii::DoFHandler<3>::active_cell_iterator,
316 std::vector<dftfe::uInt>>>
317 &cellFacesVselfBallSurfacesDofHandlerForce);
318
319 void
321 const std::vector<std::vector<double>> &atomLocations,
322 const std::vector<dftfe::Int> &imageIds,
323 const std::vector<std::vector<double>> &imagePositions,
324 const std::vector<double> &gaussianConstantsForce,
325 const std::vector<double> &generatorFlatTopWidths,
326 const distributedCPUVec<double> &configForceVectorLinFE,
327 const MPI_Comm mpiComm,
329 &forceContrib);
330 std::shared_ptr<dftfe::linearAlgebra::BLASWrapper<memorySpace>>
332 std::shared_ptr<
335 std::shared_ptr<
338 std::shared_ptr<
340 double,
343 std::shared_ptr<
346 std::shared_ptr<
347 dftfe::basis::
348 FEBasisOperations<double, double, dftfe::utils::MemorySpace::HOST>>
350 std::shared_ptr<
353
354 std::shared_ptr<excManager<memorySpace>> d_excManagerPtr;
355
360
361 std::vector<double> d_forceVector;
362 dealii::Tensor<2, 3, double> d_stressTensor;
363
364 const MPI_Comm d_mpiCommParent;
365 const MPI_Comm d_mpiCommDomain;
366 const MPI_Comm d_mpiCommInterPool;
371 dealii::ConditionalOStream pcout;
372
379
380
381 /// Internal data: stores cell iterators of all cells in
382 /// dftPtr->d_dofHandler which are part of the vself ball. Outer vector is
383 /// over vself bins.
384 std::vector<std::vector<dealii::DoFHandler<3>::active_cell_iterator>>
386
387 /// Internal data: stores cell iterators of all cells in d_dofHandlerForce
388 /// which are part of the vself ball. Outer vector is over vself bins.
389 std::vector<std::vector<dealii::DoFHandler<3>::active_cell_iterator>>
391
392 /// Internal data: stores map of vself ball cell Id to the closest atom Id
393 /// of that cell. Outer vector over vself bins.
394 std::vector<std::map<dealii::CellId, dftfe::uInt>>
396
397 /// Internal data: stores the map of atom Id (only in the local processor)
398 /// to the vself bin Id.
399 std::map<dftfe::uInt, dftfe::uInt> d_AtomIdBinIdLocalDofHandlerElectro;
400
401 /* Internal data: stores the face ids of dftPtr->d_dofHandler (single
402 * component field) on which to evaluate the vself ball surface integral in
403 * the configurational force expression. Outer vector is over the vself
404 * bins. Inner map is between the cell iterator and the vector of face ids
405 * to integrate on for that cell iterator.
406 */
407 std::vector<std::map<dealii::DoFHandler<3>::active_cell_iterator,
408 std::vector<dftfe::uInt>>>
410
411 /* Internal data: stores the face ids of d_dofHandlerForce (three component
412 * field) on which to evaluate the vself ball surface integral in the
413 * configurational force expression. Outer vector is over the vself bins.
414 * Inner map is between the cell iterator and the vector of face ids to
415 * integrate on for that cell iterator.
416 */
417 std::vector<std::map<dealii::DoFHandler<3>::active_cell_iterator,
418 std::vector<dftfe::uInt>>>
420
421 std::map<dealii::CellId, dealii::DoFHandler<3>::active_cell_iterator>
423
424 /// Finite element object for configurational force computation. Linear
425 /// finite elements with three force field components are used.
426 dealii::FESystem<3> FEForce;
427 dealii::AffineConstraints<double> d_affineConstraintsForce;
428 dealii::DoFHandler<3> d_dofHandlerForce;
432
433 dealii::TimerOutput computing_timer;
434 };
435 void
437 std::shared_ptr<
439 &BLASWrapperPtr,
440 const std::pair<dftfe::uInt, dftfe::uInt> cellRange,
441 const std::pair<dftfe::uInt, dftfe::uInt> vecRange,
442 const dftfe::uInt nQuadsPerCell,
443 const double kcoordx,
444 const double kcoordy,
445 const double kcoordz,
446 double *partialOccupVec,
447 double *eigenValuesVec,
448 dataTypes::number *wfcQuadPointData,
449 dataTypes::number *gradWfcQuadPointData,
450 double *eshelbyContributions,
451 double *eshelbyTensor,
452 const bool floatingNuclearCharges,
453 const bool isTauMGGA,
454 double *pdexTauLocallyOwnedCellsBlock,
455 double *pdecTauLocallyOwnedCellsBlock,
456 const bool computeForce,
457 const bool computeStress);
458 void
460 std::shared_ptr<
462 &BLASWrapperPtr,
463 const dftfe::uInt wfcBlockSize,
464 const dftfe::uInt blockSizeNlp,
465 const dftfe::uInt numQuadsNLP,
466 const dftfe::uInt startingIdNlp,
467 const dataTypes::number *projectorKetTimesVectorPar,
468 const dataTypes::number *gradPsiOrPsiQuadValuesNLP,
469 const dftfe::uInt *nonTrivialIdToElemIdMap,
470 const dftfe::uInt *projecterKetTimesFlattenedVectorLocalIds,
471 dataTypes::number *nlpContractionContribution);
472
473} // namespace dftfe
474#endif
Definition AtomicCenteredNonLocalOperator.h:66
Definition AuxDensityMatrix.h:40
Definition FEBasisOperations.h:85
std::vector< double > & getAtomsForces()
const dftfe::uInt n_mpi_processes
Definition configurationalForce.h:369
void computeWfcContribNloc(std::shared_ptr< AtomicCenteredNonLocalOperator< dataTypes::number, memorySpace > > nonLocalOperator, const CouplingStructure couplingtype, const std::vector< const dftfe::utils::MemoryStorage< dataTypes::number, memorySpace > * > &couplingMatrixPtrs, const std::map< dftfe::uInt, dftfe::uInt > nonlocalAtomIdToGlobalIdMap, const dftfe::uInt &numEigenValues, const std::vector< double > &kPointCoords, const std::vector< double > &kPointWeights, const dftfe::utils::MemoryStorage< dataTypes::number, memorySpace > &eigenVectors, const std::vector< std::vector< double > > &eigenValues, const std::vector< std::vector< double > > &partialOccupancies, const bool floatingNuclearCharges, const bool computeForce, const bool computeStress)
std::shared_ptr< excManager< memorySpace > > d_excManagerPtr
Definition configurationalForce.h:354
dftfe::utils::MemoryStorage< double, dftfe::utils::MemorySpace::HOST > d_forceTotal
Definition configurationalForce.h:357
void computeXCContribAll(const std::vector< std::vector< double > > &atomLocations, const std::vector< dftfe::Int > &imageIds, const std::vector< std::vector< double > > &imagePositions, const std::vector< dftfe::utils::MemoryStorage< double, dftfe::utils::MemorySpace::HOST > > &densityOutValues, const std::vector< dftfe::utils::MemoryStorage< double, dftfe::utils::MemorySpace::HOST > > &gradDensityOutValues, const std::vector< dftfe::utils::MemoryStorage< double, dftfe::utils::MemorySpace::HOST > > &tauOutValues, const std::shared_ptr< AuxDensityMatrix< memorySpace > > auxDensityXCOutRepresentationPtr, const std::map< dealii::CellId, std::vector< double > > &rhoCoreValues, const std::map< dealii::CellId, std::vector< double > > &gradRhoCoreValues, const std::map< dftfe::uInt, std::map< dealii::CellId, std::vector< double > > > &gradRhoCoreAtoms, const std::map< dftfe::uInt, std::map< dealii::CellId, std::vector< double > > > &hessianRhoCoreAtoms, const bool floatingNuclearCharges, const bool computeForce, const bool computeStress)
std::shared_ptr< dftfe::linearAlgebra::BLASWrapper< dftfe::utils::MemorySpace::HOST > > d_BLASWrapperPtrHost
Definition configurationalForce.h:334
void computeESelfContribEshelby(const std::vector< std::vector< double > > &atomLocations, const std::vector< dftfe::Int > &imageIds, const std::vector< double > &imageCharges, const std::vector< std::vector< double > > &imagePositions, const vselfBinsManager &vselfBinsManager, const bool floatingNuclearCharges, const bool computeForce, const bool computeStress)
std::map< dealii::CellId, dealii::DoFHandler< 3 >::active_cell_iterator > d_cellIdToActiveCellIteratorMapDofHandlerRhoNodalElectro
Definition configurationalForce.h:422
distributedCPUVec< double > d_configForceContribsLinFE
Definition configurationalForce.h:430
configurationalForceClass(std::shared_ptr< dftfe::linearAlgebra::BLASWrapper< memorySpace > > BLASWrapperPtr, std::shared_ptr< dftfe::linearAlgebra::BLASWrapper< dftfe::utils::MemorySpace::HOST > > BLASWrapperPtrHost, const MPI_Comm &mpi_comm_parent, const MPI_Comm &mpi_comm_domain, const MPI_Comm &interpoolcomm, const MPI_Comm &interBandGroupComm, const dftParameters &dftParams)
void computeForceAndStress(const dftfe::uInt &numEigenValues, const std::vector< double > &kPointCoords, const std::vector< double > &kPointWeights, const std::vector< std::vector< double > > &domainBoundingVectors, const double domainVolume, const std::shared_ptr< groupSymmetryClass > &groupSymmetryPtr, const dispersionCorrection &dispersionCorr, const dftfe::utils::MemoryStorage< dataTypes::number, memorySpace > &eigenVectors, const std::vector< std::vector< double > > &eigenValues, const std::vector< std::vector< double > > &partialOccupancies, const std::vector< std::vector< double > > &atomLocations, const std::vector< dftfe::Int > &imageIds, const std::vector< double > &imageCharges, const std::vector< std::vector< double > > &imagePositions, const distributedCPUVec< double > &phiTotRhoOutValues, const distributedCPUVec< double > &rhoOutNodalValues, const std::vector< dftfe::utils::MemoryStorage< double, dftfe::utils::MemorySpace::HOST > > &densityOutValues, const std::vector< dftfe::utils::MemoryStorage< double, dftfe::utils::MemorySpace::HOST > > &gradDensityOutValues, const std::vector< dftfe::utils::MemoryStorage< double, dftfe::utils::MemorySpace::HOST > > &tauOutValues, const dftfe::utils::MemoryStorage< double, dftfe::utils::MemorySpace::HOST > &rhoTotalOutValuesLpsp, const dftfe::utils::MemoryStorage< double, dftfe::utils::MemorySpace::HOST > &gradRhoTotalOutValuesLpsp, const std::shared_ptr< AuxDensityMatrix< memorySpace > > auxDensityXCOutRepresentationPtr, const std::map< dealii::CellId, std::vector< double > > &rhoCoreValues, const std::map< dealii::CellId, std::vector< double > > &gradRhoCoreValues, const std::map< dealii::CellId, std::vector< double > > &hessianRhoCoreValues, const std::map< dftfe::uInt, std::map< dealii::CellId, std::vector< double > > > &gradRhoCoreAtoms, const std::map< dftfe::uInt, std::map< dealii::CellId, std::vector< double > > > &hessianRhoCoreAtoms, const std::map< dealii::CellId, std::vector< double > > &pseudoVLocValues, const std::map< dftfe::uInt, std::map< dealii::CellId, std::vector< double > > > &pseudoVLocAtoms, const dealii::DoFHandler< 3 > &dofHandlerRhoNodal, const vselfBinsManager &vselfBinsManager, const std::vector< distributedCPUVec< double > > &vselfFieldGateauxDerStrainFDBins, const dftfe::uInt &binsStartDofHandlerIndexElectro, const std::map< dealii::CellId, std::vector< dftfe::Int > > &bQuadAtomIdsAllAtoms, const std::map< dealii::CellId, std::vector< dftfe::Int > > &bQuadAtomIdsAllAtomsImages, const std::map< dealii::CellId, std::vector< double > > &bQuadValuesAllAtoms, const std::vector< double > &smearedChargeWidths, const std::vector< double > &smearedChargeScaling, const std::vector< double > &gaussianConstantsForce, const std::vector< double > &generatorFlatTopWidths, const bool floatingNuclearCharges, const bool computeForce, const bool computeStress)
const MPI_Comm d_mpiCommInterBandGroup
Definition configurationalForce.h:367
std::vector< std::vector< dealii::DoFHandler< 3 >::active_cell_iterator > > d_cellsVselfBallsDofHandlerElectro
Definition configurationalForce.h:385
const MPI_Comm d_mpiCommParent
Definition configurationalForce.h:364
dealii::ConditionalOStream pcout
Definition configurationalForce.h:371
dftfe::uInt d_smearedChargeQuadratureIdElectro
Definition configurationalForce.h:378
const MPI_Comm d_mpiCommDomain
Definition configurationalForce.h:365
std::shared_ptr< dftfe::linearAlgebra::BLASWrapper< memorySpace > > d_BLASWrapperPtr
Definition configurationalForce.h:331
std::vector< std::vector< dealii::DoFHandler< 3 >::active_cell_iterator > > d_cellsVselfBallsDofHandlerForceElectro
Definition configurationalForce.h:390
dealii::Tensor< 2, 3, double > & getStress()
std::shared_ptr< dftfe::basis::FEBasisOperations< dataTypes::number, double, memorySpace > > d_basisOperationsPtr
Definition configurationalForce.h:337
void computeSmearedContribAll(const std::vector< std::vector< double > > &atomLocations, const std::vector< std::vector< double > > &imagePositions, const vselfBinsManager &vselfBinsManager, const dftfe::uInt &binsStartDofHandlerIndexElectro, const distributedCPUVec< double > &phiTotRhoOutValues, const std::map< dealii::CellId, std::vector< dftfe::Int > > &bQuadAtomIdsAllAtoms, const std::map< dealii::CellId, std::vector< dftfe::Int > > &bQuadAtomIdsAllAtomsImages, const std::map< dealii::CellId, std::vector< double > > &bQuadValuesAllAtoms, const bool floatingNuclearCharges, const bool computeForce, const bool computeStress)
dealii::IndexSet d_locally_owned_dofsForce
Definition configurationalForce.h:429
const dftfe::uInt this_mpi_process
Definition configurationalForce.h:370
std::vector< std::map< dealii::CellId, dftfe::uInt > > d_cellsVselfBallsClosestAtomIdDofHandlerElectro
Definition configurationalForce.h:395
void computeWfcContribLocal(const dftfe::uInt &numEigenValues, const std::vector< double > &kPointCoords, const std::vector< double > &kPointWeights, const dftfe::utils::MemoryStorage< dataTypes::number, memorySpace > &eigenVectors, const std::vector< std::vector< double > > &eigenValues, const std::vector< std::vector< double > > &partialOccupancies, const bool floatingNuclearCharges, const std::shared_ptr< AuxDensityMatrix< memorySpace > > auxDensityXCOutRepresentationPtr, const bool computeForce, const bool computeStress)
dealii::DoFHandler< 3 > d_dofHandlerForce
Definition configurationalForce.h:428
dftfe::uInt d_lpspQuadratureId
Definition configurationalForce.h:375
dealii::Tensor< 2, 3, double > d_stressTensor
Definition configurationalForce.h:362
distributedCPUVec< double > d_configForceContribsWfcLinFE
Definition configurationalForce.h:431
dftfe::utils::MemoryStorage< double, dftfe::utils::MemorySpace::HOST > d_stressTotal
Definition configurationalForce.h:359
dftfe::uInt d_nlpspQuadratureId
Definition configurationalForce.h:377
std::shared_ptr< dftfe::basis::FEBasisOperations< dataTypes::number, double, dftfe::utils::MemorySpace::HOST > > d_basisOperationsPtrHost
Definition configurationalForce.h:342
std::shared_ptr< dftfe::basis::FEBasisOperations< double, double, memorySpace > > d_basisOperationsPtrElectro
Definition configurationalForce.h:345
void createBinObjectsForce(const dealii::DoFHandler< 3 > &dofHandlerRhoNodal, const vselfBinsManager &vselfBinsManager, std::vector< std::vector< dealii::DoFHandler< 3 >::active_cell_iterator > > &cellsVselfBallsDofHandler, std::vector< std::vector< dealii::DoFHandler< 3 >::active_cell_iterator > > &cellsVselfBallsDofHandlerForce, std::vector< std::map< dealii::CellId, dftfe::uInt > > &cellsVselfBallsClosestAtomIdDofHandler, std::map< dftfe::uInt, dftfe::uInt > &AtomIdBinIdLocalDofHandler, std::vector< std::map< dealii::DoFHandler< 3 >::active_cell_iterator, std::vector< dftfe::uInt > > > &cellFacesVselfBallSurfacesDofHandler, std::vector< std::map< dealii::DoFHandler< 3 >::active_cell_iterator, std::vector< dftfe::uInt > > > &cellFacesVselfBallSurfacesDofHandlerForce)
std::vector< std::map< dealii::DoFHandler< 3 >::active_cell_iterator, std::vector< dftfe::uInt > > > d_cellFacesVselfBallSurfacesDofHandlerForceElectro
Definition configurationalForce.h:419
void computeAtomsForcesGaussianGenerator(const std::vector< std::vector< double > > &atomLocations, const std::vector< dftfe::Int > &imageIds, const std::vector< std::vector< double > > &imagePositions, const std::vector< double > &gaussianConstantsForce, const std::vector< double > &generatorFlatTopWidths, const distributedCPUVec< double > &configForceVectorLinFE, const MPI_Comm mpiComm, dftfe::utils::MemoryStorage< double, dftfe::utils::MemorySpace::HOST > &forceContrib)
std::map< dftfe::uInt, dftfe::uInt > d_AtomIdBinIdLocalDofHandlerElectro
Definition configurationalForce.h:399
const dftParameters & d_dftParams
Definition configurationalForce.h:368
const MPI_Comm d_mpiCommInterPool
Definition configurationalForce.h:366
void computeLPSPContribAll(const std::vector< std::vector< double > > &atomLocations, const std::vector< dftfe::Int > &imageIds, const std::vector< double > &imageCharges, const std::vector< std::vector< double > > &imagePositions, const distributedCPUVec< double > &rhoOutNodalValues, const dftfe::utils::MemoryStorage< double, dftfe::utils::MemorySpace::HOST > &rhoTotalOutValuesLpsp, const dftfe::utils::MemoryStorage< double, dftfe::utils::MemorySpace::HOST > &gradRhoTotalOutValuesLpsp, const std::map< dealii::CellId, std::vector< double > > &pseudoVLocValues, const std::map< dftfe::uInt, std::map< dealii::CellId, std::vector< double > > > &pseudoVLocAtoms, const dealii::DoFHandler< 3 > &dofHandlerRhoNodal, const vselfBinsManager &vselfBinsManager, const std::vector< distributedCPUVec< double > > &vselfFieldGateauxDerStrainFDBins, const std::vector< double > &smearedChargeWidths, const std::vector< double > &smearedChargeScaling, const bool floatingNuclearCharges, const bool computeForce, const bool computeStress)
void computeWfcContribNlocAtomOnNode(std::shared_ptr< AtomicCenteredNonLocalOperator< dataTypes::number, memorySpace > > nonLocalOperator, const CouplingStructure couplingtype, const std::vector< const dftfe::utils::MemoryStorage< dataTypes::number, memorySpace > * > &couplingMatrixPtrs, const std::map< dftfe::uInt, dftfe::uInt > nonlocalAtomIdToGlobalIdMap, const dftfe::uInt &numEigenValues, const std::vector< double > &kPointCoords, const std::vector< double > &kPointWeights, const dftfe::utils::MemoryStorage< dataTypes::number, memorySpace > &eigenVectors, const std::vector< std::vector< double > > &eigenValues, const std::vector< std::vector< double > > &partialOccupancies, const bool floatingNuclearCharges, const bool computeForce, const bool computeStress)
dealii::AffineConstraints< double > d_affineConstraintsForce
Definition configurationalForce.h:427
dftfe::uInt d_densityQuadratureId
Definition configurationalForce.h:373
std::vector< double > d_forceVector
Definition configurationalForce.h:361
void setUnmovedTriangulation(const dealii::parallel::distributed::Triangulation< 3 > &unmovedTriangulation, const dealii::Triangulation< 3, 3 > &serialUnmovedTriangulation, const std::vector< std::vector< double > > &domainBoundingVectors)
std::shared_ptr< dftfe::basis::FEBasisOperations< double, double, dftfe::utils::MemorySpace::HOST > > d_basisOperationsPtrElectroHost
Definition configurationalForce.h:349
dftfe::uInt d_lpspQuadratureIdElectro
Definition configurationalForce.h:376
std::vector< std::map< dealii::DoFHandler< 3 >::active_cell_iterator, std::vector< dftfe::uInt > > > d_cellFacesVselfBallSurfacesDofHandlerElectro
Definition configurationalForce.h:409
dealii::TimerOutput computing_timer
Definition configurationalForce.h:433
dealii::FESystem< 3 > FEForce
Definition configurationalForce.h:426
void computeElectroContribEshelby(const distributedCPUVec< double > &phiTotRhoOutValues, dftfe::utils::MemoryStorage< double, dftfe::utils::MemorySpace::HOST > &rhooutValues, const bool floatingNuclearCharges, const bool computeForce, const bool computeStress)
void initialize(std::shared_ptr< dftfe::basis::FEBasisOperations< dataTypes::number, double, memorySpace > > basisOperationsPtr, std::shared_ptr< dftfe::basis::FEBasisOperations< dataTypes::number, double, dftfe::utils::MemorySpace::HOST > > basisOperationsPtrHost, std::shared_ptr< dftfe::basis::FEBasisOperations< double, double, memorySpace > > basisOperationsPtrElectro, std::shared_ptr< dftfe::basis::FEBasisOperations< double, double, dftfe::utils::MemorySpace::HOST > > basisOperationsPtrElectroHost, std::shared_ptr< dftfe::pseudopotentialBaseClass< dataTypes::number, memorySpace > > pseudopotentialClassPtr, std::shared_ptr< excManager< memorySpace > > excManagerPtr, const dftfe::uInt densityQuadratureId, const dftfe::uInt densityQuadratureIdElectro, const dftfe::uInt lpspQuadratureId, const dftfe::uInt lpspQuadratureIdElectro, const dftfe::uInt nlpspQuadratureId, const dftfe::uInt smearedChargeQuadratureIdElectro)
dftfe::uInt d_densityQuadratureIdElectro
Definition configurationalForce.h:374
std::shared_ptr< dftfe::pseudopotentialBaseClass< dataTypes::number, memorySpace > > d_pseudopotentialClassPtr
Definition configurationalForce.h:352
Namespace which declares the input parameters and the functions to parse them from the input paramete...
Definition dftParameters.h:36
Calculates dispersion correction to energy, force and stress.
Definition dftd.h:37
Definition excManager.h:28
Definition BLASWrapper.h:35
Definition pseudopotentialBaseClass.h:60
Definition MemoryStorage.h:33
Categorizes atoms into bins for efficient solution of nuclear electrostatic self-potential.
Definition vselfBinsManager.h:34
Definition FEBasisOperations.h:30
double number
Definition dftfeDataTypes.h:41
The functions in this namespace contain the expressions for the various terms of the configurational ...
Definition eshelbyTensor.h:65
@ HOST
Definition MemorySpaceType.h:34
Definition pseudoPotentialToDftfeConverter.cc:34
CouplingStructure
Enum class that lists used in the non-local Operator.
Definition AtomicCenteredNonLocalOperator.h:48
dealii::LinearAlgebra::distributed::Vector< elem_type, dealii::MemorySpace::Host > distributedCPUVec
Definition headers.h:92
std::uint32_t uInt
Definition TypeConfig.h:10
void computeWavefuncEshelbyContributionLocal(std::shared_ptr< dftfe::linearAlgebra::BLASWrapper< dftfe::utils::MemorySpace::HOST > > &BLASWrapperPtr, const std::pair< dftfe::uInt, dftfe::uInt > cellRange, const std::pair< dftfe::uInt, dftfe::uInt > vecRange, const dftfe::uInt nQuadsPerCell, const double kcoordx, const double kcoordy, const double kcoordz, double *partialOccupVec, double *eigenValuesVec, dataTypes::number *wfcQuadPointData, dataTypes::number *gradWfcQuadPointData, double *eshelbyContributions, double *eshelbyTensor, const bool floatingNuclearCharges, const bool isTauMGGA, double *pdexTauLocallyOwnedCellsBlock, double *pdecTauLocallyOwnedCellsBlock, const bool computeForce, const bool computeStress)
void nlpWfcContractionContribution(std::shared_ptr< dftfe::linearAlgebra::BLASWrapper< dftfe::utils::MemorySpace::HOST > > &BLASWrapperPtr, const dftfe::uInt wfcBlockSize, const dftfe::uInt blockSizeNlp, const dftfe::uInt numQuadsNLP, const dftfe::uInt startingIdNlp, const dataTypes::number *projectorKetTimesVectorPar, const dataTypes::number *gradPsiOrPsiQuadValuesNLP, const dftfe::uInt *nonTrivialIdToElemIdMap, const dftfe::uInt *projecterKetTimesFlattenedVectorLocalIds, dataTypes::number *nlpContractionContribution)