10
0
mirror of https://github.com/LCPQ/quantum_package synced 2024-09-27 03:51:01 +02:00
This commit is contained in:
Emmanuel Giner 2019-01-14 07:29:13 +01:00
commit 218ccae739
52 changed files with 921 additions and 821 deletions

13
TODO
View File

@ -55,12 +55,17 @@ Refaire les benchmarks
# Documentation de qpsh # Documentation de qpsh
# Documentation de /etc # Documentation de /etc
# Extrapolation qui prend aussi en compe la variance
# Parler dans le papier de rPT2
# Toto # Toto
Selection d'etats avec qp_edit --state
singles_alpha_csc_idx, singles_alpha_size | git diff
Environment variables dans qp_run (prefix,etc)
Si un provider est un programme, generer une page a lui tout seul avec le man Si un provider est un programme, generer une page a lui tout seul avec le man
Options obligatoires dans Command_line.ml Options obligatoires dans Command_line.ml
Documentation des commandes a updater
# Completion foireuse:
qp create_ezfio_from_xyz -b 6-31g ./<Tab>
qp create_ezfio_from_xyz -b <Tab>
# Verifier la doc des commandes avec les options - et --

14
bin/qpsh Executable file
View File

@ -0,0 +1,14 @@
#!/bin/bash
export QP_ROOT=$(dirname $0)/..
exec bash --init-file <(cat << EOF
[[ -f \${HOME}/.bashrc ]] && source \${HOME}/.bashrc
source \${QP_ROOT}/quantum_package.rc
qp prompt
EOF
)

16
configure vendored
View File

@ -3,7 +3,7 @@
# Quantum Package configuration script # Quantum Package configuration script
# #
export QP_ROOT="$( cd "$(dirname "$0")" ; pwd --physical )" export QP_ROOT="$( cd "$(dirname "$0")" ; pwd -P )"
echo "QP_ROOT="$QP_ROOT echo "QP_ROOT="$QP_ROOT
@ -61,7 +61,7 @@ done
# Trim leading and trailing spaces # Trim leading and trailing spaces
PACKAGES=$(echo $PACKAGES | xargs) PACKAGES=$(echo $PACKAGES | xargs)
echo "export QP_ROOT=\"$QP_ROOT\"" > ${QP_ROOT}/etc/00.qp_root echo "export QP_ROOT=\"$QP_ROOT\"" > ${QP_ROOT}/etc/00.qp_root.rc
source quantum_package.rc source quantum_package.rc
@ -149,6 +149,7 @@ for PACKAGE in ${PACKAGES} ; do
elif [[ ${PACKAGE} = irpf90 ]] ; then elif [[ ${PACKAGE} = irpf90 ]] ; then
# When changing version of irpf90, don't forget to update etc/irpf90.rc
download \ download \
"https://gitlab.com/scemama/irpf90/-/archive/v1.7.4/irpf90-v1.7.4.tar.gz" \ "https://gitlab.com/scemama/irpf90/-/archive/v1.7.4/irpf90-v1.7.4.tar.gz" \
"${QP_ROOT}"/external/irpf90.tar.gz "${QP_ROOT}"/external/irpf90.tar.gz
@ -158,15 +159,6 @@ for PACKAGE in ${PACKAGES} ; do
rm irpf90.tar.gz rm irpf90.tar.gz
cd irpf90-* cd irpf90-*
make make
for i in irpf90 irpman irpf90_indent
do
cat << EOF > "${QP_ROOT}"/bin/$i
#!/bin/sh
exec $PWD/bin/$i \$@
EOF
chmod +x "${QP_ROOT}"/bin/$i
done
) )
@ -234,7 +226,7 @@ EOF
--yes --comp=4.07.0 --yes --comp=4.07.0
eval $(${QP_ROOT}/bin/opam env) eval $(${QP_ROOT}/bin/opam env)
opam install -y ${OCAML_PACKAGES} opam install -y ${OCAML_PACKAGES} || exit 1
elif [[ ${PACKAGE} = ezfio ]] ; then elif [[ ${PACKAGE} = ezfio ]] ; then

View File

@ -517,48 +517,6 @@ Subroutines / functions
.. c:function:: get_m0
.. code:: text
subroutine get_m0(gen, phasemask, bannedOrb, vect, mask, h, p, sp, coefs)
File: :file:`selection.irp.f`
.. c:function:: get_m1
.. code:: text
subroutine get_m1(gen, phasemask, bannedOrb, vect, mask, h, p, sp, coefs)
File: :file:`selection.irp.f`
.. c:function:: get_m2
.. code:: text
subroutine get_m2(gen, phasemask, bannedOrb, vect, mask, h, p, sp, coefs)
File: :file:`selection.irp.f`
.. c:function:: get_mask_phase .. c:function:: get_mask_phase
.. code:: text .. code:: text

View File

@ -449,7 +449,7 @@ Subroutines / functions
subroutine H_S2_u_0_nstates_openmp_work_1(v_t,s_t,u_t,N_st,sze,istart,iend,ishift,istep) subroutine H_S2_u_0_nstates_openmp_work_1(v_t,s_t,u_t,N_st,sze,istart,iend,ishift,istep)
File: :file:`u0_h_u0.irp.f_template_477` File: :file:`u0_h_u0.irp.f_template_576`
Computes :math:`v_t = H|u_t angle` and :math:`s_t = S^2 |u_t angle` Computes :math:`v_t = H|u_t angle` and :math:`s_t = S^2 |u_t angle`
@ -465,7 +465,7 @@ Subroutines / functions
subroutine H_S2_u_0_nstates_openmp_work_2(v_t,s_t,u_t,N_st,sze,istart,iend,ishift,istep) subroutine H_S2_u_0_nstates_openmp_work_2(v_t,s_t,u_t,N_st,sze,istart,iend,ishift,istep)
File: :file:`u0_h_u0.irp.f_template_477` File: :file:`u0_h_u0.irp.f_template_576`
Computes :math:`v_t = H|u_t angle` and :math:`s_t = S^2 |u_t angle` Computes :math:`v_t = H|u_t angle` and :math:`s_t = S^2 |u_t angle`
@ -481,7 +481,7 @@ Subroutines / functions
subroutine H_S2_u_0_nstates_openmp_work_3(v_t,s_t,u_t,N_st,sze,istart,iend,ishift,istep) subroutine H_S2_u_0_nstates_openmp_work_3(v_t,s_t,u_t,N_st,sze,istart,iend,ishift,istep)
File: :file:`u0_h_u0.irp.f_template_477` File: :file:`u0_h_u0.irp.f_template_576`
Computes :math:`v_t = H|u_t angle` and :math:`s_t = S^2 |u_t angle` Computes :math:`v_t = H|u_t angle` and :math:`s_t = S^2 |u_t angle`
@ -497,7 +497,7 @@ Subroutines / functions
subroutine H_S2_u_0_nstates_openmp_work_4(v_t,s_t,u_t,N_st,sze,istart,iend,ishift,istep) subroutine H_S2_u_0_nstates_openmp_work_4(v_t,s_t,u_t,N_st,sze,istart,iend,ishift,istep)
File: :file:`u0_h_u0.irp.f_template_477` File: :file:`u0_h_u0.irp.f_template_576`
Computes :math:`v_t = H|u_t angle` and :math:`s_t = S^2 |u_t angle` Computes :math:`v_t = H|u_t angle` and :math:`s_t = S^2 |u_t angle`
@ -513,7 +513,7 @@ Subroutines / functions
subroutine H_S2_u_0_nstates_openmp_work_N_int(v_t,s_t,u_t,N_st,sze,istart,iend,ishift,istep) subroutine H_S2_u_0_nstates_openmp_work_N_int(v_t,s_t,u_t,N_st,sze,istart,iend,ishift,istep)
File: :file:`u0_h_u0.irp.f_template_477` File: :file:`u0_h_u0.irp.f_template_576`
Computes :math:`v_t = H|u_t angle` and :math:`s_t = S^2 |u_t angle` Computes :math:`v_t = H|u_t angle` and :math:`s_t = S^2 |u_t angle`

View File

@ -199,7 +199,7 @@ Providers
Norm of the :math:`\alpha` and :math:`\beta` spin determinants in the wave function: Norm of the :math:`\alpha` and :math:`\beta` spin determinants in the wave function:
||Da||_i \sum_j C_{ij}**2 :math:`||D_\alpha||_i = \sum_j C_{ij}^2`
@ -215,7 +215,7 @@ Providers
Norm of the :math:`\alpha` and :math:`\beta` spin determinants in the wave function: Norm of the :math:`\alpha` and :math:`\beta` spin determinants in the wave function:
||Da||_i \sum_j C_{ij}**2 :math:`||D_\alpha||_i = \sum_j C_{ij}^2`
@ -451,7 +451,7 @@ Providers
integer(bit_kind), allocatable :: psi_det_alpha_unique (N_int,psi_det_size) integer(bit_kind), allocatable :: psi_det_alpha_unique (N_int,psi_det_size)
integer :: n_det_alpha_unique integer :: n_det_alpha_unique
File: :file:`spindeterminants.irp.f_template_143` File: :file:`spindeterminants.irp.f_template_144`
Unique :math:`\alpha` determinants Unique :math:`\alpha` determinants
@ -465,7 +465,7 @@ Providers
integer(bit_kind), allocatable :: psi_det_beta_unique (N_int,psi_det_size) integer(bit_kind), allocatable :: psi_det_beta_unique (N_int,psi_det_size)
integer :: n_det_beta_unique integer :: n_det_beta_unique
File: :file:`spindeterminants.irp.f_template_143` File: :file:`spindeterminants.irp.f_template_144`
Unique :math:`\beta` determinants Unique :math:`\beta` determinants
@ -769,9 +769,9 @@ Providers
File: :file:`spindeterminants.irp.f` File: :file:`spindeterminants.irp.f`
Sparse coefficient matrix if the wave function is expressed in a bilinear form : D_a^t C D_b Sparse coefficient matrix if the wave function is expressed in a bilinear form : :math:`D_\alpha^\dagger.C.D_\beta`
Rows are :math:`\alpha` determinants and columns are :math:`\beta.` Rows are :math:`\alpha` determinants and columns are :math:`\beta` .
Order refers to psi_det Order refers to psi_det
@ -790,9 +790,9 @@ Providers
:math:`D_\alpha^\dagger.C.D_\beta` :math:`D_\alpha^\dagger.C.D_\beta`
Rows are :math:`\alpha` determinants and columns are :math:`\beta.` Rows are :math:`\alpha` determinants and columns are :math:`\beta` .
Order refers to psi_det Order refers to :c:data:`psi_det`
@ -808,9 +808,9 @@ Providers
File: :file:`spindeterminants.irp.f` File: :file:`spindeterminants.irp.f`
Sparse coefficient matrix if the wave function is expressed in a bilinear form : D_a^t C D_b Sparse coefficient matrix if the wave function is expressed in a bilinear form : :math:`D_\alpha^\dagger.C.D_\beta`
Rows are :math:`\alpha` determinants and columns are :math:`\beta.` Rows are :math:`\alpha` determinants and columns are :math:`\beta` .
Order refers to psi_det Order refers to psi_det
@ -825,7 +825,7 @@ Providers
File: :file:`spindeterminants.irp.f` File: :file:`spindeterminants.irp.f`
Order which allows to go from psi_bilinear_matrix to psi_det Order which allows to go from :c:data:`psi_bilinear_matrix` to :c:data:`psi_det`
@ -838,7 +838,7 @@ Providers
File: :file:`spindeterminants.irp.f` File: :file:`spindeterminants.irp.f`
Order which allows to go from psi_bilinear_matrix_order_transp to psi_bilinear_matrix Order which allows to go from :c:data:`psi_bilinear_matrix_order_transp` to :c:data:`psi_bilinear_matrix`
@ -854,9 +854,9 @@ Providers
File: :file:`spindeterminants.irp.f` File: :file:`spindeterminants.irp.f`
Sparse coefficient matrix if the wave function is expressed in a bilinear form : D_a^t C D_b Sparse coefficient matrix if the wave function is expressed in a bilinear form : :math:`D_\alpha^\dagger.C.D_\beta`
Rows are :math:`\alpha` determinants and columns are :math:`\beta.` Rows are :math:`\alpha` determinants and columns are :math:`\beta` .
Order refers to psi_det Order refers to psi_det
@ -874,11 +874,11 @@ Providers
File: :file:`spindeterminants.irp.f` File: :file:`spindeterminants.irp.f`
Transpose of psi_bilinear_matrix Transpose of :c:data:`psi_bilinear_matrix`
:math:`D_\beta^\dagger.C^\dagger.D_\alpha` :math:`D_\beta^\dagger.C^\dagger.D_\alpha`
Rows are :math:`\alpha` determinants and columns are :math:`\beta` , but the matrix is stored in row major format Rows are :math:`\alpha` determinants and columns are :math:`\beta` , but the matrix is stored in row major format.
@ -894,11 +894,11 @@ Providers
File: :file:`spindeterminants.irp.f` File: :file:`spindeterminants.irp.f`
Transpose of psi_bilinear_matrix Transpose of :c:data:`psi_bilinear_matrix`
:math:`D_\beta^\dagger.C^\dagger.D_\alpha` :math:`D_\beta^\dagger.C^\dagger.D_\alpha`
Rows are :math:`\alpha` determinants and columns are :math:`\beta` , but the matrix is stored in row major format Rows are :math:`\alpha` determinants and columns are :math:`\beta` , but the matrix is stored in row major format.
@ -914,11 +914,11 @@ Providers
File: :file:`spindeterminants.irp.f` File: :file:`spindeterminants.irp.f`
Transpose of psi_bilinear_matrix Transpose of :c:data:`psi_bilinear_matrix`
:math:`D_\beta^\dagger.C^\dagger.D_\alpha` :math:`D_\beta^\dagger.C^\dagger.D_\alpha`
Rows are :math:`\alpha` determinants and columns are :math:`\beta` , but the matrix is stored in row major format Rows are :math:`\alpha` determinants and columns are :math:`\beta` , but the matrix is stored in row major format.
@ -931,7 +931,7 @@ Providers
File: :file:`spindeterminants.irp.f` File: :file:`spindeterminants.irp.f`
Location of the columns in the psi_bilinear_matrix Location of the columns in the :c:data:`psi_bilinear_matrix`
@ -947,11 +947,11 @@ Providers
File: :file:`spindeterminants.irp.f` File: :file:`spindeterminants.irp.f`
Transpose of psi_bilinear_matrix Transpose of :c:data:`psi_bilinear_matrix`
:math:`D_\beta^\dagger.C^\dagger.D_\alpha` :math:`D_\beta^\dagger.C^\dagger.D_\alpha`
Rows are :math:`\alpha` determinants and columns are :math:`\beta` , but the matrix is stored in row major format Rows are :math:`\alpha` determinants and columns are :math:`\beta` , but the matrix is stored in row major format.
@ -967,9 +967,9 @@ Providers
File: :file:`spindeterminants.irp.f` File: :file:`spindeterminants.irp.f`
Sparse coefficient matrix if the wave function is expressed in a bilinear form : D_a^t C D_b Sparse coefficient matrix if the wave function is expressed in a bilinear form : :math:`D_\alpha^\dagger.C.D_\beta`
Rows are :math:`\alpha` determinants and columns are :math:`\beta.` Rows are :math:`\alpha` determinants and columns are :math:`\beta` .
Order refers to psi_det Order refers to psi_det
@ -1187,7 +1187,7 @@ Providers
integer(bit_kind), allocatable :: psi_det_alpha_unique (N_int,psi_det_size) integer(bit_kind), allocatable :: psi_det_alpha_unique (N_int,psi_det_size)
integer :: n_det_alpha_unique integer :: n_det_alpha_unique
File: :file:`spindeterminants.irp.f_template_143` File: :file:`spindeterminants.irp.f_template_144`
Unique :math:`\alpha` determinants Unique :math:`\alpha` determinants
@ -1214,7 +1214,7 @@ Providers
integer(bit_kind), allocatable :: psi_det_beta_unique (N_int,psi_det_size) integer(bit_kind), allocatable :: psi_det_beta_unique (N_int,psi_det_size)
integer :: n_det_beta_unique integer :: n_det_beta_unique
File: :file:`spindeterminants.irp.f_template_143` File: :file:`spindeterminants.irp.f_template_144`
Unique :math:`\beta` determinants Unique :math:`\beta` determinants
@ -1582,7 +1582,7 @@ Providers
File: :file:`spindeterminants.irp.f` File: :file:`spindeterminants.irp.f`
Dimension of the singles_alpha array Indices of all single excitations
@ -1596,7 +1596,9 @@ Providers
File: :file:`spindeterminants.irp.f` File: :file:`spindeterminants.irp.f`
Dimension of the singles_alpha array singles_alpha_csc_size : Dimension of the :c:data:`singles_alpha_csc` array
singles_alpha_csc_idx : Index where the single excitations of determinant i start
@ -1610,20 +1612,54 @@ Providers
File: :file:`spindeterminants.irp.f` File: :file:`spindeterminants.irp.f`
Dimension of the singles_alpha array singles_alpha_csc_size : Dimension of the :c:data:`singles_alpha_csc` array
singles_alpha_csc_idx : Index where the single excitations of determinant i start
.. c:var:: singles_alpha_size .. c:var:: singles_beta_csc
.. code:: text .. code:: text
integer :: singles_alpha_size integer, allocatable :: singles_beta_csc (singles_beta_csc_size)
File: :file:`spindeterminants.irp.f` File: :file:`spindeterminants.irp.f`
Dimension of the singles_alpha array Indices of all single excitations
.. c:var:: singles_beta_csc_idx
.. code:: text
integer*8, allocatable :: singles_beta_csc_idx (N_det_beta_unique+1)
integer*8 :: singles_beta_csc_size
File: :file:`spindeterminants.irp.f`
singles_beta_csc_size : Dimension of the :c:data:`singles_beta_csc` array
singles_beta_csc_idx : Index where the single excitations of determinant i start
.. c:var:: singles_beta_csc_size
.. code:: text
integer*8, allocatable :: singles_beta_csc_idx (N_det_beta_unique+1)
integer*8 :: singles_beta_csc_size
File: :file:`spindeterminants.irp.f`
singles_beta_csc_size : Dimension of the :c:data:`singles_beta_csc` array
singles_beta_csc_idx : Index where the single excitations of determinant i start
@ -1901,7 +1937,7 @@ Subroutines / functions
File: :file:`spindeterminants.irp.f` File: :file:`spindeterminants.irp.f`
Overwrites psi_det and psi_coef with the wf in bilinear order Overwrites :c:data:`psi_det` and :c:data:`psi_coef` with the wave function in bilinear order
@ -1957,7 +1993,7 @@ Subroutines / functions
File: :file:`spindeterminants.irp.f` File: :file:`spindeterminants.irp.f`
Generate a wave function containing all possible products of :math:`\alpha` and :math:`\beta` determinants Generates a wave function containing all possible products of :math:`\alpha` and :math:`\beta` determinants
@ -2261,7 +2297,7 @@ Subroutines / functions
File: :file:`spindeterminants.irp.f` File: :file:`spindeterminants.irp.f`
Create a wave function from all possible :math:`\alpha \times \beta` determinants Creates a wave function from all possible :math:`\alpha \times \beta` determinants
@ -2309,7 +2345,7 @@ Subroutines / functions
subroutine get_all_spin_doubles_2(buffer, idx, spindet, size_buffer, doubles, n_doubles) subroutine get_all_spin_doubles_2(buffer, idx, spindet, size_buffer, doubles, n_doubles)
File: :file:`spindeterminants.irp.f_template_1221` File: :file:`spindeterminants.irp.f_template_1291`
@ -2327,7 +2363,7 @@ Subroutines / functions
subroutine get_all_spin_doubles_3(buffer, idx, spindet, size_buffer, doubles, n_doubles) subroutine get_all_spin_doubles_3(buffer, idx, spindet, size_buffer, doubles, n_doubles)
File: :file:`spindeterminants.irp.f_template_1221` File: :file:`spindeterminants.irp.f_template_1291`
@ -2345,7 +2381,7 @@ Subroutines / functions
subroutine get_all_spin_doubles_4(buffer, idx, spindet, size_buffer, doubles, n_doubles) subroutine get_all_spin_doubles_4(buffer, idx, spindet, size_buffer, doubles, n_doubles)
File: :file:`spindeterminants.irp.f_template_1221` File: :file:`spindeterminants.irp.f_template_1291`
@ -2363,7 +2399,7 @@ Subroutines / functions
subroutine get_all_spin_doubles_N_int(buffer, idx, spindet, size_buffer, doubles, n_doubles) subroutine get_all_spin_doubles_N_int(buffer, idx, spindet, size_buffer, doubles, n_doubles)
File: :file:`spindeterminants.irp.f_template_1221` File: :file:`spindeterminants.irp.f_template_1291`
@ -2417,7 +2453,7 @@ Subroutines / functions
subroutine get_all_spin_singles_2(buffer, idx, spindet, size_buffer, singles, n_singles) subroutine get_all_spin_singles_2(buffer, idx, spindet, size_buffer, singles, n_singles)
File: :file:`spindeterminants.irp.f_template_1221` File: :file:`spindeterminants.irp.f_template_1291`
@ -2435,7 +2471,7 @@ Subroutines / functions
subroutine get_all_spin_singles_3(buffer, idx, spindet, size_buffer, singles, n_singles) subroutine get_all_spin_singles_3(buffer, idx, spindet, size_buffer, singles, n_singles)
File: :file:`spindeterminants.irp.f_template_1221` File: :file:`spindeterminants.irp.f_template_1291`
@ -2453,7 +2489,7 @@ Subroutines / functions
subroutine get_all_spin_singles_4(buffer, idx, spindet, size_buffer, singles, n_singles) subroutine get_all_spin_singles_4(buffer, idx, spindet, size_buffer, singles, n_singles)
File: :file:`spindeterminants.irp.f_template_1221` File: :file:`spindeterminants.irp.f_template_1291`
@ -2477,7 +2513,7 @@ Subroutines / functions
Returns the indices of all the single and double excitations in the list of unique :math:`\alpha` determinants. Returns the indices of all the single and double excitations in the list of unique :math:`\alpha` determinants.
/!\ : The buffer is transposed ! Warning: The buffer is transposed.
@ -2511,7 +2547,7 @@ Subroutines / functions
subroutine get_all_spin_singles_and_doubles_2(buffer, idx, spindet, size_buffer, singles, doubles, n_singles, n_doubles) subroutine get_all_spin_singles_and_doubles_2(buffer, idx, spindet, size_buffer, singles, doubles, n_singles, n_doubles)
File: :file:`spindeterminants.irp.f_template_1221` File: :file:`spindeterminants.irp.f_template_1291`
@ -2531,7 +2567,7 @@ Subroutines / functions
subroutine get_all_spin_singles_and_doubles_3(buffer, idx, spindet, size_buffer, singles, doubles, n_singles, n_doubles) subroutine get_all_spin_singles_and_doubles_3(buffer, idx, spindet, size_buffer, singles, doubles, n_singles, n_doubles)
File: :file:`spindeterminants.irp.f_template_1221` File: :file:`spindeterminants.irp.f_template_1291`
@ -2551,7 +2587,7 @@ Subroutines / functions
subroutine get_all_spin_singles_and_doubles_4(buffer, idx, spindet, size_buffer, singles, doubles, n_singles, n_doubles) subroutine get_all_spin_singles_and_doubles_4(buffer, idx, spindet, size_buffer, singles, doubles, n_singles, n_doubles)
File: :file:`spindeterminants.irp.f_template_1221` File: :file:`spindeterminants.irp.f_template_1291`
@ -2571,7 +2607,7 @@ Subroutines / functions
subroutine get_all_spin_singles_and_doubles_N_int(buffer, idx, spindet, size_buffer, singles, doubles, n_singles, n_doubles) subroutine get_all_spin_singles_and_doubles_N_int(buffer, idx, spindet, size_buffer, singles, doubles, n_singles, n_doubles)
File: :file:`spindeterminants.irp.f_template_1221` File: :file:`spindeterminants.irp.f_template_1291`
@ -2591,7 +2627,7 @@ Subroutines / functions
subroutine get_all_spin_singles_N_int(buffer, idx, spindet, size_buffer, singles, n_singles) subroutine get_all_spin_singles_N_int(buffer, idx, spindet, size_buffer, singles, n_singles)
File: :file:`spindeterminants.irp.f_template_1221` File: :file:`spindeterminants.irp.f_template_1291`
@ -2765,7 +2801,7 @@ Subroutines / functions
File: :file:`spindeterminants.irp.f` File: :file:`spindeterminants.irp.f`
Returns the index of the determinant in the ``psi_det_alpha_unique`` array Returns the index of the determinant in the :c:data:`psi_det_alpha_unique` array
@ -2779,7 +2815,7 @@ Subroutines / functions
File: :file:`spindeterminants.irp.f` File: :file:`spindeterminants.irp.f`
Returns the index of the determinant in the ``psi_det_beta_unique`` array Returns the index of the determinant in the :c:data:`psi_det_beta_unique` array
@ -3545,7 +3581,7 @@ Subroutines / functions
File: :file:`spindeterminants.irp.f` File: :file:`spindeterminants.irp.f`
Return an integer(8) corresponding to a determinant index for searching Returns an integer(8) corresponding to a determinant index for searching

View File

@ -52,7 +52,6 @@ Providers
--------- ---------
<<<<<<< HEAD
.. c:var:: ao_potential_alpha_xc .. c:var:: ao_potential_alpha_xc
.. code:: text .. code:: text

View File

@ -60,122 +60,6 @@ Providers
--------- ---------
.. c:var:: ao_potential_alpha_xc
.. code:: text
double precision, allocatable :: ao_potential_alpha_xc (ao_num,ao_num)
double precision, allocatable :: ao_potential_beta_xc (ao_num,ao_num)
File: :file:`pot_functionals.irp.f`
.. c:var:: ao_potential_beta_xc
.. code:: text
double precision, allocatable :: ao_potential_alpha_xc (ao_num,ao_num)
double precision, allocatable :: ao_potential_beta_xc (ao_num,ao_num)
File: :file:`pot_functionals.irp.f`
.. c:var:: e_correlation_dft
.. code:: text
double precision :: e_correlation_dft
File: :file:`pot_functionals.irp.f`
.. c:var:: e_exchange_dft
.. code:: text
double precision :: e_exchange_dft
File: :file:`pot_functionals.irp.f`
.. c:var:: fock_matrix_alpha_no_xc_ao
.. code:: text
double precision, allocatable :: fock_matrix_alpha_no_xc_ao (ao_num,ao_num)
double precision, allocatable :: fock_matrix_beta_no_xc_ao (ao_num,ao_num)
File: :file:`fock_matrix_rs_ks.irp.f`
Mono electronic an Coulomb matrix in AO basis set
.. c:var:: fock_matrix_beta_no_xc_ao
.. code:: text
double precision, allocatable :: fock_matrix_alpha_no_xc_ao (ao_num,ao_num)
double precision, allocatable :: fock_matrix_beta_no_xc_ao (ao_num,ao_num)
File: :file:`fock_matrix_rs_ks.irp.f`
Mono electronic an Coulomb matrix in AO basis set
.. c:var:: fock_matrix_energy
.. code:: text
double precision :: rs_ks_energy
double precision :: two_electron_energy
double precision :: one_electron_energy
double precision :: fock_matrix_energy
double precision :: trace_potential_xc
File: :file:`rs_ks_energy.irp.f`
Range-separated Kohn-Sham energy containing the nuclear repulsion energy, and the various components of this quantity.
.. c:var:: one_electron_energy
.. code:: text
double precision :: rs_ks_energy
double precision :: two_electron_energy
double precision :: one_electron_energy
double precision :: fock_matrix_energy
double precision :: trace_potential_xc
File: :file:`rs_ks_energy.irp.f`
Range-separated Kohn-Sham energy containing the nuclear repulsion energy, and the various components of this quantity.
.. c:var:: rs_ks_energy .. c:var:: rs_ks_energy
.. code:: text .. code:: text
@ -193,59 +77,11 @@ Providers
.. c:var:: trace_potential_xc
.. code:: text
double precision :: rs_ks_energy
double precision :: two_electron_energy
double precision :: one_electron_energy
double precision :: fock_matrix_energy
double precision :: trace_potential_xc
File: :file:`rs_ks_energy.irp.f`
Range-separated Kohn-Sham energy containing the nuclear repulsion energy, and the various components of this quantity.
.. c:var:: two_electron_energy
.. code:: text
double precision :: rs_ks_energy
double precision :: two_electron_energy
double precision :: one_electron_energy
double precision :: fock_matrix_energy
double precision :: trace_potential_xc
File: :file:`rs_ks_energy.irp.f`
Range-separated Kohn-Sham energy containing the nuclear repulsion energy, and the various components of this quantity.
Subroutines / functions Subroutines / functions
----------------------- -----------------------
.. c:function:: check_coherence_functional
.. code:: text
subroutine check_coherence_functional
File: :file:`rs_ks_scf.irp.f`
.. c:function:: rs_ks_scf .. c:function:: rs_ks_scf
.. code:: text .. code:: text

View File

@ -329,20 +329,6 @@ Subroutines / functions
.. c:function:: reorder_core_orb
.. code:: text
subroutine reorder_core_orb
File: :file:`track_orb.irp.f`
routines that takes the current :c:data:`mo_coef` and reorder the core orbitals (see :c:data:`list_core` and :c:data:`n_core_orb`) according to the overlap with :c:data:`mo_coef_begin_iteration`
.. c:function:: reorder_core_orb .. c:function:: reorder_core_orb
.. code:: text .. code:: text

View File

@ -25,7 +25,11 @@ Subroutines / functions
File: :file:`diagonalize_h.irp.f` File: :file:`diagonalize_h.irp.f`
program that extracts the `n_states` lowest states of the Hamiltonian within the set of Slater determinants stored in the EZFIO folder Program that extracts the :option:`determinants n_states` lowest states of the Hamiltonian within the set of Slater determinants stored in the EZFIO folder.
If :option:`determinants s2_eig` = True, it will retain only states
which corresponds to the desired value of :option:`determinants expected_s2`.
@ -39,9 +43,9 @@ Subroutines / functions
File: :file:`fcidump.irp.f` File: :file:`fcidump.irp.f`
Produce a regular FCIDUMP file from the MOs stored in the EZFIO folder. Produce a regular FCIDUMP file from the |MOs| stored in the |EZFIO| folder.
To specify an active space, the class of the mos have to set in the EZFIO folder (see set_mo_class/qp_set_mo_class). To specify an active space, the class of the mos have to set in the |EZFIO| folder (see :ref:`qp_set_mo_class`).
The fcidump program supports 3 types of MO_class : The fcidump program supports 3 types of MO_class :
@ -63,9 +67,9 @@ Subroutines / functions
File: :file:`four_idx_transform.irp.f` File: :file:`four_idx_transform.irp.f`
4-index transformation of two-electron integrals from AO to MO integrals. 4-index transformation of two-electron integrals from |AO| to |MO| integrals.
This program will compute the two-electron integrals on the MO basis and store it into the EZFIO folder. This program will compute the two-electron integrals on the |MO| basis and store it into the |EZFIO| folder.
This program can be useful if the AO --> MO transformation is an expensive step by itself. This program can be useful if the AO --> MO transformation is an expensive step by itself.
@ -99,9 +103,9 @@ Subroutines / functions
for all istate, this program produces for all istate, this program produces
* a file "EZFIO. :math:`istate.conv" containing the variational and var+PT2 energies as a function of N_det * a file "EZFIO.istate.conv" containing the variational and var+PT2 energies as a function of N_det
* for istate > 1, a file EZFIO.` istate.delta_e.conv containing the energy difference (both var and var+PT2) with the ground state as a function of N_det * for istate > 1, a file EZFIO.istate.delta_e.conv containing the energy difference (both var and var+PT2) with the ground state as a function of N_det
@ -115,9 +119,9 @@ Subroutines / functions
File: :file:`print_wf.irp.f` File: :file:`print_wf.irp.f`
print the wave function stored in the EZFIO folder in the intermediate normalization. Print the ground state wave function stored in the |EZFIO| folder in the intermediate normalization.
it also prints a lot of information regarding the excitation operators from the reference determinant It also prints a lot of information regarding the excitation operators from the reference determinant
and a first-order perturbative analysis of the wave function. and a first-order perturbative analysis of the wave function.
@ -141,6 +145,34 @@ Subroutines / functions
.. c:function:: routine_e_conv
.. code:: text
subroutine routine_e_conv
File: :file:`print_e_conv.irp.f`
routine called by :c:func:`print_e_conv`
.. c:function:: routine_save_one_e_dm
.. code:: text
subroutine routine_save_one_e_dm
File: :file:`save_one_e_dm.irp.f`
routine called by :c:func:`save_one_e_dm`
.. c:function:: save_natorb .. c:function:: save_natorb
.. code:: text .. code:: text

View File

@ -672,7 +672,9 @@ Index of Providers
* :c:data:`singles_alpha_csc` * :c:data:`singles_alpha_csc`
* :c:data:`singles_alpha_csc_idx` * :c:data:`singles_alpha_csc_idx`
* :c:data:`singles_alpha_csc_size` * :c:data:`singles_alpha_csc_size`
* :c:data:`singles_alpha_size` * :c:data:`singles_beta_csc`
* :c:data:`singles_beta_csc_idx`
* :c:data:`singles_beta_csc_size`
* :c:data:`size_select_max` * :c:data:`size_select_max`
* :c:data:`slater_bragg_radii` * :c:data:`slater_bragg_radii`
* :c:data:`slater_bragg_radii_per_atom` * :c:data:`slater_bragg_radii_per_atom`
@ -950,9 +952,6 @@ Index of Subroutines/Functions
* :c:func:`get_index_in_psi_det_beta_unique` * :c:func:`get_index_in_psi_det_beta_unique`
* :c:func:`get_index_in_psi_det_sorted_bit` * :c:func:`get_index_in_psi_det_sorted_bit`
* :c:func:`get_inverse` * :c:func:`get_inverse`
* :c:func:`get_m0`
* :c:func:`get_m1`
* :c:func:`get_m2`
* :c:func:`get_mask_phase` * :c:func:`get_mask_phase`
* :c:func:`get_mo_erf_map_size` * :c:func:`get_mo_erf_map_size`
* :c:func:`get_mo_map_size` * :c:func:`get_mo_map_size`
@ -1233,7 +1232,9 @@ Index of Subroutines/Functions
* :c:func:`rintgauss` * :c:func:`rintgauss`
* :c:func:`roothaan_hall_scf` * :c:func:`roothaan_hall_scf`
* :c:func:`routine` * :c:func:`routine`
* :c:func:`routine_e_conv`
* :c:func:`routine_example_psi_det` * :c:func:`routine_example_psi_det`
* :c:func:`routine_save_one_e_dm`
* :c:func:`rs_ks_scf` * :c:func:`rs_ks_scf`
* :c:func:`run` * :c:func:`run`
* :c:func:`run_cipsi` * :c:func:`run_cipsi`

View File

@ -34,7 +34,7 @@ These orbitals are in general known to be better than the usual |HF| |MOs| as th
.. code:: .. code::
qp_run save_natorb hcn qp_run save_natorb file.ezfio
Hands on Hands on
@ -50,5 +50,5 @@ Hands on
.. seealso:: .. seealso::
The documentation of the :ref:`save_natorb` program. The documentation of the :c:func:`save_natorb` program.

View File

@ -7,7 +7,7 @@ If the wave function contains less than :math:`10^4` determinants, you can direc
.. code:: .. code::
qp_edit hcn qp_edit file.ezfio
.. important:: .. important::
@ -22,7 +22,7 @@ interactively in :ref:`qp_edit` mode. An alternative is to use the :command:`pri
.. code:: .. code::
qp_run print_wf hcn | tee hcn.fci_natorb.wf qp_run print_wf file.ezfio | tee file.ezfio.fci_natorb.wf
This program will, by default, print out the first :math:`10^4` determinants whatever the size of the wave function stored in the |EZFIO| folder. If you want to change the number of printed Slater determinants, just change the :option:`determinants n_det_print_wf` keyword using the :ref:`qp_edit` tool. This program will, by default, print out the first :math:`10^4` determinants whatever the size of the wave function stored in the |EZFIO| folder. If you want to change the number of printed Slater determinants, just change the :option:`determinants n_det_print_wf` keyword using the :ref:`qp_edit` tool.

View File

@ -14,17 +14,27 @@ Usage
.. code:: bash .. code:: bash
qp_run [-slave] [-help] <PROGRAM> <EZFIO_DIRECTORY> qp_run [-h|--help] [-p <string>|--prefix=<string>] [-s|--slave] [--]
PROGRAM EZFIO_DIR
``PROGRAM`` is the name of the |QP| program to be run, and ``EZFIO_DIR`` is
the name of the |EZFIO| directory containing the data.
.. option:: -help .. option:: -h, --help
Displays the list of available |qp| programs. Displays the list of available |qp| programs.
.. option:: -slave .. option:: -p <string>, --prefix=<string>
This option needs to be set when ``PROGRAM`` is a slave program, to accelerate Prefix before running the program. This option is used to run programs like
like gdb or valgrind.
.. option:: -s, --slave
This option needs to be set to run a slave job for ``PROGRAM``, to accelerate
another running instance of the |qp|. another running instance of the |qp|.
@ -33,6 +43,8 @@ Example
.. code:: bash .. code:: bash
qp_run FCI h2o.ezfio qp_run fci h2o.ezfio &
srun qp_run --slave fci h2o.ezfio
wait

View File

@ -2,11 +2,15 @@
export QP_EZFIO=${QP_ROOT}/external/ezfio export QP_EZFIO=${QP_ROOT}/external/ezfio
if [[ -f ${QP_EZFIO}/Bash/ezfio.sh ]]; then function source_if_exists() {
if [[ -f $1 ]]; then
if [[ "$(ps -p $$ -ocomm=)" == "zsh" ]] ; then if [[ "$(ps -p $$ -ocomm=)" == "zsh" ]] ; then
autoload bashcompinit autoload bashcompinit
bashcompinit bashcompinit
fi fi
source ${QP_EZFIO}/Bash/ezfio.sh source $1
fi fi
}
source_if_exists "${QP_EZFIO}/Bash/ezfio.sh"

View File

@ -1,9 +1,21 @@
# Configuration of IRPF90 package # Configuration of IRPF90 package
export IRPF90=${QP_ROOT}/bin/irpf90 # Set the path of IRPF90 here:
export IRPF90_PATH=${QP_ROOT}/external/irpf90-v1.7.4
export PATH=${PATH}:${IRPF90_PATH}/bin
# Load irpman shell completion export IRPF90=${IRPF90_PATH}/bin/irpf90
irpman=$(tail -1 "${QP_ROOT}/bin/irpman" | cut --delimiter " " --field=2)
source $(dirname ${irpman})/../irpman-completions.bash function source_if_exists() {
if [[ -f $1 ]]; then
if [[ "$(ps -p $$ -ocomm=)" == "zsh" ]] ; then
autoload bashcompinit
bashcompinit
fi
source $1
fi
}
source_if_exists "${IRPF90_PATH}/irpman-completions.bash"

View File

@ -24,8 +24,9 @@ Usage:
qp mpirun PROGRAM qp mpirun PROGRAM
qp set_frozen_core qp set_frozen_core
qp create_ezfio_from_xyz -help qp create_ezfio_from_xyz --help
qp set_mo_class -help qp convert_output_to_ezfio --help
qp set_mo_class --help
" "
} }
@ -41,17 +42,17 @@ function qp()
{ {
case $1 in case $1 in
"has"|"set"|"get"|"set_file"|"unset_file") "has"|"set"|"get"|"set_file"|"unset_file")
ezfio $@ ezfio "$@"
;; ;;
"set_frozen_core") "set_frozen_core")
shift shift
qp_set_frozen_core ${EZFIO_FILE} qp_set_frozen_core "$@" ${EZFIO_FILE}
;; ;;
"create_ezfio_from_xyz") "create_ezfio_from_xyz")
shift shift
NAME=$(qp_create_ezfio_from_xyz $@) NAME=$(qp_create_ezfio_from_xyz "$@")
if [[ -d $NAME ]] ; then if [[ -d $NAME ]] ; then
[[ -d $EZFIO_FILE ]] && ezfio unset_file [[ -d $EZFIO_FILE ]] && ezfio unset_file
ezfio set_file $NAME ezfio set_file $NAME
@ -60,29 +61,34 @@ function qp()
fi fi
;; ;;
"convert_output_to_ezfio")
shift
qp_convert_output_to_ezfio "$@"
;;
"set_mo_class") "set_mo_class")
shift shift
qp_set_mo_class ${EZFIO_FILE} $@ qp_set_mo_class "$@" -- ${EZFIO_FILE}
;; ;;
"edit") "edit")
shift shift
qp_edit ${EZFIO_FILE} qp_edit "$@" -- ${EZFIO_FILE}
;; ;;
"run") "run")
shift shift
qp_run $@ ${EZFIO_FILE} qp_run "$@" -- ${EZFIO_FILE}
;; ;;
"srun") "srun")
shift shift
qp_srun $@ ${EZFIO_FILE} qp_srun "$@" ${EZFIO_FILE}
;; ;;
"mpirun") "mpirun")
shift shift
qp_mpirun $@ ${EZFIO_FILE} qp_mpirun "$@" ${EZFIO_FILE}
;; ;;
"man") "man")
@ -90,6 +96,19 @@ function qp()
man $QP_ROOT/man/${1}.? man $QP_ROOT/man/${1}.?
;; ;;
"prompt")
shift
function _check_ezfio() {
if [[ -d ${EZFIO_FILE} ]] ; then
printf "\e[0;32m|${EZFIO_FILE}>\e[m"
else
printf "\e[0;31m|${EZFIO_FILE}>\e[m"
fi
}
# PS1="${PS1%\\\$ } \$(_check_ezfio) $ "
PS1="\$(_check_ezfio)\n$PS1"
;;
*) *)
_qp_usage _qp_usage
;; ;;
@ -150,6 +169,7 @@ _Complete()
COMPREPLY=( $(compgen -W 'has get set unset_file edit \ COMPREPLY=( $(compgen -W 'has get set unset_file edit \
run srun mpirun set_frozen_core \ run srun mpirun set_frozen_core \
set_mo_class create_ezfio_from_xyz \ set_mo_class create_ezfio_from_xyz \
convert_output_to_ezfio \
-h' -- $cur ) ) -h' -- $cur ) )
return 0 return 0
;; ;;
@ -166,7 +186,7 @@ _Complete()
COMPREPLY=( $(compgen -W "$(\ls -d */ | sed 's|/||g')" -- ${cur} ) ) COMPREPLY=( $(compgen -W "$(\ls -d */ | sed 's|/||g')" -- ${cur} ) )
return 0 return 0
;; ;;
create_ezfio_from_xyz) convert_output_to_ezfio|create_ezfio_from_xyz)
COMPREPLY=( $(compgen -W "$(\ls)" -- ${cur} ) ) COMPREPLY=( $(compgen -W "$(\ls)" -- ${cur} ) )
return 0 return 0
;; ;;
@ -174,6 +194,7 @@ _Complete()
COMPREPLY=( $(compgen -W 'set_file \ COMPREPLY=( $(compgen -W 'set_file \
man \ man \
create_ezfio_from_xyz \ create_ezfio_from_xyz \
convert_output_to_ezfio \
-h' -- $cur ) ) -h' -- $cur ) )
return 0 return 0
;; ;;

View File

@ -1,6 +1,6 @@
.\" Man page generated from reStructuredText. .\" Man page generated from reStructuredText.
. .
.TH "CONFIGURE" "1" "Jan 11, 2019" "2.0" "Quantum Package" .TH "CONFIGURE" "1" "Jan 14, 2019" "2.0" "Quantum Package"
.SH NAME .SH NAME
configure \- | Quantum Package > configure \- | Quantum Package >
. .
@ -30,6 +30,8 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
.. ..
.sp
Program that can either configure the compilations options and download/install external dependencies (see the installation description).
.SH USAGE .SH USAGE
.INDENT 0.0 .INDENT 0.0
.INDENT 3.5 .INDENT 3.5

View File

@ -1,6 +1,6 @@
.\" Man page generated from reStructuredText. .\" Man page generated from reStructuredText.
. .
.TH "EXCITED_STATES" "1" "Jan 11, 2019" "2.0" "Quantum Package" .TH "EXCITED_STATES" "1" "Jan 14, 2019" "2.0" "Quantum Package"
.SH NAME .SH NAME
excited_states \- | Quantum Package > excited_states \- | Quantum Package >
. .
@ -42,7 +42,7 @@ s2_eig\fP flag \fBtrue\fP\&. This will force the Davidson algorithm to choose on
vectors with a value of \ewidehat{S^2} equal to \fBdeterminants expected_s2\fP\&. vectors with a value of \ewidehat{S^2} equal to \fBdeterminants expected_s2\fP\&.
Otherwise, different spin states will come out in the diagonalization. Otherwise, different spin states will come out in the diagonalization.
.sp .sp
The \fIQuantum Package\fP doesn\(aqt take account of the symmetry. Due to numerical noise, excited The \fIQuantum Package\fP doesnt take account of the symmetry. Due to numerical noise, excited
states of different symmetries may enter in the calculation. Note that it is states of different symmetries may enter in the calculation. Note that it is
possible to make state\-average calculation of states with different symmetries possible to make state\-average calculation of states with different symmetries
and/or different spin multiplicities. and/or different spin multiplicities.
@ -55,6 +55,13 @@ and then running the selected FCI restarting from the CIS states, setting
Usually, it is good practice to use state\-averaged natural MOs so that all Usually, it is good practice to use state\-averaged natural MOs so that all
states have MOs of comparable quality. This allows for a faster convergence states have MOs of comparable quality. This allows for a faster convergence
of excitation energies. of excitation energies.
.sp
\fBSEE ALSO:\fP
.INDENT 0.0
.INDENT 3.5
The documentation of the \fBscf()\fP, \fBcis()\fP and \fBfci()\fP programs.
.UNINDENT
.UNINDENT
.SH AUTHOR .SH AUTHOR
A. Scemama, E. Giner A. Scemama, E. Giner
.SH COPYRIGHT .SH COPYRIGHT

View File

@ -1,6 +1,6 @@
.\" Man page generated from reStructuredText. .\" Man page generated from reStructuredText.
. .
.TH "INTERFACES" "1" "Jan 11, 2019" "2.0" "Quantum Package" .TH "INTERFACES" "1" "Jan 14, 2019" "2.0" "Quantum Package"
.SH NAME .SH NAME
interfaces \- | Quantum Package > interfaces \- | Quantum Package >
. .

View File

@ -1,6 +1,6 @@
.\" Man page generated from reStructuredText. .\" Man page generated from reStructuredText.
. .
.TH "NATURAL_ORBITALS" "1" "Jan 11, 2019" "2.0" "Quantum Package" .TH "NATURAL_ORBITALS" "1" "Jan 14, 2019" "2.0" "Quantum Package"
.SH NAME .SH NAME
natural_orbitals \- | Quantum Package > natural_orbitals \- | Quantum Package >
. .
@ -30,6 +30,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
.. ..
.SH SUMMARY
.sp .sp
To produce state\-average natural orbitals, run To produce state\-average natural orbitals, run
.INDENT 0.0 .INDENT 0.0
@ -45,6 +46,59 @@ qp_run save_natorb file.ezfio
.sp .sp
The MOs will be replaced, so the two\-electron integrals and the wave function The MOs will be replaced, so the two\-electron integrals and the wave function
are invalidated as well. are invalidated as well.
.SH EXTRACTING NATURAL ORBITALS
.sp
Once obtained the near FCI wave function, one can obtain many quantities related to it.
One of these quantities are the natural orbitals which have the properties of diagonalizing the one\-body density matrix:
.INDENT 0.0
.INDENT 3.5
.sp
.ce
\erho_{ij} = \edelta_{ij}
.ce 0
.UNINDENT
.UNINDENT
.sp
where the element of the one\-body density matrix \erho_{ij} is define as:
.INDENT 0.0
.INDENT 3.5
.sp
.ce
\erho_{ij} = \elangle \ePsi | \eleft( a^{\edagger}_{j,\ealpha} a_{i,\ealpha} + a^{\edagger}_{j,\ebeta} a_{i,\ebeta} \eright) |\ \ePsi\ \erangle
.ce 0
.UNINDENT
.UNINDENT
.sp
These orbitals are in general known to be better than the usual HF MOs as they are obtained from a correlated wave function. To use these orbitals for future calculations, one has to replace the current MOs by the natural orbitals. To do so, just run:
.INDENT 0.0
.INDENT 3.5
.sp
.nf
.ft C
qp_run save_natorb file.ezfio
.ft P
.fi
.UNINDENT
.UNINDENT
.SH HANDS ON
.sp
\fBIMPORTANT:\fP
.INDENT 0.0
.INDENT 3.5
As the MOs are changed, for the sake of coherence of future calculations, the save_natorb program
\fIautomatically removes the current wave function\fP stored in the \fI\%EZFIO\fP database and replace
it by a single Slater determinant corresponding to a HF occupation of the new spin orbitals.
Also, all the keywords to read the one\- and two\-electron integrals on the MO basis are set to “None”
in order to be sure not to read integrals not corresponding to the current set of MOs\&.
.UNINDENT
.UNINDENT
.sp
\fBSEE ALSO:\fP
.INDENT 0.0
.INDENT 3.5
The documentation of the \fBsave_natorb()\fP program.
.UNINDENT
.UNINDENT
.SH AUTHOR .SH AUTHOR
A. Scemama, E. Giner A. Scemama, E. Giner
.SH COPYRIGHT .SH COPYRIGHT

View File

@ -1,6 +1,6 @@
.\" Man page generated from reStructuredText. .\" Man page generated from reStructuredText.
. .
.TH "PLUGINS" "1" "Jan 11, 2019" "2.0" "Quantum Package" .TH "PLUGINS" "1" "Jan 14, 2019" "2.0" "Quantum Package"
.SH NAME .SH NAME
plugins \- | Quantum Package > plugins \- | Quantum Package >
. .
@ -35,7 +35,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
plugins need to be downloaded and installed in the \fB$QP_ROOT/plugins\fP plugins need to be downloaded and installed in the \fB$QP_ROOT/plugins\fP
directory. directory.
.sp .sp
Plugins are usually hosted in external repositories. To dowload a plugin, Plugins are usually hosted in external repositories. To download a plugin,
the remote repository needs to be downloaded, and the plugins of the the remote repository needs to be downloaded, and the plugins of the
repository can be selected for installation. repository can be selected for installation.
.sp .sp
@ -93,6 +93,13 @@ qp_plugins uninstall ext_module
.fi .fi
.UNINDENT .UNINDENT
.UNINDENT .UNINDENT
.sp
\fBSEE ALSO:\fP
.INDENT 0.0
.INDENT 3.5
For a more detailed explanation and an example, see qp_plugins\&.
.UNINDENT
.UNINDENT
.SH AUTHOR .SH AUTHOR
A. Scemama, E. Giner A. Scemama, E. Giner
.SH COPYRIGHT .SH COPYRIGHT

View File

@ -1,6 +1,6 @@
.\" Man page generated from reStructuredText. .\" Man page generated from reStructuredText.
. .
.TH "QP_CONVERT_OUTPUT_TO_EZFIO" "1" "Jan 11, 2019" "2.0" "Quantum Package" .TH "QP_CONVERT_OUTPUT_TO_EZFIO" "1" "Jan 14, 2019" "2.0" "Quantum Package"
.SH NAME .SH NAME
qp_convert_output_to_ezfio \- | Quantum Package > qp_convert_output_to_ezfio \- | Quantum Package >
. .

View File

@ -1,6 +1,6 @@
.\" Man page generated from reStructuredText. .\" Man page generated from reStructuredText.
. .
.TH "QP_CREATE_EZFIO_FROM_XYZ" "1" "Jan 11, 2019" "2.0" "Quantum Package" .TH "QP_CREATE_EZFIO_FROM_XYZ" "1" "Jan 14, 2019" "2.0" "Quantum Package"
.SH NAME .SH NAME
qp_create_ezfio_from_xyz \- | Quantum Package > qp_create_ezfio_from_xyz \- | Quantum Package >
. .
@ -80,7 +80,7 @@ Total charge of the molecule. Default is 0.
.INDENT 0.0 .INDENT 0.0
.TP .TP
.B \-cart .B \-cart
Compute AOs in the Cartesian basis set (6d, 10f, ...) Compute AOs in the Cartesian basis set (6d, 10f, )
.UNINDENT .UNINDENT
.INDENT 0.0 .INDENT 0.0
.TP .TP

View File

@ -1,6 +1,6 @@
.\" Man page generated from reStructuredText. .\" Man page generated from reStructuredText.
. .
.TH "QP_EDIT" "1" "Jan 11, 2019" "2.0" "Quantum Package" .TH "QP_EDIT" "1" "Jan 14, 2019" "2.0" "Quantum Package"
.SH NAME .SH NAME
qp_edit \- | Quantum Package > qp_edit \- | Quantum Package >
. .

View File

@ -1,6 +1,6 @@
.\" Man page generated from reStructuredText. .\" Man page generated from reStructuredText.
. .
.TH "QP_EXPORT_AS_TGZ" "1" "Jan 11, 2019" "2.0" "Quantum Package" .TH "QP_EXPORT_AS_TGZ" "1" "Jan 14, 2019" "2.0" "Quantum Package"
.SH NAME .SH NAME
qp_export_as_tgz \- | Quantum Package > qp_export_as_tgz \- | Quantum Package >
. .
@ -33,7 +33,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
.sp .sp
In some HPC facilities, the access to the internet is limited for security reasons. In some HPC facilities, the access to the internet is limited for security reasons.
In such an environment, the installation of \fIQuantum Package\fP is sometimes very painful because In such an environment, the installation of \fIQuantum Package\fP is sometimes very painful because
the OCaml compiler and the libraries can\(aqt be installed by a non\-root user. the OCaml compiler and the libraries cant be installed by a non\-root user.
.sp .sp
This command creates a self\-contained binary distribution in the form of a \fItar.gz\fP file This command creates a self\-contained binary distribution in the form of a \fItar.gz\fP file
that can be copied on another machine. that can be copied on another machine.

View File

@ -1,6 +1,6 @@
.\" Man page generated from reStructuredText. .\" Man page generated from reStructuredText.
. .
.TH "QP_PLUGINS" "1" "Jan 11, 2019" "2.0" "Quantum Package" .TH "QP_PLUGINS" "1" "Jan 14, 2019" "2.0" "Quantum Package"
.SH NAME .SH NAME
qp_plugins \- | Quantum Package > qp_plugins \- | Quantum Package >
. .
@ -31,7 +31,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
.. ..
.sp .sp
This command deals with all external plugings of \fIQuantum Package\fP\&. Plugin repositories can This command deals with all external plugins of \fIQuantum Package\fP\&. Plugin repositories can
be downloaded, and the plugins in these repositories can be be downloaded, and the plugins in these repositories can be
installed/uninstalled of created. installed/uninstalled of created.
.SH USAGE .SH USAGE
@ -101,6 +101,69 @@ Create a new plugin named \fBplugin_name\fP (in local repository by default).
.B \-r <repository> .B \-r <repository>
Specify in which repository the new plugin will be created. Specify in which repository the new plugin will be created.
.UNINDENT .UNINDENT
.SH EXAMPLE
.sp
Let us download, install and compile some specific external plugins from \fI\%https://gitlab.com/eginer/qp_plugins_eginer\fP .
.sp
First, download the git repo associated to these plugins. To do so, first go to the \fIplugins\fP directory in the \fIQuantum Package\fP and execute:
.INDENT 0.0
.INDENT 3.5
.sp
.nf
.ft C
qp_plugins download https://gitlab.com/eginer/qp_plugins_eginer
.ft P
.fi
.UNINDENT
.UNINDENT
.sp
This will create in the directory \fIplugins\fP a local copy of the git repo located at the URL you indicated.
Then, go in \fIqp_plugins_eginer/stable/\fP
.INDENT 0.0
.INDENT 3.5
.sp
.nf
.ft C
cd qp_plugins_eginer/stable/
.ft P
.fi
.UNINDENT
.UNINDENT
.sp
In the directory \fIstable\fP, there are many directories which all correspond to a specific plugin that have been developed
by the person in charge of the git repo. All these plugins might use some global variables and routines contained
in the core modules of the \fIQuantum Package\fP\&.
.sp
Now let us install the plugin \fIrsdft_cipsi\fP:
.INDENT 0.0
.INDENT 3.5
.sp
.nf
.ft C
qp_plugins install rsdft_cipsi
.ft P
.fi
.UNINDENT
.UNINDENT
.sp
This will link this directory to the \fIQuantum Package\fP which means that when the code will be compiled, this plugin will be compiled to and therefore
all the executables/scripts/input keywords contained in this module will be available as if there were part of the core of the \fIQuantum Package\fP\&.
.sp
Then, to compile the new plugin, just recompile the \fIQuantum Package\fP as usual by going at the root of the \fIQuantum Package\fP directory:
.INDENT 0.0
.INDENT 3.5
.sp
.nf
.ft C
cd $QP_ROOT
ninja
.ft P
.fi
.UNINDENT
.UNINDENT
.sp
Then, if you go back to the plugin directory you just installed, you should see all the executables/scripts which have been created and
which are now available with the \fIqp_run\fP command.
.SH AUTHOR .SH AUTHOR
A. Scemama, E. Giner A. Scemama, E. Giner
.SH COPYRIGHT .SH COPYRIGHT

View File

@ -1,6 +1,6 @@
.\" Man page generated from reStructuredText. .\" Man page generated from reStructuredText.
. .
.TH "QP_RUN" "1" "Jan 11, 2019" "2.0" "Quantum Package" .TH "QP_RUN" "1" "Jan 14, 2019" "2.0" "Quantum Package"
.SH NAME .SH NAME
qp_run \- | Quantum Package > qp_run \- | Quantum Package >
. .
@ -38,20 +38,30 @@ Command used to run a calculation.
.sp .sp
.nf .nf
.ft C .ft C
qp_run [\-slave] [\-help] <PROGRAM> <EZFIO_DIRECTORY> qp_run [\-h|\-\-help] [\-p <string>|\-\-prefix=<string>] [\-s|\-\-slave] [\-\-]
PROGRAM EZFIO_DIR
.ft P .ft P
.fi .fi
.UNINDENT .UNINDENT
.UNINDENT .UNINDENT
.sp
\fBPROGRAM\fP is the name of the \fIQuantum Package\fP program to be run, and \fBEZFIO_DIR\fP is
the name of the \fI\%EZFIO\fP directory containing the data.
.INDENT 0.0 .INDENT 0.0
.TP .TP
.B \-help .B \-h, \-\-help
Displays the list of available \fIQuantum Package\fP programs. Displays the list of available \fIQuantum Package\fP programs.
.UNINDENT .UNINDENT
.INDENT 0.0 .INDENT 0.0
.TP .TP
.B \-slave .B \-p <string>, \-\-prefix=<string>
This option needs to be set when \fBPROGRAM\fP is a slave program, to accelerate Prefix before running the program. This option is used to run programs like
like gdb or valgrind.
.UNINDENT
.INDENT 0.0
.TP
.B \-s, \-\-slave
This option needs to be set to run a slave job for \fBPROGRAM\fP, to accelerate
another running instance of the \fIQuantum Package\fP\&. another running instance of the \fIQuantum Package\fP\&.
.UNINDENT .UNINDENT
.SH EXAMPLE .SH EXAMPLE
@ -60,7 +70,9 @@ another running instance of the \fIQuantum Package\fP\&.
.sp .sp
.nf .nf
.ft C .ft C
qp_run FCI h2o.ezfio qp_run fci h2o.ezfio &
srun qp_run \-\-slave fci h2o.ezfio
wait
.ft P .ft P
.fi .fi
.UNINDENT .UNINDENT

View File

@ -1,6 +1,6 @@
.\" Man page generated from reStructuredText. .\" Man page generated from reStructuredText.
. .
.TH "QP_SET_FROZEN_CORE" "1" "Jan 11, 2019" "2.0" "Quantum Package" .TH "QP_SET_FROZEN_CORE" "1" "Jan 14, 2019" "2.0" "Quantum Package"
.SH NAME .SH NAME
qp_set_frozen_core \- | Quantum Package > qp_set_frozen_core \- | Quantum Package >
. .

View File

@ -1,6 +1,6 @@
.\" Man page generated from reStructuredText. .\" Man page generated from reStructuredText.
. .
.TH "QP_SET_MO_CLASS" "1" "Jan 11, 2019" "2.0" "Quantum Package" .TH "QP_SET_MO_CLASS" "1" "Jan 14, 2019" "2.0" "Quantum Package"
.SH NAME .SH NAME
qp_set_mo_class \- | Quantum Package > qp_set_mo_class \- | Quantum Package >
. .

View File

@ -22,6 +22,7 @@ module Determinants_by_hand : sig
val read_n_int : unit -> N_int_number.t val read_n_int : unit -> N_int_number.t
val update_ndet : Det_number.t -> unit val update_ndet : Det_number.t -> unit
val extract_state : States_number.t -> unit val extract_state : States_number.t -> unit
val extract_states : Range.t -> unit
end = struct end = struct
type t = type t =
{ n_int : N_int_number.t; { n_int : N_int_number.t;
@ -592,6 +593,47 @@ psi_det = %s
write new_det write new_det
;; ;;
let extract_states range =
Printf.printf "Extracting states %s\n" (Range.to_string range);
let det =
read ()
in
let n_det, n_states =
Det_number.to_int det.n_det,
States_number.to_int det.n_states
in
Range.to_int_list range
|> List.iter ~f:(fun istate ->
if istate > n_states then
failwith "State to extract should not be greater than n_states")
;
let sorted_list =
Range.to_int_list range
|> List.sort ~compare
in
let state_shift = ref 0 in
List.iter ~f:(fun istate ->
let j =
istate - 1
in
begin
if (j>0) then
let ishift =
j*n_det
in
for i=0 to (n_det-1) do
det.psi_coef.(!state_shift+i) <- det.psi_coef.(i+ishift)
done
end;
state_shift := !state_shift + n_det
) sorted_list
;
let new_det =
{ det with n_states = (States_number.of_int @@ List.length sorted_list) }
in
write new_det
;;
end end

View File

@ -14,6 +14,8 @@ open Sexplib.Std
type t = int list [@@deriving sexp] type t = int list [@@deriving sexp]
let to_int_list r = r
let expand_range r = let expand_range r =
match String_ext.lsplit2 ~on:'-' r with match String_ext.lsplit2 ~on:'-' r with
| Some (s, f) -> | Some (s, f) ->
@ -50,6 +52,10 @@ let of_string s =
let to_string l = let to_string l =
"[" ^
(List.map string_of_int l
|> String.concat ",") ^ "]"
(*
let rec do_work buf symbol = function let rec do_work buf symbol = function
| [] -> buf | [] -> buf
| a::([] as t) -> | a::([] as t) ->
@ -58,15 +64,15 @@ let to_string l =
if (b-a = 1) then if (b-a = 1) then
do_work buf "-" t do_work buf "-" t
else else
do_work (buf^symbol^(string_of_int a)^","^(string_of_int b)) "" t do_work (buf^symbol^","^(string_of_int b)) "" t
in in
let result = let result =
match l with match l with
| [] -> | [] -> "[]"
"[]"
| h::t -> | h::t ->
do_work ("["^(string_of_int h)) "" l in do_work ("["^(string_of_int h)) "" l in
(String.sub result 0 ((String.length result)))^"]" (String.sub result 0 ((String.length result)))^"]"
*)
let test_module () = let test_module () =

View File

@ -8,3 +8,4 @@ type t = int list [@@deriving sexp]
*) *)
val of_string : string -> t val of_string : string -> t
val to_string : t -> string val to_string : t -> string
val to_int_list : t -> int list

View File

@ -2,7 +2,6 @@ open Qputils
(* Environment variables : (* Environment variables :
QP_PREFIX=gdb : to run gdb (or valgrind, or whatever)
QP_TASK_DEBUG=1 : debug task server QP_TASK_DEBUG=1 : debug task server
*) *)
@ -14,7 +13,7 @@ let print_list () =
let () = let () =
Random.self_init () Random.self_init ()
let run slave exe ezfio_file = let run slave ?prefix exe ezfio_file =
(** Check availability of the ports *) (** Check availability of the ports *)
let port_number = let port_number =
@ -113,8 +112,9 @@ let run slave exe ezfio_file =
(** Run executable *) (** Run executable *)
let prefix = let prefix =
try (Sys.getenv "QP_PREFIX")^" " with match prefix with
| Not_found -> "" | Some x -> x^" "
| None -> ""
and exe = and exe =
match (List.find (fun (x,_) -> x = exe) executables) with match (List.find (fun (x,_) -> x = exe) executables) with
| (_,exe) -> exe^" " | (_,exe) -> exe^" "
@ -147,11 +147,12 @@ let () =
|> String.concat "\n" |> String.concat "\n"
) |> Command_line.set_header_doc; ) |> Command_line.set_header_doc;
[ ( [ ( 's', "slave", "Required to run slave tasks in distributed environments",
's', "slave", "Required to run slave tasks in distributed environments",
Command_line.Without_arg); Command_line.Without_arg);
Command_line.anonymous "<EXECUTABLE>" "Name of the QP program to be run"; ( 'p', "prefix", "<string> Prefix before running the program, like gdb or valgrind",
Command_line.anonymous "<EZFIO_FILE>" "EZFIO directory"; Command_line.With_arg );
Command_line.anonymous "PROGRAM" "Name of the QP program to be run";
Command_line.anonymous "EZFIO_DIR" "EZFIO directory";
] ]
|> Command_line.set_specs ; |> Command_line.set_specs ;
@ -166,9 +167,13 @@ let () =
| _ -> true | _ -> true
in in
let prefix =
Command_line.get "prefix"
in
(* Run the program *) (* Run the program *)
match Command_line.anon_args () with match Command_line.anon_args () with
| exe :: ezfio_file :: [] -> run slave exe ezfio_file | exe :: ezfio_file :: [] -> run slave ?prefix exe ezfio_file
| _ -> (Command_line.help () ; failwith "Inconsistent command line") | _ -> (Command_line.help () ; failwith "Inconsistent command line")

24
qpsh
View File

@ -1,24 +0,0 @@
#!/bin/bash
export QP_ROOT=$(dirname $0)
exec bash --init-file <(cat << EOF
[[ -f \${HOME}/.bashrc ]] && source \${HOME}/.bashrc
ESC=\$(printf "\\e")
function check_ezfio() {
if [[ -d \${EZFIO_FILE} ]] ; then
printf "\\e[0;32m|\${EZFIO_FILE}>\\e[m"
else
printf "\\e[0;31m|\${EZFIO_FILE}>\\e[m"
fi
}
PS1="\${PS1%$ }\\\$(check_ezfio) \$ "
source \${QP_ROOT}/quantum_package.rc
EOF
)

View File

@ -169,9 +169,9 @@ let run check_only ?ndet ?state ezfio_filename =
begin begin
match state with match state with
| None -> () | None -> ()
| Some n -> | Some range ->
begin begin
Input.Determinants_by_hand.extract_state (States_number.of_int n) Input.Determinants_by_hand.extract_states range
end end
end; end;
@ -273,7 +273,7 @@ let () =
[ ( 'c', "check", "Checks the input data", Command_line.Without_arg); [ ( 'c', "check", "Checks the input data", Command_line.Without_arg);
( 'n', "ndet", "<int> Truncate the wavefunction to the target number of determinants", ( 'n', "ndet", "<int> Truncate the wavefunction to the target number of determinants",
Command_line.With_arg); Command_line.With_arg);
( 's', "state", "<int> Pick the state as a new wavefunction", Command_line.With_arg); ( 's', "state", "<range> Extract selected states, for example \"[1,3-5]\"", Command_line.With_arg);
Command_line.anonymous "<EZFIO_FILE>" "EZFIO directory"; Command_line.anonymous "<EZFIO_FILE>" "EZFIO directory";
] ]
|> Command_line.set_specs ; |> Command_line.set_specs ;
@ -292,8 +292,8 @@ let () =
let state = let state =
match Command_line.get "state" with match Command_line.get "state" with
| None -> None | None -> None
| Some s -> (try Some (int_of_string s) | Some s -> (try Some (Range.of_string s)
with _ -> failwith "[-s|--state] expects an integer") with _ -> failwith "[-s|--state] expects a range")
in in
let c = let c =

View File

@ -1,14 +1,13 @@
#!/usr/bin/env python2 #!/usr/bin/env python2
""" """
convert output of gamess/GAU$$IAN to ezfio convert output of GAMESS/GAU$$IAN to ezfio
Usage: Usage:
qp_convert_output_to_ezfio.py <file.out> [-o|--output <EZFIO_DIRECTORY>] qp_convert_output_to_ezfio [-o EZFIO_FILE|--output=EZFIO_FILE] <file.out>
Option: Options:
file.out is the file to check (like gamess.out) -o EZFIO_FILE --output=EZFIO_FILE Produced directory
EZFIO_DIRECTORY is the name of the produced directory by default is file.out.ezfio
(by default is file.out.ezfio)
""" """
@ -358,10 +357,13 @@ if __name__ == '__main__':
file_ = get_full_path(arguments['<file.out>']) file_ = get_full_path(arguments['<file.out>'])
if arguments["-o"]: if arguments["--output"]:
ezfio_file = get_full_path(arguments["<ezfio_directory>"]) ezfio_file = get_full_path(arguments["--output"])
elif arguments["-o"]:
ezfio_file = get_full_path(arguments["-o"])
else: else:
ezfio_file = "{0}.ezfio".format(file_) ezfio_file = "{0}.ezfio".format(file_)
print ezfio_file
try: try:
res_file = getFile(file_) res_file = getFile(file_)
@ -371,10 +373,11 @@ if __name__ == '__main__':
print file_, 'recognized as', str(res_file).split('.')[-1].split()[0] print file_, 'recognized as', str(res_file).split('.')[-1].split()[0]
write_ezfio(res_file, ezfio_file) write_ezfio(res_file, ezfio_file)
sys.stdout.flush()
if os.system("qp_run save_ortho_mos "+ezfio_file) != 0: if os.system("qp_run save_ortho_mos "+ezfio_file) != 0:
print """Warning: You need to run print """Warning: You need to run
qp_run save_ortho_mos """+ezfio_file+""" qp run save_ortho_mos
to be sure your MOs will be orthogonal, which is not the case when to be sure your MOs will be orthogonal, which is not the case when
the MOs are read from output files (not enough precision in output).""" the MOs are read from output files (not enough precision in output)."""

View File

@ -18,6 +18,8 @@ cd ${QP_ROOT}
if [[ -f quantum_package.rc \ if [[ -f quantum_package.rc \
&& -f README.md \ && -f README.md \
&& -d src \ && -d src \
&& -d etc \
&& -d man \
&& -d bin \ && -d bin \
&& -d ocaml \ && -d ocaml \
&& -d external \ && -d external \
@ -43,7 +45,7 @@ QPACKAGE_STATIC=${QP_ROOT}/quantum_package_static
function find_libs () function find_libs ()
{ {
for i in $@ for i in "$@"
do do
ldd $i ldd $i
done | sort | grep '/' | cut --delimiter=' ' --fields=3 | uniq done | sort | grep '/' | cut --delimiter=' ' --fields=3 | uniq
@ -61,10 +63,10 @@ echo "Creating root of static directory"
# --------------------------------- # ---------------------------------
rm --recursive --force -- "${QPACKAGE_STATIC}" rm --recursive --force -- "${QPACKAGE_STATIC}"
mkdir --parents -- ${QPACKAGE_STATIC}/{bin,lib,extra_lib,external} mkdir --parents -- ${QPACKAGE_STATIC}/{bin,etc,man,lib,extra_lib,external}
if [[ $? -ne 0 ]] ; if [[ $? -ne 0 ]] ;
then then
echo "Error creating ${QPACKAGE_STATIC}/{bin,lib,extra_lib,external}" echo "Error creating ${QPACKAGE_STATIC}/{bin,lib,etc,man,extra_lib,external}"
exit 1 exit 1
fi fi
@ -102,6 +104,8 @@ cd ${QPACKAGE_STATIC}/bin
done done
) )
cp ${QP_ROOT}/bin/qpsh ${QPACKAGE_STATIC}/bin
cp --recursive -- ${QP_ROOT}/data ${QPACKAGE_STATIC}/data cp --recursive -- ${QP_ROOT}/data ${QPACKAGE_STATIC}/data
for i in ${FORTRAN_EXEC} for i in ${FORTRAN_EXEC}
do do
@ -163,13 +167,21 @@ cp --recursive -- ${QP_ROOT}/external/Python ${QPACKAGE_STATIC}/external/
mkdir ${QPACKAGE_STATIC}/external/ezfio mkdir ${QPACKAGE_STATIC}/external/ezfio
cp --recursive -- ${QP_ROOT}/external/ezfio/Python ${QPACKAGE_STATIC}/external/ezfio/ cp --recursive -- ${QP_ROOT}/external/ezfio/Python ${QPACKAGE_STATIC}/external/ezfio/
cp --recursive -- ${QP_ROOT}/external/ezfio/Bash ${QPACKAGE_STATIC}/external/ezfio/ cp --recursive -- ${QP_ROOT}/external/ezfio/Bash ${QPACKAGE_STATIC}/external/ezfio/
cp --recursive -- ${QP_ROOT}/man ${QPACKAGE_STATIC}/man
# #
echo "Creating quantum_package.rc" echo "Creating quantum_package.rc"
# --------------------------- # ---------------------------
sed "s!^export QP_ROOT=.*\$!export QP_ROOT=\$( cd \$(dirname "\${BASH_SOURCE}") ; pwd -P )!" ${QP_ROOT}/quantum_package.rc.default > ${QPACKAGE_STATIC}/quantum_package.rc cp ${QP_ROOT}/quantum_package.rc ${QPACKAGE_STATIC}/
cp ${QP_ROOT}/etc/* ${QPACKAGE_STATIC}/etc/
cat << EOF > ${QPACKAGE_STATIC}/etc/00.qp_root.rc
export QP_ROOT="\$( cd \$(dirname \\\${BASH_SOURCE}) ; cd .. ; pwd -P )"
EOF
#exit 0 #exit 0
# #

View File

@ -127,7 +127,6 @@ def main(arguments):
if arguments["create"]: if arguments["create"]:
m_instance = ModuleHandler([QP_SRC]) m_instance = ModuleHandler([QP_SRC])
print arguments
l_children = arguments["<needed_modules>"] l_children = arguments["<needed_modules>"]
name = arguments["<name>"][0] name = arguments["<name>"][0]
@ -226,7 +225,6 @@ def main(arguments):
for name in l_name: for name in l_name:
print name
if name in d_local: if name in d_local:
print "{0} Is already installed".format(name) print "{0} Is already installed".format(name)
@ -285,7 +283,6 @@ def main(arguments):
for module in set(l_name_to_remove): for module in set(l_name_to_remove):
uninstall = os.path.join(QP_SRC,module,"uninstall") uninstall = os.path.join(QP_SRC,module,"uninstall")
print uninstall
if os.path.isfile(uninstall): if os.path.isfile(uninstall):
subprocess.check_call([uninstall]) subprocess.check_call([uninstall])

View File

@ -134,190 +134,6 @@ end
subroutine get_m2(gen, phasemask, bannedOrb, vect, mask, h, p, sp, coefs)
use bitmasks
implicit none
integer(bit_kind), intent(in) :: gen(N_int, 2), mask(N_int, 2)
integer(bit_kind), intent(in) :: phasemask(N_int,2)
logical, intent(in) :: bannedOrb(mo_num)
double precision, intent(in) :: coefs(N_states)
double precision, intent(inout) :: vect(N_states, mo_num)
integer, intent(in) :: sp, h(0:2, 2), p(0:3, 2)
integer :: i, j, k, h1, h2, p1, p2, sfix, hfix, pfix, hmob, pmob, puti
double precision :: hij
double precision, external :: get_phase_bi, mo_two_e_integral
integer, parameter :: turn3_2(2,3) = reshape((/2,3, 1,3, 1,2/), (/2,3/))
integer, parameter :: turn2(2) = (/2,1/)
if(h(0,sp) == 2) then
h1 = h(1, sp)
h2 = h(2, sp)
do i=1,3
puti = p(i, sp)
if(bannedOrb(puti)) cycle
p1 = p(turn3_2(1,i), sp)
p2 = p(turn3_2(2,i), sp)
hij = mo_two_e_integral(p1, p2, h1, h2) - mo_two_e_integral(p2, p1, h1, h2)
hij = hij * get_phase_bi(phasemask, sp, sp, h1, p1, h2, p2, N_int)
do k=1,N_states
vect(k,puti) = vect(k,puti) + hij * coefs(k)
enddo
end do
else if(h(0,sp) == 1) then
sfix = turn2(sp)
hfix = h(1,sfix)
pfix = p(1,sfix)
hmob = h(1,sp)
do j=1,2
puti = p(j, sp)
if(bannedOrb(puti)) cycle
pmob = p(turn2(j), sp)
hij = mo_two_e_integral(pmob, pfix, hmob, hfix)
hij = hij * get_phase_bi(phasemask, sp, sfix, hmob, pmob, hfix, pfix, N_int)
do k=1,N_states
vect(k,puti) = vect(k,puti) + hij * coefs(k)
enddo
end do
else
puti = p(1,sp)
if(.not. bannedOrb(puti)) then
sfix = turn2(sp)
p1 = p(1,sfix)
p2 = p(2,sfix)
h1 = h(1,sfix)
h2 = h(2,sfix)
hij = (mo_two_e_integral(p1,p2,h1,h2) - mo_two_e_integral(p2,p1,h1,h2))
hij = hij * get_phase_bi(phasemask, sfix, sfix, h1, p1, h2, p2, N_int)
do k=1,N_states
vect(k,puti) = vect(k,puti) + hij * coefs(k)
enddo
end if
end if
end
subroutine get_m1(gen, phasemask, bannedOrb, vect, mask, h, p, sp, coefs)
use bitmasks
implicit none
integer(bit_kind), intent(in) :: gen(N_int, 2), mask(N_int, 2)
integer(bit_kind), intent(in) :: phasemask(N_int,2)
logical, intent(in) :: bannedOrb(mo_num)
double precision, intent(in) :: coefs(N_states)
double precision, intent(inout) :: vect(N_states, mo_num)
integer, intent(in) :: sp, h(0:2, 2), p(0:3, 2)
integer :: i, hole, p1, p2, sh, k
logical :: ok
logical, allocatable :: lbanned(:)
integer(bit_kind) :: det(N_int, 2)
double precision :: hij
double precision, external :: get_phase_bi, mo_two_e_integral
allocate (lbanned(mo_num))
lbanned = bannedOrb
sh = 1
if(h(0,2) == 1) sh = 2
hole = h(1, sh)
lbanned(p(1,sp)) = .true.
if(p(0,sp) == 2) lbanned(p(2,sp)) = .true.
!print *, "SPm1", sp, sh
p1 = p(1, sp)
if(sp == sh) then
p2 = p(2, sp)
lbanned(p2) = .true.
double precision :: hij_cache(mo_num,2)
call get_mo_two_e_integrals(hole,p1,p2,mo_num,hij_cache(1,1),mo_integrals_map)
call get_mo_two_e_integrals(hole,p2,p1,mo_num,hij_cache(1,2),mo_integrals_map)
do i=1,hole-1
if(lbanned(i)) cycle
hij = hij_cache(i,1)-hij_cache(i,2)
if (hij /= 0.d0) then
hij = hij * get_phase_bi(phasemask, sp, sp, i, p1, hole, p2, N_int)
do k=1,N_states
vect(k,i) = vect(k,i) + hij * coefs(k)
enddo
endif
end do
do i=hole+1,mo_num
if(lbanned(i)) cycle
hij = hij_cache(i,2)-hij_cache(i,1)
if (hij /= 0.d0) then
hij = hij * get_phase_bi(phasemask, sp, sp, hole, p1, i, p2, N_int)
do k=1,N_states
vect(k,i) = vect(k,i) + hij * coefs(k)
enddo
endif
end do
call apply_particle(mask, sp, p2, det, ok, N_int)
call i_h_j(gen, det, N_int, hij)
do k=1,N_states
vect(k,p2) = vect(k,p2) + hij * coefs(k)
enddo
else
p2 = p(1, sh)
call get_mo_two_e_integrals(hole,p1,p2,mo_num,hij_cache(1,1),mo_integrals_map)
do i=1,mo_num
if(lbanned(i)) cycle
hij = hij_cache(i,1)
if (hij /= 0.d0) then
hij = hij * get_phase_bi(phasemask, sp, sh, i, p1, hole, p2, N_int)
do k=1,N_states
vect(k,i) = vect(k,i) + hij * coefs(k)
enddo
endif
end do
end if
deallocate(lbanned)
call apply_particle(mask, sp, p1, det, ok, N_int)
call i_h_j(gen, det, N_int, hij)
do k=1,N_states
vect(k,p1) = vect(k,p1) + hij * coefs(k)
enddo
end
subroutine get_m0(gen, phasemask, bannedOrb, vect, mask, h, p, sp, coefs)
use bitmasks
implicit none
integer(bit_kind), intent(in) :: gen(N_int, 2), mask(N_int, 2)
integer(bit_kind), intent(in) :: phasemask(N_int,2)
logical, intent(in) :: bannedOrb(mo_num)
double precision, intent(in) :: coefs(N_states)
double precision, intent(inout) :: vect(N_states, mo_num)
integer, intent(in) :: sp, h(0:2, 2), p(0:3, 2)
integer :: i,k
logical :: ok
logical, allocatable :: lbanned(:)
integer(bit_kind) :: det(N_int, 2)
double precision :: hij
allocate(lbanned(mo_num))
lbanned = bannedOrb
lbanned(p(1,sp)) = .true.
do i=1,mo_num
if(lbanned(i)) cycle
call apply_particle(mask, sp, i, det, ok, N_int)
call i_h_j(gen, det, N_int, hij)
do k=1,N_states
vect(k,i) = vect(k,i) + hij * coefs(k)
enddo
end do
deallocate(lbanned)
end
subroutine select_singles_and_doubles(i_generator,hole_mask,particle_mask,fock_diag_tmp,E0,pt2,variance,norm,buf,subset,csubset) subroutine select_singles_and_doubles(i_generator,hole_mask,particle_mask,fock_diag_tmp,E0,pt2,variance,norm,buf,subset,csubset)
use bitmasks use bitmasks
@ -354,6 +170,7 @@ subroutine select_singles_and_doubles(i_generator,hole_mask,particle_mask,fock_d
integer(bit_kind), allocatable:: preinteresting_det(:,:,:) integer(bit_kind), allocatable:: preinteresting_det(:,:,:)
double precision :: rss double precision :: rss
double precision, external :: memory_of_double, memory_of_int double precision, external :: memory_of_double, memory_of_int
rss = memory_of_int( (8*N_int+5)*N_det + N_det_alpha_unique + 4*N_int*N_det_selectors) rss = memory_of_int( (8*N_int+5)*N_det + N_det_alpha_unique + 4*N_int*N_det_selectors)
rss += memory_of_double(mo_num*mo_num*(N_states+1)) rss += memory_of_double(mo_num*mo_num*(N_states+1))
call check_mem(rss,irp_here) call check_mem(rss,irp_here)

View File

@ -1,20 +1,21 @@
#!/usr/bin/env bats #!/usr/bin/env bats
source $QP_ROOT/tests/bats/common.bats.sh source $QP_ROOT/tests/bats/common.bats.sh
source $QP_ROOT/quantum_package.rc
function run() { function run() {
thresh=1.e-5 thresh=1.e-5
test_exe cis || skip test_exe cis || skip
qp_edit -c $1 qp set_file $1
ezfio set_file $1 qp edit --check
ezfio set determinants n_states 3 qp set determinants n_states 3
ezfio set davidson threshold_davidson 1.e-12 qp set davidson threshold_davidson 1.e-12
ezfio set mo_two_e_ints io_mo_two_e_integrals Write qp set mo_two_e_ints io_mo_two_e_integrals Write
qp_set_frozen_core $1 qp set_frozen_core
qp_run cis $1 qp run cis
energy1="$(ezfio get cis energy | tr '[]' ' ' | cut -d ',' -f 1)" energy1="$(qp get cis energy | tr '[]' ' ' | cut -d ',' -f 1)"
energy2="$(ezfio get cis energy | tr '[]' ' ' | cut -d ',' -f 2)" energy2="$(qp get cis energy | tr '[]' ' ' | cut -d ',' -f 2)"
energy3="$(ezfio get cis energy | tr '[]' ' ' | cut -d ',' -f 3)" energy3="$(qp get cis energy | tr '[]' ' ' | cut -d ',' -f 3)"
eq $energy1 $2 $thresh eq $energy1 $2 $thresh
eq $energy2 $3 $thresh eq $energy2 $3 $thresh
eq $energy3 $4 $thresh eq $energy3 $4 $thresh

View File

@ -1,55 +1,63 @@
#!/usr/bin/env bats #!/usr/bin/env bats
source $QP_ROOT/tests/bats/common.bats.sh source $QP_ROOT/tests/bats/common.bats.sh
source $QP_ROOT/quantum_package.rc
function run() { function run() {
thresh=1.e-5 thresh=1.e-5
test_exe cisd || skip test_exe cisd || skip
qp_edit -c $1 qp edit --check
ezfio set_file $1 qp set determinants n_states 2
ezfio set determinants n_states 2 qp set davidson threshold_davidson 1.e-12
ezfio set davidson threshold_davidson 1.e-12 qp set davidson n_states_diag 24
ezfio set davidson n_states_diag 24 qp run cisd
qp_run cisd $1 energy1="$(qp get cisd energy | tr '[]' ' ' | cut -d ',' -f 1)"
energy1="$(ezfio get cisd energy | tr '[]' ' ' | cut -d ',' -f 1)" energy2="$(qp get cisd energy | tr '[]' ' ' | cut -d ',' -f 2)"
energy2="$(ezfio get cisd energy | tr '[]' ' ' | cut -d ',' -f 2)" eq $energy1 $1 $thresh
eq $energy1 $2 $thresh eq $energy2 $2 $thresh
eq $energy2 $3 $thresh
} }
@test "SiH2_3B1" { # 1.53842s @test "SiH2_3B1" { # 1.53842s
run sih2_3b1.ezfio -290.015949171697 -289.805036176618 qp set_file sih2_3b1.ezfio
run -290.015949171697 -289.805036176618
} }
@test "HBO" { # 4.42968s @test "HBO" { # 4.42968s
run hbo.ezfio -100.2019254455993 -99.79484127741013 qp set_file hbo.ezfio
run -100.2019254455993 -99.79484127741013
} }
@test "HCO" { # 6.6077s @test "HCO" { # 6.6077s
run hco.ezfio -113.288687359997 -113.122945162967 qp set_file hco.ezfio
run -113.288687359997 -113.122945162967
} }
@test "H2O" { # 7.0651s @test "H2O" { # 7.0651s
run h2o.ezfio -76.22975602077072 -75.80609108747208 qp set_file h2o.ezfio
run -76.22975602077072 -75.80609108747208
} }
@test "H2S" { # 7.42152s @test "H2S" { # 7.42152s
run h2s.ezfio -398.853701416768 -398.519020035337 qp set_file h2s.ezfio
run -398.853701416768 -398.519020035337
} }
@test "N2H4" { # 15.8394s @test "N2H4" { # 15.8394s
qp_set_mo_class n2h4.ezfio -core "[1-2]" -act "[3-24]" -del "[25-48]" qp set_file n2h4.ezfio
run n2h4.ezfio -111.366247464687 -110.990795989548 qp set_mo_class --core="[1-2]" --act="[3-24]" --del="[25-48]"
run -111.366247464687 -110.990795989548
} }
@test "H2O2" { # 16.3164s @test "H2O2" { # 16.3164s
qp_set_mo_class h2o2.ezfio -core "[1-2]" -act "[3-24]" -del "[25-38]" qp set_file h2o2.ezfio
run h2o2.ezfio -151.003775695363 -150.650247854914 qp set_mo_class --core="[1-2]" --act="[3-24]" --del="[25-38]"
run -151.003775695363 -150.650247854914
} }
@test "OH" { # 18.2159s @test "OH" { # 18.2159s
run oh.ezfio -75.6087472926588 -75.5370393736601 qp set_file oh.ezfio
run -75.6087472926588 -75.5370393736601
} }
@ -58,86 +66,101 @@ function run() {
@test "CH4" { # 19.821s @test "CH4" { # 19.821s
[[ -n $TRAVIS ]] && skip [[ -n $TRAVIS ]] && skip
qp_set_mo_class ch4.ezfio -core "[1]" -act "[2-30]" -del "[31-59]" qp set_file ch4.ezfio
run ch4.ezfio -40.2403962667047 -39.8433221754964 qp set_mo_class --core="[1]" --act="[2-30]" --del="[31-59]"
run -40.2403962667047 -39.8433221754964
} }
@test "SiH3" { # 20.2202s @test "SiH3" { # 20.2202s
[[ -n $TRAVIS ]] && skip [[ -n $TRAVIS ]] && skip
run sih3.ezfio -5.57096611856522 -5.30950347928823 qp set_file sih3.ezfio
run -5.57096611856522 -5.30950347928823
} }
@test "NH3" { # 20.6771s @test "NH3" { # 20.6771s
[[ -n $TRAVIS ]] && skip [[ -n $TRAVIS ]] && skip
qp_set_mo_class nh3.ezfio -core "[1-4]" -act "[5-72]" qp set_file nh3.ezfio
run nh3.ezfio -56.2447484835843 -55.9521689975716 qp set_mo_class --core="[1-4]" --act="[5-72]"
run -56.2447484835843 -55.9521689975716
} }
@test "DHNO" { # 24.7077s @test "DHNO" { # 24.7077s
[[ -n $TRAVIS ]] && skip [[ -n $TRAVIS ]] && skip
qp_set_mo_class dhno.ezfio -core "[1-7]" -act "[8-64]" qp set_file dhno.ezfio
run dhno.ezfio -130.458814562403 -130.356308303681 qp set_mo_class --core="[1-7]" --act="[8-64]"
run -130.458814562403 -130.356308303681
} }
@test "H3COH" { # 24.7248s @test "H3COH" { # 24.7248s
[[ -n $TRAVIS ]] && skip [[ -n $TRAVIS ]] && skip
run h3coh.ezfio -115.204958752377 -114.755913828245 qp set_file h3coh.ezfio
run -115.204958752377 -114.755913828245
} }
@test "[Cu(NH3)4]2+" { # 29.9956s @test "[Cu(NH3)4]2+" { # 29.9956s
[[ -n $TRAVIS ]] && skip [[ -n $TRAVIS ]] && skip
qp_set_mo_class cu_nh3_4_2plus.ezfio -core "[1-24]" -act "[25-45]" -del "[46-87]" qp set_file cu_nh3_4_2plus.ezfio
run cu_nh3_4_2plus.ezfio -1862.98659549315 -1862.68813764356 qp set_mo_class --core="[1-24]" --act="[25-45]" --del="[46-87]"
run -1862.98684406958 -1862.68818035746
} }
@test "ClF" { # 30.3225s @test "ClF" { # 30.3225s
[[ -n $TRAVIS ]] && skip [[ -n $TRAVIS ]] && skip
run clf.ezfio -559.162476603880 -558.792395927088 qp set_file clf.ezfio
run -559.162476603880 -558.792395927088
} }
@test "C2H2" { # 35.3324s @test "C2H2" { # 35.3324s
[[ -n $TRAVIS ]] && skip [[ -n $TRAVIS ]] && skip
qp_set_mo_class c2h2.ezfio -act "[1-30]" -del "[31-36]" qp set_file c2h2.ezfio
run c2h2.ezfio -12.3566731164213 -11.9495394759914 qp set_mo_class --act="[1-30]" --del="[31-36]"
run -12.3566731164213 -11.9495394759914
} }
@test "ClO" { # 37.6949s @test "ClO" { # 37.6949s
[[ -n $TRAVIS ]] && skip [[ -n $TRAVIS ]] && skip
run clo.ezfio -534.5404021326773 -534.3818725793897 qp set_file clo.ezfio
run -534.5404021326773 -534.3818725793897
} }
@test "F2" { # 45.2078s @test "F2" { # 45.2078s
[[ -n $TRAVIS ]] && skip [[ -n $TRAVIS ]] && skip
qp_set_mo_class f2.ezfio -core "[1,2]" -act "[3-30]" -del "[31-62]" qp set_file f2.ezfio
run f2.ezfio -199.056829527539 -198.731828008346 qp set_mo_class --core="[1,2]" --act="[3-30]" --del="[31-62]"
run -199.056829527539 -198.731828008346
} }
@test "SO2" { # 47.6922s @test "SO2" { # 47.6922s
[[ -n $TRAVIS ]] && skip [[ -n $TRAVIS ]] && skip
qp_set_mo_class so2.ezfio -core "[1-8]" -act "[9-87]" qp set_file so2.ezfio
run so2.ezfio -41.5746738710350 -41.3800467740750 qp set_mo_class --core="[1-8]" --act="[9-87]"
run -41.5746738710350 -41.3800467740750
} }
@test "SO" { # 51.2476s @test "SO" { # 51.2476s
[[ -n $TRAVIS ]] && skip [[ -n $TRAVIS ]] && skip
run so.ezfio -26.0131812819785 -25.7053111980226 qp set_file so.ezfio
run -26.0131812819785 -25.7053111980226
} }
@test "CO2" { # 95.3736s @test "CO2" { # 95.3736s
[[ -n $TRAVIS ]] && skip [[ -n $TRAVIS ]] && skip
qp_set_mo_class co2.ezfio -core "[1,2]" -act "[3-30]" -del "[31-42]" qp set_file co2.ezfio
run co2.ezfio -187.959378390998 -187.432502050556 qp set_mo_class --core="[1,2]" --act="[3-30]" --del="[31-42]"
run -187.959378390998 -187.432502050556
} }
@test "N2" { # 133.1814 @test "N2" { # 133.1814
[[ -n $TRAVIS ]] && skip [[ -n $TRAVIS ]] && skip
qp_set_mo_class n2.ezfio -core "[1,2]" -act "[3-40]" -del "[41-60]" qp set_file n2.ezfio
run n2.ezfio -109.275693633982 -108.757794570948 qp set_mo_class --core="[1,2]" --act="[3-40]" --del="[41-60]"
run -109.275693633982 -108.757794570948
} }
@test "HCN" { # 133.8696s @test "HCN" { # 133.8696s
[[ -n $TRAVIS ]] && skip [[ -n $TRAVIS ]] && skip
qp_set_mo_class hcn.ezfio -core "[1,2]" -act "[3-40]" -del "[41-55]" qp set_file hcn.ezfio
run hcn.ezfio -93.0776334511721 -92.6684633795506 qp set_mo_class --core="[1,2]" --act="[3-40]" --del="[41-55]"
run -93.0776334511721 -92.6684633795506
} }

View File

@ -138,11 +138,19 @@ subroutine H_S2_u_0_nstates_openmp_work_$N_int(v_t,s_t,u_t,N_st,sze,istart,iend,
integer :: maxab, n_singles_a, n_singles_b, kcol_prev integer :: maxab, n_singles_a, n_singles_b, kcol_prev
integer*8 :: k8 integer*8 :: k8
logical :: compute_singles logical :: compute_singles
integer*8 :: last_found, left, right, right_max
double precision :: rss, mem, ratio
!TODO ! call resident_memory(rss)
! mem = dble(singles_beta_csc_size) / 1024.d0**3
!
! compute_singles = (mem+rss > qp_max_mem)
!
! if (.not.compute_singles) then
! provide singles_beta_csc
! endif
compute_singles=.True. compute_singles=.True.
maxab = max(N_det_alpha_unique, N_det_beta_unique)+1 maxab = max(N_det_alpha_unique, N_det_beta_unique)+1
allocate(idx0(maxab)) allocate(idx0(maxab))
@ -154,7 +162,7 @@ subroutine H_S2_u_0_nstates_openmp_work_$N_int(v_t,s_t,u_t,N_st,sze,istart,iend,
! ------------------------------------------------- ! -------------------------------------------------
PROVIDE N_int nthreads_davidson PROVIDE N_int nthreads_davidson
!$OMP PARALLEL DEFAULT(NONE) NUM_THREADS(nthreads_davidson) & !$OMP PARALLEL DEFAULT(SHARED) NUM_THREADS(nthreads_davidson) &
!$OMP SHARED(psi_bilinear_matrix_rows, N_det, & !$OMP SHARED(psi_bilinear_matrix_rows, N_det, &
!$OMP psi_bilinear_matrix_columns, & !$OMP psi_bilinear_matrix_columns, &
!$OMP psi_det_alpha_unique, psi_det_beta_unique, & !$OMP psi_det_alpha_unique, psi_det_beta_unique, &
@ -166,13 +174,15 @@ subroutine H_S2_u_0_nstates_openmp_work_$N_int(v_t,s_t,u_t,N_st,sze,istart,iend,
!$OMP psi_bilinear_matrix_columns_loc, & !$OMP psi_bilinear_matrix_columns_loc, &
!$OMP psi_bilinear_matrix_transp_rows_loc, & !$OMP psi_bilinear_matrix_transp_rows_loc, &
!$OMP istart, iend, istep, irp_here, v_t, s_t, & !$OMP istart, iend, istep, irp_here, v_t, s_t, &
!$OMP ishift, idx0, u_t, maxab, compute_singles) & !$OMP ishift, idx0, u_t, maxab, compute_singles, &
!$OMP singles_alpha_csc,singles_alpha_csc_idx, &
!$OMP singles_beta_csc,singles_beta_csc_idx) &
!$OMP PRIVATE(krow, kcol, tmp_det, spindet, k_a, k_b, i, & !$OMP PRIVATE(krow, kcol, tmp_det, spindet, k_a, k_b, i, &
!$OMP lcol, lrow, l_a, l_b, & !$OMP lcol, lrow, l_a, l_b, &
!$OMP buffer, doubles, n_doubles, & !$OMP buffer, doubles, n_doubles, &
!$OMP tmp_det2, hij, sij, idx, l, kcol_prev, & !$OMP tmp_det2, hij, sij, idx, l, kcol_prev, &
!$OMP singles_a, n_singles_a, singles_b, & !$OMP singles_a, n_singles_a, singles_b, ratio, &
!$OMP n_singles_b, k8) !$OMP n_singles_b, k8, last_found,left,right,right_max)
! Alpha/Beta double excitations ! Alpha/Beta double excitations
! ============================= ! =============================
@ -201,12 +211,19 @@ subroutine H_S2_u_0_nstates_openmp_work_$N_int(v_t,s_t,u_t,N_st,sze,istart,iend,
tmp_det(1:$N_int,1) = psi_det_alpha_unique(1:$N_int, krow) tmp_det(1:$N_int,1) = psi_det_alpha_unique(1:$N_int, krow)
if (kcol /= kcol_prev) then if (kcol /= kcol_prev) then
if (compute_singles) then
tmp_det(1:$N_int,2) = psi_det_beta_unique (1:$N_int, kcol) tmp_det(1:$N_int,2) = psi_det_beta_unique (1:$N_int, kcol)
if (compute_singles) then
call get_all_spin_singles_$N_int( & call get_all_spin_singles_$N_int( &
psi_det_beta_unique, idx0, & psi_det_beta_unique, idx0, &
tmp_det(1,2), N_det_beta_unique, & tmp_det(1,2), N_det_beta_unique, &
singles_b, n_singles_b) singles_b, n_singles_b)
else
n_singles_b = 0
!DIR$ LOOP COUNT avg(1000)
do k8=singles_beta_csc_idx(kcol),singles_beta_csc_idx(kcol+1)-1
n_singles_b = n_singles_b+1
singles_b(n_singles_b) = singles_beta_csc(k8)
enddo
endif endif
endif endif
kcol_prev = kcol kcol_prev = kcol
@ -214,15 +231,20 @@ subroutine H_S2_u_0_nstates_openmp_work_$N_int(v_t,s_t,u_t,N_st,sze,istart,iend,
! Loop over singly excited beta columns ! Loop over singly excited beta columns
! ------------------------------------- ! -------------------------------------
!DIR$ LOOP COUNT avg(1000)
do i=1,n_singles_b do i=1,n_singles_b
lcol = singles_b(i) lcol = singles_b(i)
tmp_det2(1:$N_int,2) = psi_det_beta_unique(1:$N_int, lcol) tmp_det2(1:$N_int,2) = psi_det_beta_unique(1:$N_int, lcol)
!---
! if (compute_singles) then
l_a = psi_bilinear_matrix_columns_loc(lcol) l_a = psi_bilinear_matrix_columns_loc(lcol)
ASSERT (l_a <= N_det) ASSERT (l_a <= N_det)
if (compute_singles) then !DIR$ UNROLL(8)
!DIR$ LOOP COUNT avg(50000)
do j=1,psi_bilinear_matrix_columns_loc(lcol+1) - psi_bilinear_matrix_columns_loc(lcol) do j=1,psi_bilinear_matrix_columns_loc(lcol+1) - psi_bilinear_matrix_columns_loc(lcol)
lrow = psi_bilinear_matrix_rows(l_a) lrow = psi_bilinear_matrix_rows(l_a)
ASSERT (lrow <= N_det_alpha_unique) ASSERT (lrow <= N_det_alpha_unique)
@ -238,11 +260,75 @@ subroutine H_S2_u_0_nstates_openmp_work_$N_int(v_t,s_t,u_t,N_st,sze,istart,iend,
call get_all_spin_singles_$N_int( & call get_all_spin_singles_$N_int( &
buffer, idx, tmp_det(1,1), j, & buffer, idx, tmp_det(1,1), j, &
singles_a, n_singles_a ) singles_a, n_singles_a )
endif
!-----
! else
!
! ! Search for singles
!
!call cpu_time(time0)
! ! Right boundary
! l_a = psi_bilinear_matrix_columns_loc(lcol+1)-1
! ASSERT (l_a <= N_det)
! do j=1,psi_bilinear_matrix_columns_loc(lcol+1) - psi_bilinear_matrix_columns_loc(lcol)
! lrow = psi_bilinear_matrix_rows(l_a)
! ASSERT (lrow <= N_det_alpha_unique)
!
! left = singles_alpha_csc_idx(krow)
! right_max = -1_8
! right = singles_alpha_csc_idx(krow+1)
! do while (right-left>0_8)
! k8 = shiftr(right+left,1)
! if (singles_alpha_csc(k8) > lrow) then
! right = k8
! else if (singles_alpha_csc(k8) < lrow) then
! left = k8 + 1_8
! else
! right_max = k8+1_8
! exit
! endif
! enddo
! if (right_max > 0_8) exit
! l_a = l_a-1
! enddo
! if (right_max < 0_8) right_max = singles_alpha_csc_idx(krow)
!
! ! Search
! n_singles_a = 0
! l_a = psi_bilinear_matrix_columns_loc(lcol)
! ASSERT (l_a <= N_det)
!
! last_found = singles_alpha_csc_idx(krow)
! do j=1,psi_bilinear_matrix_columns_loc(lcol+1) - psi_bilinear_matrix_columns_loc(lcol)
! lrow = psi_bilinear_matrix_rows(l_a)
! ASSERT (lrow <= N_det_alpha_unique)
!
! left = last_found
! right = right_max
! do while (right-left>0_8)
! k8 = shiftr(right+left,1)
! if (singles_alpha_csc(k8) > lrow) then
! right = k8
! else if (singles_alpha_csc(k8) < lrow) then
! left = k8 + 1_8
! else
! n_singles_a += 1
! singles_a(n_singles_a) = l_a
! last_found = k8+1_8
! exit
! endif
! enddo
! l_a = l_a+1
! enddo
! j = j-1
!
! endif
!-----
! Loop over alpha singles ! Loop over alpha singles
! ----------------------- ! -----------------------
!DIR$ LOOP COUNT avg(1000)
do k = 1,n_singles_a do k = 1,n_singles_a
l_a = singles_a(k) l_a = singles_a(k)
ASSERT (l_a <= N_det) ASSERT (l_a <= N_det)
@ -253,6 +339,7 @@ subroutine H_S2_u_0_nstates_openmp_work_$N_int(v_t,s_t,u_t,N_st,sze,istart,iend,
tmp_det2(1:$N_int,1) = psi_det_alpha_unique(1:$N_int, lrow) tmp_det2(1:$N_int,1) = psi_det_alpha_unique(1:$N_int, lrow)
call i_H_j_double_alpha_beta(tmp_det,tmp_det2,$N_int,hij) call i_H_j_double_alpha_beta(tmp_det,tmp_det2,$N_int,hij)
call get_s2(tmp_det,tmp_det2,$N_int,sij) call get_s2(tmp_det,tmp_det2,$N_int,sij)
!DIR$ LOOP COUNT AVG(4)
do l=1,N_st do l=1,N_st
v_t(l,k_a) = v_t(l,k_a) + hij * u_t(l,l_a) v_t(l,k_a) = v_t(l,k_a) + hij * u_t(l,l_a)
s_t(l,k_a) = s_t(l,k_a) + sij * u_t(l,l_a) s_t(l,k_a) = s_t(l,k_a) + sij * u_t(l,l_a)
@ -295,6 +382,8 @@ subroutine H_S2_u_0_nstates_openmp_work_$N_int(v_t,s_t,u_t,N_st,sze,istart,iend,
! Loop inside the beta column to gather all the connected alphas ! Loop inside the beta column to gather all the connected alphas
lcol = psi_bilinear_matrix_columns(k_a) lcol = psi_bilinear_matrix_columns(k_a)
l_a = psi_bilinear_matrix_columns_loc(lcol) l_a = psi_bilinear_matrix_columns_loc(lcol)
!DIR$ LOOP COUNT avg(200000)
do i=1,N_det_alpha_unique do i=1,N_det_alpha_unique
if (l_a > N_det) exit if (l_a > N_det) exit
lcol = psi_bilinear_matrix_columns(l_a) lcol = psi_bilinear_matrix_columns(l_a)
@ -316,6 +405,7 @@ subroutine H_S2_u_0_nstates_openmp_work_$N_int(v_t,s_t,u_t,N_st,sze,istart,iend,
! ---------------------------------- ! ----------------------------------
tmp_det2(1:$N_int,2) = psi_det_beta_unique (1:$N_int, kcol) tmp_det2(1:$N_int,2) = psi_det_beta_unique (1:$N_int, kcol)
!DIR$ LOOP COUNT avg(1000)
do i=1,n_singles_a do i=1,n_singles_a
l_a = singles_a(i) l_a = singles_a(i)
ASSERT (l_a <= N_det) ASSERT (l_a <= N_det)
@ -326,6 +416,7 @@ subroutine H_S2_u_0_nstates_openmp_work_$N_int(v_t,s_t,u_t,N_st,sze,istart,iend,
tmp_det2(1:$N_int,1) = psi_det_alpha_unique(1:$N_int, lrow) tmp_det2(1:$N_int,1) = psi_det_alpha_unique(1:$N_int, lrow)
call i_H_j_mono_spin( tmp_det, tmp_det2, $N_int, 1, hij) call i_H_j_mono_spin( tmp_det, tmp_det2, $N_int, 1, hij)
!DIR$ LOOP COUNT AVG(4)
do l=1,N_st do l=1,N_st
v_t(l,k_a) = v_t(l,k_a) + hij * u_t(l,l_a) v_t(l,k_a) = v_t(l,k_a) + hij * u_t(l,l_a)
! single => sij = 0 ! single => sij = 0
@ -336,6 +427,7 @@ subroutine H_S2_u_0_nstates_openmp_work_$N_int(v_t,s_t,u_t,N_st,sze,istart,iend,
! Compute Hij for all alpha doubles ! Compute Hij for all alpha doubles
! ---------------------------------- ! ----------------------------------
!DIR$ LOOP COUNT avg(50000)
do i=1,n_doubles do i=1,n_doubles
l_a = doubles(i) l_a = doubles(i)
ASSERT (l_a <= N_det) ASSERT (l_a <= N_det)
@ -344,6 +436,7 @@ subroutine H_S2_u_0_nstates_openmp_work_$N_int(v_t,s_t,u_t,N_st,sze,istart,iend,
ASSERT (lrow <= N_det_alpha_unique) ASSERT (lrow <= N_det_alpha_unique)
call i_H_j_double_spin( tmp_det(1,1), psi_det_alpha_unique(1, lrow), $N_int, hij) call i_H_j_double_spin( tmp_det(1,1), psi_det_alpha_unique(1, lrow), $N_int, hij)
!DIR$ LOOP COUNT AVG(4)
do l=1,N_st do l=1,N_st
v_t(l,k_a) = v_t(l,k_a) + hij * u_t(l,l_a) v_t(l,k_a) = v_t(l,k_a) + hij * u_t(l,l_a)
! same spin => sij = 0 ! same spin => sij = 0
@ -375,6 +468,7 @@ subroutine H_S2_u_0_nstates_openmp_work_$N_int(v_t,s_t,u_t,N_st,sze,istart,iend,
! Loop inside the alpha row to gather all the connected betas ! Loop inside the alpha row to gather all the connected betas
lrow = psi_bilinear_matrix_transp_rows(k_b) lrow = psi_bilinear_matrix_transp_rows(k_b)
l_b = psi_bilinear_matrix_transp_rows_loc(lrow) l_b = psi_bilinear_matrix_transp_rows_loc(lrow)
!DIR$ LOOP COUNT avg(200000)
do i=1,N_det_beta_unique do i=1,N_det_beta_unique
if (l_b > N_det) exit if (l_b > N_det) exit
lrow = psi_bilinear_matrix_transp_rows(l_b) lrow = psi_bilinear_matrix_transp_rows(l_b)
@ -396,6 +490,7 @@ subroutine H_S2_u_0_nstates_openmp_work_$N_int(v_t,s_t,u_t,N_st,sze,istart,iend,
! ---------------------------------- ! ----------------------------------
tmp_det2(1:$N_int,1) = psi_det_alpha_unique(1:$N_int, krow) tmp_det2(1:$N_int,1) = psi_det_alpha_unique(1:$N_int, krow)
!DIR$ LOOP COUNT avg(1000)
do i=1,n_singles_b do i=1,n_singles_b
l_b = singles_b(i) l_b = singles_b(i)
ASSERT (l_b <= N_det) ASSERT (l_b <= N_det)
@ -407,6 +502,7 @@ subroutine H_S2_u_0_nstates_openmp_work_$N_int(v_t,s_t,u_t,N_st,sze,istart,iend,
call i_H_j_mono_spin( tmp_det, tmp_det2, $N_int, 2, hij) call i_H_j_mono_spin( tmp_det, tmp_det2, $N_int, 2, hij)
l_a = psi_bilinear_matrix_transp_order(l_b) l_a = psi_bilinear_matrix_transp_order(l_b)
ASSERT (l_a <= N_det) ASSERT (l_a <= N_det)
!DIR$ LOOP COUNT AVG(4)
do l=1,N_st do l=1,N_st
v_t(l,k_a) = v_t(l,k_a) + hij * u_t(l,l_a) v_t(l,k_a) = v_t(l,k_a) + hij * u_t(l,l_a)
! single => sij = 0 ! single => sij = 0
@ -416,6 +512,7 @@ subroutine H_S2_u_0_nstates_openmp_work_$N_int(v_t,s_t,u_t,N_st,sze,istart,iend,
! Compute Hij for all beta doubles ! Compute Hij for all beta doubles
! ---------------------------------- ! ----------------------------------
!DIR$ LOOP COUNT avg(50000)
do i=1,n_doubles do i=1,n_doubles
l_b = doubles(i) l_b = doubles(i)
ASSERT (l_b <= N_det) ASSERT (l_b <= N_det)
@ -427,6 +524,7 @@ subroutine H_S2_u_0_nstates_openmp_work_$N_int(v_t,s_t,u_t,N_st,sze,istart,iend,
l_a = psi_bilinear_matrix_transp_order(l_b) l_a = psi_bilinear_matrix_transp_order(l_b)
ASSERT (l_a <= N_det) ASSERT (l_a <= N_det)
!DIR$ LOOP COUNT AVG(4)
do l=1,N_st do l=1,N_st
v_t(l,k_a) = v_t(l,k_a) + hij * u_t(l,l_a) v_t(l,k_a) = v_t(l,k_a) + hij * u_t(l,l_a)
! same spin => sij = 0 ! same spin => sij = 0
@ -454,6 +552,7 @@ subroutine H_S2_u_0_nstates_openmp_work_$N_int(v_t,s_t,u_t,N_st,sze,istart,iend,
hij = diag_H_mat_elem(tmp_det,$N_int) hij = diag_H_mat_elem(tmp_det,$N_int)
sij = diag_S_mat_elem(tmp_det,$N_int) sij = diag_S_mat_elem(tmp_det,$N_int)
!DIR$ LOOP COUNT AVG(4)
do l=1,N_st do l=1,N_st
v_t(l,k_a) = v_t(l,k_a) + hij * u_t(l,k_a) v_t(l,k_a) = v_t(l,k_a) + hij * u_t(l,k_a)
s_t(l,k_a) = s_t(l,k_a) + sij * u_t(l,k_a) s_t(l,k_a) = s_t(l,k_a) + sij * u_t(l,k_a)

View File

@ -135,33 +135,6 @@ BEGIN_TEMPLATE
END_PROVIDER END_PROVIDER
BEGIN_PROVIDER [ integer, n_singles_max_$alpha ]
implicit none
BEGIN_DOC
! Maximum number of single excitations with the $\\$alpha$ spin
END_DOC
n_singles_max_$alpha = elec_$alpha_num * (mo_num - elec_$alpha_num)
END_PROVIDER
BEGIN_PROVIDER [ integer, psi_det_$alpha_unique_singles, (n_singles_max_$alpha,N_det_$alpha_unique) ]
implicit none
BEGIN_DOC
! For each unique spin-determinant, the list of indices of spin-determinant that
! are singly excited.
END_DOC
integer :: i
integer, allocatable :: idx0(:)
allocate( idx0(N_det_$alpha_unique) )
call get_all_spin_singles_$N_int( &
psi_det_beta_unique, idx0, &
tmp_det(1,2), N_det_beta_unique, &
singles_b, n_singles_b)
endif
END_PROVIDER
SUBST [ alpha ] SUBST [ alpha ]
@ -176,7 +149,7 @@ END_TEMPLATE
integer function get_index_in_psi_det_alpha_unique(key,Nint) integer function get_index_in_psi_det_alpha_unique(key,Nint)
use bitmasks use bitmasks
BEGIN_DOC BEGIN_DOC
! Returns the index of the determinant in the ``psi_det_alpha_unique`` array ! Returns the index of the determinant in the :c:data:`psi_det_alpha_unique` array
END_DOC END_DOC
implicit none implicit none
@ -257,7 +230,7 @@ end
integer function get_index_in_psi_det_beta_unique(key,Nint) integer function get_index_in_psi_det_beta_unique(key,Nint)
use bitmasks use bitmasks
BEGIN_DOC BEGIN_DOC
! Returns the index of the determinant in the ``psi_det_beta_unique`` array ! Returns the index of the determinant in the :c:data:`psi_det_beta_unique` array
END_DOC END_DOC
implicit none implicit none
@ -493,7 +466,7 @@ BEGIN_PROVIDER [ integer, psi_bilinear_matrix_order_reverse , (N_det) ]
use bitmasks use bitmasks
implicit none implicit none
BEGIN_DOC BEGIN_DOC
! Order which allows to go from ``psi_bilinear_matrix`` to ``psi_det`` ! Order which allows to go from :c:data:`psi_bilinear_matrix` to :c:data:`psi_det`
END_DOC END_DOC
integer :: k integer :: k
!$OMP PARALLEL DO DEFAULT(SHARED) PRIVATE(k) !$OMP PARALLEL DO DEFAULT(SHARED) PRIVATE(k)
@ -516,7 +489,7 @@ BEGIN_PROVIDER [ integer, psi_bilinear_matrix_columns_loc, (N_det_beta_unique+1)
! !
! Rows are $\alpha$ determinants and columns are $\beta$. ! Rows are $\alpha$ determinants and columns are $\beta$.
! !
! Order refers to ``psi_det`` ! Order refers to :c:data:`psi_det`
END_DOC END_DOC
integer :: i,j,k, l integer :: i,j,k, l
@ -548,7 +521,7 @@ END_PROVIDER
use bitmasks use bitmasks
implicit none implicit none
BEGIN_DOC BEGIN_DOC
! Transpose of ``psi_bilinear_matrix`` ! Transpose of :c:data:`psi_bilinear_matrix`
! !
! $D_\beta^\dagger.C^\dagger.D_\alpha$ ! $D_\beta^\dagger.C^\dagger.D_\alpha$
! !
@ -609,7 +582,7 @@ BEGIN_PROVIDER [ integer, psi_bilinear_matrix_transp_rows_loc, (N_det_alpha_uniq
use bitmasks use bitmasks
implicit none implicit none
BEGIN_DOC BEGIN_DOC
! Location of the columns in the ``psi_bilinear_matrix`` ! Location of the columns in the :c:data:`psi_bilinear_matrix`
END_DOC END_DOC
integer :: i,j,k, l integer :: i,j,k, l
@ -635,8 +608,8 @@ BEGIN_PROVIDER [ integer, psi_bilinear_matrix_order_transp_reverse , (N_det) ]
use bitmasks use bitmasks
implicit none implicit none
BEGIN_DOC BEGIN_DOC
! Order which allows to go from ``psi_bilinear_matrix_order_transp`` to ! Order which allows to go from :c:data:`psi_bilinear_matrix_order_transp` to
! ``psi_bilinear_matrix`` ! :c:data:`psi_bilinear_matrix`
END_DOC END_DOC
integer :: k integer :: k
psi_bilinear_matrix_order_transp_reverse = -1 psi_bilinear_matrix_order_transp_reverse = -1
@ -757,7 +730,7 @@ subroutine generate_all_alpha_beta_det_products
!$OMP PRIVATE(i,j,k,l,tmp_det,iproc) !$OMP PRIVATE(i,j,k,l,tmp_det,iproc)
!$ iproc = omp_get_thread_num() !$ iproc = omp_get_thread_num()
allocate (tmp_det(N_int,2,N_det_alpha_unique)) allocate (tmp_det(N_int,2,N_det_alpha_unique))
!$OMP DO SCHEDULE(static,1) !$OMP DO SCHEDULE(static,8)
do j=1,N_det_beta_unique do j=1,N_det_beta_unique
l = 1 l = 1
do i=1,N_det_alpha_unique do i=1,N_det_alpha_unique
@ -789,9 +762,7 @@ subroutine get_all_spin_singles_and_doubles(buffer, idx, spindet, Nint, size_buf
! Returns the indices of all the single and double excitations in the list of ! Returns the indices of all the single and double excitations in the list of
! unique $\alpha$ determinants. ! unique $\alpha$ determinants.
! !
! ..warning:: ! Warning: The buffer is transposed.
!
! The buffer is transposed.
! !
END_DOC END_DOC
integer, intent(in) :: Nint, size_buffer, idx(size_buffer) integer, intent(in) :: Nint, size_buffer, idx(size_buffer)
@ -887,7 +858,8 @@ end
subroutine copy_psi_bilinear_to_psi(psi, isize) subroutine copy_psi_bilinear_to_psi(psi, isize)
implicit none implicit none
BEGIN_DOC BEGIN_DOC
! Overwrites ``psi_det`` and ``psi_coef`` with the wave function in bilinear order ! Overwrites :c:data:`psi_det` and :c:data:`psi_coef` with the wave function
! in bilinear order
END_DOC END_DOC
integer, intent(in) :: isize integer, intent(in) :: isize
integer(bit_kind), intent(out) :: psi(N_int,2,isize) integer(bit_kind), intent(out) :: psi(N_int,2,isize)
@ -900,19 +872,14 @@ subroutine copy_psi_bilinear_to_psi(psi, isize)
enddo enddo
end end
BEGIN_PROVIDER [ integer, singles_alpha_size ]
implicit none
BEGIN_DOC
! Dimension of the ``singles_alpha`` array
END_DOC
singles_alpha_size = elec_alpha_num * (mo_num - elec_alpha_num)
END_PROVIDER
BEGIN_PROVIDER [ integer*8, singles_alpha_csc_idx, (N_det_alpha_unique+1) ] BEGIN_PROVIDER [ integer*8, singles_alpha_csc_idx, (N_det_alpha_unique+1) ]
&BEGIN_PROVIDER [ integer*8, singles_alpha_csc_size ] &BEGIN_PROVIDER [ integer*8, singles_alpha_csc_size ]
implicit none implicit none
BEGIN_DOC BEGIN_DOC
! Dimension of the ``singles_alpha`` array ! singles_alpha_csc_size : Dimension of the :c:data:`singles_alpha_csc` array
!
! singles_alpha_csc_idx : Index where the single excitations of determinant i start
END_DOC END_DOC
integer :: i,j integer :: i,j
integer, allocatable :: idx0(:), s(:) integer, allocatable :: idx0(:), s(:)
@ -924,10 +891,10 @@ END_PROVIDER
!$OMP PARALLEL DEFAULT(NONE) & !$OMP PARALLEL DEFAULT(NONE) &
!$OMP SHARED(N_det_alpha_unique, psi_det_alpha_unique, & !$OMP SHARED(N_det_alpha_unique, psi_det_alpha_unique, &
!$OMP idx0, N_int, singles_alpha_csc, & !$OMP idx0, N_int, singles_alpha_csc, &
!$OMP singles_alpha_size, singles_alpha_csc_idx) & !$OMP elec_alpha_num, mo_num, singles_alpha_csc_idx) &
!$OMP PRIVATE(i,s,j) !$OMP PRIVATE(i,s,j)
allocate (s(singles_alpha_size)) allocate (s(elec_alpha_num * (mo_num-elec_alpha_num) ))
!$OMP DO SCHEDULE(static,1) !$OMP DO SCHEDULE(static,64)
do i=1, N_det_alpha_unique do i=1, N_det_alpha_unique
call get_all_spin_singles( & call get_all_spin_singles( &
psi_det_alpha_unique, idx0, psi_det_alpha_unique(1,i), N_int,& psi_det_alpha_unique, idx0, psi_det_alpha_unique(1,i), N_int,&
@ -950,7 +917,7 @@ END_PROVIDER
BEGIN_PROVIDER [ integer, singles_alpha_csc, (singles_alpha_csc_size) ] BEGIN_PROVIDER [ integer, singles_alpha_csc, (singles_alpha_csc_size) ]
implicit none implicit none
BEGIN_DOC BEGIN_DOC
! Dimension of the singles_alpha array ! Indices of all single excitations
END_DOC END_DOC
integer :: i, k integer :: i, k
integer, allocatable :: idx0(:) integer, allocatable :: idx0(:)
@ -977,6 +944,78 @@ END_PROVIDER
BEGIN_PROVIDER [ integer*8, singles_beta_csc_idx, (N_det_beta_unique+1) ]
&BEGIN_PROVIDER [ integer*8, singles_beta_csc_size ]
implicit none
BEGIN_DOC
! singles_beta_csc_size : Dimension of the :c:data:`singles_beta_csc` array
!
! singles_beta_csc_idx : Index where the single excitations of determinant i start
END_DOC
integer :: i,j
integer, allocatable :: idx0(:), s(:)
allocate (idx0(N_det_beta_unique))
do i=1, N_det_beta_unique
idx0(i) = i
enddo
!$OMP PARALLEL DEFAULT(NONE) &
!$OMP SHARED(N_det_beta_unique, psi_det_beta_unique, &
!$OMP idx0, N_int, singles_beta_csc, &
!$OMP elec_beta_num, mo_num, singles_beta_csc_idx) &
!$OMP PRIVATE(i,s,j)
allocate (s(elec_beta_num*(mo_num-elec_beta_num)))
!$OMP DO SCHEDULE(static,1)
do i=1, N_det_beta_unique
call get_all_spin_singles( &
psi_det_beta_unique, idx0, psi_det_beta_unique(1,i), N_int,&
N_det_beta_unique, s, j)
singles_beta_csc_idx(i+1) = int(j,8)
enddo
!$OMP END DO
deallocate(s)
!$OMP END PARALLEL
deallocate(idx0)
singles_beta_csc_idx(1) = 1_8
do i=2, N_det_beta_unique+1
singles_beta_csc_idx(i) = singles_beta_csc_idx(i) + singles_beta_csc_idx(i-1)
enddo
singles_beta_csc_size = singles_beta_csc_idx(N_det_beta_unique+1)
END_PROVIDER
BEGIN_PROVIDER [ integer, singles_beta_csc, (singles_beta_csc_size) ]
implicit none
BEGIN_DOC
! Indices of all single excitations
END_DOC
integer :: i, k
integer, allocatable :: idx0(:)
allocate (idx0(N_det_beta_unique))
do i=1, N_det_beta_unique
idx0(i) = i
enddo
!$OMP PARALLEL DO DEFAULT(NONE) &
!$OMP SHARED(N_det_beta_unique, psi_det_beta_unique, &
!$OMP idx0, N_int, singles_beta_csc, singles_beta_csc_idx)&
!$OMP PRIVATE(i,k) SCHEDULE(static,64)
do i=1, N_det_beta_unique
call get_all_spin_singles( &
psi_det_beta_unique, idx0, psi_det_beta_unique(1,i), N_int,&
N_det_beta_unique, singles_beta_csc(singles_beta_csc_idx(i)),&
k)
enddo
!$OMP END PARALLEL DO
deallocate(idx0)
END_PROVIDER
subroutine get_all_spin_singles_and_doubles_1(buffer, idx, spindet, size_buffer, singles, doubles, n_singles, n_doubles) subroutine get_all_spin_singles_and_doubles_1(buffer, idx, spindet, size_buffer, singles, doubles, n_singles, n_doubles)
use bitmasks use bitmasks
implicit none implicit none

View File

@ -1,6 +1,7 @@
#!/usr/bin/env bats #!/usr/bin/env bats
source $QP_ROOT/tests/bats/common.bats.sh source $QP_ROOT/tests/bats/common.bats.sh
source $QP_ROOT/quantum_package.rc
function run { function run {
local INPUT=$1 local INPUT=$1
@ -14,12 +15,12 @@ function run {
fi fi
cp ${QP_ROOT}/tests/input/$INPUT . cp ${QP_ROOT}/tests/input/$INPUT .
rm -rf $EZ rm -rf $EZ
qp_create_ezfio_from_xyz \ qp create_ezfio_from_xyz \
$INPUT -b "$BASIS" -m $MULT -c $CHARGE $PSEUDO -o $EZ $INPUT --basis="$BASIS" -m $MULT -c $CHARGE $PSEUDO -o $EZ
qp_edit -c $EZ qp edit --check
ezfio set_file $EZ qp set scf_utils thresh_scf 1.e-12
ezfio set scf_utils thresh_scf 1.e-12 qp set ao_two_e_ints io_ao_two_e_integrals "Write"
ezfio set ao_two_e_ints io_ao_two_e_integrals "Write" qp set mo_two_e_ints io_mo_two_e_integrals "Write"
} }

View File

@ -1,16 +1,16 @@
#!/usr/bin/env bats #!/usr/bin/env bats
source $QP_ROOT/tests/bats/common.bats.sh source $QP_ROOT/tests/bats/common.bats.sh
source $QP_ROOT/quantum_package.rc
function run { function run {
local INPUT=$1 local INPUT=$1
local EZ=$2 local EZ=$2
cp ${QP_ROOT}/tests/input/$INPUT . cp ${QP_ROOT}/tests/input/$INPUT .
qp_convert_output_to_ezfio $INPUT -o $EZ qp convert_output_to_ezfio $INPUT -o $EZ
qp_edit -c $EZ qp set_file $EZ
ezfio set_file $EZ qp edit --check
ezfio set scf_utils thresh_scf 1.e-12 qp set scf_utils thresh_scf 1.e-12
echo "Write" > ${EZ}/ao_two_e_ints/io_ao_two_e_integrals
} }
@test "HBO GAMESS" { @test "HBO GAMESS" {
@ -23,5 +23,5 @@ function run {
@test "[Cu(NH3)4]2+ GAMESS" { @test "[Cu(NH3)4]2+ GAMESS" {
run cu_nh3_4_2plus.gms.out cu_nh3_4_2plus.ezfio run cu_nh3_4_2plus.gms.out cu_nh3_4_2plus.ezfio
ezfio set scf_utils thresh_scf 1.e-10 qp set scf_utils thresh_scf 1.e-10
} }

View File

@ -1,140 +1,163 @@
#!/usr/bin/env bats #!/usr/bin/env bats
source $QP_ROOT/tests/bats/common.bats.sh source $QP_ROOT/tests/bats/common.bats.sh
source $QP_ROOT/quantum_package.rc
function run() { function run() {
thresh=$3 thresh=$2
test_exe fci || skip test_exe fci || skip
qp_edit -c $1 qp edit --check
ezfio set_file $1 qp set determinants n_det_max 8000
ezfio set determinants n_det_max 8000 qp set determinants n_states 1
ezfio set determinants n_states 1 qp set davidson threshold_davidson 1.e-10
ezfio set davidson threshold_davidson 1.e-10 qp set davidson n_states_diag 8
ezfio set davidson n_states_diag 8 qp run fci
qp_run fci $1
energy1="$(ezfio get fci energy | tr '[]' ' ' | cut -d ',' -f 1)" energy1="$(ezfio get fci energy | tr '[]' ' ' | cut -d ',' -f 1)"
eq $energy1 $2 $thresh eq $energy1 $1 $thresh
} }
@test "NH3" { # 10.6657s @test "NH3" { # 10.6657s
qp_set_mo_class nh3.ezfio -core "[1-4]" -act "[5-72]" qp set_file nh3.ezfio
run nh3.ezfio -56.2447484821590 1.e-5 qp set_mo_class --core="[1-4]" --act="[5-72]"
run -56.2447484821590 1.e-5
} }
@test "DHNO" { # 11.4721s @test "DHNO" { # 11.4721s
qp_set_mo_class dhno.ezfio -core "[1-7]" -act "[8-64]" qp set_file dhno.ezfio
run dhno.ezfio -130.45902272485 1.e-5 qp set_mo_class --core="[1-7]" --act="[8-64]"
run -130.45902272485 1.e-5
} }
@test "HCO" { # 12.2868s @test "HCO" { # 12.2868s
run hco.ezfio -113.297580169167 1.444e-05 qp set_file hco.ezfio
run -113.297580169167 1.444e-05
} }
@test "H2O2" { # 12.9214s @test "H2O2" { # 12.9214s
qp_set_mo_class h2o2.ezfio -core "[1-2]" -act "[3-24]" -del "[25-38]" qp set_file h2o2.ezfio
run h2o2.ezfio -151.004593814816 0.00011948 qp set_mo_class --core="[1-2]" --act="[3-24]" --del="[25-38]"
run -151.004593814816 0.00011948
} }
@test "HBO" { # 13.3144s @test "HBO" { # 13.3144s
run hbo.ezfio -100.213113590746 1.36e-05 qp set_file hbo.ezfio
run -100.213113590746 1.36e-05
} }
@test "H2O" { # 11.3727s @test "H2O" { # 11.3727s
run h2o.ezfio -76.2358876720796 1.988e-05 qp set_file h2o.ezfio
run -76.2358876720796 1.988e-05
} }
@test "ClO" { # 13.3755s @test "ClO" { # 13.3755s
run clo.ezfio -534.545851735243 0.00019344 qp set_file clo.ezfio
run -534.545851735243 0.00019344
} }
@test "SO" { # 13.4952s @test "SO" { # 13.4952s
run so.ezfio -26.0118045926651 0.00014494 qp set_file so.ezfio
run -26.0118045926651 0.00014494
} }
@test "H2S" { # 13.6745s @test "H2S" { # 13.6745s
[[ -n $TRAVIS ]] && skip [[ -n $TRAVIS ]] && skip
run h2s.ezfio -398.859198067009 8.46e-06 qp set_file h2s.ezfio
run -398.859198067009 8.46e-06
} }
@test "OH" { # 13.865s @test "OH" { # 13.865s
[[ -n $TRAVIS ]] && skip [[ -n $TRAVIS ]] && skip
run oh.ezfio -75.6120973654659 1.744e-05 qp set_file oh.ezfio
run -75.6120973654659 1.744e-05
} }
@test "SiH2_3B1" { # 13.938ss @test "SiH2_3B1" { # 13.938ss
[[ -n $TRAVIS ]] && skip [[ -n $TRAVIS ]] && skip
run sih2_3b1.ezfio -290.017547995946 1.e-5 qp set_file sih2_3b1.ezfio
run -290.017547995946 1.e-5
} }
@test "H3COH" { # 14.7299s @test "H3COH" { # 14.7299s
[[ -n $TRAVIS ]] && skip [[ -n $TRAVIS ]] && skip
run h3coh.ezfio -115.200348295051 0.00018132 qp set_file h3coh.ezfio
run -115.200348295051 0.00018132
} }
@test "SiH3" { # 15.99s @test "SiH3" { # 15.99s
[[ -n $TRAVIS ]] && skip [[ -n $TRAVIS ]] && skip
run sih3.ezfio -5.57259338826877 1.116e-05 qp set_file sih3.ezfio
run -5.57259338826877 1.116e-05
} }
@test "CH4" { # 16.1612s @test "CH4" { # 16.1612s
[[ -n $TRAVIS ]] && skip [[ -n $TRAVIS ]] && skip
qp_set_mo_class ch4.ezfio -core "[1]" -act "[2-30]" -del "[31-59]" qp set_file ch4.ezfio
run ch4.ezfio -40.2410273920655 3.02e-06 qp set_mo_class --core="[1]" --act="[2-30]" --del="[31-59]"
run -40.2410273920655 3.02e-06
} }
@test "ClF" { # 16.8864s @test "ClF" { # 16.8864s
[[ -n $TRAVIS ]] && skip [[ -n $TRAVIS ]] && skip
run clf.ezfio -559.171627972338 0.00021062 qp set_file clf.ezfio
run -559.171627972338 0.00021062
} }
@test "SO2" { # 17.5645s @test "SO2" { # 17.5645s
[[ -n $TRAVIS ]] && skip [[ -n $TRAVIS ]] && skip
qp_set_mo_class so2.ezfio -core "[1-8]" -act "[9-87]" qp set_file so2.ezfio
run so2.ezfio -41.5746738710646 1.e-5 qp set_mo_class --core="[1-8]" --act="[9-87]"
run -41.5746738710646 1.e-5
} }
@test "C2H2" { # 17.6827s @test "C2H2" { # 17.6827s
[[ -n $TRAVIS ]] && skip [[ -n $TRAVIS ]] && skip
qp_set_mo_class c2h2.ezfio -act "[1-30]" -del "[31-36]" qp set_file c2h2.ezfio
run c2h2.ezfio -12.3681909988587 9.402e-05 qp set_mo_class --act="[1-30]" --del="[31-36]"
run -12.3681909988587 9.402e-05
} }
@test "N2" { # 18.0198s @test "N2" { # 18.0198s
[[ -n $TRAVIS ]] && skip [[ -n $TRAVIS ]] && skip
qp_set_mo_class n2.ezfio -core "[1,2]" -act "[3-40]" -del "[41-60]" qp set_file n2.ezfio
run n2.ezfio -109.291407960731 0.00010052 qp set_mo_class --core="[1,2]" --act="[3-40]" --del="[41-60]"
run -109.291407960731 0.00010052
} }
@test "N2H4" { # 18.5006s @test "N2H4" { # 18.5006s
[[ -n $TRAVIS ]] && skip [[ -n $TRAVIS ]] && skip
qp_set_mo_class n2h4.ezfio -core "[1-2]" -act "[3-24]" -del "[25-48]" qp set_file n2h4.ezfio
run n2h4.ezfio -111.367266319251 0.00010255 qp set_mo_class --core="[1-2]" --act="[3-24]" --del="[25-48]"
run -111.367266319251 0.00010255
} }
@test "CO2" { # 21.1748s @test "CO2" { # 21.1748s
[[ -n $TRAVIS ]] && skip [[ -n $TRAVIS ]] && skip
qp_set_mo_class co2.ezfio -core "[1,2]" -act "[3-30]" -del "[31-42]" qp set_file co2.ezfio
run co2.ezfio -187.968251806361 0.00028902 qp set_mo_class --core="[1,2]" --act="[3-30]" --del="[31-42]"
run -187.968251806361 0.00028902
} }
@test "F2" { # 21.331s @test "F2" { # 21.331s
[[ -n $TRAVIS ]] && skip [[ -n $TRAVIS ]] && skip
qp_set_mo_class f2.ezfio -core "[1,2]" -act "[3-30]" -del "[31-62]" qp set_file f2.ezfio
run f2.ezfio -199.068698950474 0.00014534 qp set_mo_class --core="[1,2]" --act="[3-30]" --del="[31-62]"
run -199.068698950474 0.00014534
} }
@test "[Cu(NH3)4]2+" { # 25.0417s @test "[Cu(NH3)4]2+" { # 25.0417s
[[ -n $TRAVIS ]] && skip [[ -n $TRAVIS ]] && skip
qp_set_mo_class cu_nh3_4_2plus.ezfio -core "[1-24]" -act "[25-45]" -del "[46-87]" qp set_file cu_nh3_4_2plus.ezfio
run cu_nh3_4_2plus.ezfio -1862.98632761077 5.e-07 qp set_mo_class --core="[1-24]" --act="[25-45]" --del="[46-87]"
run -1862.98632761077 5.e-07
} }
@test "HCN" { # 20.3273s @test "HCN" { # 20.3273s
[[ -n $TRAVIS ]] && skip [[ -n $TRAVIS ]] && skip
qp_set_mo_class hcn.ezfio -core "[1,2]" -act "[3-40]" -del "[41-55]" qp set_file hcn.ezfio
run hcn.ezfio -93.0774580352237 0.00016522 qp set_mo_class --core="[1,2]" --act="[3-40]" --del="[41-55]"
run -93.0774580352237 0.00016522
} }

View File

@ -1,15 +1,16 @@
#!/usr/bin/env bats #!/usr/bin/env bats
source $QP_ROOT/tests/bats/common.bats.sh source $QP_ROOT/tests/bats/common.bats.sh
source $QP_ROOT/quantum_package.rc
function run() { function run() {
thresh=1.e-8 thresh=1.e-8
test_exe scf || skip test_exe scf || skip
qp_edit -c $1 qp set_file $1
ezfio set_file $1 qp edit --check
qp_run scf $1 qp run scf
qp_set_frozen_core $1 qp set_frozen_core
energy="$(ezfio get hartree_fock energy)" energy="$(ezfio get hartree_fock energy)"
eq $energy $2 $thresh eq $energy $2 $thresh
} }
@ -20,7 +21,7 @@ function run() {
} }
@test "SO" { # 0.539000 @test "SO" { # 0.539000
run so.ezfio -25.7175126082701 run so.ezfio -25.7175263371942
} }
@test "HCO" { # 0.636700 @test "HCO" { # 0.636700
@ -102,8 +103,8 @@ function run() {
@test "[Cu(NH3)4]2+" { # 59.610100 @test "[Cu(NH3)4]2+" { # 59.610100
[[ -n $TRAVIS ]] && skip [[ -n $TRAVIS ]] && skip
ezfio set_file cu_nh3_4_2plus.ezfio qp set_file cu_nh3_4_2plus.ezfio
ezfio set scf_utils thresh_scf 1.e-10 qp set scf_utils thresh_scf 1.e-10
run cu_nh3_4_2plus.ezfio -1862.97590388214 run cu_nh3_4_2plus.ezfio -1862.97590388214
} }

View File

@ -1,19 +1,20 @@
#!/usr/bin/env bats #!/usr/bin/env bats
source $QP_ROOT/tests/bats/common.bats.sh source $QP_ROOT/tests/bats/common.bats.sh
source $QP_ROOT/quantum_package.rc
function run() { function run() {
thresh=1.e-8 thresh=1.e-8
qp_edit -c $1
functional=$2 functional=$2
ezfio set_file $1 qp set_file $1
ezfio set scf_utils thresh_scf 1.e-10 qp edit --check
ezfio set dft_keywords exchange_functional $functional qp set scf_utils thresh_scf 1.e-10
ezfio set dft_keywords correlation_functional $functional qp set dft_keywords exchange_functional $functional
ezfio set ao_two_e_erf_ints mu_erf 0.5 qp set dft_keywords correlation_functional $functional
ezfio set becke_numerical_grid grid_type_sgn 1 qp set ao_two_e_erf_ints mu_erf 0.5
qp_run rs_ks_scf $1 qp set becke_numerical_grid grid_type_sgn 1
qp run rs_ks_scf
energy="$(ezfio get kohn_sham_rs energy)" energy="$(ezfio get kohn_sham_rs energy)"
eq $energy $3 $thresh eq $energy $3 $thresh
} }

View File

@ -7,11 +7,11 @@ program print_e_conv
! !
! * a file "EZFIO.istate.conv" containing the variational and var+PT2 energies as a function of N_det ! * a file "EZFIO.istate.conv" containing the variational and var+PT2 energies as a function of N_det
! !
! * for istate > 1, a file EZFIO.$istate.delta_e.conv containing the energy difference (both var and var+PT2) with the ground state as a function of N_det ! * for istate > 1, a file EZFIO.istate.delta_e.conv containing the energy difference (both var and var+PT2) with the ground state as a function of N_det
END_DOC END_DOC
provide ezfio_filename provide ezfio_filename
call routine call routine_e_conv
end end
subroutine routine_e_conv subroutine routine_e_conv

View File

@ -11,7 +11,7 @@ program save_one_e_dm
END_DOC END_DOC
read_wf = .True. read_wf = .True.
touch read_wf touch read_wf
call routine call routine_save_one_e_dm
end end

View File

@ -549,13 +549,13 @@ subroutine cache_map_get_interval(map, key, value, ibegin, iend, idx)
double precision, pointer :: v(:) double precision, pointer :: v(:)
integer :: i integer :: i
! call search_key_big_interval(key,map%key, map%n_elements, idx, ibegin, iend) call search_key_big_interval(key,map%key, map%n_elements, idx, ibegin, iend)
call search_key_value_big_interval(key, value, map%key, map%value, map%n_elements, idx, ibegin, iend) if (idx > 0) then
! if (idx > 0) then value = map%value(idx)
! value = v(idx) else
! else value = 0._integral_kind
! value = 0._integral_kind endif
! endif ! call search_key_value_big_interval(key, value, map%key, map%value, map%n_elements, idx, ibegin, iend)
end end
@ -665,7 +665,7 @@ subroutine search_key_big_interval(key,X,sze,idx,ibegin_in,iend_in)
istep = shiftr(iend-ibegin,1) istep = shiftr(iend-ibegin,1)
idx = ibegin + istep idx = ibegin + istep
do while (istep > 64) do while (istep > 4)
idx = ibegin + istep idx = ibegin + istep
! TODO : Cache misses ! TODO : Cache misses
if (cache_key < X(idx)) then if (cache_key < X(idx)) then
@ -703,17 +703,17 @@ subroutine search_key_big_interval(key,X,sze,idx,ibegin_in,iend_in)
endif endif
enddo enddo
idx = ibegin idx = ibegin
if (min(iend_in,sze) > ibegin+64) then if (min(iend_in,sze) > ibegin+4) then
iend = ibegin+64 iend = ibegin+4
!DIR$ LOOP COUNT MAX(4)
do while (cache_key > X(idx)) do while (cache_key > X(idx))
idx = idx+1 idx = idx+1
end do end do
else else
!DIR$ LOOP COUNT MAX(4)
do while (cache_key > X(idx)) do while (cache_key > X(idx))
idx = idx+1 idx = idx+1
if (idx /= iend) then if (idx == iend) then
cycle
else
exit exit
endif endif
end do end do
@ -771,10 +771,11 @@ subroutine search_key_value_big_interval(key,value,X,Y,sze,idx,ibegin_in,iend_in
iend = min(iend_in,sze) iend = min(iend_in,sze)
if ((cache_key > X(ibegin)) .and. (cache_key < X(iend))) then if ((cache_key > X(ibegin)) .and. (cache_key < X(iend))) then
istep = shiftr(iend-ibegin,1) istep = shiftr(iend+ibegin,1)
idx = ibegin + istep idx = ibegin + istep
do while (istep > 64) do while (istep > 4)
idx = ibegin + istep idx = ibegin + istep
! TODO : Cache misses
if (cache_key < X(idx)) then if (cache_key < X(idx)) then
iend = idx iend = idx
istep = shiftr(idx-ibegin,1) istep = shiftr(idx-ibegin,1)
@ -813,20 +814,17 @@ subroutine search_key_value_big_interval(key,value,X,Y,sze,idx,ibegin_in,iend_in
endif endif
enddo enddo
idx = ibegin idx = ibegin
value = Y(idx) if (min(iend_in,sze) > ibegin+4) then
if (min(iend_in,sze) > ibegin+64) then iend = ibegin+4
iend = ibegin+64 !DIR$ LOOP COUNT MAX(4)
do while (cache_key > X(idx)) do while (cache_key > X(idx))
idx = idx+1 idx = idx+1
value = Y(idx)
end do end do
else else
!DIR$ LOOP COUNT MAX(4)
do while (cache_key > X(idx)) do while (cache_key > X(idx))
idx = idx+1 idx = idx+1
value = Y(idx) if (idx == iend) then
if (idx /= iend) then
cycle
else
exit exit
endif endif
end do end do
@ -834,6 +832,8 @@ subroutine search_key_value_big_interval(key,value,X,Y,sze,idx,ibegin_in,iend_in
if (cache_key /= X(idx)) then if (cache_key /= X(idx)) then
idx = 1-idx idx = 1-idx
value = 0.d0 value = 0.d0
else
value = Y(idx)
endif endif
return return