mo_basis
Molecular orbitals are expressed as
where \(\chi_k\) are normalized atomic basis functions.
The current set of MOs has a label mo_label.
When the orbitals are modified, the label should also be updated to keep
everything consistent.
When saving the MOs, the mo_basis directory of the EZFIO database
is copied in the save directory, named by the current mo_label. All
this is done with the script named save_current_mos.sh in the
$QP_ROOT/scripts directory.
EZFIO parameters
- mo_num
Total number of MOs
- mo_coef
Coefficient of the i-th AO on the j-th MO
- mo_coef_aux
AUX Coefficient of the i-th AO on the j-th MO
- mo_coef_imag
Imaginary part of the MO coefficient of the i-th AO on the j-th MO
- mo_label
Label characterizing the MOS (Local, Canonical, Natural, etc)
- mo_occ
MO occupation numbers
- mo_symmetry
MOs with the same integer belong to the same irrep.
- mo_class
[ Core | Inactive | Active | Virtual | Deleted ], as defined by qp_set_mo_class
- ao_md5
MD5 checksum characterizing the AO basis set.
Providers
- mo_class
File :
mo_basis/mo_class.irp.fcharacter*(32), allocatable :: mo_class (mo_num)
[ Core | Inactive | Active | Virtual | Deleted ], as defined by qp_set_mo_class
Needs:
ezfio_filename
mo_num
mpi_master
Needed by:
list_actlist_all_but_del_orblist_corelist_dellist_inact
list_virtmo_two_e_integrals_erf_in_mapmo_two_e_integrals_in_mapn_act_orbn_all_but_del_orb
n_core_orbn_del_orbn_inact_orbn_virt_orb
- mo_coef
File :
mo_basis/mos.irp.fdouble precision, allocatable :: mo_coef (ao_num,mo_num)
Molecular orbital coefficients on AO basis set
mo_coef(i,j) = coefficient of the i-th AO on the jth MO
mo_label : Label characterizing the MOs (local, canonical, natural, etc)
Needs:
ao_numao_ortho_canonical_coef
ezfio_filenamemo_num
mpi_master
Needed by:
attachment_orbitalscholesky_mo_transpd0tu_alpha_aoeigenvectors_fock_matrix_mofock_matrix_mo_alphafock_matrix_mo_betafps_spf_matrix_momcscf_fock_alpha_momo_coef_in_ao_ortho_basismo_coef_transpmo_deriv_1_xmo_dipole_x
mo_integrals_n_emo_integrals_n_e_per_atommo_kinetic_integralsmo_overlapmo_pseudo_integralsmo_pseudo_integrals_localmo_pseudo_integrals_non_localmo_spread_xmo_two_e_int_erf_jj_from_aomo_two_e_integrals_erf_in_mapmo_two_e_integrals_in_mapnatorbsfci
one_e_dm_alpha_ao_for_dftone_e_dm_alpha_ao_for_dft_no_coreone_e_dm_ao_alphaone_e_dm_ao_alpha_nstatesone_e_dm_mo_alpha_for_dftone_e_dm_mo_beta_for_dftone_e_spin_density_aopsi_dets_mo_coefscf_density_matrix_ao_alphascf_density_matrix_ao_beta
- mo_coef_aux
File :
mo_basis/mos_aux.irp.fdouble precision, allocatable :: mo_coef_aux (ao_num,mo_num)
Needs:
ao_numao_ortho_canonical_coef
ezfio_filenamemo_num
mpi_master
- mo_coef_imag
File :
mo_basis/mos.irp.fdouble precision, allocatable :: mo_coef_imag (ao_num,mo_num)
Molecular orbital coefficients on AO basis set
mo_coef_imag(i,j) = coefficient of the i-th AO on the jth MO
mo_label : Label characterizing the MOs (local, canonical, natural, etc)
Needs:
ao_numezfio_filename
mo_num
mpi_master
- mo_coef_in_ao_ortho_basis
File :
mo_basis/mos.irp.fdouble precision, allocatable :: mo_coef_in_ao_ortho_basis (ao_num,mo_num)
MO coefficients in orthogonalized AO basis
\(C^{-1}.C_{mo}\)
Needs:
ao_numao_ortho_canonical_coef_inv
mo_coef
mo_num
- mo_coef_transp
File :
mo_basis/mos.irp.fdouble precision, allocatable :: mo_coef_transp (mo_num,ao_num)
MO coefficients on AO basis set
Needs:
ao_num
mo_coef
mo_num
Needed by:
cholesky_semi_mo_transp_simplemo_two_e_int_erf_jj_from_ao
mo_two_e_integrals_erf_in_map
mo_two_e_integrals_in_map
- mo_label
File :
mo_basis/mos.irp.fcharacter*(64) :: mo_label
MO coefficients on AO basis set
mo_coef(i,j) = coefficient of the i-th AO on the j-th MO
mo_label : Label characterizing the MOs (local, canonical, natural, etc)
Needs:
ezfio_filename
mpi_master
Needed by:
n_det
psi_coef
psi_det
- mo_num
File :
mo_basis/mos.irp.finteger :: mo_num
Number of MOs
Needs:
ao_ortho_canonical_coef
ezfio_filename
mpi_master
Needed by:
ao_one_e_integrals_from_moao_ortho_canonical_nucl_elec_integralsao_ortho_lowdin_nucl_elec_integralsattachment_numbers_sortedattachment_orbitalsbanned_excitationbielec_pqxx_arraybielec_pqxx_no_arraybielec_pxxq_arraybielec_pxxq_no_arraybieleccibielecci_nobig_array_coulomb_integralscholesky_mocholesky_mo_transpcholesky_no_1_idx_transpcholesky_no_total_transpcholesky_semi_mo_transp_simplecore_fock_operatorcore_fock_operator_erfd0tu_alpha_aodata_one_e_dm_alpha_modata_one_e_dm_beta_modifference_dmdifference_dm_eigvecteigenvectors_fock_matrix_mofapqfipqfock_matrix_aofock_matrix_mofock_matrix_mo_alphafock_matrix_mo_betafock_operator_closed_shell_ref_bitmaskfock_wee_closed_shellfps_spf_matrix_mofull_ijkl_bitmaskh_core_riint_erf_3_indexlist_actlist_all_but_del_orblist_corelist_core_inactlist_core_inact_act
list_dellist_inactlist_inact_actlist_virtlowest_super_ci_coef_momcscf_fock_alpha_momcscf_fock_momo_classmo_coefmo_coef_auxmo_coef_begin_iterationmo_coef_imagmo_coef_in_ao_ortho_basismo_coef_transpmo_deriv_1_xmo_dipole_xmo_integrals_cache_minmo_integrals_erf_cache_minmo_integrals_erf_mapmo_integrals_mapmo_integrals_n_emo_integrals_n_e_per_atommo_kinetic_integralsmo_occmo_one_e_integralsmo_overlapmo_pseudo_integralsmo_pseudo_integrals_localmo_pseudo_integrals_non_localmo_spread_centered_xmo_spread_xmo_two_e_int_erf_jjmo_two_e_int_erf_jj_from_aomo_two_e_integrals_erf_in_mapmo_two_e_integrals_in_mapmo_two_e_integrals_jjmulti_s_deriv_1multi_s_dipole_momentn_act_orbn_all_but_del_orbn_attachmentn_core_orb
n_del_orbn_inact_orbn_intn_virt_orbnatorbsci_mosnatorbsfcineworbsoccnumone_body_dm_mo_alpha_one_detone_e_dm_alpha_ao_for_dftone_e_dm_alpha_ao_for_dft_no_coreone_e_dm_ao_alphaone_e_dm_ao_alpha_nstatesone_e_dm_average_alpha_mo_for_dftone_e_dm_average_beta_mo_for_dftone_e_dm_average_mo_for_dftone_e_dm_dagger_mo_spin_indexone_e_dm_moone_e_dm_mo_alphaone_e_dm_mo_alpha_averageone_e_dm_mo_alpha_for_dftone_e_dm_mo_alpha_for_dft_no_coreone_e_dm_mo_beta_for_dftone_e_dm_mo_beta_for_dft_no_coreone_e_dm_mo_diffone_e_dm_mo_for_dftone_e_dm_mo_spin_indexone_e_spin_density_aoone_e_spin_density_moone_e_tr_dm_moone_e_tr_dm_mo_alphaone_ints_noormas_n_orbpsi_energy_h_cores_mo_coefsuper_ci_dmsuperci_natorbswitch_mo_coeftwo_e_dm_moumatv_ne_psi_energyz_dipole_moment
- mo_occ
File :
mo_basis/mos.irp.fdouble precision, allocatable :: mo_occ (mo_num)
MO occupation numbers
Needs:
elec_alpha_numelec_beta_num
ezfio_filenamemo_num
mpi_master
Subroutines / functions
- ao_ortho_cano_to_ao:
File :
mo_basis/mos.irp.fsubroutine ao_ortho_cano_to_ao(A_ao,LDA_ao,A,LDA)
Transform A from the AO basis to the orthogonal AO basis
$C^{-1}.A_{ao}.C^{dagger-1}$
Needs:
ao_num
ao_ortho_canonical_coef_inv
Calls:
dgemm()
- ao_to_mo:
File :
mo_basis/mos.irp.fsubroutine ao_to_mo(A_ao,LDA_ao,A_mo,LDA_mo)
Transform A from the AO basis to the MO basis
$C^dagger.A_{ao}.C$
Needs:
ao_num
mo_coef
mo_num
Called by:
fock_matrix_mo_alphafock_matrix_mo_betafps_spf_matrix_momcscf_fock_alpha_momo_deriv_1_x
mo_dipole_xmo_integrals_n_emo_integrals_n_e_per_atommo_kinetic_integralsmo_pseudo_integrals
mo_pseudo_integrals_localmo_pseudo_integrals_non_localmo_spread_xone_e_dm_mo_alpha_for_dftone_e_dm_mo_beta_for_dft
Calls:
dgemm()
restore_symmetry()
- give_all_mos_and_grad_and_lapl_at_r:
File :
mo_basis/mos_in_r.irp.fsubroutine give_all_mos_and_grad_and_lapl_at_r(r,mos_array,mos_grad_array,mos_lapl_array)
Needs:
ao_num
mo_coef
mo_num
Calls:
give_all_aos_and_grad_and_lapl_at_r()
- give_all_mos_and_grad_at_r:
File :
mo_basis/mos_in_r.irp.fsubroutine give_all_mos_and_grad_at_r(r,mos_array,mos_grad_array)
Needs:
ao_num
mo_coef
mo_num
Calls:
give_all_aos_and_grad_at_r()
- give_all_mos_at_r:
File :
mo_basis/mos_in_r.irp.fsubroutine give_all_mos_at_r(r,mos_array)
mos_array(i) = ith MO function evaluated at “r”
Needs:
ao_num
mo_coef_transp
mo_num
Calls:
dgemv()
give_all_aos_at_r()
- mix_mo_jk:
File :
mo_basis/mos.irp.fsubroutine mix_mo_jk(j,k)
Rotates the j-th MO with the k-th MO to give two new MOs that are
$+ = frac{1}{sqrt{2}} ( | jrangle + | krangle)$
$- = frac{1}{sqrt{2}} ( | jrangle - | krangle)$
by convention, the ‘+’ MO is in the lowest index (min(j,k)) by convention, the ‘-’ MO is in the highest index (max(j,k))
Needs:
ao_num
mo_coef
- mo_as_eigvectors_of_mo_matrix:
File :
mo_basis/utils.irp.fsubroutine mo_as_eigvectors_of_mo_matrix(matrix,n,m,label,sign,output)
Needs:
ao_nummo_coef
mo_label
mo_num
Called by:
create_guess()damping_scf()
hcore_guess()
roothaan_hall_scf()
Calls:
dgemm()
lapack_diag()
write_time()
- mo_as_svd_vectors_of_mo_matrix:
File :
mo_basis/utils.irp.fsubroutine mo_as_svd_vectors_of_mo_matrix(matrix,lda,m,n,label)
Needs:
ao_nummo_coef
mo_label
mo_num
Calls:
dgemm()
svd()
write_time()
- mo_as_svd_vectors_of_mo_matrix_eig:
File :
mo_basis/utils.irp.fsubroutine mo_as_svd_vectors_of_mo_matrix_eig(matrix,lda,m,n,eig,label)
Needs:
ao_nummo_coef
mo_label
mo_num
Called by:
set_natorb_no_ov_rot()
set_natural_mos()
set_natural_mos_canon_label()
Calls:
dgemm()
svd()
write_time()
- mo_coef_new_as_svd_vectors_of_mo_matrix_eig:
File :
mo_basis/utils.irp.fsubroutine mo_coef_new_as_svd_vectors_of_mo_matrix_eig(matrix,lda,m,n,mo_coef_before,eig,mo_coef_new)
You enter with matrix in the MO basis defined with the mo_coef_before.
You SVD the matrix and set the eigenvectors as mo_coef_new ordered by increasing singular values
Needs:
ao_num
mo_num
Calls:
dgemm()
svd()
write_time()
- save_mos:
File :
mo_basis/utils.irp.fsubroutine save_mos
Needs:
ao_md5ao_nummo_class
mo_coefmo_label
mo_nummo_occ
Called by:
damping_scf()hcore_guess()huckel_guess()
roothaan_hall_scf()run_orb_opt_trust_v2()save_natural_mos()
save_natural_mos_canon_label()save_natural_mos_no_ov_rot()
Calls:
ezfio_set_mo_basis_ao_md5()ezfio_set_mo_basis_mo_class()
ezfio_set_mo_basis_mo_coef()ezfio_set_mo_basis_mo_label()
ezfio_set_mo_basis_mo_num()ezfio_set_mo_basis_mo_occ()
- save_mos_no_occ:
File :
mo_basis/utils.irp.fsubroutine save_mos_no_occ
Needs:
ao_num
mo_coef
mo_num
Calls:
ezfio_set_mo_basis_mo_coef()
- save_mos_truncated:
File :
mo_basis/utils.irp.fsubroutine save_mos_truncated(n)
Needs:
ao_md5ao_num
mo_classmo_coef
mo_labelmo_occ
Calls:
ezfio_set_mo_basis_ao_md5()ezfio_set_mo_basis_mo_class()
ezfio_set_mo_basis_mo_coef()ezfio_set_mo_basis_mo_label()
ezfio_set_mo_basis_mo_num()ezfio_set_mo_basis_mo_occ()