From 5dd744c47581184f3407d54dd4a48c7f34450dab Mon Sep 17 00:00:00 2001 From: Vishal Subramanian Date: Mon, 3 Oct 2022 22:11:29 -0400 Subject: [PATCH] veff calculations through exc class --- src/dftOperator/kohnShamDFTOperator.cc | 111 ++++++++++++++++--------- 1 file changed, 71 insertions(+), 40 deletions(-) diff --git a/src/dftOperator/kohnShamDFTOperator.cc b/src/dftOperator/kohnShamDFTOperator.cc index cecaae158..d6ae1922f 100644 --- a/src/dftOperator/kohnShamDFTOperator.cc +++ b/src/dftOperator/kohnShamDFTOperator.cc @@ -503,15 +503,22 @@ namespace dftfe densityValue[q] += temp2[q]; } - xc_lda_vxc(&(dftPtr->funcX), - numberQuadraturePoints, - &densityValue[0], - &exchangePotentialVal[0]); + std::map*> rhoData; - xc_lda_vxc(&(dftPtr->funcC), - numberQuadraturePoints, - &densityValue[0], - &corrPotentialVal[0]); + std::map*> outputDerExchangeEnergy; + std::map*> outputDerCorrEnergy; + + rhoData [rhoDataAttributes::values] = &densityValue; + + outputDerExchangeEnergy[VeffOutputDataAttributes::derEnergyWithDensity] = &exchangePotentialVal; + + outputDerCorrEnergy[VeffOutputDataAttributes::derEnergyWithDensity] = &corrPotentialVal; + + dftPtr->excFunctionalPtr->computeDensityBasedVxc( + numberQuadraturePoints, + rhoInData, + outputDerExchangeEnergy, + outputDerCorrEnergy); for (unsigned int q = 0; q < numberQuadraturePoints; ++q) { @@ -619,20 +626,28 @@ namespace dftfe sigmaValue[q] = gradRhoX * gradRhoX + gradRhoY * gradRhoY + gradRhoZ * gradRhoZ; } + std::map*> rhoData; - xc_gga_vxc(&(dftPtr->funcX), - numberQuadraturePoints, - &densityValue[0], - &sigmaValue[0], - &derExchEnergyWithDensityVal[0], - &derExchEnergyWithSigmaVal[0]); - xc_gga_vxc(&(dftPtr->funcC), - numberQuadraturePoints, - &densityValue[0], - &sigmaValue[0], - &derCorrEnergyWithDensityVal[0], - &derCorrEnergyWithSigmaVal[0]); + std::map*> outputDerExchangeEnergy; + std::map*> outputDerCorrEnergy; + + + rhoData [rhoDataAttributes::values] = &densityValue; + rhoData [rhoDataAttributes::sigmaGradValue] = &sigmaValue; + + outputDerExchangeEnergy[VeffOutputDataAttributes::derEnergyWithDensity] = &derExchEnergyWithDensityVal; + outputDerExchangeEnergy[VeffOutputDataAttributes::derEnergyWithSigmaGradDensity] = &derExchEnergyWithSigmaVal; + + outputDerCorrEnergy[VeffOutputDataAttributes::derEnergyWithDensity] = &derCorrEnergyWithDensityVal; + outputDerCorrEnergy[VeffOutputDataAttributes::derEnergyWithSigmaGradDensity] = &derCorrEnergyWithSigmaVal; + + excFunctionalPtr->computeDensityBasedVxc( + numberQuadraturePoints, + rhoData, + outputDerExchangeEnergy, + outputDerCorrEnergy); + for (unsigned int q = 0; q < numberQuadraturePoints; ++q) @@ -1662,15 +1677,22 @@ namespace dftfe } } - xc_lda_vxc(&(dftPtr->funcX), - numberQuadraturePoints, - &densityValue[0], - &exchangePotentialVal[0]); + std::map*> rhoData; - xc_lda_vxc(&(dftPtr->funcC), - numberQuadraturePoints, - &densityValue[0], - &corrPotentialVal[0]); + std::map*> outputDerExchangeEnergy; + std::map*> outputDerCorrEnergy; + + rhoData [rhoDataAttributes::values] = &densityValue; + + outputDerExchangeEnergy[VeffOutputDataAttributes::derEnergyWithDensity] = &exchangePotentialVal; + + outputDerCorrEnergy[VeffOutputDataAttributes::derEnergyWithDensity] = &corrPotentialVal; + + dftPtr->excFunctionalPtr->computeDensityBasedVxc( + numberQuadraturePoints, + rhoInData, + outputDerExchangeEnergy, + outputDerCorrEnergy); for (unsigned int q = 0; q < numberQuadraturePoints; ++q) { @@ -1803,19 +1825,28 @@ namespace dftfe gradRhoZ2 * gradRhoZ2; } - xc_gga_vxc(&(dftPtr->funcX), - numberQuadraturePoints, - &densityValue[0], - &sigmaValue[0], - &derExchEnergyWithDensityVal[0], - &derExchEnergyWithSigma[0]); + std::map*> rhoData; + + + std::map*> outputDerExchangeEnergy; + std::map*> outputDerCorrEnergy; + + + rhoData [rhoDataAttributes::values] = &densityValue; + rhoData [rhoDataAttributes::sigmaGradValue] = &sigmaValue; + + outputDerExchangeEnergy[VeffOutputDataAttributes::derEnergyWithDensity] = &derExchEnergyWithDensityVal; + outputDerExchangeEnergy[VeffOutputDataAttributes::derEnergyWithSigmaGradDensity] = &derExchEnergyWithSigma; + + outputDerCorrEnergy[VeffOutputDataAttributes::derEnergyWithDensity] = &derCorrEnergyWithDensityVal; + outputDerCorrEnergy[VeffOutputDataAttributes::derEnergyWithSigmaGradDensity] = &derCorrEnergyWithSigma; + + excFunctionalPtr->computeDensityBasedVxc( + numberQuadraturePoints, + rhoData, + outputDerExchangeEnergy, + outputDerCorrEnergy); - xc_gga_vxc(&(dftPtr->funcC), - numberQuadraturePoints, - &densityValue[0], - &sigmaValue[0], - &derCorrEnergyWithDensityVal[0], - &derCorrEnergyWithSigma[0]); for (unsigned int q = 0; q < numberQuadraturePoints; ++q)