# selectors_utils

Helper functions for selectors.

## Providers

`coef_hf_selector`

  File : `selectors_utils/e_corr_selectors.irp.f`

      double precision        :: coef_hf_selector
      double precision        :: inv_selectors_coef_hf
      double precision        :: inv_selectors_coef_hf_squared
      double precision, allocatable   :: e_corr_per_selectors (N_det_selectors)
      double precision, allocatable   :: i_h_hf_per_selectors (N_det_selectors)
      double precision, allocatable   :: delta_e_per_selector (N_det_selectors)
      double precision        :: e_corr_double_only
      double precision        :: e_corr_second_order

  Correlation energy per determinant with respect to the Hartree-Fock determinant for the all the double excitations in the selectors determinants.

  E_corr_per_selectors(i) = \(\langle D_i | H | \text{HF}\rangle c(D_i)/c(HF)\) if \(| D_i \rangle\) is a double excitation.

  E_corr_per_selectors(i) = -1000.d0 if it is not a double excitation

  coef_hf_selector = coefficient of the Hartree Fock determinant in the selectors determinants

  Needs:

  `big_array_coulomb_integrals` `big_array_coulomb_integrals` `exc_degree_per_selectors` `mo_integrals_map` | `mo_two_e_integrals_in_map` `n_det_selectors` `n_int` | `psi_selectors` `ref_bitmask` `ref_bitmask_energy`

`delta_e_per_selector`

  File : `selectors_utils/e_corr_selectors.irp.f`

      double precision        :: coef_hf_selector
      double precision        :: inv_selectors_coef_hf
      double precision        :: inv_selectors_coef_hf_squared
      double precision, allocatable   :: e_corr_per_selectors (N_det_selectors)
      double precision, allocatable   :: i_h_hf_per_selectors (N_det_selectors)
      double precision, allocatable   :: delta_e_per_selector (N_det_selectors)
      double precision        :: e_corr_double_only
      double precision        :: e_corr_second_order

  Correlation energy per determinant with respect to the Hartree-Fock determinant for the all the double excitations in the selectors determinants.

  E_corr_per_selectors(i) = \(\langle D_i | H | \text{HF}\rangle c(D_i)/c(HF)\) if \(| D_i \rangle\) is a double excitation.

  E_corr_per_selectors(i) = -1000.d0 if it is not a double excitation

  coef_hf_selector = coefficient of the Hartree Fock determinant in the selectors determinants

  Needs:

  `big_array_coulomb_integrals` `big_array_coulomb_integrals` `exc_degree_per_selectors` `mo_integrals_map` | `mo_two_e_integrals_in_map` `n_det_selectors` `n_int` | `psi_selectors` `ref_bitmask` `ref_bitmask_energy`

`double_index_selectors`

  File : `selectors_utils/e_corr_selectors.irp.f`

      integer, allocatable    :: exc_degree_per_selectors     (N_det_selectors)
      integer, allocatable    :: double_index_selectors       (N_det_selectors)
      integer :: n_double_selectors

  Degree of excitation respect to Hartree Fock for the wave function for the all the selectors determinants.

  double_index_selectors = list of the index of the double excitations

  n_double_selectors = number of double excitations in the selectors determinants

  Needs:

  `n_det_selectors` `n_int` | `psi_selectors` | `ref_bitmask`

  Needed by:

  `coef_hf_selector` |  |

`e_corr_double_only`

  File : `selectors_utils/e_corr_selectors.irp.f`

      double precision        :: coef_hf_selector
      double precision        :: inv_selectors_coef_hf
      double precision        :: inv_selectors_coef_hf_squared
      double precision, allocatable   :: e_corr_per_selectors (N_det_selectors)
      double precision, allocatable   :: i_h_hf_per_selectors (N_det_selectors)
      double precision, allocatable   :: delta_e_per_selector (N_det_selectors)
      double precision        :: e_corr_double_only
      double precision        :: e_corr_second_order

  Correlation energy per determinant with respect to the Hartree-Fock determinant for the all the double excitations in the selectors determinants.

  E_corr_per_selectors(i) = \(\langle D_i | H | \text{HF}\rangle c(D_i)/c(HF)\) if \(| D_i \rangle\) is a double excitation.

  E_corr_per_selectors(i) = -1000.d0 if it is not a double excitation

  coef_hf_selector = coefficient of the Hartree Fock determinant in the selectors determinants

  Needs:

  `big_array_coulomb_integrals` `big_array_coulomb_integrals` `exc_degree_per_selectors` `mo_integrals_map` | `mo_two_e_integrals_in_map` `n_det_selectors` `n_int` | `psi_selectors` `ref_bitmask` `ref_bitmask_energy`

`e_corr_per_selectors`

  File : `selectors_utils/e_corr_selectors.irp.f`

      double precision        :: coef_hf_selector
      double precision        :: inv_selectors_coef_hf
      double precision        :: inv_selectors_coef_hf_squared
      double precision, allocatable   :: e_corr_per_selectors (N_det_selectors)
      double precision, allocatable   :: i_h_hf_per_selectors (N_det_selectors)
      double precision, allocatable   :: delta_e_per_selector (N_det_selectors)
      double precision        :: e_corr_double_only
      double precision        :: e_corr_second_order

  Correlation energy per determinant with respect to the Hartree-Fock determinant for the all the double excitations in the selectors determinants.

  E_corr_per_selectors(i) = \(\langle D_i | H | \text{HF}\rangle c(D_i)/c(HF)\) if \(| D_i \rangle\) is a double excitation.

  E_corr_per_selectors(i) = -1000.d0 if it is not a double excitation

  coef_hf_selector = coefficient of the Hartree Fock determinant in the selectors determinants

  Needs:

  `big_array_coulomb_integrals` `big_array_coulomb_integrals` `exc_degree_per_selectors` `mo_integrals_map` | `mo_two_e_integrals_in_map` `n_det_selectors` `n_int` | `psi_selectors` `ref_bitmask` `ref_bitmask_energy`

`e_corr_second_order`

  File : `selectors_utils/e_corr_selectors.irp.f`

      double precision        :: coef_hf_selector
      double precision        :: inv_selectors_coef_hf
      double precision        :: inv_selectors_coef_hf_squared
      double precision, allocatable   :: e_corr_per_selectors (N_det_selectors)
      double precision, allocatable   :: i_h_hf_per_selectors (N_det_selectors)
      double precision, allocatable   :: delta_e_per_selector (N_det_selectors)
      double precision        :: e_corr_double_only
      double precision        :: e_corr_second_order

  Correlation energy per determinant with respect to the Hartree-Fock determinant for the all the double excitations in the selectors determinants.

  E_corr_per_selectors(i) = \(\langle D_i | H | \text{HF}\rangle c(D_i)/c(HF)\) if \(| D_i \rangle\) is a double excitation.

  E_corr_per_selectors(i) = -1000.d0 if it is not a double excitation

  coef_hf_selector = coefficient of the Hartree Fock determinant in the selectors determinants

  Needs:

  `big_array_coulomb_integrals` `big_array_coulomb_integrals` `exc_degree_per_selectors` `mo_integrals_map` | `mo_two_e_integrals_in_map` `n_det_selectors` `n_int` | `psi_selectors` `ref_bitmask` `ref_bitmask_energy`

`exc_degree_per_selectors`

  File : `selectors_utils/e_corr_selectors.irp.f`

      integer, allocatable    :: exc_degree_per_selectors     (N_det_selectors)
      integer, allocatable    :: double_index_selectors       (N_det_selectors)
      integer :: n_double_selectors

  Degree of excitation respect to Hartree Fock for the wave function for the all the selectors determinants.

  double_index_selectors = list of the index of the double excitations

  n_double_selectors = number of double excitations in the selectors determinants

  Needs:

  `n_det_selectors` `n_int` | `psi_selectors` | `ref_bitmask`

  Needed by:

  `coef_hf_selector` |  |

`i_h_hf_per_selectors`

  File : `selectors_utils/e_corr_selectors.irp.f`

      double precision        :: coef_hf_selector
      double precision        :: inv_selectors_coef_hf
      double precision        :: inv_selectors_coef_hf_squared
      double precision, allocatable   :: e_corr_per_selectors (N_det_selectors)
      double precision, allocatable   :: i_h_hf_per_selectors (N_det_selectors)
      double precision, allocatable   :: delta_e_per_selector (N_det_selectors)
      double precision        :: e_corr_double_only
      double precision        :: e_corr_second_order

  Correlation energy per determinant with respect to the Hartree-Fock determinant for the all the double excitations in the selectors determinants.

  E_corr_per_selectors(i) = \(\langle D_i | H | \text{HF}\rangle c(D_i)/c(HF)\) if \(| D_i \rangle\) is a double excitation.

  E_corr_per_selectors(i) = -1000.d0 if it is not a double excitation

  coef_hf_selector = coefficient of the Hartree Fock determinant in the selectors determinants

  Needs:

  `big_array_coulomb_integrals` `big_array_coulomb_integrals` `exc_degree_per_selectors` `mo_integrals_map` | `mo_two_e_integrals_in_map` `n_det_selectors` `n_int` | `psi_selectors` `ref_bitmask` `ref_bitmask_energy`

`inv_selectors_coef_hf`

  File : `selectors_utils/e_corr_selectors.irp.f`

      double precision        :: coef_hf_selector
      double precision        :: inv_selectors_coef_hf
      double precision        :: inv_selectors_coef_hf_squared
      double precision, allocatable   :: e_corr_per_selectors (N_det_selectors)
      double precision, allocatable   :: i_h_hf_per_selectors (N_det_selectors)
      double precision, allocatable   :: delta_e_per_selector (N_det_selectors)
      double precision        :: e_corr_double_only
      double precision        :: e_corr_second_order

  Correlation energy per determinant with respect to the Hartree-Fock determinant for the all the double excitations in the selectors determinants.

  E_corr_per_selectors(i) = \(\langle D_i | H | \text{HF}\rangle c(D_i)/c(HF)\) if \(| D_i \rangle\) is a double excitation.

  E_corr_per_selectors(i) = -1000.d0 if it is not a double excitation

  coef_hf_selector = coefficient of the Hartree Fock determinant in the selectors determinants

  Needs:

  `big_array_coulomb_integrals` `big_array_coulomb_integrals` `exc_degree_per_selectors` `mo_integrals_map` | `mo_two_e_integrals_in_map` `n_det_selectors` `n_int` | `psi_selectors` `ref_bitmask` `ref_bitmask_energy`

`inv_selectors_coef_hf_squared`

  File : `selectors_utils/e_corr_selectors.irp.f`

      double precision        :: coef_hf_selector
      double precision        :: inv_selectors_coef_hf
      double precision        :: inv_selectors_coef_hf_squared
      double precision, allocatable   :: e_corr_per_selectors (N_det_selectors)
      double precision, allocatable   :: i_h_hf_per_selectors (N_det_selectors)
      double precision, allocatable   :: delta_e_per_selector (N_det_selectors)
      double precision        :: e_corr_double_only
      double precision        :: e_corr_second_order

  Correlation energy per determinant with respect to the Hartree-Fock determinant for the all the double excitations in the selectors determinants.

  E_corr_per_selectors(i) = \(\langle D_i | H | \text{HF}\rangle c(D_i)/c(HF)\) if \(| D_i \rangle\) is a double excitation.

  E_corr_per_selectors(i) = -1000.d0 if it is not a double excitation

  coef_hf_selector = coefficient of the Hartree Fock determinant in the selectors determinants

  Needs:

  `big_array_coulomb_integrals` `big_array_coulomb_integrals` `exc_degree_per_selectors` `mo_integrals_map` | `mo_two_e_integrals_in_map` `n_det_selectors` `n_int` | `psi_selectors` `ref_bitmask` `ref_bitmask_energy`

`n_double_selectors`

  File : `selectors_utils/e_corr_selectors.irp.f`

      integer, allocatable    :: exc_degree_per_selectors     (N_det_selectors)
      integer, allocatable    :: double_index_selectors       (N_det_selectors)
      integer :: n_double_selectors

  Degree of excitation respect to Hartree Fock for the wave function for the all the selectors determinants.

  double_index_selectors = list of the index of the double excitations

  n_double_selectors = number of double excitations in the selectors determinants

  Needs:

  `n_det_selectors` `n_int` | `psi_selectors` | `ref_bitmask`

  Needed by:

  `coef_hf_selector` |  |

`psi_selectors_coef_transp`

  File : `selectors_utils/selectors.irp.f`

      double precision, allocatable   :: psi_selectors_coef_transp    (N_states,psi_selectors_size)

  Transposed psi_selectors

  Needs:

  `n_det_selectors` `n_states` | `psi_selectors` | `psi_selectors_size`

`psi_selectors_diag_h_mat`

  File : `selectors_utils/selectors.irp.f`

      double precision, allocatable   :: psi_selectors_diag_h_mat     (psi_selectors_size)

  Diagonal elements of the H matrix for each selectors

  Needs:

  `elec_num` `n_det_selectors` `n_int` | `psi_selectors` `psi_selectors_size` | `ref_bitmask` `ref_bitmask_energy`

`psi_selectors_size`

  File : `selectors_utils/selectors.irp.f`

      integer :: psi_selectors_size

  Needs:

  `psi_det_size` |  |

  Needed by:

  `psi_selectors` | `psi_selectors_coef_transp` | `psi_selectors_diag_h_mat`

## Subroutines / functions

`zmq_get_n_det_generators:`()

  File : `selectors_utils/zmq.irp.f_template_102`

      integer function zmq_get_N_det_generators(zmq_to_qp_run_socket, worker_id)

  Get N_det_generators from the qp_run scheduler

  Needs:

  `n_det_generators` | `zmq_state` | `mpi_master`

`zmq_get_n_det_selectors:`()

  File : `selectors_utils/zmq.irp.f_template_102`

      integer function zmq_get_N_det_selectors(zmq_to_qp_run_socket, worker_id)

  Get N_det_selectors from the qp_run scheduler

  Needs:

  `n_det_selectors` | `zmq_state` | `mpi_master`

`zmq_put_n_det_generators:`()

  File : `selectors_utils/zmq.irp.f_template_102`

      integer function zmq_put_N_det_generators(zmq_to_qp_run_socket,worker_id)

  Put N_det_generators on the qp_run scheduler

  Needs:

  `n_det_generators` | `zmq_state` |

`zmq_put_n_det_selectors:`()

  File : `selectors_utils/zmq.irp.f_template_102`

      integer function zmq_put_N_det_selectors(zmq_to_qp_run_socket,worker_id)

  Put N_det_selectors on the qp_run scheduler

  Needs:

  `n_det_selectors` | `zmq_state` |