From 8e02fe0497235c6141e6ba0603e0725e62e6e7b2 Mon Sep 17 00:00:00 2001 From: Anthony Scemama Date: Tue, 5 Jul 2016 14:03:03 +0200 Subject: [PATCH] Selection criterion fixed in var_pt2_ratio --- data/pseudo/tm | 32 ++++ data/pseudo/tn_df | 23 ++- ocaml/Element.ml | 219 +++++++++++++++++++++++----- ocaml/Element.mli | 1 + plugins/Full_CI/var_pt2_ratio.irp.f | 5 +- src/Utils/fortran_mmap.c | 4 +- 6 files changed, 243 insertions(+), 41 deletions(-) create mode 100644 data/pseudo/tm diff --git a/data/pseudo/tm b/data/pseudo/tm new file mode 100644 index 00000000..531445f8 --- /dev/null +++ b/data/pseudo/tm @@ -0,0 +1,32 @@ +Ag GEN 36 2 +4 +11.074 1 1.712 +-166.201 2 1.391 +255.676 2 1.194 +-91.757 2 1.033 +3 +11.074 1 0.897 +-22.6472 2 1.226 +16.8557 2 0.9789 +4 +9.524 1 12.668 +227.659 2 1.662 +-363.576 2 1.4 +150.286 2 1.205 + +Au GEN 68 2 +4 +10.881 1 2.286 +-97.386 2 1.088 +270.134 2 1.267 +-171.733 2 1.499 +3 +10.721 1 1.38 +-63.222 2 1.111 +60.634 2 0.987 +4 +9.383 1 11. +225.822 2 1.66 +286.233 2 1.342 +-497.561 2 1.437 + diff --git a/data/pseudo/tn_df b/data/pseudo/tn_df index 2ba941be..988312b0 100644 --- a/data/pseudo/tn_df +++ b/data/pseudo/tn_df @@ -780,6 +780,27 @@ Ar GEN 10 2 -1386.79918148 2 4.23753203 1350.57102634 2 6.12344921 - +Ag GEN 36 2 + 6 + 11.00000000 1 7.02317516 + 178.71479273 2 1.36779344 + -206.54166000 2 1.85990342 + 92.80009949 2 2.70385827 + -91.80009949 2 1.21149868 + 77.25492677 3 2.46247055 + 6 + -19159.46923372 2 2.56205947 + 19178.09022506 2 3.28075183 + -19956.12207989 2 3.86486918 + 12405.48540805 2 2.42437953 + -8569.95659418 2 5.14643113 + 16121.59197935 2 4.79642660 + 6 + -1054.66284551 2 1.92427691 + 1072.38275494 2 1.94184452 + -1.15533162 2 27.95704514 + 88.48945385 2 1.25545336 + -0.36033231 2 10.04954095 + -85.97371403 2 1.49011553 diff --git a/ocaml/Element.ml b/ocaml/Element.ml index 6bc2de4e..df85663f 100644 --- a/ocaml/Element.ml +++ b/ocaml/Element.ml @@ -9,6 +9,7 @@ type t = |Li|Be |B |C |N |O |F |Ne |Na|Mg |Al|Si|P |S |Cl|Ar |K |Ca|Sc|Ti|V |Cr|Mn|Fe|Co|Ni|Cu|Zn|Ga|Ge|As|Se|Br|Kr +|Rb|Sr|Y |Zr|Nb|Mo|Tc|Ru|Rh|Pd|Ag|Cd|In|Sn|Sb|Te|I |Xe with sexp let of_string x = @@ -50,6 +51,24 @@ let of_string x = | "Se" | "Selenium" -> Se | "Br" | "Bromine" -> Br | "Kr" | "Krypton" -> Kr +| "Rb" | "Rubidium" -> Rb +| "Sr" | "Strontium" -> Sr +| "Y" | "Yttrium" -> Y +| "Zr" | "Zirconium" -> Zr +| "Nb" | "Niobium" -> Nb +| "Mo" | "Molybdenum" -> Mo +| "Tc" | "Technetium" -> Tc +| "Ru" | "Ruthenium" -> Ru +| "Rh" | "Rhodium" -> Rh +| "Pd" | "Palladium" -> Pd +| "Ag" | "Silver" -> Ag +| "Cd" | "Cadmium" -> Cd +| "In" | "Indium" -> In +| "Sn" | "Tin" -> Sn +| "Sb" | "Antimony" -> Sb +| "Te" | "Tellurium" -> Te +| "I" | "Iodine" -> I +| "Xe" | "Xenon" -> Xe | x -> raise (ElementError ("Element "^x^" unknown")) @@ -91,6 +110,24 @@ let to_string = function | Se -> "Se" | Br -> "Br" | Kr -> "Kr" +| Rb -> "Rb" +| Sr -> "Sr" +| Y -> "Y" +| Zr -> "Zr" +| Nb -> "Nb" +| Mo -> "Mo" +| Tc -> "Tc" +| Ru -> "Ru" +| Rh -> "Rh" +| Pd -> "Pd" +| Ag -> "Ag" +| Cd -> "Cd" +| In -> "In" +| Sn -> "Sn" +| Sb -> "Sb" +| Te -> "Te" +| I -> "I" +| Xe -> "Xe" let to_long_string = function @@ -131,6 +168,24 @@ let to_long_string = function | Se -> "Selenium" | Br -> "Bromine" | Kr -> "Krypton" +| Rb -> "Rubidium" +| Sr -> "Strontium" +| Y -> "Yttrium" +| Zr -> "Zirconium" +| Nb -> "Niobium" +| Mo -> "Molybdenum" +| Tc -> "Technetium" +| Ru -> "Ruthenium" +| Rh -> "Rhodium" +| Pd -> "Palladium" +| Ag -> "Silver" +| Cd -> "Cadmium" +| In -> "Indium" +| Sn -> "Tin" +| Sb -> "Antimony" +| Te -> "Tellurium" +| I -> "Iodine" +| Xe -> "Xenon" let to_charge c = @@ -172,47 +227,83 @@ let to_charge c = | Se -> 34 | Br -> 35 | Kr -> 36 + | Rb -> 37 + | Sr -> 38 + | Y -> 39 + | Zr -> 40 + | Nb -> 41 + | Mo -> 42 + | Tc -> 43 + | Ru -> 44 + | Rh -> 45 + | Pd -> 46 + | Ag -> 47 + | Cd -> 48 + | In -> 49 + | Sn -> 50 + | Sb -> 51 + | Te -> 52 + | I -> 53 + | Xe -> 54 in Charge.of_int result let of_charge c = match (Charge.to_int c) with -| 0 -> X -| 1 -> H -| 2 -> He -| 3 -> Li -| 4 -> Be -| 5 -> B -| 6 -> C -| 7 -> N -| 8 -> O -| 9 -> F -| 10 -> Ne -| 11 -> Na -| 12 -> Mg -| 13 -> Al -| 14 -> Si -| 15 -> P -| 16 -> S -| 17 -> Cl -| 18 -> Ar -| 19 -> K -| 20 -> Ca -| 21 -> Sc -| 22 -> Ti -| 23 -> V -| 24 -> Cr -| 25 -> Mn -| 26 -> Fe -| 27 -> Co -| 28 -> Ni -| 29 -> Cu -| 30 -> Zn -| 31 -> Ga -| 32 -> Ge -| 33 -> As -| 34 -> Se -| 35 -> Br -| 36 -> Kr +| 0 -> X +| 1 -> H +| 2 -> He +| 3 -> Li +| 4 -> Be +| 5 -> B +| 6 -> C +| 7 -> N +| 8 -> O +| 9 -> F +| 10 -> Ne +| 11 -> Na +| 12 -> Mg +| 13 -> Al +| 14 -> Si +| 15 -> P +| 16 -> S +| 17 -> Cl +| 18 -> Ar +| 19 -> K +| 20 -> Ca +| 21 -> Sc +| 22 -> Ti +| 23 -> V +| 24 -> Cr +| 25 -> Mn +| 26 -> Fe +| 27 -> Co +| 28 -> Ni +| 29 -> Cu +| 30 -> Zn +| 31 -> Ga +| 32 -> Ge +| 33 -> As +| 34 -> Se +| 35 -> Br +| 36 -> Kr +| 37 -> Rb +| 38 -> Sr +| 39 -> Y +| 40 -> Zr +| 41 -> Nb +| 42 -> Mo +| 43 -> Tc +| 44 -> Ru +| 45 -> Rh +| 46 -> Pd +| 47 -> Ag +| 48 -> Cd +| 49 -> In +| 50 -> Sn +| 51 -> Sb +| 52 -> Te +| 53 -> I +| 54 -> Xe | x -> raise (ElementError ("Element of charge "^(string_of_int x)^" unknown")) @@ -255,6 +346,24 @@ let covalent_radius x = | Se -> 0.70 | Br -> 1.24 | Kr -> 1.91 + | Rb -> 2.20 + | Sr -> 1.95 + | Y -> 1.90 + | Zr -> 1.75 + | Nb -> 1.64 + | Mo -> 1.54 + | Tc -> 1.47 + | Ru -> 1.46 + | Rh -> 1.42 + | Pd -> 1.39 + | Ag -> 1.45 + | Cd -> 1.44 + | In -> 1.42 + | Sn -> 1.39 + | Sb -> 1.39 + | Te -> 1.38 + | I -> 1.39 + | Xe -> 1.40 in Units.angstrom_to_bohr *. (result x) |> Positive_float.of_float @@ -298,6 +407,24 @@ let vdw_radius x = | Se -> 1.70 | Br -> 2.10 | Kr -> 1.70 + | Rb -> 3.03 + | Sr -> 2.49 + | Y -> 0. + | Zr -> 0. + | Nb -> 0. + | Mo -> 0. + | Tc -> 0. + | Ru -> 0. + | Rh -> 0. + | Pd -> 1.63 + | Ag -> 1.72 + | Cd -> 1.58 + | In -> 1.93 + | Sn -> 2.17 + | Sb -> 2.06 + | Te -> 2.06 + | I -> 1.98 + | Xe -> 2.16 in Units.angstrom_to_bohr *. (result x) |> Positive_float.of_float @@ -341,6 +468,24 @@ let mass x = | Se -> 78.96 | Br -> 79.904 | Kr -> 83.80 + | Rb -> 85.4678 + | Sr -> 87.62 + | Y -> 88.90584 + | Zr -> 91.224 + | Nb -> 92.90637 + | Mo -> 95.95 + | Tc -> 98. + | Ru -> 101.07 + | Rh -> 102.90550 + | Pd -> 106.42 + | Ag -> 107.8682 + | Cd -> 112.414 + | In -> 114.818 + | Sn -> 118.710 + | Sb -> 121.760 + | Te -> 127.60 + | I -> 126.90447 + | Xe -> 131.293 in result x |> Positive_float.of_float diff --git a/ocaml/Element.mli b/ocaml/Element.mli index 8d9862c9..5edfdf31 100644 --- a/ocaml/Element.mli +++ b/ocaml/Element.mli @@ -6,6 +6,7 @@ type t = |Li|Be |B |C |N |O |F |Ne |Na|Mg |Al|Si|P |S |Cl|Ar |K |Ca|Sc|Ti|V |Cr|Mn|Fe|Co|Ni|Cu|Zn|Ga|Ge|As|Se|Br|Kr +|Rb|Sr|Y |Zr|Nb|Mo|Tc|Ru|Rh|Pd|Ag|Cd|In|Sn|Sb|Te|I |Xe with sexp (** String conversion functions *) diff --git a/plugins/Full_CI/var_pt2_ratio.irp.f b/plugins/Full_CI/var_pt2_ratio.irp.f index 3d942a30..1ea52dda 100644 --- a/plugins/Full_CI/var_pt2_ratio.irp.f +++ b/plugins/Full_CI/var_pt2_ratio.irp.f @@ -11,7 +11,7 @@ program var_pt2_ratio_run double precision, allocatable :: psi_det_save(:,:,:), psi_coef_save(:,:) - double precision :: E_fci, E_var, ratio, E_ref + double precision :: E_fci, E_var, ratio, E_ref, selection_criterion_save integer :: Nmin, Nmax pt2 = 1.d0 @@ -30,6 +30,7 @@ program var_pt2_ratio_run threshold_selectors = 1.d0 threshold_generators = 0.999d0 + selection_criterion_save = selection_criterion call diagonalize_CI call H_apply_FCI_PT2(pt2, norm_pert, H_pert_diag, N_st) E_ref = CI_energy(1) + pt2(1) @@ -46,6 +47,8 @@ program var_pt2_ratio_run Nmax = max(Nmax,Nmin+10) ! Select new determinants call H_apply_FCI(pt2, norm_pert, H_pert_diag, N_st) + selection_criterion = selection_criterion_save + SOFT_TOUCH selection_criterion selection_criterion_min selection_criterion_factor else Nmax = N_det N_det = Nmin + (Nmax-Nmin)/2 diff --git a/src/Utils/fortran_mmap.c b/src/Utils/fortran_mmap.c index 2748dcba..eee8337e 100644 --- a/src/Utils/fortran_mmap.c +++ b/src/Utils/fortran_mmap.c @@ -22,7 +22,7 @@ void* mmap_fortran(char* filename, size_t bytes, int* file_descr, int read_only) perror("Error opening mmap file for reading"); exit(EXIT_FAILURE); } - map = mmap(0, bytes, PROT_READ, MAP_SHARED, fd, 0); + map = mmap(NULL, bytes, PROT_READ, MAP_SHARED, fd, 0); } else { @@ -49,7 +49,7 @@ void* mmap_fortran(char* filename, size_t bytes, int* file_descr, int read_only) exit(EXIT_FAILURE); } - map = mmap(0, bytes, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); + map = mmap(NULL, bytes, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); } if (map == MAP_FAILED) {