Virtual base class for core-polarisation (RPA); computes dV corrections.
Defines the interface for all RPA/core-polarisation methods. Concrete implementations are TDHF, TDHFbasis, and DiagramRPA. See the ExternalField namespace documentation for notation and physics.
- Note
- Stores a raw pointer to the external-field operator
h passed at construction. That operator must remain alive for the lifetime of this object.
- Note
- For frequency-dependent operators, updating the operator frequency externally will affect results. solve_core() should be re-called after any such update.
- Note
- Calling solve_core() with a different freuqnecy will only chnage the frequency used to solve the TDHF/RPA equations. It wil not change the frequency of the operator itself. For frequency-dependent operators, you must update the freuqency of the operator first. See DiracOperator::TensorOperator . Since this class stores just a pointer to the operator, that's all you need to do.
|
| double | last_eps () const |
| | Returns eps (convergance) of last solve_core run.
|
| |
| double | last_its () const |
| | Returns its (# of iterations) of last solve_core run.
|
| |
| double | last_omega () const |
| | Returns omega (frequency) of last solve_core run.
|
| |
| int | rank () const |
| | Rank of the operator.
|
| |
| int | parity () const |
| | Parity of the operator.
|
| |
| bool | imagQ () const |
| | Returns true if the operator is imaginary.
|
| |
| double & | eps_target () |
| | Convergance target.
|
| |
| double | eps_target () const |
| | Convergance target.
|
| |
| double | eta () const |
| | Damping factor; 0 means no damping. Must have 0 <= eta < 1.
|
| |
| void | set_eta (double eta) |
| | Set/update damping factor; 0 means no damping. Must have 0 <= eta < 1.
|
| |
| virtual Method | method () const =0 |
| | Returns RPA method.
|
| |
| virtual void | solve_core (double omega, int max_its=100, bool print=true)=0 |
| | Solve for delta_V_pm self-consistently for all core orbitals at frequency omega.
|
| |
| virtual void | clear ()=0 |
| | Clears the internal state back to pre solve_core()
|
| |
| virtual double | dV (const DiracSpinor &Fn, const DiracSpinor &Fm) const =0 |
| | Returns reduced matrix element <n||dV_pm||m> (see namespace doc for dV_pm)
|
| |
| virtual DiracSpinor | dV_rhs (int kappa, const DiracSpinor &Fm, bool conj=false) const |
| | Returns [dV_pm * phi_m]_kappa: RHS of TDHF eq., projected onto kappa (see namespace doc)
|
| |
|
CorePolarisation & | operator= (const CorePolarisation &)=delete |
| |
|
| CorePolarisation (const CorePolarisation &)=default |
| |
| virtual void ExternalField::CorePolarisation::solve_core |
( |
double |
omega, |
|
|
int |
max_its = 100, |
|
|
bool |
print = true |
|
) |
| |
|
pure virtual |
Solve for delta_V_pm self-consistently for all core orbitals at frequency omega.
Iterates the RPA equations (TDHF or diagram, depending on the implementation) until the correction \( \delta V_\pm(\omega) \) converges to within eps_target(), or max_its iterations are reached.
- Parameters
-
| omega | External-field frequency \( \omega \) in atomic units. May be zero (static limit) or negative. |
| max_its | Maximum number of iterations.
- 0: no iterations; dV() returns 0.
- 1: single iteration; dV() returns lowest-order correction.
|
| print | If true, print convergence progress to stdout. |
- Note
- Does not update the frequency of the operator itself; for frequency-dependent operators, update the operator frequency externally before calling.
Implemented in ExternalField::TDHFbasis, ExternalField::TDHF, and ExternalField::DiagramRPA.