KIDS  ver-0.0.1
KIDS : Kernel Integrated Dynamics Simulator
Loading...
Searching...
No Matches
Kernel_Elec.cpp
Go to the documentation of this file.
1#include "kids/Kernel_Elec.h"
2
4#include "kids/hash_fnv1a.h"
5#include "kids/linalg.h"
6#include "kids/macro_utils.h"
7#include "kids/vars_list.h"
8
9namespace PROJECT_NS {
10
11const std::string Kernel_Elec::getName() { return "Kernel_Elec"; }
12
14
15void Kernel_Elec::setInputParam_impl(std::shared_ptr<Param>& PM) {
16 occ0 = PM->get_int("occ", LOC(), -1);
17 if (occ0 < 0) throw std::runtime_error("occ < 0");
18 if (occ0 >= Dimension::F) throw std::runtime_error("occ >= F");
19}
20
21void Kernel_Elec::setInputDataSet_impl(std::shared_ptr<DataSet>& DS) {
22 U = DS->def(DATA::integrator::U);
23 c = DS->def(DATA::integrator::c);
26 T = DS->def(DATA::model::rep::T);
29
30 w = DS->def(DATA::integrator::w);
41
42 K0 = DS->def(DATA::integrator::K0);
43 K1 = DS->def(DATA::integrator::K1);
44 K2 = DS->def(DATA::integrator::K2);
53
54 // read input operator
55 OpA = DS->def(DATA::integrator::OpA);
56 OpB = DS->def(DATA::integrator::OpB);
57}
58
61
62 double unit = 1.0e0;
63 _dataset->def_real("integrator.1", &unit);
64 _dataset->def_real("init.1", &unit);
65 _dataset->def_complex("init.w", w, Dimension::P);
66 _dataset->def_complex("init.K0", K0, Dimension::PFF);
67 _dataset->def_complex("init.K1", K1, Dimension::PFF);
68 _dataset->def_complex("init.K2", K2, Dimension::PFF);
69 _dataset->def_complex("init.K1QA", K1QA, Dimension::PFF);
70 _dataset->def_complex("init.K2QA", K2QA, Dimension::PFF);
71 _dataset->def_complex("init.K1DA", K1DA, Dimension::PFF);
72 _dataset->def_complex("init.K2DA", K2DA, Dimension::PFF);
73 _dataset->def_complex("init.K1QD", K1QD, Dimension::PFF);
74 _dataset->def_complex("init.K2QD", K2QD, Dimension::PFF);
75 _dataset->def_complex("init.K1DD", K1DD, Dimension::PFF);
76 _dataset->def_complex("init.K2DD", K2DD, Dimension::PFF);
77 return stat;
78}
79
81
86 ARRAY_OUTER_TRANS2(ker, c, c, fdim, fdim);
87 for (int i = 0, idx = 0; i < fdim; ++i) {
88 for (int j = 0; j < fdim; ++j, ++idx) {
89 ker[idx] *= xi;
90 if (i == j) ker[idx] -= phys::math::iu * gamma;
91 }
92 }
93 return 0;
94}
95
96
101 bool quantize, int occ) {
102 for (int i = 0, ij = 0; i < fdim; ++i) {
103 for (int j = 0; j < fdim; ++j, ++ij) {
104 ker[ij] = xi * rho[ij];
105 if (i == j) ker[ij] = (quantize) ? (i == occ ? 1.0e0 : 0.0e0) : (ker[ij] - gamma);
106 }
107 }
108 return 0;
109}
110
112
113// two densities for dynamic
123
127
128// time correlation function
153
158
159}; // namespace PROJECT_NS
initialization kernels for electonic DOFs
static kids_complex * U
dynamics variables for electronic DOFs
Definition Kernel_Elec.h:39
static kids_complex * rho_dual_init
electronic density
Definition Kernel_Elec.h:42
static kids_complex * OpA
Definition Kernel_Elec.h:74
static kids_complex * TrK1A
Definition Kernel_Elec.h:75
static int ker_from_rho(kids_complex *ker, kids_complex *rho, kids_real xi, kids_real gamma, int fdim, bool quantize=false, int occ=-1)
convert c (electonic amplititude) to kernel (affine map of the density)
static kids_complex * w_DD
Definition Kernel_Elec.h:61
Status & executeKernel_impl(Status &stat)
Virtual function to execute the kernel implementation.
static kids_complex * ww_A_init
Definition Kernel_Elec.h:59
static kids_complex * rho_dual
Definition Kernel_Elec.h:42
static int * occ_nuc
weighting density for nuclear force
Definition Kernel_Elec.h:48
static kids_complex * w_PP
Definition Kernel_Elec.h:61
static kids_complex * w_AA
Definition Kernel_Elec.h:61
static kids_complex * K1QA
Simplex Quantization.
Definition Kernel_Elec.h:65
static kids_complex * ww_D_init
Definition Kernel_Elec.h:60
static kids_real * T_init
Definition Kernel_Elec.h:43
static kids_real * T
Definition Kernel_Elec.h:43
static kids_complex * rho_ele
Definition Kernel_Elec.h:41
static kids_complex * rho_nuc_init
Definition Kernel_Elec.h:49
static kids_complex * TrK2B
Definition Kernel_Elec.h:75
static kids_complex * K1QD
Simplex Quantization.
Definition Kernel_Elec.h:69
void setInputParam_impl(std::shared_ptr< Param > &PM)
Virtual function to set input parameters for the kernel implementation.
static kids_complex * rho_nuc
Definition Kernel_Elec.h:49
Status & initializeKernel_impl(Status &stat)
Virtual function to initialize the kernel implementation.
static kids_complex * c
Definition Kernel_Elec.h:40
void setInputDataSet_impl(std::shared_ptr< DataSet > &DS)
Virtual function to set input data set for the kernel implementation.
static kids_complex * K2QA
Heaviside Quantization.
Definition Kernel_Elec.h:66
static kids_complex * K2QD
Heaviside Quantization.
Definition Kernel_Elec.h:70
static int ker_from_c(kids_complex *ker, kids_complex *c, kids_real xi, kids_real gamma, int fdim)
convert c (electonic amplititude) to kernel (affine map of the density)
static kids_complex * ww_D
Definition Kernel_Elec.h:58
static kids_complex * w_AD
Definition Kernel_Elec.h:61
static kids_complex * c_init
electronic vector
Definition Kernel_Elec.h:40
static kids_complex * K2
partial version of K2
Definition Kernel_Elec.h:64
static kids_complex * ww_A
Definition Kernel_Elec.h:57
static int occ0
read parameters
Definition Kernel_Elec.h:31
static kids_complex * K1DD
Definition Kernel_Elec.h:71
static kids_complex * K2DD
Definition Kernel_Elec.h:72
virtual const std::string getName()
Get the name of the kernel.
static kids_complex * K1DA
Definition Kernel_Elec.h:67
static kids_complex * wz_A
Definition Kernel_Elec.h:55
static kids_complex * rho_ele_init
electronic density
Definition Kernel_Elec.h:41
static kids_complex * K1
partial version of K1
Definition Kernel_Elec.h:63
static kids_complex * K0
partial version of K0
Definition Kernel_Elec.h:62
static kids_complex * K2DA
Definition Kernel_Elec.h:68
static kids_complex * OpB
Definition Kernel_Elec.h:74
static kids_complex * w_CC
Definition Kernel_Elec.h:61
static kids_complex * w_CP
Definition Kernel_Elec.h:61
static kids_complex * w
kernels for time correlation function
Definition Kernel_Elec.h:54
virtual int getType() const
Get the type of the kernel.
static kids_complex * wz_D
Definition Kernel_Elec.h:56
std::shared_ptr< DataSet > _dataset
Shared pointer to the DataSet object associated with this kernel.
Definition Kernel.h:278
#define LOC()
show the location information for debug
Definition fmt.h:49
Provide linalg APIs.
#define FUNCTION_NAME
Definition macro_utils.h:9
VARIABLE< kids_complex > K1QA
VARIABLE< kids_complex > w_CP
VARIABLE< kids_complex > K0
VARIABLE< kids_complex > K2DD
VARIABLE< kids_complex > U
VARIABLE< kids_complex > OpB
VARIABLE< kids_complex > K2QD
VARIABLE< kids_complex > w
VARIABLE< kids_complex > w_DD
VARIABLE< kids_complex > rho_dual
VARIABLE< kids_complex > K1DD
VARIABLE< kids_complex > K2DA
VARIABLE< kids_complex > rho_ele
VARIABLE< kids_complex > K1QD
VARIABLE< kids_complex > rho_nuc
VARIABLE< kids_int > occ_nuc
VARIABLE< kids_complex > ww_A
VARIABLE< kids_complex > K2
VARIABLE< kids_complex > wz_A
VARIABLE< kids_complex > w_AD
VARIABLE< kids_complex > ww_D
VARIABLE< kids_complex > K1DA
VARIABLE< kids_complex > OpA
VARIABLE< kids_complex > K2QA
VARIABLE< kids_complex > K1
VARIABLE< kids_complex > c
VARIABLE< kids_complex > w_PP
VARIABLE< kids_complex > wz_D
VARIABLE< kids_complex > w_CC
VARIABLE< kids_complex > w_AA
VARIABLE< kids_real > T
std::size_t PFF
Product of P, F, and F (P * F * F).
Definition vars_list.cpp:17
std::size_t P
Number of parallel trajectories (swarms of trajectories) in each Monte Carlo run.
Definition vars_list.cpp:9
std::size_t F
Number of electronic degrees of freedom.
Definition vars_list.cpp:11
< http://warp.povusers.org/FunctionParser/fparser.html
Definition Context.h:39
double kids_real
Alias for real number type.
Definition Types.h:59
std::complex< double > kids_complex
Alias for complex number type.
Definition Types.h:60
void ARRAY_OUTER_TRANS2(kids_real *A, kids_real *B, kids_real *C, size_t N1, size_t N2)
Perform outer product with transpose where A = B^T * C for real matrices.
Definition linalg.cpp:160
constexpr std::complex< real_precision > iu(1.0L, 0.0L)
constexpr uint32_t hash(const char *str)
Definition hash_fnv1a.h:12
declaration of variables used in the program.