diff --git a/configure b/configure index 372bada7..b674bd76 100755 --- a/configure +++ b/configure @@ -292,6 +292,9 @@ EOF # Special commands for Travis CI chmod +x "${QP_ROOT}"/external/opam_installer.sh rm --force ${QP_ROOT}/bin/opam + if [[ -n ${NO_CACHE} ]] ; then + rm -rf ${HOME}/.opam + fi export OPAMROOT=${HOME}/.opam cat << EOF | bash ${QP_ROOT}/external/opam_installer.sh --no-backup ${QP_ROOT}/bin @@ -301,9 +304,9 @@ ${QP_ROOT}/bin EOF rm ${QP_ROOT}/external/opam_installer.sh - source ${OPAMROOT}/opam-init/init.sh > /dev/null 2> /dev/null || true - - opam switch create ocaml-base-compiler.4.07.1 +# source ${OPAMROOT}/opam-init/init.sh > /dev/null 2> /dev/null || true +# +# opam switch create ocaml-base-compiler.4.07.1 opam init --verbose --yes --compiler=4.07.1 --disable-sandboxing eval $(opam env) @@ -312,18 +315,19 @@ EOF else # Conventional commands execute << EOF - chmod +x "\${QP_ROOT}"/external/opam_installer.sh - "\${QP_ROOT}"/external/opam_installer.sh --no-backup + chmod +x "${QP_ROOT}"/external/opam_installer.sh + "${QP_ROOT}"/external/opam_installer.sh --no-backup EOF execute << EOF - rm --force \${QP_ROOT}/bin/opam - export OPAMROOT=\${OPAMROOT:-\${QP_ROOT}/external/opam} - echo \${QP_ROOT}/bin \ - | sh \${QP_ROOT}/external/opam_installer.sh + rm --force ${QP_ROOT}/bin/opam + export OPAMROOT=${OPAMROOT:-${QP_ROOT}/external/opam} + echo ${QP_ROOT}/bin \ + | sh ${QP_ROOT}/external/opam_installer.sh EOF rm ${QP_ROOT}/external/opam_installer.sh - source ${OPAMROOT}/opam-init/init.sh > /dev/null 2> /dev/null || true - opam switch create ocaml-base-compiler.4.07.1 || exit 1 +# source ${OPAMROOT}/opam-init/init.sh > /dev/null 2> /dev/null || true +# opam switch create ocaml-base-compiler.4.07.1 || exit 1 + opam init --verbose --yes --compiler=4.07.1 --disable-sandboxing eval $(opam env) EOF diff --git a/data/qp2.png b/data/qp2.png index 55dac420..a81e611e 100644 Binary files a/data/qp2.png and b/data/qp2.png differ diff --git a/data/qp2_hd.png b/data/qp2_hd.png new file mode 100644 index 00000000..55dac420 Binary files /dev/null and b/data/qp2_hd.png differ diff --git a/docs/source/research.bib b/docs/source/research.bib index 479b920a..f0c0648c 100644 --- a/docs/source/research.bib +++ b/docs/source/research.bib @@ -1,6 +1,6 @@ %%% ARXIV TO BE UPDATED %%% @article{Giner2019Jul, - author = {Giner, Emmanuel and Scemama, Anthony and Toulouse, Julien and Loos, Pierre-Fran{\ifmmode\mbox{\c{c}}\else\c{c}\fi}ois}, + author = {Giner, Emmanuel and Scemama, Anthony and Toulouse, Julien and Loos, Pierre-Fran{\c{c}}ois}, title = {{Chemically Accurate Excitation Energies With Small Basis Sets}}, journal = {arXiv}, year = {2019}, @@ -9,24 +9,28 @@ url = {https://arxiv.org/abs/1907.01245} } -@article{Dash2019May, - author = {Dash, Monika and Feldt, Jonas and Moroni, Saverio and Scemama, Anthony and Filippi, Claudia}, - title = {{Excited states with selected CI-QMC: chemically accurate excitation energies and geometries}}, - journal = {arXiv}, - year = {2019}, - month = {May}, - eprint = {1905.06737}, - url = {https://arxiv.org/abs/1905.06737} + +@article{Burton_2019, + doi = {10.1021/acs.jctc.9b00441}, + url = {https://doi.org/10.1021%2Facs.jctc.9b00441}, + year = 2019, + month = {aug}, + publisher = {American Chemical Society ({ACS})}, + author = {Hugh G. A. Burton and Alex J.W. Thom}, + title = {A General Approach for Multireference Ground and Excited States using Non-Orthogonal Configuration Interaction}, + journal = {Journal of Chemical Theory and Computation} } -@article{Burton2019May, - author = {Burton, Hugh G. A. and Thom, Alex J. W.}, - title = {{A General Approach for Multireference Ground and Excited States using Non-Orthogonal Configuration Interaction}}, - journal = {arXiv}, - year = {2019}, - month = {May}, - eprint = {1905.02626}, - url = {https://arxiv.org/abs/1905.02626} + +@article{Dash_2019, + doi = {10.1021/acs.jctc.9b00476}, + url = {https://doi.org/10.1021%2Facs.jctc.9b00476}, + year = 2019, + month = {aug}, + publisher = {American Chemical Society ({ACS})}, + author = {Monika Dash and Jonas Feldt and Saverio Moroni and Anthony Scemama and Claudia Filippi}, + title = {Excited States with Selected Configuration Interaction-Quantum Monte Carlo: Chemically Accurate Excitation Energies and Geometries}, + journal = {Journal of Chemical Theory and Computation} } @@ -43,6 +47,19 @@ pages = {084103}, author = {Anthony Fert{\'{e}} and Emmanuel Giner and Julien Toulouse}, title = {Range-separated multideterminant density-functional theory with a short-range correlation functional of the on-top pair density}, +} + +@article{Caffarel_2019, + doi = {10.1063/1.5114703}, + url = {https://doi.org/10.1063%2F1.5114703}, + year = 2019, + month = {aug}, + publisher = {{AIP} Publishing}, + volume = {151}, + number = {6}, + pages = {064101}, + author = {Michel Caffarel}, + title = {Evaluating two-electron-repulsion integrals over arbitrary orbitals using zero variance Monte Carlo: Application to full configuration interaction calculations with Slater-type orbitals}, journal = {The Journal of Chemical Physics} } diff --git a/ocaml/Makefile b/ocaml/Makefile index aaf8c2cc..6ff91273 100644 --- a/ocaml/Makefile +++ b/ocaml/Makefile @@ -43,7 +43,7 @@ $(QP_ROOT)/data/executables: remake_executables element_create_db.byte Qptypes.m $(QP_ROOT)/ocaml/element_create_db.byte external_libs: - opam install cryptokit core + opam install cryptokit sexplib qpackage.odocl: $(MLIFILES) ls $(MLIFILES) | sed "s/\.mli//" > qpackage.odocl diff --git a/ocaml/qp_tunnel.ml b/ocaml/qp_tunnel.ml index dee01980..75112e66 100644 --- a/ocaml/qp_tunnel.ml +++ b/ocaml/qp_tunnel.ml @@ -6,6 +6,11 @@ type req_or_sub = REQ | SUB let localport = 42379 + +let in_time_sum = ref 1.e-9 +and in_size_sum = ref 0. + + let () = let open Command_line in begin @@ -17,6 +22,10 @@ let () = doc="Downloads the EZFIO directory." ; arg=Without_arg; } ; + { short='v' ; long="verbose" ; opt=Optional ; + doc="Prints the transfer speed." ; + arg=Without_arg; } ; + anonymous "(EZFIO_DIR|ADDRESS)" Mandatory @@ -39,6 +48,9 @@ let () = ADDRESS x in + let verbose = + Command_line.get_bool "verbose" + in @@ -133,8 +145,8 @@ let () = let socket_in, socket_out = match req_or_sub with | REQ -> - create_socket Zmq.Socket.rep Zmq.Socket.bind addr_in, - create_socket Zmq.Socket.req Zmq.Socket.connect addr_out + create_socket Zmq.Socket.router Zmq.Socket.bind addr_in, + create_socket Zmq.Socket.dealer Zmq.Socket.connect addr_out | SUB -> create_socket Zmq.Socket.sub Zmq.Socket.connect addr_in, create_socket Zmq.Socket.pub Zmq.Socket.bind addr_out @@ -144,19 +156,61 @@ let () = Zmq.Socket.subscribe socket_in ""; + (* let action = + if verbose then + begin + match req_or_sub with + | REQ -> (fun () -> + let msg = + Zmq.Socket.recv_all socket_in + in + let t0 = Unix.gettimeofday () in + Zmq.Socket.send_all socket_out msg; + let in_size = + float_of_int ( List.fold_left (fun accu x -> accu + String.length x) 0 msg ) + /. 8192. /. 1024. + in + let msg = + Zmq.Socket.recv_all socket_out + in + let t1 = Unix.gettimeofday () in + Zmq.Socket.send_all socket_in msg; + let in_time = t1 -. t0 in + in_time_sum := !in_time_sum +. in_time; + in_size_sum := !in_size_sum +. in_size; + Printf.printf " %16.2f MiB/s -- %16.2f MiB/s\n%!" (in_size /. in_time) (!in_size_sum /. !in_time_sum); + ) + | SUB -> (fun () -> + Zmq.Socket.recv_all socket_in |> Zmq.Socket.send_all socket_out) + end + else + begin + match req_or_sub with + | REQ -> (fun () -> + Zmq.Socket.recv_all socket_in |> Zmq.Socket.send_all socket_out; + Zmq.Socket.recv_all socket_out |> Zmq.Socket.send_all socket_in ) + | SUB -> (fun () -> + Zmq.Socket.recv_all socket_in |> Zmq.Socket.send_all socket_out) + end + in + *) + + let action_in = match req_or_sub with - | REQ -> (fun () -> - Zmq.Socket.recv_all socket_in |> Zmq.Socket.send_all socket_out; - Zmq.Socket.recv_all socket_out |> Zmq.Socket.send_all socket_in ) - | SUB -> (fun () -> - Zmq.Socket.recv_all socket_in |> Zmq.Socket.send_all socket_out) + | REQ -> (fun () -> Zmq.Socket.recv_all socket_in |> Zmq.Socket.send_all socket_out) + | SUB -> (fun () -> Zmq.Socket.recv_all socket_in |> Zmq.Socket.send_all socket_out) in + let action_out = + match req_or_sub with + | REQ -> (fun () -> Zmq.Socket.recv_all socket_out |> Zmq.Socket.send_all socket_in ) + | SUB -> (fun () -> () ) + in let pollitem = Zmq.Poll.mask_of - [| (socket_in, Zmq.Poll.In) |] + [| (socket_in, Zmq.Poll.In) ; (socket_out, Zmq.Poll.In) |] in @@ -166,12 +220,11 @@ let () = Zmq.Poll.poll ~timeout:1000 pollitem in - match polling.(0) with - | Some Zmq.Poll.In -> action () - | None -> () - | Some Zmq.Poll.In_out - | Some Zmq.Poll.Out -> () - + match polling with + | [| Some Zmq.Poll.In ; Some Zmq.Poll.In |] -> ( action_out () ; action_in () ) + | [| _ ; Some Zmq.Poll.In |] -> action_out () + | [| Some Zmq.Poll.In ; _ |] -> action_in () + | _ -> () done; Zmq.Socket.close socket_in; @@ -277,7 +330,7 @@ let () = match arg with | EZFIO x -> begin - Printf.sprintf "tar -zcf %s %s" temp_file x + Printf.sprintf "tar --exclude=\"*.gz.*\" -zcf %s %s" temp_file x |> Sys.command |> ignore; let fd = Unix.openfile temp_file [Unix.O_RDONLY] 0o640 @@ -363,12 +416,21 @@ let () = |> Zmq.Socket.send socket_in in - Printf.printf "On remote hosts, create ssh tunnel using: -ssh -L %d:%s:%d -L %d:%s:%d -L %d:%s:%d %s\n%!" + Printf.printf " +On remote hosts, create ssh tunnel using: + ssh -L %d:%s:%d -L %d:%s:%d -L %d:%s:%d -L %d:%s:%d %s & +Or from this host connect to clients using: + ssh -R %d:localhost:%d -R %d:localhost:%d -R %d:localhost:%d -R %d:localhost:%d & +%!" (port ) localhost (localport ) (port+1) localhost (localport+1) + (port+2) localhost (localport+2) (port+9) localhost (localport+9) - (Unix.gethostname ()); + (Unix.gethostname ()) + (port ) (localport ) + (port+1) (localport+1) + (port+2) (localport+2) + (port+9) (localport+9); Printf.printf "Ready\n%!"; while !run_status do diff --git a/ocaml/qptypes_generator.ml b/ocaml/qptypes_generator.ml index 353c91c4..a63a19cc 100644 --- a/ocaml/qptypes_generator.ml +++ b/ocaml/qptypes_generator.ml @@ -58,7 +58,7 @@ let input_data = " * Det_number_max : int assert (x > 0) ; - if (x > 50_00_000_000) then + if (x > 50_000_000_000) then warning \"More than 50 billion determinants\"; * States_number : int diff --git a/src/cipsi/run_pt2_slave.irp.f b/src/cipsi/run_pt2_slave.irp.f index cb1bc83f..b1adfa20 100644 --- a/src/cipsi/run_pt2_slave.irp.f +++ b/src/cipsi/run_pt2_slave.irp.f @@ -141,8 +141,8 @@ subroutine run_pt2_slave_small(thread,iproc,energy) b%cur=0 ! ! Try to adjust n_tasks around nproc/2 seconds per job -! n_tasks = min(2*n_tasks,int( dble(n_tasks * nproc/2) / (time1 - time0 + 1.d0))) - n_tasks = 1 + n_tasks = min(2*n_tasks,int( dble(n_tasks * nproc/2) / (time1 - time0 + 1.d0))) +! n_tasks = 1 end do integer, external :: disconnect_from_taskserver