DFT-EFE
 
Loading...
Searching...
No Matches
ExcSSDFunctionalBaseClass.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#ifndef DFTEFE_EXCSSDFUNCTIONALBASECLASS_H
19#define DFTEFE_EXCSSDFUNCTIONALBASECLASS_H
20
21#include <ksdft/RDM1.h>
23#include <utils/Exceptions.h>
24#include <vector>
25#include <set>
26#include <unordered_map>
27#include <fstream>
28#include <iostream>
29
30namespace dftefe
31{
32 namespace ksdft
33 {
34 enum class ExcFamilyType
35 {
36 /*
37 LLMGGA: Includes only Laplacian of the electron-density
38 TauMGGA: Includes only kinetic energy density
39 MGGA: Includes both the Laplacian of the electron-density and kinetic
40 energy density
41 */
42 LDA,
43 GGA,
44 LLMGGA,
45 HYBRID,
47 MGGA,
48 TauMGGA,
49 };
50
52 {
53 LDA,
54 GGA,
55 LLMGGA,
56 };
57
58 /*
59 * XC attributes for the derivatives for the remainder functional
60 *
61 */
63 {
64 e, // energy density per unit volume for the remainder functional
65 vSpinUp, // the local multiplicative potential for spin up arising from
66 // remainder functional
67 vSpinDown, // the local multiplicative potential for spin down arising
68 // from remainder functional
69 pdeDensitySpinUp, // partial derivative of remainder functional energy
70 // density wrt spin-up electron density: d(e)/d(rho_up)
71 pdeDensitySpinDown, // partial derivative of remainder functional energy
72 // density wrt spin-down electron density:
73 // d(e)/d(rho_down)
79 };
80
81
92 template <dftefe::utils::MemorySpace memorySpace>
94 {
95 public:
96 using AttrStorage = std::vector<
98
100 const ExcFamilyType excFamType,
101 const densityFamilyType densityFamType,
102 const std::set<dftefe::ksdft::DensityDescrAttr> &densityDescrAttrs);
103
105 const ExcFamilyType excFamType,
106 const densityFamilyType densityFamType,
107 const std::set<dftefe::ksdft::DensityDescrAttr> &densityDescrAttrs,
108 const std::set<dftefe::ksdft::WfcDescrAttr> & wfcDescrAttrs);
109
111
112 const std::set<dftefe::ksdft::DensityDescrAttr> &
114
117
122 virtual void
124 const std::unordered_map<dftefe::ksdft::DensityDescrAttr, AttrStorage>
125 &densityAttrVals,
126 const std::unordered_map<dftefe::ksdft::WfcDescrAttr, AttrStorage>
127 &wfcAttrVals,
128 std::unordered_map<
132 &xDataOut,
133 std::unordered_map<
137 &cDataOut) const = 0;
138
140 getExcFamilyType() const;
141
142 virtual void
144 const std::vector<xcRemainderOutputDataAttributes>
145 &outputDataAttributes) const = 0;
146
147 protected:
148 const std::set<dftefe::ksdft::DensityDescrAttr> d_densityDescrAttrs;
149 const std::set<dftefe::ksdft::WfcDescrAttr> d_wfcDescrAttrs;
150
153
154 mutable dftefe::utils::MemoryStorage<double,
157
158 mutable dftefe::utils::MemoryStorage<double,
162
163 mutable dftefe::utils::MemoryStorage<double,
170 };
171
172 } // namespace ksdft
173} // namespace dftefe
174
176#endif // DFTEFE_EXCSSDFUNCTIONALBASECLASS_H
This class provides the structure for all Exc functionals that can be written as a combination of fun...
Definition: ExcSSDFunctionalBaseClass.h:94
ExcFamilyType d_ExcFamilyType
Definition: ExcSSDFunctionalBaseClass.h:151
virtual void checkInputOutputDataAttributesConsistency(const std::vector< xcRemainderOutputDataAttributes > &outputDataAttributes) const =0
const std::set< dftefe::ksdft::DensityDescrAttr > d_densityDescrAttrs
Definition: ExcSSDFunctionalBaseClass.h:148
dftefe::utils::MemoryStorage< double, dftefe::utils::MemorySpace::HOST > s_ecValues
Definition: ExcSSDFunctionalBaseClass.h:165
dftefe::utils::MemoryStorage< double, dftefe::utils::MemorySpace::HOST > s_pdexSigmaValues
Definition: ExcSSDFunctionalBaseClass.h:167
dftefe::utils::MemoryStorage< double, dftefe::utils::MemorySpace::HOST > s_pdecSigmaValues
Definition: ExcSSDFunctionalBaseClass.h:167
dftefe::utils::MemoryStorage< double, dftefe::utils::MemorySpace::HOST > s_sigmaValues
Definition: ExcSSDFunctionalBaseClass.h:156
const std::set< dftefe::ksdft::WfcDescrAttr > d_wfcDescrAttrs
Definition: ExcSSDFunctionalBaseClass.h:149
densityFamilyType getDensityBasedFamilyType() const
Definition: ExcSSDFunctionalBaseClass.t.cpp:61
dftefe::utils::MemoryStorage< double, dftefe::utils::MemorySpace::HOST > s_pdexTauSpinDownValues
Definition: ExcSSDFunctionalBaseClass.h:168
dftefe::utils::MemoryStorage< double, dftefe::utils::MemorySpace::HOST > s_pdexDensitySpinUpValues
Definition: ExcSSDFunctionalBaseClass.h:165
virtual void computeRhoTauDependentXCData(const std::unordered_map< dftefe::ksdft::DensityDescrAttr, AttrStorage > &densityAttrVals, const std::unordered_map< dftefe::ksdft::WfcDescrAttr, AttrStorage > &wfcAttrVals, std::unordered_map< xcRemainderOutputDataAttributes, dftefe::utils::MemoryStorage< double, dftefe::utils::MemorySpace::HOST > > &xDataOut, std::unordered_map< xcRemainderOutputDataAttributes, dftefe::utils::MemoryStorage< double, dftefe::utils::MemorySpace::HOST > > &cDataOut) const =0
Pure virtual. Call directly when you have pre-built density maps (e.g. from non-spin-polarized RDM1 s...
std::vector< dftefe::utils::MemoryStorage< double, dftefe::utils::MemorySpace::HOST > > AttrStorage
Definition: ExcSSDFunctionalBaseClass.h:97
dftefe::utils::MemoryStorage< double, dftefe::utils::MemorySpace::HOST > s_densityValues
Definition: ExcSSDFunctionalBaseClass.h:156
dftefe::utils::MemoryStorage< double, dftefe::utils::MemorySpace::HOST > s_pdecTauSpinUpValues
Definition: ExcSSDFunctionalBaseClass.h:168
dftefe::utils::MemoryStorage< double, dftefe::utils::MemorySpace::HOST > s_exValues
Definition: ExcSSDFunctionalBaseClass.h:165
const std::set< dftefe::ksdft::DensityDescrAttr > & getDensityDescriptorAttributesList() const
Definition: ExcSSDFunctionalBaseClass.t.cpp:68
dftefe::utils::MemoryStorage< double, dftefe::utils::MemorySpace::HOST > s_pdecTauValues
Definition: ExcSSDFunctionalBaseClass.h:161
dftefe::utils::MemoryStorage< double, dftefe::utils::MemorySpace::HOST > s_tauValues
Definition: ExcSSDFunctionalBaseClass.h:156
virtual ~ExcSSDFunctionalBaseClass()
Definition: ExcSSDFunctionalBaseClass.t.cpp:49
dftefe::utils::MemoryStorage< double, dftefe::utils::MemorySpace::HOST > s_pdexTauValues
Definition: ExcSSDFunctionalBaseClass.h:160
dftefe::utils::MemoryStorage< double, dftefe::utils::MemorySpace::HOST > s_pdexDensityValues
Definition: ExcSSDFunctionalBaseClass.h:160
densityFamilyType d_densityFamilyType
Definition: ExcSSDFunctionalBaseClass.h:152
dftefe::utils::MemoryStorage< double, dftefe::utils::MemorySpace::HOST > s_pdecDensityValues
Definition: ExcSSDFunctionalBaseClass.h:160
dftefe::utils::MemoryStorage< double, dftefe::utils::MemorySpace::HOST > s_pdecTauSpinDownValues
Definition: ExcSSDFunctionalBaseClass.h:169
dftefe::utils::MemoryStorage< double, dftefe::utils::MemorySpace::HOST > s_pdexDensitySpinDownValues
Definition: ExcSSDFunctionalBaseClass.h:166
dftefe::utils::MemoryStorage< double, dftefe::utils::MemorySpace::HOST > s_pdecDensitySpinUpValues
Definition: ExcSSDFunctionalBaseClass.h:166
dftefe::utils::MemoryStorage< double, dftefe::utils::MemorySpace::HOST > s_pdecDensitySpinDownValues
Definition: ExcSSDFunctionalBaseClass.h:167
ExcFamilyType getExcFamilyType() const
Definition: ExcSSDFunctionalBaseClass.t.cpp:54
dftefe::utils::MemoryStorage< double, dftefe::utils::MemorySpace::HOST > s_pdexTauSpinUpValues
Definition: ExcSSDFunctionalBaseClass.h:168
Definition: MemoryStorage.h:38
densityFamilyType
Definition: ExcSSDFunctionalBaseClass.h:52
ExcFamilyType
Definition: ExcSSDFunctionalBaseClass.h:35
xcRemainderOutputDataAttributes
Definition: ExcSSDFunctionalBaseClass.h:63
dealii includes
Definition: AtomFieldDataSpherical.cpp:31