mirror of
https://github.com/LCPQ/quantum_package
synced 2025-05-06 07:05:25 +02:00
Added ocaml qp_run
This commit is contained in:
parent
c1d8e6d29a
commit
12d6f6a568
@ -1,6 +1,9 @@
|
|||||||
all: inputs
|
all: inputs executables
|
||||||
|
|
||||||
FORCE:
|
.PHONY: inputs executables
|
||||||
|
|
||||||
inputs: FORCE
|
inputs:
|
||||||
cd inputs ; $(MAKE) all_ezfio
|
cd inputs ; $(MAKE) all_ezfio
|
||||||
|
|
||||||
|
executables:
|
||||||
|
$(MAKE) -C $(QPACKAGE_ROOT)/src executables && mv $(QPACKAGE_ROOT)/src/executables .
|
||||||
|
@ -8,6 +8,7 @@ These include:
|
|||||||
|
|
||||||
* Input data for the test suites
|
* Input data for the test suites
|
||||||
* Atomic basis sets
|
* Atomic basis sets
|
||||||
|
* List of built executables
|
||||||
|
|
||||||
*Important*: EZFIO files are large and should not be tracked by git.
|
*Important*: EZFIO files are large and should not be tracked by git.
|
||||||
|
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
open Core.Std;;
|
open Core.Std;;
|
||||||
open Qptypes;;
|
open Qptypes;;
|
||||||
|
open Qputils;;
|
||||||
|
|
||||||
(** Variables related to the quantum package installation *)
|
(** Variables related to the quantum package installation *)
|
||||||
|
|
||||||
@ -11,7 +12,7 @@ Please source the quantum_package.rc file."
|
|||||||
;;
|
;;
|
||||||
|
|
||||||
let bit_kind_size = lazy (
|
let bit_kind_size = lazy (
|
||||||
let filename = root^"/src/Bitmask/bitmasks_module.f90" in
|
let filename = root / "src/Bitmask/bitmasks_module.f90" in
|
||||||
if not (Sys.file_exists_exn filename) then
|
if not (Sys.file_exists_exn filename) then
|
||||||
raise (Failure ("File "^filename^" not found"));
|
raise (Failure ("File "^filename^" not found"));
|
||||||
|
|
||||||
@ -39,3 +40,26 @@ let bit_kind_size = lazy (
|
|||||||
in
|
in
|
||||||
get_data lines )
|
get_data lines )
|
||||||
;;
|
;;
|
||||||
|
|
||||||
|
let executables = lazy (
|
||||||
|
let filename = root / "data/executables"
|
||||||
|
and func in_channel =
|
||||||
|
In_channel.input_lines in_channel
|
||||||
|
|> List.map ~f:(fun x ->
|
||||||
|
let e = String.split ~on:' ' x
|
||||||
|
|> List.map ~f:String.strip
|
||||||
|
|> List.filter ~f:(fun x -> x <> "")
|
||||||
|
in
|
||||||
|
match e with
|
||||||
|
| [a;b] -> (a,String.substr_replace_all ~pattern:"$QPACKAGE_ROOT" ~with_:root b)
|
||||||
|
| _ -> ("","")
|
||||||
|
)
|
||||||
|
in
|
||||||
|
In_channel.with_file filename ~f:func
|
||||||
|
|> List.sort ~cmp:(fun (x,_) (y,_) ->
|
||||||
|
if x < y then -1
|
||||||
|
else if x > y then 1
|
||||||
|
else 0)
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
92
ocaml/qp_run.ml
Normal file
92
ocaml/qp_run.ml
Normal file
@ -0,0 +1,92 @@
|
|||||||
|
open Core.Std;;
|
||||||
|
open Qputils;;
|
||||||
|
|
||||||
|
let print_list () =
|
||||||
|
Lazy.force Qpackage.executables
|
||||||
|
|> List.iter ~f:(fun (x,_) -> Printf.printf " * %s\n" x)
|
||||||
|
;;
|
||||||
|
|
||||||
|
let run exe ezfio_file =
|
||||||
|
|
||||||
|
let time_start = Time.now() in
|
||||||
|
|
||||||
|
if (not (Sys.file_exists_exn ezfio_file)) then
|
||||||
|
failwith ("EZFIO directory "^ezfio_file^" not found");
|
||||||
|
|
||||||
|
let executables = Lazy.force Qpackage.executables in
|
||||||
|
if (not (List.exists ~f:(fun (x,_) -> x = exe) executables)) then
|
||||||
|
failwith ("Executable "^exe^" not found");
|
||||||
|
|
||||||
|
Printf.printf "===============\nQuantum Package\n===============\n\n";
|
||||||
|
Printf.printf "Date : %s\n\n%!" (Time.to_string time_start);
|
||||||
|
|
||||||
|
let output_dir = ezfio_file / "output" in
|
||||||
|
if (Sys.file_exists_exn output_dir) then
|
||||||
|
begin
|
||||||
|
Sys.ls_dir output_dir
|
||||||
|
|> List.iter ~f:(fun x -> Sys.remove (output_dir / x));
|
||||||
|
Unix.rmdir output_dir
|
||||||
|
end;
|
||||||
|
|
||||||
|
let fifo_name = ezfio_file / ".fifo" in
|
||||||
|
if (Sys.file_exists_exn fifo_name) then
|
||||||
|
Sys.remove fifo_name;
|
||||||
|
Unix.mkfifo ~perm:0o664 fifo_name;
|
||||||
|
let script = Printf.sprintf "%s/scripts/follow_output.py %s &
|
||||||
|
echo $! > %s &" Qpackage.root ezfio_file fifo_name in
|
||||||
|
ignore (Sys.command script);
|
||||||
|
|
||||||
|
let pid =
|
||||||
|
In_channel.with_file fifo_name ~f:(fun in_channel ->
|
||||||
|
In_channel.input_all in_channel |> String.strip )
|
||||||
|
|> Int.of_string
|
||||||
|
|> Pid.of_int
|
||||||
|
in
|
||||||
|
Sys.remove fifo_name;
|
||||||
|
|
||||||
|
let exe =
|
||||||
|
match (List.find ~f:(fun (x,_) -> x = exe) executables) with
|
||||||
|
| None -> assert false
|
||||||
|
| Some (_,x) -> x
|
||||||
|
in
|
||||||
|
match (Sys.command (exe^" "^ezfio_file)) with
|
||||||
|
| 0 -> ()
|
||||||
|
| i -> Printf.printf "Program exited with code %d.\n%!" i;
|
||||||
|
;
|
||||||
|
|
||||||
|
Signal.send_exn (Signal.of_system_int 2) (`Pid pid);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
(* Run the executable in the foreground
|
||||||
|
* ==================================== *)
|
||||||
|
|
||||||
|
let duration = Time.diff (Time.now()) time_start
|
||||||
|
|> Core.Span.to_string in
|
||||||
|
Printf.printf "Wall time : %s\n\n" duration;
|
||||||
|
;;
|
||||||
|
|
||||||
|
let spec =
|
||||||
|
let open Command.Spec in
|
||||||
|
empty
|
||||||
|
+> anon ("exectuable" %: string)
|
||||||
|
+> anon ("ezfio_file" %: string)
|
||||||
|
;;
|
||||||
|
|
||||||
|
let () =
|
||||||
|
Command.basic
|
||||||
|
~summary: "Quantum Package command"
|
||||||
|
~readme:( fun () -> "
|
||||||
|
Executes a Quantum Package binary file among these:\ni\n"
|
||||||
|
^ (Lazy.force Qpackage.executables
|
||||||
|
|> List.map ~f:(fun (x,_) -> Printf.sprintf " * %s" x )
|
||||||
|
|> String.concat ~sep:"\n"
|
||||||
|
)
|
||||||
|
)
|
||||||
|
spec
|
||||||
|
(fun exe ezfio_file () ->
|
||||||
|
run exe ezfio_file
|
||||||
|
)
|
||||||
|
|> Command.run
|
||||||
|
;;
|
||||||
|
|
@ -54,7 +54,10 @@ def main():
|
|||||||
# Handle signals
|
# Handle signals
|
||||||
import signal
|
import signal
|
||||||
def handler(signum,frame):
|
def handler(signum,frame):
|
||||||
F.running = False
|
if F.running:
|
||||||
|
F.running = False
|
||||||
|
else:
|
||||||
|
sys.exit(0)
|
||||||
|
|
||||||
for i in [2, 15]:
|
for i in [2, 15]:
|
||||||
try:
|
try:
|
||||||
|
@ -5,6 +5,8 @@ OBJ=
|
|||||||
|
|
||||||
include $(QPACKAGE_ROOT)/src/Makefile.common
|
include $(QPACKAGE_ROOT)/src/Makefile.common
|
||||||
|
|
||||||
|
.PHONY: executables
|
||||||
|
|
||||||
all: all_modules
|
all: all_modules
|
||||||
|
|
||||||
all_clean:
|
all_clean:
|
||||||
@ -15,3 +17,9 @@ all_modules: $(NEEDED_MODULES)
|
|||||||
$(NEEDED_MODULES): FORCE
|
$(NEEDED_MODULES): FORCE
|
||||||
@cd $@ ; unset NEEDED_MODULES INCLUDE_DIRS ; make
|
@cd $@ ; unset NEEDED_MODULES INCLUDE_DIRS ; make
|
||||||
|
|
||||||
|
executables:
|
||||||
|
rm -f executables ; \
|
||||||
|
for EXE in $$(find $(QPACKAGE_ROOT)/src -type f -executable | grep -e "$(QPACKAGE_ROOT)/src/[^/]*/[^/]*$$" ) ; \
|
||||||
|
do printf "%-30s %s\n" $$(basename $$EXE) $$EXE | sed "s|$(QPACKAGE_ROOT)|\$$QPACKAGE_ROOT|g" >> executables ;\
|
||||||
|
done
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user