ABACUS develop
Atomic-orbital Based Ab-initio Computation at UStc
Loading...
Searching...
No Matches
Public Member Functions | Protected Attributes | List of all members
ModuleESolver::ESolver_OF_TDDFT Class Reference

#include <esolver_of_tddft.h>

Inheritance diagram for ModuleESolver::ESolver_OF_TDDFT:
Collaboration diagram for ModuleESolver::ESolver_OF_TDDFT:

Public Member Functions

 ESolver_OF_TDDFT ()
 
 ~ESolver_OF_TDDFT ()
 
virtual void runner (UnitCell &ucell, const int istep) override
 run energy solver
 
- Public Member Functions inherited from ModuleESolver::ESolver_OF
 ESolver_OF ()
 
 ~ESolver_OF ()
 
double func (double *x)
 
void dfuncdx (double *x, double *gradient)
 
double dfuncdstp (double *x, double *p)
 
 ESolver_OF ()
 
 ~ESolver_OF ()
 
virtual void before_all_runners (UnitCell &ucell, const Input_para &inp) override
 Initialize of the first-principels energy solver.
 
virtual void after_all_runners (UnitCell &ucell) override
 Output the FINAL_ETOT.
 
virtual double cal_energy () override
 Calculate the total energy. NOTE THIS FUNCTION SHOULD BE CALLEDD AFTER POTENTIAL HAS BEEN UPDATED.
 
virtual void cal_force (UnitCell &ucell, ModuleBase::matrix &force) override
 Calculate the force.
 
virtual void cal_stress (UnitCell &ucell, ModuleBase::matrix &stress) override
 Calculate the stress.
 
- Public Member Functions inherited from ModuleESolver::ESolver_FP
 ESolver_FP ()
 
virtual ~ESolver_FP ()
 
- Public Member Functions inherited from ModuleESolver::ESolver
 ESolver ()
 
virtual ~ESolver ()
 
virtual void others (UnitCell &ucell, const int istep)
 

Protected Attributes

std::vector< std::complex< double > > phi_td
 
Evolve_OFDFTevolve_ofdft =nullptr
 
- Protected Attributes inherited from ModuleESolver::ESolver_OF
KEDF_Managerkedf_manager_ = nullptr
 
ModuleBase::Opt_CGopt_cg_ = nullptr
 
ModuleBase::Opt_TNopt_tn_ = nullptr
 
ModuleBase::Opt_DCsrchopt_dcsrch_ = nullptr
 
ModuleBase::Opt_CGopt_cg_mag_ = nullptr
 
std::string of_kinetic_ = "wt"
 
std::string of_method_ = "tn"
 
std::string of_conv_ = "energy"
 
double of_tole_ = 2e-6
 
double of_tolp_ = 1e-5
 
int max_iter_ = 50
 
double dV_ = 0
 
double * nelec_ = nullptr
 
int iter_ = 0
 
double ** pdirect_ = nullptr
 
std::complex< double > ** precip_dir_ = nullptr
 
double * theta_ = nullptr
 
double ** pdEdphi_ = nullptr
 
double ** pdLdphi_ = nullptr
 
double ** pphi_ = nullptr
 
char * task_ = nullptr
 
int tn_spin_flag_ = -1
 
int max_dcsrch_ = 200
 
int flag_ = -1
 
Chargeptemp_rho_ = nullptr
 
psi::Psi< double > * psi_ = nullptr
 
double energy_llast_ = 0
 
double energy_last_ = 0
 
double energy_current_ = 0
 
double normdLdphi_llast_ = 100
 
double normdLdphi_last_ = 100
 
double normdLdphi_ = 100.
 
std::function< void(double *, double *)> bound_cal_potential_
 
- Protected Attributes inherited from ModuleESolver::ESolver_FP
elecstate::ElecStatepelec = nullptr
 These pointers will be deleted in the free_pointers() function every ion step.
 
K_Vectors kv
 K points in Brillouin zone.
 
Charge chr
 Electorn charge density.
 
ModulePW::PW_Basispw_rho
 
ModulePW::PW_Basispw_rhod
 
ModulePW::PW_Basis_Bigpw_big
 dense grid for USPP
 
Parallel_Grid Pgrid
 parallel for rho grid
 
Structure_Factor sf
 Structure factors that used with plane-wave basis set.
 
pseudopot_cell_vl locpp
 local pseudopotentials
 
Charge_Extra CE
 charge extrapolation method
 
surchem solvent
 solvent model
 
bool pw_rho_flag = false
 flag for pw_rho, 0: not initialized, 1: initialized
 
double iter_time
 the start time of scf iteration
 

Additional Inherited Members

- Public Attributes inherited from ModuleESolver::ESolver_OF
double * x
 
- Public Attributes inherited from ModuleESolver::ESolver
bool conv_esolver = true
 
std::string classname
 
- Protected Member Functions inherited from ModuleESolver::ESolver_OF
void before_opt (const int istep, UnitCell &ucell)
 Prepare to optimize the charge density, update elecstate, kedf, and opts if needed calculate ewald energy, initialize the rho, phi, theta.
 
void update_potential (UnitCell &ucell)
 Get dL/dphi = dL/drho * drho/dphi = (dE/drho - mu) * 2 * phi, as well as normdLdphi = sqrt{<dL/dphi|dL/dphi>}.
 
void optimize (UnitCell &ucell)
 Get the optimization direction (this->pdirection_) and the step length (this->theta)
 
void update_rho ()
 Update the charge density and "wavefunction" (phi) after one step of optimization phi = cos(theta) * phi + sin(theta) * direction, rho = phi^2.
 
bool check_exit (bool &conv_esolver)
 Check convergence, return ture if converge or iter >= max_iter_, and print the necessary information.
 
void after_opt (const int istep, UnitCell &ucell, const bool conv_esolver)
 After optimization, output the charge density, effective potential, ..., if needed.
 
void init_elecstate (UnitCell &ucell)
 Initialize this->pelec, as well as this->pelec->pot.
 
void allocate_array ()
 Allocate the arrays, as well as this->psi_ and this->ptemp_rho_.
 
void cal_potential_wrapper (double *ptemp_phi, double *rdLdphi)
 
void cal_potential (double *ptemp_phi, double *rdLdphi, UnitCell &ucell)
 Get dL/dphi = dL/drho * drho/dphi = (dE/drho - mu) * 2 * ptemp_phi and store it in rdLdphi.
 
void cal_dEdtheta (double **ptemp_phi, Charge *temp_rho, UnitCell &ucell, double *ptheta, double *rdEdtheta)
 Calculate dE/dTheta and store it in rdEdtheta. dE/dTheta = <dE / dtemp_phi | dtemp_phi / dTheta> = <dE / dtemp_phi | - sin(theta) * phi + cos(theta) * direction>
 
double cal_mu (double *pphi, double *pdEdphi, double nelec)
 Calculate the chemical potential mu. mu = <dE/dphi|phi> / (2 * nelec)
 
void adjust_direction ()
 Rotate and renormalize the direction |d>, make it orthogonal to phi (<d|phi> = 0), and <d|d> = nelec.
 
void check_direction (double *dEdtheta, double **ptemp_phi, UnitCell &ucell)
 Make sure that dEdtheta<0 at theta = 0, preparing to call the line search.
 
void test_direction (double *dEdtheta, double **ptemp_phi, UnitCell &ucell)
 ONLY used for test. Check the validity of KEDF.
 
void print_info (const bool conv_esolver)
 Print nessecary information to the screen, and write the components of the total energy into running_log.
 
double inner_product (double *pa, double *pb, int length, double dV=1)
 
void init_opt ()
 [Interface to opt] Initialize the opts
 
void get_direction (UnitCell &ucell)
 [Interface to opt] Call optimization methods to get the optimization direction
 
void get_step_length (double *dEdtheta, double **ptemp_phi, UnitCell &ucell)
 [Interface to opt] Call line search to find the best step length
 
- Protected Member Functions inherited from ModuleESolver::ESolver_FP
virtual void before_scf (UnitCell &ucell, const int istep)
 
virtual void after_scf (UnitCell &ucell, const int istep, const bool conv_esolver)
 
virtual void iter_finish (UnitCell &ucell, const int istep, int &iter, bool &conv_esolver)
 

Constructor & Destructor Documentation

◆ ESolver_OF_TDDFT()

ModuleESolver::ESolver_OF_TDDFT::ESolver_OF_TDDFT ( )

◆ ~ESolver_OF_TDDFT()

ModuleESolver::ESolver_OF_TDDFT::~ESolver_OF_TDDFT ( )

Member Function Documentation

◆ runner()

void ModuleESolver::ESolver_OF_TDDFT::runner ( UnitCell cell,
const int  istep 
)
overridevirtual

run energy solver

Reimplemented from ModuleESolver::ESolver_OF.

Here is the call graph for this function:

Member Data Documentation

◆ evolve_ofdft

Evolve_OFDFT* ModuleESolver::ESolver_OF_TDDFT::evolve_ofdft =nullptr
protected

◆ phi_td

std::vector<std::complex<double> > ModuleESolver::ESolver_OF_TDDFT::phi_td
protected

The documentation for this class was generated from the following files: