Skip to content

Commit 78d561d

Browse files
authored
Merge pull request #100 from dftfeDevelopers/BlockedChebyImpl
Blocked cheby impl
2 parents 3105aa4 + 0372407 commit 78d561d

51 files changed

Lines changed: 3781 additions & 1046 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

analysis/classicalEnrichmentComparison/PSPnonlocal/KSDFTClassicalUniformQuad/TestKohnShamDft.cpp

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -351,13 +351,16 @@ int main(int argc, char** argv)
351351
const size_type dim = 3;
352352

353353
double atomPartitionTolerance = readParameter<double>(parameterInputFileName, "atomPartitionTolerance", rootCout);
354-
unsigned int num1DGaussSizeElec = readParameter<unsigned int>(parameterInputFileName, "num1DGaussSizeElec", rootCout);
354+
unsigned int num1DGaussSubdividedSizeElec = readParameter<unsigned int>(parameterInputFileName, "num1DGaussSubdividedSizeElec", rootCout);
355355
unsigned int gaussSubdividedCopiesElec = readParameter<unsigned int>(parameterInputFileName, "gaussSubdividedCopiesElec", rootCout);
356-
unsigned int num1DGaussSizeEigen = readParameter<unsigned int>(parameterInputFileName, "num1DGaussSizeEigen", rootCout);
356+
unsigned int num1DGaussSubdividedSizeEigen = readParameter<unsigned int>(parameterInputFileName, "num1DGaussSubdividedSizeEigen", rootCout);
357357
unsigned int gaussSubdividedCopiesEigen = readParameter<unsigned int>(parameterInputFileName, "gaussSubdividedCopiesEigen", rootCout);
358358
bool isNumericalNuclearSolve = readParameter<bool>(parameterInputFileName, "isNumericalNuclearSolve", rootCout);
359359
bool isDeltaRhoPoissonSolve = readParameter<bool>(parameterInputFileName, "isDeltaRhoPoissonSolve", rootCout);
360360

361+
unsigned int num1DGaussSubdividedSizeGrad = readParameter<unsigned int>(parameterInputFileName, "num1DGaussSubdividedSizeGrad", rootCout);
362+
unsigned int gaussSubdividedCopiesGrad = readParameter<unsigned int>(parameterInputFileName, "gaussSubdividedCopiesGrad", rootCout);
363+
361364
unsigned int num1DGaussSubdividedSizeNonLocOperator = 14;
362365
unsigned int gaussSubdividedCopiesNonLocOperator = 1;
363366

@@ -531,10 +534,10 @@ std::shared_ptr<linearAlgebra::OperatorContext<double,
531534
linAlgOpContext);
532535

533536
std::shared_ptr<quadrature::QuadratureRule> gaussSubdivQuadRuleElec =
534-
std::make_shared<quadrature::QuadratureRuleGaussIterated>(dim, num1DGaussSizeElec, gaussSubdividedCopiesElec);
537+
std::make_shared<quadrature::QuadratureRuleGaussIterated>(dim, num1DGaussSubdividedSizeElec, gaussSubdividedCopiesElec);
535538

536539
std::shared_ptr<quadrature::QuadratureRule> gaussSubdivQuadRuleEigen =
537-
std::make_shared<quadrature::QuadratureRuleGaussIterated>(dim, num1DGaussSizeEigen, gaussSubdividedCopiesEigen);
540+
std::make_shared<quadrature::QuadratureRuleGaussIterated>(dim, num1DGaussSubdividedSizeEigen, gaussSubdividedCopiesEigen);
538541

539542
quadrature::QuadratureRuleAttributes quadAttrGaussSubdivided(quadrature::QuadratureFamily::GAUSS_SUBDIVIDED,true);
540543

@@ -625,22 +628,30 @@ std::shared_ptr<linearAlgebra::OperatorContext<double,
625628
(basisDofHandlerWaveFn, quadAttrGaussSubdivided, basisAttrMap, ksdft::KSDFTDefaults::CELL_BATCH_SIZE_GRAD_EVAL, *linAlgOpContext);
626629
feBDAtomCenterNonLocalOperator->evaluateBasisData(quadAttrGaussSubdivided, quadRuleContainerGaussSubdividedAtomNonLocOp, basisAttrMap);
627630

631+
std::shared_ptr<quadrature::QuadratureRule> gaussSubdivQuadRuleGrad =
632+
std::make_shared<quadrature::QuadratureRuleGaussIterated>(dim, num1DGaussSubdividedSizeGrad, gaussSubdividedCopiesGrad);
633+
634+
std::shared_ptr<quadrature::QuadratureRuleContainer> quadRuleContainerAdaptiveGrad =
635+
std::make_shared<quadrature::QuadratureRuleContainer>
636+
(quadAttrGaussSubdivided,
637+
gaussSubdivQuadRuleGrad,
638+
triangulationBase,
639+
*cellMapping);
640+
628641
basisAttrMap[basis::BasisStorageAttributes::StoreValues] = false;
629642
basisAttrMap[basis::BasisStorageAttributes::StoreGradient] = true;
630643
basisAttrMap[basis::BasisStorageAttributes::StoreHessian] = false;
631644
basisAttrMap[basis::BasisStorageAttributes::StoreOverlap] = false;
632645
basisAttrMap[basis::BasisStorageAttributes::StoreGradNiGradNj] = false;
633646
basisAttrMap[basis::BasisStorageAttributes::StoreJxW] = true;
634647

635-
quadrature::QuadratureRuleAttributes quadAttrEigen(quadrature::QuadratureFamily::GAUSS,true,feOrderEigen+1);
636-
637648
// Set up the FE Basis Data Storage
638649
std::shared_ptr<basis::FEBasisDataStorage<double, Host>> feBDHamStiffnessMatrix =
639650
std::make_shared<basis::CFEBDSOnTheFlyComputeDealii<double, double, Host,dim>>
640-
(basisDofHandlerWaveFn, quadAttrEigen, basisAttrMap, ksdft::KSDFTDefaults::CELL_BATCH_SIZE_GRAD_EVAL, *linAlgOpContext);
651+
(basisDofHandlerWaveFn, quadAttrGaussSubdivided, basisAttrMap, ksdft::KSDFTDefaults::CELL_BATCH_SIZE_GRAD_EVAL, *linAlgOpContext);
641652

642653
// evaluate basis data
643-
feBDHamStiffnessMatrix->evaluateBasisData(quadAttrEigen, basisAttrMap);
654+
feBDHamStiffnessMatrix->evaluateBasisData(quadAttrGaussSubdivided, quadRuleContainerAdaptiveGrad, basisAttrMap);
644655

645656
std::shared_ptr<const basis::FEBasisDataStorage<double,Host>> feBDKineticHamiltonian = feBDHamStiffnessMatrix;
646657
std::shared_ptr<const basis::FEBasisDataStorage<double, Host>> feBDEXCHamiltonian = feBDElectrostaticsHamiltonian;

analysis/classicalEnrichmentComparison/PSPnonlocal/KSDFTOrthoEFEUniformQuad/TestKohnShamDft.cpp

Lines changed: 28 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -490,6 +490,8 @@ int main(int argc, char** argv)
490490
adaptiveMesh.createMesh(*triangulationBase);
491491
p.registerEnd("Create Mesh");
492492

493+
utils::printCurrentMemoryUsage(comm, "Create Mesh");
494+
493495
p.registerStart("Quadrature Rule Creation");
494496
//quadrature::QuadratureRuleAttributes quadAttrAdaptive(quadrature::QuadratureFamily::ADAPTIVE,false);
495497

@@ -580,6 +582,7 @@ int main(int argc, char** argv)
580582
rootCout << "Number of quadrature points in wave function adaptive quadrature: "<<nQuad<<"\n";
581583

582584
p.registerEnd("Quadrature Rule Creation");
585+
utils::printCurrentMemoryUsage(comm, "Quadrature Rule Creation");
583586
p.registerStart("Ortho EFE basis manager creation");
584587

585588
std::vector<double> smearedChargeRadiusVec(atomCoordinatesVec.size(),rc);
@@ -658,19 +661,6 @@ int main(int argc, char** argv)
658661
std::shared_ptr<basis::EnrichmentClassicalInterfaceSpherical
659662
<double, Host, dim>>
660663
enrichClassIntfceTotalPot = nullptr;
661-
if (!isDeltaRhoPoissonSolve)
662-
// Create the enrichmentClassicalInterface object for vtotal
663-
enrichClassIntfceTotalPot = std::make_shared<basis::EnrichmentClassicalInterfaceSpherical
664-
<double, Host, dim>>
665-
(cfeBasisDataStorageGLLElec,
666-
cfeBasisDataStorageGaussSubdividedElec,
667-
atomSphericalDataContainer,
668-
atomPartitionTolerance,
669-
atomSymbolVec,
670-
atomCoordinatesVec,
671-
"vtotal",
672-
linAlgOpContext,
673-
comm);
674664

675665
// Create the enrichmentClassicalInterface object for wavefn
676666
std::shared_ptr<basis::EnrichmentClassicalInterfaceSpherical
@@ -691,9 +681,22 @@ int main(int argc, char** argv)
691681

692682
std::shared_ptr<basis::FEBasisDofHandler<double, Host,dim>> basisDofHandlerTotalPot = nullptr;
693683
if (!isDeltaRhoPoissonSolve)
684+
{
685+
enrichClassIntfceTotalPot = std::make_shared<basis::EnrichmentClassicalInterfaceSpherical
686+
<double, Host, dim>>
687+
(cfeBasisDataStorageGLLElec,
688+
cfeBasisDataStorageGaussSubdividedElec,
689+
atomSphericalDataContainer,
690+
atomPartitionTolerance,
691+
atomSymbolVec,
692+
atomCoordinatesVec,
693+
"vtotal",
694+
linAlgOpContext,
695+
comm);
694696
basisDofHandlerTotalPot =
695697
std::make_shared<basis::EFEBasisDofHandlerDealii<double, double,Host,dim>>(
696698
enrichClassIntfceTotalPot, comm);
699+
}
697700
else
698701
basisDofHandlerTotalPot = cfeBasisDofHandlerElec;
699702

@@ -719,6 +722,7 @@ int main(int argc, char** argv)
719722
*/
720723

721724
p.registerEnd("Ortho EFE basis manager creation");
725+
utils::printCurrentMemoryUsage(comm, "Ortho EFE basis manager creation");
722726

723727
rootCout << "Total Number of dofs electrostatics: " << basisDofHandlerTotalPot->nGlobalNodes() << "\n";
724728
rootCout << "Total Number of dofs eigensolve: " << basisDofHandlerWaveFn->nGlobalNodes() << "\n";
@@ -753,6 +757,7 @@ int main(int argc, char** argv)
753757
feBDTotalChargeStiffnessMatrix->evaluateBasisData(quadAttrGaussElectro, basisAttrMap);
754758

755759
p.registerEnd("Electrostatics basis grad datastorage eval");
760+
utils::printCurrentMemoryUsage(comm, "Electrostatics basis grad datastorage eval");
756761
p.registerStart("Electrostatics basis bsmear datastorage eval");
757762

758763
basisAttrMap[basis::BasisStorageAttributes::StoreValues] = true;
@@ -775,6 +780,7 @@ int main(int argc, char** argv)
775780
feBDNucChargeRhs->evaluateBasisData(quadAttrGaussSubdivided, quadRuleContainerGaussSubdividedElec, basisAttrMap);
776781

777782
p.registerEnd("Electrostatics basis bsmear datastorage eval");
783+
utils::printCurrentMemoryUsage(comm, "Electrostatics basis bsmear datastorage eval");
778784
p.registerStart("Electrostatics basis rho datastorage eval");
779785

780786
std::shared_ptr<basis::FEBasisDataStorage<double, Host>> feBDElecChargeRhs = nullptr;
@@ -790,7 +796,7 @@ int main(int argc, char** argv)
790796
feBDElecChargeRhs->evaluateBasisData(quadAttrGaussSubdivided, quadRuleContainerAdaptiveOrbital, basisAttrMap);
791797

792798
p.registerEnd("Electrostatics basis rho datastorage eval");
793-
799+
utils::printCurrentMemoryUsage(comm, "Electrostatics basis rho datastorage eval");
794800
p.registerStart("Orbital basis datastorage eval");
795801

796802
basisAttrMap[basis::BasisStorageAttributes::StoreValues] = true;
@@ -819,6 +825,11 @@ int main(int argc, char** argv)
819825

820826
feBDAtomCenterNonLocalOperator->evaluateBasisData(quadAttrGaussSubdivided, quadRuleContainerAdaptiveAtomCenterNonLocalOperator, basisAttrMap);
821827

828+
p.registerEnd("Orbital basis datastorage eval");
829+
utils::printCurrentMemoryUsage(comm, "Orbital basis datastorage eval");
830+
831+
p.registerStart("Orbital Grad basis datastorage eval");
832+
822833
basisAttrMap[basis::BasisStorageAttributes::StoreValues] = false;
823834
basisAttrMap[basis::BasisStorageAttributes::StoreGradient] = true;
824835
basisAttrMap[basis::BasisStorageAttributes::StoreHessian] = false;
@@ -830,16 +841,14 @@ int main(int argc, char** argv)
830841
std::make_shared<basis::EFEBDSOnTheFlyComputeDealii<double, double, Host,dim>>
831842
(basisDofHandlerWaveFn, quadAttrGaussSubdivided, basisAttrMap, ksdft::KSDFTDefaults::CELL_BATCH_SIZE_GRAD_EVAL, *linAlgOpContext);
832843

833-
p.registerEnd("Orbital basis datastorage eval");
834-
p.registerStart("Orbital Grad basis datastorage eval");
835-
836844
efeBasisDataAdaptiveGrad->evaluateBasisData(quadAttrGaussSubdivided, quadRuleContainerAdaptiveGrad, basisAttrMap);
837845

838846
std::shared_ptr<const basis::FEBasisDataStorage<double, Host>> feBDElectrostaticsHamiltonian = efeBasisDataAdaptiveOrbital;
839847
std::shared_ptr<const basis::FEBasisDataStorage<double,Host>> feBDKineticHamiltonian = efeBasisDataAdaptiveGrad;
840848
std::shared_ptr<const basis::FEBasisDataStorage<double, Host>> feBDEXCHamiltonian = efeBasisDataAdaptiveOrbital;
841849

842850
p.registerEnd("Orbital Grad basis datastorage eval");
851+
utils::printCurrentMemoryUsage(comm, "Orbital Grad basis datastorage eval");
843852
p.print();
844853

845854
std::shared_ptr<const utils::ScalarSpatialFunctionReal>
@@ -934,6 +943,7 @@ int main(int argc, char** argv)
934943
linAlgOpContext);
935944

936945
p.registerEnd("Hamiltonian Basis overlap inverse eval");
946+
utils::printCurrentMemoryUsage(comm, "Hamiltonian Basis overlap and inv");
937947
p.registerStart("Kohn Sham DFT Class Init");
938948
std::shared_ptr<ksdft::KohnShamDFT<double,
939949
double,
@@ -1048,6 +1058,7 @@ int main(int argc, char** argv)
10481058
utils::throwException(false, "Option not there for KohnShamDFT class creation.");
10491059
}
10501060
p.registerEnd("Kohn Sham DFT Class Init");
1061+
utils::printCurrentMemoryUsage(comm, "Kohn Sham DFT Class Init");
10511062
p.print();
10521063

10531064
pTot.registerEnd("Initilization");

0 commit comments

Comments
 (0)