Pulay mixing method. Ref: Pulay P. Chemical Physics Letters, 1980, 73(2): 393-398.
More...
#include <pulay_mixing.h>
|
| Pulay_Mixing (const int &mixing_ndim) |
|
| Pulay_Mixing (const int &mixing_ndim, const double &mixing_beta) |
|
virtual | ~Pulay_Mixing () override |
|
virtual void | reset () override |
| reset mixing
|
|
virtual void | push_data (Mixing_Data &mdata, const double *data_in, const double *data_out, std::function< void(double *)> screen, std::function< void(double *, const double *, const double *)> mix, const bool &need_calcoef) override |
|
virtual void | push_data (Mixing_Data &mdata, const std::complex< double > *data_in, const std::complex< double > *data_out, std::function< void(std::complex< double > *)> screen, std::function< void(std::complex< double > *, const std::complex< double > *, const std::complex< double > *)> mix, const bool &need_calcoef) override |
|
virtual void | cal_coef (const Mixing_Data &mdata, std::function< double(double *, double *)> inner_product) override |
| calculate coeficients for mixing
|
|
virtual void | cal_coef (const Mixing_Data &mdata, std::function< double(std::complex< double > *, std::complex< double > *)> inner_product) override |
|
| Mixing () |
|
virtual | ~Mixing () |
|
virtual void | init_mixing_data (Mixing_Data &mdata, const int &length, const size_t &type_size) const |
| init mixing data
|
|
virtual void | push_data (Mixing_Data &mdata, const double *data_in, const double *data_out, std::function< void(double *)> screen, const bool &need_calcoef) |
|
virtual void | push_data (Mixing_Data &mdata, const std::complex< double > *data_in, const std::complex< double > *data_out, std::function< void(std::complex< double > *)> screen, const bool &need_calcoef) |
|
void | mix_data (const Mixing_Data &mdata, double *data_mix) |
| calculate the mixing data
|
|
void | mix_data (const Mixing_Data &mdata, std::complex< double > *data_mix) |
|
|
template<class FPTYPE > |
void | tem_push_data (Mixing_Data &mdata, const FPTYPE *data_in, const FPTYPE *data_out, std::function< void(FPTYPE *)> screen, std::function< void(FPTYPE *, const FPTYPE *, const FPTYPE *)> mix, const bool &need_calcoef) |
|
template<class FPTYPE > |
void | tem_cal_coef (const Mixing_Data &mdata, std::function< double(FPTYPE *, FPTYPE *)> inner_product) |
| calculate coeficients for mixing
|
|
Pulay mixing method. Ref: Pulay P. Chemical Physics Letters, 1980, 73(2): 393-398.
- Note
- Formula: F = n_out - n_in alpha{ij} = <F{i}, F{j}> beta{ij} = inv(alpha){ij} coef{i} = \sum_j beta{ij} / \sum_k \sum_j beta{kj} mixing_data{i} = n_in{i} + mixing_beta*F{i} n{m+1} = \sum_n coef{i} * mixing_data{i}
◆ Pulay_Mixing() [1/2]
Base_Mixing::Pulay_Mixing::Pulay_Mixing |
( |
const int & |
mixing_ndim | ) |
|
|
inline |
◆ Pulay_Mixing() [2/2]
Base_Mixing::Pulay_Mixing::Pulay_Mixing |
( |
const int & |
mixing_ndim, |
|
|
const double & |
mixing_beta |
|
) |
| |
|
inline |
◆ ~Pulay_Mixing()
virtual Base_Mixing::Pulay_Mixing::~Pulay_Mixing |
( |
| ) |
|
|
inlineoverridevirtual |
◆ cal_coef() [1/2]
virtual void Base_Mixing::Pulay_Mixing::cal_coef |
( |
const Mixing_Data & |
mdata, |
|
|
std::function< double(double *, double *)> |
inner_product |
|
) |
| |
|
inlineoverridevirtual |
◆ cal_coef() [2/2]
virtual void Base_Mixing::Pulay_Mixing::cal_coef |
( |
const Mixing_Data & |
mdata, |
|
|
std::function< double(std::complex< double > *, std::complex< double > *)> |
inner_product |
|
) |
| |
|
inlineoverridevirtual |
◆ push_data() [1/2]
virtual void Base_Mixing::Pulay_Mixing::push_data |
( |
Mixing_Data & |
mdata, |
|
|
const double * |
data_in, |
|
|
const double * |
data_out, |
|
|
std::function< void(double *)> |
screen, |
|
|
std::function< void(double *, const double *, const double *)> |
mix, |
|
|
const bool & |
need_calcoef |
|
) |
| |
|
inlineoverridevirtual |
- Parameters
-
mdata | store information of this iterative step |
data_in | x_in |
data_out | x_out = f(x_in) |
screen | pointer to the screen function for Ker-Ker mixing |
mix | (double* out, const double* in, const double* residual) calculate 'out' with 'in' and residual |
need_calcoef | whether need to calculate the coef |
Implements Base_Mixing::Mixing.
◆ push_data() [2/2]
virtual void Base_Mixing::Pulay_Mixing::push_data |
( |
Mixing_Data & |
mdata, |
|
|
const std::complex< double > * |
data_in, |
|
|
const std::complex< double > * |
data_out, |
|
|
std::function< void(std::complex< double > *)> |
screen, |
|
|
std::function< void(std::complex< double > *, const std::complex< double > *, const std::complex< double > *)> |
mix, |
|
|
const bool & |
need_calcoef |
|
) |
| |
|
inlineoverridevirtual |
◆ reset()
virtual void Base_Mixing::Pulay_Mixing::reset |
( |
| ) |
|
|
inlineoverridevirtual |
◆ tem_cal_coef()
template<class FPTYPE >
void Base_Mixing::Pulay_Mixing::tem_cal_coef |
( |
const Mixing_Data & |
mdata, |
|
|
std::function< double(FPTYPE *, FPTYPE *)> |
inner_product |
|
) |
| |
|
private |
calculate coeficients for mixing
- Parameters
-
mdata | Mixing_Data |
inner_product | pointer to the inner dot function |
◆ tem_push_data()
template<class FPTYPE >
void Base_Mixing::Pulay_Mixing::tem_push_data |
( |
Mixing_Data & |
mdata, |
|
|
const FPTYPE * |
data_in, |
|
|
const FPTYPE * |
data_out, |
|
|
std::function< void(FPTYPE *)> |
screen, |
|
|
std::function< void(FPTYPE *, const FPTYPE *, const FPTYPE *)> |
mix, |
|
|
const bool & |
need_calcoef |
|
) |
| |
|
private |
- Parameters
-
mdata | store information of this iterative step |
data_in | x_in |
data_out | x_out = f(x_in) |
screen | pointer to the screen function for Ker-Ker mixing |
mix | (double* out, const double* in, const double* residual) calculate 'out' with 'in' and residual |
need_calcoef | whether need to calculate the coef |
◆ address
Mixing_Data* Base_Mixing::Pulay_Mixing::address = nullptr |
|
private |
◆ beta
void* Base_Mixing::Pulay_Mixing::F = nullptr |
|
private |
◆ mixing_ndim
int Base_Mixing::Pulay_Mixing::mixing_ndim = -1 |
|
private |
◆ start_F
int Base_Mixing::Pulay_Mixing::start_F = 0 |
|
private |
The documentation for this class was generated from the following files:
- /home/runner/work/abacus-develop/abacus-develop/source/source_base/module_mixing/pulay_mixing.h
- /home/runner/work/abacus-develop/abacus-develop/source/source_base/module_mixing/pulay_mixing.cpp