From 992732813881397b9e854381f803f0056b6616ba Mon Sep 17 00:00:00 2001 From: Anthony Scemama Date: Wed, 28 Feb 2024 18:15:25 +0100 Subject: [PATCH] Changed dummy into ghost --- ocaml/Angmom.ml | 3 +-- ocaml/Basis.ml | 2 +- ocaml/Element.ml | 38 ++++++++++++++++++------------------ ocaml/qp_create_ezfio.ml | 42 ++++++++++++++++++++-------------------- 4 files changed, 42 insertions(+), 43 deletions(-) diff --git a/ocaml/Angmom.ml b/ocaml/Angmom.ml index ed13e8dc..2da09340 100644 --- a/ocaml/Angmom.ml +++ b/ocaml/Angmom.ml @@ -26,8 +26,7 @@ let of_string = function | "J" | "j" -> J | "K" | "k" -> K | "L" | "l" -> L - | x -> raise (Failure ("Angmom should be S|P|D|F|G|H|I|J|K|L, -not "^x^".")) + | x -> raise (Failure ("Angmom should be S|P|D|F|G|H|I|J|K|L, not "^x^".")) let of_char = function | 'S' | 's' -> S diff --git a/ocaml/Basis.ml b/ocaml/Basis.ml index 9b0c6a38..f951a5f3 100644 --- a/ocaml/Basis.ml +++ b/ocaml/Basis.ml @@ -17,7 +17,7 @@ let read in_channel at_number = (** Find an element in the basis set file *) let find in_channel element = seek_in in_channel 0; - let element_read = ref Element.X in + let element_read = ref Element.Og in while !element_read <> element do let buffer = input_line in_channel in diff --git a/ocaml/Element.ml b/ocaml/Element.ml index f0d4455d..a794b2bb 100644 --- a/ocaml/Element.ml +++ b/ocaml/Element.ml @@ -4,7 +4,7 @@ open Qptypes exception ElementError of string type t = X - + |H |He |Li|Be |B |C |N |O |F |Ne |Na|Mg |Al|Si|P |S |Cl|Ar @@ -20,7 +20,7 @@ type t = X let of_string x = match (String.capitalize_ascii (String.lowercase_ascii x)) with -| "X" | "Dummy" -> X +| "X" | "Ghost" -> X | "H" | "Hydrogen" -> H | "He" | "Helium" -> He | "Li" | "Lithium" -> Li @@ -265,7 +265,7 @@ let to_string = function let to_long_string = function -| X -> "Dummy" +| X -> "Ghost" | H -> "Hydrogen" | He -> "Helium" | Li -> "Lithium" @@ -492,20 +492,20 @@ let to_charge c = | No -> 102 | Lr -> 103 | Rf -> 104 - | Db -> 105 - | Sg -> 106 - | Bh -> 107 - | Hs -> 108 - | Mt -> 109 - | Ds -> 110 - | Rg -> 111 - | Cn -> 112 - | Nh -> 113 - | Fl -> 114 - | Mc -> 115 - | Lv -> 116 - | Ts -> 117 - | Og -> 118 + | Db -> 105 + | Sg -> 106 + | Bh -> 107 + | Hs -> 108 + | Mt -> 109 + | Ds -> 110 + | Rg -> 111 + | Cn -> 112 + | Nh -> 113 + | Fl -> 114 + | Mc -> 115 + | Lv -> 116 + | Ts -> 117 + | Og -> 118 in Charge.of_int result @@ -565,7 +565,7 @@ let of_charge c = match (Charge.to_int c) with | 52 -> Te | 53 -> I | 54 -> Xe -| 55 -> Cs +| 55 -> Cs | 56 -> Ba | 57 -> La | 58 -> Ce @@ -880,7 +880,7 @@ let vdw_radius x = | Ts -> None | Og -> None in - match result x with + match result x with | Some y -> Some (Positive_float.of_float @@ Units.angstrom_to_bohr *. y ) | None -> None diff --git a/ocaml/qp_create_ezfio.ml b/ocaml/qp_create_ezfio.ml index 8e452762..4e17c0ad 100644 --- a/ocaml/qp_create_ezfio.ml +++ b/ocaml/qp_create_ezfio.ml @@ -6,8 +6,8 @@ type element = | Element of Element.t | Int_elem of (Nucl_number.t * Element.t) -(** Handle dummy atoms placed on bonds *) -let dummy_centers ~threshold ~molecule ~nuclei = +(** Handle ghost atoms placed on bonds *) +let ghost_centers ~threshold ~molecule ~nuclei = let d = Molecule.distance_matrix molecule in @@ -68,11 +68,11 @@ let run ?o b au c d m p cart xyz_file = (Molecule.of_file xyz_file ~charge:(Charge.of_int c) ~multiplicity:(Multiplicity.of_int m) ) in - let dummy = - dummy_centers ~threshold:d ~molecule ~nuclei:molecule.Molecule.nuclei + let ghost = + ghost_centers ~threshold:d ~molecule ~nuclei:molecule.Molecule.nuclei in let nuclei = - molecule.Molecule.nuclei @ dummy + molecule.Molecule.nuclei @ ghost in @@ -145,8 +145,6 @@ let run ?o b au c d m p cart xyz_file = | i :: k :: [] -> (Nucl_number.of_int @@ int_of_string i, Element.of_string k) | _ -> failwith "Expected format is int,Element:basis" in Int_elem result - and basis = - String.lowercase_ascii basis in let key = match elem with @@ -313,7 +311,7 @@ let run ?o b au c d m p cart xyz_file = } in let nuclei = - molecule.Molecule.nuclei @ dummy + molecule.Molecule.nuclei @ ghost in @@ -491,11 +489,7 @@ let run ?o b au c d m p cart xyz_file = |> List.rev |> list_map (fun (x,i) -> try - let e = - match x.Atom.element with - | Element.X -> Element.H - | e -> e - in + let e = x.Atom.element in let key = Int_elem (i,x.Atom.element) in @@ -507,9 +501,15 @@ let run ?o b au c d m p cart xyz_file = in try Basis.read_element (basis_channel key) i e - with Not_found -> - failwith (Printf.sprintf "Basis not found for atom %d (%s)" (Nucl_number.to_int i) - (Element.to_string x.Atom.element) ) + with _ -> + try + if e = Element.X then + Basis.read_element (basis_channel key) i (Element.H) + else + raise Not_found + with Not_found -> + failwith (Printf.sprintf "Basis not found for atom %d (%s)" (Nucl_number.to_int i) + (Element.to_string x.Atom.element) ) with | End_of_file -> failwith ("Element "^(Element.to_string x.Atom.element)^" not found in basis set.") @@ -710,9 +710,9 @@ If a file with the same name as the basis set exists, this file will be read. O arg=With_arg ""; doc="Total charge of the molecule. Default is 0. For negative values, use m instead of -, for ex m1"} ; - { opt=Optional ; short='d'; long="dummy"; + { opt=Optional ; short='g'; long="ghost"; arg=With_arg ""; - doc="Add dummy atoms. x * (covalent radii of the atoms)."} ; + doc="Add ghost atoms. x * (covalent radii of the atoms)."} ; { opt=Optional ; short='m'; long="multiplicity"; arg=With_arg ""; @@ -756,8 +756,8 @@ If a file with the same name as the basis set exists, this file will be read. O int_of_string x ) in - let dummy = - match Command_line.get "dummy" with + let ghost = + match Command_line.get "ghost" with | None -> 0. | Some x -> float_of_string x in @@ -782,7 +782,7 @@ If a file with the same name as the basis set exists, this file will be read. O | x::_ -> x in - run ?o:output basis au charge dummy multiplicity pseudo cart xyz_filename + run ?o:output basis au charge ghost multiplicity pseudo cart xyz_filename ) with (* | Failure txt -> Printf.eprintf "Fatal error: %s\n%!" txt *)