mirror of
https://gitlab.com/scemama/QCaml.git
synced 2024-08-31 00:33:40 +02:00
123 lines
3.0 KiB
OCaml
123 lines
3.0 KiB
OCaml
(** General basis set read from a file.
|
|
|
|
Basis set files are stored in GAMESS format, for example:
|
|
{[
|
|
HYDROGEN
|
|
S 3
|
|
1 13.0100000 0.0196850
|
|
2 1.9620000 0.1379770
|
|
3 0.4446000 0.4781480
|
|
S 1
|
|
1 0.1220000 1.0000000
|
|
P 1
|
|
1 0.7270000 1.0000000
|
|
|
|
HELIUM
|
|
S 3
|
|
1 38.3600000 0.0238090
|
|
2 5.7700000 0.1548910
|
|
3 1.2400000 0.4699870
|
|
S 1
|
|
1 0.2976000 1.0000000
|
|
P 1
|
|
1 1.2750000 1.0000000
|
|
]}
|
|
|
|
When building the atomic basis set of a molecular system, the basis functions
|
|
are created by picking the data from the general basis set. This data structure
|
|
simplifies the creation of the atomic basis set.
|
|
*)
|
|
|
|
type primitive = private
|
|
{
|
|
exponent : float ;
|
|
coefficient: float ;
|
|
}
|
|
|
|
type general_contracted_shell = AngularMomentum.t * (primitive array)
|
|
|
|
type element_basis = Element.t * (general_contracted_shell array)
|
|
|
|
type t = element_basis list
|
|
|
|
|
|
exception No_shell
|
|
exception Malformed_shell of string
|
|
|
|
|
|
val read : string -> t
|
|
(** Reads a basis set file and return an association list where
|
|
the key is an {!Element.t} and the value is the parsed basis set.
|
|
*)
|
|
|
|
|
|
val combine : t list -> t
|
|
(** Combines the basis functions of each element among different basis sets.
|
|
Used to complement a basis with an auxiliary basis set.
|
|
*)
|
|
|
|
|
|
val read_many : string list -> t
|
|
(** Reads multiple basis set files and return an association list where
|
|
the key is an {!Element.t} and the value is the parsed basis set.
|
|
This function is usually used to add an auxiliary basis set.
|
|
*)
|
|
|
|
|
|
|
|
val read_element : in_channel -> element_basis option
|
|
(** Reads an element from the input channel [ic]. For example,
|
|
{[
|
|
HYDROGEN
|
|
S 3
|
|
1 13.0100000 0.0196850
|
|
2 1.9620000 0.1379770
|
|
3 0.4446000 0.4781480
|
|
S 1
|
|
1 0.1220000 1.0000000
|
|
P 1
|
|
1 0.7270000 1.0000000
|
|
|
|
}]
|
|
returns
|
|
{[
|
|
Some
|
|
(Element.H,
|
|
[(AngularMomentum.S,
|
|
[{exponent = 13.01; coefficient = 0.019685};
|
|
{exponent = 1.962; coefficient = 0.137977};
|
|
{exponent = 0.4446; coefficient = 0.478148}]);
|
|
(AngularMomentum.S, [{exponent = 0.122; coefficient = 1.}]);
|
|
(AngularMomentum.P, [{exponent = 0.727; coefficient = 1.}])])
|
|
]}
|
|
|
|
@raise Malformed_shell if the input is not well formed.
|
|
*)
|
|
|
|
|
|
val read_shell : in_channel -> general_contracted_shell option
|
|
(** Reads a shell from the input channel [ic]. For example,
|
|
{[
|
|
S 3
|
|
1 13.0100000 0.0196850
|
|
2 1.9620000 0.1379770
|
|
3 0.4446000 0.4781480
|
|
]}
|
|
returns
|
|
{[
|
|
Some
|
|
(AngularMomentum.S,
|
|
[{exponent = 13.01 ; coefficient = 0.019685};
|
|
{exponent = 1.962 ; coefficient = 0.137977};
|
|
{exponent = 0.4446; coefficient = 0.478148}])
|
|
]}
|
|
|
|
@raise Malformed_shell if the input is not well formed.
|
|
*)
|
|
|
|
|
|
val to_string : string * (general_contracted_shell array) -> string
|
|
(** Pretty-prints the basis set of an {Element.t}. *)
|
|
|
|
|