53 friend class dftClass<FEOrder, FEOrderElectro, memorySpace>;
63 const MPI_Comm & mpi_comm_parent,
64 const MPI_Comm & mpi_comm_domain,
84 initUnmoved(
const dealii::Triangulation<3, 3> & triangulation,
85 const dealii::Triangulation<3, 3> & serialTriangulation,
86 const std::vector<std::vector<double>> &domainBoundingVectors,
87 const bool isElectrostaticsMesh);
102 std::vector<
const dealii::DoFHandler<3> *> &dofHandlerVectorMatrixFree,
103 std::vector<
const dealii::AffineConstraints<double> *>
104 & constraintsVectorMatrixFree,
105 const bool isElectrostaticsMesh);
132 const dealii::MatrixFree<3, double> &matrixFreeData,
134 const unsigned int eigenDofHandlerIndex,
135 const unsigned int smearedChargeQuadratureId,
136 const unsigned int lpspQuadratureIdElectro,
137 const dealii::MatrixFree<3, double> &matrixFreeDataElectro,
138 const unsigned int phiTotDofHandlerIndexElectro,
147 &rhoTotalOutValuesLpsp,
149 &gradRhoTotalOutValuesLpsp,
150 const std::map<dealii::CellId, std::vector<double>> &rhoCoreValues,
151 const std::map<dealii::CellId, std::vector<double>> &gradRhoCoreValues,
152 const std::map<dealii::CellId, std::vector<double>> &hessianRhoCoreValues,
153 const std::map<
unsigned int,
154 std::map<dealii::CellId, std::vector<double>>>
156 const std::map<
unsigned int,
157 std::map<dealii::CellId, std::vector<double>>>
158 & hessianRhoCoreAtoms,
159 const std::map<dealii::CellId, std::vector<double>> &pseudoVLocElectro,
160 const std::map<
unsigned int,
161 std::map<dealii::CellId, std::vector<double>>>
162 & pseudoVLocAtomsElectro,
163 const dealii::AffineConstraints<double> &hangingPlusPBCConstraintsElectro,
174 std::vector<double> &
200 const dealii::MatrixFree<3, double> &matrixFreeData,
202 const unsigned int eigenDofHandlerIndex,
203 const unsigned int smearedChargeQuadratureId,
204 const unsigned int lpspQuadratureIdElectro,
205 const dealii::MatrixFree<3, double> &matrixFreeDataElectro,
206 const unsigned int phiTotDofHandlerIndexElectro,
215 &rhoTotalOutValuesLpsp,
217 &gradRhoTotalOutValuesLpsp,
218 const std::map<dealii::CellId, std::vector<double>> &pseudoVLocElectro,
219 const std::map<
unsigned int,
220 std::map<dealii::CellId, std::vector<double>>>
221 &pseudoVLocAtomsElectro,
222 const std::map<dealii::CellId, std::vector<double>> &rhoCoreValues,
223 const std::map<dealii::CellId, std::vector<double>> &gradRhoCoreValues,
224 const std::map<dealii::CellId, std::vector<double>> &hessianRhoCoreValues,
225 const std::map<
unsigned int,
226 std::map<dealii::CellId, std::vector<double>>>
228 const std::map<
unsigned int,
229 std::map<dealii::CellId, std::vector<double>>>
230 & hessianRhoCoreAtoms,
231 const dealii::AffineConstraints<double> &hangingPlusPBCConstraintsElectro,
247 dealii::Tensor<2, 3, double> &
264 const dealii::IndexSet &locally_owned_dofsForce,
265 std::map<std::pair<unsigned int, unsigned int>,
266 unsigned int> &atomsForceDofs);
270 const dealii::DoFHandler<3> & dofHandler,
271 const dealii::DoFHandler<3> & dofHandlerForce,
272 const dealii::AffineConstraints<double> &hangingPlusPBCConstraints,
274 std::vector<std::vector<dealii::DoFHandler<3>::active_cell_iterator>>
275 &cellsVselfBallsDofHandler,
276 std::vector<std::vector<dealii::DoFHandler<3>::active_cell_iterator>>
277 &cellsVselfBallsDofHandlerForce,
278 std::vector<std::map<dealii::CellId, unsigned int>>
279 &cellsVselfBallsClosestAtomIdDofHandler,
280 std::map<unsigned int, unsigned int> &AtomIdBinIdLocalDofHandler,
281 std::vector<std::map<dealii::DoFHandler<3>::active_cell_iterator,
282 std::vector<unsigned int>>>
283 &cellFacesVselfBallSurfacesDofHandler,
284 std::vector<std::map<dealii::DoFHandler<3>::active_cell_iterator,
285 std::vector<unsigned int>>>
286 &cellFacesVselfBallSurfacesDofHandlerForce);
290 const dealii::MatrixFree<3, double> &matrixFreeData,
291 const dealii::MatrixFree<3, double> &matrixFreeDataElectro);
298 const dealii::MatrixFree<3, double> &matrixFreeData,
299 const unsigned int eigenDofHandlerIndex,
300 const unsigned int smearedChargeQuadratureId,
301 const unsigned int lpspQuadratureIdElectro,
302 const dealii::MatrixFree<3, double> &matrixFreeDataElectro,
303 const unsigned int phiTotDofHandlerIndexElectro,
312 &rhoTotalOutValuesLpsp,
314 &gradRhoTotalOutValuesLpsp,
315 const std::map<dealii::CellId, std::vector<double>> &rhoCoreValues,
316 const std::map<dealii::CellId, std::vector<double>> &gradRhoCoreValues,
317 const std::map<dealii::CellId, std::vector<double>> &hessianRhoCoreValues,
318 const std::map<
unsigned int,
319 std::map<dealii::CellId, std::vector<double>>>
321 const std::map<
unsigned int,
322 std::map<dealii::CellId, std::vector<double>>>
323 & hessianRhoCoreAtoms,
324 const std::map<dealii::CellId, std::vector<double>> &pseudoVLocElectro,
325 const std::map<
unsigned int,
326 std::map<dealii::CellId, std::vector<double>>>
327 & pseudoVLocAtomsElectro,
332 const dealii::MatrixFree<3, double> &matrixFreeDataElectro,
333 const unsigned int phiTotDofHandlerIndexElectro,
334 const unsigned int smearedChargeQuadratureId,
335 const unsigned int lpspQuadratureIdElectro,
340 &rhoTotalOutValuesLpsp,
342 &gradRhoTotalOutValues,
344 &gradRhoTotalOutValuesLpsp,
345 const std::map<dealii::CellId, std::vector<double>> &pseudoVLocElectro,
346 const std::map<
unsigned int,
347 std::map<dealii::CellId, std::vector<double>>>
348 & pseudoVLocAtomsElectro,
356 const dealii::DoFHandler<3> & dofHandlerElectro,
358 const dealii::MatrixFree<3, double> & matrixFreeDataElectro,
359 const unsigned int smearedChargeQuadratureId);
366 const dealii::MatrixFree<3, double> &matrixFreeData,
367 const unsigned int eigenDofHandlerIndex,
368 const unsigned int smearedChargeQuadratureId,
369 const unsigned int lpspQuadratureIdElectro,
370 const dealii::MatrixFree<3, double> &matrixFreeDataElectro,
371 const unsigned int phiTotDofHandlerIndexElectro,
380 &rhoTotalOutValuesLpsp,
382 &gradRhoTotalOutValuesLpsp,
383 const std::map<dealii::CellId, std::vector<double>> &rhoCoreValues,
384 const std::map<dealii::CellId, std::vector<double>> &gradRhoCoreValues,
385 const std::map<dealii::CellId, std::vector<double>> &hessianRhoCoreValues,
386 const std::map<
unsigned int,
387 std::map<dealii::CellId, std::vector<double>>>
389 const std::map<
unsigned int,
390 std::map<dealii::CellId, std::vector<double>>>
391 & hessianRhoCoreAtoms,
392 const std::map<dealii::CellId, std::vector<double>> &pseudoVLocElectro,
393 const std::map<
unsigned int,
394 std::map<dealii::CellId, std::vector<double>>>
395 & pseudoVLocAtomsElectro,
400 std::map<
unsigned int, std::vector<double>>
401 & forceContributionFPSPLocalGammaAtoms,
402 dealii::FEValues<3> & feValues,
403 dealii::FEFaceValues<3> & feFaceValues,
404 dealii::FEEvaluation<3,
408 const dealii::MatrixFree<3, double> &matrixFreeData,
409 const unsigned int phiTotDofHandlerIndexElectro,
410 const unsigned int cell,
411 const dealii::AlignedVector<dealii::VectorizedArray<double>> &rhoQuads,
412 const dealii::AlignedVector<
413 dealii::Tensor<1, 3, dealii::VectorizedArray<double>>> &gradRhoQuads,
414 const std::map<
unsigned int,
415 std::map<dealii::CellId, std::vector<double>>>
418 const std::vector<std::map<dealii::CellId, unsigned int>>
419 &cellsVselfBallsClosestAtomIdDofHandler);
423 std::map<
unsigned int, std::vector<double>>
424 &forceContributionSmearedChargesGammaAtoms,
425 dealii::FEEvaluation<3, -1, 1, 3> & forceEval,
426 const dealii::MatrixFree<3, double> &matrixFreeData,
427 const unsigned int cell,
428 const dealii::AlignedVector<
429 dealii::Tensor<1, 3, dealii::VectorizedArray<double>>> &gradPhiTotQuads,
430 const std::vector<unsigned int> &nonTrivialAtomIdsMacroCell,
431 const std::map<dealii::CellId, std::vector<int>> &bQuadAtomIdsAllAtoms,
432 const dealii::AlignedVector<dealii::VectorizedArray<double>>
437 std::map<
unsigned int, std::vector<double>>
438 &forceContributionSmearedChargesGammaAtoms,
439 dealii::FEEvaluation<3, -1, 1, 3> & forceEval,
440 const dealii::MatrixFree<3, double> &matrixFreeData,
441 const unsigned int cell,
442 const dealii::AlignedVector<
443 dealii::Tensor<1, 3, dealii::VectorizedArray<double>>>
445 const std::vector<unsigned int> &nonTrivialAtomIdsMacroCell,
446 const std::map<dealii::CellId, std::vector<int>> &bQuadAtomIdsAllAtoms,
447 const dealii::AlignedVector<dealii::VectorizedArray<double>>
452 std::map<
unsigned int, std::vector<double>>
453 &forceContributionFNonlinearCoreCorrectionGammaAtoms,
454 dealii::FEEvaluation<
459 const dealii::MatrixFree<3, double> &matrixFreeData,
460 const unsigned int cell,
461 const dealii::AlignedVector<dealii::VectorizedArray<double>> &vxcQuads,
462 const std::map<
unsigned int,
463 std::map<dealii::CellId, std::vector<double>>>
469 std::map<
unsigned int, std::vector<double>>
470 &forceContributionFNonlinearCoreCorrectionGammaAtoms,
471 dealii::FEEvaluation<
476 const dealii::MatrixFree<3, double> &matrixFreeData,
477 const unsigned int cell,
478 const dealii::AlignedVector<
479 dealii::Tensor<1, 3, dealii::VectorizedArray<double>>> &derExcGradRho,
480 const std::map<
unsigned int,
481 std::map<dealii::CellId, std::vector<double>>>
482 &hessianRhoCoreAtoms);
486 std::map<
unsigned int, std::vector<double>>
487 &forceContributionFNonlinearCoreCorrectionGammaAtoms,
488 dealii::FEEvaluation<
493 const dealii::MatrixFree<3, double> &matrixFreeData,
494 const unsigned int cell,
495 const dealii::AlignedVector<dealii::VectorizedArray<double>>
497 const dealii::AlignedVector<dealii::VectorizedArray<double>>
499 const dealii::AlignedVector<
500 dealii::Tensor<1, 3, dealii::VectorizedArray<double>>>
502 const dealii::AlignedVector<
503 dealii::Tensor<1, 3, dealii::VectorizedArray<double>>>
505 const std::map<
unsigned int,
506 std::map<dealii::CellId, std::vector<double>>>
508 const std::map<
unsigned int,
509 std::map<dealii::CellId, std::vector<double>>>
510 & hessianRhoCoreAtoms,
511 const bool isXCGGA =
false);
515 const std::map<
unsigned int, std::vector<double>>
516 &forceContributionFPSPLocalGammaAtoms,
517 const std::map<std::pair<unsigned int, unsigned int>,
unsigned int>
519 const dealii::AffineConstraints<double> &constraintsNoneForce,
524 const std::map<
unsigned int, std::vector<double>>
525 & forceContributionLocalGammaAtoms,
526 std::vector<double> &accumForcesVector);
531 std::map<
unsigned int, std::vector<double>>
532 & forceContributionFnlGammaAtoms,
533 const dealii::MatrixFree<3, double> &matrixFreeData,
534 dealii::FEEvaluation<3,
539 const std::shared_ptr<
542 unsigned int numNonLocalAtomsCurrentProcess,
543 const std::vector<int> & globalChargeIdNonLocalAtoms,
544 const std::vector<unsigned int> &numberPseudoWaveFunctionsPerAtom,
545 const unsigned int cell,
546 const std::map<dealii::CellId, unsigned int> &cellIdToCellNumberMap,
548 const std::vector<dataTypes::number>
549 &projectorKetTimesPsiTimesVTimesPartOccContractionPsiQuadsFlattened,
551 const std::vector<dataTypes::number> &zetaDeltaVQuadsFlattened,
552 const std::vector<dataTypes::number> &
553 projectorKetTimesPsiTimesVTimesPartOccContractionGradPsiQuadsFlattened);
557 dealii::AlignedVector<
558 dealii::Tensor<1, 3, dealii::VectorizedArray<double>>> &FVectQuads,
559 const dealii::MatrixFree<3, double> & matrixFreeData,
560 const unsigned int numQuadPoints,
561 const std::shared_ptr<
564 const unsigned int numNonLocalAtomsCurrentProcess,
565 const std::vector<int> & globalChargeIdNonLocalAtoms,
566 const std::vector<unsigned int> &numberPseudoWaveFunctionsPerAtom,
567 const unsigned int cell,
568 const std::map<dealii::CellId, unsigned int> &cellIdToCellNumberMap,
569 const std::vector<dataTypes::number> & zetaDeltaVQuadsFlattened,
570 const std::vector<dataTypes::number> &
571 projectorKetTimesPsiTimesVTimesPartOccContractionGradPsiQuadsFlattened);
575 const std::map<
unsigned int, std::vector<double>>
576 &forceContributionFnlGammaAtoms);
579 dealii::Tensor<2, 3, double> & stressContribution,
580 const dealii::MatrixFree<3, double> &matrixFreeData,
581 const unsigned int numQuadPoints,
582 const std::vector<double> & jxwQuadsSubCells,
583 const unsigned int cell,
584 const unsigned int numNonLocalAtomsCurrentProcess,
585 const std::shared_ptr<
588 const std::vector<unsigned int> &numberPseudoWaveFunctionsPerAtom,
589 const std::map<dealii::CellId, unsigned int> &cellIdToCellNumberMap,
590 const std::vector<dataTypes::number> &zetalmDeltaVlProductDistImageAtoms,
592 const std::vector<dataTypes::number>
593 &projectorKetTimesPsiTimesVTimesPartOccContractionPsiQuadsFlattened,
595 const std::vector<dataTypes::number>
596 &projectorKetTimesPsiTimesVTimesPartOccContractionGradPsiQuadsFlattened,
597 const bool isSpinPolarized);
601 bool allowGaussianOverlapOnAtoms =
false);
608 const dealii::DoFHandler<3> & dofHandlerElectro,
610 const dealii::MatrixFree<3, double> & matrixFreeDataElectro,
611 const unsigned int smearedChargeQuadratureId);
615 const dealii::MatrixFree<3, double> &matrixFreeData,
616 const unsigned int eigenDofHandlerIndex,
617 const unsigned int smearedChargeQuadratureId,
618 const unsigned int lpspQuadratureIdElectro,
619 const dealii::MatrixFree<3, double> &matrixFreeDataElectro,
620 const unsigned int phiTotDofHandlerIndexElectro,
629 &rhoTotalOutValuesLpsp,
631 &gradRhoTotalOutValuesLpsp,
632 const std::map<dealii::CellId, std::vector<double>> &pseudoVLocElectro,
633 const std::map<
unsigned int,
634 std::map<dealii::CellId, std::vector<double>>>
635 &pseudoVLocAtomsElectro,
636 const std::map<dealii::CellId, std::vector<double>> &rhoCoreValues,
637 const std::map<dealii::CellId, std::vector<double>> &gradRhoCoreValues,
638 const std::map<dealii::CellId, std::vector<double>> &hessianRhoCoreValues,
639 const std::map<
unsigned int,
640 std::map<dealii::CellId, std::vector<double>>>
642 const std::map<
unsigned int,
643 std::map<dealii::CellId, std::vector<double>>>
644 & hessianRhoCoreAtoms,
649 const dealii::MatrixFree<3, double> &matrixFreeDataElectro,
650 const unsigned int phiTotDofHandlerIndexElectro,
651 const unsigned int smearedChargeQuadratureId,
652 const unsigned int lpspQuadratureIdElectro,
657 &rhoTotalOutValuesLpsp,
659 &gradRhoTotalOutValuesElectro,
661 &gradRhoTotalOutValuesElectroLpsp,
662 const std::map<dealii::CellId, std::vector<double>> &pseudoVLocElectro,
663 const std::map<
unsigned int,
664 std::map<dealii::CellId, std::vector<double>>>
665 & pseudoVLocAtomsElectro,
669 dealii::FEValues<3> & feValues,
670 dealii::FEFaceValues<3> & feFaceValues,
671 dealii::FEEvaluation<3,
675 const dealii::MatrixFree<3, double> &matrixFreeData,
676 const unsigned int phiTotDofHandlerIndexElectro,
677 const unsigned int cell,
678 const dealii::AlignedVector<dealii::VectorizedArray<double>> &rhoQuads,
679 const dealii::AlignedVector<
680 dealii::Tensor<1, 3, dealii::VectorizedArray<double>>> &gradRhoQuads,
681 const std::map<
unsigned int,
682 std::map<dealii::CellId, std::vector<double>>>
685 const std::vector<std::map<dealii::CellId, unsigned int>>
686 &cellsVselfBallsClosestAtomIdDofHandler);
689 dealii::FEEvaluation<
694 const dealii::MatrixFree<3, double> &matrixFreeData,
695 const unsigned int cell,
696 const dealii::AlignedVector<dealii::VectorizedArray<double>> &vxcQuads,
697 const dealii::AlignedVector<
698 dealii::Tensor<1, 3, dealii::VectorizedArray<double>>> &derExcGradRho,
699 const std::map<
unsigned int,
700 std::map<dealii::CellId, std::vector<double>>>
702 const std::map<
unsigned int,
703 std::map<dealii::CellId, std::vector<double>>>
704 &hessianRhoCoreAtoms);
707 dealii::FEEvaluation<
712 const dealii::MatrixFree<3, double> &matrixFreeData,
713 const unsigned int cell,
714 const dealii::AlignedVector<dealii::VectorizedArray<double>>
716 const dealii::AlignedVector<dealii::VectorizedArray<double>>
718 const dealii::AlignedVector<
719 dealii::Tensor<1, 3, dealii::VectorizedArray<double>>>
721 const dealii::AlignedVector<
722 dealii::Tensor<1, 3, dealii::VectorizedArray<double>>>
724 const std::map<
unsigned int,
725 std::map<dealii::CellId, std::vector<double>>>
727 const std::map<
unsigned int,
728 std::map<dealii::CellId, std::vector<double>>>
729 & hessianRhoCoreAtoms,
730 const bool isXCGGA =
false);
733 dealii::FEEvaluation<3, -1, 1, 3> & forceEval,
734 const dealii::MatrixFree<3, double> &matrixFreeData,
735 const unsigned int cell,
736 const dealii::AlignedVector<
737 dealii::Tensor<1, 3, dealii::VectorizedArray<double>>> &gradPhiTotQuads,
738 const std::vector<unsigned int> &nonTrivialAtomImageIdsMacroCell,
739 const std::map<dealii::CellId, std::vector<int>>
740 &bQuadAtomIdsAllAtomsImages,
741 const dealii::AlignedVector<dealii::VectorizedArray<double>>
745 dealii::FEEvaluation<3, -1, 1, 3> & forceEval,
746 const dealii::MatrixFree<3, double> &matrixFreeData,
747 const unsigned int cell,
748 const dealii::AlignedVector<
749 dealii::Tensor<1, 3, dealii::VectorizedArray<double>>> &gradVselfQuads,
750 const std::vector<unsigned int> &nonTrivialAtomImageIdsMacroCell,
751 const std::map<dealii::CellId, std::vector<int>>
752 &bQuadAtomIdsAllAtomsImages,
753 const dealii::AlignedVector<dealii::VectorizedArray<double>>
787 std::vector<double> d_forceAtomsFloatingKPoints;
875 std::map<std::pair<unsigned int, unsigned int>,
unsigned int>
880 std::map<std::pair<unsigned int, unsigned int>,
unsigned int>
886 std::vector<std::vector<dealii::DoFHandler<3>::active_cell_iterator>>
891 std::vector<std::vector<dealii::DoFHandler<3>::active_cell_iterator>>
896 std::vector<std::map<dealii::CellId, unsigned int>>
909 std::vector<std::map<dealii::DoFHandler<3>::active_cell_iterator,
910 std::vector<unsigned int>>>
919 std::vector<std::map<dealii::DoFHandler<3>::active_cell_iterator,
920 std::vector<unsigned int>>>
926 std::vector<std::vector<dealii::DoFHandler<3>::active_cell_iterator>>
931 std::vector<std::vector<dealii::DoFHandler<3>::active_cell_iterator>>
936 std::vector<std::map<dealii::CellId, unsigned int>>
949 std::vector<std::map<dealii::DoFHandler<3>::active_cell_iterator,
950 std::vector<unsigned int>>>
959 std::vector<std::map<dealii::DoFHandler<3>::active_cell_iterator,
960 std::vector<unsigned int>>>
963 std::map<dealii::CellId, dealii::DoFHandler<3>::active_cell_iterator>