diff --git a/GITHUB.md b/GITHUB.md index 02836a37..cee4cc8c 100644 --- a/GITHUB.md +++ b/GITHUB.md @@ -2,20 +2,23 @@ GitHub Branches =============== master: - The current up-to-date working branch, that users download It should - only contain the latest release and bug fixes. + The current up-to-date working branch, that users download. It should + only contain the latest stable release and bug fixes. -develop-lcpq: - Toulouse development branch - -develop-lct: - Paris development branch - -develop: +dev: It is a fork of the *master* branch with new developments that will be merged in the *master* branch for the next release. Other development branches should be merged on this one. +bugfix: + A fork of the *master* on which the bug fixes are made. + +dev-lcpq: + Toulouse development branch + +dev-lct: + Paris development branch + gh-pages: This is an independent branch, containing only the web site of QP2. diff --git a/INSTALL.rst b/INSTALL.rst index 825c0c4d..979c8edd 100644 --- a/INSTALL.rst +++ b/INSTALL.rst @@ -328,7 +328,7 @@ OCaml echo ${QP_ROOT}/bin ${QP_ROOT}/external/opam_installer.sh --no-backup --fresh - You the :command:`opam` command can be installed in the :file:`${QP_ROOT}/bin` + The :command:`opam` command can be installed in the :file:`${QP_ROOT}/bin` directory. To do this, take the output of ``echo ${QP_ROOT}/bin`` and use it as an answer to where :command:`opam` should be installed. @@ -337,7 +337,14 @@ OCaml .. code:: bash - opam init --disable-sandboxing --comp=4.07.0 + opam init --comp=4.07.1 + eval `${QP_ROOT}/bin/opam env` + + If the installation fails because of bwrap, you can initialize opam using: + + .. code:: bash + + opam init --disable-sandboxing --comp=4.07.1 eval `${QP_ROOT}/bin/opam env` * Install the required external OCaml libraries diff --git a/README.md b/README.md index e7fab0c9..3349f561 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ [*Quantum package 2.0: an open-source determinant-driven suite of programs*](https://pubs.acs.org/doi/10.1021/acs.jctc.9b00176)\ Y. Garniron, K. Gasperich, T. Applencourt, A. Benali, A. Ferté, J. Paquier, B. Pradines, R. Assaraf, P. Reinhardt, J. Toulouse, P. Barbaresco, N. Renon, G. David, J. P. Malrieu, M. Véril, M. Caffarel, P. F. Loos, E. Giner and A. Scemama\ -J. Chem. Theory Comput., 15:6, 3591--3609, (2019)\ +[J. Chem. Theory Comput. 2019, 15, 6, 3591-3609](https://doi.org/10.1021/acs.jctc.9b00176)\ https://arxiv.org/abs/1902.08154 ``` diff --git a/REPLACE b/REPLACE index 10a53958..d0b6adce 100755 --- a/REPLACE +++ b/REPLACE @@ -834,3 +834,4 @@ qp_name potential_sr_c_alpha_ao_pbe --rename=potential_c_alpha_ao_sr_pbe qp_name potential_sr_c_beta_ao_pbe --rename=potential_c_beta_ao_sr_pbe qp_name potential_sr_xc_alpha_ao_pbe --rename=potential_xc_alpha_ao_sr_pbe qp_name potential_sr_xc_beta_ao_pbe --rename=potential_xc_beta_ao_sr_pbe +qp_name disk_access_nuclear_repulsion --rename=io_nuclear_repulsion diff --git a/config/gfortran.cfg b/config/gfortran.cfg index 94a12ccf..f561fcb7 100644 --- a/config/gfortran.cfg +++ b/config/gfortran.cfg @@ -35,7 +35,7 @@ OPENMP : 1 ; Append OpenMP flags # -ffast-math and the Fortran-specific # -fno-protect-parens and -fstack-arrays. [OPT] -FCFLAGS : -Ofast -march=native +FCFLAGS : -Ofast -msse4.2 # Profiling flags ################# diff --git a/configure b/configure index c3ff8942..6d875fae 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,25 +304,33 @@ ${QP_ROOT}/bin EOF rm ${QP_ROOT}/external/opam_installer.sh - source ${OPAMROOT}/opam-init/init.sh > /dev/null 2> /dev/null || true +# 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 - ${QP_ROOT}/bin/opam init --verbose --yes --comp=4.07.1 --disable-sandboxing - - eval $(${QP_ROOT}/bin/opam env) + eval $(opam env) opam install -y ${OCAML_PACKAGES} || exit 1 + else # Conventional commands execute << EOF - chmod +x "\${QP_ROOT}"/external/opam_installer.sh - "\${QP_ROOT}"/external/opam_installer.sh --no-backup - 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 \${QP_ROOT}/external/opam_installer.sh - source \${OPAMROOT}/opam-init/init.sh > /dev/null 2> /dev/null || true - \${QP_ROOT}/bin/opam init --verbose --yes --comp=4.07.1 --disable-sandboxing - eval \$(\${QP_ROOT}/bin/opam env) + 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 +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 + + opam init --verbose --yes --compiler=4.07.1 --disable-sandboxing + eval $(opam env) + execute << EOF opam install -y \${OCAML_PACKAGES} || exit 1 EOF fi diff --git a/docs/source/research.bib b/docs/source/research.bib index 03ffb39f..a2abea47 100644 --- a/docs/source/research.bib +++ b/docs/source/research.bib @@ -1,22 +1,36 @@ %%% ARXIV TO BE UPDATED %%% -@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}}, +@article{Giner2019Jul, + 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}, - month = {May}, - eprint = {1905.06737}, - url = {https://arxiv.org/abs/1905.06737} + month = {Jul}, + eprint = {1907.01245}, + url = {https://arxiv.org/abs/1907.01245} } -@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{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{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} } @@ -36,6 +50,20 @@ journal = {The Journal of Chemical Physics} } +@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} +} + @article{Loos_2019, doi = {10.1021/acs.jpclett.9b01176}, url = {https://doi.org/10.1021%2Facs.jpclett.9b01176}, diff --git a/ocaml/Determinant.ml b/ocaml/Determinant.ml index c27aefc4..6f248470 100644 --- a/ocaml/Determinant.ml +++ b/ocaml/Determinant.ml @@ -3,7 +3,8 @@ open Sexplib.Std type t = int64 array [@@deriving sexp] -let to_int64_array (x:t) = (x:int64 array) +external to_int64_array : t -> int64 array = "%identity" +external of_int64_array_no_check : int64 array -> t = "%identity" let to_alpha_beta x = @@ -61,7 +62,6 @@ let of_int64_array ~n_int ~alpha ~beta x = end; x -let of_int64_array_no_check x = x let of_bitlist_couple ?n_int ~alpha ~beta (xa,xb) = let ba, bb = diff --git a/ocaml/Input_determinants_by_hand.ml b/ocaml/Input_determinants_by_hand.ml index e4c6ff2a..a676cf76 100644 --- a/ocaml/Input_determinants_by_hand.ml +++ b/ocaml/Input_determinants_by_hand.ml @@ -196,8 +196,9 @@ end = struct let write_psi_coef ~n_det ~n_states c = let n_det = Det_number.to_int n_det - and c = Array.to_list c - |> List.map Det_coef.to_float + and c = + Array.map Det_coef.to_float c + |> Array.to_list and n_states = States_number.to_int n_states in @@ -239,12 +240,11 @@ end = struct assert (n_int = dim.(0)); assert (dim.(1) = 2); assert (dim.(2) = (Det_number.to_int (read_n_det ()))); - List.init dim.(2) (fun i -> + Array.init dim.(2) (fun i -> Array.sub data (2*n_int*i) (2*n_int) ) - |> List.map (Determinant.of_int64_array + |> Array.map (Determinant.of_int64_array ~n_int:(N_int_number.of_int n_int) ~alpha:n_alpha ~beta:n_beta ) - |> Array.of_list ;; let write_psi_det ~n_int ~n_det d = @@ -363,7 +363,7 @@ Determinants :: " (b.expected_s2 |> Positive_float.to_string) (b.n_det |> Det_number.to_string) - (b.state_average_weight |> Array.to_list |> List.map Positive_float.to_string |> String.concat "\t") + (b.state_average_weight |> Array.map Positive_float.to_string |> Array.to_list |> String.concat "\t") det_text |> Rst_string.of_string ;; @@ -387,10 +387,10 @@ psi_det = %s (b.n_states |> States_number.to_string) (b.expected_s2 |> Positive_float.to_string) (b.state_average_weight |> Array.to_list |> List.map Positive_float.to_string |> String.concat ",") - (b.psi_coef |> Array.to_list |> List.map Det_coef.to_string + (b.psi_coef |> Array.map Det_coef.to_string |> Array.to_list |> String.concat ", ") - (b.psi_det |> Array.to_list |> List.map (Determinant.to_string - ~mo_num) |> String.concat "\n\n") + (b.psi_det |> Array.map (Determinant.to_string ~mo_num) |> Array.to_list + |> String.concat "\n\n") ;; let of_rst r = diff --git a/src/ao_one_e_ints/README.rst b/src/ao_one_e_ints/README.rst index bc8832c3..a87bdb17 100644 --- a/src/ao_one_e_ints/README.rst +++ b/src/ao_one_e_ints/README.rst @@ -6,9 +6,8 @@ All the one-electron integrals in the |AO| basis are here. The most important providers for usual quantum-chemistry calculation are: -* `ao_kinetic_integral` which are the kinetic operator integrals on the |AO| basis (see :file:`kin_ao_ints.irp.f`) -* `ao_nucl_elec_integral` which are the nuclear-elctron operator integrals on the |AO| basis (see :file:`pot_ao_ints.irp.f`) -* `ao_one_e_integrals` which are the the h_core operator integrals on the |AO| basis (see :file:`ao_mono_ints.irp.f`) +* `ao_kinetic_integrals` which are the kinetic operator integrals on the |AO| basis +* `ao_integrals_n_e` which are the nuclear-elctron operator integrals on the |AO| basis +* `ao_one_e_integrals` which are the the h_core operator integrals on the |AO| basis -Note that you can find other interesting integrals related to the position operator in :file:`spread_dipole_ao.irp.f`. diff --git a/src/cipsi/run_pt2_slave.irp.f b/src/cipsi/run_pt2_slave.irp.f index 21def8f2..cb1bc83f 100644 --- a/src/cipsi/run_pt2_slave.irp.f +++ b/src/cipsi/run_pt2_slave.irp.f @@ -148,7 +148,7 @@ subroutine run_pt2_slave_small(thread,iproc,energy) integer, external :: disconnect_from_taskserver do i=1,300 if (disconnect_from_taskserver(zmq_to_qp_run_socket,worker_id) /= -2) exit - call sleep(1) + call usleep(500) print *, 'Retry disconnect...' end do diff --git a/src/cipsi/run_selection_slave.irp.f b/src/cipsi/run_selection_slave.irp.f index a80a9372..17b11250 100644 --- a/src/cipsi/run_selection_slave.irp.f +++ b/src/cipsi/run_selection_slave.irp.f @@ -73,7 +73,7 @@ subroutine run_selection_slave(thread,iproc,energy) if(done .or. ctask == size(task_id)) then do i=1, ctask if (task_done_to_taskserver(zmq_to_qp_run_socket,worker_id,task_id(i)) == -1) then - call sleep(1) + call usleep(100) if (task_done_to_taskserver(zmq_to_qp_run_socket,worker_id,task_id(i)) == -1) then ctask = 0 done = .true. @@ -84,6 +84,7 @@ subroutine run_selection_slave(thread,iproc,energy) if(ctask > 0) then call sort_selection_buffer(buf) ! call merge_selection_buffers(buf,buf2) +print *, task_id(1), pt2(1), buf%cur, ctask call push_selection_results(zmq_socket_push, pt2, variance, norm, buf, task_id(1), ctask) ! buf%mini = buf2%mini pt2(:) = 0d0 @@ -131,23 +132,24 @@ subroutine push_selection_results(zmq_socket_push, pt2, variance, norm, b, task_ print *, 'f77_zmq_send( zmq_socket_push, b%cur, 4, ZMQ_SNDMORE)' endif + + rc = f77_zmq_send( zmq_socket_push, pt2, 8*N_states, ZMQ_SNDMORE) + if(rc /= 8*N_states) then + print *, 'f77_zmq_send( zmq_socket_push, pt2, 8*N_states, ZMQ_SNDMORE)' + endif + + rc = f77_zmq_send( zmq_socket_push, variance, 8*N_states, ZMQ_SNDMORE) + if(rc /= 8*N_states) then + print *, 'f77_zmq_send( zmq_socket_push, variance, 8*N_states, ZMQ_SNDMORE)' + endif + + rc = f77_zmq_send( zmq_socket_push, norm, 8*N_states, ZMQ_SNDMORE) + if(rc /= 8*N_states) then + print *, 'f77_zmq_send( zmq_socket_push, norm, 8*N_states, ZMQ_SNDMORE)' + endif + if (b%cur > 0) then - rc = f77_zmq_send( zmq_socket_push, pt2, 8*N_states, ZMQ_SNDMORE) - if(rc /= 8*N_states) then - print *, 'f77_zmq_send( zmq_socket_push, pt2, 8*N_states, ZMQ_SNDMORE)' - endif - - rc = f77_zmq_send( zmq_socket_push, variance, 8*N_states, ZMQ_SNDMORE) - if(rc /= 8*N_states) then - print *, 'f77_zmq_send( zmq_socket_push, variance, 8*N_states, ZMQ_SNDMORE)' - endif - - rc = f77_zmq_send( zmq_socket_push, norm, 8*N_states, ZMQ_SNDMORE) - if(rc /= 8*N_states) then - print *, 'f77_zmq_send( zmq_socket_push, norm, 8*N_states, ZMQ_SNDMORE)' - endif - rc = f77_zmq_send( zmq_socket_push, b%val(1), 8*b%cur, ZMQ_SNDMORE) if(rc /= 8*b%cur) then print *, 'f77_zmq_send( zmq_socket_push, b%val(1), 8*b%cur, ZMQ_SNDMORE)' @@ -202,22 +204,26 @@ subroutine pull_selection_results(zmq_socket_pull, pt2, variance, norm, val, det print *, 'f77_zmq_recv( zmq_socket_pull, N, 4, 0)' endif + pt2(:) = 0.d0 + variance(:) = 0.d0 + norm(:) = 0.d0 + + rc = f77_zmq_recv( zmq_socket_pull, pt2, N_states*8, 0) + if(rc /= 8*N_states) then + print *, 'f77_zmq_recv( zmq_socket_pull, pt2, N_states*8, 0)' + endif + + rc = f77_zmq_recv( zmq_socket_pull, variance, N_states*8, 0) + if(rc /= 8*N_states) then + print *, 'f77_zmq_recv( zmq_socket_pull, variance, N_states*8, 0)' + endif + + rc = f77_zmq_recv( zmq_socket_pull, norm, N_states*8, 0) + if(rc /= 8*N_states) then + print *, 'f77_zmq_recv( zmq_socket_pull, norm, N_states*8, 0)' + endif + if (N>0) then - rc = f77_zmq_recv( zmq_socket_pull, pt2, N_states*8, 0) - if(rc /= 8*N_states) then - print *, 'f77_zmq_recv( zmq_socket_pull, pt2, N_states*8, 0)' - endif - - rc = f77_zmq_recv( zmq_socket_pull, variance, N_states*8, 0) - if(rc /= 8*N_states) then - print *, 'f77_zmq_recv( zmq_socket_pull, variance, N_states*8, 0)' - endif - - rc = f77_zmq_recv( zmq_socket_pull, norm, N_states*8, 0) - if(rc /= 8*N_states) then - print *, 'f77_zmq_recv( zmq_socket_pull, norm, N_states*8, 0)' - endif - rc = f77_zmq_recv( zmq_socket_pull, val(1), 8*N, 0) if(rc /= 8*N) then print *, 'f77_zmq_recv( zmq_socket_pull, val(1), 8*N, 0)' @@ -227,10 +233,6 @@ subroutine pull_selection_results(zmq_socket_pull, pt2, variance, norm, val, det if(rc /= bit_kind*N_int*2*N) then print *, 'f77_zmq_recv( zmq_socket_pull, det(1,1,1), bit_kind*N_int*2*N, 0)' endif - else - pt2(:) = 0.d0 - variance(:) = 0.d0 - norm(:) = 0.d0 endif rc = f77_zmq_recv( zmq_socket_pull, ntask, 4, 0) diff --git a/src/cipsi/slave_cipsi.irp.f b/src/cipsi/slave_cipsi.irp.f index c9710c18..3e33dfa8 100644 --- a/src/cipsi/slave_cipsi.irp.f +++ b/src/cipsi/slave_cipsi.irp.f @@ -63,7 +63,7 @@ subroutine run_slave_main if (mpi_master) then call wait_for_states(states,zmq_state,size(states)) if (zmq_state(1:64) == old_state(1:64)) then - call sleep(1) + call usleep(200) cycle else old_state(1:64) = zmq_state(1:64) diff --git a/src/ezfio_files/ezfio.irp.f b/src/ezfio_files/ezfio.irp.f index 70277992..e7a7a159 100644 --- a/src/ezfio_files/ezfio.irp.f +++ b/src/ezfio_files/ezfio.irp.f @@ -39,6 +39,8 @@ BEGIN_PROVIDER [ character*(128), ezfio_filename ] write(command,*) 'echo 15 > /proc//'//trim(adjustl(pidc))//'/oom_adj' call system(command) + PROVIDE file_lock + END_PROVIDER BEGIN_PROVIDER [ character*(128), ezfio_work_dir ] diff --git a/src/fci/pt2.irp.f b/src/fci/pt2.irp.f index 6135864f..c916e0ef 100644 --- a/src/fci/pt2.irp.f +++ b/src/fci/pt2.irp.f @@ -43,8 +43,13 @@ subroutine run E_CI_before(:) = psi_energy(:) + nuclear_repulsion relative_error=PT2_relative_error - call ZMQ_pt2(psi_energy_with_nucl_rep,pt2,relative_error,error, variance, & - norm,0) ! Stochastic PT2 + if (do_pt2) then + call ZMQ_pt2(psi_energy_with_nucl_rep,pt2,relative_error,error, variance, & + norm,0) ! Stochastic PT2 + else + call ZMQ_selection(0, pt2, variance, norm) + endif + do k=1,N_states rpt2(k) = pt2(k)/(1.d0 + norm(k)) enddo diff --git a/src/nuclei/EZFIO.cfg b/src/nuclei/EZFIO.cfg index 7bcbf013..ebdcfead 100644 --- a/src/nuclei/EZFIO.cfg +++ b/src/nuclei/EZFIO.cfg @@ -21,7 +21,7 @@ type: double precision size: (nuclei.nucl_num,3) interface: ezfio -[disk_access_nuclear_repulsion] +[io_nuclear_repulsion] doc: Read/Write Nuclear Repulsion from/to disk [ Write | Read | None ] type: Disk_access interface: ezfio,provider,ocaml diff --git a/src/nuclei/nuclei.irp.f b/src/nuclei/nuclei.irp.f index c797ff30..88ee24e8 100644 --- a/src/nuclei/nuclei.irp.f +++ b/src/nuclei/nuclei.irp.f @@ -143,7 +143,7 @@ BEGIN_PROVIDER [ double precision, nuclear_repulsion ] END_DOC PROVIDE mpi_master nucl_coord nucl_charge nucl_num - if (disk_access_nuclear_repulsion.EQ.'Read') then + if (io_nuclear_repulsion == 'Read') then logical :: has if (mpi_master) then @@ -194,7 +194,7 @@ BEGIN_PROVIDER [ double precision, nuclear_repulsion ] call write_time(6) call write_double(6,nuclear_repulsion,'Nuclear repulsion energy') - if (disk_access_nuclear_repulsion.EQ.'Write') then + if (io_nuclear_repulsion == 'Write') then if (mpi_master) then call ezfio_set_nuclei_nuclear_repulsion(nuclear_repulsion) endif diff --git a/src/utils/c_funcs.c b/src/utils/c_funcs.c new file mode 100644 index 00000000..5b7035fb --- /dev/null +++ b/src/utils/c_funcs.c @@ -0,0 +1,6 @@ +#include + +void usleep_c(int s) +{ + usleep((useconds_t) s); +} diff --git a/src/utils/c_functions.f90 b/src/utils/c_functions.f90 new file mode 100644 index 00000000..425aafd6 --- /dev/null +++ b/src/utils/c_functions.f90 @@ -0,0 +1,21 @@ +module c_functions + use iso_c_binding + + interface + subroutine usleep_c(us) bind (C,name="usleep_c") + use iso_c_binding + integer(c_int), value :: us + end subroutine usleep_c + end interface + +end module + +subroutine usleep(us) + use c_functions + use iso_c_binding + implicit none + integer, intent(in) :: us + integer(c_int) :: u + u = us + call usleep_c(u) +end diff --git a/src/utils/memory.irp.f b/src/utils/memory.irp.f index f9e4bb69..3e077f97 100644 --- a/src/utils/memory.irp.f +++ b/src/utils/memory.irp.f @@ -15,6 +15,7 @@ BEGIN_PROVIDER [ integer, qp_max_mem ] END_PROVIDER subroutine resident_memory(value) + use c_functions implicit none BEGIN_DOC ! Returns the current used memory in gigabytes used by the current process. @@ -25,6 +26,8 @@ subroutine resident_memory(value) double precision, intent(out) :: value call omp_set_lock(file_lock) + call usleep(10) + value = 0.d0 iunit = getUnitAndOpen('/proc/self/status','r') do diff --git a/src/zmq/utils.irp.f b/src/zmq/utils.irp.f index 70f0830b..e76238ed 100644 --- a/src/zmq/utils.irp.f +++ b/src/zmq/utils.irp.f @@ -275,7 +275,6 @@ IRP_ENDIF rc = f77_zmq_bind(new_zmq_pull_socket, zmq_socket_pull_tcp_address) if (rc /= 0) then icount = icount-1 -! call sleep(3) zmq_socket_pull_tcp_address = 'tcp://*:'//zmq_port(2+icount*100)//' ' zmq_socket_push_tcp_address = trim(qp_run_address)//':'//zmq_port(2+icount*100)//' ' else @@ -752,7 +751,8 @@ integer function add_task_to_taskserver(zmq_to_qp_run_socket,task) add_task_to_taskserver = 0 - allocate(character(len=len(task)+10+len(zmq_state)) :: message) + sze = len(trim(task)) + len(trim(zmq_state))+11 + allocate(character(len=sze) :: message) message='add_task '//trim(zmq_state)//' '//trim(task) sze = len(message) rc = f77_zmq_send(zmq_to_qp_run_socket, message, sze, 0) @@ -768,6 +768,7 @@ integer function add_task_to_taskserver(zmq_to_qp_run_socket,task) add_task_to_taskserver = -1 return endif + deallocate(message) end