ABACUS develop
Atomic-orbital Based Ab-initio Computation at UStc
|
Plain mixing : rho_new = rho_in + mixing_beta * (rho_out - rho_in) More...
#include <plain_mixing.h>
Public Member Functions | |
Plain_Mixing () | |
Plain_Mixing (const double &mixing_beta) | |
virtual | ~Plain_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 |
void | plain_mix (double *data_new, const double *data_in, const double *data_out, const int &length, std::function< void(double *)> screen) |
Simple plain mixing data_new = data_in + mixing_beta * (data_out - data_in) | |
void | plain_mix (std::complex< double > *data_new, const std::complex< double > *data_in, const std::complex< double > *data_out, const int &length, std::function< void(std::complex< double > *)> screen) |
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)=0 |
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)=0 |
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) |
![]() | |
Mixing () | |
virtual | ~Mixing () |
virtual void | init_mixing_data (Mixing_Data &mdata, const int &length, const size_t &type_size) const |
init mixing data | |
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) |
Private Member Functions | |
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 | simple_mix (FPTYPE *data_new, const FPTYPE *data_in, const FPTYPE *data_out, const int &length, std::function< void(FPTYPE *)> screen) |
Simple plain mixing data_new = data_in + mixing_beta * (data_out - data_in) | |
Additional Inherited Members | |
![]() | |
double | mixing_beta = 0.7 |
std::vector< double > | coef |
int | data_ndim = 1 |
Plain mixing : rho_new = rho_in + mixing_beta * (rho_out - rho_in)
|
inline |
|
inline |
|
inlineoverridevirtual |
|
inlineoverridevirtual |
calculate coeficients for mixing
mdata | Mixing_Data |
inner_product | pointer to the inner dot function |
Implements Base_Mixing::Mixing.
|
inlineoverridevirtual |
Implements Base_Mixing::Mixing.
|
inline |
Simple plain mixing data_new = data_in + mixing_beta * (data_out - data_in)
data_new | can be the same as data_in or data_out |
|
inline |
|
virtual |
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 |
need_calcoef | whether need to calculate the coef |
Reimplemented from Base_Mixing::Mixing.
|
inlineoverridevirtual |
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.
|
virtual |
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.
|
virtual |
Reimplemented from Base_Mixing::Mixing.
|
inlineoverridevirtual |
|
virtual |
Implements Base_Mixing::Mixing.
|
inlineoverridevirtual |
reset mixing
Implements Base_Mixing::Mixing.
|
private |
Simple plain mixing data_new = data_in + mixing_beta * (data_out - data_in)
data_new | can be the same as data_in or data_out |
|
private |
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 |