9
1
mirror of https://github.com/QuantumPackage/qp2.git synced 2024-12-22 03:23:29 +01:00

Merge branch 'dev' into dev-lcpq

This commit is contained in:
Anthony Scemama 2019-07-24 13:18:23 +02:00
commit 133a05c683
18 changed files with 137 additions and 67 deletions

View File

@ -2,20 +2,23 @@ GitHub Branches
=============== ===============
master: master:
The current up-to-date working branch, that users download It should The current up-to-date working branch, that users download. It should
only contain the latest release and bug fixes. only contain the latest stable release and bug fixes.
develop-lcpq: dev:
Toulouse development branch
develop-lct:
Paris development branch
develop:
It is a fork of the *master* branch with new developments that will be 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 merged in the *master* branch for the next release. Other development
branches should be merged on this one. 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: gh-pages:
This is an independent branch, containing only the web site of QP2. This is an independent branch, containing only the web site of QP2.

View File

@ -143,7 +143,7 @@ IRPF90
to Parameters (IRP) method. to Parameters (IRP) method.
* Download the latest version of IRPF90 * Download the latest version of IRPF90
here : `<https://github.com/scemama/irpf90/releases/latest>`_ and move here : `<https://gitlab.com/scemama/irpf90/-/archive/v1.7.2/irpf90-v1.7.2.tar.gz>`_ and move
the downloaded archive in the :file:`${QP_ROOT}/external` directory the downloaded archive in the :file:`${QP_ROOT}/external` directory
* Extract the archive and go into the :file:`irpf90-*` directory to run * Extract the archive and go into the :file:`irpf90-*` directory to run
@ -328,7 +328,7 @@ OCaml
echo ${QP_ROOT}/bin echo ${QP_ROOT}/bin
${QP_ROOT}/external/opam_installer.sh --no-backup --fresh ${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 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. use it as an answer to where :command:`opam` should be installed.
@ -337,7 +337,14 @@ OCaml
.. code:: bash .. 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` eval `${QP_ROOT}/bin/opam env`
* Install the required external OCaml libraries * Install the required external OCaml libraries

View File

@ -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)\ [*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\ 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 https://arxiv.org/abs/1902.08154
``` ```

View File

@ -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_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_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 potential_sr_xc_beta_ao_pbe --rename=potential_xc_beta_ao_sr_pbe
qp_name disk_access_nuclear_repulsion --rename=io_nuclear_repulsion

18
configure vendored
View File

@ -297,27 +297,37 @@ EOF
${QP_ROOT}/bin ${QP_ROOT}/bin
EOF EOF
rm ${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 source ${OPAMROOT}/opam-init/init.sh > /dev/null 2> /dev/null || true
${QP_ROOT}/bin/opam init --verbose --yes opam switch create ocaml-base-compiler.4.07.1
opam init --verbose --yes --compiler=4.07.1 --disable-sandboxing
eval $(${QP_ROOT}/bin/opam env) eval $(opam env)
opam install -y ${OCAML_PACKAGES} || exit 1 opam install -y ${OCAML_PACKAGES} || exit 1
else else
# Conventional commands # Conventional commands
execute << EOF execute << EOF
chmod +x "\${QP_ROOT}"/external/opam_installer.sh 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 rm --force \${QP_ROOT}/bin/opam
export OPAMROOT=\${OPAMROOT:-\${QP_ROOT}/external/opam} export OPAMROOT=\${OPAMROOT:-\${QP_ROOT}/external/opam}
echo \${QP_ROOT}/bin \ echo \${QP_ROOT}/bin \
| sh \${QP_ROOT}/external/opam_installer.sh | sh \${QP_ROOT}/external/opam_installer.sh
EOF
rm \${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 source \${OPAMROOT}/opam-init/init.sh > /dev/null 2> /dev/null || true
\${QP_ROOT}/bin/opam init --verbose --yes opam switch create ocaml-base-compiler.4.07.1 || exit 1
eval \$(\${QP_ROOT}/bin/opam env) opam init --verbose --yes --compiler=4.07.1 --disable-sandboxing
eval $(opam env)
EOF
execute << EOF
opam install -y \${OCAML_PACKAGES} || exit 1 opam install -y \${OCAML_PACKAGES} || exit 1
EOF EOF
fi fi

View File

@ -1,4 +1,14 @@
%%% ARXIV TO BE UPDATED %%% %%% 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},
title = {{Chemically Accurate Excitation Energies With Small Basis Sets}},
journal = {arXiv},
year = {2019},
month = {Jul},
eprint = {1907.01245},
url = {https://arxiv.org/abs/1907.01245}
}
@article{Dash2019May, @article{Dash2019May,
author = {Dash, Monika and Feldt, Jonas and Moroni, Saverio and Scemama, Anthony and Filippi, Claudia}, 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}}, title = {{Excited states with selected CI-QMC: chemically accurate excitation energies and geometries}},

View File

@ -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: 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_kinetic_integrals` which are the kinetic operator integrals on the |AO| basis
* `ao_nucl_elec_integral` which are the nuclear-elctron operator integrals on the |AO| basis (see :file:`pot_ao_ints.irp.f`) * `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 (see :file:`ao_mono_ints.irp.f`) * `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`.

View File

@ -148,7 +148,7 @@ subroutine run_pt2_slave_small(thread,iproc,energy)
integer, external :: disconnect_from_taskserver integer, external :: disconnect_from_taskserver
do i=1,300 do i=1,300
if (disconnect_from_taskserver(zmq_to_qp_run_socket,worker_id) /= -2) exit if (disconnect_from_taskserver(zmq_to_qp_run_socket,worker_id) /= -2) exit
call sleep(1) call usleep(500)
print *, 'Retry disconnect...' print *, 'Retry disconnect...'
end do end do

View File

@ -74,7 +74,7 @@ subroutine run_selection_slave(thread,iproc,energy)
if(done .or. ctask == size(task_id)) then if(done .or. ctask == size(task_id)) then
do i=1, ctask do i=1, ctask
if (task_done_to_taskserver(zmq_to_qp_run_socket,worker_id,task_id(i)) == -1) then 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 if (task_done_to_taskserver(zmq_to_qp_run_socket,worker_id,task_id(i)) == -1) then
ctask = 0 ctask = 0
done = .true. done = .true.
@ -85,6 +85,7 @@ subroutine run_selection_slave(thread,iproc,energy)
if(ctask > 0) then if(ctask > 0) then
call sort_selection_buffer(buf) call sort_selection_buffer(buf)
! call merge_selection_buffers(buf,buf2) ! 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) call push_selection_results(zmq_socket_push, pt2, variance, norm, buf, task_id(1), ctask)
! buf%mini = buf2%mini ! buf%mini = buf2%mini
pt2(:) = 0d0 pt2(:) = 0d0
@ -132,7 +133,6 @@ subroutine push_selection_results(zmq_socket_push, pt2, variance, norm, b, task_
print *, 'f77_zmq_send( zmq_socket_push, b%cur, 4, ZMQ_SNDMORE)' print *, 'f77_zmq_send( zmq_socket_push, b%cur, 4, ZMQ_SNDMORE)'
endif endif
if (b%cur > 0) then
rc = f77_zmq_send( zmq_socket_push, pt2, 8*N_states, ZMQ_SNDMORE) rc = f77_zmq_send( zmq_socket_push, pt2, 8*N_states, ZMQ_SNDMORE)
if(rc /= 8*N_states) then if(rc /= 8*N_states) then
@ -149,6 +149,8 @@ subroutine push_selection_results(zmq_socket_push, pt2, variance, norm, b, task_
print *, 'f77_zmq_send( zmq_socket_push, norm, 8*N_states, ZMQ_SNDMORE)' print *, 'f77_zmq_send( zmq_socket_push, norm, 8*N_states, ZMQ_SNDMORE)'
endif endif
if (b%cur > 0) then
rc = f77_zmq_send( zmq_socket_push, b%val(1), 8*b%cur, ZMQ_SNDMORE) rc = f77_zmq_send( zmq_socket_push, b%val(1), 8*b%cur, ZMQ_SNDMORE)
if(rc /= 8*b%cur) then if(rc /= 8*b%cur) then
print *, 'f77_zmq_send( zmq_socket_push, b%val(1), 8*b%cur, ZMQ_SNDMORE)' print *, 'f77_zmq_send( zmq_socket_push, b%val(1), 8*b%cur, ZMQ_SNDMORE)'
@ -203,7 +205,10 @@ subroutine pull_selection_results(zmq_socket_pull, pt2, variance, norm, val, det
print *, 'f77_zmq_recv( zmq_socket_pull, N, 4, 0)' print *, 'f77_zmq_recv( zmq_socket_pull, N, 4, 0)'
endif endif
if (N>0) then pt2(:) = 0.d0
variance(:) = 0.d0
norm(:) = 0.d0
rc = f77_zmq_recv( zmq_socket_pull, pt2, N_states*8, 0) rc = f77_zmq_recv( zmq_socket_pull, pt2, N_states*8, 0)
if(rc /= 8*N_states) then if(rc /= 8*N_states) then
print *, 'f77_zmq_recv( zmq_socket_pull, pt2, N_states*8, 0)' print *, 'f77_zmq_recv( zmq_socket_pull, pt2, N_states*8, 0)'
@ -219,6 +224,7 @@ subroutine pull_selection_results(zmq_socket_pull, pt2, variance, norm, val, det
print *, 'f77_zmq_recv( zmq_socket_pull, norm, N_states*8, 0)' print *, 'f77_zmq_recv( zmq_socket_pull, norm, N_states*8, 0)'
endif endif
if (N>0) then
rc = f77_zmq_recv( zmq_socket_pull, val(1), 8*N, 0) rc = f77_zmq_recv( zmq_socket_pull, val(1), 8*N, 0)
if(rc /= 8*N) then if(rc /= 8*N) then
print *, 'f77_zmq_recv( zmq_socket_pull, val(1), 8*N, 0)' print *, 'f77_zmq_recv( zmq_socket_pull, val(1), 8*N, 0)'
@ -228,10 +234,6 @@ subroutine pull_selection_results(zmq_socket_pull, pt2, variance, norm, val, det
if(rc /= bit_kind*N_int*2*N) then 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)' print *, 'f77_zmq_recv( zmq_socket_pull, det(1,1,1), bit_kind*N_int*2*N, 0)'
endif endif
else
pt2(:) = 0.d0
variance(:) = 0.d0
norm(:) = 0.d0
endif endif
rc = f77_zmq_recv( zmq_socket_pull, ntask, 4, 0) rc = f77_zmq_recv( zmq_socket_pull, ntask, 4, 0)

View File

@ -63,7 +63,7 @@ subroutine run_slave_main
if (mpi_master) then if (mpi_master) then
call wait_for_states(states,zmq_state,size(states)) call wait_for_states(states,zmq_state,size(states))
if (zmq_state(1:64) == old_state(1:64)) then if (zmq_state(1:64) == old_state(1:64)) then
call sleep(1) call usleep(200)
cycle cycle
else else
old_state(1:64) = zmq_state(1:64) old_state(1:64) = zmq_state(1:64)

View File

@ -39,6 +39,8 @@ BEGIN_PROVIDER [ character*(128), ezfio_filename ]
write(command,*) 'echo 15 > /proc//'//trim(adjustl(pidc))//'/oom_adj' write(command,*) 'echo 15 > /proc//'//trim(adjustl(pidc))//'/oom_adj'
call system(command) call system(command)
PROVIDE file_lock
END_PROVIDER END_PROVIDER
BEGIN_PROVIDER [ character*(128), ezfio_work_dir ] BEGIN_PROVIDER [ character*(128), ezfio_work_dir ]

View File

@ -43,8 +43,13 @@ subroutine run
E_CI_before(:) = psi_energy(:) + nuclear_repulsion E_CI_before(:) = psi_energy(:) + nuclear_repulsion
relative_error=PT2_relative_error relative_error=PT2_relative_error
if (do_pt2) then
call ZMQ_pt2(psi_energy_with_nucl_rep,pt2,relative_error,error, variance, & call ZMQ_pt2(psi_energy_with_nucl_rep,pt2,relative_error,error, variance, &
norm,0) ! Stochastic PT2 norm,0) ! Stochastic PT2
else
call ZMQ_selection(0, pt2, variance, norm)
endif
do k=1,N_states do k=1,N_states
rpt2(k) = pt2(k)/(1.d0 + norm(k)) rpt2(k) = pt2(k)/(1.d0 + norm(k))
enddo enddo

View File

@ -21,7 +21,7 @@ type: double precision
size: (nuclei.nucl_num,3) size: (nuclei.nucl_num,3)
interface: ezfio interface: ezfio
[disk_access_nuclear_repulsion] [io_nuclear_repulsion]
doc: Read/Write Nuclear Repulsion from/to disk [ Write | Read | None ] doc: Read/Write Nuclear Repulsion from/to disk [ Write | Read | None ]
type: Disk_access type: Disk_access
interface: ezfio,provider,ocaml interface: ezfio,provider,ocaml

View File

@ -143,7 +143,7 @@ BEGIN_PROVIDER [ double precision, nuclear_repulsion ]
END_DOC END_DOC
PROVIDE mpi_master nucl_coord nucl_charge nucl_num 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 logical :: has
if (mpi_master) then if (mpi_master) then
@ -194,7 +194,7 @@ BEGIN_PROVIDER [ double precision, nuclear_repulsion ]
call write_time(6) call write_time(6)
call write_double(6,nuclear_repulsion,'Nuclear repulsion energy') 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 if (mpi_master) then
call ezfio_set_nuclei_nuclear_repulsion(nuclear_repulsion) call ezfio_set_nuclei_nuclear_repulsion(nuclear_repulsion)
endif endif

6
src/utils/c_funcs.c Normal file
View File

@ -0,0 +1,6 @@
#include <unistd.h>
void usleep_c(int s)
{
usleep((useconds_t) s);
}

21
src/utils/c_functions.f90 Normal file
View File

@ -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

View File

@ -15,6 +15,7 @@ BEGIN_PROVIDER [ integer, qp_max_mem ]
END_PROVIDER END_PROVIDER
subroutine resident_memory(value) subroutine resident_memory(value)
use c_functions
implicit none implicit none
BEGIN_DOC BEGIN_DOC
! Returns the current used memory in gigabytes used by the current process. ! 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 double precision, intent(out) :: value
call omp_set_lock(file_lock) call omp_set_lock(file_lock)
call usleep(10)
value = 0.d0 value = 0.d0
iunit = getUnitAndOpen('/proc/self/status','r') iunit = getUnitAndOpen('/proc/self/status','r')
do do

View File

@ -275,7 +275,6 @@ IRP_ENDIF
rc = f77_zmq_bind(new_zmq_pull_socket, zmq_socket_pull_tcp_address) rc = f77_zmq_bind(new_zmq_pull_socket, zmq_socket_pull_tcp_address)
if (rc /= 0) then if (rc /= 0) then
icount = icount-1 icount = icount-1
! call sleep(3)
zmq_socket_pull_tcp_address = 'tcp://*:'//zmq_port(2+icount*100)//' ' 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)//' ' zmq_socket_push_tcp_address = trim(qp_run_address)//':'//zmq_port(2+icount*100)//' '
else else
@ -752,7 +751,8 @@ integer function add_task_to_taskserver(zmq_to_qp_run_socket,task)
add_task_to_taskserver = 0 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) message='add_task '//trim(zmq_state)//' '//trim(task)
sze = len(message) sze = len(message)
rc = f77_zmq_send(zmq_to_qp_run_socket, message, sze, 0) 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 add_task_to_taskserver = -1
return return
endif endif
deallocate(message)
end end