2024-02-28 11:17:20 +01:00
|
|
|
(** Molecular orbital localization *)
|
2021-01-30 19:07:59 +01:00
|
|
|
|
|
|
|
open Linear_algebra
|
2024-02-28 11:17:20 +01:00
|
|
|
|
2021-01-30 19:07:59 +01:00
|
|
|
type localization_kind =
|
|
|
|
| Edmiston
|
|
|
|
| Boys
|
|
|
|
|
|
|
|
type mo = Mo_dim.t
|
|
|
|
type ao = Ao.Ao_dim.t
|
|
|
|
type loc
|
|
|
|
|
2024-02-28 11:17:20 +01:00
|
|
|
type localization_data
|
2021-01-30 19:07:59 +01:00
|
|
|
type t
|
|
|
|
|
|
|
|
|
2024-02-28 11:17:20 +01:00
|
|
|
(** Access *)
|
|
|
|
|
2021-01-30 19:07:59 +01:00
|
|
|
val kind : t -> localization_kind
|
2024-02-28 11:17:20 +01:00
|
|
|
(** Returns the kind of localized MOs *)
|
|
|
|
|
2021-01-30 19:07:59 +01:00
|
|
|
val simulation : t -> Simulation.t
|
2024-02-28 11:17:20 +01:00
|
|
|
(** Returns the simulation environment in which the MOs are localized *)
|
|
|
|
|
2021-01-30 19:07:59 +01:00
|
|
|
val selected_mos : t -> int list
|
2024-02-28 11:17:20 +01:00
|
|
|
(** List of indices of the orbitals involved in the localization *)
|
|
|
|
|
2021-01-30 19:07:59 +01:00
|
|
|
|
|
|
|
val kappa :
|
|
|
|
kind:localization_kind ->
|
|
|
|
Basis.t ->
|
|
|
|
( ao,loc) Matrix.t ->
|
|
|
|
(loc,loc) Matrix.t * float
|
2024-02-28 11:17:20 +01:00
|
|
|
(** Returns the $\kappa$ antisymmetric matrix used for the rotation matrix and
|
|
|
|
* the value of the localization function
|
|
|
|
*)
|
2021-01-30 19:07:59 +01:00
|
|
|
|
|
|
|
val make :
|
|
|
|
kind:localization_kind ->
|
2024-02-28 11:17:20 +01:00
|
|
|
?max_iter:int ->
|
|
|
|
?convergence:float ->
|
2021-01-30 19:07:59 +01:00
|
|
|
Basis.t ->
|
|
|
|
int list ->
|
|
|
|
t
|
2024-02-28 11:17:20 +01:00
|
|
|
(** Performs the orbital localization *)
|
2021-01-30 19:07:59 +01:00
|
|
|
|
|
|
|
val to_basis : t -> Basis.t
|
|
|
|
|
|
|
|
|
2024-02-28 11:17:20 +01:00
|
|
|
(** Printers *)
|
2021-01-30 19:07:59 +01:00
|
|
|
|
2024-02-28 11:17:20 +01:00
|
|
|
val pp : Format.formatter -> t -> unit
|