10
1
mirror of https://gitlab.com/scemama/QCaml.git synced 2024-11-18 20:12:26 +01:00
QCaml/simulation/lib/simulation.ml

76 lines
2.1 KiB
OCaml
Raw Normal View History

2023-06-16 18:27:23 +02:00
(* [[file:../simulation.org::*Simulation][Simulation:2]] *)
2020-10-09 10:02:18 +02:00
open Common
open Particles
open Operators
2021-01-01 11:46:11 +01:00
(* Simulation:2 ends here *)
2023-06-16 18:27:23 +02:00
(* [[file:../simulation.org::*Type][Type:2]] *)
2020-10-09 10:02:18 +02:00
type t = {
charge : Charge.t;
electrons : Electrons.t;
nuclei : Nuclei.t;
ao_basis : Ao.Basis.t;
operators : Operator.t list;
}
2021-01-01 11:46:11 +01:00
(* Type:2 ends here *)
2020-10-09 10:02:18 +02:00
2021-01-01 11:46:11 +01:00
(* | ~nuclei~ | Nuclear coordinates used in the smiulation |
* | ~charge~ | Total charge (electrons + nuclei) |
* | ~electrons~ | Electrons used in the simulation |
* | ~ao_basis~ | Atomic basis set |
* | ~nuclear_repulsion~ | Nuclear repulsion energy |
* | ~operators~ | List of extra operators (range-separation, f12, etc) | *)
2023-06-16 18:27:23 +02:00
(* [[file:../simulation.org::*Access][Access:2]] *)
2020-10-09 10:02:18 +02:00
let nuclei t = t.nuclei
let charge t = t.charge
let electrons t = t.electrons
let ao_basis t = t.ao_basis
let nuclear_repulsion t = Nuclei.repulsion @@ nuclei t
let operators t = t.operators
2021-01-01 11:46:11 +01:00
(* Access:2 ends here *)
2020-10-09 10:02:18 +02:00
2021-01-01 11:46:11 +01:00
(* Defaults:
* - multiplicity : ~1~
* - charge : ~0~
* - operators : ~[]~ *)
2023-06-16 18:27:23 +02:00
(* [[file:../simulation.org::*Creation][Creation:2]] *)
2021-01-01 11:46:11 +01:00
let make
?(multiplicity=1)
?(charge=0)
?(operators=[])
~nuclei
ao_basis
2020-10-09 10:02:18 +02:00
=
(* Tune Garbage Collector *)
let gc = Gc.get () in
Gc.set { gc with space_overhead = 1000 };
let electrons =
Electrons.of_atoms ~multiplicity ~charge nuclei
in
let charge =
Charge.(Nuclei.charge nuclei + Electrons.charge electrons)
in
2021-01-01 11:46:11 +01:00
{ charge ; nuclei ; electrons ; ao_basis ; operators}
(* Creation:2 ends here *)
2020-10-09 10:02:18 +02:00
2023-06-16 18:27:23 +02:00
(* [[file:../simulation.org::*Printers][Printers:2]] *)
2021-01-01 11:46:11 +01:00
let pp ppf t =
let formula = Nuclei.formula t.nuclei in
let n_aos = Ao.Basis.size t.ao_basis in
let n_ops = List.length t.operators in
Format.fprintf ppf "@[@[%s@], @[%a@], @[%d AOs@], @[%d operators@]@]"
formula Electrons.pp t.electrons n_aos n_ops
(* Printers:2 ends here *)