perturbation

All subroutines in *.irp.f starting with pt2_ in the current directory are perturbation computed using the routine i_H_psi. Other cases are not allowed. The arguments of the pt2_ are always:

subroutine pt2_...(                                          &
    psi_ref,                                                 &
    psi_ref_coefs,                                           &
    E_refs,                                                  &
    det_pert,                                                &
    c_pert,                                                  &
    e_2_pert,                                                &
    H_pert_diag,                                             &
    Nint,                                                    &
    Ndet,                                                    &
    N_st )


integer          , intent(in)  :: Nint,Ndet,N_st
integer(bit_kind), intent(in)  :: psi_ref(Nint,2,Ndet)
double precision , intent(in)  :: psi_ref_coefs(Ndet,N_st)
double precision , intent(in)  :: E_refs(N_st)
integer(bit_kind), intent(in)  :: det_pert(Nint,2)
double precision , intent(out) :: c_pert(N_st),e_2_pert(N_st),H_pert_diag
psi_ref

bitstring of the determinants present in the various N_st states

psi_ref_coefs

coefficients of the determinants on the various N_st states

E_refs

Energy of the various N_st states

det_pert

Perturber determinant

c_pert

Perturbative coefficients for the various states

e_2_pert

Perturbative energetic contribution for the various states

H_pert_diag

Diagonal \(\hat H\) matrix element of the perturber

Nint

Should be equal to N_int

Ndet

Number of determinants i in \(|\Psi \rangle\) on which we apply <det_pert | \(\hat H\) | i>

N_st

Number of states

EZFIO parameters

do_pt2

If True, compute the PT2 contribution

Default: True

pt2_max

The selection process stops when the largest PT2 (for all the state) is lower than pt2_max in absolute value

Default: 0.0001

variance_max

The selection process stops when the largest variance (for all the state) is lower than variance_max in absolute value

Default: 0.0

pt2_relative_error

Stop stochastic PT2 when the relative error is smaller than pT2_relative_error

Default: 0.002

correlation_energy_ratio_max

The selection process stops at a fixed correlation ratio (useful for getting same accuracy between molecules). Defined as \((E_{CI}-E_{HF})/(E_{CI}+E_{PT2} - E_{HF})\).

Default: 1.00

h0_type

Type of denominator in PT2. [EN | SOP | HF]

Default: EN

Providers

max_exc_pert

File : perturbation/exc_max.irp.f

integer :: max_exc_pert
selection_criterion

File : perturbation/selection.irp.f

double precision        :: selection_criterion
double precision        :: selection_criterion_min
double precision        :: selection_criterion_factor

Threshold to select determinants. Set by selection routines.

selection_criterion_factor

File : perturbation/selection.irp.f

double precision        :: selection_criterion
double precision        :: selection_criterion_min
double precision        :: selection_criterion_factor

Threshold to select determinants. Set by selection routines.

selection_criterion_min

File : perturbation/selection.irp.f

double precision        :: selection_criterion
double precision        :: selection_criterion_min
double precision        :: selection_criterion_factor

Threshold to select determinants. Set by selection routines.

var_pt2_ratio

File : perturbation/var_pt2_ratio_provider.irp.f

double precision        :: var_pt2_ratio

The selection process stops when the energy ratio variational/(variational+PT2) is equal to var_pt2_ratio

Needs:

  • correlation_energy_ratio_max

Subroutines / functions

fill_h_apply_buffer_selection:

File : perturbation/selection.irp.f

subroutine fill_H_apply_buffer_selection(n_selected,det_buffer,e_2_pert_buffer,coef_pert_buffer, N_st,Nint,iproc,select_max_out)

Fill the H_apply buffer with determiants for the selection

Needs:

  • elec_alpha_num

  • elec_beta_num

  • h_apply_buffer_allocated

  • n_det

  • n_int

  • selection_criterion

Calls:

  • omp_set_lock()

  • omp_unset_lock()

  • resize_h_apply_buffer()

perturb_buffer_by_mono_dummy:

File : perturbation/perturbation.irp.f_shell_13

subroutine perturb_buffer_by_mono_dummy(i_generator,buffer,buffer_size,e_2_pert_buffer,coef_pert_buffer,sum_e_2_pert,sum_norm_pert,sum_H_pert_diag,N_st,Nint,key_mask,fock_diag_tmp,electronic_energy)

Apply pertubration dummy to the buffer of determinants generated in the H_apply routine.

Needs:

  • mo_num

  • n_det

  • n_det_generators

  • n_det_selectors

  • n_int

  • psi_det_generators

  • psi_selectors

Calls:

  • create_minilist()

  • create_minilist_find_previous()

  • pt2_dummy()

perturb_buffer_by_mono_epstein_nesbet:

File : perturbation/perturbation.irp.f_shell_13

subroutine perturb_buffer_by_mono_epstein_nesbet(i_generator,buffer,buffer_size,e_2_pert_buffer,coef_pert_buffer,sum_e_2_pert,sum_norm_pert,sum_H_pert_diag,N_st,Nint,key_mask,fock_diag_tmp,electronic_energy)

Apply pertubration epstein_nesbet to the buffer of determinants generated in the H_apply routine.

Needs:

  • mo_num

  • n_det

  • n_det_generators

  • n_det_selectors

  • n_int

  • psi_det_generators

  • psi_selectors

Calls:

  • create_minilist()

  • create_minilist_find_previous()

  • pt2_epstein_nesbet()

perturb_buffer_by_mono_epstein_nesbet_2x2:

File : perturbation/perturbation.irp.f_shell_13

subroutine perturb_buffer_by_mono_epstein_nesbet_2x2(i_generator,buffer,buffer_size,e_2_pert_buffer,coef_pert_buffer,sum_e_2_pert,sum_norm_pert,sum_H_pert_diag,N_st,Nint,key_mask,fock_diag_tmp,electronic_energy)

Apply pertubration epstein_nesbet_2x2 to the buffer of determinants generated in the H_apply routine.

Needs:

  • mo_num

  • n_det

  • n_det_generators

  • n_det_selectors

  • n_int

  • psi_det_generators

  • psi_selectors

Calls:

  • create_minilist()

  • create_minilist_find_previous()

  • pt2_epstein_nesbet_2x2()

perturb_buffer_by_mono_epstein_nesbet_2x2_no_ci_diag:

File : perturbation/perturbation.irp.f_shell_13

subroutine perturb_buffer_by_mono_epstein_nesbet_2x2_no_ci_diag(i_generator,buffer,buffer_size,e_2_pert_buffer,coef_pert_buffer,sum_e_2_pert,sum_norm_pert,sum_H_pert_diag,N_st,Nint,key_mask,fock_diag_tmp,electronic_energy)

Apply pertubration epstein_nesbet_2x2_no_ci_diag to the buffer of determinants generated in the H_apply routine.

Needs:

  • mo_num

  • n_det

  • n_det_generators

  • n_det_selectors

  • n_int

  • psi_det_generators

  • psi_selectors

Calls:

  • create_minilist()

  • create_minilist_find_previous()

  • pt2_epstein_nesbet_2x2_no_ci_diag()

perturb_buffer_by_mono_moller_plesset:

File : perturbation/perturbation.irp.f_shell_13

subroutine perturb_buffer_by_mono_moller_plesset(i_generator,buffer,buffer_size,e_2_pert_buffer,coef_pert_buffer,sum_e_2_pert,sum_norm_pert,sum_H_pert_diag,N_st,Nint,key_mask,fock_diag_tmp,electronic_energy)

Apply pertubration moller_plesset to the buffer of determinants generated in the H_apply routine.

Needs:

  • mo_num

  • n_det

  • n_det_generators

  • n_det_selectors

  • n_int

  • psi_det_generators

  • psi_selectors

Calls:

  • create_minilist()

  • create_minilist_find_previous()

  • pt2_moller_plesset()

perturb_buffer_by_mono_qdpt:

File : perturbation/perturbation.irp.f_shell_13

subroutine perturb_buffer_by_mono_qdpt(i_generator,buffer,buffer_size,e_2_pert_buffer,coef_pert_buffer,sum_e_2_pert,sum_norm_pert,sum_H_pert_diag,N_st,Nint,key_mask,fock_diag_tmp,electronic_energy)

Apply pertubration qdpt to the buffer of determinants generated in the H_apply routine.

Needs:

  • mo_num

  • n_det

  • n_det_generators

  • n_det_selectors

  • n_int

  • psi_det_generators

  • psi_selectors

Calls:

  • create_minilist()

  • create_minilist_find_previous()

  • pt2_qdpt()

perturb_buffer_dummy:

File : perturbation/perturbation.irp.f_shell_13

subroutine perturb_buffer_dummy(i_generator,buffer,buffer_size,e_2_pert_buffer,coef_pert_buffer,sum_e_2_pert,sum_norm_pert,sum_H_pert_diag,N_st,Nint,key_mask,fock_diag_tmp,electronic_energy)

Apply pertubration dummy to the buffer of determinants generated in the H_apply routine.

Needs:

  • mo_num

  • n_det_generators

  • n_det_selectors

  • n_int

  • psi_det_generators

  • psi_selectors

Calls:

  • create_microlist()

  • create_minilist()

  • create_minilist_find_previous()

  • getmobiles()

  • pt2_dummy()

perturb_buffer_epstein_nesbet:

File : perturbation/perturbation.irp.f_shell_13

subroutine perturb_buffer_epstein_nesbet(i_generator,buffer,buffer_size,e_2_pert_buffer,coef_pert_buffer,sum_e_2_pert,sum_norm_pert,sum_H_pert_diag,N_st,Nint,key_mask,fock_diag_tmp,electronic_energy)

Apply pertubration epstein_nesbet to the buffer of determinants generated in the H_apply routine.

Needs:

  • mo_num

  • n_det_generators

  • n_det_selectors

  • n_int

  • psi_det_generators

  • psi_selectors

Calls:

  • create_microlist()

  • create_minilist()

  • create_minilist_find_previous()

  • getmobiles()

  • pt2_epstein_nesbet()

perturb_buffer_epstein_nesbet_2x2:

File : perturbation/perturbation.irp.f_shell_13

subroutine perturb_buffer_epstein_nesbet_2x2(i_generator,buffer,buffer_size,e_2_pert_buffer,coef_pert_buffer,sum_e_2_pert,sum_norm_pert,sum_H_pert_diag,N_st,Nint,key_mask,fock_diag_tmp,electronic_energy)

Apply pertubration epstein_nesbet_2x2 to the buffer of determinants generated in the H_apply routine.

Needs:

  • mo_num

  • n_det_generators

  • n_det_selectors

  • n_int

  • psi_det_generators

  • psi_selectors

Calls:

  • create_microlist()

  • create_minilist()

  • create_minilist_find_previous()

  • getmobiles()

  • pt2_epstein_nesbet_2x2()

perturb_buffer_epstein_nesbet_2x2_no_ci_diag:

File : perturbation/perturbation.irp.f_shell_13

subroutine perturb_buffer_epstein_nesbet_2x2_no_ci_diag(i_generator,buffer,buffer_size,e_2_pert_buffer,coef_pert_buffer,sum_e_2_pert,sum_norm_pert,sum_H_pert_diag,N_st,Nint,key_mask,fock_diag_tmp,electronic_energy)

Apply pertubration epstein_nesbet_2x2_no_ci_diag to the buffer of determinants generated in the H_apply routine.

Needs:

  • mo_num

  • n_det_generators

  • n_det_selectors

  • n_int

  • psi_det_generators

  • psi_selectors

Calls:

  • create_microlist()

  • create_minilist()

  • create_minilist_find_previous()

  • getmobiles()

  • pt2_epstein_nesbet_2x2_no_ci_diag()

perturb_buffer_moller_plesset:

File : perturbation/perturbation.irp.f_shell_13

subroutine perturb_buffer_moller_plesset(i_generator,buffer,buffer_size,e_2_pert_buffer,coef_pert_buffer,sum_e_2_pert,sum_norm_pert,sum_H_pert_diag,N_st,Nint,key_mask,fock_diag_tmp,electronic_energy)

Apply pertubration moller_plesset to the buffer of determinants generated in the H_apply routine.

Needs:

  • mo_num

  • n_det_generators

  • n_det_selectors

  • n_int

  • psi_det_generators

  • psi_selectors

Calls:

  • create_microlist()

  • create_minilist()

  • create_minilist_find_previous()

  • getmobiles()

  • pt2_moller_plesset()

perturb_buffer_qdpt:

File : perturbation/perturbation.irp.f_shell_13

subroutine perturb_buffer_qdpt(i_generator,buffer,buffer_size,e_2_pert_buffer,coef_pert_buffer,sum_e_2_pert,sum_norm_pert,sum_H_pert_diag,N_st,Nint,key_mask,fock_diag_tmp,electronic_energy)

Apply pertubration qdpt to the buffer of determinants generated in the H_apply routine.

Needs:

  • mo_num

  • n_det_generators

  • n_det_selectors

  • n_int

  • psi_det_generators

  • psi_selectors

Calls:

  • create_microlist()

  • create_minilist()

  • create_minilist_find_previous()

  • getmobiles()

  • pt2_qdpt()

pt2_dummy:

File : perturbation/pt2_equations.irp.f_template_305

subroutine pt2_dummy (electronic_energy,det_ref,det_pert,fock_diag_tmp,c_pert,e_2_pert,H_pert_diag,Nint,ndet,N_st,minilist,idx_minilist,N_minilist)

Dummy perturbation to add all connected determinants.

Needs:

  • mo_num

  • n_det_selectors

  • psi_selectors

  • psi_selectors_size

  • selection_criterion

Called by:

  • perturb_buffer_by_mono_dummy()

  • perturb_buffer_dummy()

Calls:

  • i_h_psi_minilist()

pt2_epstein_nesbet:

File : perturbation/pt2_equations.irp.f_template_305

subroutine pt2_epstein_nesbet (electronic_energy,det_ref,det_pert,fock_diag_tmp,c_pert,e_2_pert,H_pert_diag,Nint,ndet,N_st,minilist,idx_minilist,N_minilist)

Compute the standard Epstein-Nesbet perturbative first order coefficient and second order energetic contribution for the various N_st states.

c_pert(i) = $frac{langle i|H|alpha rangle}{ E_n - langle alpha|H|alpha rangle }$.

e_2_pert(i) = $frac{langle i|H|alpha rangle^2}{ E_n - langle alpha|H|alpha rangle }$.

Needs:

  • mo_num

  • n_det_selectors

  • n_int

  • psi_selectors

  • psi_selectors_size

  • selection_criterion

Called by:

  • perturb_buffer_by_mono_epstein_nesbet()

  • perturb_buffer_epstein_nesbet()

Calls:

  • i_h_psi_minilist()

pt2_epstein_nesbet_2x2:

File : perturbation/pt2_equations.irp.f_template_305

subroutine pt2_epstein_nesbet_2x2 (electronic_energy,det_ref,det_pert,fock_diag_tmp,c_pert,e_2_pert,H_pert_diag,Nint,ndet,N_st,minilist,idx_minilist,N_minilist)

Computes the Epstein-Nesbet 2x2 diagonalization coefficient and energetic contribution for the various N_st states.

e_2_pert(i) = $frac{1}{2} ( langle alpha|H|alpha rangle - E_n) - sqrt{ (langle alpha|H|alpha rangle - E_n)^2 + 4 langle i|H|alpha rangle^2 }$.

c_pert(i) = e_2_pert(i) $times frac{1}{ langle i|H|alpha rangle}$.

Needs:

  • mo_num

  • n_det_selectors

  • n_int

  • psi_selectors

  • psi_selectors_size

Called by:

  • perturb_buffer_by_mono_epstein_nesbet_2x2()

  • perturb_buffer_epstein_nesbet_2x2()

Calls:

  • i_h_psi()

pt2_epstein_nesbet_2x2_no_ci_diag:

File : perturbation/pt2_equations.irp.f_template_305

subroutine pt2_epstein_nesbet_2x2_no_ci_diag(electronic_energy,det_ref,det_pert,fock_diag_tmp,c_pert,e_2_pert,H_pert_diag,Nint,ndet,N_st,minilist,idx_minilist,N_minilist)

compute the Epstein-Nesbet 2x2 diagonalization coefficient and energetic contribution

for the various N_st states.

e_2_pert(i) = 0.5 * (( <det_pert|H|det_pert> - E(i) ) - sqrt( ( <det_pert|H|det_pert> - E(i)) ^2 + 4 <psi(i)|H|det_pert>^2 )

c_pert(i) = e_2_pert(i)/ <psi(i)|H|det_pert>

Needs:

  • mo_num

  • n_det_selectors

  • n_int

  • psi_energy

  • psi_selectors

  • psi_selectors_size

Called by:

  • perturb_buffer_by_mono_epstein_nesbet_2x2_no_ci_diag()

  • perturb_buffer_epstein_nesbet_2x2_no_ci_diag()

Calls:

  • i_h_psi()

pt2_moller_plesset:

File : perturbation/pt2_equations.irp.f_template_305

subroutine pt2_moller_plesset (electronic_energy,det_ref,det_pert,fock_diag_tmp,c_pert,e_2_pert,H_pert_diag,Nint,ndet,N_st,minilist,idx_minilist,N_minilist)

Computes the standard Moller-Plesset perturbative first order coefficient and second order energetic contribution for the various N_st states.

c_pert(i) = $frac{langle i|H|alpha rangle}{text{difference of orbital energies}}$.

e_2_pert(i) = $frac{langle i|H|alpha rangle^2}{text{difference of orbital energies}}$.

Needs:

  • fock_matrix_mo

  • mo_num

  • n_det_selectors

  • n_int

  • psi_selectors

  • psi_selectors_size

  • ref_bitmask

Called by:

  • perturb_buffer_by_mono_moller_plesset()

  • perturb_buffer_moller_plesset()

Calls:

  • decode_exc()

  • get_excitation()

  • i_h_psi_minilist()

pt2_qdpt:

File : perturbation/pt2_equations.irp.f_template_305

subroutine pt2_qdpt (electronic_energy,det_ref,det_pert,fock_diag_tmp,c_pert,e_2_pert,H_pert_diag,Nint,ndet,N_st,minilist,idx_minilist,N_minilist)

Computes the QDPT first order coefficient and second order energetic contribution for the various N_st states.

c_pert(i) = $frac{langle i|H|alpha rangle}{langle i|H|i rangle - langle alpha|H|alpha rangle}$.

Needs:

  • mo_num

  • n_det_selectors

  • n_int

  • psi_selectors

  • psi_selectors_size

  • selection_criterion

Called by:

  • perturb_buffer_by_mono_qdpt()

  • perturb_buffer_qdpt()

Calls:

  • get_excitation_degree()

  • i_h_j()

  • i_h_psi_minilist()

remove_small_contributions:

File : perturbation/selection.irp.f

subroutine remove_small_contributions

Remove determinants with small contributions. N_states is assumed to be provided.

Needs:

  • n_det

  • n_det_generators

  • n_int

  • n_states

  • psi_coef

  • psi_det_sorted

  • psi_det

  • psi_det_size

  • psi_det_sorted

  • selection_criterion

Calls:

  • diagonalize_ci()

  • i_h_psi()

  • write_int()

Touches:

  • ci_electronic_energy

  • ci_electronic_energy

  • ci_energy

  • ci_electronic_energy

  • n_det

  • psi_coef

  • psi_det

  • psi_energy

  • psi_energy