mirror of
https://github.com/QuantumPackage/qp2.git
synced 2024-12-22 12:23:43 +01:00
Merge branch 'dev' into dev-lcpq
This commit is contained in:
commit
133a05c683
21
GITHUB.md
21
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.
|
||||
|
||||
|
13
INSTALL.rst
13
INSTALL.rst
@ -143,7 +143,7 @@ IRPF90
|
||||
to Parameters (IRP) method.
|
||||
|
||||
* 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
|
||||
|
||||
* Extract the archive and go into the :file:`irpf90-*` directory to run
|
||||
@ -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
|
||||
|
@ -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
|
||||
|
||||
```
|
||||
|
1
REPLACE
1
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
|
||||
|
22
configure
vendored
22
configure
vendored
@ -297,27 +297,37 @@ EOF
|
||||
${QP_ROOT}/bin
|
||||
|
||||
|
||||
|
||||
EOF
|
||||
|
||||
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
|
||||
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
|
||||
|
||||
else
|
||||
# Conventional commands
|
||||
execute << EOF
|
||||
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 \${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
|
||||
eval \$(\${QP_ROOT}/bin/opam env)
|
||||
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)
|
||||
EOF
|
||||
execute << EOF
|
||||
opam install -y \${OCAML_PACKAGES} || exit 1
|
||||
EOF
|
||||
fi
|
||||
|
@ -1,4 +1,14 @@
|
||||
%%% 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,
|
||||
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}},
|
||||
|
@ -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`.
|
||||
|
@ -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
|
||||
|
||||
|
@ -74,7 +74,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.
|
||||
@ -85,6 +85,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
|
||||
@ -132,23 +133,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)'
|
||||
@ -203,22 +205,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)'
|
||||
@ -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
|
||||
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)
|
||||
|
@ -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)
|
||||
|
@ -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 ]
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
6
src/utils/c_funcs.c
Normal file
6
src/utils/c_funcs.c
Normal 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
21
src/utils/c_functions.f90
Normal 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
|
@ -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
|
||||
|
@ -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
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user