2020-10-02 23:35:56 +02:00
|
|
|
type t =
|
2020-10-19 18:33:02 +02:00
|
|
|
{ ao_basis : Basis_poly.t ;
|
2020-10-02 23:35:56 +02:00
|
|
|
cartesian : bool
|
|
|
|
}
|
2020-10-07 17:54:15 +02:00
|
|
|
|
2020-10-18 01:58:22 +02:00
|
|
|
type ao = Ao_dim.t
|
|
|
|
|
2021-01-04 09:19:35 +01:00
|
|
|
open Linear_algebra
|
|
|
|
open Common
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-04-24 19:01:42 +02:00
|
|
|
let not_implemented () =
|
|
|
|
Util.not_implemented "Only Gaussian is implemented"
|
|
|
|
|
2023-06-27 10:15:50 +02:00
|
|
|
|
2024-09-06 11:05:54 +02:00
|
|
|
let of_nuclei_and_basis_string ?(kind=`Gaussian) ?operators ?(cartesian=false)
|
|
|
|
~nuclei filename =
|
|
|
|
match kind with
|
|
|
|
| `Gaussian ->
|
|
|
|
let basis =
|
|
|
|
Gaussian.Basis.of_nuclei_and_basis_string ~nuclei filename
|
|
|
|
in
|
|
|
|
let ao_basis =
|
|
|
|
Basis_poly.Gaussian (Basis_gaussian.make ~basis ?operators ~cartesian nuclei )
|
|
|
|
in
|
|
|
|
{ ao_basis ; cartesian }
|
|
|
|
| _ -> not_implemented ()
|
|
|
|
|
|
|
|
|
2020-10-07 17:54:15 +02:00
|
|
|
let of_nuclei_and_basis_filename ?(kind=`Gaussian) ?operators ?(cartesian=false)
|
|
|
|
~nuclei filename =
|
|
|
|
match kind with
|
|
|
|
| `Gaussian ->
|
|
|
|
let basis =
|
2020-10-10 10:59:09 +02:00
|
|
|
Gaussian.Basis.of_nuclei_and_basis_filename ~nuclei filename
|
2020-10-07 17:54:15 +02:00
|
|
|
in
|
2023-04-24 19:01:42 +02:00
|
|
|
let ao_basis =
|
2020-10-19 18:33:02 +02:00
|
|
|
Basis_poly.Gaussian (Basis_gaussian.make ~basis ?operators ~cartesian nuclei )
|
2020-10-07 17:54:15 +02:00
|
|
|
in
|
|
|
|
{ ao_basis ; cartesian }
|
2023-04-24 19:01:42 +02:00
|
|
|
| _ -> not_implemented ()
|
2021-01-04 09:19:35 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
2020-10-07 17:54:15 +02:00
|
|
|
|
|
|
|
let ao_basis t = t.ao_basis
|
2023-04-24 19:01:42 +02:00
|
|
|
|
|
|
|
let size t =
|
2020-10-07 17:54:15 +02:00
|
|
|
match t.ao_basis with
|
2020-10-19 18:33:02 +02:00
|
|
|
| Basis_poly.Gaussian b -> Basis_gaussian.size b
|
2020-10-07 17:54:15 +02:00
|
|
|
| _ -> not_implemented ()
|
|
|
|
|
|
|
|
let overlap t =
|
|
|
|
begin
|
|
|
|
match t.ao_basis with
|
2020-10-19 18:33:02 +02:00
|
|
|
| Basis_poly.Gaussian b -> Basis_gaussian.overlap b
|
2020-10-07 17:54:15 +02:00
|
|
|
| _ -> not_implemented ()
|
|
|
|
end
|
|
|
|
|> Matrix.relabel
|
2023-04-24 19:01:42 +02:00
|
|
|
|
2020-10-07 17:54:15 +02:00
|
|
|
let multipole t =
|
|
|
|
begin
|
|
|
|
match t.ao_basis with
|
2020-10-19 18:33:02 +02:00
|
|
|
| Basis_poly.Gaussian b ->
|
|
|
|
let m = Basis_gaussian.multipole b in
|
|
|
|
fun s ->
|
|
|
|
Gaussian_integrals.Multipole.matrix m s
|
|
|
|
|> Matrix.relabel
|
2020-10-07 17:54:15 +02:00
|
|
|
| _ -> not_implemented ()
|
|
|
|
end
|
2023-04-24 19:01:42 +02:00
|
|
|
|
2020-10-07 17:54:15 +02:00
|
|
|
let ortho t =
|
|
|
|
begin
|
|
|
|
match t.ao_basis with
|
2020-10-19 18:33:02 +02:00
|
|
|
| Basis_poly.Gaussian b -> Basis_gaussian.ortho b
|
2020-10-07 17:54:15 +02:00
|
|
|
| _ -> not_implemented ()
|
|
|
|
end
|
|
|
|
|> Matrix.relabel
|
2023-04-24 19:01:42 +02:00
|
|
|
|
2020-10-07 17:54:15 +02:00
|
|
|
let eN_ints t =
|
|
|
|
begin
|
|
|
|
match t.ao_basis with
|
2020-10-19 18:33:02 +02:00
|
|
|
| Basis_poly.Gaussian b -> Basis_gaussian.eN_ints b
|
2020-10-07 17:54:15 +02:00
|
|
|
| _ -> not_implemented ()
|
|
|
|
end
|
|
|
|
|> Matrix.relabel
|
2023-04-24 19:01:42 +02:00
|
|
|
|
2020-10-07 17:54:15 +02:00
|
|
|
let kin_ints t =
|
|
|
|
begin
|
|
|
|
match t.ao_basis with
|
2020-10-19 18:33:02 +02:00
|
|
|
| Basis_poly.Gaussian b -> Basis_gaussian.kin_ints b
|
2020-10-07 17:54:15 +02:00
|
|
|
| _ -> not_implemented ()
|
|
|
|
end
|
|
|
|
|> Matrix.relabel
|
2023-04-24 19:01:42 +02:00
|
|
|
|
2020-10-07 17:54:15 +02:00
|
|
|
let ee_ints t =
|
|
|
|
begin
|
|
|
|
match t.ao_basis with
|
2020-10-19 18:33:02 +02:00
|
|
|
| Basis_poly.Gaussian b -> Basis_gaussian.ee_ints b
|
2020-10-07 17:54:15 +02:00
|
|
|
| _ -> not_implemented ()
|
|
|
|
end
|
|
|
|
|> Four_idx_storage.relabel
|
2023-04-24 19:01:42 +02:00
|
|
|
|
2020-10-07 17:54:15 +02:00
|
|
|
let ee_lr_ints t =
|
|
|
|
begin
|
|
|
|
match t.ao_basis with
|
2020-10-19 18:33:02 +02:00
|
|
|
| Basis_poly.Gaussian b -> Basis_gaussian.ee_lr_ints b
|
2020-10-07 17:54:15 +02:00
|
|
|
| _ -> not_implemented ()
|
|
|
|
end
|
|
|
|
|> Four_idx_storage.relabel
|
2023-04-24 19:01:42 +02:00
|
|
|
|
2020-10-07 17:54:15 +02:00
|
|
|
let f12_ints t =
|
|
|
|
begin
|
|
|
|
match t.ao_basis with
|
2020-10-19 18:33:02 +02:00
|
|
|
| Basis_poly.Gaussian b -> Basis_gaussian.f12_ints b
|
2020-10-07 17:54:15 +02:00
|
|
|
| _ -> not_implemented ()
|
|
|
|
end
|
|
|
|
|> Four_idx_storage.relabel
|
2023-04-24 19:01:42 +02:00
|
|
|
|
2020-10-07 17:54:15 +02:00
|
|
|
let f12_over_r12_ints t =
|
|
|
|
begin
|
|
|
|
match t.ao_basis with
|
2020-10-19 18:33:02 +02:00
|
|
|
| Basis_poly.Gaussian b -> Basis_gaussian.f12_over_r12_ints b
|
2020-10-07 17:54:15 +02:00
|
|
|
| _ -> not_implemented ()
|
|
|
|
end
|
|
|
|
|> Four_idx_storage.relabel
|
2023-04-24 19:01:42 +02:00
|
|
|
|
2020-10-07 17:54:15 +02:00
|
|
|
let cartesian t = t.cartesian
|
2023-04-24 19:01:42 +02:00
|
|
|
|
2020-10-07 17:54:15 +02:00
|
|
|
|
|
|
|
let values t point =
|
|
|
|
begin
|
|
|
|
match t.ao_basis with
|
2020-10-19 18:33:02 +02:00
|
|
|
| Basis_poly.Gaussian b -> Basis_gaussian.values b point
|
2020-10-07 17:54:15 +02:00
|
|
|
| _ -> not_implemented ()
|
|
|
|
end
|
|
|
|
|> Vector.relabel
|
2021-01-04 09:19:35 +01:00
|
|
|
|
2023-06-27 10:15:50 +02:00
|
|
|
|
2023-04-24 19:01:42 +02:00
|
|
|
(*
|
|
|
|
let of_trexio f =
|
|
|
|
|
|
|
|
match Trexio.read_basis_type f with
|
|
|
|
| "G"
|
|
|
|
| "Gaussian"
|
|
|
|
| "gaussian" ->
|
|
|
|
let basis =
|
|
|
|
Gaussian.Basis.of_trexio f
|
|
|
|
in
|
|
|
|
let ao_basis =
|
|
|
|
Basis_poly.Gaussian (Basis_gaussian.make ~basis ?operators ~cartesian nuclei )
|
|
|
|
in
|
|
|
|
{ ao_basis ; cartesian }
|
|
|
|
| _ -> not_implemented ()
|
|
|
|
|
|
|
|
|
2023-06-27 10:15:50 +02:00
|
|
|
|
2023-04-24 19:01:42 +02:00
|
|
|
let to_trexio f t =
|
|
|
|
|
|
|
|
match t.ao_basis with
|
|
|
|
| Basis_poly.Gaussian b -> Gaussian.Basis.to_trexio f (Basis_gaussian.basis b))
|
|
|
|
| _ -> not_implemented ()
|
|
|
|
|
|
|
|
*)
|
|
|
|
|
2023-06-27 10:15:50 +02:00
|
|
|
|
|
|
|
|
2021-01-04 09:19:35 +01:00
|
|
|
let pp ppf t =
|
2021-01-04 23:15:27 +01:00
|
|
|
begin
|
|
|
|
match t.ao_basis with
|
|
|
|
| Basis_poly.Gaussian b -> Basis_gaussian.pp ppf b
|
|
|
|
| _ -> not_implemented ()
|
|
|
|
end
|