diff --git a/config/ifort.cfg b/config/ifort.cfg index 647ec77e..c1d7e968 100644 --- a/config/ifort.cfg +++ b/config/ifort.cfg @@ -31,14 +31,14 @@ OPENMP : 1 ; Append OpenMP flags # -ftz : Flushes denormal results to zero # [OPT] -FCFLAGS : -xHost -O2 -ip -opt-prefetch -ftz +FCFLAGS : -xSSE4.2 -O2 -ip -opt-prefetch -ftz -g # Profiling flags ################# # [PROFILE] FC : -p -g -FCFLAGS : -xHost -O2 -ip -opt-prefetch -ftz +FCFLAGS : -xSSE4.2 -O2 -ip -opt-prefetch -ftz # Debugging flags ################# diff --git a/configure b/configure index e6e58a60..41919e85 100755 --- a/configure +++ b/configure @@ -17,9 +17,11 @@ Options: who contains a binary, than you can compile then individualy if you want -Example: +Examples: ./configure config/gfortran.cfg --production + ./configure config/ifort.cfg --development + """ @@ -45,7 +47,7 @@ QP_ROOT = os.getcwd() QP_ROOT_BIN = join(QP_ROOT, "bin") QP_ROOT_INSTALL = join(QP_ROOT, "install") -os.environ["PATH"] = os.environ["PATH"] + ":"+QP_ROOT_BIN +os.environ["PATH"] = os.environ["PATH"] + ":" + QP_ROOT_BIN d_dependency = { "ocaml": ["m4", "curl", "zlib", "patch", "gcc"], @@ -128,12 +130,12 @@ ezfio = Info( d_info = dict() -for m in ["ocaml", "m4", "curl", "zlib", "path", "irpf90", "docopt", +for m in ["ocaml", "m4", "curl", "zlib", "path", "irpf90", "docopt", "resultsFile", "ninja", "emsl", "ezfio"]: exec ("d_info['{0}']={0}".format(m)) -def find_path(bin_, l_installed): +def find_path(bin_, l_installed, var_for_qp_root=False): """Use the global variable * l_installed * d_info @@ -143,6 +145,10 @@ def find_path(bin_, l_installed): locate = l_installed[bin_] except KeyError: locate = d_info[bin_].default_path + + if var_for_qp_root: + locate = locate.replace(QP_ROOT, "${QP_ROOT}") + return locate @@ -158,7 +164,8 @@ def check_output(*popenargs, **kwargs): >>> check_output(['/usr/bin/python', '--version']) Python 2.6.2 """ - process = subprocess.Popen(stdout=subprocess.PIPE,stderr=subprocess.PIPE, *popenargs, **kwargs) + process = subprocess.Popen(stdout=subprocess.PIPE, + stderr=subprocess.PIPE, *popenargs, **kwargs) output, unused_err = process.communicate() retcode = process.poll() if retcode: @@ -277,7 +284,8 @@ def installation(l_install_descendant): def create_rule_ninja(): l_rules = [ - "rule download", " command = wget --no-check-certificate ${url} -O ${out} -o /dev/null", + "rule download", + " command = wget --no-check-certificate ${url} -O ${out} -o /dev/null", " description = Downloading ${descr}", "" ] @@ -409,10 +417,8 @@ def create_ninja_and_rc(l_installed): """ - d_print = { - "qp_root": "Creating quantum_package.rc...", - "build": "Creating build.ninja..." - } + d_print = {"qp_root": "Creating quantum_package.rc...", + "build": "Creating build.ninja..."} length = max(map(len, d_print.values())) @@ -429,16 +435,21 @@ def create_ninja_and_rc(l_installed): if os.path.isdir(path): l_python.append(path) + path_ezfio = find_path('ezfio', l_installed, var_for_qp_root=True) + path_irpf90 = find_path("irpf90", l_installed, var_for_qp_root=True) + path_ninja = find_path("ninja", l_installed, var_for_qp_root=True) + l_rc = [ 'export QP_ROOT={0}'.format(QP_ROOT), - 'export QP_EZFIO={0}'.format(find_path('ezfio', l_installed)), - 'export IRPF90={0}'.format(find_path("irpf90", l_installed)), - 'export NINJA={0}'.format(find_path("ninja", l_installed)), + 'export QP_EZFIO={0}'.format(path_ezfio), + 'export IRPF90={0}'.format(path_irpf90), + 'export NINJA={0}'.format(path_ninja), 'export QP_PYTHON={0}'.format(":".join(l_python)), "", 'export PYTHONPATH="${QP_PYTHON}":"${PYTHONPATH}"', 'export PATH="${QP_PYTHON}":"${QP_ROOT}"/bin:"${QP_ROOT}"/ocaml:"${PATH}"', 'export LD_LIBRARY_PATH="${QP_ROOT}"/lib:"${LD_LIBRARY_PATH}"', - 'export LIBRARY_PATH="${QP_ROOT}"/lib:"${LIBRARY_PATH}"', "" + 'export LIBRARY_PATH="${QP_ROOT}"/lib:"${LIBRARY_PATH}"', "", + 'source ${QP_ROOT}/install/EZFIO/Bash/ezfio.sh', "", 'source ${HOME}/.opam/opam-init/init.sh > /dev/null 2> /dev/null || true', "" ] @@ -449,30 +460,33 @@ def create_ninja_and_rc(l_installed): print "[ OK ] ({0})".format(path) - print str_info("build"), - command = ['bash', '-c', 'source {0} && env'.format(path)] - proc = subprocess.Popen(command, stdout=subprocess.PIPE) - for line in proc.stdout: (key, _, value) = line.partition("=") os.environ[key] = value.strip() + print str_info("build"), + qp_create_ninja = os.path.join(QP_ROOT, "scripts", "compilation", "qp_create_ninja.py") l = [qp_create_ninja, "create"] + sys.argv[1:] + try: - subprocess.check_call(" ".join(l), shell=True) + with open('/dev/null', 'w') as dnull: + subprocess.check_call(" ".join(l), shell=True,stderr=dnull) except: - raise + print "[ FAIL ]" + print "Check the valididy of the config file provided ({0})".format(sys.argv[1]) + print "Exit..." + sys.exit(1) + else: print "[ OK ]" def recommendation(): - print "Last Step:" path = join(QP_ROOT, "quantum_package.rc") print "Now :" print " source {0}".format(path) diff --git a/ocaml/.gitignore b/ocaml/.gitignore index 0319c135..cbd77939 100644 --- a/ocaml/.gitignore +++ b/ocaml/.gitignore @@ -38,12 +38,12 @@ qp_print qp_run qp_set_ddci qp_set_mo_class -Input_integrals_bielec.ml -Input_pseudo.ml -Input_perturbation.ml -Input_properties.ml Input_determinants.ml Input_hartree_fock.ml +Input_integrals_bielec.ml +Input_perturbation.ml +Input_properties.ml +Input_pseudo.ml qp_edit.ml qp_edit qp_edit.native diff --git a/ocaml/Makefile b/ocaml/Makefile index 53a750b6..07803368 100644 --- a/ocaml/Makefile +++ b/ocaml/Makefile @@ -18,7 +18,7 @@ MLIFILES=$(wildcard *.mli) ALL_TESTS=$(patsubst %.ml,%.byte,$(wildcard test_*.ml)) ALL_EXE=$(patsubst %.ml,%.native,$(wildcard qp_*.ml)) qp_edit.native -.PHONY: executables default +.PHONY: executables default remake_executables default: $(ALL_TESTS) $(ALL_EXE) .gitignore @@ -34,7 +34,7 @@ default: $(ALL_TESTS) $(ALL_EXE) .gitignore executables: $(QP_ROOT)/data/executables -$(QP_ROOT)/data/executables: +$(QP_ROOT)/data/executables: remake_executables $(QP_ROOT)/scripts/module/create_executables_list.sh external_libs: diff --git a/plugins/CAS_SD/.gitignore b/plugins/CAS_SD/.gitignore index f0f03aa4..b8827b3b 100644 --- a/plugins/CAS_SD/.gitignore +++ b/plugins/CAS_SD/.gitignore @@ -1,32 +1,30 @@ -# Automatically created by /home/giner/quantum_package/scripts/module/module_handler.py -IRPF90_temp +# Automatically created by $QP_ROOT/scripts/module/module_handler.py +.ninja_deps +.ninja_log +AO_Basis +Bitmask +Determinants +Electrons +Ezfio_files +Generators_CAS +Hartree_Fock IRPF90_man -irpf90_entities -tags -irpf90.make +IRPF90_temp +Integrals_Bielec +Integrals_Monoelec +MOGuess +MO_Basis Makefile Makefile.depend -build.ninja -.ninja_log -.ninja_deps -ezfio_interface.irp.f -Ezfio_files -Perturbation -Determinants -Utils -Integrals_Monoelec -MO_Basis -Selectors_full -Integrals_Bielec -Pseudo -Bitmask -Generators_CAS -AO_Basis -Electrons -MOGuess Nuclei -Hartree_Fock +Perturbation Properties -cas_sd_selected_no_skip +Pseudo +Selectors_full +Utils cas_sd -cas_sd_selected \ No newline at end of file +cas_sd_selected +ezfio_interface.irp.f +irpf90.make +irpf90_entities +tags \ No newline at end of file diff --git a/plugins/CAS_SD/README.rst b/plugins/CAS_SD/README.rst index f445c4fa..82bc3032 100644 --- a/plugins/CAS_SD/README.rst +++ b/plugins/CAS_SD/README.rst @@ -13,11 +13,11 @@ Documentation .. Do not edit this section. It was auto-generated from the .. by the `update_README.py` script. -`full_ci `_ +`full_ci `_ Undocumented -`h_apply_cas_sd `_ +`h_apply_cas_sd `_ 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. @@ -28,58 +28,58 @@ Documentation Assume N_int is already provided. -`h_apply_cas_sd_monoexc `_ +`h_apply_cas_sd_monoexc `_ Generate all single excitations of key_in using the bit masks of holes and particles. Assume N_int is already provided. -`h_apply_cas_sd_pt2 `_ +`h_apply_cas_sd_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_cas_sd_pt2_diexc `_ +`h_apply_cas_sd_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_cas_sd_pt2_monoexc `_ +`h_apply_cas_sd_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_cas_sd_selected `_ +`h_apply_cas_sd_selected `_ 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_cas_sd_selected_diexc `_ +`h_apply_cas_sd_selected_diexc `_ Generate all double excitations of key_in using the bit masks of holes and particles. Assume N_int is already provided. -`h_apply_cas_sd_selected_monoexc `_ +`h_apply_cas_sd_selected_monoexc `_ Generate all single excitations of key_in using the bit masks of holes and particles. Assume N_int is already provided. -`h_apply_cas_sd_selected_no_skip `_ +`h_apply_cas_sd_selected_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_cas_sd_selected_no_skip_diexc `_ +`h_apply_cas_sd_selected_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_cas_sd_selected_no_skip_monoexc `_ +`h_apply_cas_sd_selected_no_skip_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/plugins/CAS_SD/tree_dependency.png b/plugins/CAS_SD/tree_dependency.png index d3d98e3c..185c2b27 100644 Binary files a/plugins/CAS_SD/tree_dependency.png and b/plugins/CAS_SD/tree_dependency.png differ diff --git a/plugins/Casino/.gitignore b/plugins/Casino/.gitignore new file mode 100644 index 00000000..acf88165 --- /dev/null +++ b/plugins/Casino/.gitignore @@ -0,0 +1,23 @@ +# Automatically created by /home/razoa/quantum_package/scripts/module/module_handler.py +IRPF90_temp +IRPF90_man +irpf90_entities +tags +irpf90.make +Makefile +Makefile.depend +.ninja_log +.ninja_deps +ezfio_interface.irp.f +Ezfio_files +Determinants +Integrals_Monoelec +MO_Basis +Utils +Pseudo +Bitmask +AO_Basis +Electrons +Nuclei +Integrals_Bielec +save_for_casino \ No newline at end of file diff --git a/plugins/Casino/NEEDED_CHILDREN_MODULES b/plugins/Casino/NEEDED_CHILDREN_MODULES new file mode 100644 index 00000000..aae89501 --- /dev/null +++ b/plugins/Casino/NEEDED_CHILDREN_MODULES @@ -0,0 +1 @@ +Determinants diff --git a/plugins/Casino/README.rst b/plugins/Casino/README.rst new file mode 100644 index 00000000..02d9dc66 --- /dev/null +++ b/plugins/Casino/README.rst @@ -0,0 +1,27 @@ +====== +Casino +====== + +Documentation +============= + +.. Do not edit this section. It was auto-generated from the +.. by the `update_README.py` script. + +`prog_save_casino `_ + Undocumented + + +`save_casino `_ + Undocumented + +Needed Modules +============== + +.. Do not edit this section. It was auto-generated from the +.. by the `update_README.py` script. + +.. image:: tree_dependency.png + +* `Determinants `_ + diff --git a/src/Determinants/save_for_casino.irp.f b/plugins/Casino/save_for_casino.irp.f similarity index 100% rename from src/Determinants/save_for_casino.irp.f rename to plugins/Casino/save_for_casino.irp.f diff --git a/plugins/Casino/tree_dependency.png b/plugins/Casino/tree_dependency.png new file mode 100644 index 00000000..98994c93 Binary files /dev/null and b/plugins/Casino/tree_dependency.png differ diff --git a/plugins/DDCI_selected/ddci.irp.f b/plugins/DDCI_selected/ddci.irp.f index cab29542..3fcb443b 100644 --- a/plugins/DDCI_selected/ddci.irp.f +++ b/plugins/DDCI_selected/ddci.irp.f @@ -1,4 +1,4 @@ -program full_ci +program ddci implicit none integer :: i,k diff --git a/plugins/Full_CI/.gitignore b/plugins/Full_CI/.gitignore index 14fbeaa7..a806bcbc 100644 --- a/plugins/Full_CI/.gitignore +++ b/plugins/Full_CI/.gitignore @@ -1,33 +1,32 @@ -# Automatically created by /home/giner/quantum_package/scripts/module/module_handler.py -IRPF90_temp +# Automatically created by $QP_ROOT/scripts/module/module_handler.py +.ninja_deps +.ninja_log +AO_Basis +Bitmask +Determinants +Electrons +Ezfio_files +Generators_full +Hartree_Fock IRPF90_man -irpf90_entities -tags -irpf90.make +IRPF90_temp +Integrals_Bielec +Integrals_Monoelec +MOGuess +MO_Basis Makefile Makefile.depend -build.ninja -.ninja_log -.ninja_deps -ezfio_interface.irp.f -Ezfio_files -Perturbation -Determinants -Utils -Integrals_Monoelec -MO_Basis -Selectors_full -Integrals_Bielec -Pseudo -Generators_full -Bitmask -AO_Basis -Electrons -MOGuess Nuclei -Hartree_Fock +Perturbation Properties -var_pt2_ratio -target_pt2 +Pseudo +Selectors_full +Utils +ezfio_interface.irp.f full_ci -full_ci_no_skip \ No newline at end of file +full_ci_no_skip +irpf90.make +irpf90_entities +tags +target_pt2 +var_pt2_ratio \ No newline at end of file diff --git a/plugins/Full_CI/README.rst b/plugins/Full_CI/README.rst index 396fbcd6..d94675eb 100644 --- a/plugins/Full_CI/README.rst +++ b/plugins/Full_CI/README.rst @@ -14,7 +14,7 @@ Documentation Undocumented -`h_apply_fci `_ +`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. @@ -25,126 +25,126 @@ Documentation Assume N_int is already provided. -`h_apply_fci_mono `_ +`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 `_ +`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 `_ +`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 `_ +`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 `_ +`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 `_ +`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 `_ +`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 `_ +`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 `_ +`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 `_ +`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 `_ +`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 `_ +`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 `_ +`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 `_ +`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 `_ +`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 `_ +`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 `_ +`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 `_ +`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 `_ +`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 `_ +`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 `_ +`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 `_ +`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. diff --git a/plugins/Full_CI/tree_dependency.png b/plugins/Full_CI/tree_dependency.png index ad7dcd84..caedb2e0 100644 Binary files a/plugins/Full_CI/tree_dependency.png and b/plugins/Full_CI/tree_dependency.png differ diff --git a/plugins/Generators_CAS/tree_dependency.png b/plugins/Generators_CAS/tree_dependency.png index 7f32349e..5bbc55d0 100644 Binary files a/plugins/Generators_CAS/tree_dependency.png and b/plugins/Generators_CAS/tree_dependency.png differ diff --git a/plugins/Generators_full/tree_dependency.png b/plugins/Generators_full/tree_dependency.png index c2656d20..94ad6358 100644 Binary files a/plugins/Generators_full/tree_dependency.png and b/plugins/Generators_full/tree_dependency.png differ diff --git a/plugins/Hartree_Fock/.gitignore b/plugins/Hartree_Fock/.gitignore index 6ddadf55..c44ada99 100644 --- a/plugins/Hartree_Fock/.gitignore +++ b/plugins/Hartree_Fock/.gitignore @@ -1,25 +1,24 @@ -# Automatically created by /home/giner/quantum_package/scripts/module/module_handler.py -IRPF90_temp +# Automatically created by $QP_ROOT/scripts/module/module_handler.py +.ninja_deps +.ninja_log +AO_Basis +Bitmask +Electrons +Ezfio_files +Huckel_guess IRPF90_man -irpf90_entities -tags -irpf90.make +IRPF90_temp +Integrals_Bielec +Integrals_Monoelec +MOGuess +MO_Basis Makefile Makefile.depend -build.ninja -.ninja_log -.ninja_deps -ezfio_interface.irp.f -Ezfio_files -Integrals_Monoelec -MO_Basis -Integrals_Bielec -Pseudo -Bitmask -AO_Basis -Electrons -MOGuess Nuclei -Utils +Pseudo SCF -Huckel_guess \ No newline at end of file +Utils +ezfio_interface.irp.f +irpf90.make +irpf90_entities +tags \ No newline at end of file diff --git a/plugins/Hartree_Fock/tree_dependency.png b/plugins/Hartree_Fock/tree_dependency.png index 8a43fb0d..cb1d9738 100644 Binary files a/plugins/Hartree_Fock/tree_dependency.png and b/plugins/Hartree_Fock/tree_dependency.png differ diff --git a/plugins/MRCC/H_apply.irp.f b/plugins/MRCC/H_apply.irp.f deleted file mode 100644 index 7e479529..00000000 --- a/plugins/MRCC/H_apply.irp.f +++ /dev/null @@ -1,28 +0,0 @@ -use bitmasks -BEGIN_SHELL [ /usr/bin/env python ] -from generate_h_apply import * - -s = H_apply("mrcc") -s.data["parameters"] = ", delta_ij_, delta_ii_,Ndet_cas, Ndet_non_cas" -s.data["declarations"] += """ - integer, intent(in) :: Ndet_cas,Ndet_non_cas - double precision, intent(in) :: delta_ij_(Ndet_cas,Ndet_non_cas,*) - double precision, intent(in) :: delta_ii_(Ndet_cas,*) -""" -s.data["keys_work"] = "call mrcc_dress(delta_ij_,delta_ii_,Ndet_cas,Ndet_non_cas,i_generator,key_idx,keys_out,N_int,iproc)" -s.data["params_post"] += ", delta_ij_, delta_ii_, Ndet_cas, Ndet_non_cas" -s.data["params_main"] += "delta_ij_, delta_ii_, Ndet_cas, Ndet_non_cas" -s.data["decls_main"] += """ - integer, intent(in) :: Ndet_cas,Ndet_non_cas - double precision, intent(in) :: delta_ij_(Ndet_cas,Ndet_non_cas,*) - double precision, intent(in) :: delta_ii_(Ndet_cas,*) -""" -s.data["finalization"] = "" -s.data["copy_buffer"] = "" -s.data["generate_psi_guess"] = "" -s.data["size_max"] = "3072" -print s - - -END_SHELL - diff --git a/plugins/MRCC/NEEDED_CHILDREN_MODULES b/plugins/MRCC/NEEDED_CHILDREN_MODULES deleted file mode 100644 index 04ce9e78..00000000 --- a/plugins/MRCC/NEEDED_CHILDREN_MODULES +++ /dev/null @@ -1 +0,0 @@ -Perturbation Selectors_full Generators_full diff --git a/plugins/MRCC/mrcc.irp.f b/plugins/MRCC/mrcc.irp.f deleted file mode 100644 index eaf3f6fa..00000000 --- a/plugins/MRCC/mrcc.irp.f +++ /dev/null @@ -1,67 +0,0 @@ -program mrcc - implicit none - read_wf = .True. - TOUCH read_wf - call run - call run_mrcc -! call run_mrcc_test -end - -subroutine run - implicit none - - integer :: i,j - print *, 'CAS' - print *, '===' - do i=1,N_det_cas - print *, psi_cas_coef(i,:) - call debug_det(psi_cas(1,1,i),N_int) - enddo - -! print *, 'SD' -! print *, '==' -! do i=1,N_det_non_cas -! print *, psi_non_cas_coef(i,:) -! call debug_det(psi_non_cas(1,1,i),N_int) -! enddo - call write_double(6,ci_energy(1),"Initial CI energy") -end -subroutine run_mrcc_test - implicit none - integer :: i,j - double precision :: pt2 - pt2 = 0.d0 - do j=1,N_det - do i=1,N_det - pt2 += psi_coef(i,1)*psi_coef(j,1) * delta_ij(i,j,1) - enddo - enddo - print *, ci_energy(1) - print *, ci_energy(1)+pt2 -end -subroutine run_mrcc - implicit none - integer :: i,j - - double precision :: E_new, E_old, delta_e - integer :: iteration - E_new = 0.d0 - delta_E = 1.d0 - iteration = 0 - do while (delta_E > 1.d-10) - iteration += 1 - print *, '===========================' - print *, 'MRCC Iteration', iteration - print *, '===========================' - print *, '' - E_old = sum(ci_energy_dressed) - call write_double(6,ci_energy_dressed(1),"MRCC energy") - call diagonalize_ci_dressed - E_new = sum(ci_energy_dressed) - delta_E = dabs(E_new - E_old) - enddo - call write_double(6,ci_energy_dressed(1),"Final MRCC energy") - call ezfio_set_mrcc_energy(ci_energy_dressed(1)) -! call save_wavefunction - -end diff --git a/plugins/MRCC/mrcc_utils.irp.f b/plugins/MRCC/mrcc_utils.irp.f deleted file mode 100644 index 016f3762..00000000 --- a/plugins/MRCC/mrcc_utils.irp.f +++ /dev/null @@ -1,171 +0,0 @@ - BEGIN_PROVIDER [ double precision, lambda_mrcc, (N_states,psi_det_size) ] -&BEGIN_PROVIDER [ double precision, lambda_pert, (N_states,psi_det_size) ] - implicit none - BEGIN_DOC - ! cm/ or perturbative 1/Delta_E(m) - END_DOC - integer :: i,k - double precision :: ihpsi(N_states), hii - -do i=1,N_det_non_cas - call i_h_psi(psi_non_cas(1,1,i), psi_cas, psi_cas_coef, N_int, N_det_cas, & - size(psi_cas_coef,1), n_states, ihpsi) - call i_h_j(psi_non_cas(1,1,i),psi_non_cas(1,1,i),N_int,hii) - do k=1,N_states - lambda_pert(k,i) = 1.d0 / (psi_cas_energy_diagonalized(k)-hii) - if (dabs(ihpsi(k)).le.1.d-3) then - lambda_mrcc(k,i) = lambda_pert(k,i) - else - lambda_mrcc(k,i) = psi_non_cas_coef(i,k)/ihpsi(k) - endif - enddo - enddo - -END_PROVIDER - - - - -!BEGIN_PROVIDER [ double precision, delta_ij_non_cas, (N_det_non_cas, N_det_non_cas,N_states) ] -!implicit none -!BEGIN_DOC -!! Dressing matrix in SD basis -!END_DOC -!delta_ij_non_cas = 0.d0 -!call H_apply_mrcc_simple(delta_ij_non_cas,N_det_non_cas) -!END_PROVIDER - - BEGIN_PROVIDER [ double precision, delta_ij, (N_det_cas,N_det_non_cas,N_states) ] -&BEGIN_PROVIDER [ double precision, delta_ii, (N_det_cas,N_states) ] - implicit none - BEGIN_DOC - ! Dressing matrix in N_det basis - END_DOC - integer :: i,j,m - delta_ij = 0.d0 - delta_ii = 0.d0 - call H_apply_mrcc(delta_ij,delta_ii,N_det_cas,N_det_non_cas) -END_PROVIDER - -BEGIN_PROVIDER [ double precision, h_matrix_dressed, (N_det,N_det,N_states) ] - implicit none - BEGIN_DOC - ! Dressed H with Delta_ij - END_DOC - integer :: i, j,istate,ii,jj - do istate = 1,N_states - do j=1,N_det - do i=1,N_det - h_matrix_dressed(i,j,istate) = h_matrix_all_dets(i,j) - enddo - enddo - do ii = 1, N_det_cas - i =idx_cas(ii) - h_matrix_dressed(i,i,istate) += delta_ii(ii,istate) - do jj = 1, N_det_non_cas - j =idx_cas(jj) - h_matrix_dressed(i,j,istate) += delta_ij(ii,jj,istate) - h_matrix_dressed(j,i,istate) += delta_ij(ii,jj,istate) - enddo - enddo - enddo -END_PROVIDER - - - BEGIN_PROVIDER [ double precision, CI_electronic_energy_dressed, (N_states_diag) ] -&BEGIN_PROVIDER [ double precision, CI_eigenvectors_dressed, (N_det,N_states_diag) ] -&BEGIN_PROVIDER [ double precision, CI_eigenvectors_s2_dressed, (N_states_diag) ] - implicit none - BEGIN_DOC - ! Eigenvectors/values of the CI matrix - END_DOC - integer :: i,j - - do j=1,N_states_diag - do i=1,N_det - CI_eigenvectors_dressed(i,j) = psi_coef(i,j) - enddo - enddo - - if (diag_algorithm == "Davidson") then - - integer :: istate - istate = 1 - call davidson_diag_mrcc(psi_det,CI_eigenvectors_dressed,CI_electronic_energy_dressed, & - size(CI_eigenvectors_dressed,1),N_det,N_states_diag,N_int,output_determinants,istate) - - else if (diag_algorithm == "Lapack") then - - double precision, allocatable :: eigenvectors(:,:), eigenvalues(:) - allocate (eigenvectors(size(H_matrix_dressed,1),N_det)) - allocate (eigenvalues(N_det)) - call lapack_diag(eigenvalues,eigenvectors, & - H_matrix_dressed,size(H_matrix_dressed,1),N_det) - CI_electronic_energy_dressed(:) = 0.d0 - do i=1,N_det - CI_eigenvectors_dressed(i,1) = eigenvectors(i,1) - enddo - integer :: i_state - double precision :: s2 - i_state = 0 - if (s2_eig) then - do j=1,N_det - call get_s2_u0(psi_det,eigenvectors(1,j),N_det,N_det,s2) - if(dabs(s2-expected_s2).le.0.3d0)then - i_state += 1 - do i=1,N_det - CI_eigenvectors_dressed(i,i_state) = eigenvectors(i,j) - enddo - CI_electronic_energy_dressed(i_state) = eigenvalues(j) - CI_eigenvectors_s2_dressed(i_state) = s2 - endif - if (i_state.ge.N_states_diag) then - exit - endif - enddo - else - do j=1,N_states_diag - call get_s2_u0(psi_det,eigenvectors(1,j),N_det,N_det,s2) - i_state += 1 - do i=1,N_det - CI_eigenvectors_dressed(i,i_state) = eigenvectors(i,j) - enddo - CI_electronic_energy_dressed(i_state) = eigenvalues(j) - CI_eigenvectors_s2_dressed(i_state) = s2 - enddo - endif - deallocate(eigenvectors,eigenvalues) - endif - -END_PROVIDER - -BEGIN_PROVIDER [ double precision, CI_energy_dressed, (N_states_diag) ] - implicit none - BEGIN_DOC - ! N_states lowest eigenvalues of the dressed CI matrix - END_DOC - - integer :: j - character*(8) :: st - call write_time(output_determinants) - do j=1,N_states_diag - CI_energy_dressed(j) = CI_electronic_energy_dressed(j) + nuclear_repulsion - enddo - -END_PROVIDER - -subroutine diagonalize_CI_dressed - implicit none - BEGIN_DOC -! Replace the coefficients of the CI states by the coefficients of the -! eigenstates of the CI matrix - END_DOC - integer :: i,j - do j=1,N_states_diag - do i=1,N_det - psi_coef(i,j) = CI_eigenvectors_dressed(i,j) - enddo - enddo - SOFT_TOUCH psi_coef - -end diff --git a/plugins/MRCC/tree_dependency.png b/plugins/MRCC/tree_dependency.png deleted file mode 100644 index db540bc5..00000000 Binary files a/plugins/MRCC/tree_dependency.png and /dev/null differ diff --git a/plugins/MRCC_CASSD/.gitignore b/plugins/MRCC_CASSD/.gitignore new file mode 100644 index 00000000..7f33cb9d --- /dev/null +++ b/plugins/MRCC_CASSD/.gitignore @@ -0,0 +1,32 @@ +# Automatically created by $QP_ROOT/scripts/module/module_handler.py +.ninja_deps +.ninja_log +AO_Basis +Bitmask +Determinants +Electrons +Ezfio_files +Generators_full +Hartree_Fock +IRPF90_man +IRPF90_temp +Integrals_Bielec +Integrals_Monoelec +MOGuess +MO_Basis +MRCC_Utils +Makefile +Makefile.depend +Nuclei +Perturbation +Properties +Pseudo +Psiref_CAS +Psiref_Utils +Selectors_full +Utils +ezfio_interface.irp.f +irpf90.make +irpf90_entities +mrcc +tags \ No newline at end of file diff --git a/plugins/MRCC_CASSD/EZFIO.cfg b/plugins/MRCC_CASSD/EZFIO.cfg new file mode 100644 index 00000000..21cc5b98 --- /dev/null +++ b/plugins/MRCC_CASSD/EZFIO.cfg @@ -0,0 +1,4 @@ +[energy] +type: double precision +doc: Calculated energy +interface: ezfio diff --git a/plugins/MRCC_CASSD/NEEDED_CHILDREN_MODULES b/plugins/MRCC_CASSD/NEEDED_CHILDREN_MODULES new file mode 100644 index 00000000..a8404d62 --- /dev/null +++ b/plugins/MRCC_CASSD/NEEDED_CHILDREN_MODULES @@ -0,0 +1 @@ +Perturbation Selectors_full Generators_full Psiref_CAS MRCC_Utils diff --git a/plugins/MRCC_CASSD/README.rst b/plugins/MRCC_CASSD/README.rst new file mode 100644 index 00000000..a0367d40 --- /dev/null +++ b/plugins/MRCC_CASSD/README.rst @@ -0,0 +1,33 @@ +=========== +MRCC Module +=========== + +MRCC as a coupled cluster on a CAS+SD wave function. + +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 `_ +* `Psiref_CAS `_ +* `MRCC_Utils `_ + +Documentation +============= + +.. Do not edit this section. It was auto-generated from the +.. by the `update_README.py` script. + +`mrcc `_ + Undocumented + + +`print_cas_coefs `_ + Undocumented + diff --git a/plugins/MRCC_CASSD/mrcc_cassd.irp.f b/plugins/MRCC_CASSD/mrcc_cassd.irp.f new file mode 100644 index 00000000..e784a167 --- /dev/null +++ b/plugins/MRCC_CASSD/mrcc_cassd.irp.f @@ -0,0 +1,24 @@ +program mrcc + implicit none + if (.not.read_wf) then + print *, 'read_wf has to be true.' + stop 1 + endif + call print_cas_coefs + call run_mrcc +end + +subroutine print_cas_coefs + implicit none + + integer :: i,j + print *, 'CAS' + print *, '===' + do i=1,N_det_cas + print *, psi_cas_coef(i,:) + call debug_det(psi_cas(1,1,i),N_int) + enddo + + call write_double(6,ci_energy(1),"Initial CI energy") +end + diff --git a/plugins/MRCC_Utils/.gitignore b/plugins/MRCC_Utils/.gitignore new file mode 100644 index 00000000..e6279f11 --- /dev/null +++ b/plugins/MRCC_Utils/.gitignore @@ -0,0 +1,31 @@ +# Automatically created by $QP_ROOT/scripts/module/module_handler.py +.ninja_deps +.ninja_log +AO_Basis +Bitmask +Determinants +Electrons +Ezfio_files +Generators_full +Hartree_Fock +IRPF90_man +IRPF90_temp +Integrals_Bielec +Integrals_Monoelec +MOGuess +MO_Basis +Makefile +Makefile.depend +Nuclei +Perturbation +Properties +Pseudo +Psiref_CAS +Psiref_Utils +Selectors_full +Utils +ezfio_interface.irp.f +irpf90.make +irpf90_entities +mrcc_general +tags \ No newline at end of file diff --git a/plugins/MRCC/EZFIO.cfg b/plugins/MRCC_Utils/EZFIO.cfg similarity index 100% rename from plugins/MRCC/EZFIO.cfg rename to plugins/MRCC_Utils/EZFIO.cfg diff --git a/plugins/MRCC_Utils/H_apply.irp.f b/plugins/MRCC_Utils/H_apply.irp.f new file mode 100644 index 00000000..455c37da --- /dev/null +++ b/plugins/MRCC_Utils/H_apply.irp.f @@ -0,0 +1,28 @@ +use bitmasks +BEGIN_SHELL [ /usr/bin/env python ] +from generate_h_apply import * + +s = H_apply("mrcc") +s.data["parameters"] = ", delta_ij_, delta_ii_,Ndet_ref, Ndet_non_ref" +s.data["declarations"] += """ + integer, intent(in) :: Ndet_ref,Ndet_non_ref + double precision, intent(in) :: delta_ij_(Ndet_ref,Ndet_non_ref,*) + double precision, intent(in) :: delta_ii_(Ndet_ref,*) +""" +s.data["keys_work"] = "call mrcc_dress(delta_ij_,delta_ii_,Ndet_ref,Ndet_non_ref,i_generator,key_idx,keys_out,N_int,iproc)" +s.data["params_post"] += ", delta_ij_, delta_ii_, Ndet_ref, Ndet_non_ref" +s.data["params_main"] += "delta_ij_, delta_ii_, Ndet_ref, Ndet_non_ref" +s.data["decls_main"] += """ + integer, intent(in) :: Ndet_ref,Ndet_non_ref + double precision, intent(in) :: delta_ij_(Ndet_ref,Ndet_non_ref,*) + double precision, intent(in) :: delta_ii_(Ndet_ref,*) +""" +s.data["finalization"] = "" +s.data["copy_buffer"] = "" +s.data["generate_psi_guess"] = "" +s.data["size_max"] = "3072" +print s + + +END_SHELL + diff --git a/plugins/MRCC_Utils/NEEDED_CHILDREN_MODULES b/plugins/MRCC_Utils/NEEDED_CHILDREN_MODULES new file mode 100644 index 00000000..5b16423e --- /dev/null +++ b/plugins/MRCC_Utils/NEEDED_CHILDREN_MODULES @@ -0,0 +1 @@ +Perturbation Selectors_full Generators_full Psiref_Utils diff --git a/plugins/MRCC/README.rst b/plugins/MRCC_Utils/README.rst similarity index 61% rename from plugins/MRCC/README.rst rename to plugins/MRCC_Utils/README.rst index d2f1580e..71392798 100644 --- a/plugins/MRCC/README.rst +++ b/plugins/MRCC_Utils/README.rst @@ -13,6 +13,7 @@ Needed Modules * `Perturbation `_ * `Selectors_full `_ * `Generators_full `_ +* `Psiref_Utils `_ Documentation ============= @@ -20,23 +21,23 @@ Documentation .. Do not edit this section. It was auto-generated from the .. by the `update_README.py` script. -`ci_eigenvectors_dressed `_ +`ci_eigenvectors_dressed `_ Eigenvectors/values of the CI matrix -`ci_eigenvectors_s2_dressed `_ +`ci_eigenvectors_s2_dressed `_ Eigenvectors/values of the CI matrix -`ci_electronic_energy_dressed `_ +`ci_electronic_energy_dressed `_ Eigenvectors/values of the CI matrix -`ci_energy_dressed `_ +`ci_energy_dressed `_ N_states lowest eigenvalues of the dressed CI matrix -`davidson_diag_hjj_mrcc `_ +`davidson_diag_hjj_mrcc `_ Davidson diagonalization with specific diagonal elements of the H matrix .br H_jj : specific diagonal H matrix elements to diagonalize de Davidson @@ -57,7 +58,7 @@ Documentation Initial guess vectors are not necessarily orthonormal -`davidson_diag_mrcc `_ +`davidson_diag_mrcc `_ Davidson diagonalization. .br dets_in : bitmasks corresponding to determinants @@ -76,66 +77,45 @@ Documentation Initial guess vectors are not necessarily orthonormal -`delta_ij `_ +`delta_ii `_ Dressing matrix in N_det basis -`delta_ij_non_cas `_ - Dressing matrix in SD basis +`delta_ij `_ + Dressing matrix in N_det basis -`diagonalize_ci_dressed `_ +`diagonalize_ci_dressed `_ Replace the coefficients of the CI states by the coefficients of the eigenstates of the CI matrix -`dressing_type `_ - [ Simple | MRCC ] - - -`find_triples_and_quadruples `_ +`find_triples_and_quadruples `_ Undocumented -`h_apply_mrcc `_ +`h_apply_mrcc `_ 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_mrcc_diexc `_ +`h_apply_mrcc_diexc `_ Generate all double excitations of key_in using the bit masks of holes and particles. Assume N_int is already provided. -`h_apply_mrcc_monoexc `_ +`h_apply_mrcc_monoexc `_ Generate all single excitations of key_in using the bit masks of holes and particles. Assume N_int is already provided. -`h_apply_mrcc_simple `_ - 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_mrcc_simple_diexc `_ - Generate all double excitations of key_in using the bit masks of holes and - particles. - Assume N_int is already provided. - - -`h_apply_mrcc_simple_monoexc `_ - Generate all single excitations of key_in using the bit masks of holes and - particles. - Assume N_int is already provided. - - -`h_matrix_dressed `_ +`h_matrix_dressed `_ Dressed H with Delta_ij -`h_u_0_mrcc `_ +`h_u_0_mrcc `_ Computes v_0 = H|u_0> .br n : number of determinants @@ -143,38 +123,26 @@ Documentation H_jj : array of -`lambda_mrcc `_ - cm/ +`lambda_mrcc `_ + cm/ or perturbative 1/Delta_E(m) -`lambda_pert `_ - cm/ +`lambda_pert `_ + cm/ or perturbative 1/Delta_E(m) -`mrcc `_ +`mrcc_dress `_ Undocumented -`mrcc_dress `_ +`mrcc_dress_simple `_ Undocumented -`mrcc_dress_simple `_ - Undocumented - - -`psi_cas_lock `_ - Locks on CAS determinants to fill delta_ij - - -`run `_ - Undocumented - - -`run_mrcc `_ - Undocumented - - -`run_mrcc_test `_ +`psi_ref_lock `_ + Locks on ref determinants to fill delta_ij + + +`run_mrcc `_ Undocumented diff --git a/plugins/MRCC/davidson.irp.f b/plugins/MRCC_Utils/davidson.irp.f similarity index 97% rename from plugins/MRCC/davidson.irp.f rename to plugins/MRCC_Utils/davidson.irp.f index 588e1831..d9e697a1 100644 --- a/plugins/MRCC/davidson.irp.f +++ b/plugins/MRCC_Utils/davidson.irp.f @@ -35,7 +35,7 @@ subroutine davidson_diag_mrcc(dets_in,u_in,energies,dim_in,sze,N_st,Nint,iunit,i allocate(H_jj(sze)) !$OMP PARALLEL DEFAULT(NONE) & - !$OMP SHARED(sze,H_jj,N_det_cas,dets_in,Nint,istate,delta_ii,idx_cas) & + !$OMP SHARED(sze,H_jj,N_det_ref,dets_in,Nint,istate,delta_ii,idx_ref) & !$OMP PRIVATE(i) !$OMP DO SCHEDULE(guided) do i=1,sze @@ -43,8 +43,8 @@ subroutine davidson_diag_mrcc(dets_in,u_in,energies,dim_in,sze,N_st,Nint,iunit,i enddo !$OMP END DO !$OMP DO SCHEDULE(guided) - do i=1,N_det_cas - H_jj(idx_cas(i)) += delta_ii(i,istate) + do i=1,N_det_ref + H_jj(idx_ref(i)) += delta_ii(i,istate) enddo !$OMP END DO !$OMP END PARALLEL @@ -384,7 +384,7 @@ subroutine H_u_0_mrcc(v_0,u_0,H_jj,n,keys_tmp,Nint,istate) integer, parameter :: block_size = 157 !$OMP PARALLEL DEFAULT(NONE) & !$OMP PRIVATE(i,hij,j,k,idx,jj,ii,vt) & - !$OMP SHARED(n_det_cas,n_det_non_cas,idx_cas,idx_non_cas,n,H_jj,u_0,keys_tmp,Nint,v_0,istate,delta_ij) + !$OMP SHARED(n_det_ref,n_det_non_ref,idx_ref,idx_non_ref,n,H_jj,u_0,keys_tmp,Nint,v_0,istate,delta_ij) !$OMP DO SCHEDULE(static) do i=1,n v_0(i) = H_jj(i) * u_0(i) @@ -409,10 +409,10 @@ subroutine H_u_0_mrcc(v_0,u_0,H_jj,n,keys_tmp,Nint,istate) !$OMP END DO !$OMP DO SCHEDULE(guided) - do ii=1,n_det_cas - i = idx_cas(ii) - do jj = 1, n_det_non_cas - j = idx_non_cas(jj) + do ii=1,n_det_ref + i = idx_ref(ii) + do jj = 1, n_det_non_ref + j = idx_non_ref(jj) vt (i) = vt (i) + delta_ij(ii,jj,istate)*u_0(j) vt (j) = vt (j) + delta_ij(ii,jj,istate)*u_0(i) enddo diff --git a/plugins/MRCC/mrcc_dress.irp.f b/plugins/MRCC_Utils/mrcc_dress.irp.f similarity index 75% rename from plugins/MRCC/mrcc_dress.irp.f rename to plugins/MRCC_Utils/mrcc_dress.irp.f index 53f94f5b..8c86f7fa 100644 --- a/plugins/MRCC/mrcc_dress.irp.f +++ b/plugins/MRCC_Utils/mrcc_dress.irp.f @@ -1,25 +1,25 @@ use omp_lib -BEGIN_PROVIDER [ integer(omp_lock_kind), psi_cas_lock, (psi_det_size) ] +BEGIN_PROVIDER [ integer(omp_lock_kind), psi_ref_lock, (psi_det_size) ] implicit none BEGIN_DOC - ! Locks on CAS determinants to fill delta_ij + ! Locks on ref determinants to fill delta_ij END_DOC integer :: i do i=1,psi_det_size - call omp_init_lock( psi_cas_lock(i) ) + call omp_init_lock( psi_ref_lock(i) ) enddo END_PROVIDER -subroutine mrcc_dress(delta_ij_, delta_ii_, Ndet_cas, Ndet_non_cas,i_generator,n_selected,det_buffer,Nint,iproc) +subroutine mrcc_dress(delta_ij_, delta_ii_, Ndet_ref, Ndet_non_ref,i_generator,n_selected,det_buffer,Nint,iproc) use bitmasks implicit none integer, intent(in) :: i_generator,n_selected, Nint, iproc - integer, intent(in) :: Ndet_cas, Ndet_non_cas - double precision, intent(inout) :: delta_ij_(Ndet_cas,Ndet_non_cas,*) - double precision, intent(inout) :: delta_ii_(Ndet_cas,*) + integer, intent(in) :: Ndet_ref, Ndet_non_ref + double precision, intent(inout) :: delta_ij_(Ndet_ref,Ndet_non_ref,*) + double precision, intent(inout) :: delta_ii_(Ndet_ref,*) integer(bit_kind), intent(in) :: det_buffer(Nint,2,n_selected) integer :: i,j,k,l @@ -43,18 +43,18 @@ subroutine mrcc_dress(delta_ij_, delta_ii_, Ndet_cas, Ndet_non_cas,i_generator,n call find_triples_and_quadruples(i_generator,n_selected,det_buffer,Nint,tq,N_tq) - allocate (dIa_hla(N_states,Ndet_non_cas)) + allocate (dIa_hla(N_states,Ndet_non_ref)) ! |I> ! |alpha> do i_alpha=1,N_tq - call get_excitation_degree_vector(psi_non_cas,tq(1,1,i_alpha),degree_alpha,Nint,N_det_non_cas,idx_alpha) + call get_excitation_degree_vector(psi_non_ref,tq(1,1,i_alpha),degree_alpha,Nint,N_det_non_ref,idx_alpha) ! |I> - do i_I=1,N_det_cas + do i_I=1,N_det_ref ! Find triples and quadruple grand parents - call get_excitation_degree(tq(1,1,i_alpha),psi_cas(1,1,i_I),degree,Nint) + call get_excitation_degree(tq(1,1,i_alpha),psi_ref(1,1,i_I),degree,Nint) if (degree > 4) then cycle endif @@ -65,22 +65,22 @@ subroutine mrcc_dress(delta_ij_, delta_ii_, Ndet_cas, Ndet_non_cas,i_generator,n ! |alpha> do k_sd=1,idx_alpha(0) - call get_excitation_degree(psi_cas(1,1,i_I),psi_non_cas(1,1,idx_alpha(k_sd)),degree,Nint) + call get_excitation_degree(psi_ref(1,1,i_I),psi_non_ref(1,1,idx_alpha(k_sd)),degree,Nint) if (degree > 2) then cycle endif ! ! - call i_h_j(psi_cas(1,1,i_I),psi_non_cas(1,1,idx_alpha(k_sd)),Nint,hIk) + call i_h_j(psi_ref(1,1,i_I),psi_non_ref(1,1,idx_alpha(k_sd)),Nint,hIk) do i_state=1,N_states dIk(i_state) = hIk * lambda_mrcc(i_state,idx_alpha(k_sd)) enddo ! |l> = Exc(k -> alpha) |I> - call get_excitation(psi_non_cas(1,1,idx_alpha(k_sd)),tq(1,1,i_alpha),exc,degree,phase,Nint) + call get_excitation(psi_non_ref(1,1,idx_alpha(k_sd)),tq(1,1,i_alpha),exc,degree,phase,Nint) call decode_exc(exc,degree,h1,p1,h2,p2,s1,s2) do k=1,N_int - tmp_det(k,1) = psi_cas(k,1,i_I) - tmp_det(k,2) = psi_cas(k,2,i_I) + tmp_det(k,1) = psi_ref(k,1,i_I) + tmp_det(k,2) = psi_ref(k,2,i_I) enddo ! Hole (see list_to_bitstring) iint = ishft(h1-1,-bit_kind_shift) + 1 @@ -108,10 +108,10 @@ subroutine mrcc_dress(delta_ij_, delta_ii_, Ndet_cas, Ndet_non_cas,i_generator,n dka(i_state) = 0.d0 enddo do l_sd=k_sd+1,idx_alpha(0) - call get_excitation_degree(tmp_det,psi_non_cas(1,1,idx_alpha(l_sd)),degree,Nint) + call get_excitation_degree(tmp_det,psi_non_ref(1,1,idx_alpha(l_sd)),degree,Nint) if (degree == 0) then - call get_excitation(psi_cas(1,1,i_I),psi_non_cas(1,1,idx_alpha(l_sd)),exc,degree,phase2,Nint) - call i_h_j(psi_cas(1,1,i_I),psi_non_cas(1,1,idx_alpha(l_sd)),Nint,hIl) + call get_excitation(psi_ref(1,1,i_I),psi_non_ref(1,1,idx_alpha(l_sd)),exc,degree,phase2,Nint) + call i_h_j(psi_ref(1,1,i_I),psi_non_ref(1,1,idx_alpha(l_sd)),Nint,hIl) do i_state=1,N_states dka(i_state) = hIl * lambda_mrcc(i_state,idx_alpha(l_sd)) * phase * phase2 enddo @@ -124,28 +124,28 @@ subroutine mrcc_dress(delta_ij_, delta_ii_, Ndet_cas, Ndet_non_cas,i_generator,n enddo do i_state=1,N_states - ci_inv(i_state) = 1.d0/psi_cas_coef(i_I,i_state) + ci_inv(i_state) = 1.d0/psi_ref_coef(i_I,i_state) enddo do l_sd=1,idx_alpha(0) k_sd = idx_alpha(l_sd) - call i_h_j(tq(1,1,i_alpha),psi_non_cas(1,1,idx_alpha(l_sd)),Nint,hla) + call i_h_j(tq(1,1,i_alpha),psi_non_ref(1,1,idx_alpha(l_sd)),Nint,hla) do i_state=1,N_states dIa_hla(i_state,k_sd) = dIa(i_state) * hla enddo enddo - call omp_set_lock( psi_cas_lock(i_I) ) + call omp_set_lock( psi_ref_lock(i_I) ) do l_sd=1,idx_alpha(0) k_sd = idx_alpha(l_sd) do i_state=1,N_states delta_ij_(i_I,k_sd,i_state) += dIa_hla(i_state,k_sd) - if(dabs(psi_cas_coef(i_I,i_state)).ge.5.d-5)then - delta_ii_(i_I,i_state) -= dIa_hla(i_state,k_sd) * ci_inv(i_state) * psi_non_cas_coef(k_sd,i_state) + if(dabs(psi_ref_coef(i_I,i_state)).ge.5.d-5)then + delta_ii_(i_I,i_state) -= dIa_hla(i_state,k_sd) * ci_inv(i_state) * psi_non_ref_coef(k_sd,i_state) else delta_ii_(i_I,i_state) = 0.d0 endif enddo enddo - call omp_unset_lock( psi_cas_lock(i_I) ) + call omp_unset_lock( psi_ref_lock(i_I) ) enddo enddo deallocate (dIa_hla) @@ -157,13 +157,13 @@ end -subroutine mrcc_dress_simple(delta_ij_non_cas_,Ndet_non_cas,i_generator,n_selected,det_buffer,Nint,iproc) +subroutine mrcc_dress_simple(delta_ij_non_ref_,Ndet_non_ref,i_generator,n_selected,det_buffer,Nint,iproc) use bitmasks implicit none integer, intent(in) :: i_generator,n_selected, Nint, iproc - integer, intent(in) :: Ndet_non_cas - double precision, intent(inout) :: delta_ij_non_cas_(Ndet_non_cas,Ndet_non_cas,*) + integer, intent(in) :: Ndet_non_ref + double precision, intent(inout) :: delta_ij_non_ref_(Ndet_non_ref,Ndet_non_ref,*) integer(bit_kind), intent(in) :: det_buffer(Nint,2,n_selected) integer :: i,j,k,m @@ -184,18 +184,18 @@ subroutine mrcc_dress_simple(delta_ij_non_cas_,Ndet_non_cas,i_generator,n_select double precision :: f(N_states) do i=1,N_tq - call get_excitation_degree_vector(psi_non_cas,tq(1,1,i),degree,Nint,Ndet_non_cas,idx) + call get_excitation_degree_vector(psi_non_ref,tq(1,1,i),degree,Nint,Ndet_non_ref,idx) call i_h_j(tq(1,1,i),tq(1,1,i),Nint,haa) do m=1,N_states f(m) = 1.d0/(ci_electronic_energy(m)-haa) enddo do k=1,idx(0) - call i_h_j(tq(1,1,i),psi_non_cas(1,1,idx(k)),Nint,hka) + call i_h_j(tq(1,1,i),psi_non_ref(1,1,idx(k)),Nint,hka) do j=k,idx(0) - call i_h_j(tq(1,1,i),psi_non_cas(1,1,idx(j)),Nint,haj) + call i_h_j(tq(1,1,i),psi_non_ref(1,1,idx(j)),Nint,haj) do m=1,N_states - delta_ij_non_cas_(idx(k), idx(j),m) += haj*hka* f(m) - delta_ij_non_cas_(idx(j), idx(k),m) += haj*hka* f(m) + delta_ij_non_ref_(idx(k), idx(j),m) += haj*hka* f(m) + delta_ij_non_ref_(idx(j), idx(k),m) += haj*hka* f(m) enddo enddo enddo @@ -231,9 +231,9 @@ subroutine find_triples_and_quadruples(i_generator,n_selected,det_buffer,Nint,tq endif ! Select determinants that are triple or quadruple excitations - ! from the CAS + ! from the ref good = .True. - call get_excitation_degree_vector(psi_cas,det_buffer(1,1,i),degree,Nint,N_det_cas,idx) + call get_excitation_degree_vector(psi_ref,det_buffer(1,1,i),degree,Nint,N_det_ref,idx) do k=1,idx(0) if (degree(k) < 3) then good = .False. diff --git a/plugins/MRCC_Utils/mrcc_general.irp.f b/plugins/MRCC_Utils/mrcc_general.irp.f new file mode 100644 index 00000000..53650164 --- /dev/null +++ b/plugins/MRCC_Utils/mrcc_general.irp.f @@ -0,0 +1,29 @@ +subroutine run_mrcc + implicit none + integer :: i,j + + double precision :: E_new, E_old, delta_e + integer :: iteration + E_new = 0.d0 + delta_E = 1.d0 + iteration = 0 + do while (delta_E > 1.d-10) + iteration += 1 + print *, '===========================' + print *, 'MRCC Iteration', iteration + print *, '===========================' + print *, '' + E_old = sum(ci_energy_dressed) + call write_double(6,ci_energy_dressed(1),"MRCC energy") + call diagonalize_ci_dressed + E_new = sum(ci_energy_dressed) + delta_E = dabs(E_new - E_old) + if (iteration > 20) then + exit + endif + enddo + call write_double(6,ci_energy_dressed(1),"Final MRCC energy") + call ezfio_set_mrcc_energy(ci_energy_dressed(1)) + call save_wavefunction + +end diff --git a/plugins/MRCC_Utils/mrcc_utils.irp.f b/plugins/MRCC_Utils/mrcc_utils.irp.f new file mode 100644 index 00000000..d8ed5250 --- /dev/null +++ b/plugins/MRCC_Utils/mrcc_utils.irp.f @@ -0,0 +1,171 @@ + BEGIN_PROVIDER [ double precision, lambda_mrcc, (N_states,psi_det_size) ] +&BEGIN_PROVIDER [ double precision, lambda_pert, (N_states,psi_det_size) ] + implicit none + BEGIN_DOC + ! cm/ or perturbative 1/Delta_E(m) + END_DOC + integer :: i,k + double precision :: ihpsi(N_states), hii + + do i=1,N_det_non_ref + call i_h_psi(psi_non_ref(1,1,i), psi_ref, psi_ref_coef, N_int, N_det_ref,& + size(psi_ref_coef,1), n_states, ihpsi) + call i_h_j(psi_non_ref(1,1,i),psi_non_ref(1,1,i),N_int,hii) + do k=1,N_states + lambda_pert(k,i) = 1.d0 / (psi_ref_energy_diagonalized(k)-hii) + if (dabs(ihpsi(k)).le.1.d-3) then + lambda_mrcc(k,i) = lambda_pert(k,i) + else + lambda_mrcc(k,i) = psi_non_ref_coef(i,k)/ihpsi(k) + endif + enddo + enddo + +END_PROVIDER + + + + +!BEGIN_PROVIDER [ double precision, delta_ij_non_ref, (N_det_non_ref, N_det_non_ref,N_states) ] +!implicit none +!BEGIN_DOC +!! Dressing matrix in SD basis +!END_DOC +!delta_ij_non_ref = 0.d0 +!call H_apply_mrcc_simple(delta_ij_non_ref,N_det_non_ref) +!END_PROVIDER + + BEGIN_PROVIDER [ double precision, delta_ij, (N_det_ref,N_det_non_ref,N_states) ] +&BEGIN_PROVIDER [ double precision, delta_ii, (N_det_ref,N_states) ] + implicit none + BEGIN_DOC + ! Dressing matrix in N_det basis + END_DOC + integer :: i,j,m + delta_ij = 0.d0 + delta_ii = 0.d0 + call H_apply_mrcc(delta_ij,delta_ii,N_det_ref,N_det_non_ref) +END_PROVIDER + +BEGIN_PROVIDER [ double precision, h_matrix_dressed, (N_det,N_det,N_states) ] + implicit none + BEGIN_DOC + ! Dressed H with Delta_ij + END_DOC + integer :: i, j,istate,ii,jj + do istate = 1,N_states + do j=1,N_det + do i=1,N_det + h_matrix_dressed(i,j,istate) = h_matrix_all_dets(i,j) + enddo + enddo + do ii = 1, N_det_ref + i =idx_ref(ii) + h_matrix_dressed(i,i,istate) += delta_ii(ii,istate) + do jj = 1, N_det_non_ref + j =idx_ref(jj) + h_matrix_dressed(i,j,istate) += delta_ij(ii,jj,istate) + h_matrix_dressed(j,i,istate) += delta_ij(ii,jj,istate) + enddo + enddo + enddo +END_PROVIDER + + + BEGIN_PROVIDER [ double precision, CI_electronic_energy_dressed, (N_states_diag) ] +&BEGIN_PROVIDER [ double precision, CI_eigenvectors_dressed, (N_det,N_states_diag) ] +&BEGIN_PROVIDER [ double precision, CI_eigenvectors_s2_dressed, (N_states_diag) ] + implicit none + BEGIN_DOC + ! Eigenvectors/values of the CI matrix + END_DOC + integer :: i,j + + do j=1,N_states_diag + do i=1,N_det + CI_eigenvectors_dressed(i,j) = psi_coef(i,j) + enddo + enddo + + if (diag_algorithm == "Davidson") then + + integer :: istate + istate = 1 + call davidson_diag_mrcc(psi_det,CI_eigenvectors_dressed,CI_electronic_energy_dressed,& + size(CI_eigenvectors_dressed,1),N_det,N_states_diag,N_int,output_determinants,istate) + + else if (diag_algorithm == "Lapack") then + + double precision, allocatable :: eigenvectors(:,:), eigenvalues(:) + allocate (eigenvectors(size(H_matrix_dressed,1),N_det)) + allocate (eigenvalues(N_det)) + call lapack_diag(eigenvalues,eigenvectors, & + H_matrix_dressed,size(H_matrix_dressed,1),N_det) + CI_electronic_energy_dressed(:) = 0.d0 + do i=1,N_det + CI_eigenvectors_dressed(i,1) = eigenvectors(i,1) + enddo + integer :: i_state + double precision :: s2 + i_state = 0 + if (s2_eig) then + do j=1,N_det + call get_s2_u0(psi_det,eigenvectors(1,j),N_det,N_det,s2) + if(dabs(s2-expected_s2).le.0.3d0)then + i_state += 1 + do i=1,N_det + CI_eigenvectors_dressed(i,i_state) = eigenvectors(i,j) + enddo + CI_electronic_energy_dressed(i_state) = eigenvalues(j) + CI_eigenvectors_s2_dressed(i_state) = s2 + endif + if (i_state.ge.N_states_diag) then + exit + endif + enddo + else + do j=1,N_states_diag + call get_s2_u0(psi_det,eigenvectors(1,j),N_det,N_det,s2) + i_state += 1 + do i=1,N_det + CI_eigenvectors_dressed(i,i_state) = eigenvectors(i,j) + enddo + CI_electronic_energy_dressed(i_state) = eigenvalues(j) + CI_eigenvectors_s2_dressed(i_state) = s2 + enddo + endif + deallocate(eigenvectors,eigenvalues) + endif + +END_PROVIDER + +BEGIN_PROVIDER [ double precision, CI_energy_dressed, (N_states_diag) ] + implicit none + BEGIN_DOC + ! N_states lowest eigenvalues of the dressed CI matrix + END_DOC + + integer :: j + character*(8) :: st + call write_time(output_determinants) + do j=1,N_states_diag + CI_energy_dressed(j) = CI_electronic_energy_dressed(j) + nuclear_repulsion + enddo + +END_PROVIDER + +subroutine diagonalize_CI_dressed + implicit none + BEGIN_DOC +! Replace the coefficients of the CI states by the coefficients of the +! eigenstates of the CI matrix + END_DOC + integer :: i,j + do j=1,N_states_diag + do i=1,N_det + psi_coef(i,j) = CI_eigenvectors_dressed(i,j) + enddo + enddo + SOFT_TOUCH psi_coef + +end diff --git a/plugins/MRCC_Utils/tree_dependency.png b/plugins/MRCC_Utils/tree_dependency.png new file mode 100644 index 00000000..500e5d43 Binary files /dev/null and b/plugins/MRCC_Utils/tree_dependency.png differ diff --git a/plugins/Molden/.gitignore b/plugins/Molden/.gitignore index 30f500b1..95cab459 100644 --- a/plugins/Molden/.gitignore +++ b/plugins/Molden/.gitignore @@ -6,7 +6,6 @@ tags irpf90.make Makefile Makefile.depend -build.ninja .ninja_log .ninja_deps ezfio_interface.irp.f @@ -16,4 +15,4 @@ Utils AO_Basis Electrons Nuclei -print_mo \ No newline at end of file +print_mo diff --git a/plugins/Molden/tree_dependency.png b/plugins/Molden/tree_dependency.png index 2aadeda2..0216e589 100644 Binary files a/plugins/Molden/tree_dependency.png and b/plugins/Molden/tree_dependency.png differ diff --git a/plugins/Perturbation/README.rst b/plugins/Perturbation/README.rst index aad453e8..7be62489 100644 --- a/plugins/Perturbation/README.rst +++ b/plugins/Perturbation/README.rst @@ -90,32 +90,32 @@ Documentation routine. -`perturb_buffer_by_mono_dipole_moment_z `_ +`perturb_buffer_by_mono_dipole_moment_z `_ Applly pertubration ``dipole_moment_z`` to the buffer of determinants generated in the H_apply routine. -`perturb_buffer_by_mono_epstein_nesbet `_ +`perturb_buffer_by_mono_epstein_nesbet `_ Applly pertubration ``epstein_nesbet`` to the buffer of determinants generated in the H_apply routine. -`perturb_buffer_by_mono_epstein_nesbet_2x2 `_ +`perturb_buffer_by_mono_epstein_nesbet_2x2 `_ Applly pertubration ``epstein_nesbet_2x2`` to the buffer of determinants generated in the H_apply routine. -`perturb_buffer_by_mono_epstein_nesbet_sc2 `_ +`perturb_buffer_by_mono_epstein_nesbet_sc2 `_ Applly pertubration ``epstein_nesbet_sc2`` to the buffer of determinants generated in the H_apply routine. -`perturb_buffer_by_mono_epstein_nesbet_sc2_no_projected `_ +`perturb_buffer_by_mono_epstein_nesbet_sc2_no_projected `_ Applly pertubration ``epstein_nesbet_sc2_no_projected`` to the buffer of determinants generated in the H_apply routine. -`perturb_buffer_by_mono_epstein_nesbet_sc2_projected `_ +`perturb_buffer_by_mono_epstein_nesbet_sc2_projected `_ Applly pertubration ``epstein_nesbet_sc2_projected`` to the buffer of determinants generated in the H_apply routine. @@ -125,7 +125,7 @@ Documentation routine. -`perturb_buffer_by_mono_moller_plesset `_ +`perturb_buffer_by_mono_moller_plesset `_ Applly pertubration ``moller_plesset`` to the buffer of determinants generated in the H_apply routine. @@ -135,32 +135,32 @@ Documentation routine. -`perturb_buffer_dipole_moment_z `_ +`perturb_buffer_dipole_moment_z `_ Applly pertubration ``dipole_moment_z`` to the buffer of determinants generated in the H_apply routine. -`perturb_buffer_epstein_nesbet `_ +`perturb_buffer_epstein_nesbet `_ Applly pertubration ``epstein_nesbet`` to the buffer of determinants generated in the H_apply routine. -`perturb_buffer_epstein_nesbet_2x2 `_ +`perturb_buffer_epstein_nesbet_2x2 `_ Applly pertubration ``epstein_nesbet_2x2`` to the buffer of determinants generated in the H_apply routine. -`perturb_buffer_epstein_nesbet_sc2 `_ +`perturb_buffer_epstein_nesbet_sc2 `_ Applly pertubration ``epstein_nesbet_sc2`` to the buffer of determinants generated in the H_apply routine. -`perturb_buffer_epstein_nesbet_sc2_no_projected `_ +`perturb_buffer_epstein_nesbet_sc2_no_projected `_ Applly pertubration ``epstein_nesbet_sc2_no_projected`` to the buffer of determinants generated in the H_apply routine. -`perturb_buffer_epstein_nesbet_sc2_projected `_ +`perturb_buffer_epstein_nesbet_sc2_projected `_ Applly pertubration ``epstein_nesbet_sc2_projected`` to the buffer of determinants generated in the H_apply routine. @@ -170,7 +170,7 @@ Documentation routine. -`perturb_buffer_moller_plesset `_ +`perturb_buffer_moller_plesset `_ Applly pertubration ``moller_plesset`` to the buffer of determinants generated in the H_apply routine. diff --git a/plugins/Perturbation/tree_dependency.png b/plugins/Perturbation/tree_dependency.png index 1b361288..dac64544 100644 Binary files a/plugins/Perturbation/tree_dependency.png and b/plugins/Perturbation/tree_dependency.png differ diff --git a/plugins/Properties/tree_dependency.png b/plugins/Properties/tree_dependency.png index 680a08ee..1ba8d487 100644 Binary files a/plugins/Properties/tree_dependency.png and b/plugins/Properties/tree_dependency.png differ diff --git a/plugins/MRCC/.gitignore b/plugins/Psiref_CAS/.gitignore similarity index 74% rename from plugins/MRCC/.gitignore rename to plugins/Psiref_CAS/.gitignore index 543bcd0a..d98a4abc 100644 --- a/plugins/MRCC/.gitignore +++ b/plugins/Psiref_CAS/.gitignore @@ -1,30 +1,29 @@ -# Automatically created by /home/giner/quantum_package/scripts/module/module_handler.py -IRPF90_temp +# Automatically created by $QP_ROOT/scripts/module/module_handler.py +.ninja_deps +.ninja_log +AO_Basis +Bitmask +Determinants +Electrons +Ezfio_files +Generators_full +Hartree_Fock IRPF90_man -irpf90_entities -tags -irpf90.make +IRPF90_temp +Integrals_Bielec +Integrals_Monoelec +MOGuess +MO_Basis Makefile Makefile.depend -build.ninja -.ninja_log -.ninja_deps -ezfio_interface.irp.f -Ezfio_files -Perturbation -Determinants -Utils -Integrals_Monoelec -MO_Basis -Selectors_full -Integrals_Bielec -Pseudo -Generators_full -Bitmask -AO_Basis -Electrons -MOGuess Nuclei -Hartree_Fock +Perturbation Properties -mrcc \ No newline at end of file +Pseudo +Selectors_full +Utils +ezfio_interface.irp.f +irpf90.make +irpf90_entities +mrcc_general +tags \ No newline at end of file diff --git a/plugins/Psiref_CAS/NEEDED_CHILDREN_MODULES b/plugins/Psiref_CAS/NEEDED_CHILDREN_MODULES new file mode 100644 index 00000000..7e790003 --- /dev/null +++ b/plugins/Psiref_CAS/NEEDED_CHILDREN_MODULES @@ -0,0 +1 @@ +Psiref_Utils diff --git a/plugins/Psiref_CAS/README.rst b/plugins/Psiref_CAS/README.rst new file mode 100644 index 00000000..3d4726e1 --- /dev/null +++ b/plugins/Psiref_CAS/README.rst @@ -0,0 +1,24 @@ +======================= +Psiref_threshold Module +======================= + + +Reference wave function is defined as all determinants with coefficients +such that | c_i/c_max | > threshold. + +Documentation +============= + +.. Do not edit this section. It was auto-generated from the +.. by the `update_README.py` script. + +Needed Modules +============== + +.. Do not edit this section. It was auto-generated from the +.. by the `update_README.py` script. + +.. image:: tree_dependency.png + +* `Psiref_Utils `_ + diff --git a/plugins/Psiref_CAS/psi_ref.irp.f b/plugins/Psiref_CAS/psi_ref.irp.f new file mode 100644 index 00000000..81df60e9 --- /dev/null +++ b/plugins/Psiref_CAS/psi_ref.irp.f @@ -0,0 +1,28 @@ +use bitmasks + + BEGIN_PROVIDER [ integer(bit_kind), psi_ref, (N_int,2,psi_det_size) ] +&BEGIN_PROVIDER [ double precision, psi_ref_coef, (psi_det_size,n_states) ] +&BEGIN_PROVIDER [ integer, idx_ref, (psi_det_size) ] +&BEGIN_PROVIDER [ integer, N_det_ref ] + implicit none + BEGIN_DOC + ! CAS wave function, defined from the application of the CAS bitmask on the + ! determinants. idx_cas gives the indice of the CAS determinant in psi_det. + END_DOC + integer :: i,j,k + N_det_ref = N_det_cas + do i=1,N_det_ref + do k=1,N_int + psi_ref(k,1,i) = psi_cas(k,1,i) + psi_ref(k,2,i) = psi_cas(k,2,i) + enddo + idx_ref(i) = idx_cas(i) + enddo + do k=1,N_states + do i=1,N_det_ref + psi_ref_coef(i,k) = psi_cas_coef(i,k) + enddo + enddo + +END_PROVIDER + diff --git a/plugins/Psiref_CAS/tree_dependency.png b/plugins/Psiref_CAS/tree_dependency.png new file mode 100644 index 00000000..1a922bdc Binary files /dev/null and b/plugins/Psiref_CAS/tree_dependency.png differ diff --git a/plugins/Psiref_Utils/.gitignore b/plugins/Psiref_Utils/.gitignore new file mode 100644 index 00000000..d98a4abc --- /dev/null +++ b/plugins/Psiref_Utils/.gitignore @@ -0,0 +1,29 @@ +# Automatically created by $QP_ROOT/scripts/module/module_handler.py +.ninja_deps +.ninja_log +AO_Basis +Bitmask +Determinants +Electrons +Ezfio_files +Generators_full +Hartree_Fock +IRPF90_man +IRPF90_temp +Integrals_Bielec +Integrals_Monoelec +MOGuess +MO_Basis +Makefile +Makefile.depend +Nuclei +Perturbation +Properties +Pseudo +Selectors_full +Utils +ezfio_interface.irp.f +irpf90.make +irpf90_entities +mrcc_general +tags \ No newline at end of file diff --git a/plugins/Psiref_Utils/NEEDED_CHILDREN_MODULES b/plugins/Psiref_Utils/NEEDED_CHILDREN_MODULES new file mode 100644 index 00000000..e69de29b diff --git a/plugins/Psiref_Utils/README.rst b/plugins/Psiref_Utils/README.rst new file mode 100644 index 00000000..75269412 --- /dev/null +++ b/plugins/Psiref_Utils/README.rst @@ -0,0 +1,15 @@ +=================== +Psiref_utils Module +=================== + + +Utilities related to the use of a reference wave function. This module +needs to be loaded with any psi_ref module. + + +Documentation +============= + +.. Do not edit this section. It was auto-generated from the +.. by the `update_README.py` script. + diff --git a/plugins/Psiref_Utils/psi_ref.irp.f b/plugins/Psiref_Utils/psi_ref.irp.f new file mode 100644 index 00000000..852df2d3 --- /dev/null +++ b/plugins/Psiref_Utils/psi_ref.irp.f @@ -0,0 +1,36 @@ +use bitmasks + + BEGIN_PROVIDER [ integer(bit_kind), psi_ref, (N_int,2,psi_det_size) ] +&BEGIN_PROVIDER [ double precision, psi_ref_coef, (psi_det_size,n_states) ] +&BEGIN_PROVIDER [ integer, idx_ref, (psi_det_size) ] +&BEGIN_PROVIDER [ integer, N_det_ref ] + implicit none + BEGIN_DOC + ! Reference wave function, defined as determinants with coefficients > 0.05 + ! idx_ref gives the indice of the ref determinant in psi_det. + END_DOC + integer :: i, k, l + logical :: good + N_det_ref = 0 + do i=1,N_det + good = .False. + do l = 1, N_states + psi_ref_coef(i,l) = 0.d0 + good = good.or.(dabs(psi_coef(i,l)) > 0.05d0) + enddo + if (good) then + N_det_ref = N_det_ref+1 + do k=1,N_int + psi_ref(k,1,N_det_ref) = psi_det(k,1,i) + psi_ref(k,2,N_det_ref) = psi_det(k,2,i) + enddo + idx_ref(N_det_ref) = i + do k=1,N_states + psi_ref_coef(N_det_ref,k) = psi_coef(i,k) + enddo + endif + enddo + call write_int(output_determinants,N_det_ref, 'Number of determinants in the reference') + +END_PROVIDER + diff --git a/plugins/Psiref_Utils/psi_ref_utils.irp.f b/plugins/Psiref_Utils/psi_ref_utils.irp.f new file mode 100644 index 00000000..c5e80199 --- /dev/null +++ b/plugins/Psiref_Utils/psi_ref_utils.irp.f @@ -0,0 +1,123 @@ +use bitmasks + + + BEGIN_PROVIDER [ integer(bit_kind), psi_ref_sorted_bit, (N_int,2,psi_det_size) ] +&BEGIN_PROVIDER [ double precision, psi_ref_coef_sorted_bit, (psi_det_size,N_states) ] + implicit none + BEGIN_DOC + ! Reference determinants sorted to accelerate the search of a random determinant in the wave + ! function. + END_DOC + call sort_dets_by_det_search_key(N_det_ref, psi_ref, psi_ref_coef, & + psi_ref_sorted_bit, psi_ref_coef_sorted_bit) + +END_PROVIDER + + + + BEGIN_PROVIDER [ integer(bit_kind), psi_non_ref, (N_int,2,psi_det_size) ] +&BEGIN_PROVIDER [ double precision, psi_non_ref_coef, (psi_det_size,n_states) ] +&BEGIN_PROVIDER [ integer, idx_non_ref, (psi_det_size) ] +&BEGIN_PROVIDER [ integer, N_det_non_ref ] + implicit none + BEGIN_DOC + ! Set of determinants which are not part of the reference, defined from the application + ! of the reference bitmask on the determinants. + ! idx_non_ref gives the indice of the determinant in psi_det. + END_DOC + integer :: i_non_ref,j,k + integer :: degree + logical :: in_ref + i_non_ref =0 + do k=1,N_det + in_ref = .False. + do j=1,N_det_ref + call get_excitation_degree(psi_ref(1,1,j), psi_det(1,1,k), degree, N_int) + if (degree == 0) then + in_ref = .True. + exit + endif + enddo + if (.not.in_ref) then + double precision :: hij + i_non_ref += 1 + do j=1,N_int + psi_non_ref(j,1,i_non_ref) = psi_det(j,1,k) + psi_non_ref(j,2,i_non_ref) = psi_det(j,2,k) + enddo + do j=1,N_states + psi_non_ref_coef(i_non_ref,j) = psi_coef(k,j) + enddo + idx_non_ref(i_non_ref) = k + endif + enddo + N_det_non_ref = i_non_ref +END_PROVIDER + + BEGIN_PROVIDER [ integer(bit_kind), psi_non_ref_sorted_bit, (N_int,2,psi_det_size) ] +&BEGIN_PROVIDER [ double precision, psi_non_ref_coef_sorted_bit, (psi_det_size,N_states) ] + implicit none + BEGIN_DOC + ! Reference determinants sorted to accelerate the search of a random determinant in the wave + ! function. + END_DOC + call sort_dets_by_det_search_key(N_det_ref, psi_non_ref, psi_non_ref_coef, & + psi_non_ref_sorted_bit, psi_non_ref_coef_sorted_bit) + +END_PROVIDER + + +BEGIN_PROVIDER [double precision, H_matrix_ref, (N_det_ref,N_det_ref)] + implicit none + integer :: i,j + double precision :: hij + do i = 1, N_det_ref + do j = 1, N_det_ref + call i_H_j(psi_ref(1,1,i),psi_ref(1,1,j),N_int,hij) + H_matrix_ref(i,j) = hij + enddo + enddo +END_PROVIDER + + BEGIN_PROVIDER [double precision, psi_coef_ref_diagonalized, (N_det_ref,N_states)] +&BEGIN_PROVIDER [double precision, psi_ref_energy_diagonalized, (N_states)] + implicit none + integer :: i,j + double precision, allocatable :: eigenvectors(:,:), eigenvalues(:) + allocate (eigenvectors(size(H_matrix_ref,1),N_det_ref)) + allocate (eigenvalues(N_det_ref)) + call lapack_diag(eigenvalues,eigenvectors, & + H_matrix_ref,size(H_matrix_ref,1),N_det_ref) + do i = 1, N_states + psi_ref_energy_diagonalized(i) = eigenvalues(i) + do j = 1, N_det_ref + psi_coef_ref_diagonalized(j,i) = eigenvectors(j,i) + enddo + enddo + + + END_PROVIDER + + BEGIN_PROVIDER [double precision, psi_ref_energy, (N_states)] + implicit none + integer :: i,j,k + double precision :: hij,norm,u_dot_v + psi_ref_energy = 0.d0 + + + do k = 1, N_states + norm = 0.d0 + do i = 1, N_det_ref + norm += psi_ref_coef(i,k) * psi_ref_coef(i,k) + do j = 1, N_det_ref + psi_ref_energy(k) += psi_ref_coef(i,k) * psi_ref_coef(j,k) * H_matrix_ref(i,j) + enddo + enddo + psi_ref_energy(k) = psi_ref_energy(k) /norm + enddo + +END_PROVIDER + + + + diff --git a/plugins/Psiref_Utils/tree_dependency.png b/plugins/Psiref_Utils/tree_dependency.png new file mode 100644 index 00000000..20482ad2 Binary files /dev/null and b/plugins/Psiref_Utils/tree_dependency.png differ diff --git a/plugins/Psiref_threshold/.gitignore b/plugins/Psiref_threshold/.gitignore new file mode 100644 index 00000000..d98a4abc --- /dev/null +++ b/plugins/Psiref_threshold/.gitignore @@ -0,0 +1,29 @@ +# Automatically created by $QP_ROOT/scripts/module/module_handler.py +.ninja_deps +.ninja_log +AO_Basis +Bitmask +Determinants +Electrons +Ezfio_files +Generators_full +Hartree_Fock +IRPF90_man +IRPF90_temp +Integrals_Bielec +Integrals_Monoelec +MOGuess +MO_Basis +Makefile +Makefile.depend +Nuclei +Perturbation +Properties +Pseudo +Selectors_full +Utils +ezfio_interface.irp.f +irpf90.make +irpf90_entities +mrcc_general +tags \ No newline at end of file diff --git a/plugins/Psiref_threshold/NEEDED_CHILDREN_MODULES b/plugins/Psiref_threshold/NEEDED_CHILDREN_MODULES new file mode 100644 index 00000000..7e790003 --- /dev/null +++ b/plugins/Psiref_threshold/NEEDED_CHILDREN_MODULES @@ -0,0 +1 @@ +Psiref_Utils diff --git a/plugins/Psiref_threshold/README.rst b/plugins/Psiref_threshold/README.rst new file mode 100644 index 00000000..3d4726e1 --- /dev/null +++ b/plugins/Psiref_threshold/README.rst @@ -0,0 +1,24 @@ +======================= +Psiref_threshold Module +======================= + + +Reference wave function is defined as all determinants with coefficients +such that | c_i/c_max | > threshold. + +Documentation +============= + +.. Do not edit this section. It was auto-generated from the +.. by the `update_README.py` script. + +Needed Modules +============== + +.. Do not edit this section. It was auto-generated from the +.. by the `update_README.py` script. + +.. image:: tree_dependency.png + +* `Psiref_Utils `_ + diff --git a/plugins/Psiref_threshold/psi_ref.irp.f b/plugins/Psiref_threshold/psi_ref.irp.f new file mode 100644 index 00000000..5e722822 --- /dev/null +++ b/plugins/Psiref_threshold/psi_ref.irp.f @@ -0,0 +1,38 @@ +use bitmasks + + BEGIN_PROVIDER [ integer(bit_kind), psi_ref, (N_int,2,psi_det_size) ] +&BEGIN_PROVIDER [ double precision, psi_ref_coef, (psi_det_size,n_states) ] +&BEGIN_PROVIDER [ integer, idx_ref, (psi_det_size) ] +&BEGIN_PROVIDER [ integer, N_det_ref ] + implicit none + BEGIN_DOC + ! Reference wave function, defined as determinants with coefficients > 0.05 + ! idx_ref gives the indice of the ref determinant in psi_det. + END_DOC + integer :: i, k, l + logical :: good + double precision, parameter :: threshold=0.05d0 + N_det_ref = 0 + t = threshold * abs_psi_coef_max + do i=1,N_det + good = .False. + do l = 1, N_states + psi_ref_coef(i,l) = 0.d0 + good = good.or.(dabs(psi_coef(i,l)) > t) + enddo + if (good) then + N_det_ref = N_det_ref+1 + do k=1,N_int + psi_ref(k,1,N_det_ref) = psi_det(k,1,i) + psi_ref(k,2,N_det_ref) = psi_det(k,2,i) + enddo + idx_ref(N_det_ref) = i + do k=1,N_states + psi_ref_coef(N_det_ref,k) = psi_coef(i,k) + enddo + endif + enddo + call write_int(output_determinants,N_det_ref, 'Number of determinants in the reference') + +END_PROVIDER + diff --git a/plugins/Psiref_threshold/tree_dependency.png b/plugins/Psiref_threshold/tree_dependency.png new file mode 100644 index 00000000..9c2088e1 Binary files /dev/null and b/plugins/Psiref_threshold/tree_dependency.png differ diff --git a/plugins/QmcChem/.gitignore b/plugins/QmcChem/.gitignore index 47d97b7d..f2a19776 100644 --- a/plugins/QmcChem/.gitignore +++ b/plugins/QmcChem/.gitignore @@ -1,26 +1,23 @@ -# -# 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 +# Automatically created by $QP_ROOT/scripts/module/module_handler.py .ninja_deps -Pseudo -Integrals_Monoelec +.ninja_log +AO_Basis Bitmask -Integrals_Bielec -AOs -MOs Determinants Electrons -DensityFit -Utils -Nuclei Ezfio_files +IRPF90_man +IRPF90_temp +Integrals_Bielec +Integrals_Monoelec +MO_Basis +Makefile +Makefile.depend +Nuclei +Pseudo +Utils +ezfio_interface.irp.f +irpf90.make +irpf90_entities save_for_qmcchem +tags \ No newline at end of file diff --git a/plugins/QmcChem/NEEDED_CHILDREN_MODULES b/plugins/QmcChem/NEEDED_CHILDREN_MODULES index f7ed9913..aae89501 100644 --- a/plugins/QmcChem/NEEDED_CHILDREN_MODULES +++ b/plugins/QmcChem/NEEDED_CHILDREN_MODULES @@ -1 +1 @@ -Determinants DensityFit +Determinants diff --git a/plugins/QmcChem/README.rst b/plugins/QmcChem/README.rst index 9a390cfd..8debf80c 100644 --- a/plugins/QmcChem/README.rst +++ b/plugins/QmcChem/README.rst @@ -8,41 +8,25 @@ Documentation .. Do not edit this section. It was auto-generated from the .. by the `update_README.py` script. -`ao_pseudo_grid `_ +`ao_pseudo_grid `_ Grid points for f(|r-r_A|) = \int Y_{lm}^{C} (|r-r_C|, \Omega_C) \chi_i^{A} (r-r_A) d\Omega_C .br -`aux_pseudo_integral `_ - Pseudo-potential - - -`aux_pseudo_integral_local `_ - Local pseudo-potential - - -`aux_pseudo_integral_non_local `_ - Local pseudo-potential - - -`mo_pseudo_grid `_ +`mo_pseudo_grid `_ Grid points for f(|r-r_A|) = \int Y_{lm}^{C} (|r-r_C|, \Omega_C) \phi_i^{A} (r-r_A) d\Omega_C .br -`pseudo_matrix `_ - Pseudo-potential expressed in the basis of ao products - - `save_for_qmc `_ Undocumented -`test_pseudo_grid_ao `_ +`test_pseudo_grid_ao `_ Undocumented @@ -58,5 +42,4 @@ Needed Modules .. image:: tree_dependency.png * `Determinants `_ -* `DensityFit `_ diff --git a/plugins/QmcChem/tree_dependency.png b/plugins/QmcChem/tree_dependency.png index c546d455..3b844e5c 100644 Binary files a/plugins/QmcChem/tree_dependency.png and b/plugins/QmcChem/tree_dependency.png differ diff --git a/plugins/Selectors_full/tree_dependency.png b/plugins/Selectors_full/tree_dependency.png index b6378b39..f49b2e9a 100644 Binary files a/plugins/Selectors_full/tree_dependency.png and b/plugins/Selectors_full/tree_dependency.png differ diff --git a/plugins/loc_cele/NEEDED_CHILDREN_MODULES b/plugins/loc_cele/NEEDED_CHILDREN_MODULES index a23aa5ae..6731bb70 100644 --- a/plugins/loc_cele/NEEDED_CHILDREN_MODULES +++ b/plugins/loc_cele/NEEDED_CHILDREN_MODULES @@ -1 +1 @@ -AO_Basis Electrons Ezfio_files MO_Basis Nuclei Utils +MO_Basis \ No newline at end of file diff --git a/plugins/loc_cele/README.rst b/plugins/loc_cele/README.rst index 431dae8a..2db141ee 100644 --- a/plugins/loc_cele/README.rst +++ b/plugins/loc_cele/README.rst @@ -1,7 +1,3 @@ -=============== -loc_cele Module -=============== - Documentation ============= @@ -9,7 +5,10 @@ Documentation .. by the `update_README.py` script. `loc_rasorb `_ - Undocumented + This program performs a localization of the active orbitals + of a CASSCF wavefunction, reading the orbitals from a RASORB + file of molcas. + id1=max number of MO in a given symmetry. Needed Modules ============== @@ -19,10 +18,5 @@ Needed Modules .. image:: tree_dependency.png -* `AO_Basis `_ -* `Electrons `_ -* `Ezfio_files `_ * `MO_Basis `_ -* `Nuclei `_ -* `Utils `_ diff --git a/plugins/loc_cele/loc_cele.irp.f b/plugins/loc_cele/loc_cele.irp.f index 5b9112ca..30624c1d 100644 --- a/plugins/loc_cele/loc_cele.irp.f +++ b/plugins/loc_cele/loc_cele.irp.f @@ -2,25 +2,12 @@ implicit none -! - -! This program performs a localization of the active orbitals - -! of a CASSCF wavefunction, reading the orbitals from a RASORB - -! file of molcas. - -! - -! id1=max number of MO in a given symmetry. - -! - - - - - - + BEGIN_DOC + ! This program performs a localization of the active orbitals + ! of a CASSCF wavefunction, reading the orbitals from a RASORB + ! file of molcas. + ! id1=max is the number of MO in a given symmetry. + END_DOC integer id1 diff --git a/plugins/loc_cele/tree_dependency.png b/plugins/loc_cele/tree_dependency.png index 244d9db0..9ab804fd 100644 Binary files a/plugins/loc_cele/tree_dependency.png and b/plugins/loc_cele/tree_dependency.png differ diff --git a/scripts/compilation/qp_create_ninja.py b/scripts/compilation/qp_create_ninja.py index d9707dfb..f78e20e8 100755 --- a/scripts/compilation/qp_create_ninja.py +++ b/scripts/compilation/qp_create_ninja.py @@ -26,6 +26,16 @@ Error: """%f sys.exit(1) +# __ +# /__ | _ |_ _. | _. ._ o _. |_ | _ _ +# \_| | (_) |_) (_| | \/ (_| | | (_| |_) | (/_ _> +# + +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") + header = r"""# # _______ _____ # __ __ \___ _______ _________ /____ ________ ___ @@ -45,17 +55,8 @@ header = r"""# # Generated automatically by {0} # # -""".format(__file__) +""".format(__file__).replace(QP_ROOT,"$QP_ROOT") -# __ -# /__ | _ |_ _. | _. ._ o _. |_ | _ _ -# \_| | (_) |_) (_| | \/ (_| | | (_| |_) | (/_ _> -# - -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") # # |\ | _. ._ _ _ _| _|_ ._ | _ @@ -333,7 +334,7 @@ def ninja_gitignore_rule(): " description = Create gitignore for $module_rel", ""] -def ninja_gitignore_build(path_module, l_symlink, d_binaries): +def ninja_gitignore_build(path_module, d_binaries): """ """ @@ -342,9 +343,9 @@ def ninja_gitignore_build(path_module, l_symlink, d_binaries): l_b = [i.abs for i in d_binaries[path_module]] l_sym = [i.destination for i in l_symlink] - l_string = ["build {0}: build_gitignore {1} || {2}".format(path_gitignore, - " ".join(l_b), - " ".join(l_sym)), + l_string = ["build {0}: build_gitignore {1} || l_symlink_{2}".format(path_gitignore, + " ".join(l_b), + path_module.rel), " module_rel = {0}".format(path_module.rel), ""] @@ -519,10 +520,15 @@ def ninja_readme_build(path_module, d_irp, dict_root_path): path_readme = join(path_module.abs, "README.rst") root_module = dict_root_path[module] - l_depend = d_irp[path_module]["l_depend"] + [join(root_module.abs, "tags")] + tags = join(root_module.abs, "tags") + str_depend = " ".join(d_irp[path_module]["l_depend"]) - l_string = ["build {0}: build_readme {1}".format(path_readme, - " ".join(l_depend)), + tree = join(root_module.abs, "tree_dependency.png") + + l_string = ["build {0}: build_readme {1} {2} {3}".format(path_readme, + tags, + str_depend, + tree), " module_root = {0}".format(root_module.abs), " module_abs = {0}".format(path_module.abs), " module_rel = {0}".format(path_module.rel), ""] @@ -737,7 +743,7 @@ def create_build_ninja_module(path_module): l_string += ["build dummy_target: update_build_ninja_root", "", "build all: make_all_binaries dummy_target", "", - "build local: make_local_binaries dummy_target", + "build local: make_local_binaries dummy_target", "", "default local", "", "build clean: make_clean dummy_target", ""] @@ -767,7 +773,7 @@ def create_build_ninja_global(l_module): "build all: make_all_binaries dummy_target", "default all", "", - "build clean: make_clean", + "build clean: make_clean dummy_target", "", ] path_ninja_cur = join(QP_ROOT, "build.ninja") @@ -903,7 +909,7 @@ if __name__ == "__main__": l_string += ninja_binaries_build(module_to_compile, l_children, d_binaries) - l_string += ninja_gitignore_build(module_to_compile, l_symlink, d_binaries) + l_string += ninja_gitignore_build(module_to_compile, d_binaries) with open(join(QP_ROOT, "config", "build.ninja"), "w+") as f: f.write(header) diff --git a/scripts/ezfio_interface/ei_handler.py b/scripts/ezfio_interface/ei_handler.py index 688898f5..1be604da 100755 --- a/scripts/ezfio_interface/ei_handler.py +++ b/scripts/ezfio_interface/ei_handler.py @@ -239,13 +239,13 @@ def get_dict_config_file(module_obj): # Check if type is avalaible try: - type_ = config_file.get(section, "type") + type_ = config_file.get(section, "type").strip() 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 "{0} not avalaible. Choose in:".format(type_).strip() print ", ".join(sorted([i for i in type_dict])) sys.exit(1) else: @@ -279,13 +279,16 @@ def get_dict_config_file(module_obj): d[pvd][option] = d_default[option] # If interface is input we need a default value information - if "ocaml" in d[pvd]["interface"]: - try: - default_raw = config_file.get(section, "default") - except ConfigParser.NoOptionError: + + try: + default_raw = config_file.get(section, "default") + except ConfigParser.NoOptionError: + if "ocaml" in d[pvd]["interface"]: error("default", pvd, module_obj.path) sys.exit(1) - + else: + pass + else: try: d[pvd]["default"] = is_bool(default_raw) except TypeError: @@ -367,7 +370,7 @@ def create_ezfio_stuff(dict_ezfio_cfg, config_or_default="config"): size_raw = str(size_raw) if size_raw.startswith('='): - size_convert = size_raw + size_convert = size_raw.replace('.', '_') else: size_raw = provider_info["size"].translate(None, "()") size_raw = size_raw.replace('.', '_') @@ -435,13 +438,18 @@ def create_ezfio_stuff(dict_ezfio_cfg, config_or_default="config"): # It is the last so we don't need to right align it str_size = size_format_to_ezfio(size_raw) if size_raw else "" + if "default" in provider_info and provider_info["default"].fortran.startswith("="): + str_default = provider_info["default"].fortran.replace('.', '_') + else: + str_default = "" + # Get the string in to good format (left align and co) str_name = str_name_format(name_raw) str_fortran_type = str_type_format(fortran_type_raw) # Return the string if config_or_default == "config": - s = " {0} {1} {2}".format(str_name, str_fortran_type, str_size) + s = " {0} {1} {2} {3}".format(str_name, str_fortran_type, str_size, str_default) elif config_or_default == "default": try: str_value = provider_info["default"].ocaml diff --git a/scripts/generate_h_apply.py b/scripts/generate_h_apply.py index 9f878d7d..ce944864 100755 --- a/scripts/generate_h_apply.py +++ b/scripts/generate_h_apply.py @@ -43,7 +43,8 @@ class H_apply(object): self.perturbation = None #s["omp_parallel"] = """!$OMP PARALLEL DEFAULT(NONE) & - s["omp_parallel"] = """!$OMP PARALLEL DEFAULT(SHARED) & + s["omp_parallel"] = """ PROVIDE elec_num_tab + !$OMP PARALLEL DEFAULT(SHARED) & !$OMP PRIVATE(i,j,k,l,keys_out,hole,particle, & !$OMP occ_particle,occ_hole,j_a,k_a,other_spin, & !$OMP hole_save,ispin,jj,l_a,ib_jb_pairs,array_pairs, & diff --git a/scripts/module/create_gitignore.sh b/scripts/module/create_gitignore.sh index dde75e70..cf86ee39 100755 --- a/scripts/module/create_gitignore.sh +++ b/scripts/module/create_gitignore.sh @@ -21,15 +21,15 @@ function do_gitingore() # 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 +irpf90_entities +irpf90.make +IRPF90_man +IRPF90_temp +Makefile.depend .ninja_deps +.ninja_log +tags EOF if [[ -f gitignore ]] @@ -59,3 +59,6 @@ else done fi +# Sort the .gitignore to reduce conflict in git merges +sort .gitignore |uniq > .gitignore.new +mv .gitignore.new .gitignore diff --git a/scripts/module/module_handler.py b/scripts/module/module_handler.py index 8301e0b1..1477195e 100755 --- a/scripts/module/module_handler.py +++ b/scripts/module/module_handler.py @@ -24,6 +24,7 @@ import shutil try: from docopt import docopt from qp_path import QP_SRC + from qp_path import QP_ROOT except ImportError: print "source .quantum_package.rc" raise @@ -85,7 +86,7 @@ def get_l_module_descendant(d_child, l_module): except KeyError: print >> sys.stderr, "`{0}` not submodule".format(module) print >> sys.stderr, "Check the corresponding NEEDED_CHILDREN_MODULES" - sys.exit(1) + raise return list(set(l)) @@ -123,8 +124,12 @@ class ModuleHandler(): d_child = self.dict_child for module_name in d_child: - d[module_name] = get_l_module_descendant(d_child, - d_child[module_name]) + try : + d[module_name] = get_l_module_descendant(d_child, + d_child[module_name]) + except KeyError: + print "Check NEEDED_CHILDREN_MODULES for {0}".format(module_name) + sys.exit(1) return d @@ -219,7 +224,7 @@ if __name__ == '__main__': for module in l_module: if not is_module(module): - print "{0} is not a volide module. Abort".format(module) + print "{0} is not a valide module. Abort".format(module) print "No NEEDED_CHILDREN_MODULES in it" sys.exit(1) @@ -237,8 +242,7 @@ if __name__ == '__main__': l_dir = ['IRPF90_temp', 'IRPF90_man'] l_file = ["irpf90_entities", "tags", "irpf90.make", - "Makefile", "Makefile.depend", - "build.ninja", ".ninja_log", ".ninja_deps", + "Makefile", "Makefile.depend", ".ninja_log", ".ninja_deps", "ezfio_interface.irp.f"] for module in l_module: @@ -276,5 +280,8 @@ if __name__ == '__main__': path = os.path.join(module_abs, ".gitignore") with open(path, "w+") as f: - f.write("# Automatically created by {0} \n".format(__file__)) - f.write("\n".join(l_dir + l_file + l_symlink + l_exe)) + f.write("# Automatically created by {0} \n".format(__file__).replace(QP_ROOT,"$QP_ROOT")) + l_text = l_dir + l_file + l_symlink + l_exe + l_text.sort() + f.write("\n".join(l_text)) + diff --git a/scripts/module/qp_install_module.py b/scripts/module/qp_install_module.py index 8aad1ae1..3240e142 100755 --- a/scripts/module/qp_install_module.py +++ b/scripts/module/qp_install_module.py @@ -23,10 +23,10 @@ try: from module_handler import get_l_module_descendant from update_README import Doc_key, Needed_key from qp_path import QP_SRC, QP_PLUGINS - except ImportError: - print "source .quantum_package.rc" - raise + print "Please check if you have source the .quantum_package.rc" + print "(`source .quantum_package.rc`)" + print sys.exit(1) def save_new_module(path, l_child): @@ -79,7 +79,7 @@ if __name__ == '__main__': l_children = arguments[""] - path = os.path.join(QP_SRC, arguments[""]) + path = os.path.join(QP_PLUGINS, arguments[""][0]) print "You will create the module:" print path @@ -103,6 +103,7 @@ if __name__ == '__main__': print l_child_reduce save_new_module(path, l_child_reduce) + print "This was a plugin, you can install it now" elif arguments["download"]: pass # d_local = get_dict_child([QP_SRC]) diff --git a/src/.gitignore b/src/.gitignore index 9bba1426..1e9f0bc4 100644 --- a/src/.gitignore +++ b/src/.gitignore @@ -23,3 +23,4 @@ QmcChem Selectors_full Selectors_no_sorted SingleRefMethod +Casino \ No newline at end of file diff --git a/src/AO_Basis/EZFIO.cfg b/src/AO_Basis/EZFIO.cfg new file mode 100644 index 00000000..4cb3b390 --- /dev/null +++ b/src/AO_Basis/EZFIO.cfg @@ -0,0 +1,50 @@ +[ao_basis] +type: character*(256) +doc: name of the ao basis +interface: ezfio + +[ao_num] +type: integer +doc: number of ao +interface: ezfio, provider + +[ao_prim_num] +type: integer +doc: Number of primitives per atomic orbital +size: (ao_basis.ao_num) +interface: ezfio, provider + +[ao_prim_num_max] +type: integer +doc: number of primitive maximun +default: =maxval(ao_basis.ao_prim_num) +interface: ezfio + +[ao_nucl] +type: integer +doc: Index of the nuclei on which the ao is centered +size: (ao_basis.ao_num) +interface: ezfio, provider + +[ao_power] +type: integer +doc: power for each dimension for each ao_basis +size: (ao_basis.ao_num,3) +interface: ezfio, provider + +[ao_coef] +type: double precision +doc: AO Coefficients, read from input. Those should not be used directly, as the MOs are expressed on the basis of **normalized** AOs. +size: (ao_basis.ao_num,ao_basis.ao_prim_num_max) +interface: ezfio, provider + +[ao_expo] +type: double precision +doc: expo for each primitive of each ao_basis +size: (ao_basis.ao_num,ao_basis.ao_prim_num_max) +interface: ezfio, provider + +[ao_md5] +type: character*(32) +doc: MD5 key characteristic of the AO basis +interface: ezfio, provider \ No newline at end of file diff --git a/src/AO_Basis/README.rst b/src/AO_Basis/README.rst index da1ba1dc..4a1aa1ef 100644 --- a/src/AO_Basis/README.rst +++ b/src/AO_Basis/README.rst @@ -46,61 +46,60 @@ Documentation .. Do not edit this section. It was auto-generated from the .. by the `update_README.py` script. -`ao_coef `_ - AO Coefficients, read from input. Those should not be used directly, as - the MOs are expressed on the basis of **normalized** AOs. +`ao_coef `_ + AO Coefficients, read from input. Those should not be used directly, as the MOs are expressed on the basis of **normalized** AOs. -`ao_coef_normalized `_ +`ao_coef_normalized `_ Coefficients including the AO normalization -`ao_coef_normalized_ordered `_ +`ao_coef_normalized_ordered `_ Sorted primitives to accelerate 4 index MO transformation -`ao_coef_normalized_ordered_transp `_ +`ao_coef_normalized_ordered_transp `_ Transposed ao_coef_normalized_ordered -`ao_expo `_ - AO Exponents read from input +`ao_expo `_ + expo for each primitive of each ao_basis -`ao_expo_ordered `_ +`ao_expo_ordered `_ Sorted primitives to accelerate 4 index MO transformation -`ao_expo_ordered_transp `_ +`ao_expo_ordered_transp `_ Transposed ao_expo_ordered -`ao_l `_ +`ao_l `_ ao_l = l value of the AO: a+b+c in x^a y^b z^c -`ao_l_char `_ +`ao_l_char `_ ao_l = l value of the AO: a+b+c in x^a y^b z^c -`ao_l_char_space `_ +`ao_l_char_space `_ Undocumented -`ao_md5 `_ +`ao_md5 `_ MD5 key characteristic of the AO basis -`ao_nucl `_ +`ao_nucl `_ Index of the nuclei on which the ao is centered -`ao_num `_ - Number of atomic orbitals +`ao_num `_ + number of ao -`ao_num_align `_ - Number of atomic orbitals +`ao_num_align `_ + Number of atomic orbitals align `ao_overlap `_ @@ -128,27 +127,27 @@ Documentation :math:`\int \chi_i(r) \chi_j(r) dr)` -`ao_power `_ - Powers of x,y and z read from input +`ao_power `_ + power for each dimension for each ao_basis -`ao_prim_num `_ +`ao_prim_num `_ Number of primitives per atomic orbital -`ao_prim_num_max `_ +`ao_prim_num_max `_ Undocumented -`ao_prim_num_max_align `_ - Undocumented +`ao_prim_num_max_align `_ + Number of primitives per atomic orbital aligned -`l_to_charater `_ +`l_to_charater `_ character corresponding to the "L" value of an AO orbital -`n_aos_max `_ +`n_aos_max `_ Number of AOs per atom @@ -160,21 +159,21 @@ Documentation Undocumented -`nucl_aos `_ +`nucl_aos `_ List of AOs attached on each atom -`nucl_list_shell_aos `_ +`nucl_list_shell_aos `_ Index of the shell type Aos and of the corresponding Aos Per convention, for P,D,F and G AOs, we take the index of the AO with the the corresponding power in the "X" axis -`nucl_n_aos `_ +`nucl_n_aos `_ Number of AOs per atom -`nucl_num_shell_aos `_ +`nucl_num_shell_aos `_ Index of the shell type Aos and of the corresponding Aos Per convention, for P,D,F and G AOs, we take the index of the AO with the the corresponding power in the "X" axis diff --git a/src/AO_Basis/aos.ezfio_config b/src/AO_Basis/aos.ezfio_config deleted file mode 100644 index adcc5636..00000000 --- a/src/AO_Basis/aos.ezfio_config +++ /dev/null @@ -1,12 +0,0 @@ -ao_basis - ao_basis character*(256) - ao_num integer - ao_prim_num integer (ao_basis_ao_num) - ao_nucl integer (ao_basis_ao_num) - ao_power integer (ao_basis_ao_num,3) - ao_prim_num_max integer = maxval(ao_basis_ao_prim_num) - ao_coef double precision (ao_basis_ao_num,ao_basis_ao_prim_num_max) - ao_expo double precision (ao_basis_ao_num,ao_basis_ao_prim_num_max) - ao_md5 character*(32) - - diff --git a/src/AO_Basis/aos.irp.f b/src/AO_Basis/aos.irp.f index b9c82327..27a79b4f 100644 --- a/src/AO_Basis/aos.irp.f +++ b/src/AO_Basis/aos.irp.f @@ -1,85 +1,23 @@ - BEGIN_PROVIDER [ integer, ao_num ] -&BEGIN_PROVIDER [ integer, ao_num_align ] +BEGIN_PROVIDER [ integer, ao_num_align ] implicit none BEGIN_DOC - ! Number of atomic orbitals + ! Number of atomic orbitals align END_DOC - ao_num = -1 - PROVIDE ezfio_filename - call ezfio_get_ao_basis_ao_num(ao_num) - if (ao_num <= 0) then - stop 'Number of contracted gaussians should be > 0' - endif integer :: align_double ao_num_align = align_double(ao_num) -END_PROVIDER - -BEGIN_PROVIDER [ integer, ao_power, (ao_num_align,3) ] - implicit none - BEGIN_DOC - ! Powers of x,y and z read from input - END_DOC - PROVIDE ezfio_filename - - integer :: i,j,k - integer, allocatable :: ibuffer(:,:) - allocate ( ibuffer(ao_num,3) ) - ibuffer = 0 - call ezfio_get_ao_basis_ao_power(ibuffer) - ao_power = 0 - do j = 1, 3 - do i = 1, ao_num - ao_power(i,j) = ibuffer(i,j) - enddo - enddo - deallocate(ibuffer) - -END_PROVIDER +END_PROVIDER -BEGIN_PROVIDER [ double precision, ao_expo, (ao_num_align,ao_prim_num_max) ] - implicit none - BEGIN_DOC - ! AO Exponents read from input - END_DOC - PROVIDE ezfio_filename - - double precision, allocatable :: buffer(:,:) - allocate ( buffer(ao_num,ao_prim_num_max) ) - integer :: i,j,k - ao_expo = 0.d0 - buffer = 0.d0 - call ezfio_get_ao_basis_ao_expo(buffer) - do j = 1, ao_prim_num_max - do i = 1, ao_num - ao_expo(i,j) = buffer(i,j) - enddo - enddo - deallocate(buffer) -END_PROVIDER - -BEGIN_PROVIDER [ double precision, ao_coef, (ao_num_align,ao_prim_num_max) ] - implicit none - BEGIN_DOC - ! AO Coefficients, read from input. Those should not be used directly, as - ! the MOs are expressed on the basis of **normalized** AOs. - END_DOC - PROVIDE ezfio_filename - - double precision, allocatable :: buffer(:,:) - allocate ( buffer(ao_num,ao_prim_num_max) ) - integer :: i,j,k - ao_coef = 0.d0 - buffer = 0.d0 - call ezfio_get_ao_basis_ao_coef(buffer) - do j = 1, ao_prim_num_max - do i = 1, ao_num - ao_coef(i,j) = buffer(i,j) - enddo - enddo - deallocate(buffer) -END_PROVIDER + BEGIN_PROVIDER [ integer, ao_prim_num_max ] +&BEGIN_PROVIDER [ integer, ao_prim_num_max_align ] + implicit none + ao_prim_num_max = 0 + PROVIDE ezfio_filename + call ezfio_get_ao_basis_ao_prim_num_max(ao_prim_num_max) + integer :: align_double + ao_prim_num_max_align = align_double(ao_prim_num_max) + END_PROVIDER BEGIN_PROVIDER [ double precision, ao_coef_normalized, (ao_num_align,ao_prim_num_max) ] implicit none @@ -158,7 +96,6 @@ BEGIN_PROVIDER [ double precision, ao_expo_ordered_transp, (ao_prim_num_max_alig END_PROVIDER - BEGIN_PROVIDER [ integer, ao_l, (ao_num) ] &BEGIN_PROVIDER [ character*(128), ao_l_char, (ao_num) ] implicit none @@ -172,49 +109,17 @@ END_PROVIDER enddo END_PROVIDER - - -BEGIN_PROVIDER [ integer, ao_prim_num, (ao_num_align) ] +BEGIN_PROVIDER [ integer, ao_prim_num_max_align ] implicit none - BEGIN_DOC -! Number of primitives per atomic orbital +! Number of primitives per atomic orbital aligned END_DOC - ao_prim_num = 0 - PROVIDE ezfio_filename - call ezfio_get_ao_basis_ao_prim_num(ao_prim_num) - integer :: i - character*(80) :: message - do i=1,ao_num - if (ao_prim_num(i) <= 0) then - write(message,'(A,I6,A)') 'Number of primitives of contraction ',i,' should be > 0' - print *, message - stop - endif - enddo - -END_PROVIDER - - BEGIN_PROVIDER [ integer, ao_prim_num_max ] -&BEGIN_PROVIDER [ integer, ao_prim_num_max_align ] - implicit none - ao_prim_num_max = 0 - PROVIDE ezfio_filename - call ezfio_get_ao_basis_ao_prim_num_max(ao_prim_num_max) integer :: align_double ao_prim_num_max_align = align_double(ao_prim_num_max) - END_PROVIDER - -BEGIN_PROVIDER [ integer, ao_nucl, (ao_num)] - BEGIN_DOC -! Index of the nuclei on which the ao is centered - END_DOC - implicit none - PROVIDE ezfio_filename - call ezfio_get_ao_basis_ao_nucl(ao_nucl) END_PROVIDER + BEGIN_PROVIDER [ character*(128), l_to_charater, (0:4)] BEGIN_DOC ! character corresponding to the "L" value of an AO orbital @@ -399,13 +304,3 @@ BEGIN_PROVIDER [ character*(4), ao_l_char_space, (ao_num) ] ao_l_char_space(i) = give_ao_character_space enddo END_PROVIDER - -BEGIN_PROVIDER [ character*(32), ao_md5 ] - BEGIN_DOC -! MD5 key characteristic of the AO basis - END_DOC - implicit none - PROVIDE ezfio_filename - call ezfio_get_ao_basis_ao_md5(ao_md5) -END_PROVIDER - diff --git a/src/AO_Basis/tree_dependency.png b/src/AO_Basis/tree_dependency.png index d69b7130..acaeb7af 100644 Binary files a/src/AO_Basis/tree_dependency.png and b/src/AO_Basis/tree_dependency.png differ diff --git a/src/Bitmask/tree_dependency.png b/src/Bitmask/tree_dependency.png index dfa495c3..24ce3397 100644 Binary files a/src/Bitmask/tree_dependency.png and b/src/Bitmask/tree_dependency.png differ diff --git a/src/Determinants/.gitignore b/src/Determinants/.gitignore index 94b8f00b..516d3a70 100644 --- a/src/Determinants/.gitignore +++ b/src/Determinants/.gitignore @@ -1,32 +1,28 @@ -# Automatically created by /home/giner/quantum_package/scripts/module/module_handler.py -IRPF90_temp -IRPF90_man -irpf90_entities -tags -irpf90.make -Makefile -Makefile.depend -build.ninja -.ninja_log +# Automatically created by $QP_ROOT/scripts/module/module_handler.py .ninja_deps -ezfio_interface.irp.f +.ninja_log +AO_Basis +Bitmask +Electrons Ezfio_files +IRPF90_man +IRPF90_temp +Integrals_Bielec Integrals_Monoelec MO_Basis -Utils -Pseudo -Bitmask -AO_Basis -Electrons +Makefile +Makefile.depend Nuclei -Integrals_Bielec +Pseudo +Utils +det_svd +ezfio_interface.irp.f guess_doublet -program_initial_determinants -save_natorb guess_singlet guess_triplet -truncate_wf -save_for_casino -det_svd -print_cas_energy -print_s2 \ No newline at end of file +irpf90.make +irpf90_entities +program_initial_determinants +save_natorb +tags +truncate_wf \ No newline at end of file diff --git a/src/Determinants/README.rst b/src/Determinants/README.rst index 668d28df..d41291d0 100644 --- a/src/Determinants/README.rst +++ b/src/Determinants/README.rst @@ -47,6 +47,14 @@ Documentation Needed for diag_H_mat_elem +`abs_psi_coef_max `_ + Max and min values of the coefficients + + +`abs_psi_coef_min `_ + Max and min values of the coefficients + + `ac_operator `_ Needed for diag_H_mat_elem @@ -120,11 +128,11 @@ Documentation Initial guess vectors are not necessarily orthonormal -`connected_to_ref `_ +`connected_to_ref `_ Undocumented -`connected_to_ref_by_mono `_ +`connected_to_ref_by_mono `_ Undocumented @@ -133,7 +141,7 @@ Documentation After calling this subroutine, N_det, psi_det and psi_coef need to be touched -`create_wf_of_psi_svd_matrix `_ +`create_wf_of_psi_svd_matrix `_ Matrix of wf coefficients. Outer product of alpha and beta determinants @@ -213,7 +221,7 @@ Documentation Build connection proxy between determinants -`det_num `_ +`det_num `_ det_num @@ -339,7 +347,7 @@ Documentation Determinants are taken from the psi_det_sorted_ab array -`generate_all_alpha_beta_det_products `_ +`generate_all_alpha_beta_det_products `_ Create a wave function from all possible alpha x beta determinants @@ -359,15 +367,15 @@ Documentation Applies get_excitation_degree to an array of determinants -`get_index_in_psi_det_alpha_unique `_ +`get_index_in_psi_det_alpha_unique `_ Returns the index of the determinant in the ``psi_det_alpha_unique`` array -`get_index_in_psi_det_beta_unique `_ +`get_index_in_psi_det_beta_unique `_ Returns the index of the determinant in the ``psi_det_beta_unique`` array -`get_index_in_psi_det_sorted_bit `_ +`get_index_in_psi_det_sorted_bit `_ Returns the index of the determinant in the ``psi_det_sorted_bit`` array @@ -480,7 +488,7 @@ Documentation .br -`is_in_wavefunction `_ +`is_in_wavefunction `_ True if the determinant ``det`` is in the wave function @@ -508,11 +516,11 @@ Documentation Number of determinants in the wave function -`n_det_alpha_unique `_ +`n_det_alpha_unique `_ Unique alpha determinants -`n_det_beta_unique `_ +`n_det_beta_unique `_ Unique beta determinants @@ -565,7 +573,7 @@ Documentation Energy of the reference bitmask used in Slater rules -`occ_pattern_search_key `_ +`occ_pattern_search_key `_ Return an integer*8 corresponding to a determinant index for searching @@ -609,14 +617,6 @@ Documentation Undocumented -`print_psi_cas `_ - Undocumented - - -`prog_save_casino `_ - Undocumented - - `psi_average_norm_contrib `_ Contribution of determinants to the state-averaged density @@ -662,11 +662,19 @@ Documentation Undocumented +`psi_coef_max `_ + Max and min values of the coefficients + + +`psi_coef_min `_ + Max and min values of the coefficients + + `psi_coef_sorted `_ Wave function sorted by determinants contribution to the norm (state-averaged) -`psi_coef_sorted_ab `_ +`psi_coef_sorted_ab `_ Determinants on which we apply . They are sorted by the 3 highest electrons in the alpha part, then by the 3 highest electrons in the beta part to accelerate @@ -685,19 +693,19 @@ Documentation is empty -`psi_det_alpha `_ +`psi_det_alpha `_ List of alpha determinants of psi_det -`psi_det_alpha_unique `_ +`psi_det_alpha_unique `_ Unique alpha determinants -`psi_det_beta `_ +`psi_det_beta `_ List of beta determinants of psi_det -`psi_det_beta_unique `_ +`psi_det_beta_unique `_ Unique beta determinants @@ -709,7 +717,7 @@ Documentation Wave function sorted by determinants contribution to the norm (state-averaged) -`psi_det_sorted_ab `_ +`psi_det_sorted_ab `_ Determinants on which we apply . They are sorted by the 3 highest electrons in the alpha part, then by the 3 highest electrons in the beta part to accelerate @@ -723,7 +731,7 @@ Documentation function. -`psi_det_sorted_next_ab `_ +`psi_det_sorted_next_ab `_ Determinants on which we apply . They are sorted by the 3 highest electrons in the alpha part, then by the 3 highest electrons in the beta part to accelerate @@ -758,31 +766,31 @@ Documentation psi_occ_pattern(:,2,j) = jth occ_pattern of the wave function : represent all the double occupation -`psi_svd_alpha `_ +`psi_svd_alpha `_ SVD wave function -`psi_svd_beta `_ +`psi_svd_beta `_ SVD wave function -`psi_svd_coefs `_ +`psi_svd_coefs `_ SVD wave function -`psi_svd_matrix `_ +`psi_svd_matrix `_ Matrix of wf coefficients. Outer product of alpha and beta determinants -`psi_svd_matrix_columns `_ +`psi_svd_matrix_columns `_ Matrix of wf coefficients. Outer product of alpha and beta determinants -`psi_svd_matrix_rows `_ +`psi_svd_matrix_rows `_ Matrix of wf coefficients. Outer product of alpha and beta determinants -`psi_svd_matrix_values `_ +`psi_svd_matrix_values `_ Matrix of wf coefficients. Outer product of alpha and beta determinants @@ -790,7 +798,7 @@ Documentation Undocumented -`read_dets `_ +`read_dets `_ Reads the determinants from the EZFIO file @@ -819,7 +827,7 @@ Documentation Undocumented -`s2_eig `_ +`s2_eig `_ Force the wave function to be an eigenfunction of S^2 @@ -835,10 +843,6 @@ Documentation z component of the Spin -`save_casino `_ - Undocumented - - `save_natorb `_ Undocumented @@ -847,15 +851,15 @@ Documentation Save natural orbitals, obtained by diagonalization of the one-body density matrix in the MO basis -`save_wavefunction `_ +`save_wavefunction `_ Save the wave function into the EZFIO file -`save_wavefunction_general `_ +`save_wavefunction_general `_ Save the wave function into the EZFIO file -`save_wavefunction_unsorted `_ +`save_wavefunction_unsorted `_ Save the wave function into the EZFIO file @@ -869,7 +873,7 @@ Documentation for a given couple of hole/particle excitations i. -`sort_dets_by_3_highest_electrons `_ +`sort_dets_by_3_highest_electrons `_ Determinants on which we apply . They are sorted by the 3 highest electrons in the alpha part, then by the 3 highest electrons in the beta part to accelerate @@ -902,6 +906,6 @@ Documentation Thresholds on selectors (fraction of the norm) -`write_spindeterminants `_ +`write_spindeterminants `_ Undocumented diff --git a/src/Determinants/connected_to_ref.irp.f b/src/Determinants/connected_to_ref.irp.f index 2d40b621..3f4b62d2 100644 --- a/src/Determinants/connected_to_ref.irp.f +++ b/src/Determinants/connected_to_ref.irp.f @@ -11,6 +11,7 @@ integer*8 function det_search_key(det,Nint) do i=2,Nint det_search_key = ieor(det_search_key,iand(det(i,1),det(i,2))) enddo + det_search_key = iand(huge(det(1,1)),det_search_key) end @@ -27,6 +28,7 @@ integer*8 function occ_pattern_search_key(det,Nint) do i=2,Nint occ_pattern_search_key = ieor(occ_pattern_search_key,iand(det(i,1),det(i,2))) enddo + occ_pattern_search_key = iand(huge(det(1,1)),occ_pattern_search_key) end diff --git a/src/Determinants/determinants.irp.f b/src/Determinants/determinants.irp.f index 8cc545f5..6834a745 100644 --- a/src/Determinants/determinants.irp.f +++ b/src/Determinants/determinants.irp.f @@ -446,6 +446,24 @@ subroutine filter_3_highest_electrons( det_in, det_out, Nint ) enddo end + BEGIN_PROVIDER [ double precision, psi_coef_max, (N_states) ] +&BEGIN_PROVIDER [ double precision, psi_coef_min, (N_states) ] +&BEGIN_PROVIDER [ double precision, abs_psi_coef_max, (N_states) ] +&BEGIN_PROVIDER [ double precision, abs_psi_coef_min, (N_states) ] + implicit none + BEGIN_DOC + ! Max and min values of the coefficients + END_DOC + integer:: i + do i=1,N_states + psi_coef_min(i) = minval(psi_coef(:,i)) + psi_coef_max(i) = maxval(psi_coef(:,i)) + abs_psi_coef_min(i) = dabs(psi_coef_min(i)) + abs_psi_coef_max(i) = dabs(psi_coef_max(i)) + enddo + +END_PROVIDER + BEGIN_PROVIDER [ integer(bit_kind), psi_det_sorted_ab, (N_int,2,psi_det_size) ] &BEGIN_PROVIDER [ double precision, psi_coef_sorted_ab, (N_det,N_states) ] &BEGIN_PROVIDER [ integer, psi_det_sorted_next_ab, (2,psi_det_size) ] diff --git a/src/Determinants/spindeterminants.irp.f b/src/Determinants/spindeterminants.irp.f index 5daf4e2c..09a92df6 100644 --- a/src/Determinants/spindeterminants.irp.f +++ b/src/Determinants/spindeterminants.irp.f @@ -19,6 +19,7 @@ integer*8 function spin_det_search_key(det,Nint) do i=2,Nint spin_det_search_key = ieor(spin_det_search_key,det(i)) enddo + spin_det_search_key = iand(huge(det(1)),spin_det_search_key) end diff --git a/src/Determinants/tree_dependency.png b/src/Determinants/tree_dependency.png index 8731537a..f9eb10c3 100644 Binary files a/src/Determinants/tree_dependency.png and b/src/Determinants/tree_dependency.png differ diff --git a/src/Electrons/EZFIO.cfg b/src/Electrons/EZFIO.cfg new file mode 100644 index 00000000..7f1d2f3d --- /dev/null +++ b/src/Electrons/EZFIO.cfg @@ -0,0 +1,15 @@ +[elec_alpha_num] +type: Positive_int +doc: Numbers of electrons alpha ("up") +interface: ezfio, provider + +[elec_beta_num] +type: Positive_int +doc: Numbers of electrons beta ("down") +interface: ezfio, provider + +[elec_num] +type: Positive_int +doc: Numbers total of electrons (alpha + beta) +default: = electrons.elec_alpha_num + electrons.elec_beta_num +interface: ezfio \ No newline at end of file diff --git a/src/Electrons/README.rst b/src/Electrons/README.rst index ecbcf9c4..5c785e4e 100644 --- a/src/Electrons/README.rst +++ b/src/Electrons/README.rst @@ -34,18 +34,18 @@ Documentation .. Do not edit this section. It was auto-generated from the .. by the `update_README.py` script. -`elec_alpha_num `_ +`elec_alpha_num `_ + Numbers of electrons alpha ("up") + + +`elec_beta_num `_ + Numbers of electrons beta ("down") + + +`elec_num `_ Numbers of alpha ("up") , beta ("down") and total electrons -`elec_beta_num `_ - Numbers of alpha ("up") , beta ("down") and total electrons - - -`elec_num `_ - Numbers of alpha ("up") , beta ("down") and total electrons - - -`elec_num_tab `_ +`elec_num_tab `_ Numbers of alpha ("up") , beta ("down") and total electrons diff --git a/src/Electrons/electrons.ezfio_config b/src/Electrons/electrons.ezfio_config deleted file mode 100644 index d89823b7..00000000 --- a/src/Electrons/electrons.ezfio_config +++ /dev/null @@ -1,5 +0,0 @@ -electrons - elec_alpha_num integer - elec_beta_num integer - elec_num integer = electrons_elec_alpha_num + electrons_elec_beta_num - diff --git a/src/Electrons/electrons.irp.f b/src/Electrons/electrons.irp.f index c442489d..701a97d2 100644 --- a/src/Electrons/electrons.irp.f +++ b/src/Electrons/electrons.irp.f @@ -1,29 +1,15 @@ - BEGIN_PROVIDER [ integer, elec_alpha_num ] -&BEGIN_PROVIDER [ integer, elec_beta_num ] -&BEGIN_PROVIDER [ integer, elec_num ] -&BEGIN_PROVIDER [ integer, elec_num_tab, (2) ] + BEGIN_PROVIDER [ integer, elec_num] +&BEGIN_PROVIDER [ integer, elec_num_tab, (2)] implicit none BEGIN_DOC ! Numbers of alpha ("up") , beta ("down") and total electrons END_DOC PROVIDE ezfio_filename - call ezfio_get_electrons_elec_alpha_num(elec_alpha_num) - call ezfio_get_electrons_elec_beta_num(elec_beta_num) + call ezfio_get_electrons_elec_num(elec_num) elec_num_tab(1) = elec_alpha_num elec_num_tab(2) = elec_beta_num - ASSERT (elec_alpha_num > 0) - ASSERT (elec_beta_num >= 0) - call write_time(output_Electrons) - call write_int(output_Electrons,elec_num, & - 'Number of electrons' ) - call write_int(output_Electrons,elec_alpha_num, & - 'Number of alpha electrons' ) - call write_int(output_Electrons,elec_beta_num, & - 'Number of beta electrons' ) - write(output_Electrons,*) + END_PROVIDER - - diff --git a/src/Electrons/tree_dependency.png b/src/Electrons/tree_dependency.png index 8ac27f56..b90a1f83 100644 Binary files a/src/Electrons/tree_dependency.png and b/src/Electrons/tree_dependency.png differ diff --git a/src/Ezfio_files/README.rst b/src/Ezfio_files/README.rst index 4c2e560c..ca558850 100644 --- a/src/Ezfio_files/README.rst +++ b/src/Ezfio_files/README.rst @@ -42,107 +42,99 @@ Documentation Output file for CAS_SD -`output_cisd `_ - Output file for CISD - - -`output_cisd_sc2_selected `_ - Output file for CISD_SC2_selected - - -`output_cisd_selected `_ - Output file for CISD_selected - - `output_cpu_time_0 `_ Initial CPU and wall times when printing in the output files -`output_ddci_selected `_ - Output file for DDCI_selected - - -`output_determinants `_ +`output_determinants `_ Output file for Determinants -`output_electrons `_ +`output_electrons `_ Output file for Electrons -`output_ezfio_files `_ +`output_ezfio_files `_ Output file for Ezfio_files -`output_full_ci `_ +`output_full_ci `_ Output file for Full_CI -`output_generators_cas `_ +`output_generators_cas `_ Output file for Generators_CAS -`output_generators_full `_ +`output_generators_full `_ Output file for Generators_full -`output_hartree_fock `_ +`output_hartree_fock `_ Output file for Hartree_Fock -`output_integrals_bielec `_ +`output_integrals_bielec `_ Output file for Integrals_Bielec -`output_integrals_monoelec `_ +`output_integrals_monoelec `_ Output file for Integrals_Monoelec -`output_loc_cele `_ - Output file for loc_cele - - -`output_mo_basis `_ +`output_mo_basis `_ Output file for MO_Basis -`output_moguess `_ +`output_moguess `_ Output file for MOGuess -`output_molden `_ - Output file for Molden - - -`output_mrcc `_ +`output_mrcc `_ Output file for MRCC -`output_nuclei `_ +`output_mrcc_general `_ + Output file for MRCC_general + + +`output_nuclei `_ Output file for Nuclei -`output_perturbation `_ +`output_perturbation `_ Output file for Perturbation -`output_properties `_ +`output_properties `_ Output file for Properties -`output_pseudo `_ +`output_pseudo `_ Output file for Pseudo -`output_selectors_full `_ +`output_psiref_cas `_ + Output file for Psiref_CAS + + +`output_psiref_threshold `_ + Output file for Psiref_threshold + + +`output_psiref_utils `_ + Output file for Psiref_Utils + + +`output_qmcchem `_ + Output file for QmcChem + + +`output_selectors_full `_ Output file for Selectors_full -`output_singlerefmethod `_ - Output file for SingleRefMethod - - -`output_utils `_ +`output_utils `_ Output file for Utils diff --git a/src/Ezfio_files/tree_dependency.png b/src/Ezfio_files/tree_dependency.png index d54e695c..48f53991 100644 Binary files a/src/Ezfio_files/tree_dependency.png and b/src/Ezfio_files/tree_dependency.png differ diff --git a/src/Integrals_Bielec/tree_dependency.png b/src/Integrals_Bielec/tree_dependency.png index 30d4bbdb..4161fd0a 100644 Binary files a/src/Integrals_Bielec/tree_dependency.png and b/src/Integrals_Bielec/tree_dependency.png differ diff --git a/src/Integrals_Monoelec/.gitignore b/src/Integrals_Monoelec/.gitignore index eb0f8678..577068de 100644 --- a/src/Integrals_Monoelec/.gitignore +++ b/src/Integrals_Monoelec/.gitignore @@ -1,21 +1,20 @@ -# Automatically created by /home/giner/quantum_package/scripts/module/module_handler.py -IRPF90_temp -IRPF90_man -irpf90_entities -tags -irpf90.make -Makefile -Makefile.depend -build.ninja -.ninja_log +# Automatically created by $QP_ROOT/scripts/module/module_handler.py .ninja_deps -ezfio_interface.irp.f -Ezfio_files -MO_Basis -Utils -Pseudo +.ninja_log AO_Basis Electrons +Ezfio_files +IRPF90_man +IRPF90_temp +MO_Basis +Makefile +Makefile.depend Nuclei +Pseudo +Utils +check_orthonormality +ezfio_interface.irp.f +irpf90.make +irpf90_entities save_ortho_mos -check_orthonormality \ No newline at end of file +tags \ No newline at end of file diff --git a/src/Integrals_Monoelec/pseudopot.f90 b/src/Integrals_Monoelec/pseudopot.f90 index b605a45e..bd00dc51 100644 --- a/src/Integrals_Monoelec/pseudopot.f90 +++ b/src/Integrals_Monoelec/pseudopot.f90 @@ -702,7 +702,7 @@ integer n_k(klocmax_max) double precision a(3),g_a,b(3),g_b,c(3),d(3) integer n_a(3),n_b(3),ntotA,ntotB,ntot,m integer i,l,k,ktot,k1,k2,k3,k1p,k2p,k3p -double precision f,fourpi,ac,bc,freal,d2,dreal,theta_DC0,phi_DC0 +double precision f,fourpi,ac,bc,freal,d2,dreal,theta_DC0,phi_DC0,coef double precision,allocatable :: array_R_loc(:,:,:) double precision,allocatable :: array_coefs(:,:,:,:,:,:) double precision int_prod_bessel_loc,binom_func,accu,prod,ylm,bigI,arg @@ -713,93 +713,119 @@ double precision int_prod_bessel_loc,binom_func,accu,prod,ylm,bigI,arg bc=dsqrt((b(1)-c(1))**2+(b(2)-c(2))**2+(b(3)-c(3))**2) arg=g_a*ac**2+g_b*bc**2 if(arg.gt.-dlog(10.d-20))then - Vloc=0.d0 - return + Vloc=0.d0 + return endif - + ntotA=n_a(1)+n_a(2)+n_a(3) ntotB=n_b(1)+n_b(2)+n_b(3) ntot=ntotA+ntotB - + if(ac.eq.0.d0.and.bc.eq.0.d0)then - accu=0.d0 - - do k=1,klocmax - accu=accu+v_k(k)*crochet(n_k(k)+2+ntot,g_a+g_b+dz_k(k)) - enddo - Vloc=accu*fourpi*bigI(0,0,0,0,n_a(1)+n_b(1),n_a(2)+n_b(2),n_a(3)+n_b(3)) - !bigI frequantly is null - return + accu=0.d0 + + do k=1,klocmax + accu=accu+v_k(k)*crochet(n_k(k)+2+ntot,g_a+g_b+dz_k(k)) + enddo + Vloc=accu*fourpi*bigI(0,0,0,0,n_a(1)+n_b(1),n_a(2)+n_b(2),n_a(3)+n_b(3)) + !bigI frequently is null + return endif - + freal=dexp(-g_a*ac**2-g_b*bc**2) - d2=0.d0 + d2 = 0.d0 do i=1,3 - d(i)=g_a*(a(i)-c(i))+g_b*(b(i)-c(i)) - d2=d2+d(i)**2 + d(i)=g_a*(a(i)-c(i))+g_b*(b(i)-c(i)) + d2=d2+d(i)*d(i) enddo d2=dsqrt(d2) dreal=2.d0*d2 - - theta_DC0=dacos(d(3)/d2) - phi_DC0=datan2(d(2)/d2,d(1)/d2) - -allocate (array_R_loc(-2:ntot_max+klocmax_max,klocmax_max,0:ntot_max)) -allocate (array_coefs(0:ntot_max,0:ntot_max,0:ntot_max,0:ntot_max,0:ntot_max,0:ntot_max)) - + + + allocate (array_R_loc(-2:ntot_max+klocmax_max,klocmax_max,0:ntot_max)) + allocate (array_coefs(0:ntot_max,0:ntot_max,0:ntot_max,0:ntot_max,0:ntot_max,0:ntot_max)) + do ktot=-2,ntotA+ntotB+klocmax - do l=0,ntot - do k=1,klocmax - array_R_loc(ktot,k,l)=freal*int_prod_bessel_loc(ktot+2,g_a+g_b+dz_k(k),l,dreal) - enddo - enddo - enddo - - do k1=0,n_a(1) - do k2=0,n_a(2) - do k3=0,n_a(3) - do k1p=0,n_b(1) - do k2p=0,n_b(2) - do k3p=0,n_b(3) - array_coefs(k1,k2,k3,k1p,k2p,k3p)=binom_func(n_a(1),k1)*binom_func(n_a(2),k2)*binom_func(n_a(3),k3) & - *(c(1)-a(1))**(n_a(1)-k1)*(c(2)-a(2))**(n_a(2)-k2)*(c(3)-a(3))**(n_a(3)-k3) & - *binom_func(n_b(1),k1p)*binom_func(n_b(2),k2p)*binom_func(n_b(3),k3p) & - *(c(1)-b(1))**(n_b(1)-k1p)*(c(2)-b(2))**(n_b(2)-k2p)*(c(3)-b(3))**(n_b(3)-k3p) - enddo - enddo - enddo - enddo - enddo - enddo - - accu=0.d0 - do k=1,klocmax - do k1=0,n_a(1) - do k2=0,n_a(2) - do k3=0,n_a(3) - do k1p=0,n_b(1) - do k2p=0,n_b(2) - do k3p=0,n_b(3) - - do l=0,ntot - do m=-l,l - prod=ylm(l,m,theta_DC0,phi_DC0)*array_coefs(k1,k2,k3,k1p,k2p,k3p) & - *bigI(l,m,0,0,k1+k1p,k2+k2p,k3+k3p) - ktot=k1+k2+k3+k1p+k2p+k3p+n_k(k) - accu=accu+prod*v_k(k)*array_R_loc(ktot,k,l) + do l=0,ntot + do k=1,klocmax + array_R_loc(ktot,k,l)=freal*int_prod_bessel_loc(ktot+2,g_a+g_b+dz_k(k),l,dreal) + enddo enddo - enddo - - enddo - enddo - enddo - enddo - enddo - enddo enddo + + do k1=0,n_a(1) + do k2=0,n_a(2) + do k3=0,n_a(3) + do k1p=0,n_b(1) + do k2p=0,n_b(2) + do k3p=0,n_b(3) + array_coefs(k1,k2,k3,k1p,k2p,k3p)=binom_func(n_a(1),k1)*binom_func(n_a(2),k2)*binom_func(n_a(3),k3)& + *(c(1)-a(1))**(n_a(1)-k1)*(c(2)-a(2))**(n_a(2)-k2)*(c(3)-a(3))**(n_a(3)-k3)& + *binom_func(n_b(1),k1p)*binom_func(n_b(2),k2p)*binom_func(n_b(3),k3p)& + *(c(1)-b(1))**(n_b(1)-k1p)*(c(2)-b(2))**(n_b(2)-k2p)*(c(3)-b(3))**(n_b(3)-k3p) + enddo + enddo + enddo + enddo + enddo + enddo + + + accu=0.d0 + if(d2 == 0.d0)then + l=0 + m=0 + coef=1.d0/dsqrt(4.d0*dacos(-1.d0)) + do k=1,klocmax + do k1=0,n_a(1) + do k2=0,n_a(2) + do k3=0,n_a(3) + do k1p=0,n_b(1) + do k2p=0,n_b(2) + do k3p=0,n_b(3) + prod=coef*array_coefs(k1,k2,k3,k1p,k2p,k3p) & + *bigI(l,m,0,0,k1+k1p,k2+k2p,k3+k3p) + ktot=k1+k2+k3+k1p+k2p+k3p+n_k(k) + accu=accu+prod*v_k(k)*array_R_loc(ktot,k,l) + enddo + enddo + enddo + enddo + enddo + enddo + enddo + + else + theta_DC0=dacos(d(3)/d2) + phi_DC0=datan2(d(2)/d2,d(1)/d2) + + do k=1,klocmax + do k1=0,n_a(1) + do k2=0,n_a(2) + do k3=0,n_a(3) + do k1p=0,n_b(1) + do k2p=0,n_b(2) + do k3p=0,n_b(3) + do l=0,ntot + do m=-l,l + coef=ylm(l,m,theta_DC0,phi_DC0) + prod=coef*array_coefs(k1,k2,k3,k1p,k2p,k3p) & + *bigI(l,m,0,0,k1+k1p,k2+k2p,k3+k3p) + ktot=k1+k2+k3+k1p+k2p+k3p+n_k(k) + accu=accu+prod*v_k(k)*array_R_loc(ktot,k,l) + enddo + enddo + enddo + enddo + enddo + enddo + enddo + enddo + enddo + endif Vloc=f*accu - + deallocate (array_R_loc) deallocate (array_coefs) end diff --git a/src/Integrals_Monoelec/tree_dependency.png b/src/Integrals_Monoelec/tree_dependency.png index 7431ba2d..f56c1e77 100644 Binary files a/src/Integrals_Monoelec/tree_dependency.png and b/src/Integrals_Monoelec/tree_dependency.png differ diff --git a/src/MOGuess/.gitignore b/src/MOGuess/.gitignore index 2d29aa37..a912636d 100644 --- a/src/MOGuess/.gitignore +++ b/src/MOGuess/.gitignore @@ -1,21 +1,20 @@ -# Automatically created by /home/giner/quantum_package/scripts/module/module_handler.py -IRPF90_temp -IRPF90_man -irpf90_entities -tags -irpf90.make -Makefile -Makefile.depend -build.ninja -.ninja_log +# Automatically created by $QP_ROOT/scripts/module/module_handler.py .ninja_deps -ezfio_interface.irp.f -Ezfio_files -Integrals_Monoelec -MO_Basis -Utils -Pseudo +.ninja_log AO_Basis Electrons +Ezfio_files +H_CORE_guess +IRPF90_man +IRPF90_temp +Integrals_Monoelec +MO_Basis +Makefile +Makefile.depend Nuclei -H_CORE_guess \ No newline at end of file +Pseudo +Utils +ezfio_interface.irp.f +irpf90.make +irpf90_entities +tags \ No newline at end of file diff --git a/src/MOGuess/tree_dependency.png b/src/MOGuess/tree_dependency.png index 994660a3..f33b4bb3 100644 Binary files a/src/MOGuess/tree_dependency.png and b/src/MOGuess/tree_dependency.png differ diff --git a/src/MO_Basis/tree_dependency.png b/src/MO_Basis/tree_dependency.png index 9c3e1be6..c8086369 100644 Binary files a/src/MO_Basis/tree_dependency.png and b/src/MO_Basis/tree_dependency.png differ diff --git a/src/Nuclei/README.rst b/src/Nuclei/README.rst index 63e6c6ae..9f0b15d9 100644 --- a/src/Nuclei/README.rst +++ b/src/Nuclei/README.rst @@ -27,7 +27,7 @@ Documentation Array of the name of element, sorted by nuclear charge (integer) -`nucl_charge `_ +`nucl_charge `_ Nuclear charges @@ -69,11 +69,11 @@ Documentation nucl_dist_vec : Nucleus-nucleus distances vectors -`nucl_label `_ +`nucl_label `_ Nuclear labels -`nucl_num `_ +`nucl_num `_ Number of nuclei diff --git a/src/Nuclei/tree_dependency.png b/src/Nuclei/tree_dependency.png index 7b3ed613..72cfaeee 100644 Binary files a/src/Nuclei/tree_dependency.png and b/src/Nuclei/tree_dependency.png differ diff --git a/src/Pseudo/README.rst b/src/Pseudo/README.rst index 5aa338ea..84a555da 100644 --- a/src/Pseudo/README.rst +++ b/src/Pseudo/README.rst @@ -26,7 +26,7 @@ Documentation test -`pseudo_dz_kl `_ +`pseudo_dz_kl `_ test @@ -42,7 +42,7 @@ Documentation test -`pseudo_kmax `_ +`pseudo_kmax `_ test @@ -50,7 +50,7 @@ Documentation test -`pseudo_n_k `_ +`pseudo_n_k `_ test diff --git a/src/Pseudo/tree_dependency.png b/src/Pseudo/tree_dependency.png index a2dc7c27..5a9af5ae 100644 Binary files a/src/Pseudo/tree_dependency.png and b/src/Pseudo/tree_dependency.png differ diff --git a/src/Utils/README.rst b/src/Utils/README.rst index a5247fe5..104705a4 100644 --- a/src/Utils/README.rst +++ b/src/Utils/README.rst @@ -431,7 +431,7 @@ Documentation .br -`lapack_diag_s2 `_ +`lapack_diag_s2 `_ Diagonalize matrix H .br H is untouched between input and ouptut @@ -453,7 +453,7 @@ Documentation .br -`lapack_partial_diag `_ +`lapack_partial_diag `_ Diagonalize matrix H .br H is untouched between input and ouptut @@ -597,7 +597,7 @@ Documentation to be in integer*8 format -`set_zero_extra_diag `_ +`set_zero_extra_diag `_ Undocumented diff --git a/src/Utils/tree_dependency.png b/src/Utils/tree_dependency.png index f0aa66a7..38b04785 100644 Binary files a/src/Utils/tree_dependency.png and b/src/Utils/tree_dependency.png differ