61 const MPI_Comm &mpi_comm_parent,
62 const MPI_Comm &mpi_comm_domain,
83 const dealii::Triangulation<3, 3> &serialTriangulation,
84 const std::vector<std::vector<double>> &domainBoundingVectors,
85 const bool isElectrostaticsMesh);
100 std::vector<
const dealii::DoFHandler<3> *> &dofHandlerVectorMatrixFree,
101 std::vector<
const dealii::AffineConstraints<double> *>
102 &constraintsVectorMatrixFree,
103 const bool isElectrostaticsMesh);
130 const dealii::MatrixFree<3, double> &matrixFreeData,
135 const dealii::MatrixFree<3, double> &matrixFreeDataElectro,
145 &rhoTotalOutValuesLpsp,
147 &gradRhoTotalOutValuesLpsp,
148 const std::map<dealii::CellId, std::vector<double>> &rhoCoreValues,
149 const std::map<dealii::CellId, std::vector<double>> &gradRhoCoreValues,
150 const std::map<dealii::CellId, std::vector<double>> &hessianRhoCoreValues,
151 const std::map<
dftfe::uInt, std::map<dealii::CellId, std::vector<double>>>
153 const std::map<
dftfe::uInt, std::map<dealii::CellId, std::vector<double>>>
154 &hessianRhoCoreAtoms,
155 const std::map<dealii::CellId, std::vector<double>> &pseudoVLocElectro,
156 const std::map<
dftfe::uInt, std::map<dealii::CellId, std::vector<double>>>
157 &pseudoVLocAtomsElectro,
158 const dealii::AffineConstraints<double> &hangingPlusPBCConstraintsElectro,
169 std::vector<double> &
195 const dealii::MatrixFree<3, double> &matrixFreeData,
200 const dealii::MatrixFree<3, double> &matrixFreeDataElectro,
210 &rhoTotalOutValuesLpsp,
212 &gradRhoTotalOutValuesLpsp,
213 const std::map<dealii::CellId, std::vector<double>> &pseudoVLocElectro,
214 const std::map<
dftfe::uInt, std::map<dealii::CellId, std::vector<double>>>
215 &pseudoVLocAtomsElectro,
216 const std::map<dealii::CellId, std::vector<double>> &rhoCoreValues,
217 const std::map<dealii::CellId, std::vector<double>> &gradRhoCoreValues,
218 const std::map<dealii::CellId, std::vector<double>> &hessianRhoCoreValues,
219 const std::map<
dftfe::uInt, std::map<dealii::CellId, std::vector<double>>>
221 const std::map<
dftfe::uInt, std::map<dealii::CellId, std::vector<double>>>
222 &hessianRhoCoreAtoms,
223 const dealii::AffineConstraints<double> &hangingPlusPBCConstraintsElectro,
239 dealii::Tensor<2, 3, double> &
256 const dealii::IndexSet &locally_owned_dofsForce,
257 std::map<std::pair<dftfe::uInt, dftfe::uInt>,
262 const dealii::DoFHandler<3> &dofHandler,
263 const dealii::DoFHandler<3> &dofHandlerForce,
264 const dealii::AffineConstraints<double> &hangingPlusPBCConstraints,
266 std::vector<std::vector<dealii::DoFHandler<3>::active_cell_iterator>>
267 &cellsVselfBallsDofHandler,
268 std::vector<std::vector<dealii::DoFHandler<3>::active_cell_iterator>>
269 &cellsVselfBallsDofHandlerForce,
270 std::vector<std::map<dealii::CellId, dftfe::uInt>>
271 &cellsVselfBallsClosestAtomIdDofHandler,
272 std::map<dftfe::uInt, dftfe::uInt> &AtomIdBinIdLocalDofHandler,
273 std::vector<std::map<dealii::DoFHandler<3>::active_cell_iterator,
274 std::vector<dftfe::uInt>>>
275 &cellFacesVselfBallSurfacesDofHandler,
276 std::vector<std::map<dealii::DoFHandler<3>::active_cell_iterator,
277 std::vector<dftfe::uInt>>>
278 &cellFacesVselfBallSurfacesDofHandlerForce);
282 const dealii::MatrixFree<3, double> &matrixFreeData,
283 const dealii::MatrixFree<3, double> &matrixFreeDataElectro);
290 const dealii::MatrixFree<3, double> &matrixFreeData,
294 const dealii::MatrixFree<3, double> &matrixFreeDataElectro,
304 &rhoTotalOutValuesLpsp,
306 &gradRhoTotalOutValuesLpsp,
307 const std::map<dealii::CellId, std::vector<double>> &rhoCoreValues,
308 const std::map<dealii::CellId, std::vector<double>> &gradRhoCoreValues,
309 const std::map<dealii::CellId, std::vector<double>> &hessianRhoCoreValues,
310 const std::map<
dftfe::uInt, std::map<dealii::CellId, std::vector<double>>>
312 const std::map<
dftfe::uInt, std::map<dealii::CellId, std::vector<double>>>
313 &hessianRhoCoreAtoms,
314 const std::map<dealii::CellId, std::vector<double>> &pseudoVLocElectro,
315 const std::map<
dftfe::uInt, std::map<dealii::CellId, std::vector<double>>>
316 &pseudoVLocAtomsElectro,
321 const dealii::MatrixFree<3, double> &matrixFreeDataElectro,
329 &rhoTotalOutValuesLpsp,
331 &gradRhoTotalOutValues,
333 &gradRhoTotalOutValuesLpsp,
334 const std::map<dealii::CellId, std::vector<double>> &pseudoVLocElectro,
335 const std::map<
dftfe::uInt, std::map<dealii::CellId, std::vector<double>>>
336 &pseudoVLocAtomsElectro,
344 const dealii::DoFHandler<3> &dofHandlerElectro,
346 const dealii::MatrixFree<3, double> &matrixFreeDataElectro,
354 const dealii::MatrixFree<3, double> &matrixFreeData,
358 const dealii::MatrixFree<3, double> &matrixFreeDataElectro,
368 &rhoTotalOutValuesLpsp,
370 &gradRhoTotalOutValuesLpsp,
371 const std::map<dealii::CellId, std::vector<double>> &rhoCoreValues,
372 const std::map<dealii::CellId, std::vector<double>> &gradRhoCoreValues,
373 const std::map<dealii::CellId, std::vector<double>> &hessianRhoCoreValues,
374 const std::map<
dftfe::uInt, std::map<dealii::CellId, std::vector<double>>>
376 const std::map<
dftfe::uInt, std::map<dealii::CellId, std::vector<double>>>
377 &hessianRhoCoreAtoms,
378 const std::map<dealii::CellId, std::vector<double>> &pseudoVLocElectro,
379 const std::map<
dftfe::uInt, std::map<dealii::CellId, std::vector<double>>>
380 &pseudoVLocAtomsElectro,
386 &forceContributionFPSPLocalGammaAtoms,
387 dealii::FEValues<3> &feValues,
388 dealii::FEFaceValues<3> &feFaceValues,
390 const dealii::MatrixFree<3, double> &matrixFreeData,
393 const dealii::AlignedVector<dealii::VectorizedArray<double>> &rhoQuads,
394 const dealii::AlignedVector<
395 dealii::Tensor<1, 3, dealii::VectorizedArray<double>>> &gradRhoQuads,
396 const std::map<
dftfe::uInt, std::map<dealii::CellId, std::vector<double>>>
399 const std::vector<std::map<dealii::CellId, dftfe::uInt>>
400 &cellsVselfBallsClosestAtomIdDofHandler);
405 &forceContributionSmearedChargesGammaAtoms,
407 const dealii::MatrixFree<3, double> &matrixFreeData,
409 const dealii::AlignedVector<
410 dealii::Tensor<1, 3, dealii::VectorizedArray<double>>> &gradPhiTotQuads,
411 const std::vector<dftfe::uInt> &nonTrivialAtomIdsMacroCell,
412 const std::map<dealii::CellId, std::vector<dftfe::Int>>
413 &bQuadAtomIdsAllAtoms,
414 const dealii::AlignedVector<dealii::VectorizedArray<double>>
420 &forceContributionSmearedChargesGammaAtoms,
422 const dealii::MatrixFree<3, double> &matrixFreeData,
424 const dealii::AlignedVector<
425 dealii::Tensor<1, 3, dealii::VectorizedArray<double>>>
427 const std::vector<dftfe::uInt> &nonTrivialAtomIdsMacroCell,
428 const std::map<dealii::CellId, std::vector<dftfe::Int>>
429 &bQuadAtomIdsAllAtoms,
430 const dealii::AlignedVector<dealii::VectorizedArray<double>>
436 &forceContributionFNonlinearCoreCorrectionGammaAtoms,
438 const dealii::MatrixFree<3, double> &matrixFreeData,
440 const dealii::AlignedVector<dealii::VectorizedArray<double>> &vxcQuads,
441 const std::map<
dftfe::uInt, std::map<dealii::CellId, std::vector<double>>>
448 &forceContributionFNonlinearCoreCorrectionGammaAtoms,
450 const dealii::MatrixFree<3, double> &matrixFreeData,
452 const dealii::AlignedVector<
453 dealii::Tensor<1, 3, dealii::VectorizedArray<double>>> &derExcGradRho,
454 const std::map<
dftfe::uInt, std::map<dealii::CellId, std::vector<double>>>
455 &hessianRhoCoreAtoms);
460 &forceContributionFNonlinearCoreCorrectionGammaAtoms,
462 const dealii::MatrixFree<3, double> &matrixFreeData,
464 const dealii::AlignedVector<dealii::VectorizedArray<double>>
466 const dealii::AlignedVector<dealii::VectorizedArray<double>>
468 const dealii::AlignedVector<
469 dealii::Tensor<1, 3, dealii::VectorizedArray<double>>>
471 const dealii::AlignedVector<
472 dealii::Tensor<1, 3, dealii::VectorizedArray<double>>>
474 const std::map<
dftfe::uInt, std::map<dealii::CellId, std::vector<double>>>
476 const std::map<
dftfe::uInt, std::map<dealii::CellId, std::vector<double>>>
477 &hessianRhoCoreAtoms,
478 const bool isXCGGA =
false);
483 &forceContributionFPSPLocalGammaAtoms,
484 const std::map<std::pair<dftfe::uInt, dftfe::uInt>,
dftfe::uInt>
486 const dealii::AffineConstraints<double> &constraintsNoneForce,
492 &forceContributionLocalGammaAtoms,
493 std::vector<double> &accumForcesVector);
499 &forceContributionFnlGammaAtoms,
500 const dealii::MatrixFree<3, double> &matrixFreeData,
502 const std::shared_ptr<
506 const std::vector<dftfe::Int> &globalChargeIdNonLocalAtoms,
507 const std::vector<dftfe::uInt> &numberPseudoWaveFunctionsPerAtom,
509 const std::map<dealii::CellId, dftfe::uInt> &cellIdToCellNumberMap,
511 const std::vector<dataTypes::number>
512 &projectorKetTimesPsiTimesVTimesPartOccContractionPsiQuadsFlattened,
514 const std::vector<dataTypes::number> &zetaDeltaVQuadsFlattened,
515 const std::vector<dataTypes::number> &
516 projectorKetTimesPsiTimesVTimesPartOccContractionGradPsiQuadsFlattened);
521 dealii::AlignedVector<
522 dealii::Tensor<1, 3, dealii::VectorizedArray<double>>> &FVectQuads,
523 const dealii::MatrixFree<3, double> &matrixFreeData,
525 const std::shared_ptr<
529 const std::vector<dftfe::Int> &globalChargeIdNonLocalAtoms,
530 const std::vector<dftfe::uInt> &numberPseudoWaveFunctionsPerAtom,
532 const std::map<dealii::CellId, dftfe::uInt> &cellIdToCellNumberMap,
533 const std::vector<dataTypes::number> &zetaDeltaVQuadsFlattened,
534 const std::vector<dataTypes::number> &
535 projectorKetTimesPsiTimesVTimesPartOccContractionGradPsiQuadsFlattened);
540 &forceContributionFnlGammaAtoms);
544 dealii::Tensor<2, 3, double> &stressContribution,
545 const dealii::MatrixFree<3, double> &matrixFreeData,
547 const std::vector<double> &jxwQuadsSubCells,
550 const std::shared_ptr<
553 const std::vector<dftfe::uInt> &numberPseudoWaveFunctionsPerAtom,
554 const std::map<dealii::CellId, dftfe::uInt> &cellIdToCellNumberMap,
555 const std::vector<dataTypes::number> &zetalmDeltaVlProductDistImageAtoms,
557 const std::vector<dataTypes::number>
558 &projectorKetTimesPsiTimesVTimesPartOccContractionPsiQuadsFlattened,
560 const std::vector<dataTypes::number>
561 &projectorKetTimesPsiTimesVTimesPartOccContractionGradPsiQuadsFlattened,
562 const bool isSpinPolarized);
566 bool allowGaussianOverlapOnAtoms =
false);
573 const dealii::DoFHandler<3> &dofHandlerElectro,
575 const dealii::MatrixFree<3, double> &matrixFreeDataElectro,
580 const dealii::MatrixFree<3, double> &matrixFreeData,
584 const dealii::MatrixFree<3, double> &matrixFreeDataElectro,
594 &rhoTotalOutValuesLpsp,
596 &gradRhoTotalOutValuesLpsp,
597 const std::map<dealii::CellId, std::vector<double>> &pseudoVLocElectro,
598 const std::map<
dftfe::uInt, std::map<dealii::CellId, std::vector<double>>>
599 &pseudoVLocAtomsElectro,
600 const std::map<dealii::CellId, std::vector<double>> &rhoCoreValues,
601 const std::map<dealii::CellId, std::vector<double>> &gradRhoCoreValues,
602 const std::map<dealii::CellId, std::vector<double>> &hessianRhoCoreValues,
603 const std::map<
dftfe::uInt, std::map<dealii::CellId, std::vector<double>>>
605 const std::map<
dftfe::uInt, std::map<dealii::CellId, std::vector<double>>>
606 &hessianRhoCoreAtoms,
611 const dealii::MatrixFree<3, double> &matrixFreeDataElectro,
619 &rhoTotalOutValuesLpsp,
621 &gradRhoTotalOutValuesElectro,
623 &gradRhoTotalOutValuesElectroLpsp,
624 const std::map<dealii::CellId, std::vector<double>> &pseudoVLocElectro,
625 const std::map<
dftfe::uInt, std::map<dealii::CellId, std::vector<double>>>
626 &pseudoVLocAtomsElectro,
631 dealii::FEValues<3> &feValues,
632 dealii::FEFaceValues<3> &feFaceValues,
634 const dealii::MatrixFree<3, double> &matrixFreeData,
637 const dealii::AlignedVector<dealii::VectorizedArray<double>> &rhoQuads,
638 const dealii::AlignedVector<
639 dealii::Tensor<1, 3, dealii::VectorizedArray<double>>> &gradRhoQuads,
640 const std::map<
dftfe::uInt, std::map<dealii::CellId, std::vector<double>>>
643 const std::vector<std::map<dealii::CellId, dftfe::uInt>>
644 &cellsVselfBallsClosestAtomIdDofHandler);
649 const dealii::MatrixFree<3, double> &matrixFreeData,
651 const dealii::AlignedVector<dealii::VectorizedArray<double>> &vxcQuads,
652 const dealii::AlignedVector<
653 dealii::Tensor<1, 3, dealii::VectorizedArray<double>>> &derExcGradRho,
654 const std::map<
dftfe::uInt, std::map<dealii::CellId, std::vector<double>>>
656 const std::map<
dftfe::uInt, std::map<dealii::CellId, std::vector<double>>>
657 &hessianRhoCoreAtoms);
662 const dealii::MatrixFree<3, double> &matrixFreeData,
664 const dealii::AlignedVector<dealii::VectorizedArray<double>>
666 const dealii::AlignedVector<dealii::VectorizedArray<double>>
668 const dealii::AlignedVector<
669 dealii::Tensor<1, 3, dealii::VectorizedArray<double>>>
671 const dealii::AlignedVector<
672 dealii::Tensor<1, 3, dealii::VectorizedArray<double>>>
674 const std::map<
dftfe::uInt, std::map<dealii::CellId, std::vector<double>>>
676 const std::map<
dftfe::uInt, std::map<dealii::CellId, std::vector<double>>>
677 &hessianRhoCoreAtoms,
678 const bool isXCGGA =
false);
683 const dealii::MatrixFree<3, double> &matrixFreeData,
685 const dealii::AlignedVector<
686 dealii::Tensor<1, 3, dealii::VectorizedArray<double>>> &gradPhiTotQuads,
687 const std::vector<dftfe::uInt> &nonTrivialAtomImageIdsMacroCell,
688 const std::map<dealii::CellId, std::vector<dftfe::Int>>
689 &bQuadAtomIdsAllAtomsImages,
690 const dealii::AlignedVector<dealii::VectorizedArray<double>>
696 const dealii::MatrixFree<3, double> &matrixFreeData,
698 const dealii::AlignedVector<
699 dealii::Tensor<1, 3, dealii::VectorizedArray<double>>> &gradVselfQuads,
700 const std::vector<dftfe::uInt> &nonTrivialAtomImageIdsMacroCell,
701 const std::map<dealii::CellId, std::vector<dftfe::Int>>
702 &bQuadAtomIdsAllAtomsImages,
703 const dealii::AlignedVector<dealii::VectorizedArray<double>>
737 std::vector<double> d_forceAtomsFloatingKPoints;
829 std::map<std::pair<dftfe::uInt, dftfe::uInt>,
dftfe::uInt>
835 std::vector<std::vector<dealii::DoFHandler<3>::active_cell_iterator>>
840 std::vector<std::vector<dealii::DoFHandler<3>::active_cell_iterator>>
845 std::vector<std::map<dealii::CellId, dftfe::uInt>>
858 std::vector<std::map<dealii::DoFHandler<3>::active_cell_iterator,
859 std::vector<dftfe::uInt>>>
868 std::vector<std::map<dealii::DoFHandler<3>::active_cell_iterator,
869 std::vector<dftfe::uInt>>>
875 std::vector<std::vector<dealii::DoFHandler<3>::active_cell_iterator>>
880 std::vector<std::vector<dealii::DoFHandler<3>::active_cell_iterator>>
885 std::vector<std::map<dealii::CellId, dftfe::uInt>>
898 std::vector<std::map<dealii::DoFHandler<3>::active_cell_iterator,
899 std::vector<dftfe::uInt>>>
908 std::vector<std::map<dealii::DoFHandler<3>::active_cell_iterator,
909 std::vector<dftfe::uInt>>>
912 std::map<dealii::CellId, dealii::DoFHandler<3>::active_cell_iterator>