mirror of
https://github.com/LCPQ/quantum_package
synced 2024-08-24 21:41:46 +02:00
Auto-generation of libint required files
This commit is contained in:
parent
064998dba7
commit
d6b970e8a7
@ -5,7 +5,7 @@ QP_ROOT=$PWD
|
|||||||
cd -
|
cd -
|
||||||
|
|
||||||
# Normal installation
|
# Normal installation
|
||||||
PACKAGES="core cryptokit ocamlfind sexplib ZMQ"
|
PACKAGES="core cryptokit ocamlfind sexplib pa_sexp_conv ZMQ"
|
||||||
|
|
||||||
# Needed for ZeroMQ
|
# Needed for ZeroMQ
|
||||||
export C_INCLUDE_PATH="${QP_ROOT}"/lib:"${C_INCLUDE_PATH}"
|
export C_INCLUDE_PATH="${QP_ROOT}"/lib:"${C_INCLUDE_PATH}"
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
open Core.Std;;
|
open Core.Std
|
||||||
|
|
||||||
exception AtomError of string
|
exception AtomError of string
|
||||||
|
|
||||||
@ -27,12 +27,18 @@ let of_string ~units s =
|
|||||||
coord = Point3d.of_string ~units (String.concat [x; y; z] ~sep:" ")
|
coord = Point3d.of_string ~units (String.concat [x; y; z] ~sep:" ")
|
||||||
}
|
}
|
||||||
| _ -> raise (AtomError s)
|
| _ -> raise (AtomError s)
|
||||||
;;
|
|
||||||
|
|
||||||
let to_string ~units a =
|
let to_string ~units a =
|
||||||
[ Element.to_string a.element ;
|
[ Element.to_string a.element ;
|
||||||
Charge.to_string a.charge ;
|
Charge.to_string a.charge ;
|
||||||
Point3d.to_string ~units a.coord ]
|
Point3d.to_string ~units a.coord ]
|
||||||
|> String.concat ~sep:" "
|
|> String.concat ~sep:" "
|
||||||
;;
|
|
||||||
|
|
||||||
|
let to_xyz a =
|
||||||
|
Printf.sprintf "%-3s %s"
|
||||||
|
(Element.to_string a.element)
|
||||||
|
(Point3d.to_string ~units:Units.Angstrom a.coord)
|
||||||
|
|
||||||
|
|
||||||
|
@ -7,3 +7,4 @@ val sexp_of_t : t -> Sexplib.Sexp.t
|
|||||||
|
|
||||||
val of_string : units:Units.units -> string -> t
|
val of_string : units:Units.units -> string -> t
|
||||||
val to_string : units:Units.units -> t -> string
|
val to_string : units:Units.units -> t -> string
|
||||||
|
val to_xyz : t -> string
|
||||||
|
@ -35,11 +35,11 @@ let read_element in_channel at_number element =
|
|||||||
read in_channel at_number
|
read in_channel at_number
|
||||||
|
|
||||||
|
|
||||||
let to_string b =
|
|
||||||
|
let to_string_general ~fmt ~atom_sep b =
|
||||||
let new_nucleus n =
|
let new_nucleus n =
|
||||||
Printf.sprintf "Atom %d" n
|
Printf.sprintf "Atom %d" n
|
||||||
in
|
in
|
||||||
|
|
||||||
let rec do_work accu current_nucleus = function
|
let rec do_work accu current_nucleus = function
|
||||||
| [] -> List.rev accu
|
| [] -> List.rev accu
|
||||||
| (g,n)::tail ->
|
| (g,n)::tail ->
|
||||||
@ -47,15 +47,29 @@ let to_string b =
|
|||||||
in
|
in
|
||||||
let accu =
|
let accu =
|
||||||
if (n <> current_nucleus) then
|
if (n <> current_nucleus) then
|
||||||
(new_nucleus n)::""::accu
|
(new_nucleus n)::atom_sep::accu
|
||||||
else
|
else
|
||||||
accu
|
accu
|
||||||
in
|
in
|
||||||
do_work ((Gto.to_string g)::accu) n tail
|
do_work ((Gto.to_string ~fmt g)::accu) n tail
|
||||||
in
|
in
|
||||||
do_work [new_nucleus 1] 1 b
|
do_work [new_nucleus 1] 1 b
|
||||||
|> String.concat ~sep:"\n"
|
|> String.concat ~sep:"\n"
|
||||||
|
|
||||||
|
let to_string_gamess =
|
||||||
|
to_string_general ~fmt:Gto.Gamess ~atom_sep:""
|
||||||
|
|
||||||
|
let to_string_gaussian b =
|
||||||
|
String.concat ~sep:"\n" [ "****" ;
|
||||||
|
to_string_general ~fmt:Gto.Gaussian ~atom_sep:"****" b ;
|
||||||
|
"****"
|
||||||
|
]
|
||||||
|
|
||||||
|
let to_string ?(fmt=Gto.Gamess) =
|
||||||
|
match fmt with
|
||||||
|
| Gto.Gamess -> to_string_gamess
|
||||||
|
| Gto.Gaussian -> to_string_gaussian
|
||||||
|
|
||||||
|
|
||||||
include To_md5
|
include To_md5
|
||||||
let to_md5 = to_md5 sexp_of_t
|
let to_md5 = to_md5 sexp_of_t
|
||||||
|
@ -14,7 +14,7 @@ val read_element :
|
|||||||
in_channel -> Nucl_number.t -> Element.t -> (Gto.t * Nucl_number.t) list
|
in_channel -> Nucl_number.t -> Element.t -> (Gto.t * Nucl_number.t) list
|
||||||
|
|
||||||
(** Convert the basis to a string *)
|
(** Convert the basis to a string *)
|
||||||
val to_string : (Gto.t * Nucl_number.t) list -> string
|
val to_string : ?fmt:Gto.fmt -> (Gto.t * Nucl_number.t) list -> string
|
||||||
|
|
||||||
(** Convert the basis to an MD5 hash *)
|
(** Convert the basis to an MD5 hash *)
|
||||||
val to_md5 : (Gto.t * Nucl_number.t) list -> MD5.t
|
val to_md5 : (Gto.t * Nucl_number.t) list -> MD5.t
|
||||||
|
35
ocaml/Gto.ml
35
ocaml/Gto.ml
@ -4,6 +4,10 @@ open Qptypes
|
|||||||
exception GTO_Read_Failure of string
|
exception GTO_Read_Failure of string
|
||||||
exception End_Of_Basis
|
exception End_Of_Basis
|
||||||
|
|
||||||
|
type fmt =
|
||||||
|
| Gamess
|
||||||
|
| Gaussian
|
||||||
|
|
||||||
type t =
|
type t =
|
||||||
{ sym : Symmetry.t ;
|
{ sym : Symmetry.t ;
|
||||||
lc : ((Primitive.t * AO_coef.t) list)
|
lc : ((Primitive.t * AO_coef.t) list)
|
||||||
@ -68,8 +72,8 @@ let read_one in_channel =
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
(** Transform the gto to a string *)
|
(** Write the GTO in Gamess format *)
|
||||||
let to_string { sym = sym ; lc = lc } =
|
let to_string_gamess { sym = sym ; lc = lc } =
|
||||||
let result =
|
let result =
|
||||||
Printf.sprintf "%s %3d" (Symmetry.to_string sym) (List.length lc)
|
Printf.sprintf "%s %3d" (Symmetry.to_string sym) (List.length lc)
|
||||||
in
|
in
|
||||||
@ -88,3 +92,30 @@ let to_string { sym = sym ; lc = lc } =
|
|||||||
|> String.concat ~sep:"\n"
|
|> String.concat ~sep:"\n"
|
||||||
|
|
||||||
|
|
||||||
|
(** Write the GTO in Gaussian format *)
|
||||||
|
let to_string_gaussian { sym = sym ; lc = lc } =
|
||||||
|
let result =
|
||||||
|
Printf.sprintf "%s %3d 1.00" (Symmetry.to_string sym) (List.length lc)
|
||||||
|
in
|
||||||
|
let rec do_work accu i = function
|
||||||
|
| [] -> List.rev accu
|
||||||
|
| (p,c)::tail ->
|
||||||
|
let p = AO_expo.to_float p.Primitive.expo
|
||||||
|
and c = AO_coef.to_float c
|
||||||
|
in
|
||||||
|
let result =
|
||||||
|
Printf.sprintf "%15.7f %15.7f" p c
|
||||||
|
in
|
||||||
|
do_work (result::accu) (i+1) tail
|
||||||
|
in
|
||||||
|
(do_work [result] 1 lc)
|
||||||
|
|> String.concat ~sep:"\n"
|
||||||
|
|
||||||
|
|
||||||
|
(** Transform the gto to a string *)
|
||||||
|
let to_string ?(fmt=Gamess) =
|
||||||
|
match fmt with
|
||||||
|
| Gamess -> to_string_gamess
|
||||||
|
| Gaussian -> to_string_gaussian
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,5 +1,9 @@
|
|||||||
exception GTO_Read_Failure of string
|
exception GTO_Read_Failure of string
|
||||||
exception End_Of_Basis
|
exception End_Of_Basis
|
||||||
|
type fmt =
|
||||||
|
| Gamess
|
||||||
|
| Gaussian
|
||||||
|
|
||||||
type t =
|
type t =
|
||||||
{ sym : Symmetry.t ;
|
{ sym : Symmetry.t ;
|
||||||
lc : (Primitive.t * Qptypes.AO_coef.t) list;
|
lc : (Primitive.t * Qptypes.AO_coef.t) list;
|
||||||
@ -13,4 +17,4 @@ val of_prim_coef_list :
|
|||||||
val read_one : in_channel -> t
|
val read_one : in_channel -> t
|
||||||
|
|
||||||
(** Convert to string for printing *)
|
(** Convert to string for printing *)
|
||||||
val to_string : t -> string
|
val to_string : ?fmt:fmt -> t -> string
|
||||||
|
@ -17,6 +17,7 @@ module Ao_basis : sig
|
|||||||
;;
|
;;
|
||||||
val read : unit -> t option
|
val read : unit -> t option
|
||||||
val to_string : t -> string
|
val to_string : t -> string
|
||||||
|
val to_basis : t -> Basis.t
|
||||||
val write : t -> unit
|
val write : t -> unit
|
||||||
val to_md5 : t -> MD5.t
|
val to_md5 : t -> MD5.t
|
||||||
val to_rst : t -> Rst_string.t
|
val to_rst : t -> Rst_string.t
|
||||||
|
@ -13,6 +13,7 @@ module Nuclei : sig
|
|||||||
val read : unit -> t option
|
val read : unit -> t option
|
||||||
val write : t -> unit
|
val write : t -> unit
|
||||||
val to_string : t -> string
|
val to_string : t -> string
|
||||||
|
val to_atom_list : t -> Atom.t list
|
||||||
val to_rst : t -> Rst_string.t
|
val to_rst : t -> Rst_string.t
|
||||||
val of_rst : Rst_string.t -> t option
|
val of_rst : Rst_string.t -> t option
|
||||||
end = struct
|
end = struct
|
||||||
@ -134,6 +135,22 @@ end = struct
|
|||||||
;;
|
;;
|
||||||
|
|
||||||
|
|
||||||
|
let to_atom_list b =
|
||||||
|
let rec loop accu (coord, charge, label) = function
|
||||||
|
| -1 -> accu
|
||||||
|
| i ->
|
||||||
|
let atom =
|
||||||
|
{ Atom.element = label.(i) ;
|
||||||
|
Atom.charge = charge.(i) ;
|
||||||
|
Atom.coord = coord.(i) ;
|
||||||
|
}
|
||||||
|
in
|
||||||
|
loop (atom::accu) (coord, charge, label) (i-1)
|
||||||
|
in
|
||||||
|
loop [] (b.nucl_coord, b.nucl_charge, b.nucl_label)
|
||||||
|
( (Nucl_number.to_int b.nucl_num) - 1)
|
||||||
|
;;
|
||||||
|
|
||||||
let to_string b =
|
let to_string b =
|
||||||
Printf.sprintf "
|
Printf.sprintf "
|
||||||
nucl_num = %s
|
nucl_num = %s
|
||||||
|
85
ocaml/Libint.ml
Normal file
85
ocaml/Libint.ml
Normal file
@ -0,0 +1,85 @@
|
|||||||
|
open Core.Std
|
||||||
|
open Qptypes
|
||||||
|
|
||||||
|
let molecule = lazy (
|
||||||
|
let atom_list =
|
||||||
|
match Input.Nuclei.read () with
|
||||||
|
| Some data -> Input.Nuclei.to_atom_list data
|
||||||
|
| None -> failwith "No coordinate found"
|
||||||
|
and data =
|
||||||
|
match Input.Electrons.read () with
|
||||||
|
| Some data -> data
|
||||||
|
| None -> failwith "No electrons found"
|
||||||
|
in
|
||||||
|
{ Molecule.nuclei = atom_list;
|
||||||
|
Molecule.elec_alpha = data.Input.Electrons.elec_alpha_num;
|
||||||
|
Molecule.elec_beta = data.Input.Electrons.elec_beta_num
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
let write_xyz_file libint_dir =
|
||||||
|
assert (Sys.is_directory_exn libint_dir);
|
||||||
|
let filename =
|
||||||
|
Filename.concat libint_dir "xyz"
|
||||||
|
and molecule =
|
||||||
|
Lazy.force molecule
|
||||||
|
in
|
||||||
|
Out_channel.with_file filename ~f:(fun oc ->
|
||||||
|
Molecule.to_xyz molecule
|
||||||
|
|> Out_channel.output_string oc
|
||||||
|
)
|
||||||
|
|
||||||
|
let write_basis_file libint_dir =
|
||||||
|
assert (Sys.is_directory_exn libint_dir);
|
||||||
|
let filename =
|
||||||
|
Filename.concat libint_dir "basis.g94"
|
||||||
|
and molecule =
|
||||||
|
Lazy.force molecule
|
||||||
|
in
|
||||||
|
let text =
|
||||||
|
let rec substitute accu i = function
|
||||||
|
| ele :: tail ->
|
||||||
|
let pattern =
|
||||||
|
Printf.sprintf "Atom %d" i
|
||||||
|
in
|
||||||
|
let new_string =
|
||||||
|
String.substr_replace_first accu ~pattern ~with_:(Printf.sprintf "%s 0" ele)
|
||||||
|
in
|
||||||
|
substitute new_string (i+1) tail
|
||||||
|
| [] -> accu
|
||||||
|
in
|
||||||
|
let accu =
|
||||||
|
let b =
|
||||||
|
match Input.Ao_basis.read () with
|
||||||
|
| Some data -> Input.Ao_basis.to_basis data
|
||||||
|
| None -> failwith "No AO basis"
|
||||||
|
in
|
||||||
|
Basis.to_string ~fmt:Gto.Gaussian b
|
||||||
|
and atom_names =
|
||||||
|
List.map molecule.Molecule.nuclei ~f:(fun x -> Element.to_string x.Atom.element)
|
||||||
|
in
|
||||||
|
substitute accu 1 atom_names
|
||||||
|
in
|
||||||
|
Out_channel.with_file filename ~f:(fun oc ->
|
||||||
|
Out_channel.output_string oc text
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
let write_files ezfio_filename =
|
||||||
|
assert (Sys.is_directory_exn ezfio_filename);
|
||||||
|
|
||||||
|
let libint_dir =
|
||||||
|
Filename.concat ezfio_filename "libint"
|
||||||
|
in
|
||||||
|
|
||||||
|
let () =
|
||||||
|
match Sys.is_directory libint_dir with
|
||||||
|
| `Yes -> ()
|
||||||
|
| `No -> Unix.mkdir libint_dir
|
||||||
|
| `Unknown -> failwith ("Unable to tell if "^libint_dir^" exists.")
|
||||||
|
in
|
||||||
|
|
||||||
|
write_xyz_file libint_dir;
|
||||||
|
write_basis_file libint_dir
|
||||||
|
|
||||||
|
|
@ -85,7 +85,7 @@ let name m =
|
|||||||
String.concat (result)
|
String.concat (result)
|
||||||
|
|
||||||
|
|
||||||
let to_string m =
|
let to_string_general ~f m =
|
||||||
let { nuclei ; elec_alpha ; elec_beta } = m
|
let { nuclei ; elec_alpha ; elec_beta } = m
|
||||||
in
|
in
|
||||||
let n =
|
let n =
|
||||||
@ -94,10 +94,15 @@ let to_string m =
|
|||||||
let title =
|
let title =
|
||||||
name m
|
name m
|
||||||
in
|
in
|
||||||
[ Int.to_string n ; title ] @
|
[ Int.to_string n ; title ] @ (List.map ~f nuclei)
|
||||||
(List.map ~f:(fun x -> Atom.to_string Units.Angstrom x) nuclei)
|
|
||||||
|> String.concat ~sep:"\n"
|
|> String.concat ~sep:"\n"
|
||||||
|
|
||||||
|
let to_string =
|
||||||
|
to_string_general ~f:(fun x -> Atom.to_string Units.Angstrom x)
|
||||||
|
|
||||||
|
let to_xyz =
|
||||||
|
to_string_general ~f:Atom.to_xyz
|
||||||
|
|
||||||
|
|
||||||
let of_xyz_string
|
let of_xyz_string
|
||||||
?(charge=(Charge.of_int 0)) ?(multiplicity=(Multiplicity.of_int 1))
|
?(charge=(Charge.of_int 0)) ?(multiplicity=(Multiplicity.of_int 1))
|
||||||
|
@ -20,6 +20,7 @@ val name : t -> string
|
|||||||
|
|
||||||
(** Conversion for printing *)
|
(** Conversion for printing *)
|
||||||
val to_string : t -> string
|
val to_string : t -> string
|
||||||
|
val to_xyz : t -> string
|
||||||
|
|
||||||
|
|
||||||
(** Creates a molecule from an xyz file *)
|
(** Creates a molecule from an xyz file *)
|
||||||
|
84
ocaml/TaskServer.mli
Normal file
84
ocaml/TaskServer.mli
Normal file
@ -0,0 +1,84 @@
|
|||||||
|
type t =
|
||||||
|
{
|
||||||
|
queue : Queuing_system.t ;
|
||||||
|
state : Message.State.t option ;
|
||||||
|
address_tcp : Address.Tcp.t option ;
|
||||||
|
address_inproc : Address.Inproc.t option ;
|
||||||
|
psi : Message.Psi.t option;
|
||||||
|
progress_bar : Progress_bar.t option ;
|
||||||
|
running : bool;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
(** {1} Debugging *)
|
||||||
|
|
||||||
|
(** Fetch the QP_TASK_DEBUG environment variable *)
|
||||||
|
val debug_env : bool
|
||||||
|
|
||||||
|
(** Print a debug message *)
|
||||||
|
val debug : string -> unit
|
||||||
|
|
||||||
|
(** {1} ZMQ *)
|
||||||
|
|
||||||
|
(** ZeroMQ context *)
|
||||||
|
val zmq_context : ZMQ.Context.t
|
||||||
|
|
||||||
|
(** Bind a ZMQ socket *)
|
||||||
|
val bind_socket :
|
||||||
|
socket_type:string -> socket:'a ZMQ.Socket.t -> address:string -> unit
|
||||||
|
|
||||||
|
(** Name of the host on which the server runs *)
|
||||||
|
val hostname : string lazy_t
|
||||||
|
|
||||||
|
(** IP address of the current host *)
|
||||||
|
val ip_address : string lazy_t
|
||||||
|
|
||||||
|
(** Standard messages *)
|
||||||
|
val reply_ok : [> `Req ] ZMQ.Socket.t -> unit
|
||||||
|
val reply_wrong_state : [> `Req ] ZMQ.Socket.t -> unit
|
||||||
|
|
||||||
|
(** Stop server *)
|
||||||
|
val stop : port:int -> unit
|
||||||
|
|
||||||
|
(** {1} Server functions *)
|
||||||
|
|
||||||
|
(** Create a new job *)
|
||||||
|
val new_job : Message.Newjob_msg.t -> t -> [> `Req ] ZMQ.Socket.t -> t
|
||||||
|
|
||||||
|
(** Finish a running job *)
|
||||||
|
val end_job : Message.Endjob_msg.t -> t -> [> `Req ] ZMQ.Socket.t -> t
|
||||||
|
|
||||||
|
(** Connect a client *)
|
||||||
|
val connect: Message.Connect_msg.t -> t -> [> `Req ] ZMQ.Socket.t -> t
|
||||||
|
|
||||||
|
(** Disconnect a client *)
|
||||||
|
val disconnect: Message.Disconnect_msg.t -> t -> [> `Req ] ZMQ.Socket.t -> t
|
||||||
|
|
||||||
|
(** Add a task to the pool *)
|
||||||
|
val add_task: Message.AddTask_msg.t -> t -> [> `Req ] ZMQ.Socket.t -> t
|
||||||
|
|
||||||
|
(** Mark the task as done by the client *)
|
||||||
|
val task_done: Message.TaskDone_msg.t -> t -> [> `Req ] ZMQ.Socket.t -> t
|
||||||
|
|
||||||
|
(** Delete a task when it has been pulled by the collector *)
|
||||||
|
val del_task: Message.DelTask_msg.t -> t -> [> `Req ] ZMQ.Socket.t -> t
|
||||||
|
|
||||||
|
(** The client get a new task to execute *)
|
||||||
|
val get_task: Message.GetTask_msg.t -> t -> [> `Req ] ZMQ.Socket.t -> t
|
||||||
|
|
||||||
|
(** Terminate server *)
|
||||||
|
val terminate : t -> [> `Req ] ZMQ.Socket.t -> t
|
||||||
|
|
||||||
|
(** Put a wave function in the task server *)
|
||||||
|
val put_psi :
|
||||||
|
Message.PutPsi_msg.t -> string list -> t -> [> `Req ] ZMQ.Socket.t -> t
|
||||||
|
|
||||||
|
(** Get the wave function stored in the task server *)
|
||||||
|
val get_psi : Message.GetPsi_msg.t -> t -> [> `Req ] ZMQ.Socket.t -> t
|
||||||
|
|
||||||
|
(** Reply an Error message *)
|
||||||
|
val error : string -> t -> [> `Req ] ZMQ.Socket.t -> t
|
||||||
|
|
||||||
|
(** Run server *)
|
||||||
|
val run : port:int -> unit
|
||||||
|
|
@ -1,3 +1,3 @@
|
|||||||
true: package(core,sexplib.syntax,cryptokit,ZMQ)
|
true: package(core,sexplib,pa_sexp_conv,cryptokit,ZMQ)
|
||||||
true: thread
|
true: thread
|
||||||
false: profile
|
false: profile
|
||||||
|
@ -1,20 +1,10 @@
|
|||||||
program debug_libint
|
program debug_libint
|
||||||
use libint_module
|
|
||||||
|
|
||||||
implicit none
|
implicit none
|
||||||
double precision :: ao_bielec_integral
|
double precision :: ao_bielec_integral
|
||||||
|
|
||||||
integer, allocatable :: s2bf(:)
|
|
||||||
double precision, allocatable :: buffer_int(:)
|
double precision, allocatable :: buffer_int(:)
|
||||||
|
|
||||||
call init_libint(trim(ezfio_filename)//char(0))
|
|
||||||
|
|
||||||
integer :: nb_shell_f
|
|
||||||
nb_shell_f = get_nb_shell()
|
|
||||||
|
|
||||||
allocate(s2bf(2*nb_shell_f))
|
|
||||||
call map_shell_to_basis_function_interval(2*nb_shell_f,s2bf)
|
|
||||||
|
|
||||||
integer :: s1, s2,s3,s4
|
integer :: s1, s2,s3,s4
|
||||||
integer :: bf1,bf2,bf3,bf4
|
integer :: bf1,bf2,bf3,bf4
|
||||||
integer :: bf1_begin,bf2_begin,bf3_begin,bf4_begin
|
integer :: bf1_begin,bf2_begin,bf3_begin,bf4_begin
|
||||||
@ -26,30 +16,30 @@
|
|||||||
! Loop over the shell !
|
! Loop over the shell !
|
||||||
! =================== !
|
! =================== !
|
||||||
|
|
||||||
do s1 = 1, nb_shell_f
|
do s1 = 1, shell_num
|
||||||
|
|
||||||
print*, s1, "/", nb_shell_f
|
print*, s1, "/", shell_num
|
||||||
|
|
||||||
bf1_begin = s2bf(2*s1-1)
|
bf1_begin = shell_idx(1,s1)
|
||||||
bf1_end = s2bf(2*s1)
|
bf1_end = shell_idx(2,s1)
|
||||||
n1 = 1 + bf1_end - bf1_begin
|
n1 = 1 + bf1_end - bf1_begin
|
||||||
|
|
||||||
do s2 = 1, nb_shell_f
|
do s2 = 1, shell_num
|
||||||
|
|
||||||
bf2_begin = s2bf(2*s2-1)
|
bf2_begin = shell_idx(1,s2)
|
||||||
bf2_end = s2bf(2*s2)
|
bf2_end = shell_idx(2,s2)
|
||||||
n2 = 1 + bf2_end - bf2_begin
|
n2 = 1 + bf2_end - bf2_begin
|
||||||
|
|
||||||
do s3 = 1, nb_shell_f
|
do s3 = 1, shell_num
|
||||||
|
|
||||||
bf3_begin = s2bf(2*s3-1)
|
bf3_begin = shell_idx(1,s3)
|
||||||
bf3_end = s2bf(2*s3)
|
bf3_end = shell_idx(2,s3)
|
||||||
n3 = 1 + bf3_end - bf3_begin
|
n3 = 1 + bf3_end - bf3_begin
|
||||||
|
|
||||||
do s4 = 1, nb_shell_f
|
do s4 = 1, shell_num
|
||||||
|
|
||||||
bf4_begin = s2bf(2*s4-1)
|
bf4_begin = shell_idx(1,s4)
|
||||||
bf4_end = s2bf(2*s4)
|
bf4_end = shell_idx(2,s4)
|
||||||
n4 = 1 + bf4_end - bf4_begin
|
n4 = 1 + bf4_end - bf4_begin
|
||||||
|
|
||||||
! ========================== !
|
! ========================== !
|
||||||
@ -93,19 +83,19 @@
|
|||||||
libint = buffer_int(f1234) * norm
|
libint = buffer_int(f1234) * norm
|
||||||
|
|
||||||
!Verify with the manu's one
|
!Verify with the manu's one
|
||||||
! ref = ao_bielec_integral(bf1,bf2,bf3,bf4)
|
ref = ao_bielec_integral(bf1,bf2,bf3,bf4)
|
||||||
!
|
|
||||||
! if ( (ABS(ABS(ref) - ABS(libint)).GE.1e-6) ) THEN
|
if ( (ABS(ABS(ref) - ABS(libint)).GE.1e-6) ) THEN
|
||||||
!
|
|
||||||
! print*, bf1,bf2,bf3,bf4
|
print*, bf1,bf2,bf3,bf4
|
||||||
! print*,"r", ref
|
print*,"r", ref
|
||||||
! print*,"l", libint
|
print*,"l", libint
|
||||||
! print*,"r/l", ref/libint
|
print*,"r/l", ref/libint
|
||||||
! print*,"l/r", libint/ref
|
print*,"l/r", libint/ref
|
||||||
! print*,"n", norm
|
print*,"n", norm
|
||||||
!
|
|
||||||
! call exit(1)
|
call exit(1)
|
||||||
! end if
|
end if
|
||||||
|
|
||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
@ -121,4 +111,4 @@
|
|||||||
enddo
|
enddo
|
||||||
|
|
||||||
call finalize_libint()
|
call finalize_libint()
|
||||||
end debug_libint
|
end
|
@ -38,7 +38,7 @@ from qp_path import QP_ROOT, QP_SRC, QP_EZFIO
|
|||||||
LIB = "" # join(QP_ROOT, "lib", "rdtsc.o")
|
LIB = "" # join(QP_ROOT, "lib", "rdtsc.o")
|
||||||
EZFIO_LIB = join(QP_ROOT, "lib", "libezfio_irp.a")
|
EZFIO_LIB = join(QP_ROOT, "lib", "libezfio_irp.a")
|
||||||
ZMQ_LIB = join(QP_ROOT, "lib", "libf77zmq.a") + " " + join(QP_ROOT, "lib", "libzmq.a") + " -lstdc++ -lrt"
|
ZMQ_LIB = join(QP_ROOT, "lib", "libf77zmq.a") + " " + join(QP_ROOT, "lib", "libzmq.a") + " -lstdc++ -lrt"
|
||||||
INT_LIB = join(QP_ROOT, "libint","lib", ".libs", "libint2.a")
|
INT_LIB = join(QP_ROOT, "install", "libint","lib", ".libs", "libint2.a")
|
||||||
ROOT_BUILD_NINJA = join(QP_ROOT, "config", "build.ninja")
|
ROOT_BUILD_NINJA = join(QP_ROOT, "config", "build.ninja")
|
||||||
|
|
||||||
header = r"""#
|
header = r"""#
|
||||||
|
@ -6,7 +6,7 @@ open Core.Std;;
|
|||||||
|
|
||||||
WARNING
|
WARNING
|
||||||
This file is autogenerad by
|
This file is autogenerad by
|
||||||
`${{QP_ROOT}}/script/ezfio_interface/ei_handler.py`
|
`${{QP_ROOT}}/scripts/ezfio_interface/ei_handler.py`
|
||||||
*)
|
*)
|
||||||
|
|
||||||
|
|
||||||
@ -120,7 +120,7 @@ let set str s =
|
|||||||
| Nuclei -> write Nuclei.(of_rst, write) s
|
| Nuclei -> write Nuclei.(of_rst, write) s
|
||||||
| Ao_basis -> () (* TODO *)
|
| Ao_basis -> () (* TODO *)
|
||||||
| Mo_basis -> () (* TODO *)
|
| Mo_basis -> () (* TODO *)
|
||||||
end
|
end
|
||||||
;;
|
;;
|
||||||
|
|
||||||
|
|
||||||
@ -169,7 +169,9 @@ let run check_only ezfio_filename =
|
|||||||
in
|
in
|
||||||
|
|
||||||
(* Create the temp file *)
|
(* Create the temp file *)
|
||||||
let temp_filename = create_temp_file ezfio_filename tasks in
|
let temp_filename =
|
||||||
|
create_temp_file ezfio_filename tasks
|
||||||
|
in
|
||||||
|
|
||||||
(* Open the temp file with external editor *)
|
(* Open the temp file with external editor *)
|
||||||
let editor =
|
let editor =
|
||||||
@ -191,9 +193,10 @@ let run check_only ezfio_filename =
|
|||||||
In_channel.input_all in_channel)
|
In_channel.input_all in_channel)
|
||||||
in
|
in
|
||||||
List.iter ~f:(fun x -> set temp_string x) tasks;
|
List.iter ~f:(fun x -> set temp_string x) tasks;
|
||||||
|
Libint.write_files (!Ezfio.ezfio_filename);
|
||||||
|
|
||||||
(* Remove temp_file *)
|
(* Remove temp_file *)
|
||||||
Sys.remove temp_filename;
|
Sys.remove temp_filename
|
||||||
;;
|
;;
|
||||||
|
|
||||||
|
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#if __cplusplus <= 199711L
|
#if __cplusplus <= 199711L
|
||||||
# error "Hartree-Fock test requires C++11 support"
|
# error "C++11 support is required"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// standard C++ headers
|
// standard C++ headers
|
||||||
@ -244,4 +244,4 @@ void compute_ao_bielec_integrals_shell(int s1, int s2, int s3, int s4, int sze,
|
|||||||
|
|
||||||
for(auto i=0; i!=sze; i++)
|
for(auto i=0; i!=sze; i++)
|
||||||
values[i] = buf_1234[i];
|
values[i] = buf_1234[i];
|
||||||
};
|
};
|
||||||
|
30
src/Integrals_Monoelec/shell.irp.f
Normal file
30
src/Integrals_Monoelec/shell.irp.f
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
use libint_module
|
||||||
|
BEGIN_PROVIDER [ logical, libint_initialized ]
|
||||||
|
implicit none
|
||||||
|
BEGIN_DOC
|
||||||
|
! if true, libint is initialized
|
||||||
|
END_DOC
|
||||||
|
call init_libint(trim(ezfio_filename)//char((0)))
|
||||||
|
END_PROVIDER
|
||||||
|
|
||||||
|
BEGIN_PROVIDER [ integer, shell_num ]
|
||||||
|
implicit none
|
||||||
|
BEGIN_DOC
|
||||||
|
! Number of shells
|
||||||
|
END_DOC
|
||||||
|
PROVIDE libint_initialized
|
||||||
|
shell_num = get_nb_shell()
|
||||||
|
|
||||||
|
END_PROVIDER
|
||||||
|
|
||||||
|
|
||||||
|
BEGIN_PROVIDER [ integer, shell_idx, (2,shell_num) ]
|
||||||
|
implicit none
|
||||||
|
BEGIN_DOC
|
||||||
|
! Contains the 1st and last AO index in each shell
|
||||||
|
END_DOC
|
||||||
|
PROVIDE libint_initialized
|
||||||
|
call map_shell_to_basis_function_interval(2*shell_num,shell_idx)
|
||||||
|
END_PROVIDER
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user