diff --git a/src/utils_periodic/qp2-pbc-diff.txt b/src/utils_periodic/qp2-pbc-diff.txt index b00dc055..8e7e0bd6 100644 --- a/src/utils_periodic/qp2-pbc-diff.txt +++ b/src/utils_periodic/qp2-pbc-diff.txt @@ -1,27 +1,77 @@ -changed, but not by me -ocaml/Input_determinants_by_hand.ml -ocaml/qp_set_mo_class.ml -src/cipsi/run_pt2_slave.irp.f -src/cipsi/selection.irp.f -src/cipsi/slave_cipsi.irp.f -src/davidson/EZFIO.cfg -src/davidson/davidson_parallel.irp.f -src/davidson/diagonalization_hs2_dressed.irp.f -src/davidson/input.irp.f -src/davidson/parameters.irp.f -src/davidson/u0_h_u0.irp.f -src/determinants/EZFIO.cfg -src/determinants/single_excitations.irp.f +compare master-features_periodic +694df1d6498767c9b130dadf0e0cbd585d10d348 +8bfcfe8f21762aacd95bbeccb1c3c1d2f847cca3 -src/ao_one_e_ints/ao_ortho_canonical_complex.irp.f - no {dump,load}_ao_integrals +TODO: +ao_ints + reverse index + s_half_inv_complex + ao_overlap_abs for complex + ao_integrals_n_e_per_atom_complex? + not implemented for periodic: + ao_two_e_integral + ao_two_e_integral_schwartz_accel + compute_ao_two_e_integrals + [ double precision, ao_two_e_integral_schwartz,(ao_num,ao_num) ] + compute_ao_integrals_jl + +mo_one_e_ints + make separate providers for real/imag/complex parts for periodic + +mo_basis + decide how to handle real/imag/complex parts of mo_coef (maybe just need to chage save_mos?) + reorder_core_orb: implement for periodic + save_mos_no_occ: implement for periodic + +scf + finish complex DIIS + finish ao_two_e_integral_{alpha,beta}_complex (need reverse index?) + finish extrapolate_Fock_matrix_complex + finish eigenvectors_Fock_matrix_AO_complex + +mo_two_e_ints + not started + + + + +############################ +# utils, ezfio, ... # +############################ -periodic: ocaml/Input_mo_basis.ml added mo_coef_imag array (real) still needs mo_coef_to_string and to_string? +src/nuclei/EZFIO.cfg + [is_periodic] + if true use periodic parts of code +src/utils/linear_algebra.irp.f + complex versions of utils + (maybe put in separate file?) + +src/utils/map_module.f90 + subroutine map_get_2 + get two neighboring values from map + not tested or used + + +src/utils_periodic/export_integrals_ao_periodic.irp.f + dump ints for testing + +src/utils_periodic/import_integrals_ao_periodic.irp.f + read ints from pyscf + TODO: don't read ao_num from stdin + +src/utils_periodic/import_mo_coef_periodic.irp.f + read mo_coef from pyscf + + + +####################### +# ao_one_e_ints # +####################### src/ao_one_e_ints/EZFIO.cfg [ao_integrals_n_e_imag] @@ -46,9 +96,9 @@ src/ao_one_e_ints/pot_ao_pseudo_ints.irp.f imag arrays can only be read from disk no complex/imag versions of ao_integrals_n_e_per_atom, but this should be straightforward if we need it later? changed ao_overlap_abs so that it is set to cdabs(ao_overlap_complex) if (is_periodic) - (maybe not the behavior we want) + TODO: (maybe not the behavior we want) added S_inv_complex - (no S_half_inv_complex yet) + TODO: (no S_half_inv_complex yet) src/ao_one_e_ints/ao_ortho_canonical_complex.irp.f ao_cart_to_sphe_coef_complex @@ -68,6 +118,11 @@ src/ao_one_e_ints/ao_ortho_canonical_complex.irp.f similar to real version +####################### +# ao_two_e_ints # +####################### + + src/ao_two_e_ints/map_integrals.irp.f added ao_integrals_map_2 (provider linked to ao_integrals_map) double size of both maps if (is_periodic) @@ -96,8 +151,6 @@ src/ao_two_e_ints/map_integrals.irp.f src/ao_two_e_ints/two_e_integrals.irp.f - - not implemented for periodic: double precision function ao_two_e_integral double precision function ao_two_e_integral_schwartz_accel @@ -109,7 +162,13 @@ src/ao_two_e_ints/two_e_integrals.irp.f [ logical, ao_two_e_integrals_in_map ] complex AO ints can only be read from disk (not calculated) - + + +####################### +# mo_basis # +####################### + + src/mo_basis/track_orb.irp.f → src/bitmask/track_orb.irp.f not implemented for periodic: subroutine reorder_core_orb (should be modified for periodic) @@ -119,27 +178,13 @@ src/mo_basis/track_orb.irp.f → src/bitmask/track_orb.irp.f [ complex*16, mo_coef_begin_iteration_complex, (ao_num,mo_num) ] similar to real version - -src/hartree_fock/fock_matrix_hf_complex.irp.f - TODO for periodic: - [ complex*16, ao_two_e_integral_{alpha,beta}_complex, (ao_num, ao_num) ] - finish implementation (might need new version of two_e_integrals_index_reverse) - added for periodic: - [ complex*16, Fock_matrix_ao_{alpha,beta}_complex, (ao_num, ao_num) ] - - -src/hartree_fock/scf.irp.f - modified for periodic: - subroutine create_guess - should work for periodic - TODO: decide what to do about mo_coef_complex and imag/real parts for touch/save!!! src/mo_basis/EZFIO.cfg [mo_coef_imag] src/mo_basis/mos.irp.f - modifieed for periodic: + modified for periodic: subroutine mix_mo_jk src/mo_basis/mos_complex.irp.f @@ -191,6 +236,10 @@ src/mo_guess/pot_mo_ortho_lowdin_ints.irp.f [complex*16, ao_ortho_lowdin_nucl_elec_integrals_complex, (mo_num,mo_num)] +####################### +# mo_one_e_ints # +####################### + src/mo_one_e_ints/EZFIO.cfg [mo_integrals_e_n_imag] [mo_integrals_kinetic_imag] @@ -221,8 +270,6 @@ src/mo_one_e_ints/pot_mo_pseudo_ints.irp.f or transform complex MO ints from complex AO ints and also assign real/imag parts to separate arrays? - - src/mo_one_e_ints/mo_overlap.irp.f [ complex*16, mo_overlap_complex,(mo_num,mo_num) ] TODO: add option to read from disk? @@ -230,5 +277,80 @@ src/mo_one_e_ints/mo_overlap.irp.f maybe just add check to converter to ensure they're orthonormal, and don't save them after that? + +####################### +# SCF # +####################### + +src/hartree_fock/fock_matrix_hf_complex.irp.f + TODO for periodic: + [ complex*16, ao_two_e_integral_{alpha,beta}_complex, (ao_num, ao_num) ] + finish implementation (might need new version of two_e_integrals_index_reverse) + added for periodic: + [ complex*16, Fock_matrix_ao_{alpha,beta}_complex, (ao_num, ao_num) ] + + +src/hartree_fock/scf.irp.f + modified for periodic: + subroutine create_guess + should work for periodic + TODO: decide what to do about mo_coef_complex and imag/real parts for touch/save!!! + TODO: call roothaan_hall_scf_complex if (is_periodic) + + +src/scf_utils/diagonalize_fock_complex.irp.f + [ complex*16, eigenvectors_Fock_matrix_mo_complex, (ao_num,mo_num) ] + similar to real version + make separate function in utils for lapack calls + +src/scf_utils/diis_complex.irp.f + [complex*16, FPS_SPF_Matrix_AO_complex, (AO_num, AO_num)] + [complex*16, FPS_SPF_Matrix_MO, (mo_num, mo_num)] + linked providers: + [ double precision, eigenvalues_Fock_matrix_AO_complex, (AO_num) ] + [ complex*16, eigenvectors_Fock_matrix_AO_complex, (AO_num,AO_num) ] + TODO: finish implementing (need s_half_inv_complex) + note: eigvals is same type/size as real version + + +src/scf_utils/fock_matrix.irp.f + added checks to make sure we don't end up in real providers if (is_periodic) + probably not necessary? + [ double precision, SCF_energy ] + modified for periodic + could also add check to ensure imaginary part is zero? + +src/scf_utils/fock_matrix_complex.irp.f + [ complex*16, Fock_matrix_mo_complex, (mo_num,mo_num) ] + [ double precision, Fock_matrix_diag_mo_complex, (mo_num)] + similar to real versions + added check to make sure diagonal elements of fock matrix are real + [ complex*16, Fock_matrix_mo_alpha_complex, (mo_num,mo_num) ] + [ complex*16, Fock_matrix_mo_beta_complex, (mo_num,mo_num) ] + [ complex*16, Fock_matrix_ao_complex, (ao_num, ao_num) ] + + +src/scf_utils/huckel_complex.irp.f + similar to real version + could just put if (is_periodic) branch in real version? (instead of making separate subroutine) + has soft_touch mo_coef_complex and call to save_mos (see other notes on real/imag parts) + + +src/scf_utils/roothaan_hall_scf_complex.irp.f + subroutine Roothaan_Hall_SCF_complex + similar to real + has soft_touch mo_coef_complex and call to save_mos (see other notes on real/imag parts) + subroutine extrapolate_Fock_matrix_complex + TODO: check variable types? + complex scratch is being used in dsysvx, should be real + +src/scf_utils/scf_density_matrix_ao_complex.irp.f + complex versions of providers + [complex*16, SCF_density_matrix_ao_alpha_complex, (ao_num,ao_num) ] + [ complex*16, SCF_density_matrix_ao_beta_complex, (ao_num,ao_num) ] + [ complex*16, SCF_density_matrix_ao_complex, (ao_num,ao_num) ] + + +