From 65085df0388c72a49d2abdb0a152c3a1c6a46cad Mon Sep 17 00:00:00 2001 From: Thomas Applencourt Date: Wed, 17 Jun 2015 16:16:03 +0200 Subject: [PATCH 01/19] Maj doc --- src/CID_selected/README.rst | 42 ++++++++++++++++++------------------ src/CISD_selected/README.rst | 42 ++++++++++++++++++------------------ 2 files changed, 42 insertions(+), 42 deletions(-) diff --git a/src/CID_selected/README.rst b/src/CID_selected/README.rst index 5a56d57a..ad309857 100644 --- a/src/CID_selected/README.rst +++ b/src/CID_selected/README.rst @@ -33,120 +33,120 @@ Documentation Assume N_int is already provided. -`h_apply_cisd_selection_dipole_moment_z `_ +`h_apply_cisd_selection_dipole_moment_z `_ Calls H_apply on the HF determinant and selects all connected single and double excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script. -`h_apply_cisd_selection_dipole_moment_z_diexc `_ +`h_apply_cisd_selection_dipole_moment_z_diexc `_ Generate all double excitations of key_in using the bit masks of holes and particles. Assume N_int is already provided. -`h_apply_cisd_selection_dipole_moment_z_monoexc `_ +`h_apply_cisd_selection_dipole_moment_z_monoexc `_ Generate all single excitations of key_in using the bit masks of holes and particles. Assume N_int is already provided. -`h_apply_cisd_selection_epstein_nesbet `_ +`h_apply_cisd_selection_epstein_nesbet `_ Calls H_apply on the HF determinant and selects all connected single and double excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script. -`h_apply_cisd_selection_epstein_nesbet_2x2 `_ +`h_apply_cisd_selection_epstein_nesbet_2x2 `_ Calls H_apply on the HF determinant and selects all connected single and double excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script. -`h_apply_cisd_selection_epstein_nesbet_2x2_diexc `_ +`h_apply_cisd_selection_epstein_nesbet_2x2_diexc `_ Generate all double excitations of key_in using the bit masks of holes and particles. Assume N_int is already provided. -`h_apply_cisd_selection_epstein_nesbet_2x2_monoexc `_ +`h_apply_cisd_selection_epstein_nesbet_2x2_monoexc `_ Generate all single excitations of key_in using the bit masks of holes and particles. Assume N_int is already provided. -`h_apply_cisd_selection_epstein_nesbet_diexc `_ +`h_apply_cisd_selection_epstein_nesbet_diexc `_ Generate all double excitations of key_in using the bit masks of holes and particles. Assume N_int is already provided. -`h_apply_cisd_selection_epstein_nesbet_monoexc `_ +`h_apply_cisd_selection_epstein_nesbet_monoexc `_ Generate all single excitations of key_in using the bit masks of holes and particles. Assume N_int is already provided. -`h_apply_cisd_selection_epstein_nesbet_sc2 `_ +`h_apply_cisd_selection_epstein_nesbet_sc2 `_ Calls H_apply on the HF determinant and selects all connected single and double excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script. -`h_apply_cisd_selection_epstein_nesbet_sc2_diexc `_ +`h_apply_cisd_selection_epstein_nesbet_sc2_diexc `_ Generate all double excitations of key_in using the bit masks of holes and particles. Assume N_int is already provided. -`h_apply_cisd_selection_epstein_nesbet_sc2_monoexc `_ +`h_apply_cisd_selection_epstein_nesbet_sc2_monoexc `_ Generate all single excitations of key_in using the bit masks of holes and particles. Assume N_int is already provided. -`h_apply_cisd_selection_epstein_nesbet_sc2_no_projected `_ +`h_apply_cisd_selection_epstein_nesbet_sc2_no_projected `_ Calls H_apply on the HF determinant and selects all connected single and double excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script. -`h_apply_cisd_selection_epstein_nesbet_sc2_no_projected_diexc `_ +`h_apply_cisd_selection_epstein_nesbet_sc2_no_projected_diexc `_ Generate all double excitations of key_in using the bit masks of holes and particles. Assume N_int is already provided. -`h_apply_cisd_selection_epstein_nesbet_sc2_no_projected_monoexc `_ +`h_apply_cisd_selection_epstein_nesbet_sc2_no_projected_monoexc `_ Generate all single excitations of key_in using the bit masks of holes and particles. Assume N_int is already provided. -`h_apply_cisd_selection_epstein_nesbet_sc2_projected `_ +`h_apply_cisd_selection_epstein_nesbet_sc2_projected `_ Calls H_apply on the HF determinant and selects all connected single and double excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script. -`h_apply_cisd_selection_epstein_nesbet_sc2_projected_diexc `_ +`h_apply_cisd_selection_epstein_nesbet_sc2_projected_diexc `_ Generate all double excitations of key_in using the bit masks of holes and particles. Assume N_int is already provided. -`h_apply_cisd_selection_epstein_nesbet_sc2_projected_monoexc `_ +`h_apply_cisd_selection_epstein_nesbet_sc2_projected_monoexc `_ Generate all single excitations of key_in using the bit masks of holes and particles. Assume N_int is already provided. -`h_apply_cisd_selection_h_core `_ +`h_apply_cisd_selection_h_core `_ Calls H_apply on the HF determinant and selects all connected single and double excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script. -`h_apply_cisd_selection_h_core_diexc `_ +`h_apply_cisd_selection_h_core_diexc `_ Generate all double excitations of key_in using the bit masks of holes and particles. Assume N_int is already provided. -`h_apply_cisd_selection_h_core_monoexc `_ +`h_apply_cisd_selection_h_core_monoexc `_ Generate all single excitations of key_in using the bit masks of holes and particles. Assume N_int is already provided. diff --git a/src/CISD_selected/README.rst b/src/CISD_selected/README.rst index 00ef10bb..230df80c 100644 --- a/src/CISD_selected/README.rst +++ b/src/CISD_selected/README.rst @@ -33,120 +33,120 @@ Documentation Assume N_int is already provided. -`h_apply_cisd_selection_dipole_moment_z `_ +`h_apply_cisd_selection_dipole_moment_z `_ Calls H_apply on the HF determinant and selects all connected single and double excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script. -`h_apply_cisd_selection_dipole_moment_z_diexc `_ +`h_apply_cisd_selection_dipole_moment_z_diexc `_ Generate all double excitations of key_in using the bit masks of holes and particles. Assume N_int is already provided. -`h_apply_cisd_selection_dipole_moment_z_monoexc `_ +`h_apply_cisd_selection_dipole_moment_z_monoexc `_ Generate all single excitations of key_in using the bit masks of holes and particles. Assume N_int is already provided. -`h_apply_cisd_selection_epstein_nesbet `_ +`h_apply_cisd_selection_epstein_nesbet `_ Calls H_apply on the HF determinant and selects all connected single and double excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script. -`h_apply_cisd_selection_epstein_nesbet_2x2 `_ +`h_apply_cisd_selection_epstein_nesbet_2x2 `_ Calls H_apply on the HF determinant and selects all connected single and double excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script. -`h_apply_cisd_selection_epstein_nesbet_2x2_diexc `_ +`h_apply_cisd_selection_epstein_nesbet_2x2_diexc `_ Generate all double excitations of key_in using the bit masks of holes and particles. Assume N_int is already provided. -`h_apply_cisd_selection_epstein_nesbet_2x2_monoexc `_ +`h_apply_cisd_selection_epstein_nesbet_2x2_monoexc `_ Generate all single excitations of key_in using the bit masks of holes and particles. Assume N_int is already provided. -`h_apply_cisd_selection_epstein_nesbet_diexc `_ +`h_apply_cisd_selection_epstein_nesbet_diexc `_ Generate all double excitations of key_in using the bit masks of holes and particles. Assume N_int is already provided. -`h_apply_cisd_selection_epstein_nesbet_monoexc `_ +`h_apply_cisd_selection_epstein_nesbet_monoexc `_ Generate all single excitations of key_in using the bit masks of holes and particles. Assume N_int is already provided. -`h_apply_cisd_selection_epstein_nesbet_sc2 `_ +`h_apply_cisd_selection_epstein_nesbet_sc2 `_ Calls H_apply on the HF determinant and selects all connected single and double excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script. -`h_apply_cisd_selection_epstein_nesbet_sc2_diexc `_ +`h_apply_cisd_selection_epstein_nesbet_sc2_diexc `_ Generate all double excitations of key_in using the bit masks of holes and particles. Assume N_int is already provided. -`h_apply_cisd_selection_epstein_nesbet_sc2_monoexc `_ +`h_apply_cisd_selection_epstein_nesbet_sc2_monoexc `_ Generate all single excitations of key_in using the bit masks of holes and particles. Assume N_int is already provided. -`h_apply_cisd_selection_epstein_nesbet_sc2_no_projected `_ +`h_apply_cisd_selection_epstein_nesbet_sc2_no_projected `_ Calls H_apply on the HF determinant and selects all connected single and double excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script. -`h_apply_cisd_selection_epstein_nesbet_sc2_no_projected_diexc `_ +`h_apply_cisd_selection_epstein_nesbet_sc2_no_projected_diexc `_ Generate all double excitations of key_in using the bit masks of holes and particles. Assume N_int is already provided. -`h_apply_cisd_selection_epstein_nesbet_sc2_no_projected_monoexc `_ +`h_apply_cisd_selection_epstein_nesbet_sc2_no_projected_monoexc `_ Generate all single excitations of key_in using the bit masks of holes and particles. Assume N_int is already provided. -`h_apply_cisd_selection_epstein_nesbet_sc2_projected `_ +`h_apply_cisd_selection_epstein_nesbet_sc2_projected `_ Calls H_apply on the HF determinant and selects all connected single and double excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script. -`h_apply_cisd_selection_epstein_nesbet_sc2_projected_diexc `_ +`h_apply_cisd_selection_epstein_nesbet_sc2_projected_diexc `_ Generate all double excitations of key_in using the bit masks of holes and particles. Assume N_int is already provided. -`h_apply_cisd_selection_epstein_nesbet_sc2_projected_monoexc `_ +`h_apply_cisd_selection_epstein_nesbet_sc2_projected_monoexc `_ Generate all single excitations of key_in using the bit masks of holes and particles. Assume N_int is already provided. -`h_apply_cisd_selection_h_core `_ +`h_apply_cisd_selection_h_core `_ Calls H_apply on the HF determinant and selects all connected single and double excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script. -`h_apply_cisd_selection_h_core_diexc `_ +`h_apply_cisd_selection_h_core_diexc `_ Generate all double excitations of key_in using the bit masks of holes and particles. Assume N_int is already provided. -`h_apply_cisd_selection_h_core_monoexc `_ +`h_apply_cisd_selection_h_core_monoexc `_ Generate all single excitations of key_in using the bit masks of holes and particles. Assume N_int is already provided. From a0fada5676046a5190f96175db0971e8f40c86aa Mon Sep 17 00:00:00 2001 From: Thomas Applencourt Date: Wed, 17 Jun 2015 18:16:14 +0200 Subject: [PATCH 02/19] Add suport of symlink in src --- scripts/compilation/qp_create_ninja.py | 24 +- src/Full_CI/.gitignore | 34 -- src/Full_CI/EZFIO.cfg | 10 - src/Full_CI/H_apply.irp.f | 44 --- src/Full_CI/NEEDED_CHILDREN_MODULES | 1 - src/Full_CI/README.rst | 167 --------- src/Full_CI/full_ci.irp.f | 91 ----- src/Full_CI/full_ci_no_skip.irp.f | 91 ----- src/Full_CI/target_pt2.irp.f | 76 ---- src/Full_CI/tree_dependency.png | Bin 102882 -> 0 bytes src/Full_CI/var_pt2_ratio.irp.f | 71 ---- src/Hartree_Fock/.gitignore | 26 -- src/Hartree_Fock/EZFIO.cfg | 22 -- src/Hartree_Fock/Fock_matrix.irp.f | 364 -------------------- src/Hartree_Fock/HF_density_matrix_ao.irp.f | 41 --- src/Hartree_Fock/Huckel_guess.irp.f | 6 - src/Hartree_Fock/NEEDED_CHILDREN_MODULES | 1 - src/Hartree_Fock/README.rst | 152 -------- src/Hartree_Fock/SCF.irp.f | 52 --- src/Hartree_Fock/damping_SCF.irp.f | 127 ------- src/Hartree_Fock/diagonalize_fock.irp.f | 91 ----- src/Hartree_Fock/huckel.irp.f | 34 -- src/Hartree_Fock/tree_dependency.png | Bin 60461 -> 0 bytes 23 files changed, 15 insertions(+), 1510 deletions(-) delete mode 100644 src/Full_CI/.gitignore delete mode 100644 src/Full_CI/EZFIO.cfg delete mode 100644 src/Full_CI/H_apply.irp.f delete mode 100644 src/Full_CI/NEEDED_CHILDREN_MODULES delete mode 100644 src/Full_CI/README.rst delete mode 100644 src/Full_CI/full_ci.irp.f delete mode 100644 src/Full_CI/full_ci_no_skip.irp.f delete mode 100644 src/Full_CI/target_pt2.irp.f delete mode 100644 src/Full_CI/tree_dependency.png delete mode 100644 src/Full_CI/var_pt2_ratio.irp.f delete mode 100644 src/Hartree_Fock/.gitignore delete mode 100644 src/Hartree_Fock/EZFIO.cfg delete mode 100644 src/Hartree_Fock/Fock_matrix.irp.f delete mode 100644 src/Hartree_Fock/HF_density_matrix_ao.irp.f delete mode 100644 src/Hartree_Fock/Huckel_guess.irp.f delete mode 100644 src/Hartree_Fock/NEEDED_CHILDREN_MODULES delete mode 100644 src/Hartree_Fock/README.rst delete mode 100644 src/Hartree_Fock/SCF.irp.f delete mode 100644 src/Hartree_Fock/damping_SCF.irp.f delete mode 100644 src/Hartree_Fock/diagonalize_fock.irp.f delete mode 100644 src/Hartree_Fock/huckel.irp.f delete mode 100644 src/Hartree_Fock/tree_dependency.png diff --git a/scripts/compilation/qp_create_ninja.py b/scripts/compilation/qp_create_ninja.py index 9277b276..ac6f009d 100755 --- a/scripts/compilation/qp_create_ninja.py +++ b/scripts/compilation/qp_create_ninja.py @@ -67,6 +67,10 @@ Sym_link = namedtuple('Sym_link', ['source', 'destination']) module_instance = ModuleHandler() +def real_join(*args): + return os.path.realpath(join(*args)) + + # _ # |_ ._ _. ._ o _. |_ | _ _ # |_ | | \/ \/ (_| | | (_| |_) | (/_ _> @@ -101,13 +105,13 @@ def dict_module_genelogy_path(d_module_genelogy): """ d = dict() for module_rel, l_children_rel in d_module_genelogy.iteritems(): - module_abs = join(QP_ROOT_SRC, module_rel) + module_abs = real_join(QP_ROOT_SRC, module_rel) p = Path(module_abs, module_rel) try: - d[p] = Path(join(QP_ROOT_SRC, l_children_rel), l_children_rel) + d[p] = Path(real_join(QP_ROOT_SRC, l_children_rel), l_children_rel) except: - d[p] = [Path(join(QP_ROOT_SRC, children), children) + d[p] = [Path(real_join(QP_ROOT_SRC, children), children) for children in l_children_rel] return d @@ -123,11 +127,10 @@ def get_l_module_with_ezfio_cfg(): Return all the module who have a EZFIO.cfg """ from os import listdir - from os.path import isfile, join - qp_src = QP_ROOT_SRC + from os.path import isfile - return [join(qp_src, m) for m in listdir(qp_src) - if isfile(join(qp_src, m, "EZFIO.cfg"))] + return [real_join(QP_ROOT_SRC, m) for m in listdir(QP_ROOT_SRC) + if isfile(real_join(QP_ROOT_SRC, m, "EZFIO.cfg"))] def get_l_ezfio_config(): @@ -139,9 +142,12 @@ def get_l_ezfio_config(): cmd = "{0}/*/*.ezfio_config".format(QP_ROOT_SRC) for path_in_module in glob.glob(cmd): - name_lower = os.path.split(path_in_module)[1].lower() + + real_path = real_join(path_in_module) + + name_lower = os.path.split(real_path)[1].lower() path_in_ezfio = join(QP_ROOT_EZFIO, "config", name_lower) - l.append(EZ_config_path(path_in_module, path_in_ezfio)) + l.append(EZ_config_path(real_path, path_in_ezfio)) return l diff --git a/src/Full_CI/.gitignore b/src/Full_CI/.gitignore deleted file mode 100644 index df7eac39..00000000 --- a/src/Full_CI/.gitignore +++ /dev/null @@ -1,34 +0,0 @@ -# -# Do not modify this file. Add your ignored files to the gitignore -# (without the dot at the beginning) file. -# -IRPF90_temp -IRPF90_man -irpf90.make -tags -Makefile.depend -irpf90_entities -build.ninja -.ninja_log -.ninja_deps -Generators_full -Pseudo -Integrals_Monoelec -Bitmask -Integrals_Bielec -AOs -Selectors_full -MOs -Hartree_Fock -Perturbation -Determinants -Electrons -Utils -Properties -Nuclei -MOGuess -Ezfio_files -target_pt2 -full_ci -var_pt2_ratio -full_ci_no_skip diff --git a/src/Full_CI/EZFIO.cfg b/src/Full_CI/EZFIO.cfg deleted file mode 100644 index 37f25eda..00000000 --- a/src/Full_CI/EZFIO.cfg +++ /dev/null @@ -1,10 +0,0 @@ -[energy] -type: double precision -doc: Calculated Selected FCI energy -interface: output - -[energy_pt2] -type: double precision -doc: Calculated FCI energy + PT2 -interface: output - diff --git a/src/Full_CI/H_apply.irp.f b/src/Full_CI/H_apply.irp.f deleted file mode 100644 index a755ad4a..00000000 --- a/src/Full_CI/H_apply.irp.f +++ /dev/null @@ -1,44 +0,0 @@ -use bitmasks -BEGIN_SHELL [ /usr/bin/env python ] -from generate_h_apply import * - -s = H_apply("FCI") -s.set_selection_pt2("epstein_nesbet_2x2") -print s - -s = H_apply("FCI_PT2") -s.set_perturbation("epstein_nesbet_2x2") -print s - -s = H_apply("FCI_no_skip") -s.set_selection_pt2("epstein_nesbet_2x2") -s.unset_skip() -print s - -s = H_apply("FCI_mono") -s.set_selection_pt2("epstein_nesbet_2x2") -s.unset_double_excitations() -print s - - -s = H_apply("select_mono_delta_rho") -s.unset_double_excitations() -s.set_selection_pt2("delta_rho_one_point") -print s - -s = H_apply("pt2_mono_delta_rho") -s.unset_double_excitations() -s.set_perturbation("delta_rho_one_point") -print s - -s = H_apply("select_mono_di_delta_rho") -s.set_selection_pt2("delta_rho_one_point") -print s - -s = H_apply("pt2_mono_di_delta_rho") -s.set_perturbation("delta_rho_one_point") -print s - - -END_SHELL - diff --git a/src/Full_CI/NEEDED_CHILDREN_MODULES b/src/Full_CI/NEEDED_CHILDREN_MODULES deleted file mode 100644 index 04ce9e78..00000000 --- a/src/Full_CI/NEEDED_CHILDREN_MODULES +++ /dev/null @@ -1 +0,0 @@ -Perturbation Selectors_full Generators_full diff --git a/src/Full_CI/README.rst b/src/Full_CI/README.rst deleted file mode 100644 index 396fbcd6..00000000 --- a/src/Full_CI/README.rst +++ /dev/null @@ -1,167 +0,0 @@ -============== -Full_CI Module -============== - -Performs a perturbatively selected Full-CI. - -Documentation -============= - -.. Do not edit this section. It was auto-generated from the -.. by the `update_README.py` script. - -`full_ci `_ - Undocumented - - -`h_apply_fci `_ - Calls H_apply on the HF determinant and selects all connected single and double - excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script. - - -`h_apply_fci_diexc `_ - Generate all double excitations of key_in using the bit masks of holes and - particles. - Assume N_int is already provided. - - -`h_apply_fci_mono `_ - Calls H_apply on the HF determinant and selects all connected single and double - excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script. - - -`h_apply_fci_mono_diexc `_ - Generate all double excitations of key_in using the bit masks of holes and - particles. - Assume N_int is already provided. - - -`h_apply_fci_mono_monoexc `_ - Generate all single excitations of key_in using the bit masks of holes and - particles. - Assume N_int is already provided. - - -`h_apply_fci_monoexc `_ - Generate all single excitations of key_in using the bit masks of holes and - particles. - Assume N_int is already provided. - - -`h_apply_fci_no_skip `_ - Calls H_apply on the HF determinant and selects all connected single and double - excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script. - - -`h_apply_fci_no_skip_diexc `_ - Generate all double excitations of key_in using the bit masks of holes and - particles. - Assume N_int is already provided. - - -`h_apply_fci_no_skip_monoexc `_ - Generate all single excitations of key_in using the bit masks of holes and - particles. - Assume N_int is already provided. - - -`h_apply_fci_pt2 `_ - Calls H_apply on the HF determinant and selects all connected single and double - excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script. - - -`h_apply_fci_pt2_diexc `_ - Generate all double excitations of key_in using the bit masks of holes and - particles. - Assume N_int is already provided. - - -`h_apply_fci_pt2_monoexc `_ - Generate all single excitations of key_in using the bit masks of holes and - particles. - Assume N_int is already provided. - - -`h_apply_pt2_mono_delta_rho `_ - Calls H_apply on the HF determinant and selects all connected single and double - excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script. - - -`h_apply_pt2_mono_delta_rho_diexc `_ - Generate all double excitations of key_in using the bit masks of holes and - particles. - Assume N_int is already provided. - - -`h_apply_pt2_mono_delta_rho_monoexc `_ - Generate all single excitations of key_in using the bit masks of holes and - particles. - Assume N_int is already provided. - - -`h_apply_pt2_mono_di_delta_rho `_ - Calls H_apply on the HF determinant and selects all connected single and double - excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script. - - -`h_apply_pt2_mono_di_delta_rho_diexc `_ - Generate all double excitations of key_in using the bit masks of holes and - particles. - Assume N_int is already provided. - - -`h_apply_pt2_mono_di_delta_rho_monoexc `_ - Generate all single excitations of key_in using the bit masks of holes and - particles. - Assume N_int is already provided. - - -`h_apply_select_mono_delta_rho `_ - Calls H_apply on the HF determinant and selects all connected single and double - excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script. - - -`h_apply_select_mono_delta_rho_diexc `_ - Generate all double excitations of key_in using the bit masks of holes and - particles. - Assume N_int is already provided. - - -`h_apply_select_mono_delta_rho_monoexc `_ - Generate all single excitations of key_in using the bit masks of holes and - particles. - Assume N_int is already provided. - - -`h_apply_select_mono_di_delta_rho `_ - Calls H_apply on the HF determinant and selects all connected single and double - excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script. - - -`h_apply_select_mono_di_delta_rho_diexc `_ - Generate all double excitations of key_in using the bit masks of holes and - particles. - Assume N_int is already provided. - - -`h_apply_select_mono_di_delta_rho_monoexc `_ - Generate all single excitations of key_in using the bit masks of holes and - particles. - Assume N_int is already provided. - - -`var_pt2_ratio_run `_ - Undocumented - -Needed Modules -============== - -.. Do not edit this section. It was auto-generated from the -.. by the `update_README.py` script. - -.. image:: tree_dependency.png - -* `Perturbation `_ -* `Selectors_full `_ -* `Generators_full `_ - diff --git a/src/Full_CI/full_ci.irp.f b/src/Full_CI/full_ci.irp.f deleted file mode 100644 index e2a9700e..00000000 --- a/src/Full_CI/full_ci.irp.f +++ /dev/null @@ -1,91 +0,0 @@ -program full_ci - implicit none - integer :: i,k - - - double precision, allocatable :: pt2(:), norm_pert(:), H_pert_diag(:) - integer :: N_st, degree - N_st = N_states - allocate (pt2(N_st), norm_pert(N_st),H_pert_diag(N_st)) - character*(64) :: perturbation - - pt2 = 1.d0 - diag_algorithm = "Lapack" - if (N_det > N_det_max) then - call diagonalize_CI - call save_wavefunction - psi_det = psi_det_sorted - psi_coef = psi_coef_sorted - N_det = N_det_max - soft_touch N_det psi_det psi_coef - call diagonalize_CI - call save_wavefunction - print *, 'N_det = ', N_det - print *, 'N_states = ', N_states - print *, 'PT2 = ', pt2 - print *, 'E = ', CI_energy - print *, 'E+PT2 = ', CI_energy+pt2 - print *, '-----' - endif - double precision :: i_H_psi_array(N_states),diag_H_mat_elem,h,i_O1_psi_array(N_states) - if(read_wf)then - call i_H_psi(psi_det(1,1,N_det),psi_det,psi_coef,N_int,N_det,psi_det_size,N_states,i_H_psi_array) - h = diag_H_mat_elem(psi_det(1,1,N_det),N_int) - selection_criterion = dabs(psi_coef(N_det,1) * (i_H_psi_array(1) - h * psi_coef(N_det,1))) * 0.1d0 - soft_touch selection_criterion - endif - - - integer :: n_det_before - print*,'Beginning the selection ...' - do while (N_det < N_det_max.and.maxval(abs(pt2(1:N_st))) > pt2_max) - n_det_before = N_det - call H_apply_FCI(pt2, norm_pert, H_pert_diag, N_st) - - PROVIDE psi_coef - PROVIDE psi_det - PROVIDE psi_det_sorted - - if (N_det > N_det_max) then - psi_det = psi_det_sorted - psi_coef = psi_coef_sorted - N_det = N_det_max - soft_touch N_det psi_det psi_coef - endif - call diagonalize_CI - call save_wavefunction - if(n_det_before == N_det)then - selection_criterion = selection_criterion * 0.5d0 - endif - print *, 'N_det = ', N_det - print *, 'N_states = ', N_states - print *, 'PT2 = ', pt2 - print *, 'E = ', CI_energy - print *, 'E+PT2 = ', CI_energy+pt2 - print *, '-----' - call ezfio_set_full_ci_energy(CI_energy) - if (abort_all) then - exit - endif - enddo - N_det = min(N_det_max,N_det) - touch N_det psi_det psi_coef - call diagonalize_CI - if(do_pt2_end)then - print*,'Last iteration only to compute the PT2' - threshold_selectors = 1.d0 - threshold_generators = 0.999d0 - call H_apply_FCI_PT2(pt2, norm_pert, H_pert_diag, N_st) - - print *, 'Final step' - print *, 'N_det = ', N_det - print *, 'N_states = ', N_states - print *, 'PT2 = ', pt2 - print *, 'E = ', CI_energy - print *, 'E+PT2 = ', CI_energy+pt2 - print *, '-----' - call ezfio_set_full_ci_energy_pt2(CI_energy+pt2) - endif - call save_wavefunction - deallocate(pt2,norm_pert) -end diff --git a/src/Full_CI/full_ci_no_skip.irp.f b/src/Full_CI/full_ci_no_skip.irp.f deleted file mode 100644 index 73958bf9..00000000 --- a/src/Full_CI/full_ci_no_skip.irp.f +++ /dev/null @@ -1,91 +0,0 @@ -program full_ci - implicit none - integer :: i,k - - - double precision, allocatable :: pt2(:), norm_pert(:), H_pert_diag(:) - integer :: N_st, degree - N_st = N_states - allocate (pt2(N_st), norm_pert(N_st),H_pert_diag(N_st)) - character*(64) :: perturbation - - pt2 = 1.d0 - diag_algorithm = "Lapack" - if (N_det > N_det_max) then - call diagonalize_CI - call save_wavefunction - psi_det = psi_det_sorted - psi_coef = psi_coef_sorted - N_det = N_det_max - soft_touch N_det psi_det psi_coef - call diagonalize_CI - call save_wavefunction - print *, 'N_det = ', N_det - print *, 'N_states = ', N_states - print *, 'PT2 = ', pt2 - print *, 'E = ', CI_energy - print *, 'E+PT2 = ', CI_energy+pt2 - print *, '-----' - endif - double precision :: i_H_psi_array(N_states),diag_H_mat_elem,h,i_O1_psi_array(N_states) - if(read_wf)then - call i_H_psi(psi_det(1,1,N_det),psi_det,psi_coef,N_int,N_det,psi_det_size,N_states,i_H_psi_array) - h = diag_H_mat_elem(psi_det(1,1,N_det),N_int) - selection_criterion = dabs(psi_coef(N_det,1) * (i_H_psi_array(1) - h * psi_coef(N_det,1))) * 0.1d0 - soft_touch selection_criterion - endif - - - integer :: n_det_before - print*,'Beginning the selection ...' - do while (N_det < N_det_max.and.maxval(abs(pt2(1:N_st))) > pt2_max) - n_det_before = N_det - call H_apply_FCI_no_skip(pt2, norm_pert, H_pert_diag, N_st) - - PROVIDE psi_coef - PROVIDE psi_det - PROVIDE psi_det_sorted - - if (N_det > N_det_max) then - psi_det = psi_det_sorted - psi_coef = psi_coef_sorted - N_det = N_det_max - soft_touch N_det psi_det psi_coef - endif - call diagonalize_CI - call save_wavefunction - if(n_det_before == N_det)then - selection_criterion = selection_criterion * 0.5d0 - endif - print *, 'N_det = ', N_det - print *, 'N_states = ', N_states - print *, 'PT2 = ', pt2 - print *, 'E = ', CI_energy - print *, 'E+PT2 = ', CI_energy+pt2 - print *, '-----' - call ezfio_set_full_ci_energy(CI_energy) - if (abort_all) then - exit - endif - enddo - N_det = min(N_det_max,N_det) - touch N_det psi_det psi_coef - call diagonalize_CI - if(do_pt2_end)then - print*,'Last iteration only to compute the PT2' - threshold_selectors = 1.d0 - threshold_generators = 0.999d0 - call H_apply_FCI_PT2(pt2, norm_pert, H_pert_diag, N_st) - - print *, 'Final step' - print *, 'N_det = ', N_det - print *, 'N_states = ', N_states - print *, 'PT2 = ', pt2 - print *, 'E = ', CI_energy - print *, 'E+PT2 = ', CI_energy+pt2 - print *, '-----' - call ezfio_set_full_ci_energy_pt2(CI_energy+pt2) - endif - call save_wavefunction - deallocate(pt2,norm_pert) -end diff --git a/src/Full_CI/target_pt2.irp.f b/src/Full_CI/target_pt2.irp.f deleted file mode 100644 index c0420e20..00000000 --- a/src/Full_CI/target_pt2.irp.f +++ /dev/null @@ -1,76 +0,0 @@ -program var_pt2_ratio_run - implicit none - integer :: i,k - - - double precision, allocatable :: pt2(:), norm_pert(:), H_pert_diag(:) - integer :: N_st, degree - N_st = N_states - allocate (pt2(N_st), norm_pert(N_st),H_pert_diag(N_st)) - character*(64) :: perturbation - - double precision, allocatable :: psi_det_save(:,:,:), psi_coef_save(:,:) - - double precision :: E_fci, E_var, ratio, E_ref - integer :: Nmin, Nmax - - pt2 = -(pt2_max+1.d0) - diag_algorithm = "Lapack" - - ratio = 0.d0 - Nmin=1 - do while (dabs(pt2(1)) > pt2_max) - call H_apply_FCI(pt2, norm_pert, H_pert_diag, N_st) - psi_det = psi_det_sorted - psi_coef = psi_coef_sorted - soft_touch N_det psi_det psi_coef - call diagonalize_CI - ratio = (CI_energy(1) - HF_energy) / (CI_energy(1)+pt2(1) - HF_energy) - enddo - - threshold_selectors = 1.d0 - threshold_generators = 0.999d0 - call diagonalize_CI - call H_apply_FCI_PT2(pt2, norm_pert, H_pert_diag, N_st) - E_ref = CI_energy(1) + pt2(1) - threshold_selectors = 0.99d0 - threshold_generators = 0.98d0 - - var_pt2_ratio = (E_ref + pt2_max - HF_energy) / (E_ref - HF_energy) - TOUCH var_pt2_ratio - - Nmax=max(10000,3*N_det) - Nmin=1 - do while (Nmax-Nmin > 1) - ratio = (CI_energy(1) - HF_energy) / (E_ref - HF_energy) - - if (ratio < var_pt2_ratio) then - Nmin = N_det -! Nmax = max(Nmax,Nmin+10) - ! Select new determinants - call H_apply_FCI(pt2, norm_pert, H_pert_diag, N_st) - N_det = min(N_det,Nmax) - else - Nmax = N_det - N_det = Nmin + (Nmax-Nmin)/2 - endif - - psi_det = psi_det_sorted - psi_coef = psi_coef_sorted - soft_touch N_det psi_det psi_coef - call diagonalize_CI - call save_wavefunction - print *, 'Det min, Det max: ', Nmin, Nmax - print *, 'Ratio : ', ratio, ' ~ ', var_pt2_ratio - print *, 'HF_energy = ', HF_energy - print *, 'Est FCI = ', E_ref - print *, 'PT2 = ', pt2(1) - print *, 'N_det = ', N_det - print *, 'E = ', CI_energy(1) - call ezfio_set_full_ci_energy(CI_energy) - if (abort_all) then - exit - endif - enddo - deallocate(pt2,norm_pert) -end diff --git a/src/Full_CI/tree_dependency.png b/src/Full_CI/tree_dependency.png deleted file mode 100644 index 7696fea7c3bf6c34f7793bc5d4c2063139286c1b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 102882 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 1) - ratio = (CI_energy(1) - HF_energy) / (E_ref - HF_energy) - - if (ratio < var_pt2_ratio) then - Nmin = N_det - Nmax = max(Nmax,Nmin+10) - ! Select new determinants - call H_apply_FCI(pt2, norm_pert, H_pert_diag, N_st) - else - Nmax = N_det - N_det = Nmin + (Nmax-Nmin)/2 - endif - - psi_det = psi_det_sorted - psi_coef = psi_coef_sorted - soft_touch N_det psi_det psi_coef - call diagonalize_CI - call save_wavefunction - print *, 'Det min, Det max: ', Nmin, Nmax - print *, 'Ratio : ', ratio, ' ~ ', var_pt2_ratio - print *, 'HF_energy = ', HF_energy - print *, 'Est FCI = ', E_ref - print *, 'N_det = ', N_det - print *, 'E = ', CI_energy(1) - call ezfio_set_full_ci_energy(CI_energy) - if (abort_all) then - exit - endif - enddo - deallocate(pt2,norm_pert) -end diff --git a/src/Hartree_Fock/.gitignore b/src/Hartree_Fock/.gitignore deleted file mode 100644 index 0197ab71..00000000 --- a/src/Hartree_Fock/.gitignore +++ /dev/null @@ -1,26 +0,0 @@ -# -# Do not modify this file. Add your ignored files to the gitignore -# (without the dot at the beginning) file. -# -IRPF90_temp -IRPF90_man -irpf90.make -tags -Makefile.depend -irpf90_entities -build.ninja -.ninja_log -.ninja_deps -Pseudo -Integrals_Monoelec -Bitmask -Integrals_Bielec -AOs -MOs -Electrons -Utils -Nuclei -MOGuess -Ezfio_files -Huckel_guess -SCF diff --git a/src/Hartree_Fock/EZFIO.cfg b/src/Hartree_Fock/EZFIO.cfg deleted file mode 100644 index e2b0ea5a..00000000 --- a/src/Hartree_Fock/EZFIO.cfg +++ /dev/null @@ -1,22 +0,0 @@ -[thresh_scf] -type: Threshold -doc: Threshold on the convergence of the Hartree Fock energy -interface: input -default: 1.e-10 - -[n_it_scf_max] -type: Strictly_positive_int -doc: Maximum number of SCF iterations -interface: input -default: 200 - -[mo_guess_type] -type: MO_guess -doc: Initial MO guess. Can be [ Huckel | HCore ] -interface: input -default: Huckel - -[energy] -type: double precision -doc: Calculated HF energy -interface: output diff --git a/src/Hartree_Fock/Fock_matrix.irp.f b/src/Hartree_Fock/Fock_matrix.irp.f deleted file mode 100644 index 7dd349b1..00000000 --- a/src/Hartree_Fock/Fock_matrix.irp.f +++ /dev/null @@ -1,364 +0,0 @@ - BEGIN_PROVIDER [ double precision, Fock_matrix_mo, (mo_tot_num_align,mo_tot_num) ] -&BEGIN_PROVIDER [ double precision, Fock_matrix_diag_mo, (mo_tot_num)] - implicit none - BEGIN_DOC - ! Fock matrix on the MO basis. - ! For open shells, the ROHF Fock Matrix is - ! - ! | F-K | F + K/2 | F | - ! |---------------------------------| - ! | F + K/2 | F | F - K/2 | - ! |---------------------------------| - ! | F | F - K/2 | F + K | - ! - ! F = 1/2 (Fa + Fb) - ! - ! K = Fb - Fa - ! - END_DOC - integer :: i,j,n - if (elec_alpha_num == elec_beta_num) then - Fock_matrix_mo = Fock_matrix_alpha_mo - else - - do j=1,elec_beta_num - ! F-K - do i=1,elec_beta_num - Fock_matrix_mo(i,j) = 0.5d0*(Fock_matrix_alpha_mo(i,j)+Fock_matrix_beta_mo(i,j))& - - (Fock_matrix_beta_mo(i,j) - Fock_matrix_alpha_mo(i,j)) - enddo - ! F+K/2 - do i=elec_beta_num+1,elec_alpha_num - Fock_matrix_mo(i,j) = 0.5d0*(Fock_matrix_alpha_mo(i,j)+Fock_matrix_beta_mo(i,j))& - + 0.5d0*(Fock_matrix_beta_mo(i,j) - Fock_matrix_alpha_mo(i,j)) - enddo - ! F - do i=elec_alpha_num+1, mo_tot_num - Fock_matrix_mo(i,j) = 0.5d0*(Fock_matrix_alpha_mo(i,j)+Fock_matrix_beta_mo(i,j)) - enddo - enddo - - do j=elec_beta_num+1,elec_alpha_num - ! F+K/2 - do i=1,elec_beta_num - Fock_matrix_mo(i,j) = 0.5d0*(Fock_matrix_alpha_mo(i,j)+Fock_matrix_beta_mo(i,j))& - + 0.5d0*(Fock_matrix_beta_mo(i,j) - Fock_matrix_alpha_mo(i,j)) - enddo - ! F - do i=elec_beta_num+1,elec_alpha_num - Fock_matrix_mo(i,j) = 0.5d0*(Fock_matrix_alpha_mo(i,j)+Fock_matrix_beta_mo(i,j)) - enddo - ! F-K/2 - do i=elec_alpha_num+1, mo_tot_num - Fock_matrix_mo(i,j) = 0.5d0*(Fock_matrix_alpha_mo(i,j)+Fock_matrix_beta_mo(i,j))& - - 0.5d0*(Fock_matrix_beta_mo(i,j) - Fock_matrix_alpha_mo(i,j)) - enddo - enddo - - do j=elec_alpha_num+1, mo_tot_num - ! F - do i=1,elec_beta_num - Fock_matrix_mo(i,j) = 0.5d0*(Fock_matrix_alpha_mo(i,j)+Fock_matrix_beta_mo(i,j)) - enddo - ! F-K/2 - do i=elec_beta_num+1,elec_alpha_num - Fock_matrix_mo(i,j) = 0.5d0*(Fock_matrix_alpha_mo(i,j)+Fock_matrix_beta_mo(i,j))& - - 0.5d0*(Fock_matrix_beta_mo(i,j) - Fock_matrix_alpha_mo(i,j)) - enddo - ! F+K - do i=elec_alpha_num+1,mo_tot_num - Fock_matrix_mo(i,j) = 0.5d0*(Fock_matrix_alpha_mo(i,j)+Fock_matrix_beta_mo(i,j)) & - + (Fock_matrix_beta_mo(i,j) - Fock_matrix_alpha_mo(i,j)) - enddo - enddo - - endif - do i = 1, mo_tot_num - Fock_matrix_diag_mo(i) = Fock_matrix_mo(i,i) - enddo -END_PROVIDER - - - - BEGIN_PROVIDER [ double precision, Fock_matrix_alpha_ao, (ao_num_align, ao_num) ] -&BEGIN_PROVIDER [ double precision, Fock_matrix_beta_ao, (ao_num_align, ao_num) ] - implicit none - BEGIN_DOC - ! Alpha Fock matrix in AO basis set - END_DOC - - integer :: i,j - do j=1,ao_num - !DIR$ VECTOR ALIGNED - do i=1,ao_num - Fock_matrix_alpha_ao(i,j) = ao_mono_elec_integral(i,j) + ao_bi_elec_integral_alpha(i,j) - Fock_matrix_beta_ao (i,j) = ao_mono_elec_integral(i,j) + ao_bi_elec_integral_beta (i,j) - enddo - enddo - -END_PROVIDER - - - BEGIN_PROVIDER [ double precision, ao_bi_elec_integral_alpha, (ao_num_align, ao_num) ] -&BEGIN_PROVIDER [ double precision, ao_bi_elec_integral_beta , (ao_num_align, ao_num) ] - use map_module - implicit none - BEGIN_DOC - ! Alpha Fock matrix in AO basis set - END_DOC - - integer :: i,j,k,l,k1,r,s - integer*8 :: p,q - double precision :: integral - double precision :: ao_bielec_integral - if (do_direct_integrals) then - - ao_bi_elec_integral_alpha = 0.d0 - ao_bi_elec_integral_beta = 0.d0 - !$OMP PARALLEL DEFAULT(NONE) & - !$OMP PRIVATE(i,j,l,k1,k,integral,ii,jj,kk,ll,i8,keys,values,p,q,r,s)& - !$OMP SHARED(ao_num,HF_density_matrix_ao_alpha,HF_density_matrix_ao_beta,& - !$OMP ao_integrals_map,ao_integrals_threshold, ao_bielec_integral_schwartz, & - !$OMP ao_overlap_abs) & - !$OMP REDUCTION(+:ao_bi_elec_integral_alpha,ao_bi_elec_integral_beta) - - allocate(keys(1), values(1)) - - q = ao_num*ao_num*ao_num*ao_num - !$OMP DO SCHEDULE(dynamic) - do p=1_8,q - call bielec_integrals_index_reverse(kk,ii,ll,jj,p) - if ( (kk(1)>ao_num).or. & - (ii(1)>ao_num).or. & - (jj(1)>ao_num).or. & - (ll(1)>ao_num) ) then - cycle - endif - k = kk(1) - i = ii(1) - l = ll(1) - j = jj(1) - - if (ao_overlap_abs(k,l)*ao_overlap_abs(i,j) & - < ao_integrals_threshold) then - cycle - endif - if (ao_bielec_integral_schwartz(k,l)*ao_bielec_integral_schwartz(i,j) & - < ao_integrals_threshold) then - cycle - endif - values(1) = ao_bielec_integral(k,l,i,j) - if (abs(values(1)) < ao_integrals_threshold) then - cycle - endif - do k2=1,8 - if (kk(k2)==0) then - cycle - endif - i = ii(k2) - j = jj(k2) - k = kk(k2) - l = ll(k2) - integral = (HF_density_matrix_ao_alpha(k,l)+HF_density_matrix_ao_beta(k,l)) * values(1) - ao_bi_elec_integral_alpha(i,j) += integral - ao_bi_elec_integral_beta (i,j) += integral - integral = values(1) - ao_bi_elec_integral_alpha(l,j) -= HF_density_matrix_ao_alpha(k,i) * integral - ao_bi_elec_integral_beta (l,j) -= HF_density_matrix_ao_beta (k,i) * integral - enddo - enddo - !$OMP END DO - deallocate(keys,values) - !$OMP END PARALLEL - else - PROVIDE ao_bielec_integrals_in_map - - integer(omp_lock_kind) :: lck(ao_num) - integer*8 :: i8 - integer :: ii(8), jj(8), kk(8), ll(8), k2 - integer(cache_map_size_kind) :: n_elements_max, n_elements - integer(key_kind), allocatable :: keys(:) - double precision, allocatable :: values(:) - - ao_bi_elec_integral_alpha = 0.d0 - ao_bi_elec_integral_beta = 0.d0 - !$OMP PARALLEL DEFAULT(NONE) & - !$OMP PRIVATE(i,j,l,k1,k,integral,ii,jj,kk,ll,i8,keys,values,n_elements_max,n_elements)& - !$OMP SHARED(ao_num,HF_density_matrix_ao_alpha,HF_density_matrix_ao_beta,& - !$OMP ao_integrals_map) & - !$OMP REDUCTION(+:ao_bi_elec_integral_alpha,ao_bi_elec_integral_beta) - - call get_cache_map_n_elements_max(ao_integrals_map,n_elements_max) - allocate(keys(n_elements_max), values(n_elements_max)) - - !$OMP DO SCHEDULE(dynamic) - do i8=0_8,ao_integrals_map%map_size - n_elements = n_elements_max - call get_cache_map(ao_integrals_map,i8,keys,values,n_elements) - do k1=1,n_elements - call bielec_integrals_index_reverse(kk,ii,ll,jj,keys(k1)) - - do k2=1,8 - if (kk(k2)==0) then - cycle - endif - i = ii(k2) - j = jj(k2) - k = kk(k2) - l = ll(k2) - integral = (HF_density_matrix_ao_alpha(k,l)+HF_density_matrix_ao_beta(k,l)) * values(k1) - ao_bi_elec_integral_alpha(i,j) += integral - ao_bi_elec_integral_beta (i,j) += integral - integral = values(k1) - ao_bi_elec_integral_alpha(l,j) -= HF_density_matrix_ao_alpha(k,i) * integral - ao_bi_elec_integral_beta (l,j) -= HF_density_matrix_ao_beta (k,i) * integral - enddo - enddo - enddo - !$OMP END DO - deallocate(keys,values) - !$OMP END PARALLEL - - endif - -END_PROVIDER - - - - - - -BEGIN_PROVIDER [ double precision, Fock_matrix_alpha_mo, (mo_tot_num_align,mo_tot_num) ] - implicit none - BEGIN_DOC - ! Fock matrix on the MO basis - END_DOC - double precision, allocatable :: T(:,:) - allocate ( T(ao_num_align,mo_tot_num) ) - !DIR$ ATTRIBUTES ALIGN : $IRP_ALIGN :: T - call dgemm('N','N', ao_num, mo_tot_num, ao_num, & - 1.d0, Fock_matrix_alpha_ao,size(Fock_matrix_alpha_ao,1), & - mo_coef, size(mo_coef,1), & - 0.d0, T, ao_num_align) - call dgemm('T','N', mo_tot_num, mo_tot_num, ao_num, & - 1.d0, mo_coef,size(mo_coef,1), & - T, size(T,1), & - 0.d0, Fock_matrix_alpha_mo, mo_tot_num_align) - deallocate(T) -END_PROVIDER - - -BEGIN_PROVIDER [ double precision, Fock_matrix_beta_mo, (mo_tot_num_align,mo_tot_num) ] - implicit none - BEGIN_DOC - ! Fock matrix on the MO basis - END_DOC - double precision, allocatable :: T(:,:) - allocate ( T(ao_num_align,mo_tot_num) ) - !DIR$ ATTRIBUTES ALIGN : $IRP_ALIGN :: T - call dgemm('N','N', ao_num, mo_tot_num, ao_num, & - 1.d0, Fock_matrix_beta_ao,size(Fock_matrix_beta_ao,1), & - mo_coef, size(mo_coef,1), & - 0.d0, T, ao_num_align) - call dgemm('T','N', mo_tot_num, mo_tot_num, ao_num, & - 1.d0, mo_coef,size(mo_coef,1), & - T, size(T,1), & - 0.d0, Fock_matrix_beta_mo, mo_tot_num_align) - deallocate(T) -END_PROVIDER - -BEGIN_PROVIDER [ double precision, HF_energy ] - implicit none - BEGIN_DOC - ! Hartree-Fock energy - END_DOC - HF_energy = nuclear_repulsion - - integer :: i,j - do j=1,ao_num - do i=1,ao_num - HF_energy += 0.5d0 * ( & - (ao_mono_elec_integral(i,j) + Fock_matrix_alpha_ao(i,j) ) * HF_density_matrix_ao_alpha(i,j) +& - (ao_mono_elec_integral(i,j) + Fock_matrix_beta_ao (i,j) ) * HF_density_matrix_ao_beta (i,j) ) - enddo - enddo - -END_PROVIDER - - -BEGIN_PROVIDER [ double precision, Fock_matrix_ao, (ao_num_align, ao_num) ] - implicit none - BEGIN_DOC - ! Fock matrix in AO basis set - END_DOC - - if (elec_alpha_num == elec_beta_num) then - integer :: i,j - do j=1,ao_num - !DIR$ VECTOR ALIGNED - do i=1,ao_num_align - Fock_matrix_ao(i,j) = Fock_matrix_alpha_ao(i,j) - enddo - enddo - else - double precision, allocatable :: T(:,:), M(:,:) - ! F_ao = S C F_mo C^t S - allocate (T(ao_num_align,ao_num),M(ao_num_align,ao_num)) - call dgemm('N','N', ao_num,ao_num,ao_num, 1.d0, & - ao_overlap, size(ao_overlap,1), & - mo_coef, size(mo_coef,1), & - 0.d0, & - M, size(M,1)) - call dgemm('N','N', ao_num,mo_tot_num,mo_tot_num, 1.d0, & - M, size(M,1), & - Fock_matrix_mo, size(Fock_matrix_mo,1), & - 0.d0, & - T, size(T,1)) - call dgemm('N','T', mo_tot_num,ao_num,mo_tot_num, 1.d0, & - T, size(T,1), & - mo_coef, size(mo_coef,1), & - 0.d0, & - M, size(M,1)) - call dgemm('N','N', ao_num,ao_num,ao_num, 1.d0, & - M, size(M,1), & - ao_overlap, size(ao_overlap,1), & - 0.d0, & - Fock_matrix_ao, size(Fock_matrix_ao,1)) - - deallocate(T) - endif -END_PROVIDER - -subroutine Fock_mo_to_ao(FMO,LDFMO,FAO,LDFAO) - implicit none - integer, intent(in) :: LDFMO ! size(FMO,1) - integer, intent(in) :: LDFAO ! size(FAO,1) - double precision, intent(in) :: FMO(LDFMO,*) - double precision, intent(out) :: FAO(LDFAO,*) - - double precision, allocatable :: T(:,:), M(:,:) - ! F_ao = S C F_mo C^t S - allocate (T(ao_num_align,ao_num),M(ao_num_align,ao_num)) - call dgemm('N','N', ao_num,ao_num,ao_num, 1.d0, & - ao_overlap, size(ao_overlap,1), & - mo_coef, size(mo_coef,1), & - 0.d0, & - M, size(M,1)) - call dgemm('N','N', ao_num,mo_tot_num,mo_tot_num, 1.d0, & - M, size(M,1), & - FMO, size(FMO,1), & - 0.d0, & - T, size(T,1)) - call dgemm('N','T', mo_tot_num,ao_num,mo_tot_num, 1.d0, & - T, size(T,1), & - mo_coef, size(mo_coef,1), & - 0.d0, & - M, size(M,1)) - call dgemm('N','N', ao_num,ao_num,ao_num, 1.d0, & - M, size(M,1), & - ao_overlap, size(ao_overlap,1), & - 0.d0, & - FAO, size(FAO,1)) - deallocate(T,M) -end - diff --git a/src/Hartree_Fock/HF_density_matrix_ao.irp.f b/src/Hartree_Fock/HF_density_matrix_ao.irp.f deleted file mode 100644 index e8585f59..00000000 --- a/src/Hartree_Fock/HF_density_matrix_ao.irp.f +++ /dev/null @@ -1,41 +0,0 @@ -BEGIN_PROVIDER [ double precision, HF_density_matrix_ao_alpha, (ao_num_align,ao_num) ] - implicit none - BEGIN_DOC - ! S^-1 x Alpha density matrix in the AO basis x S^-1 - END_DOC - - call dgemm('N','T',ao_num,ao_num,elec_alpha_num,1.d0, & - mo_coef, size(mo_coef,1), & - mo_coef, size(mo_coef,1), 0.d0, & - HF_density_matrix_ao_alpha, size(HF_density_matrix_ao_alpha,1)) - -END_PROVIDER - -BEGIN_PROVIDER [ double precision, HF_density_matrix_ao_beta, (ao_num_align,ao_num) ] - implicit none - BEGIN_DOC - ! S^-1 Beta density matrix in the AO basis x S^-1 - END_DOC - - call dgemm('N','T',ao_num,ao_num,elec_beta_num,1.d0, & - mo_coef, size(mo_coef,1), & - mo_coef, size(mo_coef,1), 0.d0, & - HF_density_matrix_ao_beta, size(HF_density_matrix_ao_beta,1)) - -END_PROVIDER - -BEGIN_PROVIDER [ double precision, HF_density_matrix_ao, (ao_num_align,ao_num) ] - implicit none - BEGIN_DOC - ! S^-1 Density matrix in the AO basis S^-1 - END_DOC - ASSERT (size(HF_density_matrix_ao,1) == size(HF_density_matrix_ao_alpha,1)) - if (elec_alpha_num== elec_beta_num) then - HF_density_matrix_ao = HF_density_matrix_ao_alpha + HF_density_matrix_ao_alpha - else - ASSERT (size(HF_density_matrix_ao,1) == size(HF_density_matrix_ao_beta ,1)) - HF_density_matrix_ao = HF_density_matrix_ao_alpha + HF_density_matrix_ao_beta - endif - -END_PROVIDER - diff --git a/src/Hartree_Fock/Huckel_guess.irp.f b/src/Hartree_Fock/Huckel_guess.irp.f deleted file mode 100644 index ed264005..00000000 --- a/src/Hartree_Fock/Huckel_guess.irp.f +++ /dev/null @@ -1,6 +0,0 @@ -program guess - implicit none - character*(64) :: label - call huckel_guess - -end diff --git a/src/Hartree_Fock/NEEDED_CHILDREN_MODULES b/src/Hartree_Fock/NEEDED_CHILDREN_MODULES deleted file mode 100644 index 784cb0fb..00000000 --- a/src/Hartree_Fock/NEEDED_CHILDREN_MODULES +++ /dev/null @@ -1 +0,0 @@ -Integrals_Bielec MOGuess diff --git a/src/Hartree_Fock/README.rst b/src/Hartree_Fock/README.rst deleted file mode 100644 index 4dacf17c..00000000 --- a/src/Hartree_Fock/README.rst +++ /dev/null @@ -1,152 +0,0 @@ -=================== -Hartree-Fock Module -=================== - -From the 140 molecules of the G2 set, only LiO, ONa don't converge well. - -Needed Modules -============== - -.. Do not edit this section. It was auto-generated from the -.. by the `update_README.py` script. - -.. image:: tree_dependency.png - -* `Integrals_Bielec `_ -* `MOGuess `_ - -Documentation -============= - -.. Do not edit this section. It was auto-generated from the -.. by the `update_README.py` script. - -`ao_bi_elec_integral_alpha `_ - Alpha Fock matrix in AO basis set - - -`ao_bi_elec_integral_beta `_ - Alpha Fock matrix in AO basis set - - -`create_guess `_ - Create an MO guess if no MOs are present in the EZFIO directory - - -`damping_scf `_ - Undocumented - - -`diagonal_fock_matrix_mo `_ - Diagonal Fock matrix in the MO basis - - -`diagonal_fock_matrix_mo_sum `_ - diagonal element of the fock matrix calculated as the sum over all the interactions - with all the electrons in the RHF determinant - diagonal_Fock_matrix_mo_sum(i) = sum_{j=1, N_elec} 2 J_ij -K_ij - - -`eigenvectors_fock_matrix_mo `_ - Diagonal Fock matrix in the MO basis - - -`fock_matrix_alpha_ao `_ - Alpha Fock matrix in AO basis set - - -`fock_matrix_alpha_mo `_ - Fock matrix on the MO basis - - -`fock_matrix_ao `_ - Fock matrix in AO basis set - - -`fock_matrix_beta_ao `_ - Alpha Fock matrix in AO basis set - - -`fock_matrix_beta_mo `_ - Fock matrix on the MO basis - - -`fock_matrix_diag_mo `_ - Fock matrix on the MO basis. - For open shells, the ROHF Fock Matrix is - .br - | F-K | F + K/2 | F | - |---------------------------------| - | F + K/2 | F | F - K/2 | - |---------------------------------| - | F | F - K/2 | F + K | - .br - F = 1/2 (Fa + Fb) - .br - K = Fb - Fa - .br - - -`fock_matrix_mo `_ - Fock matrix on the MO basis. - For open shells, the ROHF Fock Matrix is - .br - | F-K | F + K/2 | F | - |---------------------------------| - | F + K/2 | F | F - K/2 | - |---------------------------------| - | F | F - K/2 | F + K | - .br - F = 1/2 (Fa + Fb) - .br - K = Fb - Fa - .br - - -`fock_mo_to_ao `_ - Undocumented - - -`guess `_ - Undocumented - - -`hf_density_matrix_ao `_ - S^-1 Density matrix in the AO basis S^-1 - - -`hf_density_matrix_ao_alpha `_ - S^-1 x Alpha density matrix in the AO basis x S^-1 - - -`hf_density_matrix_ao_beta `_ - S^-1 Beta density matrix in the AO basis x S^-1 - - -`hf_energy `_ - Hartree-Fock energy - - -`huckel_guess `_ - Build the MOs using the extended Huckel model - - -`mo_guess_type `_ - Initial MO guess. Can be [ Huckel | HCore ] - - -`n_it_scf_max `_ - Maximum number of SCF iterations - - -`run `_ - Run SCF calculation - - -`scf `_ - Undocumented - - -`thresh_scf `_ - Threshold on the convergence of the Hartree Fock energy - diff --git a/src/Hartree_Fock/SCF.irp.f b/src/Hartree_Fock/SCF.irp.f deleted file mode 100644 index 33e1ac6c..00000000 --- a/src/Hartree_Fock/SCF.irp.f +++ /dev/null @@ -1,52 +0,0 @@ - -program scf - call create_guess - call orthonormalize_mos - call run -end - -subroutine create_guess - implicit none - BEGIN_DOC -! Create an MO guess if no MOs are present in the EZFIO directory - END_DOC - logical :: exists - PROVIDE ezfio_filename - call ezfio_has_mo_basis_mo_coef(exists) - if (.not.exists) then - if (mo_guess_type == "HCore") then - mo_coef = ao_ortho_lowdin_coef - TOUCH mo_coef - mo_label = 'Guess' - call mo_as_eigvectors_of_mo_matrix(mo_mono_elec_integral,size(mo_mono_elec_integral,1),size(mo_mono_elec_integral,2),mo_label) - SOFT_TOUCH mo_coef mo_label - else if (mo_guess_type == "Huckel") then - call huckel_guess - else - print *, 'Unrecognized MO guess type : '//mo_guess_type - stop 1 - endif - endif -end - - -subroutine run - - use bitmasks - implicit none - BEGIN_DOC -! Run SCF calculation - END_DOC - double precision :: SCF_energy_before,SCF_energy_after,diag_H_mat_elem,get_mo_bielec_integral - double precision :: E0 - integer :: i_it, i, j, k - - E0 = HF_energy - - thresh_SCF = 1.d-10 - call damping_SCF - mo_label = "Canonical" - TOUCH mo_label mo_coef - call save_mos - -end diff --git a/src/Hartree_Fock/damping_SCF.irp.f b/src/Hartree_Fock/damping_SCF.irp.f deleted file mode 100644 index d55bc8b8..00000000 --- a/src/Hartree_Fock/damping_SCF.irp.f +++ /dev/null @@ -1,127 +0,0 @@ -subroutine damping_SCF - implicit none - double precision :: E - double precision, allocatable :: D_alpha(:,:), D_beta(:,:) - double precision :: E_new - double precision, allocatable :: D_new_alpha(:,:), D_new_beta(:,:), F_new(:,:) - double precision, allocatable :: delta_alpha(:,:), delta_beta(:,:) - double precision :: lambda, E_half, a, b, delta_D, delta_E, E_min - - integer :: i,j,k - logical :: saving - character :: save_char - - allocate( & - D_alpha( ao_num_align, ao_num ), & - D_beta( ao_num_align, ao_num ), & - F_new( ao_num_align, ao_num ), & - D_new_alpha( ao_num_align, ao_num ), & - D_new_beta( ao_num_align, ao_num ), & - delta_alpha( ao_num_align, ao_num ), & - delta_beta( ao_num_align, ao_num )) - - do j=1,ao_num - do i=1,ao_num - D_alpha(i,j) = HF_density_matrix_ao_alpha(i,j) - D_beta (i,j) = HF_density_matrix_ao_beta (i,j) - enddo - enddo - - - call write_time(output_hartree_fock) - - write(output_hartree_fock,'(A4,X,A16, X, A16, X, A16, X, A4 )'), '====','================','================','================', '====' - write(output_hartree_fock,'(A4,X,A16, X, A16, X, A16, X, A4 )'), ' N ', 'Energy ', 'Energy diff ', 'Density diff ', 'Save' - write(output_hartree_fock,'(A4,X,A16, X, A16, X, A16, X, A4 )'), '====','================','================','================', '====' - - E = HF_energy + 1.d0 - E_min = HF_energy - delta_D = 0.d0 - do k=1,n_it_scf_max - - delta_E = HF_energy - E - E = HF_energy - - if ( (delta_E < 0.d0).and.(dabs(delta_E) < thresh_scf) ) then - exit - endif - - saving = E < E_min - if (saving) then - call save_mos - save_char = 'X' - E_min = E - else - save_char = ' ' - endif - - write(output_hartree_fock,'(I4,X,F16.10, X, F16.10, X, F16.10, 3X, A )'), & - k, E, delta_E, delta_D, save_char - - D_alpha = HF_density_matrix_ao_alpha - D_beta = HF_density_matrix_ao_beta - mo_coef = eigenvectors_fock_matrix_mo - TOUCH mo_coef - - D_new_alpha = HF_density_matrix_ao_alpha - D_new_beta = HF_density_matrix_ao_beta - F_new = Fock_matrix_ao - E_new = HF_energy - - delta_alpha = D_new_alpha - D_alpha - delta_beta = D_new_beta - D_beta - - lambda = .5d0 - E_half = 0.d0 - do while (E_half > E) - HF_density_matrix_ao_alpha = D_alpha + lambda * delta_alpha - HF_density_matrix_ao_beta = D_beta + lambda * delta_beta - TOUCH HF_density_matrix_ao_alpha HF_density_matrix_ao_beta - mo_coef = eigenvectors_fock_matrix_mo - TOUCH mo_coef - E_half = HF_energy - if ((E_half > E).and.(E_new < E)) then - lambda = 1.d0 - exit - else if ((E_half > E).and.(lambda > 5.d-2)) then - lambda = 0.5d0 * lambda - E_new = E_half - else - exit - endif - enddo - - a = (E_new + E - 2.d0*E_half)*2.d0 - b = -E_new - 3.d0*E + 4.d0*E_half - lambda = -lambda*b/a - D_alpha = (1.d0-lambda) * D_alpha + lambda * D_new_alpha - D_beta = (1.d0-lambda) * D_beta + lambda * D_new_beta - delta_E = HF_energy - E - do j=1,ao_num - do i=1,ao_num - delta_D = delta_D + & - (D_alpha(i,j) - HF_density_matrix_ao_alpha(i,j))*(D_alpha(i,j) - HF_density_matrix_ao_alpha(i,j)) + & - (D_beta (i,j) - HF_density_matrix_ao_beta (i,j))*(D_beta (i,j) - HF_density_matrix_ao_beta (i,j)) - enddo - enddo - delta_D = dsqrt(delta_D/dble(ao_num)**2) - HF_density_matrix_ao_alpha = D_alpha - HF_density_matrix_ao_beta = D_beta - TOUCH HF_density_matrix_ao_alpha HF_density_matrix_ao_beta - mo_coef = eigenvectors_fock_matrix_mo - TOUCH mo_coef - - - enddo - write(output_hartree_fock,'(A4,X,A16, X, A16, X, A16, X, A4 )'), '====','================','================','================', '====' - write(output_hartree_fock,*) - - call mo_as_eigvectors_of_mo_matrix(Fock_matrix_mo,size(Fock_matrix_mo,1),size(Fock_matrix_mo,2),mo_label) - - call write_double(output_hartree_fock, E_min, 'Hartree-Fock energy') - call ezfio_set_hartree_fock_energy(E_min) - - call write_time(output_hartree_fock) - - deallocate(D_alpha,D_beta,F_new,D_new_alpha,D_new_beta,delta_alpha,delta_beta) -end diff --git a/src/Hartree_Fock/diagonalize_fock.irp.f b/src/Hartree_Fock/diagonalize_fock.irp.f deleted file mode 100644 index 90bfddcb..00000000 --- a/src/Hartree_Fock/diagonalize_fock.irp.f +++ /dev/null @@ -1,91 +0,0 @@ - BEGIN_PROVIDER [ double precision, diagonal_Fock_matrix_mo, (ao_num) ] -&BEGIN_PROVIDER [ double precision, eigenvectors_Fock_matrix_mo, (ao_num_align,mo_tot_num) ] - implicit none - BEGIN_DOC - ! Diagonal Fock matrix in the MO basis - END_DOC - - integer :: i,j - integer :: liwork, lwork, n, info - integer, allocatable :: iwork(:) - double precision, allocatable :: work(:), F(:,:), S(:,:) - - allocate(F(ao_num_align,ao_num), S(ao_num_align,ao_num) ) - do j=1,ao_num - do i=1,ao_num - S(i,j) = ao_overlap(i,j) - F(i,j) = Fock_matrix_ao(i,j) - enddo - enddo - - n = ao_num - lwork = 1+6*n + 2*n*n - liwork = 3 + 5*n - - allocate(work(lwork), iwork(liwork) ) - - lwork = -1 - liwork = -1 - - call dsygvd(1,'v','u',ao_num,F,size(F,1),S,size(S,1),& - diagonal_Fock_matrix_mo, work, lwork, iwork, liwork, info) -! call dsygv(1, 'v', 'u',ao_num,F,size(F,1),S,size(S,1),& -! diagonal_Fock_matrix_mo, work, lwork, info) - - - - if (info /= 0) then - print *, irp_here//' failed : ', info - stop 1 - endif - lwork = int(work(1)) - liwork = iwork(1) - deallocate(work,iwork) - allocate(work(lwork), iwork(liwork) ) -! deallocate(work) -! allocate(work(lwork)) - - call dsygvd(1,'v','u',ao_num,F,size(F,1),S,size(S,1),& - diagonal_Fock_matrix_mo, work, lwork, iwork, liwork, info) - -! call dsygv(1, 'v', 'u',ao_num,F,size(F,1),S,size(S,1),& -! diagonal_Fock_matrix_mo, work, lwork, info) - - if (info /= 0) then - print *, irp_here//' failed : ', info - stop 1 - endif - do j=1,mo_tot_num - do i=1,ao_num - eigenvectors_Fock_matrix_mo(i,j) = F(i,j) - enddo - enddo - - deallocate(work, iwork, F, S) -END_PROVIDER - -BEGIN_PROVIDER [double precision, diagonal_Fock_matrix_mo_sum, (mo_tot_num)] - implicit none - BEGIN_DOC - ! diagonal element of the fock matrix calculated as the sum over all the interactions - ! with all the electrons in the RHF determinant - ! diagonal_Fock_matrix_mo_sum(i) = sum_{j=1, N_elec} 2 J_ij -K_ij - END_DOC - integer :: i,j - double precision :: accu - do i = 1,elec_alpha_num - accu = 0.d0 - do j = 1, elec_alpha_num - accu += 2.d0 * mo_bielec_integral_jj_from_ao(i,j) - mo_bielec_integral_jj_exchange_from_ao(i,j) - enddo - diagonal_Fock_matrix_mo_sum(i) = accu + mo_mono_elec_integral(i,i) - enddo - do i = elec_alpha_num+1,mo_tot_num - accu = 0.d0 - do j = 1, elec_alpha_num - accu += 2.d0 * mo_bielec_integral_jj_from_ao(i,j) - mo_bielec_integral_jj_exchange_from_ao(i,j) - enddo - diagonal_Fock_matrix_mo_sum(i) = accu + mo_mono_elec_integral(i,i) - enddo - -END_PROVIDER diff --git a/src/Hartree_Fock/huckel.irp.f b/src/Hartree_Fock/huckel.irp.f deleted file mode 100644 index 4ea8d93f..00000000 --- a/src/Hartree_Fock/huckel.irp.f +++ /dev/null @@ -1,34 +0,0 @@ -subroutine huckel_guess - implicit none - BEGIN_DOC -! Build the MOs using the extended Huckel model - END_DOC - integer :: i,j - double precision :: tmp_matrix(ao_num_align,ao_num),accu - double precision :: c - character*(64) :: label - - mo_coef = ao_ortho_lowdin_coef - TOUCH mo_coef - label = "Guess" - call mo_as_eigvectors_of_mo_matrix(mo_mono_elec_integral, & - size(mo_mono_elec_integral,1),size(mo_mono_elec_integral,2),label) - TOUCH mo_coef - - c = 0.5d0 * 1.75d0 - do j=1,ao_num - do i=1,ao_num - if (i/=j) then - Fock_matrix_ao(i,j) = c*ao_overlap(i,j)*(ao_mono_elec_integral(i,i) + & - ao_mono_elec_integral(j,j)) - else - Fock_matrix_ao(i,j) = Fock_matrix_alpha_ao(i,j) - endif - enddo - enddo - TOUCH Fock_matrix_ao - mo_coef = eigenvectors_fock_matrix_mo - SOFT_TOUCH mo_coef - call save_mos - -end diff --git a/src/Hartree_Fock/tree_dependency.png b/src/Hartree_Fock/tree_dependency.png deleted file mode 100644 index 82a2ac8e7ef38edc1307128469d5b2166306eef0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 60461 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 amCQ61xX>pN{3(2T6j<;j=&-6qH$#3 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 UI Date: Wed, 17 Jun 2015 18:22:08 +0200 Subject: [PATCH 03/19] Move into plugins --- {src => plugins}/CAS_SD/.gitignore | 0 {src => plugins}/CAS_SD/EZFIO.cfg | 0 {src => plugins}/CAS_SD/H_apply.irp.f | 0 .../CAS_SD/NEEDED_CHILDREN_MODULES | 0 {src => plugins}/CAS_SD/README.rst | 0 {src => plugins}/CAS_SD/cas_sd.irp.f | 0 {src => plugins}/CAS_SD/cas_sd_selected.irp.f | 0 {src => plugins}/CAS_SD/tree_dependency.png | Bin {src => plugins}/CID/.gitignore | 0 {src => plugins}/CID/H_apply.irp.f | 0 {src => plugins}/CID/NEEDED_CHILDREN_MODULES | 0 {src => plugins}/CID/README.rst | 0 {src => plugins}/CID/cid.irp.f | 0 {src => plugins}/CID/cid_lapack.irp.f | 0 {src => plugins}/CID/tree_dependency.png | Bin {src => plugins}/CID_SC2_selected/.gitignore | 0 .../CID_SC2_selected/H_apply.irp.f | 0 .../CID_SC2_selected/NEEDED_CHILDREN_MODULES | 0 {src => plugins}/CID_SC2_selected/README.rst | 0 .../CID_SC2_selected/cid_sc2_selection.irp.f | 0 .../CID_SC2_selected/tree_dependency.png | Bin {src => plugins}/CID_selected/.gitignore | 0 {src => plugins}/CID_selected/H_apply.irp.f | 0 .../CID_selected/NEEDED_CHILDREN_MODULES | 0 {src => plugins}/CID_selected/README.rst | 0 .../CID_selected/cid_selection.irp.f | 0 .../CID_selected/tree_dependency.png | Bin {src => plugins}/CIS/.gitignore | 0 {src => plugins}/CIS/H_apply.irp.f | 0 {src => plugins}/CIS/NEEDED_CHILDREN_MODULES | 0 {src => plugins}/CIS/README.rst | 0 {src => plugins}/CIS/cis.irp.f | 0 {src => plugins}/CIS/super_ci.irp.f | 0 {src => plugins}/CIS/tree_dependency.png | Bin {src => plugins}/CISD/.gitignore | 0 {src => plugins}/CISD/H_apply.irp.f | 0 {src => plugins}/CISD/NEEDED_CHILDREN_MODULES | 0 {src => plugins}/CISD/README.rst | 0 {src => plugins}/CISD/cisd.irp.f | 0 {src => plugins}/CISD/cisd_lapack.irp.f | 0 {src => plugins}/CISD/tree_dependency.png | Bin {src => plugins}/CISD_SC2_selected/.gitignore | 0 {src => plugins}/CISD_SC2_selected/EZFIO.cfg | 0 .../CISD_SC2_selected/H_apply.irp.f | 0 .../CISD_SC2_selected/NEEDED_CHILDREN_MODULES | 0 {src => plugins}/CISD_SC2_selected/README.rst | 0 .../cisd_sc2_selection.irp.f | 0 .../CISD_SC2_selected/tree_dependency.png | Bin {src => plugins}/CISD_selected/.gitignore | 0 {src => plugins}/CISD_selected/H_apply.irp.f | 0 .../CISD_selected/NEEDED_CHILDREN_MODULES | 0 {src => plugins}/CISD_selected/README.rst | 0 .../CISD_selected/cisd_selection.irp.f | 0 .../CISD_selected/tree_dependency.png | Bin {src => plugins}/DDCI_selected/.gitignore | 0 {src => plugins}/DDCI_selected/EZFIO.cfg | 0 {src => plugins}/DDCI_selected/H_apply.irp.f | 0 .../DDCI_selected/NEEDED_CHILDREN_MODULES | 0 {src => plugins}/DDCI_selected/README.rst | 0 {src => plugins}/DDCI_selected/ddci.irp.f | 0 .../DDCI_selected/tree_dependency.png | Bin {src => plugins}/DensityFit/.gitignore | 0 .../DensityFit/NEEDED_CHILDREN_MODULES | 0 {src => plugins}/DensityFit/README.rst | 0 .../DensityFit/aux_basis.ezfio_config | 0 {src => plugins}/DensityFit/aux_basis.irp.f | 0 {src => plugins}/DensityFit/overlap.irp.f | 0 .../DensityFit/tree_dependency.png | Bin {src => plugins}/DensityMatrix/.gitignore | 0 {src => plugins}/DensityMatrix/README.rst | 0 .../DensityMatrix/density_matrix.irp.f | 0 {src => plugins}/DensityMatrix/det_num.irp.f | 0 {src => plugins}/FCIdump/.gitignore | 0 .../FCIdump/NEEDED_CHILDREN_MODULES | 0 {src => plugins}/FCIdump/README.rst | 0 {src => plugins}/FCIdump/fcidump.irp.f | 0 {src => plugins}/FCIdump/tree_dependency.png | Bin plugins/Full_CI/.gitignore | 34 ++ plugins/Full_CI/EZFIO.cfg | 10 + plugins/Full_CI/H_apply.irp.f | 44 +++ .../Full_CI}/NEEDED_CHILDREN_MODULES | 0 plugins/Full_CI/README.rst | 167 ++++++++ plugins/Full_CI/full_ci.irp.f | 91 +++++ plugins/Full_CI/full_ci_no_skip.irp.f | 91 +++++ plugins/Full_CI/target_pt2.irp.f | 76 ++++ plugins/Full_CI/tree_dependency.png | Bin 0 -> 102882 bytes plugins/Full_CI/var_pt2_ratio.irp.f | 71 ++++ {src => plugins}/Generators_CAS/.gitignore | 0 .../Generators_CAS/NEEDED_CHILDREN_MODULES | 0 {src => plugins}/Generators_CAS/README.rst | 0 .../Generators_CAS/generators.irp.f | 0 .../Generators_CAS/tree_dependency.png | Bin {src => plugins}/Generators_full/.gitignore | 0 .../Generators_full/NEEDED_CHILDREN_MODULES | 0 {src => plugins}/Generators_full/README.rst | 0 .../Generators_full/generators.irp.f | 0 .../Generators_full/tree_dependency.png | Bin .../Generators_restart/.gitignore | 0 .../NEEDED_CHILDREN_MODULES | 0 .../Generators_restart/README.rst | 0 .../Generators_restart/generators.irp.f | 0 .../Generators_restart/tree_dependency.png | Bin plugins/Hartree_Fock/.gitignore | 26 ++ plugins/Hartree_Fock/EZFIO.cfg | 22 ++ plugins/Hartree_Fock/Fock_matrix.irp.f | 364 ++++++++++++++++++ .../Hartree_Fock/HF_density_matrix_ao.irp.f | 41 ++ plugins/Hartree_Fock/Hartree_Fock | 1 + plugins/Hartree_Fock/Huckel_guess.irp.f | 6 + plugins/Hartree_Fock/NEEDED_CHILDREN_MODULES | 1 + plugins/Hartree_Fock/README.rst | 152 ++++++++ plugins/Hartree_Fock/SCF.irp.f | 52 +++ plugins/Hartree_Fock/damping_SCF.irp.f | 127 ++++++ plugins/Hartree_Fock/diagonalize_fock.irp.f | 91 +++++ plugins/Hartree_Fock/huckel.irp.f | 34 ++ plugins/Hartree_Fock/test | 0 plugins/Hartree_Fock/tree_dependency.png | Bin 0 -> 60461 bytes {src => plugins}/MP2/.gitignore | 0 {src => plugins}/MP2/H_apply.irp.f | 0 {src => plugins}/MP2/NEEDED_CHILDREN_MODULES | 0 {src => plugins}/MP2/README.rst | 0 {src => plugins}/MP2/mp2.irp.f | 0 {src => plugins}/MP2/tree_dependency.png | Bin {src => plugins}/MRCC/.gitignore | 0 {src => plugins}/MRCC/EZFIO.cfg | 0 {src => plugins}/MRCC/H_apply.irp.f | 0 plugins/MRCC/NEEDED_CHILDREN_MODULES | 1 + {src => plugins}/MRCC/README.rst | 0 {src => plugins}/MRCC/davidson.irp.f | 0 {src => plugins}/MRCC/mrcc.irp.f | 0 {src => plugins}/MRCC/mrcc_dress.irp.f | 0 {src => plugins}/MRCC/mrcc_utils.irp.f | 0 {src => plugins}/MRCC/tree_dependency.png | Bin {src => plugins}/Molden/.gitignore | 0 .../Molden/NEEDED_CHILDREN_MODULES | 0 {src => plugins}/Molden/README.rst | 0 {src => plugins}/Molden/print_mo.irp.f | 0 {src => plugins}/Molden/tree_dependency.png | Bin {src => plugins}/Perturbation/.gitignore | 0 {src => plugins}/Perturbation/EZFIO.cfg | 0 .../Perturbation/Moller_plesset.irp.f | 0 .../Perturbation/NEEDED_CHILDREN_MODULES | 0 {src => plugins}/Perturbation/README.rst | 0 .../Perturbation/delta_rho_perturbation.irp.f | 0 .../Perturbation/dipole_moment.irp.f | 0 .../Perturbation/epstein_nesbet.irp.f | 0 {src => plugins}/Perturbation/exc_max.irp.f | 0 {src => plugins}/Perturbation/pert_sc2.irp.f | 0 .../Perturbation/pert_single.irp.f | 0 .../Perturbation/perturbation.irp.f | 0 .../Perturbation/perturbation.template.f | 0 {src => plugins}/Perturbation/selection.irp.f | 0 .../Perturbation/tree_dependency.png | Bin {src => plugins}/Properties/.gitignore | 0 {src => plugins}/Properties/EZFIO.cfg | 0 .../Properties/NEEDED_CHILDREN_MODULES | 0 {src => plugins}/Properties/README.rst | 0 {src => plugins}/Properties/average.irp.f | 0 {src => plugins}/Properties/delta_rho.irp.f | 0 {src => plugins}/Properties/properties.irp.f | 0 .../Properties/routines_test.irp.f | 0 .../slater_rules_mono_electronic.irp.f | 0 .../Properties/tree_dependency.png | Bin {src => plugins}/QmcChem/.gitignore | 0 .../QmcChem/NEEDED_CHILDREN_MODULES | 0 {src => plugins}/QmcChem/README.rst | 0 .../QmcChem/pot_ao_pseudo_ints.irp.f | 0 {src => plugins}/QmcChem/pseudo.irp.f | 0 .../QmcChem/save_for_qmcchem.irp.f | 0 {src => plugins}/QmcChem/tree_dependency.png | Bin {src => plugins}/Selectors_full/.gitignore | 0 .../Selectors_full/NEEDED_CHILDREN_MODULES | 0 {src => plugins}/Selectors_full/README.rst | 0 .../Selectors_full/e_corr_selectors.irp.f | 0 .../Selectors_full/selectors.irp.f | 0 .../Selectors_full/tree_dependency.png | Bin .../Selectors_no_sorted/.gitignore | 0 .../NEEDED_CHILDREN_MODULES | 0 .../Selectors_no_sorted/README.rst | 0 .../e_corr_selectors.irp.f | 0 .../Selectors_no_sorted/selectors.irp.f | 0 .../Selectors_no_sorted/tree_dependency.png | Bin {src => plugins}/SingleRefMethod/.gitignore | 0 .../SingleRefMethod/NEEDED_CHILDREN_MODULES | 0 {src => plugins}/SingleRefMethod/README.rst | 0 .../SingleRefMethod/generators.irp.f | 0 .../SingleRefMethod/tree_dependency.png | Bin 186 files changed, 1502 insertions(+) rename {src => plugins}/CAS_SD/.gitignore (100%) rename {src => plugins}/CAS_SD/EZFIO.cfg (100%) rename {src => plugins}/CAS_SD/H_apply.irp.f (100%) rename {src => plugins}/CAS_SD/NEEDED_CHILDREN_MODULES (100%) rename {src => plugins}/CAS_SD/README.rst (100%) rename {src => plugins}/CAS_SD/cas_sd.irp.f (100%) rename {src => plugins}/CAS_SD/cas_sd_selected.irp.f (100%) rename {src => plugins}/CAS_SD/tree_dependency.png (100%) rename {src => plugins}/CID/.gitignore (100%) rename {src => plugins}/CID/H_apply.irp.f (100%) rename {src => plugins}/CID/NEEDED_CHILDREN_MODULES (100%) rename {src => plugins}/CID/README.rst (100%) rename {src => plugins}/CID/cid.irp.f (100%) rename {src => plugins}/CID/cid_lapack.irp.f (100%) rename {src => plugins}/CID/tree_dependency.png (100%) rename {src => plugins}/CID_SC2_selected/.gitignore (100%) rename {src => plugins}/CID_SC2_selected/H_apply.irp.f (100%) rename {src => plugins}/CID_SC2_selected/NEEDED_CHILDREN_MODULES (100%) rename {src => plugins}/CID_SC2_selected/README.rst (100%) rename {src => plugins}/CID_SC2_selected/cid_sc2_selection.irp.f (100%) rename {src => plugins}/CID_SC2_selected/tree_dependency.png (100%) rename {src => plugins}/CID_selected/.gitignore (100%) rename {src => plugins}/CID_selected/H_apply.irp.f (100%) rename {src => plugins}/CID_selected/NEEDED_CHILDREN_MODULES (100%) rename {src => plugins}/CID_selected/README.rst (100%) rename {src => plugins}/CID_selected/cid_selection.irp.f (100%) rename {src => plugins}/CID_selected/tree_dependency.png (100%) rename {src => plugins}/CIS/.gitignore (100%) rename {src => plugins}/CIS/H_apply.irp.f (100%) rename {src => plugins}/CIS/NEEDED_CHILDREN_MODULES (100%) rename {src => plugins}/CIS/README.rst (100%) rename {src => plugins}/CIS/cis.irp.f (100%) rename {src => plugins}/CIS/super_ci.irp.f (100%) rename {src => plugins}/CIS/tree_dependency.png (100%) rename {src => plugins}/CISD/.gitignore (100%) rename {src => plugins}/CISD/H_apply.irp.f (100%) rename {src => plugins}/CISD/NEEDED_CHILDREN_MODULES (100%) rename {src => plugins}/CISD/README.rst (100%) rename {src => plugins}/CISD/cisd.irp.f (100%) rename {src => plugins}/CISD/cisd_lapack.irp.f (100%) rename {src => plugins}/CISD/tree_dependency.png (100%) rename {src => plugins}/CISD_SC2_selected/.gitignore (100%) rename {src => plugins}/CISD_SC2_selected/EZFIO.cfg (100%) rename {src => plugins}/CISD_SC2_selected/H_apply.irp.f (100%) rename {src => plugins}/CISD_SC2_selected/NEEDED_CHILDREN_MODULES (100%) rename {src => plugins}/CISD_SC2_selected/README.rst (100%) rename {src => plugins}/CISD_SC2_selected/cisd_sc2_selection.irp.f (100%) rename {src => plugins}/CISD_SC2_selected/tree_dependency.png (100%) rename {src => plugins}/CISD_selected/.gitignore (100%) rename {src => plugins}/CISD_selected/H_apply.irp.f (100%) rename {src => plugins}/CISD_selected/NEEDED_CHILDREN_MODULES (100%) rename {src => plugins}/CISD_selected/README.rst (100%) rename {src => plugins}/CISD_selected/cisd_selection.irp.f (100%) rename {src => plugins}/CISD_selected/tree_dependency.png (100%) rename {src => plugins}/DDCI_selected/.gitignore (100%) rename {src => plugins}/DDCI_selected/EZFIO.cfg (100%) rename {src => plugins}/DDCI_selected/H_apply.irp.f (100%) rename {src => plugins}/DDCI_selected/NEEDED_CHILDREN_MODULES (100%) rename {src => plugins}/DDCI_selected/README.rst (100%) rename {src => plugins}/DDCI_selected/ddci.irp.f (100%) rename {src => plugins}/DDCI_selected/tree_dependency.png (100%) rename {src => plugins}/DensityFit/.gitignore (100%) rename {src => plugins}/DensityFit/NEEDED_CHILDREN_MODULES (100%) rename {src => plugins}/DensityFit/README.rst (100%) rename {src => plugins}/DensityFit/aux_basis.ezfio_config (100%) rename {src => plugins}/DensityFit/aux_basis.irp.f (100%) rename {src => plugins}/DensityFit/overlap.irp.f (100%) rename {src => plugins}/DensityFit/tree_dependency.png (100%) rename {src => plugins}/DensityMatrix/.gitignore (100%) rename {src => plugins}/DensityMatrix/README.rst (100%) rename {src => plugins}/DensityMatrix/density_matrix.irp.f (100%) rename {src => plugins}/DensityMatrix/det_num.irp.f (100%) rename {src => plugins}/FCIdump/.gitignore (100%) rename {src => plugins}/FCIdump/NEEDED_CHILDREN_MODULES (100%) rename {src => plugins}/FCIdump/README.rst (100%) rename {src => plugins}/FCIdump/fcidump.irp.f (100%) rename {src => plugins}/FCIdump/tree_dependency.png (100%) create mode 100644 plugins/Full_CI/.gitignore create mode 100644 plugins/Full_CI/EZFIO.cfg create mode 100644 plugins/Full_CI/H_apply.irp.f rename {src/MRCC => plugins/Full_CI}/NEEDED_CHILDREN_MODULES (100%) create mode 100644 plugins/Full_CI/README.rst create mode 100644 plugins/Full_CI/full_ci.irp.f create mode 100644 plugins/Full_CI/full_ci_no_skip.irp.f create mode 100644 plugins/Full_CI/target_pt2.irp.f create mode 100644 plugins/Full_CI/tree_dependency.png create mode 100644 plugins/Full_CI/var_pt2_ratio.irp.f rename {src => plugins}/Generators_CAS/.gitignore (100%) rename {src => plugins}/Generators_CAS/NEEDED_CHILDREN_MODULES (100%) rename {src => plugins}/Generators_CAS/README.rst (100%) rename {src => plugins}/Generators_CAS/generators.irp.f (100%) rename {src => plugins}/Generators_CAS/tree_dependency.png (100%) rename {src => plugins}/Generators_full/.gitignore (100%) rename {src => plugins}/Generators_full/NEEDED_CHILDREN_MODULES (100%) rename {src => plugins}/Generators_full/README.rst (100%) rename {src => plugins}/Generators_full/generators.irp.f (100%) rename {src => plugins}/Generators_full/tree_dependency.png (100%) rename {src => plugins}/Generators_restart/.gitignore (100%) rename {src => plugins}/Generators_restart/NEEDED_CHILDREN_MODULES (100%) rename {src => plugins}/Generators_restart/README.rst (100%) rename {src => plugins}/Generators_restart/generators.irp.f (100%) rename {src => plugins}/Generators_restart/tree_dependency.png (100%) create mode 100644 plugins/Hartree_Fock/.gitignore create mode 100644 plugins/Hartree_Fock/EZFIO.cfg create mode 100644 plugins/Hartree_Fock/Fock_matrix.irp.f create mode 100644 plugins/Hartree_Fock/HF_density_matrix_ao.irp.f create mode 120000 plugins/Hartree_Fock/Hartree_Fock create mode 100644 plugins/Hartree_Fock/Huckel_guess.irp.f create mode 100644 plugins/Hartree_Fock/NEEDED_CHILDREN_MODULES create mode 100644 plugins/Hartree_Fock/README.rst create mode 100644 plugins/Hartree_Fock/SCF.irp.f create mode 100644 plugins/Hartree_Fock/damping_SCF.irp.f create mode 100644 plugins/Hartree_Fock/diagonalize_fock.irp.f create mode 100644 plugins/Hartree_Fock/huckel.irp.f create mode 100644 plugins/Hartree_Fock/test create mode 100644 plugins/Hartree_Fock/tree_dependency.png rename {src => plugins}/MP2/.gitignore (100%) rename {src => plugins}/MP2/H_apply.irp.f (100%) rename {src => plugins}/MP2/NEEDED_CHILDREN_MODULES (100%) rename {src => plugins}/MP2/README.rst (100%) rename {src => plugins}/MP2/mp2.irp.f (100%) rename {src => plugins}/MP2/tree_dependency.png (100%) rename {src => plugins}/MRCC/.gitignore (100%) rename {src => plugins}/MRCC/EZFIO.cfg (100%) rename {src => plugins}/MRCC/H_apply.irp.f (100%) create mode 100644 plugins/MRCC/NEEDED_CHILDREN_MODULES rename {src => plugins}/MRCC/README.rst (100%) rename {src => plugins}/MRCC/davidson.irp.f (100%) rename {src => plugins}/MRCC/mrcc.irp.f (100%) rename {src => plugins}/MRCC/mrcc_dress.irp.f (100%) rename {src => plugins}/MRCC/mrcc_utils.irp.f (100%) rename {src => plugins}/MRCC/tree_dependency.png (100%) rename {src => plugins}/Molden/.gitignore (100%) rename {src => plugins}/Molden/NEEDED_CHILDREN_MODULES (100%) rename {src => plugins}/Molden/README.rst (100%) rename {src => plugins}/Molden/print_mo.irp.f (100%) rename {src => plugins}/Molden/tree_dependency.png (100%) rename {src => plugins}/Perturbation/.gitignore (100%) rename {src => plugins}/Perturbation/EZFIO.cfg (100%) rename {src => plugins}/Perturbation/Moller_plesset.irp.f (100%) rename {src => plugins}/Perturbation/NEEDED_CHILDREN_MODULES (100%) rename {src => plugins}/Perturbation/README.rst (100%) rename {src => plugins}/Perturbation/delta_rho_perturbation.irp.f (100%) rename {src => plugins}/Perturbation/dipole_moment.irp.f (100%) rename {src => plugins}/Perturbation/epstein_nesbet.irp.f (100%) rename {src => plugins}/Perturbation/exc_max.irp.f (100%) rename {src => plugins}/Perturbation/pert_sc2.irp.f (100%) rename {src => plugins}/Perturbation/pert_single.irp.f (100%) rename {src => plugins}/Perturbation/perturbation.irp.f (100%) rename {src => plugins}/Perturbation/perturbation.template.f (100%) rename {src => plugins}/Perturbation/selection.irp.f (100%) rename {src => plugins}/Perturbation/tree_dependency.png (100%) rename {src => plugins}/Properties/.gitignore (100%) rename {src => plugins}/Properties/EZFIO.cfg (100%) rename {src => plugins}/Properties/NEEDED_CHILDREN_MODULES (100%) rename {src => plugins}/Properties/README.rst (100%) rename {src => plugins}/Properties/average.irp.f (100%) rename {src => plugins}/Properties/delta_rho.irp.f (100%) rename {src => plugins}/Properties/properties.irp.f (100%) rename {src => plugins}/Properties/routines_test.irp.f (100%) rename {src => plugins}/Properties/slater_rules_mono_electronic.irp.f (100%) rename {src => plugins}/Properties/tree_dependency.png (100%) rename {src => plugins}/QmcChem/.gitignore (100%) rename {src => plugins}/QmcChem/NEEDED_CHILDREN_MODULES (100%) rename {src => plugins}/QmcChem/README.rst (100%) rename {src => plugins}/QmcChem/pot_ao_pseudo_ints.irp.f (100%) rename {src => plugins}/QmcChem/pseudo.irp.f (100%) rename {src => plugins}/QmcChem/save_for_qmcchem.irp.f (100%) rename {src => plugins}/QmcChem/tree_dependency.png (100%) rename {src => plugins}/Selectors_full/.gitignore (100%) rename {src => plugins}/Selectors_full/NEEDED_CHILDREN_MODULES (100%) rename {src => plugins}/Selectors_full/README.rst (100%) rename {src => plugins}/Selectors_full/e_corr_selectors.irp.f (100%) rename {src => plugins}/Selectors_full/selectors.irp.f (100%) rename {src => plugins}/Selectors_full/tree_dependency.png (100%) rename {src => plugins}/Selectors_no_sorted/.gitignore (100%) rename {src => plugins}/Selectors_no_sorted/NEEDED_CHILDREN_MODULES (100%) rename {src => plugins}/Selectors_no_sorted/README.rst (100%) rename {src => plugins}/Selectors_no_sorted/e_corr_selectors.irp.f (100%) rename {src => plugins}/Selectors_no_sorted/selectors.irp.f (100%) rename {src => plugins}/Selectors_no_sorted/tree_dependency.png (100%) rename {src => plugins}/SingleRefMethod/.gitignore (100%) rename {src => plugins}/SingleRefMethod/NEEDED_CHILDREN_MODULES (100%) rename {src => plugins}/SingleRefMethod/README.rst (100%) rename {src => plugins}/SingleRefMethod/generators.irp.f (100%) rename {src => plugins}/SingleRefMethod/tree_dependency.png (100%) diff --git a/src/CAS_SD/.gitignore b/plugins/CAS_SD/.gitignore similarity index 100% rename from src/CAS_SD/.gitignore rename to plugins/CAS_SD/.gitignore diff --git a/src/CAS_SD/EZFIO.cfg b/plugins/CAS_SD/EZFIO.cfg similarity index 100% rename from src/CAS_SD/EZFIO.cfg rename to plugins/CAS_SD/EZFIO.cfg diff --git a/src/CAS_SD/H_apply.irp.f b/plugins/CAS_SD/H_apply.irp.f similarity index 100% rename from src/CAS_SD/H_apply.irp.f rename to plugins/CAS_SD/H_apply.irp.f diff --git a/src/CAS_SD/NEEDED_CHILDREN_MODULES b/plugins/CAS_SD/NEEDED_CHILDREN_MODULES similarity index 100% rename from src/CAS_SD/NEEDED_CHILDREN_MODULES rename to plugins/CAS_SD/NEEDED_CHILDREN_MODULES diff --git a/src/CAS_SD/README.rst b/plugins/CAS_SD/README.rst similarity index 100% rename from src/CAS_SD/README.rst rename to plugins/CAS_SD/README.rst diff --git a/src/CAS_SD/cas_sd.irp.f b/plugins/CAS_SD/cas_sd.irp.f similarity index 100% rename from src/CAS_SD/cas_sd.irp.f rename to plugins/CAS_SD/cas_sd.irp.f diff --git a/src/CAS_SD/cas_sd_selected.irp.f b/plugins/CAS_SD/cas_sd_selected.irp.f similarity index 100% rename from src/CAS_SD/cas_sd_selected.irp.f rename to plugins/CAS_SD/cas_sd_selected.irp.f diff --git a/src/CAS_SD/tree_dependency.png b/plugins/CAS_SD/tree_dependency.png similarity index 100% rename from src/CAS_SD/tree_dependency.png rename to plugins/CAS_SD/tree_dependency.png diff --git a/src/CID/.gitignore b/plugins/CID/.gitignore similarity index 100% rename from src/CID/.gitignore rename to plugins/CID/.gitignore diff --git a/src/CID/H_apply.irp.f b/plugins/CID/H_apply.irp.f similarity index 100% rename from src/CID/H_apply.irp.f rename to plugins/CID/H_apply.irp.f diff --git a/src/CID/NEEDED_CHILDREN_MODULES b/plugins/CID/NEEDED_CHILDREN_MODULES similarity index 100% rename from src/CID/NEEDED_CHILDREN_MODULES rename to plugins/CID/NEEDED_CHILDREN_MODULES diff --git a/src/CID/README.rst b/plugins/CID/README.rst similarity index 100% rename from src/CID/README.rst rename to plugins/CID/README.rst diff --git a/src/CID/cid.irp.f b/plugins/CID/cid.irp.f similarity index 100% rename from src/CID/cid.irp.f rename to plugins/CID/cid.irp.f diff --git a/src/CID/cid_lapack.irp.f b/plugins/CID/cid_lapack.irp.f similarity index 100% rename from src/CID/cid_lapack.irp.f rename to plugins/CID/cid_lapack.irp.f diff --git a/src/CID/tree_dependency.png b/plugins/CID/tree_dependency.png similarity index 100% rename from src/CID/tree_dependency.png rename to plugins/CID/tree_dependency.png diff --git a/src/CID_SC2_selected/.gitignore b/plugins/CID_SC2_selected/.gitignore similarity index 100% rename from src/CID_SC2_selected/.gitignore rename to plugins/CID_SC2_selected/.gitignore diff --git a/src/CID_SC2_selected/H_apply.irp.f b/plugins/CID_SC2_selected/H_apply.irp.f similarity index 100% rename from src/CID_SC2_selected/H_apply.irp.f rename to plugins/CID_SC2_selected/H_apply.irp.f diff --git a/src/CID_SC2_selected/NEEDED_CHILDREN_MODULES b/plugins/CID_SC2_selected/NEEDED_CHILDREN_MODULES similarity index 100% rename from src/CID_SC2_selected/NEEDED_CHILDREN_MODULES rename to plugins/CID_SC2_selected/NEEDED_CHILDREN_MODULES diff --git a/src/CID_SC2_selected/README.rst b/plugins/CID_SC2_selected/README.rst similarity index 100% rename from src/CID_SC2_selected/README.rst rename to plugins/CID_SC2_selected/README.rst diff --git a/src/CID_SC2_selected/cid_sc2_selection.irp.f b/plugins/CID_SC2_selected/cid_sc2_selection.irp.f similarity index 100% rename from src/CID_SC2_selected/cid_sc2_selection.irp.f rename to plugins/CID_SC2_selected/cid_sc2_selection.irp.f diff --git a/src/CID_SC2_selected/tree_dependency.png b/plugins/CID_SC2_selected/tree_dependency.png similarity index 100% rename from src/CID_SC2_selected/tree_dependency.png rename to plugins/CID_SC2_selected/tree_dependency.png diff --git a/src/CID_selected/.gitignore b/plugins/CID_selected/.gitignore similarity index 100% rename from src/CID_selected/.gitignore rename to plugins/CID_selected/.gitignore diff --git a/src/CID_selected/H_apply.irp.f b/plugins/CID_selected/H_apply.irp.f similarity index 100% rename from src/CID_selected/H_apply.irp.f rename to plugins/CID_selected/H_apply.irp.f diff --git a/src/CID_selected/NEEDED_CHILDREN_MODULES b/plugins/CID_selected/NEEDED_CHILDREN_MODULES similarity index 100% rename from src/CID_selected/NEEDED_CHILDREN_MODULES rename to plugins/CID_selected/NEEDED_CHILDREN_MODULES diff --git a/src/CID_selected/README.rst b/plugins/CID_selected/README.rst similarity index 100% rename from src/CID_selected/README.rst rename to plugins/CID_selected/README.rst diff --git a/src/CID_selected/cid_selection.irp.f b/plugins/CID_selected/cid_selection.irp.f similarity index 100% rename from src/CID_selected/cid_selection.irp.f rename to plugins/CID_selected/cid_selection.irp.f diff --git a/src/CID_selected/tree_dependency.png b/plugins/CID_selected/tree_dependency.png similarity index 100% rename from src/CID_selected/tree_dependency.png rename to plugins/CID_selected/tree_dependency.png diff --git a/src/CIS/.gitignore b/plugins/CIS/.gitignore similarity index 100% rename from src/CIS/.gitignore rename to plugins/CIS/.gitignore diff --git a/src/CIS/H_apply.irp.f b/plugins/CIS/H_apply.irp.f similarity index 100% rename from src/CIS/H_apply.irp.f rename to plugins/CIS/H_apply.irp.f diff --git a/src/CIS/NEEDED_CHILDREN_MODULES b/plugins/CIS/NEEDED_CHILDREN_MODULES similarity index 100% rename from src/CIS/NEEDED_CHILDREN_MODULES rename to plugins/CIS/NEEDED_CHILDREN_MODULES diff --git a/src/CIS/README.rst b/plugins/CIS/README.rst similarity index 100% rename from src/CIS/README.rst rename to plugins/CIS/README.rst diff --git a/src/CIS/cis.irp.f b/plugins/CIS/cis.irp.f similarity index 100% rename from src/CIS/cis.irp.f rename to plugins/CIS/cis.irp.f diff --git a/src/CIS/super_ci.irp.f b/plugins/CIS/super_ci.irp.f similarity index 100% rename from src/CIS/super_ci.irp.f rename to plugins/CIS/super_ci.irp.f diff --git a/src/CIS/tree_dependency.png b/plugins/CIS/tree_dependency.png similarity index 100% rename from src/CIS/tree_dependency.png rename to plugins/CIS/tree_dependency.png diff --git a/src/CISD/.gitignore b/plugins/CISD/.gitignore similarity index 100% rename from src/CISD/.gitignore rename to plugins/CISD/.gitignore diff --git a/src/CISD/H_apply.irp.f b/plugins/CISD/H_apply.irp.f similarity index 100% rename from src/CISD/H_apply.irp.f rename to plugins/CISD/H_apply.irp.f diff --git a/src/CISD/NEEDED_CHILDREN_MODULES b/plugins/CISD/NEEDED_CHILDREN_MODULES similarity index 100% rename from src/CISD/NEEDED_CHILDREN_MODULES rename to plugins/CISD/NEEDED_CHILDREN_MODULES diff --git a/src/CISD/README.rst b/plugins/CISD/README.rst similarity index 100% rename from src/CISD/README.rst rename to plugins/CISD/README.rst diff --git a/src/CISD/cisd.irp.f b/plugins/CISD/cisd.irp.f similarity index 100% rename from src/CISD/cisd.irp.f rename to plugins/CISD/cisd.irp.f diff --git a/src/CISD/cisd_lapack.irp.f b/plugins/CISD/cisd_lapack.irp.f similarity index 100% rename from src/CISD/cisd_lapack.irp.f rename to plugins/CISD/cisd_lapack.irp.f diff --git a/src/CISD/tree_dependency.png b/plugins/CISD/tree_dependency.png similarity index 100% rename from src/CISD/tree_dependency.png rename to plugins/CISD/tree_dependency.png diff --git a/src/CISD_SC2_selected/.gitignore b/plugins/CISD_SC2_selected/.gitignore similarity index 100% rename from src/CISD_SC2_selected/.gitignore rename to plugins/CISD_SC2_selected/.gitignore diff --git a/src/CISD_SC2_selected/EZFIO.cfg b/plugins/CISD_SC2_selected/EZFIO.cfg similarity index 100% rename from src/CISD_SC2_selected/EZFIO.cfg rename to plugins/CISD_SC2_selected/EZFIO.cfg diff --git a/src/CISD_SC2_selected/H_apply.irp.f b/plugins/CISD_SC2_selected/H_apply.irp.f similarity index 100% rename from src/CISD_SC2_selected/H_apply.irp.f rename to plugins/CISD_SC2_selected/H_apply.irp.f diff --git a/src/CISD_SC2_selected/NEEDED_CHILDREN_MODULES b/plugins/CISD_SC2_selected/NEEDED_CHILDREN_MODULES similarity index 100% rename from src/CISD_SC2_selected/NEEDED_CHILDREN_MODULES rename to plugins/CISD_SC2_selected/NEEDED_CHILDREN_MODULES diff --git a/src/CISD_SC2_selected/README.rst b/plugins/CISD_SC2_selected/README.rst similarity index 100% rename from src/CISD_SC2_selected/README.rst rename to plugins/CISD_SC2_selected/README.rst diff --git a/src/CISD_SC2_selected/cisd_sc2_selection.irp.f b/plugins/CISD_SC2_selected/cisd_sc2_selection.irp.f similarity index 100% rename from src/CISD_SC2_selected/cisd_sc2_selection.irp.f rename to plugins/CISD_SC2_selected/cisd_sc2_selection.irp.f diff --git a/src/CISD_SC2_selected/tree_dependency.png b/plugins/CISD_SC2_selected/tree_dependency.png similarity index 100% rename from src/CISD_SC2_selected/tree_dependency.png rename to plugins/CISD_SC2_selected/tree_dependency.png diff --git a/src/CISD_selected/.gitignore b/plugins/CISD_selected/.gitignore similarity index 100% rename from src/CISD_selected/.gitignore rename to plugins/CISD_selected/.gitignore diff --git a/src/CISD_selected/H_apply.irp.f b/plugins/CISD_selected/H_apply.irp.f similarity index 100% rename from src/CISD_selected/H_apply.irp.f rename to plugins/CISD_selected/H_apply.irp.f diff --git a/src/CISD_selected/NEEDED_CHILDREN_MODULES b/plugins/CISD_selected/NEEDED_CHILDREN_MODULES similarity index 100% rename from src/CISD_selected/NEEDED_CHILDREN_MODULES rename to plugins/CISD_selected/NEEDED_CHILDREN_MODULES diff --git a/src/CISD_selected/README.rst b/plugins/CISD_selected/README.rst similarity index 100% rename from src/CISD_selected/README.rst rename to plugins/CISD_selected/README.rst diff --git a/src/CISD_selected/cisd_selection.irp.f b/plugins/CISD_selected/cisd_selection.irp.f similarity index 100% rename from src/CISD_selected/cisd_selection.irp.f rename to plugins/CISD_selected/cisd_selection.irp.f diff --git a/src/CISD_selected/tree_dependency.png b/plugins/CISD_selected/tree_dependency.png similarity index 100% rename from src/CISD_selected/tree_dependency.png rename to plugins/CISD_selected/tree_dependency.png diff --git a/src/DDCI_selected/.gitignore b/plugins/DDCI_selected/.gitignore similarity index 100% rename from src/DDCI_selected/.gitignore rename to plugins/DDCI_selected/.gitignore diff --git a/src/DDCI_selected/EZFIO.cfg b/plugins/DDCI_selected/EZFIO.cfg similarity index 100% rename from src/DDCI_selected/EZFIO.cfg rename to plugins/DDCI_selected/EZFIO.cfg diff --git a/src/DDCI_selected/H_apply.irp.f b/plugins/DDCI_selected/H_apply.irp.f similarity index 100% rename from src/DDCI_selected/H_apply.irp.f rename to plugins/DDCI_selected/H_apply.irp.f diff --git a/src/DDCI_selected/NEEDED_CHILDREN_MODULES b/plugins/DDCI_selected/NEEDED_CHILDREN_MODULES similarity index 100% rename from src/DDCI_selected/NEEDED_CHILDREN_MODULES rename to plugins/DDCI_selected/NEEDED_CHILDREN_MODULES diff --git a/src/DDCI_selected/README.rst b/plugins/DDCI_selected/README.rst similarity index 100% rename from src/DDCI_selected/README.rst rename to plugins/DDCI_selected/README.rst diff --git a/src/DDCI_selected/ddci.irp.f b/plugins/DDCI_selected/ddci.irp.f similarity index 100% rename from src/DDCI_selected/ddci.irp.f rename to plugins/DDCI_selected/ddci.irp.f diff --git a/src/DDCI_selected/tree_dependency.png b/plugins/DDCI_selected/tree_dependency.png similarity index 100% rename from src/DDCI_selected/tree_dependency.png rename to plugins/DDCI_selected/tree_dependency.png diff --git a/src/DensityFit/.gitignore b/plugins/DensityFit/.gitignore similarity index 100% rename from src/DensityFit/.gitignore rename to plugins/DensityFit/.gitignore diff --git a/src/DensityFit/NEEDED_CHILDREN_MODULES b/plugins/DensityFit/NEEDED_CHILDREN_MODULES similarity index 100% rename from src/DensityFit/NEEDED_CHILDREN_MODULES rename to plugins/DensityFit/NEEDED_CHILDREN_MODULES diff --git a/src/DensityFit/README.rst b/plugins/DensityFit/README.rst similarity index 100% rename from src/DensityFit/README.rst rename to plugins/DensityFit/README.rst diff --git a/src/DensityFit/aux_basis.ezfio_config b/plugins/DensityFit/aux_basis.ezfio_config similarity index 100% rename from src/DensityFit/aux_basis.ezfio_config rename to plugins/DensityFit/aux_basis.ezfio_config diff --git a/src/DensityFit/aux_basis.irp.f b/plugins/DensityFit/aux_basis.irp.f similarity index 100% rename from src/DensityFit/aux_basis.irp.f rename to plugins/DensityFit/aux_basis.irp.f diff --git a/src/DensityFit/overlap.irp.f b/plugins/DensityFit/overlap.irp.f similarity index 100% rename from src/DensityFit/overlap.irp.f rename to plugins/DensityFit/overlap.irp.f diff --git a/src/DensityFit/tree_dependency.png b/plugins/DensityFit/tree_dependency.png similarity index 100% rename from src/DensityFit/tree_dependency.png rename to plugins/DensityFit/tree_dependency.png diff --git a/src/DensityMatrix/.gitignore b/plugins/DensityMatrix/.gitignore similarity index 100% rename from src/DensityMatrix/.gitignore rename to plugins/DensityMatrix/.gitignore diff --git a/src/DensityMatrix/README.rst b/plugins/DensityMatrix/README.rst similarity index 100% rename from src/DensityMatrix/README.rst rename to plugins/DensityMatrix/README.rst diff --git a/src/DensityMatrix/density_matrix.irp.f b/plugins/DensityMatrix/density_matrix.irp.f similarity index 100% rename from src/DensityMatrix/density_matrix.irp.f rename to plugins/DensityMatrix/density_matrix.irp.f diff --git a/src/DensityMatrix/det_num.irp.f b/plugins/DensityMatrix/det_num.irp.f similarity index 100% rename from src/DensityMatrix/det_num.irp.f rename to plugins/DensityMatrix/det_num.irp.f diff --git a/src/FCIdump/.gitignore b/plugins/FCIdump/.gitignore similarity index 100% rename from src/FCIdump/.gitignore rename to plugins/FCIdump/.gitignore diff --git a/src/FCIdump/NEEDED_CHILDREN_MODULES b/plugins/FCIdump/NEEDED_CHILDREN_MODULES similarity index 100% rename from src/FCIdump/NEEDED_CHILDREN_MODULES rename to plugins/FCIdump/NEEDED_CHILDREN_MODULES diff --git a/src/FCIdump/README.rst b/plugins/FCIdump/README.rst similarity index 100% rename from src/FCIdump/README.rst rename to plugins/FCIdump/README.rst diff --git a/src/FCIdump/fcidump.irp.f b/plugins/FCIdump/fcidump.irp.f similarity index 100% rename from src/FCIdump/fcidump.irp.f rename to plugins/FCIdump/fcidump.irp.f diff --git a/src/FCIdump/tree_dependency.png b/plugins/FCIdump/tree_dependency.png similarity index 100% rename from src/FCIdump/tree_dependency.png rename to plugins/FCIdump/tree_dependency.png diff --git a/plugins/Full_CI/.gitignore b/plugins/Full_CI/.gitignore new file mode 100644 index 00000000..df7eac39 --- /dev/null +++ b/plugins/Full_CI/.gitignore @@ -0,0 +1,34 @@ +# +# Do not modify this file. Add your ignored files to the gitignore +# (without the dot at the beginning) file. +# +IRPF90_temp +IRPF90_man +irpf90.make +tags +Makefile.depend +irpf90_entities +build.ninja +.ninja_log +.ninja_deps +Generators_full +Pseudo +Integrals_Monoelec +Bitmask +Integrals_Bielec +AOs +Selectors_full +MOs +Hartree_Fock +Perturbation +Determinants +Electrons +Utils +Properties +Nuclei +MOGuess +Ezfio_files +target_pt2 +full_ci +var_pt2_ratio +full_ci_no_skip diff --git a/plugins/Full_CI/EZFIO.cfg b/plugins/Full_CI/EZFIO.cfg new file mode 100644 index 00000000..37f25eda --- /dev/null +++ b/plugins/Full_CI/EZFIO.cfg @@ -0,0 +1,10 @@ +[energy] +type: double precision +doc: Calculated Selected FCI energy +interface: output + +[energy_pt2] +type: double precision +doc: Calculated FCI energy + PT2 +interface: output + diff --git a/plugins/Full_CI/H_apply.irp.f b/plugins/Full_CI/H_apply.irp.f new file mode 100644 index 00000000..a755ad4a --- /dev/null +++ b/plugins/Full_CI/H_apply.irp.f @@ -0,0 +1,44 @@ +use bitmasks +BEGIN_SHELL [ /usr/bin/env python ] +from generate_h_apply import * + +s = H_apply("FCI") +s.set_selection_pt2("epstein_nesbet_2x2") +print s + +s = H_apply("FCI_PT2") +s.set_perturbation("epstein_nesbet_2x2") +print s + +s = H_apply("FCI_no_skip") +s.set_selection_pt2("epstein_nesbet_2x2") +s.unset_skip() +print s + +s = H_apply("FCI_mono") +s.set_selection_pt2("epstein_nesbet_2x2") +s.unset_double_excitations() +print s + + +s = H_apply("select_mono_delta_rho") +s.unset_double_excitations() +s.set_selection_pt2("delta_rho_one_point") +print s + +s = H_apply("pt2_mono_delta_rho") +s.unset_double_excitations() +s.set_perturbation("delta_rho_one_point") +print s + +s = H_apply("select_mono_di_delta_rho") +s.set_selection_pt2("delta_rho_one_point") +print s + +s = H_apply("pt2_mono_di_delta_rho") +s.set_perturbation("delta_rho_one_point") +print s + + +END_SHELL + diff --git a/src/MRCC/NEEDED_CHILDREN_MODULES b/plugins/Full_CI/NEEDED_CHILDREN_MODULES similarity index 100% rename from src/MRCC/NEEDED_CHILDREN_MODULES rename to plugins/Full_CI/NEEDED_CHILDREN_MODULES diff --git a/plugins/Full_CI/README.rst b/plugins/Full_CI/README.rst new file mode 100644 index 00000000..396fbcd6 --- /dev/null +++ b/plugins/Full_CI/README.rst @@ -0,0 +1,167 @@ +============== +Full_CI Module +============== + +Performs a perturbatively selected Full-CI. + +Documentation +============= + +.. Do not edit this section. It was auto-generated from the +.. by the `update_README.py` script. + +`full_ci `_ + Undocumented + + +`h_apply_fci `_ + Calls H_apply on the HF determinant and selects all connected single and double + excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script. + + +`h_apply_fci_diexc `_ + Generate all double excitations of key_in using the bit masks of holes and + particles. + Assume N_int is already provided. + + +`h_apply_fci_mono `_ + Calls H_apply on the HF determinant and selects all connected single and double + excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script. + + +`h_apply_fci_mono_diexc `_ + Generate all double excitations of key_in using the bit masks of holes and + particles. + Assume N_int is already provided. + + +`h_apply_fci_mono_monoexc `_ + Generate all single excitations of key_in using the bit masks of holes and + particles. + Assume N_int is already provided. + + +`h_apply_fci_monoexc `_ + Generate all single excitations of key_in using the bit masks of holes and + particles. + Assume N_int is already provided. + + +`h_apply_fci_no_skip `_ + Calls H_apply on the HF determinant and selects all connected single and double + excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script. + + +`h_apply_fci_no_skip_diexc `_ + Generate all double excitations of key_in using the bit masks of holes and + particles. + Assume N_int is already provided. + + +`h_apply_fci_no_skip_monoexc `_ + Generate all single excitations of key_in using the bit masks of holes and + particles. + Assume N_int is already provided. + + +`h_apply_fci_pt2 `_ + Calls H_apply on the HF determinant and selects all connected single and double + excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script. + + +`h_apply_fci_pt2_diexc `_ + Generate all double excitations of key_in using the bit masks of holes and + particles. + Assume N_int is already provided. + + +`h_apply_fci_pt2_monoexc `_ + Generate all single excitations of key_in using the bit masks of holes and + particles. + Assume N_int is already provided. + + +`h_apply_pt2_mono_delta_rho `_ + Calls H_apply on the HF determinant and selects all connected single and double + excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script. + + +`h_apply_pt2_mono_delta_rho_diexc `_ + Generate all double excitations of key_in using the bit masks of holes and + particles. + Assume N_int is already provided. + + +`h_apply_pt2_mono_delta_rho_monoexc `_ + Generate all single excitations of key_in using the bit masks of holes and + particles. + Assume N_int is already provided. + + +`h_apply_pt2_mono_di_delta_rho `_ + Calls H_apply on the HF determinant and selects all connected single and double + excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script. + + +`h_apply_pt2_mono_di_delta_rho_diexc `_ + Generate all double excitations of key_in using the bit masks of holes and + particles. + Assume N_int is already provided. + + +`h_apply_pt2_mono_di_delta_rho_monoexc `_ + Generate all single excitations of key_in using the bit masks of holes and + particles. + Assume N_int is already provided. + + +`h_apply_select_mono_delta_rho `_ + Calls H_apply on the HF determinant and selects all connected single and double + excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script. + + +`h_apply_select_mono_delta_rho_diexc `_ + Generate all double excitations of key_in using the bit masks of holes and + particles. + Assume N_int is already provided. + + +`h_apply_select_mono_delta_rho_monoexc `_ + Generate all single excitations of key_in using the bit masks of holes and + particles. + Assume N_int is already provided. + + +`h_apply_select_mono_di_delta_rho `_ + Calls H_apply on the HF determinant and selects all connected single and double + excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script. + + +`h_apply_select_mono_di_delta_rho_diexc `_ + Generate all double excitations of key_in using the bit masks of holes and + particles. + Assume N_int is already provided. + + +`h_apply_select_mono_di_delta_rho_monoexc `_ + Generate all single excitations of key_in using the bit masks of holes and + particles. + Assume N_int is already provided. + + +`var_pt2_ratio_run `_ + Undocumented + +Needed Modules +============== + +.. Do not edit this section. It was auto-generated from the +.. by the `update_README.py` script. + +.. image:: tree_dependency.png + +* `Perturbation `_ +* `Selectors_full `_ +* `Generators_full `_ + diff --git a/plugins/Full_CI/full_ci.irp.f b/plugins/Full_CI/full_ci.irp.f new file mode 100644 index 00000000..e2a9700e --- /dev/null +++ b/plugins/Full_CI/full_ci.irp.f @@ -0,0 +1,91 @@ +program full_ci + implicit none + integer :: i,k + + + double precision, allocatable :: pt2(:), norm_pert(:), H_pert_diag(:) + integer :: N_st, degree + N_st = N_states + allocate (pt2(N_st), norm_pert(N_st),H_pert_diag(N_st)) + character*(64) :: perturbation + + pt2 = 1.d0 + diag_algorithm = "Lapack" + if (N_det > N_det_max) then + call diagonalize_CI + call save_wavefunction + psi_det = psi_det_sorted + psi_coef = psi_coef_sorted + N_det = N_det_max + soft_touch N_det psi_det psi_coef + call diagonalize_CI + call save_wavefunction + print *, 'N_det = ', N_det + print *, 'N_states = ', N_states + print *, 'PT2 = ', pt2 + print *, 'E = ', CI_energy + print *, 'E+PT2 = ', CI_energy+pt2 + print *, '-----' + endif + double precision :: i_H_psi_array(N_states),diag_H_mat_elem,h,i_O1_psi_array(N_states) + if(read_wf)then + call i_H_psi(psi_det(1,1,N_det),psi_det,psi_coef,N_int,N_det,psi_det_size,N_states,i_H_psi_array) + h = diag_H_mat_elem(psi_det(1,1,N_det),N_int) + selection_criterion = dabs(psi_coef(N_det,1) * (i_H_psi_array(1) - h * psi_coef(N_det,1))) * 0.1d0 + soft_touch selection_criterion + endif + + + integer :: n_det_before + print*,'Beginning the selection ...' + do while (N_det < N_det_max.and.maxval(abs(pt2(1:N_st))) > pt2_max) + n_det_before = N_det + call H_apply_FCI(pt2, norm_pert, H_pert_diag, N_st) + + PROVIDE psi_coef + PROVIDE psi_det + PROVIDE psi_det_sorted + + if (N_det > N_det_max) then + psi_det = psi_det_sorted + psi_coef = psi_coef_sorted + N_det = N_det_max + soft_touch N_det psi_det psi_coef + endif + call diagonalize_CI + call save_wavefunction + if(n_det_before == N_det)then + selection_criterion = selection_criterion * 0.5d0 + endif + print *, 'N_det = ', N_det + print *, 'N_states = ', N_states + print *, 'PT2 = ', pt2 + print *, 'E = ', CI_energy + print *, 'E+PT2 = ', CI_energy+pt2 + print *, '-----' + call ezfio_set_full_ci_energy(CI_energy) + if (abort_all) then + exit + endif + enddo + N_det = min(N_det_max,N_det) + touch N_det psi_det psi_coef + call diagonalize_CI + if(do_pt2_end)then + print*,'Last iteration only to compute the PT2' + threshold_selectors = 1.d0 + threshold_generators = 0.999d0 + call H_apply_FCI_PT2(pt2, norm_pert, H_pert_diag, N_st) + + print *, 'Final step' + print *, 'N_det = ', N_det + print *, 'N_states = ', N_states + print *, 'PT2 = ', pt2 + print *, 'E = ', CI_energy + print *, 'E+PT2 = ', CI_energy+pt2 + print *, '-----' + call ezfio_set_full_ci_energy_pt2(CI_energy+pt2) + endif + call save_wavefunction + deallocate(pt2,norm_pert) +end diff --git a/plugins/Full_CI/full_ci_no_skip.irp.f b/plugins/Full_CI/full_ci_no_skip.irp.f new file mode 100644 index 00000000..73958bf9 --- /dev/null +++ b/plugins/Full_CI/full_ci_no_skip.irp.f @@ -0,0 +1,91 @@ +program full_ci + implicit none + integer :: i,k + + + double precision, allocatable :: pt2(:), norm_pert(:), H_pert_diag(:) + integer :: N_st, degree + N_st = N_states + allocate (pt2(N_st), norm_pert(N_st),H_pert_diag(N_st)) + character*(64) :: perturbation + + pt2 = 1.d0 + diag_algorithm = "Lapack" + if (N_det > N_det_max) then + call diagonalize_CI + call save_wavefunction + psi_det = psi_det_sorted + psi_coef = psi_coef_sorted + N_det = N_det_max + soft_touch N_det psi_det psi_coef + call diagonalize_CI + call save_wavefunction + print *, 'N_det = ', N_det + print *, 'N_states = ', N_states + print *, 'PT2 = ', pt2 + print *, 'E = ', CI_energy + print *, 'E+PT2 = ', CI_energy+pt2 + print *, '-----' + endif + double precision :: i_H_psi_array(N_states),diag_H_mat_elem,h,i_O1_psi_array(N_states) + if(read_wf)then + call i_H_psi(psi_det(1,1,N_det),psi_det,psi_coef,N_int,N_det,psi_det_size,N_states,i_H_psi_array) + h = diag_H_mat_elem(psi_det(1,1,N_det),N_int) + selection_criterion = dabs(psi_coef(N_det,1) * (i_H_psi_array(1) - h * psi_coef(N_det,1))) * 0.1d0 + soft_touch selection_criterion + endif + + + integer :: n_det_before + print*,'Beginning the selection ...' + do while (N_det < N_det_max.and.maxval(abs(pt2(1:N_st))) > pt2_max) + n_det_before = N_det + call H_apply_FCI_no_skip(pt2, norm_pert, H_pert_diag, N_st) + + PROVIDE psi_coef + PROVIDE psi_det + PROVIDE psi_det_sorted + + if (N_det > N_det_max) then + psi_det = psi_det_sorted + psi_coef = psi_coef_sorted + N_det = N_det_max + soft_touch N_det psi_det psi_coef + endif + call diagonalize_CI + call save_wavefunction + if(n_det_before == N_det)then + selection_criterion = selection_criterion * 0.5d0 + endif + print *, 'N_det = ', N_det + print *, 'N_states = ', N_states + print *, 'PT2 = ', pt2 + print *, 'E = ', CI_energy + print *, 'E+PT2 = ', CI_energy+pt2 + print *, '-----' + call ezfio_set_full_ci_energy(CI_energy) + if (abort_all) then + exit + endif + enddo + N_det = min(N_det_max,N_det) + touch N_det psi_det psi_coef + call diagonalize_CI + if(do_pt2_end)then + print*,'Last iteration only to compute the PT2' + threshold_selectors = 1.d0 + threshold_generators = 0.999d0 + call H_apply_FCI_PT2(pt2, norm_pert, H_pert_diag, N_st) + + print *, 'Final step' + print *, 'N_det = ', N_det + print *, 'N_states = ', N_states + print *, 'PT2 = ', pt2 + print *, 'E = ', CI_energy + print *, 'E+PT2 = ', CI_energy+pt2 + print *, '-----' + call ezfio_set_full_ci_energy_pt2(CI_energy+pt2) + endif + call save_wavefunction + deallocate(pt2,norm_pert) +end diff --git a/plugins/Full_CI/target_pt2.irp.f b/plugins/Full_CI/target_pt2.irp.f new file mode 100644 index 00000000..c0420e20 --- /dev/null +++ b/plugins/Full_CI/target_pt2.irp.f @@ -0,0 +1,76 @@ +program var_pt2_ratio_run + implicit none + integer :: i,k + + + double precision, allocatable :: pt2(:), norm_pert(:), H_pert_diag(:) + integer :: N_st, degree + N_st = N_states + allocate (pt2(N_st), norm_pert(N_st),H_pert_diag(N_st)) + character*(64) :: perturbation + + double precision, allocatable :: psi_det_save(:,:,:), psi_coef_save(:,:) + + double precision :: E_fci, E_var, ratio, E_ref + integer :: Nmin, Nmax + + pt2 = -(pt2_max+1.d0) + diag_algorithm = "Lapack" + + ratio = 0.d0 + Nmin=1 + do while (dabs(pt2(1)) > pt2_max) + call H_apply_FCI(pt2, norm_pert, H_pert_diag, N_st) + psi_det = psi_det_sorted + psi_coef = psi_coef_sorted + soft_touch N_det psi_det psi_coef + call diagonalize_CI + ratio = (CI_energy(1) - HF_energy) / (CI_energy(1)+pt2(1) - HF_energy) + enddo + + threshold_selectors = 1.d0 + threshold_generators = 0.999d0 + call diagonalize_CI + call H_apply_FCI_PT2(pt2, norm_pert, H_pert_diag, N_st) + E_ref = CI_energy(1) + pt2(1) + threshold_selectors = 0.99d0 + threshold_generators = 0.98d0 + + var_pt2_ratio = (E_ref + pt2_max - HF_energy) / (E_ref - HF_energy) + TOUCH var_pt2_ratio + + Nmax=max(10000,3*N_det) + Nmin=1 + do while (Nmax-Nmin > 1) + ratio = (CI_energy(1) - HF_energy) / (E_ref - HF_energy) + + if (ratio < var_pt2_ratio) then + Nmin = N_det +! Nmax = max(Nmax,Nmin+10) + ! Select new determinants + call H_apply_FCI(pt2, norm_pert, H_pert_diag, N_st) + N_det = min(N_det,Nmax) + else + Nmax = N_det + N_det = Nmin + (Nmax-Nmin)/2 + endif + + psi_det = psi_det_sorted + psi_coef = psi_coef_sorted + soft_touch N_det psi_det psi_coef + call diagonalize_CI + call save_wavefunction + print *, 'Det min, Det max: ', Nmin, Nmax + print *, 'Ratio : ', ratio, ' ~ ', var_pt2_ratio + print *, 'HF_energy = ', HF_energy + print *, 'Est FCI = ', E_ref + print *, 'PT2 = ', pt2(1) + print *, 'N_det = ', N_det + print *, 'E = ', CI_energy(1) + call ezfio_set_full_ci_energy(CI_energy) + if (abort_all) then + exit + endif + enddo + deallocate(pt2,norm_pert) +end diff --git a/plugins/Full_CI/tree_dependency.png b/plugins/Full_CI/tree_dependency.png new file mode 100644 index 0000000000000000000000000000000000000000..7696fea7c3bf6c34f7793bc5d4c2063139286c1b GIT binary patch literal 102882 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 1) + ratio = (CI_energy(1) - HF_energy) / (E_ref - HF_energy) + + if (ratio < var_pt2_ratio) then + Nmin = N_det + Nmax = max(Nmax,Nmin+10) + ! Select new determinants + call H_apply_FCI(pt2, norm_pert, H_pert_diag, N_st) + else + Nmax = N_det + N_det = Nmin + (Nmax-Nmin)/2 + endif + + psi_det = psi_det_sorted + psi_coef = psi_coef_sorted + soft_touch N_det psi_det psi_coef + call diagonalize_CI + call save_wavefunction + print *, 'Det min, Det max: ', Nmin, Nmax + print *, 'Ratio : ', ratio, ' ~ ', var_pt2_ratio + print *, 'HF_energy = ', HF_energy + print *, 'Est FCI = ', E_ref + print *, 'N_det = ', N_det + print *, 'E = ', CI_energy(1) + call ezfio_set_full_ci_energy(CI_energy) + if (abort_all) then + exit + endif + enddo + deallocate(pt2,norm_pert) +end diff --git a/src/Generators_CAS/.gitignore b/plugins/Generators_CAS/.gitignore similarity index 100% rename from src/Generators_CAS/.gitignore rename to plugins/Generators_CAS/.gitignore diff --git a/src/Generators_CAS/NEEDED_CHILDREN_MODULES b/plugins/Generators_CAS/NEEDED_CHILDREN_MODULES similarity index 100% rename from src/Generators_CAS/NEEDED_CHILDREN_MODULES rename to plugins/Generators_CAS/NEEDED_CHILDREN_MODULES diff --git a/src/Generators_CAS/README.rst b/plugins/Generators_CAS/README.rst similarity index 100% rename from src/Generators_CAS/README.rst rename to plugins/Generators_CAS/README.rst diff --git a/src/Generators_CAS/generators.irp.f b/plugins/Generators_CAS/generators.irp.f similarity index 100% rename from src/Generators_CAS/generators.irp.f rename to plugins/Generators_CAS/generators.irp.f diff --git a/src/Generators_CAS/tree_dependency.png b/plugins/Generators_CAS/tree_dependency.png similarity index 100% rename from src/Generators_CAS/tree_dependency.png rename to plugins/Generators_CAS/tree_dependency.png diff --git a/src/Generators_full/.gitignore b/plugins/Generators_full/.gitignore similarity index 100% rename from src/Generators_full/.gitignore rename to plugins/Generators_full/.gitignore diff --git a/src/Generators_full/NEEDED_CHILDREN_MODULES b/plugins/Generators_full/NEEDED_CHILDREN_MODULES similarity index 100% rename from src/Generators_full/NEEDED_CHILDREN_MODULES rename to plugins/Generators_full/NEEDED_CHILDREN_MODULES diff --git a/src/Generators_full/README.rst b/plugins/Generators_full/README.rst similarity index 100% rename from src/Generators_full/README.rst rename to plugins/Generators_full/README.rst diff --git a/src/Generators_full/generators.irp.f b/plugins/Generators_full/generators.irp.f similarity index 100% rename from src/Generators_full/generators.irp.f rename to plugins/Generators_full/generators.irp.f diff --git a/src/Generators_full/tree_dependency.png b/plugins/Generators_full/tree_dependency.png similarity index 100% rename from src/Generators_full/tree_dependency.png rename to plugins/Generators_full/tree_dependency.png diff --git a/src/Generators_restart/.gitignore b/plugins/Generators_restart/.gitignore similarity index 100% rename from src/Generators_restart/.gitignore rename to plugins/Generators_restart/.gitignore diff --git a/src/Generators_restart/NEEDED_CHILDREN_MODULES b/plugins/Generators_restart/NEEDED_CHILDREN_MODULES similarity index 100% rename from src/Generators_restart/NEEDED_CHILDREN_MODULES rename to plugins/Generators_restart/NEEDED_CHILDREN_MODULES diff --git a/src/Generators_restart/README.rst b/plugins/Generators_restart/README.rst similarity index 100% rename from src/Generators_restart/README.rst rename to plugins/Generators_restart/README.rst diff --git a/src/Generators_restart/generators.irp.f b/plugins/Generators_restart/generators.irp.f similarity index 100% rename from src/Generators_restart/generators.irp.f rename to plugins/Generators_restart/generators.irp.f diff --git a/src/Generators_restart/tree_dependency.png b/plugins/Generators_restart/tree_dependency.png similarity index 100% rename from src/Generators_restart/tree_dependency.png rename to plugins/Generators_restart/tree_dependency.png diff --git a/plugins/Hartree_Fock/.gitignore b/plugins/Hartree_Fock/.gitignore new file mode 100644 index 00000000..0197ab71 --- /dev/null +++ b/plugins/Hartree_Fock/.gitignore @@ -0,0 +1,26 @@ +# +# Do not modify this file. Add your ignored files to the gitignore +# (without the dot at the beginning) file. +# +IRPF90_temp +IRPF90_man +irpf90.make +tags +Makefile.depend +irpf90_entities +build.ninja +.ninja_log +.ninja_deps +Pseudo +Integrals_Monoelec +Bitmask +Integrals_Bielec +AOs +MOs +Electrons +Utils +Nuclei +MOGuess +Ezfio_files +Huckel_guess +SCF diff --git a/plugins/Hartree_Fock/EZFIO.cfg b/plugins/Hartree_Fock/EZFIO.cfg new file mode 100644 index 00000000..e2b0ea5a --- /dev/null +++ b/plugins/Hartree_Fock/EZFIO.cfg @@ -0,0 +1,22 @@ +[thresh_scf] +type: Threshold +doc: Threshold on the convergence of the Hartree Fock energy +interface: input +default: 1.e-10 + +[n_it_scf_max] +type: Strictly_positive_int +doc: Maximum number of SCF iterations +interface: input +default: 200 + +[mo_guess_type] +type: MO_guess +doc: Initial MO guess. Can be [ Huckel | HCore ] +interface: input +default: Huckel + +[energy] +type: double precision +doc: Calculated HF energy +interface: output diff --git a/plugins/Hartree_Fock/Fock_matrix.irp.f b/plugins/Hartree_Fock/Fock_matrix.irp.f new file mode 100644 index 00000000..7dd349b1 --- /dev/null +++ b/plugins/Hartree_Fock/Fock_matrix.irp.f @@ -0,0 +1,364 @@ + BEGIN_PROVIDER [ double precision, Fock_matrix_mo, (mo_tot_num_align,mo_tot_num) ] +&BEGIN_PROVIDER [ double precision, Fock_matrix_diag_mo, (mo_tot_num)] + implicit none + BEGIN_DOC + ! Fock matrix on the MO basis. + ! For open shells, the ROHF Fock Matrix is + ! + ! | F-K | F + K/2 | F | + ! |---------------------------------| + ! | F + K/2 | F | F - K/2 | + ! |---------------------------------| + ! | F | F - K/2 | F + K | + ! + ! F = 1/2 (Fa + Fb) + ! + ! K = Fb - Fa + ! + END_DOC + integer :: i,j,n + if (elec_alpha_num == elec_beta_num) then + Fock_matrix_mo = Fock_matrix_alpha_mo + else + + do j=1,elec_beta_num + ! F-K + do i=1,elec_beta_num + Fock_matrix_mo(i,j) = 0.5d0*(Fock_matrix_alpha_mo(i,j)+Fock_matrix_beta_mo(i,j))& + - (Fock_matrix_beta_mo(i,j) - Fock_matrix_alpha_mo(i,j)) + enddo + ! F+K/2 + do i=elec_beta_num+1,elec_alpha_num + Fock_matrix_mo(i,j) = 0.5d0*(Fock_matrix_alpha_mo(i,j)+Fock_matrix_beta_mo(i,j))& + + 0.5d0*(Fock_matrix_beta_mo(i,j) - Fock_matrix_alpha_mo(i,j)) + enddo + ! F + do i=elec_alpha_num+1, mo_tot_num + Fock_matrix_mo(i,j) = 0.5d0*(Fock_matrix_alpha_mo(i,j)+Fock_matrix_beta_mo(i,j)) + enddo + enddo + + do j=elec_beta_num+1,elec_alpha_num + ! F+K/2 + do i=1,elec_beta_num + Fock_matrix_mo(i,j) = 0.5d0*(Fock_matrix_alpha_mo(i,j)+Fock_matrix_beta_mo(i,j))& + + 0.5d0*(Fock_matrix_beta_mo(i,j) - Fock_matrix_alpha_mo(i,j)) + enddo + ! F + do i=elec_beta_num+1,elec_alpha_num + Fock_matrix_mo(i,j) = 0.5d0*(Fock_matrix_alpha_mo(i,j)+Fock_matrix_beta_mo(i,j)) + enddo + ! F-K/2 + do i=elec_alpha_num+1, mo_tot_num + Fock_matrix_mo(i,j) = 0.5d0*(Fock_matrix_alpha_mo(i,j)+Fock_matrix_beta_mo(i,j))& + - 0.5d0*(Fock_matrix_beta_mo(i,j) - Fock_matrix_alpha_mo(i,j)) + enddo + enddo + + do j=elec_alpha_num+1, mo_tot_num + ! F + do i=1,elec_beta_num + Fock_matrix_mo(i,j) = 0.5d0*(Fock_matrix_alpha_mo(i,j)+Fock_matrix_beta_mo(i,j)) + enddo + ! F-K/2 + do i=elec_beta_num+1,elec_alpha_num + Fock_matrix_mo(i,j) = 0.5d0*(Fock_matrix_alpha_mo(i,j)+Fock_matrix_beta_mo(i,j))& + - 0.5d0*(Fock_matrix_beta_mo(i,j) - Fock_matrix_alpha_mo(i,j)) + enddo + ! F+K + do i=elec_alpha_num+1,mo_tot_num + Fock_matrix_mo(i,j) = 0.5d0*(Fock_matrix_alpha_mo(i,j)+Fock_matrix_beta_mo(i,j)) & + + (Fock_matrix_beta_mo(i,j) - Fock_matrix_alpha_mo(i,j)) + enddo + enddo + + endif + do i = 1, mo_tot_num + Fock_matrix_diag_mo(i) = Fock_matrix_mo(i,i) + enddo +END_PROVIDER + + + + BEGIN_PROVIDER [ double precision, Fock_matrix_alpha_ao, (ao_num_align, ao_num) ] +&BEGIN_PROVIDER [ double precision, Fock_matrix_beta_ao, (ao_num_align, ao_num) ] + implicit none + BEGIN_DOC + ! Alpha Fock matrix in AO basis set + END_DOC + + integer :: i,j + do j=1,ao_num + !DIR$ VECTOR ALIGNED + do i=1,ao_num + Fock_matrix_alpha_ao(i,j) = ao_mono_elec_integral(i,j) + ao_bi_elec_integral_alpha(i,j) + Fock_matrix_beta_ao (i,j) = ao_mono_elec_integral(i,j) + ao_bi_elec_integral_beta (i,j) + enddo + enddo + +END_PROVIDER + + + BEGIN_PROVIDER [ double precision, ao_bi_elec_integral_alpha, (ao_num_align, ao_num) ] +&BEGIN_PROVIDER [ double precision, ao_bi_elec_integral_beta , (ao_num_align, ao_num) ] + use map_module + implicit none + BEGIN_DOC + ! Alpha Fock matrix in AO basis set + END_DOC + + integer :: i,j,k,l,k1,r,s + integer*8 :: p,q + double precision :: integral + double precision :: ao_bielec_integral + if (do_direct_integrals) then + + ao_bi_elec_integral_alpha = 0.d0 + ao_bi_elec_integral_beta = 0.d0 + !$OMP PARALLEL DEFAULT(NONE) & + !$OMP PRIVATE(i,j,l,k1,k,integral,ii,jj,kk,ll,i8,keys,values,p,q,r,s)& + !$OMP SHARED(ao_num,HF_density_matrix_ao_alpha,HF_density_matrix_ao_beta,& + !$OMP ao_integrals_map,ao_integrals_threshold, ao_bielec_integral_schwartz, & + !$OMP ao_overlap_abs) & + !$OMP REDUCTION(+:ao_bi_elec_integral_alpha,ao_bi_elec_integral_beta) + + allocate(keys(1), values(1)) + + q = ao_num*ao_num*ao_num*ao_num + !$OMP DO SCHEDULE(dynamic) + do p=1_8,q + call bielec_integrals_index_reverse(kk,ii,ll,jj,p) + if ( (kk(1)>ao_num).or. & + (ii(1)>ao_num).or. & + (jj(1)>ao_num).or. & + (ll(1)>ao_num) ) then + cycle + endif + k = kk(1) + i = ii(1) + l = ll(1) + j = jj(1) + + if (ao_overlap_abs(k,l)*ao_overlap_abs(i,j) & + < ao_integrals_threshold) then + cycle + endif + if (ao_bielec_integral_schwartz(k,l)*ao_bielec_integral_schwartz(i,j) & + < ao_integrals_threshold) then + cycle + endif + values(1) = ao_bielec_integral(k,l,i,j) + if (abs(values(1)) < ao_integrals_threshold) then + cycle + endif + do k2=1,8 + if (kk(k2)==0) then + cycle + endif + i = ii(k2) + j = jj(k2) + k = kk(k2) + l = ll(k2) + integral = (HF_density_matrix_ao_alpha(k,l)+HF_density_matrix_ao_beta(k,l)) * values(1) + ao_bi_elec_integral_alpha(i,j) += integral + ao_bi_elec_integral_beta (i,j) += integral + integral = values(1) + ao_bi_elec_integral_alpha(l,j) -= HF_density_matrix_ao_alpha(k,i) * integral + ao_bi_elec_integral_beta (l,j) -= HF_density_matrix_ao_beta (k,i) * integral + enddo + enddo + !$OMP END DO + deallocate(keys,values) + !$OMP END PARALLEL + else + PROVIDE ao_bielec_integrals_in_map + + integer(omp_lock_kind) :: lck(ao_num) + integer*8 :: i8 + integer :: ii(8), jj(8), kk(8), ll(8), k2 + integer(cache_map_size_kind) :: n_elements_max, n_elements + integer(key_kind), allocatable :: keys(:) + double precision, allocatable :: values(:) + + ao_bi_elec_integral_alpha = 0.d0 + ao_bi_elec_integral_beta = 0.d0 + !$OMP PARALLEL DEFAULT(NONE) & + !$OMP PRIVATE(i,j,l,k1,k,integral,ii,jj,kk,ll,i8,keys,values,n_elements_max,n_elements)& + !$OMP SHARED(ao_num,HF_density_matrix_ao_alpha,HF_density_matrix_ao_beta,& + !$OMP ao_integrals_map) & + !$OMP REDUCTION(+:ao_bi_elec_integral_alpha,ao_bi_elec_integral_beta) + + call get_cache_map_n_elements_max(ao_integrals_map,n_elements_max) + allocate(keys(n_elements_max), values(n_elements_max)) + + !$OMP DO SCHEDULE(dynamic) + do i8=0_8,ao_integrals_map%map_size + n_elements = n_elements_max + call get_cache_map(ao_integrals_map,i8,keys,values,n_elements) + do k1=1,n_elements + call bielec_integrals_index_reverse(kk,ii,ll,jj,keys(k1)) + + do k2=1,8 + if (kk(k2)==0) then + cycle + endif + i = ii(k2) + j = jj(k2) + k = kk(k2) + l = ll(k2) + integral = (HF_density_matrix_ao_alpha(k,l)+HF_density_matrix_ao_beta(k,l)) * values(k1) + ao_bi_elec_integral_alpha(i,j) += integral + ao_bi_elec_integral_beta (i,j) += integral + integral = values(k1) + ao_bi_elec_integral_alpha(l,j) -= HF_density_matrix_ao_alpha(k,i) * integral + ao_bi_elec_integral_beta (l,j) -= HF_density_matrix_ao_beta (k,i) * integral + enddo + enddo + enddo + !$OMP END DO + deallocate(keys,values) + !$OMP END PARALLEL + + endif + +END_PROVIDER + + + + + + +BEGIN_PROVIDER [ double precision, Fock_matrix_alpha_mo, (mo_tot_num_align,mo_tot_num) ] + implicit none + BEGIN_DOC + ! Fock matrix on the MO basis + END_DOC + double precision, allocatable :: T(:,:) + allocate ( T(ao_num_align,mo_tot_num) ) + !DIR$ ATTRIBUTES ALIGN : $IRP_ALIGN :: T + call dgemm('N','N', ao_num, mo_tot_num, ao_num, & + 1.d0, Fock_matrix_alpha_ao,size(Fock_matrix_alpha_ao,1), & + mo_coef, size(mo_coef,1), & + 0.d0, T, ao_num_align) + call dgemm('T','N', mo_tot_num, mo_tot_num, ao_num, & + 1.d0, mo_coef,size(mo_coef,1), & + T, size(T,1), & + 0.d0, Fock_matrix_alpha_mo, mo_tot_num_align) + deallocate(T) +END_PROVIDER + + +BEGIN_PROVIDER [ double precision, Fock_matrix_beta_mo, (mo_tot_num_align,mo_tot_num) ] + implicit none + BEGIN_DOC + ! Fock matrix on the MO basis + END_DOC + double precision, allocatable :: T(:,:) + allocate ( T(ao_num_align,mo_tot_num) ) + !DIR$ ATTRIBUTES ALIGN : $IRP_ALIGN :: T + call dgemm('N','N', ao_num, mo_tot_num, ao_num, & + 1.d0, Fock_matrix_beta_ao,size(Fock_matrix_beta_ao,1), & + mo_coef, size(mo_coef,1), & + 0.d0, T, ao_num_align) + call dgemm('T','N', mo_tot_num, mo_tot_num, ao_num, & + 1.d0, mo_coef,size(mo_coef,1), & + T, size(T,1), & + 0.d0, Fock_matrix_beta_mo, mo_tot_num_align) + deallocate(T) +END_PROVIDER + +BEGIN_PROVIDER [ double precision, HF_energy ] + implicit none + BEGIN_DOC + ! Hartree-Fock energy + END_DOC + HF_energy = nuclear_repulsion + + integer :: i,j + do j=1,ao_num + do i=1,ao_num + HF_energy += 0.5d0 * ( & + (ao_mono_elec_integral(i,j) + Fock_matrix_alpha_ao(i,j) ) * HF_density_matrix_ao_alpha(i,j) +& + (ao_mono_elec_integral(i,j) + Fock_matrix_beta_ao (i,j) ) * HF_density_matrix_ao_beta (i,j) ) + enddo + enddo + +END_PROVIDER + + +BEGIN_PROVIDER [ double precision, Fock_matrix_ao, (ao_num_align, ao_num) ] + implicit none + BEGIN_DOC + ! Fock matrix in AO basis set + END_DOC + + if (elec_alpha_num == elec_beta_num) then + integer :: i,j + do j=1,ao_num + !DIR$ VECTOR ALIGNED + do i=1,ao_num_align + Fock_matrix_ao(i,j) = Fock_matrix_alpha_ao(i,j) + enddo + enddo + else + double precision, allocatable :: T(:,:), M(:,:) + ! F_ao = S C F_mo C^t S + allocate (T(ao_num_align,ao_num),M(ao_num_align,ao_num)) + call dgemm('N','N', ao_num,ao_num,ao_num, 1.d0, & + ao_overlap, size(ao_overlap,1), & + mo_coef, size(mo_coef,1), & + 0.d0, & + M, size(M,1)) + call dgemm('N','N', ao_num,mo_tot_num,mo_tot_num, 1.d0, & + M, size(M,1), & + Fock_matrix_mo, size(Fock_matrix_mo,1), & + 0.d0, & + T, size(T,1)) + call dgemm('N','T', mo_tot_num,ao_num,mo_tot_num, 1.d0, & + T, size(T,1), & + mo_coef, size(mo_coef,1), & + 0.d0, & + M, size(M,1)) + call dgemm('N','N', ao_num,ao_num,ao_num, 1.d0, & + M, size(M,1), & + ao_overlap, size(ao_overlap,1), & + 0.d0, & + Fock_matrix_ao, size(Fock_matrix_ao,1)) + + deallocate(T) + endif +END_PROVIDER + +subroutine Fock_mo_to_ao(FMO,LDFMO,FAO,LDFAO) + implicit none + integer, intent(in) :: LDFMO ! size(FMO,1) + integer, intent(in) :: LDFAO ! size(FAO,1) + double precision, intent(in) :: FMO(LDFMO,*) + double precision, intent(out) :: FAO(LDFAO,*) + + double precision, allocatable :: T(:,:), M(:,:) + ! F_ao = S C F_mo C^t S + allocate (T(ao_num_align,ao_num),M(ao_num_align,ao_num)) + call dgemm('N','N', ao_num,ao_num,ao_num, 1.d0, & + ao_overlap, size(ao_overlap,1), & + mo_coef, size(mo_coef,1), & + 0.d0, & + M, size(M,1)) + call dgemm('N','N', ao_num,mo_tot_num,mo_tot_num, 1.d0, & + M, size(M,1), & + FMO, size(FMO,1), & + 0.d0, & + T, size(T,1)) + call dgemm('N','T', mo_tot_num,ao_num,mo_tot_num, 1.d0, & + T, size(T,1), & + mo_coef, size(mo_coef,1), & + 0.d0, & + M, size(M,1)) + call dgemm('N','N', ao_num,ao_num,ao_num, 1.d0, & + M, size(M,1), & + ao_overlap, size(ao_overlap,1), & + 0.d0, & + FAO, size(FAO,1)) + deallocate(T,M) +end + diff --git a/plugins/Hartree_Fock/HF_density_matrix_ao.irp.f b/plugins/Hartree_Fock/HF_density_matrix_ao.irp.f new file mode 100644 index 00000000..e8585f59 --- /dev/null +++ b/plugins/Hartree_Fock/HF_density_matrix_ao.irp.f @@ -0,0 +1,41 @@ +BEGIN_PROVIDER [ double precision, HF_density_matrix_ao_alpha, (ao_num_align,ao_num) ] + implicit none + BEGIN_DOC + ! S^-1 x Alpha density matrix in the AO basis x S^-1 + END_DOC + + call dgemm('N','T',ao_num,ao_num,elec_alpha_num,1.d0, & + mo_coef, size(mo_coef,1), & + mo_coef, size(mo_coef,1), 0.d0, & + HF_density_matrix_ao_alpha, size(HF_density_matrix_ao_alpha,1)) + +END_PROVIDER + +BEGIN_PROVIDER [ double precision, HF_density_matrix_ao_beta, (ao_num_align,ao_num) ] + implicit none + BEGIN_DOC + ! S^-1 Beta density matrix in the AO basis x S^-1 + END_DOC + + call dgemm('N','T',ao_num,ao_num,elec_beta_num,1.d0, & + mo_coef, size(mo_coef,1), & + mo_coef, size(mo_coef,1), 0.d0, & + HF_density_matrix_ao_beta, size(HF_density_matrix_ao_beta,1)) + +END_PROVIDER + +BEGIN_PROVIDER [ double precision, HF_density_matrix_ao, (ao_num_align,ao_num) ] + implicit none + BEGIN_DOC + ! S^-1 Density matrix in the AO basis S^-1 + END_DOC + ASSERT (size(HF_density_matrix_ao,1) == size(HF_density_matrix_ao_alpha,1)) + if (elec_alpha_num== elec_beta_num) then + HF_density_matrix_ao = HF_density_matrix_ao_alpha + HF_density_matrix_ao_alpha + else + ASSERT (size(HF_density_matrix_ao,1) == size(HF_density_matrix_ao_beta ,1)) + HF_density_matrix_ao = HF_density_matrix_ao_alpha + HF_density_matrix_ao_beta + endif + +END_PROVIDER + diff --git a/plugins/Hartree_Fock/Hartree_Fock b/plugins/Hartree_Fock/Hartree_Fock new file mode 120000 index 00000000..ca3fae3a --- /dev/null +++ b/plugins/Hartree_Fock/Hartree_Fock @@ -0,0 +1 @@ +/home/razoa/quantum_package/bulk/Hartree_Fock \ No newline at end of file diff --git a/plugins/Hartree_Fock/Huckel_guess.irp.f b/plugins/Hartree_Fock/Huckel_guess.irp.f new file mode 100644 index 00000000..ed264005 --- /dev/null +++ b/plugins/Hartree_Fock/Huckel_guess.irp.f @@ -0,0 +1,6 @@ +program guess + implicit none + character*(64) :: label + call huckel_guess + +end diff --git a/plugins/Hartree_Fock/NEEDED_CHILDREN_MODULES b/plugins/Hartree_Fock/NEEDED_CHILDREN_MODULES new file mode 100644 index 00000000..784cb0fb --- /dev/null +++ b/plugins/Hartree_Fock/NEEDED_CHILDREN_MODULES @@ -0,0 +1 @@ +Integrals_Bielec MOGuess diff --git a/plugins/Hartree_Fock/README.rst b/plugins/Hartree_Fock/README.rst new file mode 100644 index 00000000..4dacf17c --- /dev/null +++ b/plugins/Hartree_Fock/README.rst @@ -0,0 +1,152 @@ +=================== +Hartree-Fock Module +=================== + +From the 140 molecules of the G2 set, only LiO, ONa don't converge well. + +Needed Modules +============== + +.. Do not edit this section. It was auto-generated from the +.. by the `update_README.py` script. + +.. image:: tree_dependency.png + +* `Integrals_Bielec `_ +* `MOGuess `_ + +Documentation +============= + +.. Do not edit this section. It was auto-generated from the +.. by the `update_README.py` script. + +`ao_bi_elec_integral_alpha `_ + Alpha Fock matrix in AO basis set + + +`ao_bi_elec_integral_beta `_ + Alpha Fock matrix in AO basis set + + +`create_guess `_ + Create an MO guess if no MOs are present in the EZFIO directory + + +`damping_scf `_ + Undocumented + + +`diagonal_fock_matrix_mo `_ + Diagonal Fock matrix in the MO basis + + +`diagonal_fock_matrix_mo_sum `_ + diagonal element of the fock matrix calculated as the sum over all the interactions + with all the electrons in the RHF determinant + diagonal_Fock_matrix_mo_sum(i) = sum_{j=1, N_elec} 2 J_ij -K_ij + + +`eigenvectors_fock_matrix_mo `_ + Diagonal Fock matrix in the MO basis + + +`fock_matrix_alpha_ao `_ + Alpha Fock matrix in AO basis set + + +`fock_matrix_alpha_mo `_ + Fock matrix on the MO basis + + +`fock_matrix_ao `_ + Fock matrix in AO basis set + + +`fock_matrix_beta_ao `_ + Alpha Fock matrix in AO basis set + + +`fock_matrix_beta_mo `_ + Fock matrix on the MO basis + + +`fock_matrix_diag_mo `_ + Fock matrix on the MO basis. + For open shells, the ROHF Fock Matrix is + .br + | F-K | F + K/2 | F | + |---------------------------------| + | F + K/2 | F | F - K/2 | + |---------------------------------| + | F | F - K/2 | F + K | + .br + F = 1/2 (Fa + Fb) + .br + K = Fb - Fa + .br + + +`fock_matrix_mo `_ + Fock matrix on the MO basis. + For open shells, the ROHF Fock Matrix is + .br + | F-K | F + K/2 | F | + |---------------------------------| + | F + K/2 | F | F - K/2 | + |---------------------------------| + | F | F - K/2 | F + K | + .br + F = 1/2 (Fa + Fb) + .br + K = Fb - Fa + .br + + +`fock_mo_to_ao `_ + Undocumented + + +`guess `_ + Undocumented + + +`hf_density_matrix_ao `_ + S^-1 Density matrix in the AO basis S^-1 + + +`hf_density_matrix_ao_alpha `_ + S^-1 x Alpha density matrix in the AO basis x S^-1 + + +`hf_density_matrix_ao_beta `_ + S^-1 Beta density matrix in the AO basis x S^-1 + + +`hf_energy `_ + Hartree-Fock energy + + +`huckel_guess `_ + Build the MOs using the extended Huckel model + + +`mo_guess_type `_ + Initial MO guess. Can be [ Huckel | HCore ] + + +`n_it_scf_max `_ + Maximum number of SCF iterations + + +`run `_ + Run SCF calculation + + +`scf `_ + Undocumented + + +`thresh_scf `_ + Threshold on the convergence of the Hartree Fock energy + diff --git a/plugins/Hartree_Fock/SCF.irp.f b/plugins/Hartree_Fock/SCF.irp.f new file mode 100644 index 00000000..33e1ac6c --- /dev/null +++ b/plugins/Hartree_Fock/SCF.irp.f @@ -0,0 +1,52 @@ + +program scf + call create_guess + call orthonormalize_mos + call run +end + +subroutine create_guess + implicit none + BEGIN_DOC +! Create an MO guess if no MOs are present in the EZFIO directory + END_DOC + logical :: exists + PROVIDE ezfio_filename + call ezfio_has_mo_basis_mo_coef(exists) + if (.not.exists) then + if (mo_guess_type == "HCore") then + mo_coef = ao_ortho_lowdin_coef + TOUCH mo_coef + mo_label = 'Guess' + call mo_as_eigvectors_of_mo_matrix(mo_mono_elec_integral,size(mo_mono_elec_integral,1),size(mo_mono_elec_integral,2),mo_label) + SOFT_TOUCH mo_coef mo_label + else if (mo_guess_type == "Huckel") then + call huckel_guess + else + print *, 'Unrecognized MO guess type : '//mo_guess_type + stop 1 + endif + endif +end + + +subroutine run + + use bitmasks + implicit none + BEGIN_DOC +! Run SCF calculation + END_DOC + double precision :: SCF_energy_before,SCF_energy_after,diag_H_mat_elem,get_mo_bielec_integral + double precision :: E0 + integer :: i_it, i, j, k + + E0 = HF_energy + + thresh_SCF = 1.d-10 + call damping_SCF + mo_label = "Canonical" + TOUCH mo_label mo_coef + call save_mos + +end diff --git a/plugins/Hartree_Fock/damping_SCF.irp.f b/plugins/Hartree_Fock/damping_SCF.irp.f new file mode 100644 index 00000000..d55bc8b8 --- /dev/null +++ b/plugins/Hartree_Fock/damping_SCF.irp.f @@ -0,0 +1,127 @@ +subroutine damping_SCF + implicit none + double precision :: E + double precision, allocatable :: D_alpha(:,:), D_beta(:,:) + double precision :: E_new + double precision, allocatable :: D_new_alpha(:,:), D_new_beta(:,:), F_new(:,:) + double precision, allocatable :: delta_alpha(:,:), delta_beta(:,:) + double precision :: lambda, E_half, a, b, delta_D, delta_E, E_min + + integer :: i,j,k + logical :: saving + character :: save_char + + allocate( & + D_alpha( ao_num_align, ao_num ), & + D_beta( ao_num_align, ao_num ), & + F_new( ao_num_align, ao_num ), & + D_new_alpha( ao_num_align, ao_num ), & + D_new_beta( ao_num_align, ao_num ), & + delta_alpha( ao_num_align, ao_num ), & + delta_beta( ao_num_align, ao_num )) + + do j=1,ao_num + do i=1,ao_num + D_alpha(i,j) = HF_density_matrix_ao_alpha(i,j) + D_beta (i,j) = HF_density_matrix_ao_beta (i,j) + enddo + enddo + + + call write_time(output_hartree_fock) + + write(output_hartree_fock,'(A4,X,A16, X, A16, X, A16, X, A4 )'), '====','================','================','================', '====' + write(output_hartree_fock,'(A4,X,A16, X, A16, X, A16, X, A4 )'), ' N ', 'Energy ', 'Energy diff ', 'Density diff ', 'Save' + write(output_hartree_fock,'(A4,X,A16, X, A16, X, A16, X, A4 )'), '====','================','================','================', '====' + + E = HF_energy + 1.d0 + E_min = HF_energy + delta_D = 0.d0 + do k=1,n_it_scf_max + + delta_E = HF_energy - E + E = HF_energy + + if ( (delta_E < 0.d0).and.(dabs(delta_E) < thresh_scf) ) then + exit + endif + + saving = E < E_min + if (saving) then + call save_mos + save_char = 'X' + E_min = E + else + save_char = ' ' + endif + + write(output_hartree_fock,'(I4,X,F16.10, X, F16.10, X, F16.10, 3X, A )'), & + k, E, delta_E, delta_D, save_char + + D_alpha = HF_density_matrix_ao_alpha + D_beta = HF_density_matrix_ao_beta + mo_coef = eigenvectors_fock_matrix_mo + TOUCH mo_coef + + D_new_alpha = HF_density_matrix_ao_alpha + D_new_beta = HF_density_matrix_ao_beta + F_new = Fock_matrix_ao + E_new = HF_energy + + delta_alpha = D_new_alpha - D_alpha + delta_beta = D_new_beta - D_beta + + lambda = .5d0 + E_half = 0.d0 + do while (E_half > E) + HF_density_matrix_ao_alpha = D_alpha + lambda * delta_alpha + HF_density_matrix_ao_beta = D_beta + lambda * delta_beta + TOUCH HF_density_matrix_ao_alpha HF_density_matrix_ao_beta + mo_coef = eigenvectors_fock_matrix_mo + TOUCH mo_coef + E_half = HF_energy + if ((E_half > E).and.(E_new < E)) then + lambda = 1.d0 + exit + else if ((E_half > E).and.(lambda > 5.d-2)) then + lambda = 0.5d0 * lambda + E_new = E_half + else + exit + endif + enddo + + a = (E_new + E - 2.d0*E_half)*2.d0 + b = -E_new - 3.d0*E + 4.d0*E_half + lambda = -lambda*b/a + D_alpha = (1.d0-lambda) * D_alpha + lambda * D_new_alpha + D_beta = (1.d0-lambda) * D_beta + lambda * D_new_beta + delta_E = HF_energy - E + do j=1,ao_num + do i=1,ao_num + delta_D = delta_D + & + (D_alpha(i,j) - HF_density_matrix_ao_alpha(i,j))*(D_alpha(i,j) - HF_density_matrix_ao_alpha(i,j)) + & + (D_beta (i,j) - HF_density_matrix_ao_beta (i,j))*(D_beta (i,j) - HF_density_matrix_ao_beta (i,j)) + enddo + enddo + delta_D = dsqrt(delta_D/dble(ao_num)**2) + HF_density_matrix_ao_alpha = D_alpha + HF_density_matrix_ao_beta = D_beta + TOUCH HF_density_matrix_ao_alpha HF_density_matrix_ao_beta + mo_coef = eigenvectors_fock_matrix_mo + TOUCH mo_coef + + + enddo + write(output_hartree_fock,'(A4,X,A16, X, A16, X, A16, X, A4 )'), '====','================','================','================', '====' + write(output_hartree_fock,*) + + call mo_as_eigvectors_of_mo_matrix(Fock_matrix_mo,size(Fock_matrix_mo,1),size(Fock_matrix_mo,2),mo_label) + + call write_double(output_hartree_fock, E_min, 'Hartree-Fock energy') + call ezfio_set_hartree_fock_energy(E_min) + + call write_time(output_hartree_fock) + + deallocate(D_alpha,D_beta,F_new,D_new_alpha,D_new_beta,delta_alpha,delta_beta) +end diff --git a/plugins/Hartree_Fock/diagonalize_fock.irp.f b/plugins/Hartree_Fock/diagonalize_fock.irp.f new file mode 100644 index 00000000..90bfddcb --- /dev/null +++ b/plugins/Hartree_Fock/diagonalize_fock.irp.f @@ -0,0 +1,91 @@ + BEGIN_PROVIDER [ double precision, diagonal_Fock_matrix_mo, (ao_num) ] +&BEGIN_PROVIDER [ double precision, eigenvectors_Fock_matrix_mo, (ao_num_align,mo_tot_num) ] + implicit none + BEGIN_DOC + ! Diagonal Fock matrix in the MO basis + END_DOC + + integer :: i,j + integer :: liwork, lwork, n, info + integer, allocatable :: iwork(:) + double precision, allocatable :: work(:), F(:,:), S(:,:) + + allocate(F(ao_num_align,ao_num), S(ao_num_align,ao_num) ) + do j=1,ao_num + do i=1,ao_num + S(i,j) = ao_overlap(i,j) + F(i,j) = Fock_matrix_ao(i,j) + enddo + enddo + + n = ao_num + lwork = 1+6*n + 2*n*n + liwork = 3 + 5*n + + allocate(work(lwork), iwork(liwork) ) + + lwork = -1 + liwork = -1 + + call dsygvd(1,'v','u',ao_num,F,size(F,1),S,size(S,1),& + diagonal_Fock_matrix_mo, work, lwork, iwork, liwork, info) +! call dsygv(1, 'v', 'u',ao_num,F,size(F,1),S,size(S,1),& +! diagonal_Fock_matrix_mo, work, lwork, info) + + + + if (info /= 0) then + print *, irp_here//' failed : ', info + stop 1 + endif + lwork = int(work(1)) + liwork = iwork(1) + deallocate(work,iwork) + allocate(work(lwork), iwork(liwork) ) +! deallocate(work) +! allocate(work(lwork)) + + call dsygvd(1,'v','u',ao_num,F,size(F,1),S,size(S,1),& + diagonal_Fock_matrix_mo, work, lwork, iwork, liwork, info) + +! call dsygv(1, 'v', 'u',ao_num,F,size(F,1),S,size(S,1),& +! diagonal_Fock_matrix_mo, work, lwork, info) + + if (info /= 0) then + print *, irp_here//' failed : ', info + stop 1 + endif + do j=1,mo_tot_num + do i=1,ao_num + eigenvectors_Fock_matrix_mo(i,j) = F(i,j) + enddo + enddo + + deallocate(work, iwork, F, S) +END_PROVIDER + +BEGIN_PROVIDER [double precision, diagonal_Fock_matrix_mo_sum, (mo_tot_num)] + implicit none + BEGIN_DOC + ! diagonal element of the fock matrix calculated as the sum over all the interactions + ! with all the electrons in the RHF determinant + ! diagonal_Fock_matrix_mo_sum(i) = sum_{j=1, N_elec} 2 J_ij -K_ij + END_DOC + integer :: i,j + double precision :: accu + do i = 1,elec_alpha_num + accu = 0.d0 + do j = 1, elec_alpha_num + accu += 2.d0 * mo_bielec_integral_jj_from_ao(i,j) - mo_bielec_integral_jj_exchange_from_ao(i,j) + enddo + diagonal_Fock_matrix_mo_sum(i) = accu + mo_mono_elec_integral(i,i) + enddo + do i = elec_alpha_num+1,mo_tot_num + accu = 0.d0 + do j = 1, elec_alpha_num + accu += 2.d0 * mo_bielec_integral_jj_from_ao(i,j) - mo_bielec_integral_jj_exchange_from_ao(i,j) + enddo + diagonal_Fock_matrix_mo_sum(i) = accu + mo_mono_elec_integral(i,i) + enddo + +END_PROVIDER diff --git a/plugins/Hartree_Fock/huckel.irp.f b/plugins/Hartree_Fock/huckel.irp.f new file mode 100644 index 00000000..4ea8d93f --- /dev/null +++ b/plugins/Hartree_Fock/huckel.irp.f @@ -0,0 +1,34 @@ +subroutine huckel_guess + implicit none + BEGIN_DOC +! Build the MOs using the extended Huckel model + END_DOC + integer :: i,j + double precision :: tmp_matrix(ao_num_align,ao_num),accu + double precision :: c + character*(64) :: label + + mo_coef = ao_ortho_lowdin_coef + TOUCH mo_coef + label = "Guess" + call mo_as_eigvectors_of_mo_matrix(mo_mono_elec_integral, & + size(mo_mono_elec_integral,1),size(mo_mono_elec_integral,2),label) + TOUCH mo_coef + + c = 0.5d0 * 1.75d0 + do j=1,ao_num + do i=1,ao_num + if (i/=j) then + Fock_matrix_ao(i,j) = c*ao_overlap(i,j)*(ao_mono_elec_integral(i,i) + & + ao_mono_elec_integral(j,j)) + else + Fock_matrix_ao(i,j) = Fock_matrix_alpha_ao(i,j) + endif + enddo + enddo + TOUCH Fock_matrix_ao + mo_coef = eigenvectors_fock_matrix_mo + SOFT_TOUCH mo_coef + call save_mos + +end diff --git a/plugins/Hartree_Fock/test b/plugins/Hartree_Fock/test new file mode 100644 index 00000000..e69de29b diff --git a/plugins/Hartree_Fock/tree_dependency.png b/plugins/Hartree_Fock/tree_dependency.png new file mode 100644 index 0000000000000000000000000000000000000000..82a2ac8e7ef38edc1307128469d5b2166306eef0 GIT binary patch literal 60461 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 amCQ61xX>pN{3(2T6j<;j=&-6qH$#3 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 UI Date: Wed, 17 Jun 2015 19:00:31 +0200 Subject: [PATCH 04/19] First travis module --- .travis.yml | 1 + plugins/Hartree_Fock/Hartree_Fock | 1 - scripts/compilation/qp_create_ninja.py | 7 ++- scripts/module/qp_install_module.py | 64 ++++++++++++++++---------- 4 files changed, 44 insertions(+), 29 deletions(-) delete mode 120000 plugins/Hartree_Fock/Hartree_Fock diff --git a/.travis.yml b/.travis.yml index 0e5f92ea..2ec605ab 100644 --- a/.travis.yml +++ b/.travis.yml @@ -12,6 +12,7 @@ before_script: script: - ./configure --production ./config/gfortran.cfg - source ./quantum_package.rc + - qp_install_module.py install Full_CI Hartree_Fock - ninja - cd ocaml ; make ; cd - - cd testing_no_regression ; ./unit_test.py diff --git a/plugins/Hartree_Fock/Hartree_Fock b/plugins/Hartree_Fock/Hartree_Fock deleted file mode 120000 index ca3fae3a..00000000 --- a/plugins/Hartree_Fock/Hartree_Fock +++ /dev/null @@ -1 +0,0 @@ -/home/razoa/quantum_package/bulk/Hartree_Fock \ No newline at end of file diff --git a/scripts/compilation/qp_create_ninja.py b/scripts/compilation/qp_create_ninja.py index ac6f009d..cd0e3d8f 100755 --- a/scripts/compilation/qp_create_ninja.py +++ b/scripts/compilation/qp_create_ninja.py @@ -517,7 +517,7 @@ def get_binaries(path_module): return [] elif "No such file or directory" not in stdout: l_bin = [i.replace(".irp.f", "", 1) for i in stdout.split()] - return [Path(bin_, os.path.basename(bin_)) for bin_ in l_bin] + return [Path(os.path.realpath(bin_), os.path.basename(bin_)) for bin_ in l_bin] else: return [] @@ -540,7 +540,6 @@ def get_dict_binaries(l_module, mode="production"): # Ake module => binaries generated for module in l_module: l_binaries = get_binaries(module) - if l_binaries: d_binaries[module] += l_binaries @@ -561,8 +560,8 @@ def get_dict_binaries(l_module, mode="production"): l_binaries = [] for binaries in d_binaries[module]: - p_abs = join(QP_ROOT_SRC, root_module.rel, module.rel, - binaries.rel) + p_abs = real_join(QP_ROOT_SRC, root_module.rel) + p_abs = join(p_abs, module.rel, binaries.rel) p_rel = binaries.rel p = Path(p_abs, p_rel) l_binaries.append(p) diff --git a/scripts/module/qp_install_module.py b/scripts/module/qp_install_module.py index 03dbd350..8e9f149c 100755 --- a/scripts/module/qp_install_module.py +++ b/scripts/module/qp_install_module.py @@ -1,8 +1,8 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- """ -Usage: qp_install_module.py list [--installed|--avalaible-local|--avalaible-remote] - qp_install_module.py install -n +Usage: qp_install_module.py list (--installed|--avalaible-local|--avalaible-remote) + qp_install_module.py install ... qp_install_module.py create -n [...] qp_install_module.py download -n [...] @@ -64,18 +64,19 @@ if __name__ == '__main__': if arguments["--installed"]: l_repository = [qp_root_src] + if arguments["--avalaible-local"]: + l_repository = [qp_root_plugin] m_instance = ModuleHandler(l_repository) for module in m_instance.l_module: - print module + print "* {0}".format(module) elif arguments["create"]: - m_instance = ModuleHandler(l_repository) + m_instance = ModuleHandler([qp_root_src]) l_children = arguments[""] - qp_root = os.environ['QP_ROOT'] path = os.path.join(qp_root_src, arguments[""]) print "You will create the module:" @@ -100,33 +101,48 @@ if __name__ == '__main__': save_new_module(path, l_child_reduce) elif arguments["download"]: - - d_local = get_dict_child([qp_root_src]) - d_remote = get_dict_child(arguments[""]) - - d_child = d_local.copy() - d_child.update(d_remote) - - name = arguments[""] - l_module_descendant = get_l_module_descendant(d_child, [name]) - - for module in l_module_descendant: - if module not in d_local: - print "you need to install", module + pass +# d_local = get_dict_child([qp_root_src]) +# d_remote = get_dict_child(arguments[""]) +# +# d_child = d_local.copy() +# d_child.update(d_remote) +# +# name = arguments[""] +# l_module_descendant = get_l_module_descendant(d_child, [name]) +# +# for module in l_module_descendant: +# if module not in d_local: +# print "you need to install", module elif arguments["install"]: d_local = get_dict_child([qp_root_src]) - d_plugin = get_dict_child([qp_root_plugin]) d_child = d_local.copy() d_child.update(d_plugin) - name = arguments[""] - l_module_descendant = get_l_module_descendant(d_child, [name]) + l_name = arguments[""] - module_to_cp = [module for module in l_module_descendant if module not in d_local] + for name in l_name: + if name in d_local: + print "{0} Is already installed".format(name) - print "For ln -s by hand the module" - print module_to_cp + l_module_descendant = get_l_module_descendant(d_child, l_name) + + l_module_to_cp = [module for module in l_module_descendant if module not in d_local] + + if l_module_to_cp: + + print "You will need all these modules" + print l_module_to_cp + + print "Installation...", + + for module_to_cp in l_module_to_cp: + src = os.path.join(qp_root_plugin, module_to_cp) + des = os.path.join(qp_root_src, module_to_cp) + os.symlink(src, des) + print "Done" + print "You can now compile as usual" From 4eb38cf1e56edb4976e4cb7bf506284867804e6c Mon Sep 17 00:00:00 2001 From: Thomas Applencourt Date: Thu, 18 Jun 2015 10:21:37 +0200 Subject: [PATCH 05/19] Add qp_path.py and change module_handler acordingly --- scripts/utility/qp_path.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 scripts/utility/qp_path.py diff --git a/scripts/utility/qp_path.py b/scripts/utility/qp_path.py new file mode 100644 index 00000000..87e1ec80 --- /dev/null +++ b/scripts/utility/qp_path.py @@ -0,0 +1,12 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +import os + +try: + qp_root = os.environ['QP_ROOT'] +except: + print "source quantum_package.rc" + sys.exit(1) +else: + qp_root_src = os.path.join(qp_root, "src") From 4708a2d93ccf77c7d0575f65c2557392131c5ef4 Mon Sep 17 00:00:00 2001 From: Thomas Applencourt Date: Thu, 18 Jun 2015 10:23:48 +0200 Subject: [PATCH 06/19] Move densityfit for bad raison --- {plugins => src}/DensityFit/.gitignore | 0 {plugins => src}/DensityFit/NEEDED_CHILDREN_MODULES | 0 {plugins => src}/DensityFit/README.rst | 0 {plugins => src}/DensityFit/aux_basis.ezfio_config | 0 {plugins => src}/DensityFit/aux_basis.irp.f | 0 {plugins => src}/DensityFit/overlap.irp.f | 0 {plugins => src}/DensityFit/tree_dependency.png | Bin 7 files changed, 0 insertions(+), 0 deletions(-) rename {plugins => src}/DensityFit/.gitignore (100%) rename {plugins => src}/DensityFit/NEEDED_CHILDREN_MODULES (100%) rename {plugins => src}/DensityFit/README.rst (100%) rename {plugins => src}/DensityFit/aux_basis.ezfio_config (100%) rename {plugins => src}/DensityFit/aux_basis.irp.f (100%) rename {plugins => src}/DensityFit/overlap.irp.f (100%) rename {plugins => src}/DensityFit/tree_dependency.png (100%) diff --git a/plugins/DensityFit/.gitignore b/src/DensityFit/.gitignore similarity index 100% rename from plugins/DensityFit/.gitignore rename to src/DensityFit/.gitignore diff --git a/plugins/DensityFit/NEEDED_CHILDREN_MODULES b/src/DensityFit/NEEDED_CHILDREN_MODULES similarity index 100% rename from plugins/DensityFit/NEEDED_CHILDREN_MODULES rename to src/DensityFit/NEEDED_CHILDREN_MODULES diff --git a/plugins/DensityFit/README.rst b/src/DensityFit/README.rst similarity index 100% rename from plugins/DensityFit/README.rst rename to src/DensityFit/README.rst diff --git a/plugins/DensityFit/aux_basis.ezfio_config b/src/DensityFit/aux_basis.ezfio_config similarity index 100% rename from plugins/DensityFit/aux_basis.ezfio_config rename to src/DensityFit/aux_basis.ezfio_config diff --git a/plugins/DensityFit/aux_basis.irp.f b/src/DensityFit/aux_basis.irp.f similarity index 100% rename from plugins/DensityFit/aux_basis.irp.f rename to src/DensityFit/aux_basis.irp.f diff --git a/plugins/DensityFit/overlap.irp.f b/src/DensityFit/overlap.irp.f similarity index 100% rename from plugins/DensityFit/overlap.irp.f rename to src/DensityFit/overlap.irp.f diff --git a/plugins/DensityFit/tree_dependency.png b/src/DensityFit/tree_dependency.png similarity index 100% rename from plugins/DensityFit/tree_dependency.png rename to src/DensityFit/tree_dependency.png From abbcb3195a3c644c83eaf794ea57be4430db5955 Mon Sep 17 00:00:00 2001 From: Thomas Applencourt Date: Thu, 18 Jun 2015 11:11:14 +0200 Subject: [PATCH 07/19] Change global variable --- ocaml/.gitignore | 12 +++---- scripts/compilation/qp_create_ninja.py | 28 +++++++-------- scripts/ezfio_interface/ei_handler.py | 50 +++++++++++--------------- scripts/utility/qp_path.py | 7 ++-- 4 files changed, 44 insertions(+), 53 deletions(-) diff --git a/ocaml/.gitignore b/ocaml/.gitignore index cbd77939..eea16a59 100644 --- a/ocaml/.gitignore +++ b/ocaml/.gitignore @@ -5,7 +5,6 @@ qptypes_generator.byte _build qp_basis_clean.native qp_create_ezfio_from_xyz.native -qp_edit.native qp_print.native qp_run.native qp_set_ddci.native @@ -33,17 +32,16 @@ test_molecule test_point3d qp_basis_clean qp_create_ezfio_from_xyz -qp_edit qp_print qp_run qp_set_ddci qp_set_mo_class -Input_determinants.ml -Input_hartree_fock.ml -Input_integrals_bielec.ml -Input_perturbation.ml -Input_properties.ml Input_pseudo.ml +Input_integrals_bielec.ml +Input_hartree_fock.ml +Input_perturbation.ml +Input_determinants.ml +Input_properties.ml qp_edit.ml qp_edit qp_edit.native diff --git a/scripts/compilation/qp_create_ninja.py b/scripts/compilation/qp_create_ninja.py index cd0e3d8f..7e8680fb 100755 --- a/scripts/compilation/qp_create_ninja.py +++ b/scripts/compilation/qp_create_ninja.py @@ -48,9 +48,7 @@ header = r"""# # \_| | (_) |_) (_| | \/ (_| | | (_| |_) | (/_ _> # -QP_ROOT = os.environ['QP_ROOT'] -QP_ROOT_SRC = join(QP_ROOT, 'src') -QP_ROOT_EZFIO = join(QP_ROOT, 'install', 'EZFIO') +from qp_path import QP_ROOT, QP_SRC, QP_EZFIO EZFIO_LIB = join(QP_ROOT, "lib", "libezfio.a") ROOT_BUILD_NINJA = join(QP_ROOT, "config", "build.ninja") @@ -105,13 +103,13 @@ def dict_module_genelogy_path(d_module_genelogy): """ d = dict() for module_rel, l_children_rel in d_module_genelogy.iteritems(): - module_abs = real_join(QP_ROOT_SRC, module_rel) + module_abs = real_join(QP_SRC, module_rel) p = Path(module_abs, module_rel) try: - d[p] = Path(real_join(QP_ROOT_SRC, l_children_rel), l_children_rel) + d[p] = Path(real_join(QP_SRC, l_children_rel), l_children_rel) except: - d[p] = [Path(real_join(QP_ROOT_SRC, children), children) + d[p] = [Path(real_join(QP_SRC, children), children) for children in l_children_rel] return d @@ -129,8 +127,8 @@ def get_l_module_with_ezfio_cfg(): from os import listdir from os.path import isfile - return [real_join(QP_ROOT_SRC, m) for m in listdir(QP_ROOT_SRC) - if isfile(real_join(QP_ROOT_SRC, m, "EZFIO.cfg"))] + return [real_join(QP_SRC, m) for m in listdir(QP_SRC) + if isfile(real_join(QP_SRC, m, "EZFIO.cfg"))] def get_l_ezfio_config(): @@ -140,13 +138,13 @@ def get_l_ezfio_config(): l = [] - cmd = "{0}/*/*.ezfio_config".format(QP_ROOT_SRC) + cmd = "{0}/*/*.ezfio_config".format(QP_SRC) for path_in_module in glob.glob(cmd): real_path = real_join(path_in_module) name_lower = os.path.split(real_path)[1].lower() - path_in_ezfio = join(QP_ROOT_EZFIO, "config", name_lower) + path_in_ezfio = join(QP_EZFIO, "config", name_lower) l.append(EZ_config_path(real_path, path_in_ezfio)) return l @@ -177,7 +175,7 @@ def get_children_of_ezfio_cfg(l_module_with_ezfio_cfg): """ From a module list of ezfio_cfg return all the stuff create by him """ - config_folder = join(QP_ROOT_EZFIO, "config") + config_folder = join(QP_EZFIO, "config") l_util = dict() @@ -254,7 +252,7 @@ def ninja_ezfio_rule(): for flag in ["FC", "FCFLAGS", "IRPF90"]] install_lib_ezfio = join(QP_ROOT, 'install', 'EZFIO', "lib", "libezfio.a") - l_cmd = ["cd {0}".format(QP_ROOT_EZFIO)] + l_flag + l_cmd = ["cd {0}".format(QP_EZFIO)] + l_flag l_cmd += ["ninja && ln -f {0} {1}".format(install_lib_ezfio, EZFIO_LIB)] l_string = ["rule build_ezfio", @@ -288,7 +286,7 @@ def get_source_destination(path_module, l_needed_molule): Return a list of Sym_link = namedtuple('Sym_link', ['source', 'destination']) for a module """ - return [Sym_link(m.abs, join(QP_ROOT_SRC, path_module.rel, m.rel)) + return [Sym_link(m.abs, join(QP_SRC, path_module.rel, m.rel)) for m in l_needed_molule] @@ -560,7 +558,7 @@ def get_dict_binaries(l_module, mode="production"): l_binaries = [] for binaries in d_binaries[module]: - p_abs = real_join(QP_ROOT_SRC, root_module.rel) + p_abs = real_join(QP_SRC, root_module.rel) p_abs = join(p_abs, module.rel, binaries.rel) p_rel = binaries.rel p = Path(p_abs, p_rel) @@ -719,7 +717,7 @@ def create_build_ninja_global(): ""] l_string += ["rule make_clean", - " command = cd {0} ; clean_modules.sh *".format(QP_ROOT_SRC), + " command = cd {0} ; clean_modules.sh *".format(QP_SRC), " description = Cleaning all modules", ""] l_string += ["build dummy_target: update_build_ninja_root", diff --git a/scripts/ezfio_interface/ei_handler.py b/scripts/ezfio_interface/ei_handler.py index 7e7482e8..9645c69c 100755 --- a/scripts/ezfio_interface/ei_handler.py +++ b/scripts/ezfio_interface/ei_handler.py @@ -68,10 +68,12 @@ from collections import namedtuple from decorator import cache - from os import listdir from os.path import isdir, join, exists + +from qp_path import QP_ROOT, QP_SRC, QP_OCAML, QP_EZFIO + Type = namedtuple('Type', 'fancy ocaml fortran') @@ -97,10 +99,6 @@ def get_type_dict(): For example fancy_type['Ndet'].fortran = interger .ocaml = int """ - # ~#~#~#~#~ # - # P i c l e # - # ~#~#~#~#~ # - qpackage_root = os.environ['QP_ROOT'] # ~#~#~#~ # # I n i t # @@ -138,7 +136,8 @@ def get_type_dict(): "string": "character*32"} # Read and parse qptype generate - src = qpackage_root + "/ocaml/qptypes_generator.ml" + src = join(QP_OCAML, "qptypes_generator.ml") + with open(src, "r") as f: r = f.read() @@ -455,7 +454,7 @@ def save_ezfio_config(module_lower, str_ezfio_config): "$QP_ROOT/EZFIO/{0}.ezfio_interface_config".format(module_lower) """ name = "{0}.ezfio_interface_config".format(module_lower) - path = os.path.join(os.environ['QP_EZFIO'], "config", name) + path = os.path.join(QP_EZFIO, "config", name) with open(path, "w+") as f: f.write(str_ezfio_config) @@ -473,7 +472,7 @@ def save_ezfio_default(module_lower, str_ezfio_default): """ root_ezfio_default = "{0}/data/ezfio_defaults/".format( - os.environ['QP_ROOT']) + QP_ROOT) path = "{0}/{1}.ezfio_interface_default".format(root_ezfio_default, module_lower) with open(path, "w+") as f: @@ -501,7 +500,6 @@ def create_ocaml_input(dict_ezfio_cfg, module_lower): if not l_ezfio_name: raise ValueError - e_glob = EZFIO_ocaml(l_ezfio_name=l_ezfio_name, l_type=l_type, l_doc=l_doc) @@ -578,11 +576,12 @@ def create_ocaml_input(dict_ezfio_cfg, module_lower): def save_ocaml_input(module_lower, str_ocaml_input): """ Write the str_ocaml_input in - $QP_ROOT/ocaml/Input_{0}.ml".format(module_lower) + qp_path.QP_OCAML/Input_{0}.ml".format(module_lower) """ - path = "{0}/ocaml/Input_{1}.ml".format(os.environ['QP_ROOT'], - module_lower) + name = "Input_{0}.ml".format(module_lower) + + path = join(QP_OCAML, name) with open(path, "w+") as f: f.write(str_ocaml_input) @@ -594,17 +593,11 @@ def get_l_module_with_auto_generate_ocaml_lower(): (NB `search` in all the ligne and `match` only in one) """ - # ~#~#~#~ # - # I n i t # - # ~#~#~#~ # - - mypath = "{0}/src".format(os.environ['QP_ROOT']) - # ~#~#~#~#~#~#~#~ # # L _ f o l d e r # # ~#~#~#~#~#~#~#~ # - l_folder = [f for f in listdir(mypath) if isdir(join(mypath, f))] + l_folder = [f for f in listdir(QP_SRC) if isdir(join(QP_SRC, f))] # ~#~#~#~#~#~#~#~#~#~#~#~#~#~ # # L _ m o d u l e _ l o w e r # @@ -615,7 +608,7 @@ def get_l_module_with_auto_generate_ocaml_lower(): p = re.compile(ur'interface:\s+input') for f in l_folder: - path = "{0}/{1}/EZFIO.cfg".format(mypath, f) + path = "{0}/{1}/EZFIO.cfg".format(QP_SRC, f) if exists(path): with open(path, 'r') as file_: if p.search(file_.read()): @@ -639,8 +632,7 @@ def create_ocaml_input_global(l_module_with_auto_generate_ocaml_lower): from ezfio_generate_ocaml import EZFIO_ocaml - qpackage_root = os.environ['QP_ROOT'] - path = qpackage_root + "/scripts/ezfio_interface/qp_edit_template" + path = QP_ROOT + "/scripts/ezfio_interface/qp_edit_template" with open(path, "r") as f: template_raw = f.read() @@ -661,10 +653,11 @@ def create_ocaml_input_global(l_module_with_auto_generate_ocaml_lower): def save_ocaml_input_auto(str_ocaml_input_global): """ Write the str_ocaml_input in - $QP_ROOT/ocaml/Input_auto_generated.ml + qp_path.QP_OCAML/Input_auto_generated.ml """ - path = "{0}/ocaml/Input_auto_generated.ml".format(os.environ['QP_ROOT']) + name = "Input_auto_generated.ml" + path = join(QP_OCAML, name) with open(path, "w+") as f: f.write(str_ocaml_input_global) @@ -673,10 +666,11 @@ def save_ocaml_input_auto(str_ocaml_input_global): def save_ocaml_qp_edit(str_ocaml_qp_edit): """ Write the str_ocaml_qp_edit in - $QP_ROOT/ocaml/qp_edit.ml + qp_path.QP_OCAML/qp_edit.ml """ - path = "{0}/ocaml/qp_edit.ml".format(os.environ['QP_ROOT']) + name = "qp_edit.ml" + path = join(QP_OCAML, name) with open(path, "w+") as f: f.write(str_ocaml_qp_edit) @@ -771,14 +765,12 @@ if __name__ == "__main__": # G e t _ l _ d i c t _ e z f i o _ c f g # # ~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~# # - qpackage_root_src = join(os.environ['QP_ROOT'], "src") - l_module_with_ezfio = [] Module = namedtuple('Module', 'path lower') for f in l_module: - path = join(qpackage_root_src, f, "EZFIO.cfg") + path = join(QP_SRC, f, "EZFIO.cfg") if exists(path): l_module_with_ezfio.append(Module(path, f.lower())) diff --git a/scripts/utility/qp_path.py b/scripts/utility/qp_path.py index 87e1ec80..39058557 100644 --- a/scripts/utility/qp_path.py +++ b/scripts/utility/qp_path.py @@ -2,11 +2,14 @@ # -*- coding: utf-8 -*- import os +import sys try: - qp_root = os.environ['QP_ROOT'] + QP_ROOT = os.environ['QP_ROOT'] except: print "source quantum_package.rc" sys.exit(1) else: - qp_root_src = os.path.join(qp_root, "src") + QP_SRC = os.path.join(QP_ROOT, "src") + QP_EZFIO = os.path.join(QP_ROOT, "install", "EZFIO") + QP_OCAML = os.path.join(QP_ROOT, "ocaml") From 1b3a15c7942489d089ca131fbdd0e76a83b022c1 Mon Sep 17 00:00:00 2001 From: Thomas Applencourt Date: Thu, 18 Jun 2015 11:20:52 +0200 Subject: [PATCH 08/19] Fix create_exetuables to flow symlink --- scripts/module/create_executables_list.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/module/create_executables_list.sh b/scripts/module/create_executables_list.sh index 2f530379..cf5c98ec 100755 --- a/scripts/module/create_executables_list.sh +++ b/scripts/module/create_executables_list.sh @@ -11,7 +11,7 @@ fi cd ${QP_ROOT}/data rm -f executables -EXES=$(find ${QP_ROOT}/src -perm /u+x -type f | grep -e "${QP_ROOT}/src/[^/]*/[^/]*$" |sort ) +EXES=$(find -L ${QP_ROOT}/src -executable -type f | grep -e "${QP_ROOT}/src/[^/]*/[^/]*$" |sort ) for EXE in $EXES do From 40b949f47ae7654b133bb0bb77085047cb1f4314 Mon Sep 17 00:00:00 2001 From: Thomas Applencourt Date: Thu, 18 Jun 2015 12:08:28 +0200 Subject: [PATCH 09/19] Cleaning the test --- scripts/module/create_executables_list.sh | 5 ----- testing_no_regression/unit_test.py | 26 ++++++++++++++++------- 2 files changed, 18 insertions(+), 13 deletions(-) diff --git a/scripts/module/create_executables_list.sh b/scripts/module/create_executables_list.sh index cf5c98ec..66e9ef2d 100755 --- a/scripts/module/create_executables_list.sh +++ b/scripts/module/create_executables_list.sh @@ -17,8 +17,3 @@ for EXE in $EXES do printf "%-30s %s\n" $(basename $EXE) $EXE | sed "s|${QP_ROOT}|\$QP_ROOT|g" >> executables done - - - - - diff --git a/testing_no_regression/unit_test.py b/testing_no_regression/unit_test.py index aedc19fc..fda06256 100755 --- a/testing_no_regression/unit_test.py +++ b/testing_no_regression/unit_test.py @@ -183,12 +183,12 @@ def run_hf(geo, basis, mult=1, pseudo=False, remove_after_sucess=True): # ~#~#~#~#~#~#~#~#~#~#~#~#~ # # S e t _ p a r a m e t e r # # ~#~#~#~#~#~#~#~#~#~#~#~#~ # - ezfio.bielec_integrals_direct = False - ezfio.bielec_integrals_threshold_ao = 1.e-15 - ezfio.bielec_integrals_disk_access_ao_integrals = "None" + ezfio.integrals_bielec_direct = False + ezfio.integrals_bielec_threshold_ao = 1.e-15 + ezfio.integrals_bielec_disk_access_ao_integrals = "None" - ezfio.bielec_integrals_threshold_mo = 1.e-15 - ezfio.bielec_integrals_disk_access_mo_integrals = "None" + ezfio.integrals_bielec_threshold_mo = 1.e-15 + ezfio.integrals_bielec_disk_access_mo_integrals = "None" ezfio.hartree_fock_mo_guess_type = "Huckel" ezfio.hartree_fock_thresh_scf = 1.e-10 @@ -200,6 +200,7 @@ def run_hf(geo, basis, mult=1, pseudo=False, remove_after_sucess=True): # R u n # # ~#~#~ # +# cmd = "{0}/Hartree_Fock/SCF {1}.ezfio/".format(QP_src,geo) cmd = "qp_run SCF {0}.ezfio/".format(geo) subprocess.check_call([cmd], shell=True) @@ -252,14 +253,23 @@ def run_full_ci_10k_pt2_end(geo, basis, pseudo): # S e t _ p a r a m e t e r # # ~#~#~#~#~#~#~#~#~#~#~#~#~ # - ezfio.full_ci_do_pt2_end = True - ezfio.full_ci_n_det_max_fci = 10000 - ezfio.full_ci_pt2_max = 1.e-8 + ezfio.determinants_n_det_max = 10000 + ezfio.determinants_n_det_max_jacobi = 10000 + ezfio.determinants_n_states = 1 + ezfio.determinants_read_wf = 1 + ezfio.determinants_s2_eig = False + + ezfio.determinants_threshold_generators = 0.99 + ezfio.determinants_threshold_selectors = 0.999 + + ezfio.perturbation_do_pt2_end = True + ezfio.perturbation_pt2_max = 1.e-4 # ~#~#~ # # R u n # # ~#~#~ # +# cmd = "{0}/Full_CI/full_ci {1}.ezfio/".format(QP_src,geo) cmd = "qp_run full_ci {0}.ezfio/".format(geo) subprocess.check_call([cmd], shell=True) From 3a0f55d4d0548382e5db9e174a80f94efe8f2f08 Mon Sep 17 00:00:00 2001 From: Thomas Applencourt Date: Thu, 18 Jun 2015 13:51:27 +0200 Subject: [PATCH 10/19] Update README --- COMPILE_RUN.md | 38 ----------------- INSTALL.md | 85 -------------------------------------- README.md | 110 ++++++++++++++++++++++++++++++++++++++++++++++++- 3 files changed, 108 insertions(+), 125 deletions(-) delete mode 100644 COMPILE_RUN.md delete mode 100644 INSTALL.md diff --git a/COMPILE_RUN.md b/COMPILE_RUN.md deleted file mode 100644 index 9b4263e7..00000000 --- a/COMPILE_RUN.md +++ /dev/null @@ -1,38 +0,0 @@ -# Compile - -We need to create the file which contains all the tree dependencies for the -binaries. It's not a Makefile, but a Ninja file (so don't type `make` is -hopeless, type `ninja` instead). - -The script to create the dependency file (aka `build.ninja`) is -`qp_create_ninja.py`. - -## What utilization of the code will you do? - -* If you only want the binaries (for production workflow) use the flag - `--production` in when calling this script. It's quicker -* Else if you are a developer and you want to be able to compile specific - modules use: `--development`. It will create for you the `build.ninja` in each - module - -## Compilation Flags - -You need to specify all the flags useful for the compilation: like the -optimization flags, the Lapack libary, etc. ``$QP_ROOT/config`` contains -``ifort.cfg`` and ``gfortran.cfg`` containing the compiler flags that will be -used. You can edit these files to modify the compiling options. - -## Example to create the Ninja file - -`qp_create_ninja.py create --production $QP_ROOT/config/ifort.cfg` - -## Compiling - -Just type `ninja` if you are in `$QP_ROOT` (or `ninja -f $QP_ROOT/build.ninja` -elsewhere). The compilation will take approximately 3 min. - -If you have set the `--developement` flag in a specific module you can go in -the corresponding module directory and run `ninja` to build only this module. -You can type `ninja all` in a module for compiling all the submodule - -Finally, go in `$QP_ROOT/ocaml` and type `make` diff --git a/INSTALL.md b/INSTALL.md deleted file mode 100644 index 22d52e39..00000000 --- a/INSTALL.md +++ /dev/null @@ -1,85 +0,0 @@ -# Installation - -## Requirements - -* curl -* m4 -* GNU make -* Fortran compiler (ifort or gfortran are tested) -* Python >= 2.6 -* Bash -* Patch (for opam) - -## Optional - -* graphviz - - -## Standard installation - -1) `./setup_environment.sh` - -This command will download and install all the requirements. -Installing OCaml and the Core library may take somme time -(up to 20min on an old machine). - -2) `source quantum_package.rc` - -This file contains all the environement variables neeeded by the quantum package -both to compile and run. This should also be done before running calculations. - -3) `cp ./src/Makefile.config.gfortran ./src/Makefile.config` - -Create the ``Makefile.config`` which contains all the flags needed by the compiler. -The is also an example for the Intel Compiler (`Makefile.config.ifort`). -Edit this file and tune the flags as you want. - -4) `make build` - -It will compile all the executables and tools. - -5) `make binary` - -Optional. It will build a `tar.gz` file containing everything needed to run the quantum package on a -machine where you can't compile. - - -## Installing behind a firewall - -1) Download `tsocks`: - - wget http://sourceforge.net/projects/tsocks/files/latest/download - mv download tsocks.tar.gz - -2) Tranfer `tsocks.tar.gz` on the remote host - -3) Configure `tsocks` with the proper directory for the `tsocks.conf` file: - - tar -zxvf tsocks.tar.gz - cd tsocks-* - ./configure --with-conf=${PWD}/tsocks.conf - -4) Create the `tsocks.conf` file with the following content: - - server = 127.0.0.1 - server_port = 10000 - -5) Create the tsocks library: - - make - -6) Add the `libtsocks.so` to the `LD_PRELOAD` environment variable: - - export LD_PRELOAD="${PWD}/libtsocks.so.1.8" - -7) Create a custom curl command to set the tsocks option: open a file named - `curl`, which is accessible from your `PATH` environment variable before the - real `curl` command, and fill this file with: - - #!/bin/bash - /usr/bin/curl --socks5 127.0.0.1:10000 $@ - -8) Start a tsocks ssh tunnel: - - ssh -fN -D 10000 user@external-server.com - diff --git a/README.md b/README.md index a19896e7..708009ad 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,116 @@ Quantum package =============== + [![Build Status](https://travis-ci.org/LCPQ/quantum_package.svg?branch=master)](https://travis-ci.org/LCPQ/quantum_package) -[![Gitter](https://badges.gitter.im/Join Chat.svg)](https://gitter.im/LCPQ/quantum_package?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) +[![Gitter](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/LCPQ/quantum_package?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) Set of quantum chemistry programs and libraries. -For more information, you can visit the [wiki of the project](http://github.com/LCPQ/quantum_package/wiki>), or the [Install](INSTALL.md) file. +For more information, you can visit the [wiki of the project](http://github.com/LCPQ/quantum_package/wiki>), or bellow for the installation instruction. + +# Installation + +## Requirements +* Fortran compiler (ifort or gfortran are tested) +* Python >= 2.6 +* GNU make +* Bash + +## Standard installation + +### 1) Configure + + $ configure (--production | --development) + +This command have to purpose : + + - Download and install all the requirements. + Installing OCaml and the Core library may take somme time (up to 20min on an old machine). + - And create the file which contains all the tree dependencies for the binaries. + It's not a Makefile, but a Ninja file (so don't type `make` is hopeless, type `ninja` instead) + +####Compilation Flags (``) + +`` is the path to the file who contain all the flags useful for the compilation: like the optimization flags, the Lapack libary, etc. We have two default configure file in ``$QP_ROOT/config`` : ``ifort.cfg`` and ``gfortran.cfg``. You can edit these files to modify the compiling options. + +#### What utilization of the code will you do? + +* If you only want the binaries (for production workflow) use the flag + `--production` in when calling this script. It's quicker +* Else if you are a developer and you want to be able to compile specific modules use: `--development`. It will create for you the `build.ninja` in each module + +### 2) Set environment variable + + source quantum_package.rc +This file contains all the environment variables needed by the quantum package both to compile and run. This should also be done before running calculations. + +### Optional) Add some new module + + Usage: qp_install_module.py list (--installed|--avalaible-local|--avalaible-remote) + qp_install_module.py install ... + qp_install_module.py create -n [...] + qp_install_module.py download -n [...] + + For exemple you can type : +`qp_install_module.py install Full_CI` + +### 3) Compiling the fortran + + ninja +Just type `ninja` if you are in `$QP_ROOT` (or `ninja -f $QP_ROOT/build.ninja` +elsewhere). The compilation will take approximately 3 min. + +If you have set the `--developement` flag in a specific module you can go in +the corresponding module directory and run `ninja` to build only this module. +You can type `ninja all` in a module for compiling all the submodule + + +### 4) Compiling the OCaml + + cd ocaml ; make ; cd - + +### 5) Testing if all is ok + + cd testing_no_regression ; ./unit_test.py + +## Installing behind a firewall ! + +1) Download `tsocks`: + + wget http://sourceforge.net/projects/tsocks/files/latest/download + mv download tsocks.tar.gz + +2) Tranfer `tsocks.tar.gz` on the remote host + +3) Configure `tsocks` with the proper directory for the `tsocks.conf` file: + + tar -zxvf tsocks.tar.gz + cd tsocks-* + ./configure --with-conf=${PWD}/tsocks.conf + +4) Create the `tsocks.conf` file with the following content: + + server = 127.0.0.1 + server_port = 10000 + +5) Create the tsocks library: + + make + +6) Add the `libtsocks.so` to the `LD_PRELOAD` environment variable: + + export LD_PRELOAD="${PWD}/libtsocks.so.1.8" + +7) Create a custom curl command to set the tsocks option: open a file named + `curl`, which is accessible from your `PATH` environment variable before the + real `curl` command, and fill this file with: + + #!/bin/bash + /usr/bin/curl --socks5 127.0.0.1:10000 $@ + +8) Start a tsocks ssh tunnel: + + ssh -fN -D 10000 user@external-server.com + From 8ab03b407a3f2d3e6a72698bdcb9270568b6fbb5 Mon Sep 17 00:00:00 2001 From: Thomas Applencourt Date: Thu, 18 Jun 2015 13:53:43 +0200 Subject: [PATCH 11/19] Update readme [ci skip] --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 708009ad..e9d369ac 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,9 @@ For more information, you can visit the [wiki of the project](http://github.com/ ### 1) Configure - $ configure (--production | --development) + $ ./configure (--production | --development) + +For example you can type `./configure config/gfortran.cfg --production` This command have to purpose : From 0342bc009e6254c473dfc26fda94a12bfad9c547 Mon Sep 17 00:00:00 2001 From: Thomas Applencourt Date: Thu, 18 Jun 2015 13:54:42 +0200 Subject: [PATCH 12/19] Nice readme [ci skip] --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index e9d369ac..c659f1f6 100644 --- a/README.md +++ b/README.md @@ -6,14 +6,15 @@ Quantum package [![Gitter](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/LCPQ/quantum_package?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) -Set of quantum chemistry programs and libraries. +Set of quantum chemistry programs and libraries. +(under GNU GENERAL PUBLIC LICENSE v2) For more information, you can visit the [wiki of the project](http://github.com/LCPQ/quantum_package/wiki>), or bellow for the installation instruction. # Installation ## Requirements -* Fortran compiler (ifort or gfortran are tested) +* Fortran compiler (`ifort` and `gfortran` are tested) * Python >= 2.6 * GNU make * Bash From 93eafd009dc068b6c68d313b0149eea86280e3ea Mon Sep 17 00:00:00 2001 From: Thomas Applencourt Date: Thu, 18 Jun 2015 15:01:04 +0200 Subject: [PATCH 13/19] Update the EZFIO.cfg with the new keyword --- ocaml/.gitignore | 2 ++ plugins/CAS_SD/EZFIO.cfg | 4 +-- plugins/CISD_SC2_selected/EZFIO.cfg | 4 +-- plugins/DDCI_selected/EZFIO.cfg | 2 +- plugins/Full_CI/EZFIO.cfg | 4 +-- plugins/Hartree_Fock/EZFIO.cfg | 8 ++--- plugins/MRCC/EZFIO.cfg | 2 +- plugins/Perturbation/EZFIO.cfg | 6 ++-- plugins/Properties/EZFIO.cfg | 2 +- scripts/ezfio_interface/ei_handler.py | 52 ++++++++++++++++++--------- src/Determinants/EZFIO.cfg | 40 ++++++++++----------- src/Integrals_Bielec/EZFIO.cfg | 10 +++--- src/Pseudo/EZFIO.cfg | 30 ++++++++-------- 13 files changed, 94 insertions(+), 72 deletions(-) diff --git a/ocaml/.gitignore b/ocaml/.gitignore index eea16a59..20613b5f 100644 --- a/ocaml/.gitignore +++ b/ocaml/.gitignore @@ -5,6 +5,7 @@ qptypes_generator.byte _build qp_basis_clean.native qp_create_ezfio_from_xyz.native +qp_edit.native qp_print.native qp_run.native qp_set_ddci.native @@ -32,6 +33,7 @@ test_molecule test_point3d qp_basis_clean qp_create_ezfio_from_xyz +qp_edit qp_print qp_run qp_set_ddci diff --git a/plugins/CAS_SD/EZFIO.cfg b/plugins/CAS_SD/EZFIO.cfg index 6fb8c8a0..7425c8ba 100644 --- a/plugins/CAS_SD/EZFIO.cfg +++ b/plugins/CAS_SD/EZFIO.cfg @@ -1,10 +1,10 @@ [energy] type: double precision doc: "Calculated CAS-SD energy" -interface: output +interface: ezfio [energy_pt2] type: double precision doc: "Calculated selected CAS-SD energy with PT2 correction" -interface: output +interface: ezfio diff --git a/plugins/CISD_SC2_selected/EZFIO.cfg b/plugins/CISD_SC2_selected/EZFIO.cfg index 3b49c52b..79e3e90c 100644 --- a/plugins/CISD_SC2_selected/EZFIO.cfg +++ b/plugins/CISD_SC2_selected/EZFIO.cfg @@ -1,10 +1,10 @@ [energy] type: double precision doc: Calculated CISD_SC2 energy of ground_state -interface: output +interface: ezfio [energy_pt2] type: double precision doc: Calculated CISD_SC2 energy+pt2 of ground_state -interface: output +interface: ezfio diff --git a/plugins/DDCI_selected/EZFIO.cfg b/plugins/DDCI_selected/EZFIO.cfg index c9d53993..01a40af2 100644 --- a/plugins/DDCI_selected/EZFIO.cfg +++ b/plugins/DDCI_selected/EZFIO.cfg @@ -1,4 +1,4 @@ [energy] type: double precision doc: "Calculated CAS-SD energy" -interface: output \ No newline at end of file +interface: ezfio \ No newline at end of file diff --git a/plugins/Full_CI/EZFIO.cfg b/plugins/Full_CI/EZFIO.cfg index 37f25eda..9a552cd0 100644 --- a/plugins/Full_CI/EZFIO.cfg +++ b/plugins/Full_CI/EZFIO.cfg @@ -1,10 +1,10 @@ [energy] type: double precision doc: Calculated Selected FCI energy -interface: output +interface: ezfio [energy_pt2] type: double precision doc: Calculated FCI energy + PT2 -interface: output +interface: ezfio diff --git a/plugins/Hartree_Fock/EZFIO.cfg b/plugins/Hartree_Fock/EZFIO.cfg index e2b0ea5a..c39c3483 100644 --- a/plugins/Hartree_Fock/EZFIO.cfg +++ b/plugins/Hartree_Fock/EZFIO.cfg @@ -1,22 +1,22 @@ [thresh_scf] type: Threshold doc: Threshold on the convergence of the Hartree Fock energy -interface: input +interface: ezfio,provider,ocaml default: 1.e-10 [n_it_scf_max] type: Strictly_positive_int doc: Maximum number of SCF iterations -interface: input +interface: ezfio,provider,ocaml default: 200 [mo_guess_type] type: MO_guess doc: Initial MO guess. Can be [ Huckel | HCore ] -interface: input +interface: ezfio,provider,ocaml default: Huckel [energy] type: double precision doc: Calculated HF energy -interface: output +interface: ezfio diff --git a/plugins/MRCC/EZFIO.cfg b/plugins/MRCC/EZFIO.cfg index ff586985..789f30ef 100644 --- a/plugins/MRCC/EZFIO.cfg +++ b/plugins/MRCC/EZFIO.cfg @@ -1,4 +1,4 @@ [energy] type: double precision doc: Calculated MRCC energy -interface: output \ No newline at end of file +interface: ezfio \ No newline at end of file diff --git a/plugins/Perturbation/EZFIO.cfg b/plugins/Perturbation/EZFIO.cfg index 28629104..ad26cfe5 100644 --- a/plugins/Perturbation/EZFIO.cfg +++ b/plugins/Perturbation/EZFIO.cfg @@ -1,19 +1,19 @@ [do_pt2_end] type: logical doc: If true, compute the PT2 at the end of the selection -interface: input +interface: ezfio,provider,ocaml default: True [PT2_max] type: PT2_energy doc: The selection process stops when the largest PT2 (for all the state) is lower than pt2_max in absolute value -interface: input +interface: ezfio,provider,ocaml default: 0.0001 [var_pt2_ratio] type: Normalized_float doc: The selection process stops when the energy ratio variational/(variational+PT2) is equal to var_pt2_ratio -interface: input +interface: ezfio,provider,ocaml default: 0.75 \ No newline at end of file diff --git a/plugins/Properties/EZFIO.cfg b/plugins/Properties/EZFIO.cfg index d230011d..02f42ad8 100644 --- a/plugins/Properties/EZFIO.cfg +++ b/plugins/Properties/EZFIO.cfg @@ -1,5 +1,5 @@ [z_one_point] type: double precision doc: z point on which the integrated delta rho is calculated -interface: input +interface: ezfio,provider,ocaml default: 3.9 \ No newline at end of file diff --git a/scripts/ezfio_interface/ei_handler.py b/scripts/ezfio_interface/ei_handler.py index 9645c69c..08646688 100755 --- a/scripts/ezfio_interface/ei_handler.py +++ b/scripts/ezfio_interface/ei_handler.py @@ -35,8 +35,13 @@ Format specification : Type:{str} | Is a fancy_type supported by the ocaml ezfio_name:{str} | Will be the name of the file for the ezfio (optional by default is the name of the provider) - interface:{str} | The provider is a imput or a output - default:{str} | The default value if interface == input: + interface:{str} | The provider is string sepeared by "," who can containt + ezfio (if you only whant the ezfiolib) + provider (if you want the provider) + ocaml (if you want the ocaml gestion) + So for example: + interface: provider,ezfio,ocaml + default:{str} | The default value if 'ocam' in interface: size:{str} | the size information (like 1 or =sum(ao_num) or (ao_num,3) ) @@ -46,13 +51,13 @@ Example of EZFIO.cfg: doc: Threshold on the convergence of the Hartree Fock energy type: Threshold default: 1.e-10 -interface: input +interface: provider,ezfio,ocaml size: 1 [energy] type: double precision doc: Calculated HF energy -interface: output +interface: ezfio ``` """ from docopt import docopt @@ -201,7 +206,7 @@ def get_dict_config_file(module_obj): - ezfio_dir : Will be the folder who containt the ezfio_name * /ezfio_dir/ezfio_name * equal to MODULE_lower name by default. - - interface : The provider is a imput or a output + - interface : The provider is lit of [provider,ezfio,ocaml] - default : The default value /!\ stored in a Type named type! if interface == input - size : Is the string read in ezfio.cgf who containt the size information @@ -211,7 +216,6 @@ def get_dict_config_file(module_obj): # I n i t # # ~#~#~#~ # d = defaultdict(dict) - l_info_required = ["doc", "interface"] l_info_optional = ["ezfio_dir", "ezfio_name", "size"] # ~#~#~#~#~#~#~#~#~#~#~ # @@ -238,8 +242,13 @@ def get_dict_config_file(module_obj): "ezfio_dir": module_obj.lower, "size": "1"} - # Check if type if avalaible - type_ = config_file.get(section, "type") + # Check if type is avalaible + try: + type_ = config_file.get(section, "type") + except ConfigParser.NoOptionError: + error("type", pvd, module_obj.path) + sys.exit(1) + if type_ not in type_dict: print "{0} not avalaible. Choose in:".format(type_) print ", ".join(sorted([i for i in type_dict])) @@ -248,12 +257,23 @@ def get_dict_config_file(module_obj): d[pvd]["type"] = type_dict[type_] # Fill the dict with REQUIRED information - for option in l_info_required: - try: - d[pvd][option] = config_file.get(section, option) - except ConfigParser.NoOptionError: - error(option, pvd, module_obj.path) + try: + d[pvd]["doc"] = config_file.get(section, "doc") + except ConfigParser.NoOptionError: + error("doc", pvd, module_obj.path) + sys.exit(1) + + try: + interface = map(str.lower, config_file.get(section, "interface").split(",")) + except ConfigParser.NoOptionError: + error("doc", pvd, module_obj.path) + sys.exit(1) + else: + if not any(i in ["ezfio", "provider", "ocaml"] for i in interface): + print "Bad keyword for interface for {0}".format(pvd) sys.exit(1) + else: + d[pvd]["interface"] = interface # Fill the dict with OPTIONAL information for option in l_info_optional: @@ -264,7 +284,7 @@ def get_dict_config_file(module_obj): d[pvd][option] = d_default[option] # If interface is input we need a default value information - if d[pvd]["interface"].lower() == "input": + if "ocaml" in d[pvd]["interface"]: try: default_raw = config_file.get(section, "default") except ConfigParser.NoOptionError: @@ -300,7 +320,7 @@ def create_ezfio_provider(dict_ezfio_cfg): ez_p = EZFIO_Provider() for provider_name, dict_info in dict_ezfio_cfg.iteritems(): - if "input" in dict_info["interface"]: + if "provider" in dict_info["interface"]: ez_p.set_type(dict_info['type'].fortran) ez_p.set_name(provider_name) ez_p.set_doc(dict_info['doc']) @@ -492,7 +512,7 @@ def create_ocaml_input(dict_ezfio_cfg, module_lower): l_doc = [] for k, v in dict_ezfio_cfg.iteritems(): - if v['interface'] == "input": + if "ocaml" in v['interface']: l_ezfio_name.append(v['ezfio_name']) l_type.append(v["type"]) l_doc.append(v["doc"]) diff --git a/src/Determinants/EZFIO.cfg b/src/Determinants/EZFIO.cfg index 4a2270c7..a124f030 100644 --- a/src/Determinants/EZFIO.cfg +++ b/src/Determinants/EZFIO.cfg @@ -1,112 +1,112 @@ [N_det_max] type: Det_number_max doc: Max number of determinants in the wave function -interface: input +interface: ezfio,provider,ocaml default: 10000 [N_det_max_property] type: Det_number_max doc: Max number of determinants in the wave function when you select for a given property -interface: input +interface: ezfio,provider,ocaml default: 10000 [N_det_max_jacobi] type: Det_number_max doc: Maximum number of determinants diagonalized by Jacobi -interface: input +interface: ezfio,provider,ocaml default: 1000 [N_states] type: States_number doc: Number of states to consider -interface: input +interface: ezfio,provider,ocaml default: 1 [read_wf] type: logical doc: If true, read the wave function from the EZFIO file -interface: input +interface: ezfio,provider,ocaml default: False [only_single_double_dm] type: logical doc: If true, The One body DM is calculated with ignoring the Double<->Doubles extra diag elements -interface: input +interface: ezfio,provider,ocaml default: False [s2_eig] type: logical doc: Force the wave function to be an eigenfunction of S^2 -interface: input +interface: ezfio,provider,ocaml default: False [threshold_generators] type: Threshold doc: Thresholds on generators (fraction of the norm) -interface: input +interface: ezfio,provider,ocaml default: 0.99 [threshold_selectors] type: Threshold doc: Thresholds on selectors (fraction of the norm) -interface: input +interface: ezfio,provider,ocaml default: 0.999 [n_states_diag] type: integer doc: n_states_diag -interface: Ocaml +interface: ezfio, provider [n_int] -interface: OCaml +interface: ezfio, provider doc: n_int type: N_int_number [bit_kind] -interface: OCaml +interface: ezfio, provider doc: bit_kind type: Bit_kind [mo_label] -interface: OCaml +interface: ezfio, provider doc: o_label type: character*(64) [n_det] -interface: OCaml +interface: ezfio, provider doc: n_det type: integer [psi_coef] -interface: OCaml +interface: ezfio, provider doc: psi_coef type: double precision size: (determinants.n_det,determinants.n_states) [psi_det] -interface: OCaml +interface: ezfio, provider doc: psi_det type: integer*8 size: (determinants.n_int*determinants.bit_kind/8,2,determinants.n_det) [det_num] -interface: OCaml +interface: ezfio, provider doc: det_num type: integer [det_occ] -interface: OCaml +interface: ezfio, provider doc: det_occ type: integer size: (electrons.elec_alpha_num,determinants.det_num,2) [det_coef] -interface: OCaml +interface: ezfio, provider doc: det_coef type: double precision size: (determinants.det_num) [expected_s2] -interface: OCaml +interface: ezfio, provider doc: expcted_s2 type: double precision diff --git a/src/Integrals_Bielec/EZFIO.cfg b/src/Integrals_Bielec/EZFIO.cfg index eaada232..3834b121 100644 --- a/src/Integrals_Bielec/EZFIO.cfg +++ b/src/Integrals_Bielec/EZFIO.cfg @@ -1,32 +1,32 @@ [do_direct_integrals] type: logical doc: Compute integrals on the fly -interface: input +interface: ezfio,provider,ocaml default: False ezfio_name: direct [disk_access_mo_integrals] type: Disk_access doc: Read/Write MO integrals from/to disk [ Write | Read | None ] -interface: input +interface: ezfio,provider,ocaml default: None [disk_access_ao_integrals] type: Disk_access doc: Read/Write AO integrals from/to disk [ Write | Read | None ] -interface: input +interface: ezfio,provider,ocaml default: None [ao_integrals_threshold] type: Threshold doc: If || < ao_integrals_threshold then is zero -interface: input +interface: ezfio,provider,ocaml default: 1.e-15 ezfio_name: threshold_ao [mo_integrals_threshold] type: Threshold doc: If || < ao_integrals_threshold then is zero -interface: input +interface: ezfio,provider,ocaml default: 1.e-15 ezfio_name: threshold_mo diff --git a/src/Pseudo/EZFIO.cfg b/src/Pseudo/EZFIO.cfg index 9804c807..ae27bd7c 100644 --- a/src/Pseudo/EZFIO.cfg +++ b/src/Pseudo/EZFIO.cfg @@ -1,88 +1,88 @@ [pseudo_klocmax] doc: test type:integer -interface: input_without_default +interface: ezfio,provider [pseudo_n_k] doc: test type: integer -interface: input_without_default +interface: ezfio,provider size: (nuclei.nucl_num,pseudo.pseudo_klocmax) [pseudo_v_k] doc: test type: double precision -interface: input_without_default +interface: ezfio,provider size: (nuclei.nucl_num,pseudo.pseudo_klocmax) [pseudo_dz_k] doc: test type: double precision -interface: input_without_default +interface: ezfio,provider size: (nuclei.nucl_num,pseudo.pseudo_klocmax) [pseudo_lmax] doc: test type:integer -interface: input_without_default +interface: ezfio,provider [pseudo_kmax] doc: test type:integer -interface: input_without_default +interface: ezfio,provider [pseudo_n_kl] doc: test type: integer -interface: input_without_default +interface: ezfio,provider size: (nuclei.nucl_num,pseudo.pseudo_kmax,0:pseudo.pseudo_lmax) [pseudo_v_kl] doc: test type: double precision -interface: input_without_default +interface: ezfio,provider size: (nuclei.nucl_num,pseudo.pseudo_kmax,0:pseudo.pseudo_lmax) [pseudo_dz_kl] doc: test type: double precision -interface: input_without_default +interface: ezfio,provider size: (nuclei.nucl_num,pseudo.pseudo_kmax,0:pseudo.pseudo_lmax) [do_pseudo] type: logical doc: Using pseudo potential integral of not -interface: input +interface: ezfio,provider,ocaml default: False [pseudo_grid_size] type: integer doc: Nb of points of the QMC grid -interface: input +interface: ezfio,provider,ocaml default: 1000 [pseudo_grid_rmax] type: double precision doc: R_maxof the QMC grid -interface: input +interface: ezfio,provider,ocaml default: 10.0 [ao_pseudo_grid] type: double precision doc: QMC grid -interface: output +interface: ezfio size: (ao_basis.ao_num,-pseudo.pseudo_lmax:pseudo.pseudo_lmax,0:pseudo.pseudo_lmax,nuclei.nucl_num,pseudo.pseudo_grid_size) [mo_pseudo_grid] type: double precision doc: QMC grid -interface: output +interface: ezfio size: (ao_basis.ao_num,-pseudo.pseudo_lmax:pseudo.pseudo_lmax,0:pseudo.pseudo_lmax,nuclei.nucl_num,pseudo.pseudo_grid_size) [pseudo_matrix] type: double precision doc: QMC grid -interface: output +interface: ezfio size: (aux_basis.aux_basis_num_sqrt,aux_basis.aux_basis_num_sqrt) From d7c0b755aba244f3f8eea48e3afe066d461d0db7 Mon Sep 17 00:00:00 2001 From: Thomas Applencourt Date: Fri, 19 Jun 2015 09:54:21 +0200 Subject: [PATCH 14/19] Try to debug travis --- testing_no_regression/unit_test.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/testing_no_regression/unit_test.py b/testing_no_regression/unit_test.py index fda06256..e50a4235 100755 --- a/testing_no_regression/unit_test.py +++ b/testing_no_regression/unit_test.py @@ -350,6 +350,9 @@ def check_convert(path_out): cmd = "qp_run SCF {0}.ezfio".format(path_out) subprocess.check_call([cmd], shell=True) + cmd = "ls -R {0}.ezfio/".format(path_out) + subprocess.check_call([cmd], shell=True) + # ~#~#~#~#~ # # C h e c k # # ~#~#~#~#~ # From c6128f7a22635f155d26626e8144a82ffa36010d Mon Sep 17 00:00:00 2001 From: Thomas Applencourt Date: Fri, 19 Jun 2015 10:32:19 +0200 Subject: [PATCH 15/19] Fix ei_handler ocaml_global --- scripts/ezfio_interface/ei_handler.py | 5 +++-- testing_no_regression/unit_test.py | 3 --- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/scripts/ezfio_interface/ei_handler.py b/scripts/ezfio_interface/ei_handler.py index 08646688..2cd91f6f 100755 --- a/scripts/ezfio_interface/ei_handler.py +++ b/scripts/ezfio_interface/ei_handler.py @@ -609,7 +609,7 @@ def save_ocaml_input(module_lower, str_ocaml_input): def get_l_module_with_auto_generate_ocaml_lower(): """ - Get all module who have EZFIO.cfg with input data + Get all module who have EZFIO.cfg with ocaml data (NB `search` in all the ligne and `match` only in one) """ @@ -625,7 +625,7 @@ def get_l_module_with_auto_generate_ocaml_lower(): l_module_lower = [] import re - p = re.compile(ur'interface:\s+input') + p = re.compile(ur'interface:.*ocaml') for f in l_folder: path = "{0}/{1}/EZFIO.cfg".format(QP_SRC, f) @@ -763,6 +763,7 @@ if __name__ == "__main__": # ~#~#~#~# # l_module = get_l_module_with_auto_generate_ocaml_lower() + print l_module str_ocaml_qp_edit, str_ocaml_input_auto = create_ocaml_input_global(l_module) save_ocaml_input_auto(str_ocaml_input_auto) diff --git a/testing_no_regression/unit_test.py b/testing_no_regression/unit_test.py index e50a4235..fda06256 100755 --- a/testing_no_regression/unit_test.py +++ b/testing_no_regression/unit_test.py @@ -350,9 +350,6 @@ def check_convert(path_out): cmd = "qp_run SCF {0}.ezfio".format(path_out) subprocess.check_call([cmd], shell=True) - cmd = "ls -R {0}.ezfio/".format(path_out) - subprocess.check_call([cmd], shell=True) - # ~#~#~#~#~ # # C h e c k # # ~#~#~#~#~ # From a07312b077253fe1d010156a10967788f2283afb Mon Sep 17 00:00:00 2001 From: Thomas Applencourt Date: Fri, 19 Jun 2015 18:58:36 +0200 Subject: [PATCH 16/19] Update doc --- README.md | 40 +++++++++++++ scripts/ezfio_interface/ei_handler.py | 85 ++++++++++++--------------- 2 files changed, 77 insertions(+), 48 deletions(-) diff --git a/README.md b/README.md index c659f1f6..0710096f 100644 --- a/README.md +++ b/README.md @@ -117,3 +117,43 @@ You can type `ninja all` in a module for compiling all the submodule ssh -fN -D 10000 user@external-server.com +# Note on EZFIO.cfg + +##Format specification : + +Required: + [] The name of the provider in irp.f90 and in the EZFIO lib + doc: The plain text documentation + type: A Fancy_type supported by the ocaml. + type `ei_handler.py get_supported_type` for a list + interface: The interface is list of string sepeared by "," who can containt : + - ezfio (if you only whant the ezfiolib) + - provider (if you want the provider) + - ocaml (if you want the ocaml gestion) +Optional: + default: The default value needed, + if 'ocaml' is in interface list. + ! No list is allowed for now ! + size: The size information. + (by default is one) + Example : 1, =sum(ao_num); (ao_num,3) + ezfio_name: The name for the EZFIO lib + (by default is ) + ezfio_dir: Will be the folder of EZFIO. + (by default is ) + +##Example of EZFIO.cfg: + +``` +[thresh_SCF] +doc: Threshold on the convergence of the Hartree Fock energy +type: Threshold +default: 1.e-10 +interface: provider,ezfio,ocaml +size: 1 + +[energy] +type: Strictly_negative_float +doc: Calculated HF energy +interface: ezfio +``` \ No newline at end of file diff --git a/scripts/ezfio_interface/ei_handler.py b/scripts/ezfio_interface/ei_handler.py index 2cd91f6f..c92ac572 100755 --- a/scripts/ezfio_interface/ei_handler.py +++ b/scripts/ezfio_interface/ei_handler.py @@ -10,40 +10,44 @@ Usage: [--ezfio_config] [--ocaml] [--ezfio_default] + ei_handler.py list_supported_type ei_handler.py ocaml_global By default all the option are executed. Options: -h --help - --irpf90 Create the `ezfio_interface.irpf90` - which contains all the providers needed - (aka all with the `interface: input` parameter) - in `${pwd}` - --ezfio_config Create the `${module_lower}_ezfio_interface_config` in - `${QP_ROOT}/EZFIO/config/` - This file is needed by *EZFIO* to create the `libezfio.so` - --ocaml Create the `Input_module.lower.ml` for the *qp_edit* - --ezfio_default Create the `${module_lower}_ezfio_interface_default` in - `${QP_ROOT}/data/ezfio_defaults` needed by - the ocaml - ocaml_global Create the qp_edit + --irpf90 Create the `/ezfio_interface.irpf90` + which contains all the providers needed + --ezfio_config Create the `_ezfio_interface_config` in + `${QP_EZFIO}/config/` + --ocaml Create all the stuff needed by *qp_edit*: + -`Input_.ml` and + - _ezfio_interface_default` + ocaml_global Create the *qp_edit* Format specification : - [provider_name] | the name of the provider in irp.f90 - doc:{str} | Is the doc - Type:{str} | Is a fancy_type supported by the ocaml - ezfio_name:{str} | Will be the name of the file for the ezfio - (optional by default is the name of the provider) - interface:{str} | The provider is string sepeared by "," who can containt - ezfio (if you only whant the ezfiolib) - provider (if you want the provider) - ocaml (if you want the ocaml gestion) - So for example: - interface: provider,ezfio,ocaml - default:{str} | The default value if 'ocam' in interface: - size:{str} | the size information - (like 1 or =sum(ao_num) or (ao_num,3) ) + +Required: + [] The name of the provider in irp.f90 and in the EZFIO lib + doc: The plain text documentation + type: A Fancy_type supported by the ocaml. + type `ei_handler.py get_supported_type` for a list + interface: The interface is list of string sepeared by "," who can containt : + - ezfio (if you only whant the ezfiolib) + - provider (if you want the provider) + - ocaml (if you want the ocaml gestion) +Optional: + default: The default value needed, + if 'ocaml' is in interface list. + ! No list is allowed for now ! + size: The size information. + (by default is one) + Example : 1, =sum(ao_num); (ao_num,3) + ezfio_name: The name for the EZFIO lib + (by default is ) + ezfio_dir: Will be the folder of EZFIO. + (by default is ) Example of EZFIO.cfg: ``` @@ -198,19 +202,6 @@ def get_dict_config_file(module_obj): size, interface, default} - - - Type : Is a Type named tuple who containt - fortran and ocaml type - - doc : Is the doc - - ezfio_name : Will be the name of the file - - ezfio_dir : Will be the folder who containt the ezfio_name - * /ezfio_dir/ezfio_name - * equal to MODULE_lower name by default. - - interface : The provider is lit of [provider,ezfio,ocaml] - - default : The default value /!\ stored in a Type named type! - if interface == input - - size : Is the string read in ezfio.cgf who containt the size information - (like 1 or =sum(ao_num)) """ # ~#~#~#~ # # I n i t # @@ -730,9 +721,9 @@ def code_generation(arguments, dict_ezfio_cfg, m): str_ezfio_config = create_ezfio_config(dict_ezfio_cfg) save_ezfio_config(module_lower, str_ezfio_config) - # ~#~#~#~#~#~# - # O c a m l # - # ~#~#~#~#~#~# + # ~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~ # + # O c a m l & e z f i o _ d e f a u l t # + # ~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~ # if do_all or arguments["--ocaml"]: try: str_ocaml_input = create_ocaml_input(dict_ezfio_cfg, module_lower) @@ -741,20 +732,19 @@ def code_generation(arguments, dict_ezfio_cfg, m): else: save_ocaml_input(module_lower, str_ocaml_input) - # ~#~#~#~#~#~#~#~#~#~#~#~#~ # - # e z f i o _ d e f a u l t # - # ~#~#~#~#~#~#~#~#~#~#~#~#~ # - if do_all or arguments["--ezfio_default"]: str_ezfio_default = create_ezfio_default(dict_ezfio_cfg) save_ezfio_default(module_lower, str_ezfio_default) - if __name__ == "__main__": arguments = docopt(__doc__) # ___ # | ._ o _|_ # _|_ | | | |_ # + if arguments["list_supported_type"]: + for i in get_type_dict(): + print i + sys.exit(0) if arguments["ocaml_global"]: @@ -763,7 +753,6 @@ if __name__ == "__main__": # ~#~#~#~# # l_module = get_l_module_with_auto_generate_ocaml_lower() - print l_module str_ocaml_qp_edit, str_ocaml_input_auto = create_ocaml_input_global(l_module) save_ocaml_input_auto(str_ocaml_input_auto) From a2966d2999ec9472c27ce3311867e755e5da270b Mon Sep 17 00:00:00 2001 From: Thomas Applencourt Date: Fri, 19 Jun 2015 18:58:58 +0200 Subject: [PATCH 17/19] Update doc --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 0710096f..217ff776 100644 --- a/README.md +++ b/README.md @@ -121,6 +121,7 @@ You can type `ninja all` in a module for compiling all the submodule ##Format specification : +``` Required: [] The name of the provider in irp.f90 and in the EZFIO lib doc: The plain text documentation @@ -141,6 +142,7 @@ Optional: (by default is ) ezfio_dir: Will be the folder of EZFIO. (by default is ) +``` ##Example of EZFIO.cfg: From 5d5c93ff788026f918c33a022f2565de308afa90 Mon Sep 17 00:00:00 2001 From: Thomas Applencourt Date: Fri, 19 Jun 2015 19:13:35 +0200 Subject: [PATCH 18/19] Try Travis cache --- .travis.yml | 14 +++++++++----- scripts/module/module_handler.py | 11 +++++++++-- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/.travis.yml b/.travis.yml index 2ec605ab..6a1f69a6 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,13 +1,17 @@ -sudo: true +sudo: false + +cache: + directories: + - $HOME/.opam/ language: python python: - "2.6" -before_script: - - sudo apt-get update -q - - sudo apt-get install gfortran liblapack-dev gcc - - sudo apt-get install graphviz +#before_script: +# - sudo apt-get update -q +# - sudo apt-get install gfortran liblapack-dev gcc +# - sudo apt-get install graphviz script: - ./configure --production ./config/gfortran.cfg diff --git a/scripts/module/module_handler.py b/scripts/module/module_handler.py index 5bd8310e..d0bcca00 100755 --- a/scripts/module/module_handler.py +++ b/scripts/module/module_handler.py @@ -175,8 +175,16 @@ class ModuleHandler(): draw_module_edge(children, d_ref[children]) all_ready_done.append(module) + path = '{0}.png'.format("tree_dependency") + # Init - graph = pydot.Dot(graph_type='digraph') + try: + graph = pydot.Dot(graph_type='digraph') + except: + with open(path, 'a'): + os.utime(path, None) + return + d_ref = self.dict_child # Create all the edge @@ -186,7 +194,6 @@ class ModuleHandler(): draw_module_edge(module, d_ref[module]) # Save - path = '{0}.png'.format("tree_dependency") graph.write_png(path) From 623167cf9cc74ac00148c486df22df81dd14ed9b Mon Sep 17 00:00:00 2001 From: Thomas Applencourt Date: Fri, 19 Jun 2015 19:26:50 +0200 Subject: [PATCH 19/19] Canot use cache for now... =( --- .travis.yml | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/.travis.yml b/.travis.yml index 6a1f69a6..46e8057f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,17 +1,17 @@ -sudo: false - -cache: - directories: - - $HOME/.opam/ +sudo: true +# +#cache: +# directories: +# - $HOME/.opam/ language: python python: - "2.6" -#before_script: -# - sudo apt-get update -q -# - sudo apt-get install gfortran liblapack-dev gcc -# - sudo apt-get install graphviz +before_script: + - sudo apt-get update -q + - sudo apt-get install gfortran liblapack-dev gcc + - sudo apt-get install graphviz script: - ./configure --production ./config/gfortran.cfg