|
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) |
Public Member Functions inherited from Base_Mixing::Mixing | |
| 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 | |
Public Attributes inherited from Base_Mixing::Mixing | |
| 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 |