Mixing class can mixing different steps of data to solver the iteration problem. For equation x = f(x), we can use iterative process to solve it: x_{n+1} = f(x_n), n = 0, 1, 2, ... To acceralte the convergence, we can use mixing method, we need information including x_in, x_out=f(x_in) in each iterative step.
More...
#include <mixing.h>
|
| 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, 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) |
|
virtual void | cal_coef (const Mixing_Data &mdata, std::function< double(double *, double *)> inner_product)=0 |
| calculate coeficients for mixing
|
|
virtual void | cal_coef (const Mixing_Data &mdata, std::function< double(std::complex< double > *, std::complex< double > *)> inner_product)=0 |
|
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) |
|
virtual void | reset ()=0 |
| reset mixing
|
|
Mixing class can mixing different steps of data to solver the iteration problem. For equation x = f(x), we can use iterative process to solve it: x_{n+1} = f(x_n), n = 0, 1, 2, ... To acceralte the convergence, we can use mixing method, we need information including x_in, x_out=f(x_in) in each iterative step.
◆ Mixing()
Base_Mixing::Mixing::Mixing |
( |
| ) |
|
|
inline |
◆ ~Mixing()
virtual Base_Mixing::Mixing::~Mixing |
( |
| ) |
|
|
inlinevirtual |
◆ cal_coef() [1/2]
virtual void Base_Mixing::Mixing::cal_coef |
( |
const Mixing_Data & |
mdata, |
|
|
std::function< double(double *, double *)> |
inner_product |
|
) |
| |
|
pure virtual |
◆ cal_coef() [2/2]
virtual void Base_Mixing::Mixing::cal_coef |
( |
const Mixing_Data & |
mdata, |
|
|
std::function< double(std::complex< double > *, std::complex< double > *)> |
inner_product |
|
) |
| |
|
pure virtual |
◆ init_mixing_data()
virtual void Base_Mixing::Mixing::init_mixing_data |
( |
Mixing_Data & |
mdata, |
|
|
const int & |
length, |
|
|
const size_t & |
type_size |
|
) |
| const |
|
inlinevirtual |
init mixing data
- Parameters
-
mdata | mixing data |
length | the length of each vector |
type_size | size of type |
◆ mix_data() [1/2]
void Base_Mixing::Mixing::mix_data |
( |
const Mixing_Data & |
mdata, |
|
|
double * |
data_mix |
|
) |
| |
calculate the mixing data
- Parameters
-
◆ mix_data() [2/2]
void Base_Mixing::Mixing::mix_data |
( |
const Mixing_Data & |
mdata, |
|
|
std::complex< double > * |
data_mix |
|
) |
| |
◆ push_data() [1/4]
void Base_Mixing::Mixing::push_data |
( |
Mixing_Data & |
mdata, |
|
|
const double * |
data_in, |
|
|
const double * |
data_out, |
|
|
std::function< void(double *)> |
screen, |
|
|
const bool & |
need_calcoef |
|
) |
| |
|
virtual |
- 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 |
need_calcoef | whether need to calculate the coef |
Reimplemented in Base_Mixing::Broyden_Mixing, and Base_Mixing::Plain_Mixing.
◆ push_data() [2/4]
virtual void Base_Mixing::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 |
|
) |
| |
|
pure virtual |
◆ push_data() [3/4]
void Base_Mixing::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, |
|
|
const bool & |
need_calcoef |
|
) |
| |
|
virtual |
◆ push_data() [4/4]
virtual void Base_Mixing::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 |
|
) |
| |
|
pure virtual |
◆ reset()
virtual void Base_Mixing::Mixing::reset |
( |
| ) |
|
|
pure virtual |
◆ coef
std::vector<double> Base_Mixing::Mixing::coef |
◆ data_ndim
int Base_Mixing::Mixing::data_ndim = 1 |
◆ mixing_beta
double Base_Mixing::Mixing::mixing_beta = 0.7 |
The documentation for this class was generated from the following files:
- /home/runner/work/abacus-develop/abacus-develop/source/source_base/module_mixing/mixing.h
- /home/runner/work/abacus-develop/abacus-develop/source/source_base/module_mixing/mixing.cpp