10
1
mirror of https://gitlab.com/scemama/QCaml.git synced 2024-11-07 06:33:39 +01:00
QCaml/ao/test/ao_basis_gaussian.ml

100 lines
2.4 KiB
OCaml
Raw Normal View History

2020-10-03 15:46:21 +02:00
open Alcotest
2020-10-09 09:47:57 +02:00
open Gaussian_integrals
open Gaussian_basis
open Particles
open Operators
open Linear_algebra
open Ao.Basis_gaussian
2020-10-03 15:46:21 +02:00
2020-10-09 09:47:57 +02:00
let wd = Common.Qcaml.root ^ Filename.dir_sep ^ "test"
2020-10-03 15:46:21 +02:00
let make_tests name t =
let check_matrix title a r =
let ax =
Matrix.as_vec_inplace a
|> Vector.to_bigarray_inplace
in
Matrix.as_vec_inplace r
|> Vector.iteri (fun i x ->
let message =
Printf.sprintf "%s line %d" title i
in
check (float 1.e-10) message ax.{i} x
)
in
let check_eri a r =
let f { Eri.i_r1 ; j_r2 ; k_r1 ; l_r2 ; value } =
(i_r1, (j_r2, (k_r1, (l_r2, value))))
in
let a = Eri.to_list a |> List.rev_map f in
let r = Eri.to_list r |> List.rev_map f in
check (list (pair int (pair int (pair int (pair int (float 1.e-10)))))) "ERI" a r
in
let test_overlap () =
let reference =
Matrix.sym_matrix_of_file (wd ^ Filename.dir_sep ^ name ^ "_overlap.ref")
in
2020-10-07 17:54:15 +02:00
check_matrix "Overlap" (overlap t) reference
2020-10-03 15:46:21 +02:00
in
let test_eN_ints () =
let reference =
Matrix.sym_matrix_of_file (wd ^ Filename.dir_sep ^ name ^ "_nuc.ref")
in
2020-10-07 17:54:15 +02:00
check_matrix "eN_ints" (eN_ints t) reference
2020-10-03 15:46:21 +02:00
in
let test_kin_ints () =
let reference =
Matrix.sym_matrix_of_file (wd ^ Filename.dir_sep ^ name ^ "_kin.ref")
in
2020-10-07 17:54:15 +02:00
check_matrix "kin_ints" (kin_ints t) reference
2020-10-03 15:46:21 +02:00
in
let test_ee_ints () =
let reference =
2020-10-07 17:54:15 +02:00
Eri.of_file (wd ^ Filename.dir_sep ^ name ^ "_eri.ref") ~sparsity:`Dense ~size:(size t)
2020-10-03 15:46:21 +02:00
in
2020-10-07 17:54:15 +02:00
check_eri (ee_ints t) reference
2020-10-03 15:46:21 +02:00
;
in
let test_ee_lr_ints () =
let reference =
Eri_long_range.of_file (wd ^ Filename.dir_sep ^ name ^ "_eri_lr.ref") ~sparsity:`Dense
2020-10-07 17:54:15 +02:00
~size:(size t)
2020-10-03 15:46:21 +02:00
in
2020-10-07 17:54:15 +02:00
check_eri (ee_lr_ints t) reference
2020-10-03 15:46:21 +02:00
in
[
"Overlap", `Quick, test_overlap;
"eN_ints", `Quick, test_eN_ints;
"kin_ints", `Quick, test_kin_ints;
"ee_ints", `Quick, test_ee_ints;
"ee_lr_ints", `Quick, test_ee_lr_ints;
]
let tests =
List.concat [
let nuclei =
wd ^ Filename.dir_sep ^ "water.xyz"
|> Nuclei.of_xyz_file
in
let basis =
wd ^ Filename.dir_sep ^ "cc-pvdz"
|> Basis.of_nuclei_and_basis_filename ~nuclei
in
let rs = 0.5 in
let operators = [ Operator.of_range_separation rs ] in
let ao_basis =
2020-10-09 09:47:57 +02:00
Ao.Basis_gaussian.make ~basis ~operators nuclei
2020-10-03 15:46:21 +02:00
in
make_tests "water" ao_basis ;
]