DFT-FE 1.3.0-pre
Density Functional Theory With Finite-Elements
Loading...
Searching...
No Matches
KohnShamDFTBaseOperator.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
19#ifndef KohnShamDFTBaseOperatorClass_H_
20#define KohnShamDFTBaseOperatorClass_H_
21#include <constants.h>
23#include <headers.h>
24#include <operator.h>
25#include <BLASWrapper.h>
26#include <FEBasisOperations.h>
28#include <AuxDensityMatrix.h>
29
30#include "hubbardClass.h"
31
32namespace dftfe
33{
34 template <dftfe::utils::MemorySpace memorySpace>
35 class KohnShamDFTBaseOperator : public operatorDFTClass<memorySpace>
36 {
37 public:
40 BLASWrapperPtr,
41 std::shared_ptr<
43 BLASWrapperPtrHost,
44 std::shared_ptr<
46 basisOperationsPtr,
47 std::shared_ptr<
49 double,
51 basisOperationsPtrHost,
52 std::shared_ptr<
54 pseudopotentialClassPtr,
55 std::shared_ptr<excManager<memorySpace>> excManagerPtr,
56 dftParameters *dftParamsPtr,
57 const dftfe::uInt densityQuadratureID,
58 const dftfe::uInt lpspQuadratureID,
59 const dftfe::uInt feOrderPlusOneQuadratureID,
60 const MPI_Comm &mpi_comm_parent,
61 const MPI_Comm &mpi_comm_domain);
62
63 void
64 init(const std::vector<double> &kPointCoordinates,
65 const std::vector<double> &kPointWeights);
66
67 /*
68 * Sets the d_isExternalPotCorrHamiltonianComputed to false
69 */
70 void
72
73 void
75
76
77 const MPI_Comm &
79
82
85 {
87 ->d_constraintInfo[d_basisOperationsPtr->d_dofHandlerID]);
88 }
89
92 const dftfe::uInt index);
93
94
97 const dftfe::uInt index);
98
99
100 /**
101 * @brief Computes effective potential involving exchange-correlation functionals
102 * @param auxDensityMatrixRepresentation core plus valence electron-density
103 * @param phiValues electrostatic potential arising both from electron-density and nuclear charge
104 */
105 void
107 std::shared_ptr<AuxDensityMatrix<memorySpace>>
108 auxDensityXCRepresentationPtr,
110 &phiValues,
111 const dftfe::uInt spinIndex = 0);
112
113 /**
114 * @brief Sets the V-eff potential
115 * @param vKS_quadValues the input V-KS values stored at the quadrature points
116 * @param spinIndex spin index
117 */
118 void
120 const std::vector<
122 &vKS_quadValues,
123 const dftfe::uInt spinIndex);
124
125 void
127 const std::map<dealii::CellId, std::vector<double>>
128 &externalPotCorrValues);
129
130 void
132 std::shared_ptr<AuxDensityMatrix<memorySpace>>
133 auxDensityXCRepresentationPtr,
134 const std::vector<
136 &rhoPrimeValues,
137 const std::vector<
139 &gradRhoPrimeValues,
141 &phiPrimeValues,
142 const dftfe::uInt spinIndex);
143
144 /**
145 * @brief sets the data member to appropriate kPoint and spin Index
146 *
147 * @param kPointIndex k-point Index to set
148 */
149 void
151 const dftfe::uInt spinIndex);
152
153 void
155
158
161
162 void
164 const bool onlyHPrimePartForFirstOrderDensityMatResponse = false);
165
166 void
168
169 /**
170 * @brief Computing Y = scalarHX*HX + scalarX*X + scalarY*Y for a given X and Y in full precision
171 *
172 * @param src X vector
173 * @param scalarHX scalar for HX
174 * @param scalarY scalar for Y
175 * @param scalarX scalar for X
176 * @param dst Y vector
177 * @param onlyHPrimePartForFirstOrderDensityMatResponse flag to compute only HPrime part for first order density matrix response
178 */
179 void
181 const double scalarHX,
182 const double scalarY,
183 const double scalarX,
185 const bool onlyHPrimePartForFirstOrderDensityMatResponse =
186 false) override;
187
188 /**
189 * @brief Computing Y = scalarHX*HX + scalarX*X + scalarY*Y for a given X and Y in full precision
190 *
191 * @param src X vector
192 * @param scalarHX scalar for HX
193 * @param scalarY scalar for Y
194 * @param scalarX scalar for X
195 * @param dst Y vector
196 * @param onlyHPrimePartForFirstOrderDensityMatResponse flag to compute only HPrime part for first order density matrix response
197 */
198 void
200 &src,
201 const double scalarHX,
202 const double scalarY,
203 const double scalarX,
205 &dst,
206 const bool onlyHPrimePartForFirstOrderDensityMatResponse =
207 false) override;
208 /**
209 * @brief Computing Y = scalarHX*M^{1/2}HM^{1/2}X + scalarX*X + scalarY*Y for a given X and Y in full precision. Used for TD-DFT and Inverse DFT calc.
210 *
211 * @param src X vector
212 * @param scalarHX scalar for HX
213 * @param scalarY scalar for Y
214 * @param scalarX scalar for X
215 * @param dst Y vector
216 * @param onlyHPrimePartForFirstOrderDensityMatResponse flag to compute only HPrime part for first order density matrix response
217 */
218 void
221 const double scalarHX,
222 const double scalarY,
223 const double scalarX,
225 const bool onlyHPrimePartForFirstOrderDensityMatResponse = false);
226
227 void
229
230 protected:
231 std::shared_ptr<
234
235 std::shared_ptr<
238
239 std::shared_ptr<dftfe::linearAlgebra::BLASWrapper<memorySpace>>
241 std::shared_ptr<
244 std::shared_ptr<
247 std::shared_ptr<
249 double,
252 std::shared_ptr<
255 std::shared_ptr<excManager<memorySpace>> d_excManagerPtr;
257
258 std::vector<dftfe::utils::MemoryStorage<dataTypes::number, memorySpace>>
260 std::vector<dftfe::utils::MemoryStorage<dataTypes::numberFP32, memorySpace>>
264
265
270
275
280
285
286
290
298 std::vector<dftfe::utils::MemoryStorage<double, memorySpace>>
300 std::vector<dftfe::utils::MemoryStorage<double, memorySpace>>
302 std::vector<dftfe::utils::MemoryStorage<double, memorySpace>>
304 // Constraints scaled with inverse sqrt diagonal Mass Matrix
305 std::shared_ptr<dftUtils::constraintMatrixInfo<memorySpace>>
307 std::shared_ptr<dftUtils::constraintMatrixInfo<memorySpace>>
309 // kPoint cartesian coordinates
310 std::vector<double> d_kPointCoordinates;
311 // k point weights
312 std::vector<double> d_kPointWeights;
313
322
323
331 const MPI_Comm d_mpiCommParent;
332 const MPI_Comm d_mpiCommDomain;
339 dealii::ConditionalOStream pcout;
340
341 // compute-time logger
342 dealii::TimerOutput computing_timer;
343
344 std::shared_ptr<hubbard<dataTypes::number, memorySpace>> d_hubbardClassPtr;
350
355
357 };
358} // namespace dftfe
359#endif
Definition AtomicCenteredNonLocalOperator.h:66
Definition AuxDensityMatrix.h:41
std::shared_ptr< AtomicCenteredNonLocalOperator< dataTypes::numberFP32, memorySpace > > d_pseudopotentialNonLocalOperatorSinglePrec
Definition KohnShamDFTBaseOperator.h:237
void HX(dftfe::linearAlgebra::MultiVector< dataTypes::numberFP32, memorySpace > &src, const double scalarHX, const double scalarY, const double scalarX, dftfe::linearAlgebra::MultiVector< dataTypes::numberFP32, memorySpace > &dst, const bool onlyHPrimePartForFirstOrderDensityMatResponse=false) override
Computing Y = scalarHX*HX + scalarX*X + scalarY*Y for a given X and Y in full precision.
dftfe::uInt d_cellsBlockSizeHamiltonianConstruction
Definition KohnShamDFTBaseOperator.h:335
std::shared_ptr< dftfe::linearAlgebra::BLASWrapper< memorySpace > > d_BLASWrapperPtr
Definition KohnShamDFTBaseOperator.h:240
std::shared_ptr< hubbard< dataTypes::number, memorySpace > > d_hubbardClassPtr
Definition KohnShamDFTBaseOperator.h:344
dftfe::utils::MemoryStorage< dataTypes::numberFP32, memorySpace > d_cellWaveFunctionMatrixSrcSinglePrec
Definition KohnShamDFTBaseOperator.h:272
std::shared_ptr< dftfe::basis::FEBasisOperations< dataTypes::number, double, dftfe::utils::MemorySpace::HOST > > d_basisOperationsPtrHost
Definition KohnShamDFTBaseOperator.h:251
dftUtils::constraintMatrixInfo< memorySpace > * getOverloadedConstraintMatrix() const
Definition KohnShamDFTBaseOperator.h:84
dftfe::utils::MemoryStorage< double, memorySpace > d_VeffExtPotJxW
Definition KohnShamDFTBaseOperator.h:289
dftfe::uInt d_HamiltonianIndex
Definition KohnShamDFTBaseOperator.h:329
void reinitNumberWavefunctions(const dftfe::uInt numWfc)
dftfe::linearAlgebra::MultiVector< dataTypes::number, memorySpace > d_srcNonLocalTemp
Definition KohnShamDFTBaseOperator.h:347
dftfe::utils::MemoryStorage< double, memorySpace > tempHamMatrixBZBlockNonCollin
Definition KohnShamDFTBaseOperator.h:321
dftfe::linearAlgebra::MultiVector< dataTypes::numberFP32, memorySpace > d_srcNonLocalTempSinglePrec
Definition KohnShamDFTBaseOperator.h:352
bool d_isExternalPotCorrHamiltonianComputed
Definition KohnShamDFTBaseOperator.h:330
dftfe::utils::MemoryStorage< double, memorySpace > tempHamMatrixRealBlock
Definition KohnShamDFTBaseOperator.h:314
dftfe::utils::MemoryStorage< double, memorySpace > d_BeffxJxW
Definition KohnShamDFTBaseOperator.h:287
std::shared_ptr< dftUtils::constraintMatrixInfo< memorySpace > > inverseMassVectorScaledConstraintsNoneDataInfoPtr
Definition KohnShamDFTBaseOperator.h:306
std::vector< dftfe::utils::MemoryStorage< double, memorySpace > > d_derExcwithTauTimesinvJacKpointTimesJxW
Definition KohnShamDFTBaseOperator.h:303
dftfe::utils::MemoryStorage< double, memorySpace > d_cellHamiltonianMatrixExtPot
Definition KohnShamDFTBaseOperator.h:263
std::vector< dftfe::utils::MemoryStorage< double, memorySpace > > d_invJacKPointTimesJxW
Definition KohnShamDFTBaseOperator.h:299
dftfe::utils::MemoryStorage< double, memorySpace > d_BeffyJxW
Definition KohnShamDFTBaseOperator.h:288
void reinitkPointSpinIndex(const dftfe::uInt kPointIndex, const dftfe::uInt spinIndex)
sets the data member to appropriate kPoint and spin Index
dftfe::linearAlgebra::MultiVector< dataTypes::number, memorySpace > d_tempBlockVectorOverlapInvX
Definition KohnShamDFTBaseOperator.h:282
dftfe::uInt d_nOMPThreads
Definition KohnShamDFTBaseOperator.h:338
void setVEff(const std::vector< dftfe::utils::MemoryStorage< double, dftfe::utils::MemorySpace::HOST > > &vKS_quadValues, const dftfe::uInt spinIndex)
Sets the V-eff potential.
dftfe::linearAlgebra::MultiVector< dataTypes::numberFP32, memorySpace > & getScratchFEMultivectorSinglePrec(const dftfe::uInt numVectors, const dftfe::uInt index)
dftfe::utils::MemoryStorage< double, memorySpace > tempHamMatrixBXBlockNonCollin
Definition KohnShamDFTBaseOperator.h:317
dftfe::utils::MemoryStorage< double, memorySpace > d_invJacderExcWithSigmaTimesMagYTimesGradRhoJxW
Definition KohnShamDFTBaseOperator.h:294
void init(const std::vector< double > &kPointCoordinates, const std::vector< double > &kPointWeights)
dftfe::utils::MemoryStorage< dataTypes::number, memorySpace > d_cellWaveFunctionMatrixSrc
Definition KohnShamDFTBaseOperator.h:267
dftfe::utils::MemoryStorage< double, memorySpace > tempHamMatrixImagBlock
Definition KohnShamDFTBaseOperator.h:315
const dftfe::uInt n_mpi_processes
Definition KohnShamDFTBaseOperator.h:333
void computeVEffPrime(std::shared_ptr< AuxDensityMatrix< memorySpace > > auxDensityXCRepresentationPtr, const std::vector< dftfe::utils::MemoryStorage< double, dftfe::utils::MemorySpace::HOST > > &rhoPrimeValues, const std::vector< dftfe::utils::MemoryStorage< double, dftfe::utils::MemorySpace::HOST > > &gradRhoPrimeValues, const dftfe::utils::MemoryStorage< double, dftfe::utils::MemorySpace::HOST > &phiPrimeValues, const dftfe::uInt spinIndex)
bool d_useHubbard
Definition KohnShamDFTBaseOperator.h:345
const MPI_Comm & getMPICommunicatorDomain()
const MPI_Comm d_mpiCommParent
Definition KohnShamDFTBaseOperator.h:331
const MPI_Comm d_mpiCommDomain
Definition KohnShamDFTBaseOperator.h:332
void HXWithLowdinOrthonormalisedInput(dftfe::linearAlgebra::MultiVector< dataTypes::number, memorySpace > &src, const double scalarHX, const double scalarY, const double scalarX, dftfe::linearAlgebra::MultiVector< dataTypes::number, memorySpace > &dst, const bool onlyHPrimePartForFirstOrderDensityMatResponse=false)
Computing Y = scalarHX*M^{1/2}HM^{1/2}X + scalarX*X + scalarY*Y for a given X and Y in full precision...
void HX(dftfe::linearAlgebra::MultiVector< dataTypes::number, memorySpace > &src, const double scalarHX, const double scalarY, const double scalarX, dftfe::linearAlgebra::MultiVector< dataTypes::number, memorySpace > &dst, const bool onlyHPrimePartForFirstOrderDensityMatResponse=false) override
Computing Y = scalarHX*HX + scalarX*X + scalarY*Y for a given X and Y in full precision.
std::vector< dftfe::utils::MemoryStorage< dataTypes::number, memorySpace > > d_cellHamiltonianMatrix
Definition KohnShamDFTBaseOperator.h:259
dftfe::uInt d_numVectorsInternal
Definition KohnShamDFTBaseOperator.h:337
dftfe::linearAlgebra::MultiVector< dataTypes::number, memorySpace > d_pseudopotentialNonLocalProjectorTimesVectorBlock
Definition KohnShamDFTBaseOperator.h:277
dftfe::linearAlgebra::MultiVector< dataTypes::numberFP32, memorySpace > d_dstNonLocalTempSinglePrec
Definition KohnShamDFTBaseOperator.h:354
dftfe::utils::MemoryStorage< double, memorySpace > d_invJacinvJacderExcWithTauJxW
Definition KohnShamDFTBaseOperator.h:297
dftfe::linearAlgebra::MultiVector< dataTypes::number, memorySpace > d_dstNonLocalTemp
Definition KohnShamDFTBaseOperator.h:349
dftfe::utils::MemoryStorage< double, memorySpace > d_invJacderExcWithSigmaTimesMagXTimesGradRhoJxW
Definition KohnShamDFTBaseOperator.h:293
dftfe::utils::MemoryStorage< double, memorySpace > d_VeffJxW
Definition KohnShamDFTBaseOperator.h:287
const dftfe::uInt d_densityQuadratureID
Definition KohnShamDFTBaseOperator.h:324
dftfe::utils::MemoryStorage< double, memorySpace > d_invJacderExcWithSigmaTimesGradRhoJxW
Definition KohnShamDFTBaseOperator.h:292
dftfe::uInt d_kPointIndex
Definition KohnShamDFTBaseOperator.h:327
std::vector< dftfe::utils::MemoryStorage< double, memorySpace > > d_halfKSquareTimesDerExcwithTauJxW
Definition KohnShamDFTBaseOperator.h:301
dftfe::utils::MemoryStorage< double, memorySpace > d_BeffzJxW
Definition KohnShamDFTBaseOperator.h:288
void computeCellHamiltonianMatrixExtPotContribution()
dftfe::linearAlgebra::MultiVector< dataTypes::numberFP32, memorySpace > d_pseudopotentialNonLocalProjectorTimesVectorBlockSinglePrec
Definition KohnShamDFTBaseOperator.h:279
dftParameters * d_dftParamsPtr
Definition KohnShamDFTBaseOperator.h:256
dftfe::utils::MemoryStorage< double, memorySpace > tempHamMatrixBYBlockNonCollin
Definition KohnShamDFTBaseOperator.h:319
dftfe::utils::MemoryStorage< dataTypes::number, memorySpace > d_cellWaveFunctionMatrixDst
Definition KohnShamDFTBaseOperator.h:269
void computeVEffExternalPotCorr(const std::map< dealii::CellId, std::vector< double > > &externalPotCorrValues)
KohnShamDFTBaseOperator(std::shared_ptr< dftfe::linearAlgebra::BLASWrapper< memorySpace > > BLASWrapperPtr, std::shared_ptr< dftfe::linearAlgebra::BLASWrapper< dftfe::utils::MemorySpace::HOST > > BLASWrapperPtrHost, 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::pseudopotentialBaseClass< dataTypes::number, memorySpace > > pseudopotentialClassPtr, std::shared_ptr< excManager< memorySpace > > excManagerPtr, dftParameters *dftParamsPtr, const dftfe::uInt densityQuadratureID, const dftfe::uInt lpspQuadratureID, const dftfe::uInt feOrderPlusOneQuadratureID, const MPI_Comm &mpi_comm_parent, const MPI_Comm &mpi_comm_domain)
void computeVEff(std::shared_ptr< AuxDensityMatrix< memorySpace > > auxDensityXCRepresentationPtr, const dftfe::utils::MemoryStorage< double, dftfe::utils::MemorySpace::HOST > &phiValues, const dftfe::uInt spinIndex=0)
Computes effective potential involving exchange-correlation functionals.
std::shared_ptr< excManager< memorySpace > > d_excManagerPtr
Definition KohnShamDFTBaseOperator.h:255
const dftfe::uInt d_feOrderPlusOneQuadratureID
Definition KohnShamDFTBaseOperator.h:326
dftfe::linearAlgebra::MultiVector< dataTypes::number, memorySpace > & getScratchFEMultivector(const dftfe::uInt numVectors, const dftfe::uInt index)
std::shared_ptr< dftfe::basis::FEBasisOperations< dataTypes::number, double, memorySpace > > d_basisOperationsPtr
Definition KohnShamDFTBaseOperator.h:246
const dftfe::utils::MemoryStorage< double, memorySpace > & getSqrtMassVector()
std::shared_ptr< dftUtils::constraintMatrixInfo< memorySpace > > inverseSqrtMassVectorScaledConstraintsNoneDataInfoPtr
Definition KohnShamDFTBaseOperator.h:308
dftfe::linearAlgebra::MultiVector< dataTypes::numberFP32, memorySpace > d_tempBlockVectorOverlapInvXSinglePrec
Definition KohnShamDFTBaseOperator.h:284
dftfe::uInt d_spinIndex
Definition KohnShamDFTBaseOperator.h:328
const dftfe::uInt this_mpi_process
Definition KohnShamDFTBaseOperator.h:334
dftfe::utils::MemoryStorage< dataTypes::numberFP32, memorySpace > d_cellWaveFunctionMatrixDstSinglePrec
Definition KohnShamDFTBaseOperator.h:274
dftfe::utils::MemoryStorage< double, memorySpace > d_invJacderExcWithSigmaTimesMagZTimesGradRhoJxW
Definition KohnShamDFTBaseOperator.h:295
dftfe::uInt d_cellsBlockSizeHX
Definition KohnShamDFTBaseOperator.h:336
std::shared_ptr< AtomicCenteredNonLocalOperator< dataTypes::number, memorySpace > > d_pseudopotentialNonLocalOperator
Definition KohnShamDFTBaseOperator.h:233
std::vector< double > d_kPointWeights
Definition KohnShamDFTBaseOperator.h:312
std::vector< dftfe::utils::MemoryStorage< dataTypes::numberFP32, memorySpace > > d_cellHamiltonianMatrixSinglePrec
Definition KohnShamDFTBaseOperator.h:261
std::vector< double > d_kPointCoordinates
Definition KohnShamDFTBaseOperator.h:310
dftfe::utils::MemoryStorage< dftfe::uInt, memorySpace > d_mapNodeIdToProcId
Definition KohnShamDFTBaseOperator.h:356
dealii::TimerOutput computing_timer
Definition KohnShamDFTBaseOperator.h:342
const dftfe::utils::MemoryStorage< double, memorySpace > & getInverseSqrtMassVector()
std::shared_ptr< dftfe::pseudopotentialBaseClass< dataTypes::number, memorySpace > > d_pseudopotentialClassPtr
Definition KohnShamDFTBaseOperator.h:254
dealii::ConditionalOStream pcout
Definition KohnShamDFTBaseOperator.h:339
std::shared_ptr< dftfe::linearAlgebra::BLASWrapper< dftfe::utils::MemorySpace::HOST > > d_BLASWrapperPtrHost
Definition KohnShamDFTBaseOperator.h:243
dftUtils::constraintMatrixInfo< dftfe::utils::MemorySpace::HOST > * getOverloadedConstraintMatrixHost() const
void computeCellHamiltonianMatrix(const bool onlyHPrimePartForFirstOrderDensityMatResponse=false)
const dftfe::uInt d_lpspQuadratureID
Definition KohnShamDFTBaseOperator.h:325
Definition FEBasisOperations.h:87
Namespace which declares the input parameters and the functions to parse them from the input paramete...
Definition dftParameters.h:36
Overloads dealii's distribute and distribute_local_to_global functions associated with constraints cl...
Definition constraintMatrixInfo.h:43
Definition excManager.h:28
Definition BLASWrapper.h:35
An class template to encapsulate a MultiVector. A MultiVector is a collection of vectors belonging t...
Definition MultiVector.h:127
Base class for building the DFT operator and the action of operator on a vector.
Definition operator.h:43
Definition pseudopotentialBaseClass.h:60
Definition MemoryStorage.h:33
double number
Definition dftfeDataTypes.h:41
@ HOST
Definition MemorySpaceType.h:34
Definition pseudoPotentialToDftfeConverter.cc:34
std::uint32_t uInt
Definition TypeConfig.h:10