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 dftfe::uInt &phiExtDofHandlerIndexElectro,
131 const std::map<dealii::CellId, std::vector<dftfe::Int>>
132 &bQuadAtomIdsAllAtoms,
133 const std::map<dealii::CellId, std::vector<dftfe::Int>>
134 &bQuadAtomIdsAllAtomsImages,
135 const std::map<dealii::CellId, std::vector<double>> &bQuadValuesAllAtoms,
136 const std::vector<double> &smearedChargeWidths,
137 const std::vector<double> &smearedChargeScaling,
138 const std::vector<double> &gaussianConstantsForce,
139 const std::vector<double> &generatorFlatTopWidths,
140 const bool floatingNuclearCharges,
141 const bool computeForce,
142 const bool computeStress);
143
144 void
146
147 void
149
150 std::vector<double> &
152
153 dealii::Tensor<2, 3, double> &
155
156
157 private:
158 void
160 std::shared_ptr<
162 nonLocalOperator,
163 const CouplingStructure couplingtype,
164 const std::vector<
166 &couplingMatrixPtrs,
167 const std::map<dftfe::uInt, dftfe::uInt> nonlocalAtomIdToGlobalIdMap,
168 const dftfe::uInt &numEigenValues,
169 const std::vector<double> &kPointCoords,
170 const std::vector<double> &kPointWeights,
172 &eigenVectors,
173 const std::vector<std::vector<double>> &eigenValues,
174 const std::vector<std::vector<double>> &partialOccupancies,
175 const bool floatingNuclearCharges,
176 const bool computeForce,
177 const bool computeStress);
178
179 void
181 std::shared_ptr<
183 nonLocalOperator,
184 const CouplingStructure couplingtype,
185 const std::vector<
187 &couplingMatrixPtrs,
188 const std::map<dftfe::uInt, dftfe::uInt> nonlocalAtomIdToGlobalIdMap,
189 const dftfe::uInt &numEigenValues,
190 const std::vector<double> &kPointCoords,
191 const std::vector<double> &kPointWeights,
193 &eigenVectors,
194 const std::vector<std::vector<double>> &eigenValues,
195 const std::vector<std::vector<double>> &partialOccupancies,
196 const bool floatingNuclearCharges,
197 const bool computeForce,
198 const bool computeStress);
199
200 void
202 const dftfe::uInt &numEigenValues,
203 const std::vector<double> &kPointCoords,
204 const std::vector<double> &kPointWeights,
206 &eigenVectors,
207 const std::vector<std::vector<double>> &eigenValues,
208 const std::vector<std::vector<double>> &partialOccupancies,
209 const bool floatingNuclearCharges,
210 const std::shared_ptr<AuxDensityMatrix<memorySpace>>
211 auxDensityXCOutRepresentationPtr,
212 const bool computeForce,
213 const bool computeStress);
214
215 void
217 const distributedCPUVec<double> &phiTotRhoOutValues,
219 &rhooutValues,
220 const bool floatingNuclearCharges,
221 const bool computeForce,
222 const bool computeStress);
223
224 void
226 const std::vector<std::vector<double>> &atomLocations,
227 const std::vector<dftfe::Int> &imageIds,
228 const std::vector<double> &imageCharges,
229 const std::vector<std::vector<double>> &imagePositions,
231 const bool floatingNuclearCharges,
232 const bool computeForce,
233 const bool computeStress);
234
235 void
237 const std::vector<std::vector<double>> &atomLocations,
238 const std::vector<std::vector<double>> &imagePositions,
240 const dftfe::uInt &binsStartDofHandlerIndexElectro,
241 const distributedCPUVec<double> &phiTotRhoOutValues,
242 const std::map<dealii::CellId, std::vector<dftfe::Int>>
243 &bQuadAtomIdsAllAtoms,
244 const std::map<dealii::CellId, std::vector<dftfe::Int>>
245 &bQuadAtomIdsAllAtomsImages,
246 const std::map<dealii::CellId, std::vector<double>> &bQuadValuesAllAtoms,
247 const bool floatingNuclearCharges,
248 const bool computeForce,
249 const bool computeStress);
250
251 void
253 const std::vector<std::vector<double>> &atomLocations,
254 const std::vector<dftfe::Int> &imageIds,
255 const std::vector<double> &imageCharges,
256 const std::vector<std::vector<double>> &imagePositions,
257 const distributedCPUVec<double> &rhoOutNodalValues,
259 &rhoTotalOutValuesLpsp,
261 &gradRhoTotalOutValuesLpsp,
262 const std::map<dealii::CellId, std::vector<double>> &pseudoVLocValues,
263 const std::map<dftfe::uInt, std::map<dealii::CellId, std::vector<double>>>
264 &pseudoVLocAtoms,
265 const dealii::DoFHandler<3> &dofHandlerRhoNodal,
267 const std::vector<distributedCPUVec<double>>
268 &vselfFieldGateauxDerStrainFDBins,
269 const std::vector<double> &smearedChargeWidths,
270 const std::vector<double> &smearedChargeScaling,
271 const bool floatingNuclearCharges,
272 const bool computeForce,
273 const bool computeStress);
274
275 void
277 const std::vector<std::vector<double>> &atomLocations,
278 const std::vector<dftfe::Int> &imageIds,
279 const std::vector<std::vector<double>> &imagePositions,
280 const std::vector<
282 &densityOutValues,
283 const std::vector<
285 &gradDensityOutValues,
286 const std::vector<
288 &tauOutValues,
289 const std::shared_ptr<AuxDensityMatrix<memorySpace>>
290 auxDensityXCOutRepresentationPtr,
291 const std::map<dealii::CellId, std::vector<double>> &rhoCoreValues,
292 const std::map<dealii::CellId, std::vector<double>> &gradRhoCoreValues,
293 const std::map<dftfe::uInt, std::map<dealii::CellId, std::vector<double>>>
294 &gradRhoCoreAtoms,
295 const std::map<dftfe::uInt, std::map<dealii::CellId, std::vector<double>>>
296 &hessianRhoCoreAtoms,
297 const bool floatingNuclearCharges,
298 const bool computeForce,
299 const bool computeStress);
300
301
302 void
304 const dftfe::uInt &phiExtDofHandlerIndexElectro,
305 const dealii::DoFHandler<3> &dofHandlerRhoNodal,
307 std::vector<std::vector<dealii::DoFHandler<3>::active_cell_iterator>>
308 &cellsVselfBallsDofHandler,
309 std::vector<std::vector<dealii::DoFHandler<3>::active_cell_iterator>>
310 &cellsVselfBallsDofHandlerForce,
311 std::vector<std::map<dealii::CellId, dftfe::uInt>>
312 &cellsVselfBallsClosestAtomIdDofHandler,
313 std::map<dftfe::uInt, dftfe::uInt> &AtomIdBinIdLocalDofHandler,
314 std::vector<std::map<dealii::DoFHandler<3>::active_cell_iterator,
315 std::vector<dftfe::uInt>>>
316 &cellFacesVselfBallSurfacesDofHandler,
317 std::vector<std::map<dealii::DoFHandler<3>::active_cell_iterator,
318 std::vector<dftfe::uInt>>>
319 &cellFacesVselfBallSurfacesDofHandlerForce);
320
321 void
323 const std::vector<std::vector<double>> &atomLocations,
324 const std::vector<dftfe::Int> &imageIds,
325 const std::vector<std::vector<double>> &imagePositions,
326 const std::vector<double> &gaussianConstantsForce,
327 const std::vector<double> &generatorFlatTopWidths,
328 const distributedCPUVec<double> &configForceVectorLinFE,
329 const MPI_Comm mpiComm,
331 &forceContrib);
332 std::shared_ptr<dftfe::linearAlgebra::BLASWrapper<memorySpace>>
334 std::shared_ptr<
337 std::shared_ptr<
340 std::shared_ptr<
342 double,
345 std::shared_ptr<
348 std::shared_ptr<
349 dftfe::basis::
350 FEBasisOperations<double, double, dftfe::utils::MemorySpace::HOST>>
352 std::shared_ptr<
355
356 std::shared_ptr<excManager<memorySpace>> d_excManagerPtr;
357
362
363 std::vector<double> d_forceVector;
364 dealii::Tensor<2, 3, double> d_stressTensor;
365
366 const MPI_Comm d_mpiCommParent;
367 const MPI_Comm d_mpiCommDomain;
368 const MPI_Comm d_mpiCommInterPool;
373 dealii::ConditionalOStream pcout;
374
381
382
383 /// Internal data: stores cell iterators of all cells in
384 /// dftPtr->d_dofHandler which are part of the vself ball. Outer vector is
385 /// over vself bins.
386 std::vector<std::vector<dealii::DoFHandler<3>::active_cell_iterator>>
388
389 /// Internal data: stores cell iterators of all cells in d_dofHandlerForce
390 /// which are part of the vself ball. Outer vector is over vself bins.
391 std::vector<std::vector<dealii::DoFHandler<3>::active_cell_iterator>>
393
394 /// Internal data: stores map of vself ball cell Id to the closest atom Id
395 /// of that cell. Outer vector over vself bins.
396 std::vector<std::map<dealii::CellId, dftfe::uInt>>
398
399 /// Internal data: stores the map of atom Id (only in the local processor)
400 /// to the vself bin Id.
401 std::map<dftfe::uInt, dftfe::uInt> d_AtomIdBinIdLocalDofHandlerElectro;
402
403 /* Internal data: stores the face ids of dftPtr->d_dofHandler (single
404 * component field) on which to evaluate the vself ball surface integral in
405 * the configurational force expression. Outer vector is over the vself
406 * bins. Inner map is between the cell iterator and the vector of face ids
407 * to integrate on for that cell iterator.
408 */
409 std::vector<std::map<dealii::DoFHandler<3>::active_cell_iterator,
410 std::vector<dftfe::uInt>>>
412
413 /* Internal data: stores the face ids of d_dofHandlerForce (three component
414 * field) on which to evaluate the vself ball surface integral in the
415 * configurational force expression. Outer vector is over the vself bins.
416 * Inner map is between the cell iterator and the vector of face ids to
417 * integrate on for that cell iterator.
418 */
419 std::vector<std::map<dealii::DoFHandler<3>::active_cell_iterator,
420 std::vector<dftfe::uInt>>>
422
423 std::map<dealii::CellId, dealii::DoFHandler<3>::active_cell_iterator>
425
426 /// Finite element object for configurational force computation. Linear
427 /// finite elements with three force field components are used.
428 dealii::FESystem<3> FEForce;
429 dealii::AffineConstraints<double> d_affineConstraintsForce;
430 dealii::DoFHandler<3> d_dofHandlerForce;
434
435 dealii::TimerOutput computing_timer;
436 };
437 void
439 std::shared_ptr<
441 &BLASWrapperPtr,
442 const std::pair<dftfe::uInt, dftfe::uInt> cellRange,
443 const std::pair<dftfe::uInt, dftfe::uInt> vecRange,
444 const dftfe::uInt nQuadsPerCell,
445 const double kcoordx,
446 const double kcoordy,
447 const double kcoordz,
448 double *partialOccupVec,
449 double *eigenValuesVec,
450 dataTypes::number *wfcQuadPointData,
451 dataTypes::number *gradWfcQuadPointData,
452 double *eshelbyContributions,
453 double *eshelbyTensor,
454 const bool floatingNuclearCharges,
455 const bool isTauMGGA,
456 double *pdexTauLocallyOwnedCellsBlock,
457 double *pdecTauLocallyOwnedCellsBlock,
458 const bool computeForce,
459 const bool computeStress);
460 void
462 std::shared_ptr<
464 &BLASWrapperPtr,
465 const dftfe::uInt wfcBlockSize,
466 const dftfe::uInt blockSizeNlp,
467 const dftfe::uInt numQuadsNLP,
468 const dftfe::uInt startingIdNlp,
469 const dataTypes::number *projectorKetTimesVectorPar,
470 const dataTypes::number *gradPsiOrPsiQuadValuesNLP,
471 const dftfe::uInt *nonTrivialIdToElemIdMap,
472 const dftfe::uInt *projecterKetTimesFlattenedVectorLocalIds,
473 dataTypes::number *nlpContractionContribution);
474
475} // namespace dftfe
476#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:371
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:356
dftfe::utils::MemoryStorage< double, dftfe::utils::MemorySpace::HOST > d_forceTotal
Definition configurationalForce.h:359
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:336
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:424
distributedCPUVec< double > d_configForceContribsLinFE
Definition configurationalForce.h:432
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)
const MPI_Comm d_mpiCommInterBandGroup
Definition configurationalForce.h:369
std::vector< std::vector< dealii::DoFHandler< 3 >::active_cell_iterator > > d_cellsVselfBallsDofHandlerElectro
Definition configurationalForce.h:387
const MPI_Comm d_mpiCommParent
Definition configurationalForce.h:366
dealii::ConditionalOStream pcout
Definition configurationalForce.h:373
dftfe::uInt d_smearedChargeQuadratureIdElectro
Definition configurationalForce.h:380
const MPI_Comm d_mpiCommDomain
Definition configurationalForce.h:367
std::shared_ptr< dftfe::linearAlgebra::BLASWrapper< memorySpace > > d_BLASWrapperPtr
Definition configurationalForce.h:333
std::vector< std::vector< dealii::DoFHandler< 3 >::active_cell_iterator > > d_cellsVselfBallsDofHandlerForceElectro
Definition configurationalForce.h:392
dealii::Tensor< 2, 3, double > & getStress()
std::shared_ptr< dftfe::basis::FEBasisOperations< dataTypes::number, double, memorySpace > > d_basisOperationsPtr
Definition configurationalForce.h:339
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:431
const dftfe::uInt this_mpi_process
Definition configurationalForce.h:372
std::vector< std::map< dealii::CellId, dftfe::uInt > > d_cellsVselfBallsClosestAtomIdDofHandlerElectro
Definition configurationalForce.h:397
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:430
dftfe::uInt d_lpspQuadratureId
Definition configurationalForce.h:377
dealii::Tensor< 2, 3, double > d_stressTensor
Definition configurationalForce.h:364
distributedCPUVec< double > d_configForceContribsWfcLinFE
Definition configurationalForce.h:433
dftfe::utils::MemoryStorage< double, dftfe::utils::MemorySpace::HOST > d_stressTotal
Definition configurationalForce.h:361
dftfe::uInt d_nlpspQuadratureId
Definition configurationalForce.h:379
std::shared_ptr< dftfe::basis::FEBasisOperations< dataTypes::number, double, dftfe::utils::MemorySpace::HOST > > d_basisOperationsPtrHost
Definition configurationalForce.h:344
std::shared_ptr< dftfe::basis::FEBasisOperations< double, double, memorySpace > > d_basisOperationsPtrElectro
Definition configurationalForce.h:347
std::vector< std::map< dealii::DoFHandler< 3 >::active_cell_iterator, std::vector< dftfe::uInt > > > d_cellFacesVselfBallSurfacesDofHandlerForceElectro
Definition configurationalForce.h:421
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:401
const dftParameters & d_dftParams
Definition configurationalForce.h:370
const MPI_Comm d_mpiCommInterPool
Definition configurationalForce.h:368
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:429
dftfe::uInt d_densityQuadratureId
Definition configurationalForce.h:375
std::vector< double > d_forceVector
Definition configurationalForce.h:363
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:351
dftfe::uInt d_lpspQuadratureIdElectro
Definition configurationalForce.h:378
std::vector< std::map< dealii::DoFHandler< 3 >::active_cell_iterator, std::vector< dftfe::uInt > > > d_cellFacesVselfBallSurfacesDofHandlerElectro
Definition configurationalForce.h:411
void createBinObjectsForce(const dftfe::uInt &phiExtDofHandlerIndexElectro, 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)
dealii::TimerOutput computing_timer
Definition configurationalForce.h:435
dealii::FESystem< 3 > FEForce
Definition configurationalForce.h:428
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)
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 dftfe::uInt &phiExtDofHandlerIndexElectro, 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)
dftfe::uInt d_densityQuadratureIdElectro
Definition configurationalForce.h:376
std::shared_ptr< dftfe::pseudopotentialBaseClass< dataTypes::number, memorySpace > > d_pseudopotentialClassPtr
Definition configurationalForce.h:354
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)