mirror of
https://github.com/QuantumPackage/qp2.git
synced 2024-11-07 05:53:37 +01:00
merge
This commit is contained in:
commit
977ccbad29
13
INSTALL.rst
13
INSTALL.rst
@ -210,6 +210,12 @@ Zlib
|
||||
make
|
||||
make install
|
||||
|
||||
With Debian or Ubuntu, you can use
|
||||
|
||||
.. code:: bash
|
||||
|
||||
sudo apt install zlib1g-dev
|
||||
|
||||
|
||||
|
||||
OCaml
|
||||
@ -217,6 +223,13 @@ OCaml
|
||||
|
||||
*OCaml* is a general purpose programming language with an emphasis on expressiveness and safety.
|
||||
|
||||
* The following packages are required (Debian or Ubuntu):
|
||||
|
||||
.. code:: bash
|
||||
|
||||
sudo apt install libncurses5-dev pkg-config libgmp3-dev m4
|
||||
|
||||
|
||||
* Download the installer of the OPAM package manager here :
|
||||
`<https://raw.githubusercontent.com/ocaml/opam/master/shell/install.sh>`_
|
||||
and move it in the :file:`${QP_ROOT}/external` directory
|
||||
|
14
REPLACE
14
REPLACE
@ -183,3 +183,17 @@ qp_name save_one_body_dm -r save_one_e_dm
|
||||
qp_name ezfio_set_aux_quantities_data_one_e_alpha_dm_mo -r ezfio_set_aux_quantities_data_one_e_dm_alpha_mo
|
||||
qp_name ezfio_set_aux_quantities_data_one_e_beta_dm_mo -r ezfio_set_aux_quantities_data_one_e_dm_beta_mo
|
||||
qp_name two_electron_energy -r two_e_energy
|
||||
qp_name do_mono_excitation -r do_single_excitation
|
||||
qp_name get_mono_excitation -r get_single_excitation
|
||||
qp_name get_mono_excitation_from_fock -r get_single_excitation_from_fock
|
||||
qp_name is_connected_to_by_mono -r is_connected_to_by_single
|
||||
qp_name connected_to_ref_by_mono -r connected_to_ref_by_single
|
||||
qp_name mono_excitation_wee -r single_excitation_wee
|
||||
qp_name get_mono_excitation_spin
|
||||
qp_name get_mono_excitation_spin -r get_single_excitation_spin
|
||||
qp_name get_excitation_degree_vector_mono -r get_excitation_degree_vector_single
|
||||
qp_name get_excitation_degree_vector_mono_or_exchange -r get_excitation_degree_vector_single_or_exchange_or_exchange
|
||||
qp_name get_excitation_degree_vector_single_or_exchange_or_exchange -r get_excitation_degree_vector_single_or_exchange
|
||||
qp_name get_excitation_degree_vector_mono_or_exchange_verbose -r get_excitation_degree_vector_single_or_exchange_verbose
|
||||
qp_name i_h_j_mono_spin -r i_h_j_single_spin
|
||||
qp_name i_Wee_j_mono -r i_Wee_j_single
|
||||
|
4
TODO
4
TODO
@ -49,8 +49,6 @@ Refaire les benchmarks
|
||||
# Documentation de qpsh
|
||||
|
||||
# Documentation de /etc
|
||||
# Extrapolation qui prend aussi en compe la variance? a tester
|
||||
Parler dans le papier de rPT2
|
||||
|
||||
# Toto
|
||||
Re-design de qp command
|
||||
@ -58,3 +56,5 @@ Re-design de qp command
|
||||
Doc: plugins et qp_plugins
|
||||
|
||||
Ajouter les symetries dans devel
|
||||
|
||||
Compiler ezfio avec openmp
|
||||
|
@ -154,7 +154,7 @@ for i in ${FORTRAN_EXEC} ; do
|
||||
done > ${QPACKAGE_STATIC}/data/executables
|
||||
|
||||
mkdir --parents -- ${QPACKAGE_STATIC}/src/bitmask
|
||||
cp ${QP_ROOT}/src/Bitmask/bitmasks_module.f90 ${QPACKAGE_STATIC}/src/bitmask
|
||||
cp ${QP_ROOT}/src/bitmask/bitmasks_module.f90 ${QPACKAGE_STATIC}/src/bitmask
|
||||
|
||||
|
||||
echo "Copying dynamic libraries"
|
||||
@ -179,7 +179,7 @@ if [[ $? -ne 0 ]] ; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
cp -- ${QPACKAGE_STATIC}/extra_lib/lib{[gi]omp*,mkl*,lapack*,blas*,z*} \
|
||||
cp -- ${QPACKAGE_STATIC}/extra_lib/lib{[gi]omp*,mkl*,lapack*,blas*,z*,gfortran*,quad*} \
|
||||
${QPACKAGE_STATIC}/lib/
|
||||
|
||||
#
|
||||
|
@ -35,7 +35,7 @@ OPENMP : 1 ; Append OpenMP flags
|
||||
# -ffast-math and the Fortran-specific
|
||||
# -fno-protect-parens and -fstack-arrays.
|
||||
[OPT]
|
||||
FCFLAGS : -Ofast -msse4.2
|
||||
FCFLAGS : -Ofast -march=native
|
||||
|
||||
# Profiling flags
|
||||
#################
|
||||
|
17
configure
vendored
17
configure
vendored
@ -354,22 +354,23 @@ EOF
|
||||
|
||||
done
|
||||
|
||||
source quantum_package.rc
|
||||
|
||||
NINJA=$(find_exe ninja)
|
||||
if [[ ${NINJA} = $(not_found) ]] ; then
|
||||
error "Ninja is not installed."
|
||||
error "Ninja (ninja) is not installed."
|
||||
fail
|
||||
fi
|
||||
|
||||
IRPF90=$(find_exe irpf90)
|
||||
if [[ ${IRPF90} = $(not_found) ]] ; then
|
||||
error "IRPf90 is not installed."
|
||||
error "IRPf90 (irpf90) is not installed."
|
||||
fail
|
||||
fi
|
||||
|
||||
ZEROMQ=$(find_lib -lzmq)
|
||||
if [[ ${ZEROMQ} = $(not_found) ]] ; then
|
||||
error "ZeroMQ is not installed."
|
||||
error "ZeroMQ (zeromq) is not installed."
|
||||
fail
|
||||
fi
|
||||
|
||||
@ -387,31 +388,31 @@ fi
|
||||
|
||||
OCAML=$(find_exe ocaml)
|
||||
if [[ ${OCAML} = $(not_found) ]] ; then
|
||||
error "OCaml compiler is not installed."
|
||||
error "OCaml (ocaml) compiler is not installed."
|
||||
fail
|
||||
fi
|
||||
|
||||
EZFIO=$(find_dir "${QP_ROOT}"/external/ezfio)
|
||||
if [[ ${EZFIO} = $(not_found) ]] ; then
|
||||
error "EZFIO is not installed."
|
||||
error "EZFIO (ezfio) is not installed."
|
||||
fail
|
||||
fi
|
||||
|
||||
ZLIB=$(find_lib -lz)
|
||||
if [[ ${ZLIB} = $(not_found) ]] ; then
|
||||
error "Zlib is not installed."
|
||||
error "Zlib (zlib) is not installed."
|
||||
fail
|
||||
fi
|
||||
|
||||
DOCOPT=$(find_python_lib docopt)
|
||||
if [[ ${DOCOPT} = $(not_found) ]] ; then
|
||||
error "docopt is not installed."
|
||||
error "docopt (docopt) is not installed."
|
||||
fail
|
||||
fi
|
||||
|
||||
RESULTSFILE=$(find_python_lib resultsFile)
|
||||
if [[ ${RESULTSFILE} = $(not_found) ]] ; then
|
||||
error "resultsFile is not installed."
|
||||
error "resultsFile (resultsFile) is not installed."
|
||||
fail
|
||||
fi
|
||||
|
||||
|
@ -12,7 +12,6 @@
|
||||
.. _Irene: http://www-hpc.cea.fr/en/complexe/tgcc-Irene.htm
|
||||
.. _IRPF90: http://irpf90.ups-tlse.fr
|
||||
.. _LAPACK: http://www.netlib.org/lapack/
|
||||
.. _Molden: http://cheminf.cmbi.ru.nl/molden/
|
||||
.. _NECI: https://github.com/ghb24/NECI_STABLE
|
||||
.. _Ninja: https://ninja-build.org/
|
||||
.. _NWChem: http://www.nwchem-sw.org/
|
||||
@ -53,12 +52,15 @@
|
||||
.. |CIPSI| replace:: :abbr:`CIPSI (Configuration Interaction using a Perturbative Selection)`
|
||||
.. |CI| replace:: :abbr:`CI (Configuration Interaction)`
|
||||
.. |CISD| replace:: :abbr:`CISD (Configuration Interaction with Single and Double Excitations)`
|
||||
.. |CASSCF| replace:: |CAS| - |SCF|
|
||||
.. |CIS| replace:: :abbr:`CIS (Configuration Interaction with Single Excitations)`
|
||||
.. |DFT| replace:: :abbr:`DFT (Density Functional Theory)`
|
||||
.. |DDCI| replace:: :abbr:`DDCI (Difference Dedicated Configuration Interaction)`
|
||||
.. |DFT| replace:: :abbr:`DFT (Density Functional Theory)`
|
||||
.. |DIIS| replace:: :abbr:`DIIS (Direct Inversion of the Iterative Subspace)`
|
||||
.. |FCIQMC| replace:: |FCI| - |QMC|
|
||||
.. |FCI| replace:: :abbr:`FCI (Full Configuration Interaction)`
|
||||
.. |HF| replace:: :abbr:`HF (Hartree-Fock)`
|
||||
.. |KS-DFT| replace:: :abbr:`KS-DFT (Kohn-Sham Density Functional Theory)`
|
||||
.. |MO| replace:: :abbr:`MO (Molecular Orbital)`
|
||||
.. |MOs| replace:: :abbr:`MOs (Molecular Orbitals)`
|
||||
.. |MP2| replace:: :abbr:`MP2 (Moller-Plesset second order perturbative correction)`
|
||||
@ -67,15 +69,13 @@
|
||||
.. |MRPT| replace:: :abbr:`MRPT (Multi-Reference Perturbation Theory)`
|
||||
.. |PT2| replace:: :abbr:`PT2 (Second order perturbative correction)`
|
||||
.. |QMC| replace:: :abbr:`QMC (Quantum Monte Carlo)`
|
||||
.. |ROHF| replace:: :abbr:`ROHF (Restricted Open-Shell Hartree-Fock)`
|
||||
.. |RSDFT| replace:: :abbr:`RSDFT (Range Separated Density Functional Theory)`
|
||||
.. |RSH| replace:: :abbr:`RSH (Range Separated Hybrids)`
|
||||
.. |rst| replace:: :abbr:`RST (ReStructured Text)`
|
||||
.. |SCF| replace:: :abbr:`SCF (Self Consistent Field)`
|
||||
.. |RSH| replace:: :abbr:`RSH (Range Separated Hybrids)`
|
||||
.. |RSDFT| replace:: :abbr:`RSDFT (Range Separated Density Functional Theory)`
|
||||
.. |KS-DFT| replace:: :abbr:`KS-DFT (Kohn-Sham Density Functional Theory)`
|
||||
.. |sCI| replace:: :abbr:`sCI (Selected-CI)`
|
||||
.. |WFT| replace:: :abbr:`WFT (Wave Function Theory)`
|
||||
.. |CASSCF| replace:: |CAS| - |SCF|
|
||||
.. |FCIQMC| replace:: |FCI| - |QMC|
|
||||
|
||||
.. |kalpha| replace:: :math:`|\alpha \rangle`
|
||||
.. |H| replace:: :math:`\hat H`
|
||||
|
@ -171,7 +171,7 @@ for f in os.listdir("users_guide"):
|
||||
|
||||
for f in os.listdir("programs"):
|
||||
name = f.split('.')[0]
|
||||
if name not in []:
|
||||
if name not in [""]:
|
||||
filename = os.path.join("programs",name)
|
||||
man_pages.append( (filename, name, qpdoc, [author], 1) )
|
||||
|
||||
|
@ -55,8 +55,6 @@ Simple Algorithm
|
||||
|
||||
.. |SetDI| replace:: `\{|D_I\rangle\}^{(n)}`
|
||||
.. |Psi_n| replace:: `|\Psi^{(n)}\rangle`
|
||||
.. |H| replace:: `\hat H`
|
||||
.. |kalpha| replace:: `|\alpha\rangle`
|
||||
.. |kalpha_star| replace:: `\{ |\alpha \rangle \}_\star ^{(n)}`
|
||||
.. |ealpha| replace:: `e_\alpha`
|
||||
.. |EPT| replace:: `E_\text{PT2}`
|
||||
|
@ -23,9 +23,13 @@ The |AO| coefficients are normalized as:
|
||||
|
||||
{\tilde c}_{ki} = \frac{c_{ki}}{ \int \left( (x-X_A)^a (y-Y_A)^b (z-Z_A)^c e^{-\gamma_{ki} |{\bf r} - {\bf R}_A|^2} \right)^2 dr}
|
||||
|
||||
Warning: `ao_coef` contains the |AO| coefficients given in input. These do not
|
||||
include the normalization constant of the |AO|. The `ao_coef_normalized` provider includes
|
||||
this normalization factor.
|
||||
|
||||
.. warning::
|
||||
|
||||
`ao_coef` contains the |AO| coefficients given in input. These do not
|
||||
include the normalization constant of the |AO|. The `ao_coef_normalized`
|
||||
provider includes this normalization factor.
|
||||
|
||||
|
||||
The |AOs| are also sorted by increasing exponent to accelerate the calculation of
|
||||
the two electron integrals.
|
||||
@ -1076,7 +1080,7 @@ Subroutines / functions
|
||||
double precision function ao_value(i,r)
|
||||
|
||||
|
||||
return the value of the ith ao at point r
|
||||
Returns the value of the i-th ao at point $\textbf{r}$
|
||||
|
||||
Needs:
|
||||
|
||||
@ -1102,8 +1106,11 @@ Subroutines / functions
|
||||
|
||||
|
||||
input : r(1) ==> r(1) = x, r(2) = y, r(3) = z
|
||||
output : aos_array(i) = ao(i) evaluated at r
|
||||
: aos_grad_array(1,i) = gradient X of the ao(i) evaluated at r
|
||||
|
||||
output :
|
||||
|
||||
* aos_array(i) = ao(i) evaluated at $\textbf{r}$
|
||||
* aos_grad_array(1,i) = $\nabla_x$ of the ao(i) evaluated at $\textbf{r}$
|
||||
|
||||
Needs:
|
||||
|
||||
@ -1139,8 +1146,12 @@ Subroutines / functions
|
||||
|
||||
|
||||
input : r(1) ==> r(1) = x, r(2) = y, r(3) = z
|
||||
output : aos_array(i) = ao(i) evaluated at r
|
||||
: aos_grad_array(1,i) = gradient X of the ao(i) evaluated at r
|
||||
|
||||
output :
|
||||
|
||||
* aos_array(i) = ao(i) evaluated at ro
|
||||
* aos_grad_array(1,i) = gradient X of the ao(i) evaluated at $\textbf{r}$
|
||||
|
||||
|
||||
Needs:
|
||||
|
||||
@ -1176,7 +1187,8 @@ Subroutines / functions
|
||||
|
||||
|
||||
input : r == r(1) = x and so on
|
||||
aos_array(i) = aos(i) evaluated in r
|
||||
|
||||
output : aos_array(i) = aos(i) evaluated in $\textbf{r}$
|
||||
|
||||
Needs:
|
||||
|
||||
@ -1211,7 +1223,7 @@ Subroutines / functions
|
||||
subroutine give_all_aos_at_r_old(r,aos_array)
|
||||
|
||||
|
||||
gives the values of aos at a given point r
|
||||
Gives the values of |AOs| at a given point $\textbf{r}$
|
||||
|
||||
Needs:
|
||||
|
||||
@ -1231,7 +1243,8 @@ Subroutines / functions
|
||||
double precision function primitive_value(i,j,r)
|
||||
|
||||
|
||||
return the value of the jth primitive of ith ao at point r WITHOUT THE COEF
|
||||
Returns the value of the j-th primitive of the i-th |AO| at point $\textbf{r}
|
||||
**without the coefficient**
|
||||
|
||||
Needs:
|
||||
|
||||
|
@ -232,8 +232,10 @@ Providers
|
||||
|
||||
Second derivative matrix elements in the |AO| basis.
|
||||
|
||||
:math:`{\tt ao\_deriv2\_x} =
|
||||
\langle \chi_i(x,y,z) | \frac{\partial^2}{\partial x^2} |\chi_j (x,y,z) \rangle`
|
||||
.. math::
|
||||
|
||||
{\tt ao\_deriv2\_x} =
|
||||
\langle \chi_i(x,y,z) | \frac{\partial^2}{\partial x^2} |\chi_j (x,y,z) \rangle
|
||||
|
||||
|
||||
Needs:
|
||||
@ -271,8 +273,10 @@ Providers
|
||||
|
||||
Second derivative matrix elements in the |AO| basis.
|
||||
|
||||
:math:`{\tt ao\_deriv2\_x} =
|
||||
\langle \chi_i(x,y,z) | \frac{\partial^2}{\partial x^2} |\chi_j (x,y,z) \rangle`
|
||||
.. math::
|
||||
|
||||
{\tt ao\_deriv2\_x} =
|
||||
\langle \chi_i(x,y,z) | \frac{\partial^2}{\partial x^2} |\chi_j (x,y,z) \rangle
|
||||
|
||||
|
||||
Needs:
|
||||
@ -310,8 +314,10 @@ Providers
|
||||
|
||||
Second derivative matrix elements in the |AO| basis.
|
||||
|
||||
:math:`{\tt ao\_deriv2\_x} =
|
||||
\langle \chi_i(x,y,z) | \frac{\partial^2}{\partial x^2} |\chi_j (x,y,z) \rangle`
|
||||
.. math::
|
||||
|
||||
{\tt ao\_deriv2\_x} =
|
||||
\langle \chi_i(x,y,z) | \frac{\partial^2}{\partial x^2} |\chi_j (x,y,z) \rangle
|
||||
|
||||
|
||||
Needs:
|
||||
@ -644,6 +650,7 @@ Providers
|
||||
|
||||
:math:`\langle \chi_i |\hat{T}| \chi_j \rangle`
|
||||
|
||||
|
||||
Needs:
|
||||
|
||||
.. hlist::
|
||||
@ -1331,7 +1338,8 @@ Providers
|
||||
power_A,power_B,C_center,n_pt_in,d,n_pt_out,mu_in)
|
||||
|
||||
|
||||
Returns the explicit polynomial in terms of the $t$ variable of the following polynomial:
|
||||
Returns the explicit polynomial in terms of the $t$ variable of the
|
||||
following polynomial:
|
||||
|
||||
$I_{x1}(a_x, d_x,p,q) \times I_{x1}(a_y, d_y,p,q) \times I_{x1}(a_z, d_z,p,q)$.
|
||||
|
||||
@ -1355,7 +1363,8 @@ Providers
|
||||
power_A,power_B,C_center,n_pt_in,d,n_pt_out,mu_in,p,p_inv,p_inv_2,p_new,P_center)
|
||||
|
||||
|
||||
Returns the explicit polynomial in terms of the $t$ variable of the following polynomial:
|
||||
Returns the explicit polynomial in terms of the $t$ variable of the
|
||||
following polynomial:
|
||||
|
||||
$I_{x1}(a_x, d_x,p,q) \times I_{x1}(a_y, d_y,p,q) \times I_{x1}(a_z, d_z,p,q)$.
|
||||
|
||||
@ -1812,8 +1821,12 @@ Subroutines / functions
|
||||
|
||||
|
||||
Computes the following integral :
|
||||
$\int dr (x-A_x)^a (x-B_x)^b \exp(-\alpha (x-A_x)^2 - \beta (x-B_x)^2 )
|
||||
\frac{\erf(\mu |r-R_C|)}{|r-R_c|}$.
|
||||
|
||||
.. math::
|
||||
|
||||
\int dr (x-A_x)^a (x-B_x)^b \exp(-\alpha (x-A_x)^2 - \beta (x-B_x)^2 )
|
||||
\frac{\erf(\mu | r - R_C | )}{ | r - R_C | }$.
|
||||
|
||||
|
||||
Calls:
|
||||
|
||||
|
@ -587,11 +587,13 @@ Subroutines / functions
|
||||
double precision function ERI_erf(alpha,beta,delta,gama,a_x,b_x,c_x,d_x,a_y,b_y,c_y,d_y,a_z,b_z,c_z,d_z)
|
||||
|
||||
|
||||
ATOMIC PRIMTIVE two-electron integral between the 4 primitives ::
|
||||
primitive_1 = x1**(a_x) y1**(a_y) z1**(a_z) exp(-alpha * r1**2)
|
||||
primitive_2 = x1**(b_x) y1**(b_y) z1**(b_z) exp(- beta * r1**2)
|
||||
primitive_3 = x2**(c_x) y2**(c_y) z2**(c_z) exp(-delta * r2**2)
|
||||
primitive_4 = x2**(d_x) y2**(d_y) z2**(d_z) exp(- gama * r2**2)
|
||||
Atomic primtive two-electron integral between the 4 primitives :
|
||||
|
||||
* primitive 1 : $x_1^{a_x} y_1^{a_y} z_1^{a_z} \exp(-\alpha * r1^2)$
|
||||
* primitive 2 : $x_1^{b_x} y_1^{b_y} z_1^{b_z} \exp(- \beta * r1^2)$
|
||||
* primitive 3 : $x_2^{c_x} y_2^{c_y} z_2^{c_z} \exp(-\delta * r2^2)$
|
||||
* primitive 4 : $x_2^{d_x} y_2^{d_y} z_2^{d_z} \exp(-\gamma * r2^2)$
|
||||
|
||||
|
||||
Needs:
|
||||
|
||||
@ -776,9 +778,11 @@ Subroutines / functions
|
||||
subroutine integrale_new_erf(I_f,a_x,b_x,c_x,d_x,a_y,b_y,c_y,d_y,a_z,b_z,c_z,d_z,p,q,n_pt)
|
||||
|
||||
|
||||
calculate the integral of the polynom ::
|
||||
I_x1(a_x+b_x, c_x+d_x,p,q) * I_x1(a_y+b_y, c_y+d_y,p,q) * I_x1(a_z+b_z, c_z+d_z,p,q)
|
||||
between ( 0 ; 1)
|
||||
Calculate the integral of the polynomial :
|
||||
|
||||
$I_x1(a_x+b_x, c_x+d_x,p,q) \, I_x1(a_y+b_y, c_y+d_y,p,q) \, I_x1(a_z+b_z, c_z+d_z,p,q)$
|
||||
|
||||
between $( 0 ; 1)$
|
||||
|
||||
Needs:
|
||||
|
||||
|
@ -362,7 +362,7 @@ Providers
|
||||
recursive subroutine I_x1_pol_mult_a1(c,B_10,B_01,B_00,C_00,D_00,d,nd,n_pt_in)
|
||||
|
||||
|
||||
recursive function involved in the two-electron integral
|
||||
Recursive function involved in the two-electron integral
|
||||
|
||||
Called by:
|
||||
|
||||
@ -392,7 +392,7 @@ Providers
|
||||
recursive subroutine I_x1_pol_mult_a2(c,B_10,B_01,B_00,C_00,D_00,d,nd,n_pt_in)
|
||||
|
||||
|
||||
recursive function involved in the two-electron integral
|
||||
Recursive function involved in the two-electron integral
|
||||
|
||||
Called by:
|
||||
|
||||
@ -422,7 +422,7 @@ Providers
|
||||
recursive subroutine I_x1_pol_mult_recurs(a,c,B_10,B_01,B_00,C_00,D_00,d,nd,n_pt_in)
|
||||
|
||||
|
||||
recursive function involved in the two-electron integral
|
||||
Recursive function involved in the two-electron integral
|
||||
|
||||
Called by:
|
||||
|
||||
@ -487,7 +487,7 @@ Providers
|
||||
recursive subroutine I_x2_pol_mult(c,B_10,B_01,B_00,C_00,D_00,d,nd,dim)
|
||||
|
||||
|
||||
recursive function involved in the two-electron integral
|
||||
Recursive function involved in the two-electron integral
|
||||
|
||||
Called by:
|
||||
|
||||
@ -1027,7 +1027,8 @@ Subroutines / functions
|
||||
|
||||
subroutine that returns the explicit polynom in term of the "t"
|
||||
variable of the following polynomw :
|
||||
I_x1(a_x, d_x,p,q) * I_x1(a_y, d_y,p,q) * I_x1(a_z, d_z,p,q)
|
||||
|
||||
$I_{x_1}(a_x,d_x,p,q) \, I_{x_1}(a_y,d_y,p,q) \ I_{x_1}(a_z,d_z,p,q)$
|
||||
|
||||
Called by:
|
||||
|
||||
@ -1055,7 +1056,7 @@ Subroutines / functions
|
||||
subroutine I_x1_pol_mult(a,c,B_10,B_01,B_00,C_00,D_00,d,nd,n_pt_in)
|
||||
|
||||
|
||||
recursive function involved in the two-electron integral
|
||||
Recursive function involved in the two-electron integral
|
||||
|
||||
Called by:
|
||||
|
||||
@ -1119,9 +1120,10 @@ Subroutines / functions
|
||||
subroutine integrale_new(I_f,a_x,b_x,c_x,d_x,a_y,b_y,c_y,d_y,a_z,b_z,c_z,d_z,p,q,n_pt)
|
||||
|
||||
|
||||
calculate the integral of the polynom ::
|
||||
I_x1(a_x+b_x, c_x+d_x,p,q) * I_x1(a_y+b_y, c_y+d_y,p,q) * I_x1(a_z+b_z, c_z+d_z,p,q)
|
||||
between ( 0 ; 1)
|
||||
Calculates the integral of the polynomial :
|
||||
|
||||
$I_{x_1}(a_x+b_x,c_x+d_x,p,q) \, I_{x_1}(a_y+b_y,c_y+d_y,p,q) \, I_{x_1}(a_z+b_z,c_z+d_z,p,q)$
|
||||
in $( 0 ; 1)$
|
||||
|
||||
Needs:
|
||||
|
||||
@ -1186,8 +1188,9 @@ Subroutines / functions
|
||||
|
||||
|
||||
Returns the upper boundary of the degree of the polynomial involved in the
|
||||
bielctronic integral :
|
||||
Ix(a_x,b_x,c_x,d_x) * Iy(a_y,b_y,c_y,d_y) * Iz(a_z,b_z,c_z,d_z)
|
||||
two-electron integral :
|
||||
|
||||
$I_x(a_x,b_x,c_x,d_x) \, I_y(a_y,b_y,c_y,d_y) \, I_z(a_z,b_z,c_z,d_z)$
|
||||
|
||||
|
||||
.. c:function:: push_integrals:
|
||||
|
@ -10,21 +10,22 @@ aux_quantities
|
||||
|
||||
|
||||
This module contains some global variables (such as densities and energies)
|
||||
which are stored in the EZFIO folder in a different place than determinants.
|
||||
which are stored in the |EZFIO| directory in a different place than determinants.
|
||||
This is used in practice to store density matrices which can be obtained from
|
||||
any methods, as long as they are stored in the same MO basis which is used for
|
||||
any method, as long as they are stored in the same |MO| basis which is used for
|
||||
the calculations. In |RSDFT| calculations, this can be done to perform damping
|
||||
on the density in order to speed up convergence.
|
||||
on the density in order to speed up the convergence.
|
||||
|
||||
The main providers of that module are:
|
||||
|
||||
* `data_one_e_dm_alpha_mo` and `data_one_e_dm_beta_mo` which are the
|
||||
one-body alpha and beta densities which are necessary read from the EZFIO
|
||||
folder.
|
||||
* :c:data:`data_one_e_dm_alpha_mo` and :c:data:`data_one_e_dm_beta_mo` which
|
||||
are the one-body alpha and beta densities which are necessary read from the
|
||||
|EZFIO| directory.
|
||||
|
||||
|
||||
Thanks to these providers you can use any density matrix that does not
|
||||
necessary corresponds to that of the current wave function.
|
||||
necessarily corresponds to that of the current wave function.
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -49,7 +49,7 @@ By default, the program will stop when more than one million determinants have
|
||||
been selected, or when the |PT2| energy is below :math:`10^{-4}`.
|
||||
|
||||
The variational and |PT2| energies of the iterations are stored in the
|
||||
|EZFIO| database, in the :ref:`iterations` module.
|
||||
|EZFIO| database, in the :ref:`module_iterations` module.
|
||||
|
||||
|
||||
|
||||
@ -180,55 +180,6 @@ Providers
|
||||
|
||||
|
||||
|
||||
.. c:function:: pt2_collector:
|
||||
|
||||
|
||||
File : :file:`cipsi/pt2_stoch_routines.irp.f`
|
||||
|
||||
.. code:: fortran
|
||||
|
||||
subroutine pt2_collector(zmq_socket_pull, E, relative_error, pt2, error, &
|
||||
variance, norm, b, N_)
|
||||
|
||||
|
||||
|
||||
Needs:
|
||||
|
||||
.. hlist::
|
||||
:columns: 3
|
||||
|
||||
* :c:data:`pt2_j`
|
||||
* :c:data:`pt2_stoch_istate`
|
||||
* :c:data:`n_states`
|
||||
* :c:data:`pt2_f`
|
||||
* :c:data:`pt2_w`
|
||||
* :c:data:`n_det_generators`
|
||||
* :c:data:`pt2_n_teeth`
|
||||
* :c:data:`pt2_u`
|
||||
|
||||
Called by:
|
||||
|
||||
.. hlist::
|
||||
:columns: 3
|
||||
|
||||
* :c:func:`zmq_pt2`
|
||||
|
||||
Calls:
|
||||
|
||||
.. hlist::
|
||||
:columns: 3
|
||||
|
||||
* :c:func:`add_to_selection_buffer`
|
||||
* :c:func:`check_mem`
|
||||
* :c:func:`create_selection_buffer`
|
||||
* :c:func:`delete_selection_buffer`
|
||||
* :c:func:`end_zmq_to_qp_run_socket`
|
||||
* :c:func:`pull_pt2_results`
|
||||
* :c:func:`sleep`
|
||||
* :c:func:`sort_selection_buffer`
|
||||
* :c:func:`wall_time`
|
||||
|
||||
|
||||
.. c:var:: pt2_cw
|
||||
|
||||
|
||||
@ -311,7 +262,6 @@ Providers
|
||||
* :c:data:`n_core_orb`
|
||||
* :c:data:`n_det_generators`
|
||||
* :c:data:`n_det_selectors`
|
||||
* :c:data:`n_states`
|
||||
* :c:data:`psi_det_sorted_gen`
|
||||
|
||||
|
||||
@ -455,7 +405,6 @@ Providers
|
||||
* :c:data:`n_core_orb`
|
||||
* :c:data:`n_det_generators`
|
||||
* :c:data:`n_det_selectors`
|
||||
* :c:data:`n_states`
|
||||
* :c:data:`psi_det_sorted_gen`
|
||||
|
||||
|
||||
@ -1164,6 +1113,54 @@ Subroutines / functions
|
||||
* :c:func:`run_slave_cipsi`
|
||||
|
||||
|
||||
.. c:function:: pt2_collector:
|
||||
|
||||
|
||||
File : :file:`cipsi/pt2_stoch_routines.irp.f`
|
||||
|
||||
.. code:: fortran
|
||||
|
||||
subroutine pt2_collector(zmq_socket_pull, E, relative_error, pt2, error, variance, norm, b, N_)
|
||||
|
||||
|
||||
|
||||
Needs:
|
||||
|
||||
.. hlist::
|
||||
:columns: 3
|
||||
|
||||
* :c:data:`pt2_j`
|
||||
* :c:data:`pt2_stoch_istate`
|
||||
* :c:data:`n_states`
|
||||
* :c:data:`pt2_f`
|
||||
* :c:data:`pt2_w`
|
||||
* :c:data:`n_det_generators`
|
||||
* :c:data:`pt2_n_teeth`
|
||||
* :c:data:`pt2_u`
|
||||
|
||||
Called by:
|
||||
|
||||
.. hlist::
|
||||
:columns: 3
|
||||
|
||||
* :c:func:`zmq_pt2`
|
||||
|
||||
Calls:
|
||||
|
||||
.. hlist::
|
||||
:columns: 3
|
||||
|
||||
* :c:func:`add_to_selection_buffer`
|
||||
* :c:func:`check_mem`
|
||||
* :c:func:`create_selection_buffer`
|
||||
* :c:func:`delete_selection_buffer`
|
||||
* :c:func:`end_zmq_to_qp_run_socket`
|
||||
* :c:func:`pull_pt2_results`
|
||||
* :c:func:`sleep`
|
||||
* :c:func:`sort_selection_buffer`
|
||||
* :c:func:`wall_time`
|
||||
|
||||
|
||||
.. c:function:: pt2_find_sample:
|
||||
|
||||
|
||||
@ -1633,21 +1630,31 @@ Subroutines / functions
|
||||
.. hlist::
|
||||
:columns: 3
|
||||
|
||||
* :c:data:`pt2_stoch_istate`
|
||||
* :c:data:`psi_det`
|
||||
* :c:data:`zmq_state`
|
||||
* :c:data:`psi_coef`
|
||||
* :c:data:`mpi_rank`
|
||||
* :c:data:`zmq_state`
|
||||
* :c:data:`state_average_weight`
|
||||
* :c:data:`mpi_master`
|
||||
* :c:data:`pt2_stoch_istate`
|
||||
* :c:data:`n_states`
|
||||
* :c:data:`n_det`
|
||||
* :c:data:`pt2_e0_denominator`
|
||||
* :c:data:`n_det_selectors`
|
||||
* :c:data:`n_det_generators`
|
||||
* :c:data:`psi_det`
|
||||
* :c:data:`n_states_diag`
|
||||
* :c:data:`zmq_context`
|
||||
* :c:data:`n_det_selectors`
|
||||
* :c:data:`psi_occ_pattern_hii`
|
||||
* :c:data:`state_average_weight`
|
||||
* :c:data:`mo_num`
|
||||
* :c:data:`nthreads_pt2`
|
||||
* :c:data:`elec_alpha_num`
|
||||
* :c:data:`pt2_e0_denominator`
|
||||
* :c:data:`qp_max_mem`
|
||||
* :c:data:`n_states_diag`
|
||||
* :c:data:`s2_eig`
|
||||
* :c:data:`threshold_generators`
|
||||
* :c:data:`det_to_occ_pattern`
|
||||
* :c:data:`n_states`
|
||||
* :c:data:`pt2_f`
|
||||
* :c:data:`n_det_generators`
|
||||
* :c:data:`n_int`
|
||||
* :c:data:`psi_det_hii`
|
||||
|
||||
Called by:
|
||||
|
||||
@ -1661,9 +1668,11 @@ Subroutines / functions
|
||||
.. hlist::
|
||||
:columns: 3
|
||||
|
||||
* :c:func:`check_mem`
|
||||
* :c:func:`davidson_slave_tcp`
|
||||
* :c:func:`mpi_print`
|
||||
* :c:func:`omp_set_nested`
|
||||
* :c:func:`resident_memory`
|
||||
* :c:func:`run_pt2_slave`
|
||||
* :c:func:`run_selection_slave`
|
||||
* :c:func:`sleep`
|
||||
@ -1832,13 +1841,12 @@ Subroutines / functions
|
||||
* :c:data:`n_states`
|
||||
* :c:data:`n_det`
|
||||
* :c:data:`psi_bilinear_matrix_transp_values`
|
||||
* :c:data:`elec_alpha_num`
|
||||
* :c:data:`psi_bilinear_matrix_values`
|
||||
* :c:data:`n_det_selectors`
|
||||
* :c:data:`psi_bilinear_matrix_transp_values`
|
||||
* :c:data:`psi_bilinear_matrix_values`
|
||||
* :c:data:`n_int`
|
||||
* :c:data:`psi_det_generators`
|
||||
* :c:data:`psi_bilinear_matrix_values`
|
||||
* :c:data:`psi_det_alpha_unique`
|
||||
* :c:data:`psi_det_sorted`
|
||||
* :c:data:`psi_det_sorted`
|
||||
@ -1859,7 +1867,6 @@ Subroutines / functions
|
||||
|
||||
* :c:func:`apply_hole`
|
||||
* :c:func:`bitstring_to_list_ab`
|
||||
* :c:func:`check_mem`
|
||||
* :c:func:`fill_buffer_double`
|
||||
* :c:func:`get_excitation_degree_spin`
|
||||
* :c:func:`isort`
|
||||
@ -2103,14 +2110,15 @@ Subroutines / functions
|
||||
* :c:data:`pt2_stoch_istate`
|
||||
* :c:data:`psi_selectors`
|
||||
* :c:data:`psi_bilinear_matrix_values`
|
||||
* :c:data:`psi_det_alpha_unique`
|
||||
* :c:data:`psi_occ_pattern_hii`
|
||||
* :c:data:`pt2_e0_denominator`
|
||||
* :c:data:`pt2_n_teeth`
|
||||
* :c:data:`psi_selectors_coef_transp`
|
||||
* :c:data:`n_det`
|
||||
* :c:data:`mo_two_e_integrals_in_map`
|
||||
* :c:data:`s2_eig`
|
||||
* :c:data:`pt2_j`
|
||||
* :c:data:`mo_two_e_integrals_in_map`
|
||||
* :c:data:`psi_det_alpha_unique`
|
||||
* :c:data:`psi_bilinear_matrix_transp_values`
|
||||
* :c:data:`state_average_weight`
|
||||
* :c:data:`mo_num`
|
||||
@ -2119,16 +2127,18 @@ Subroutines / functions
|
||||
* :c:data:`mo_one_e_integrals`
|
||||
* :c:data:`elec_alpha_num`
|
||||
* :c:data:`nproc`
|
||||
* :c:data:`qp_max_mem`
|
||||
* :c:data:`psi_bilinear_matrix_columns_loc`
|
||||
* :c:data:`threshold_generators`
|
||||
* :c:data:`psi_det_beta_unique`
|
||||
* :c:data:`qp_max_mem`
|
||||
* :c:data:`det_to_occ_pattern`
|
||||
* :c:data:`psi_bilinear_matrix_transp_rows_loc`
|
||||
* :c:data:`n_states`
|
||||
* :c:data:`pt2_f`
|
||||
* :c:data:`n_det_generators`
|
||||
* :c:data:`psi_bilinear_matrix_transp_values`
|
||||
* :c:data:`n_int`
|
||||
* :c:data:`psi_det_hii`
|
||||
* :c:data:`pt2_j`
|
||||
* :c:data:`psi_det_sorted`
|
||||
* :c:data:`pt2_w`
|
||||
|
@ -8,34 +8,39 @@
|
||||
cis
|
||||
===
|
||||
|
||||
This module contains a CIS program.
|
||||
This module contains a |CIS| program.
|
||||
|
||||
The user point of view
|
||||
----------------------
|
||||
|
||||
The :command:`cis` program performs the CI of the ROHF-like + all single excitations on top of it.
|
||||
This program can be very useful to :
|
||||
The :ref:`cis` program performs the CI to obtain the ROHF reference + all
|
||||
single excitations on top of it. This program can be very useful to:
|
||||
|
||||
* **Ground state calculations**: generate a guess for the ground state wave function if one is not sure that the :c:func:`scf` program gave the lowest SCF solution. In combination with :c:func:`save_natorb` it can produce new |MOs| in order to reperform an :c:func:`scf` optimization.
|
||||
* **Ground state calculations**: generate a guess for the ground state wave
|
||||
function if one is not sure that the :ref:`scf` program gave the lowest |SCF|
|
||||
solution. In combination with :ref:`save_natorb` it can produce new |MOs| in
|
||||
order to reperform an :ref:`scf` optimization.
|
||||
|
||||
* **Excited states calculations**: generate guess for all the :option:`determinants n_states` wave functions, that will be used by the :c:func:`fci` program.
|
||||
* **Excited states calculations**: generate guesses for all the
|
||||
:option:`determinants n_states` wave functions, that will be used by the
|
||||
:ref:`fci` program.
|
||||
|
||||
|
||||
The main keywords/options to be used are:
|
||||
|
||||
* :option:`determinants n_states`: number of states to consider for the |CIS| calculation
|
||||
|
||||
* :option:`determinants s2_eig` : force all states to have the desired value of :math:`S^2`
|
||||
* :option:`determinants s2_eig`: force all states to have the desired value of |S^2|
|
||||
|
||||
* :option:`determinants expected_s2` : desired value of :math:`S^2`
|
||||
* :option:`determinants expected_s2`: desired value of |S^2|
|
||||
|
||||
|
||||
|
||||
|
||||
The programmer point of view
|
||||
----------------------------
|
||||
The programmer's point of view
|
||||
------------------------------
|
||||
|
||||
This module have been built by setting the following rules:
|
||||
This module was built by setting the following rules:
|
||||
|
||||
* The only generator determinant is the Hartree-Fock (single-reference method)
|
||||
* All generated singly excited determinants are included in the wave function (no perturbative
|
||||
|
@ -9,15 +9,22 @@ davidson
|
||||
========
|
||||
|
||||
Abstract module for Davidson's diagonalization.
|
||||
It contains everything required for the Davidson algorithm, dressed or not. If
|
||||
a dressing is used, the dressing column should be defined and the
|
||||
:ref:`davidson_dressed` module should be used. If no dressing is required,
|
||||
the :ref:`davidson` module should be used, and it has a default zero dressing vector.
|
||||
It contains everything required for the Davidson algorithm, dressed or
|
||||
not. If a dressing is used, the dressing column should be defined and
|
||||
the :ref:`module_davidson_dressed` module should be used. If no dressing
|
||||
is required, the :ref:`module_davidson` module should be used, and it
|
||||
has a default zero dressing vector.
|
||||
|
||||
The important providers for that module are:
|
||||
|
||||
# `psi_energy` which is the expectation value over the wave function (`psi_det`, `psi_coef`) of the Hamiltonian, dressed or not. It uses the general subroutine `u_0_H_u_0`.
|
||||
# `psi_energy_two_e` which is the expectation value over the wave function (`psi_det`, `psi_coef`) of the standard two-electrons coulomb operator. It uses the general routine `u_0_H_u_0_two_e`.
|
||||
#. :c:data:`psi_energy` which is the expectation value over the wave
|
||||
function (:c:data:`psi_det`, :c:data:`psi_coef`) of the Hamiltonian,
|
||||
dressed or not. It uses the general subroutine :c:func:`u_0_H_u_0`.
|
||||
|
||||
#. :c:data:`psi_energy_two_e` which is the expectation value over the
|
||||
wave function (:c:data:`psi_det`, :c:data:`psi_coef`) of the standard
|
||||
two-electron Coulomb operator. It uses the general routine
|
||||
:c:func:`u_0_H_u_0_two_e`.
|
||||
|
||||
|
||||
|
||||
@ -40,7 +47,7 @@ EZFIO parameters
|
||||
|
||||
Number of micro-iterations before re-contracting
|
||||
|
||||
Default: 8
|
||||
Default: 15
|
||||
|
||||
.. option:: state_following
|
||||
|
||||
@ -585,7 +592,6 @@ Subroutines / functions
|
||||
* :c:data:`psi_det_beta_unique`
|
||||
* :c:data:`only_expected_s2`
|
||||
* :c:data:`distributed_davidson`
|
||||
* :c:data:`n_states`
|
||||
* :c:data:`n_int`
|
||||
|
||||
Called by:
|
||||
@ -626,7 +632,6 @@ Subroutines / functions
|
||||
.. hlist::
|
||||
:columns: 3
|
||||
|
||||
* :c:data:`n_states_diag`
|
||||
* :c:data:`nthreads_davidson`
|
||||
|
||||
|
||||
@ -682,7 +687,6 @@ Subroutines / functions
|
||||
.. hlist::
|
||||
:columns: 3
|
||||
|
||||
* :c:data:`n_states_diag`
|
||||
* :c:data:`nthreads_davidson`
|
||||
|
||||
|
||||
@ -850,6 +854,7 @@ Subroutines / functions
|
||||
:columns: 3
|
||||
|
||||
* :c:data:`psi_det_beta_unique`
|
||||
* :c:data:`mpi_rank`
|
||||
* :c:data:`psi_bilinear_matrix_order_transp_reverse`
|
||||
* :c:data:`psi_det_alpha_unique`
|
||||
* :c:data:`mpi_initialized`
|
||||
@ -858,6 +863,7 @@ Subroutines / functions
|
||||
* :c:data:`psi_bilinear_matrix_values`
|
||||
* :c:data:`nproc`
|
||||
* :c:data:`ref_bitmask_energy`
|
||||
* :c:data:`n_states_diag`
|
||||
* :c:data:`psi_bilinear_matrix_columns_loc`
|
||||
|
||||
Called by:
|
||||
@ -874,7 +880,6 @@ Subroutines / functions
|
||||
|
||||
* :c:func:`davidson_push_results`
|
||||
* :c:func:`h_s2_u_0_nstates_openmp_work`
|
||||
* :c:func:`sleep`
|
||||
|
||||
|
||||
.. c:function:: diagonalize_ci:
|
||||
@ -1020,7 +1025,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)
|
||||
|
||||
|
||||
Computes $v_t = H|u_t
angle$ and $s_t = S^2 |u_t
angle$
|
||||
Computes $v_t = H | u_t \rangle$ and $s_t = S^2 | u_t\rangle$
|
||||
|
||||
Default should be 1,N_det,0,1
|
||||
|
||||
@ -1072,7 +1077,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)
|
||||
|
||||
|
||||
Computes $v_t = H|u_t
angle$ and $s_t = S^2 |u_t
angle$
|
||||
Computes $v_t = H | u_t \rangle$ and $s_t = S^2 | u_t\rangle$
|
||||
|
||||
Default should be 1,N_det,0,1
|
||||
|
||||
@ -1124,7 +1129,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)
|
||||
|
||||
|
||||
Computes $v_t = H|u_t
angle$ and $s_t = S^2 |u_t
angle$
|
||||
Computes $v_t = H | u_t \rangle$ and $s_t = S^2 | u_t\rangle$
|
||||
|
||||
Default should be 1,N_det,0,1
|
||||
|
||||
@ -1176,7 +1181,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)
|
||||
|
||||
|
||||
Computes $v_t = H|u_t
angle$ and $s_t = S^2 |u_t
angle$
|
||||
Computes $v_t = H | u_t \rangle$ and $s_t = S^2 | u_t\rangle$
|
||||
|
||||
Default should be 1,N_det,0,1
|
||||
|
||||
@ -1228,7 +1233,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)
|
||||
|
||||
|
||||
Computes $v_t = H|u_t
angle$ and $s_t = S^2 |u_t
angle$
|
||||
Computes $v_t = H | u_t \rangle$ and $s_t = S^2 | u_t\rangle$
|
||||
|
||||
Default should be 1,N_det,0,1
|
||||
|
||||
@ -1303,7 +1308,6 @@ Subroutines / functions
|
||||
* :c:data:`psi_bilinear_matrix_values`
|
||||
* :c:data:`nproc`
|
||||
* :c:data:`ref_bitmask_energy`
|
||||
* :c:data:`n_states_diag`
|
||||
* :c:data:`psi_bilinear_matrix_columns_loc`
|
||||
|
||||
Called by:
|
||||
@ -1327,13 +1331,6 @@ Subroutines / functions
|
||||
* :c:func:`new_parallel_job`
|
||||
* :c:func:`omp_set_nested`
|
||||
|
||||
Touches:
|
||||
|
||||
.. hlist::
|
||||
:columns: 3
|
||||
|
||||
* :c:data:`n_states_diag`
|
||||
|
||||
|
||||
.. c:function:: h_s2_u_0_two_e_nstates_openmp:
|
||||
|
||||
@ -1429,7 +1426,7 @@ Subroutines / functions
|
||||
subroutine H_S2_u_0_two_e_nstates_openmp_work_1(v_t,s_t,u_t,N_st,sze,istart,iend,ishift,istep)
|
||||
|
||||
|
||||
Computes $v_t = H|u_t
angle$ and $s_t = S^2 |u_t
angle$
|
||||
Computes $v_t = H | u_t \rangle$ and $s_t = S^2 | u_t \rangle$
|
||||
|
||||
Default should be 1,N_det,0,1
|
||||
|
||||
@ -1479,7 +1476,7 @@ Subroutines / functions
|
||||
subroutine H_S2_u_0_two_e_nstates_openmp_work_2(v_t,s_t,u_t,N_st,sze,istart,iend,ishift,istep)
|
||||
|
||||
|
||||
Computes $v_t = H|u_t
angle$ and $s_t = S^2 |u_t
angle$
|
||||
Computes $v_t = H | u_t \rangle$ and $s_t = S^2 | u_t \rangle$
|
||||
|
||||
Default should be 1,N_det,0,1
|
||||
|
||||
@ -1529,7 +1526,7 @@ Subroutines / functions
|
||||
subroutine H_S2_u_0_two_e_nstates_openmp_work_3(v_t,s_t,u_t,N_st,sze,istart,iend,ishift,istep)
|
||||
|
||||
|
||||
Computes $v_t = H|u_t
angle$ and $s_t = S^2 |u_t
angle$
|
||||
Computes $v_t = H | u_t \rangle$ and $s_t = S^2 | u_t \rangle$
|
||||
|
||||
Default should be 1,N_det,0,1
|
||||
|
||||
@ -1579,7 +1576,7 @@ Subroutines / functions
|
||||
subroutine H_S2_u_0_two_e_nstates_openmp_work_4(v_t,s_t,u_t,N_st,sze,istart,iend,ishift,istep)
|
||||
|
||||
|
||||
Computes $v_t = H|u_t
angle$ and $s_t = S^2 |u_t
angle$
|
||||
Computes $v_t = H | u_t \rangle$ and $s_t = S^2 | u_t \rangle$
|
||||
|
||||
Default should be 1,N_det,0,1
|
||||
|
||||
@ -1629,7 +1626,7 @@ Subroutines / functions
|
||||
subroutine H_S2_u_0_two_e_nstates_openmp_work_N_int(v_t,s_t,u_t,N_st,sze,istart,iend,ishift,istep)
|
||||
|
||||
|
||||
Computes $v_t = H|u_t
angle$ and $s_t = S^2 |u_t
angle$
|
||||
Computes $v_t = H | u_t \rangle$ and $s_t = S^2 | u_t \rangle$
|
||||
|
||||
Default should be 1,N_det,0,1
|
||||
|
||||
@ -1692,7 +1689,6 @@ Subroutines / functions
|
||||
:columns: 3
|
||||
|
||||
* :c:data:`n_states_diag`
|
||||
* :c:data:`n_states`
|
||||
* :c:data:`distributed_davidson`
|
||||
|
||||
Called by:
|
||||
@ -1710,13 +1706,6 @@ Subroutines / functions
|
||||
* :c:func:`h_s2_u_0_nstates_openmp`
|
||||
* :c:func:`h_s2_u_0_nstates_zmq`
|
||||
|
||||
Touches:
|
||||
|
||||
.. hlist::
|
||||
:columns: 3
|
||||
|
||||
* :c:data:`n_states_diag`
|
||||
|
||||
|
||||
.. c:function:: u_0_h_u_0_two_e:
|
||||
|
||||
|
@ -9,12 +9,16 @@ density_for_dft
|
||||
===============
|
||||
|
||||
|
||||
This module defines the *provider* of the density used for the DFT related calculations.
|
||||
This definition is done through the keyword :option:`density_for_dft density_for_dft`.
|
||||
The density can be:
|
||||
This module defines the *provider* of the density used for the |DFT| related
|
||||
calculations. This definition is done through the keyword
|
||||
:option:`density_for_dft density_for_dft`. The density can be:
|
||||
|
||||
* WFT : the density is computed with a potentially multi determinant wave function (see variables `psi_det` and `psi_det`)# input_density : the density is set to a density previously stored in the |EZFIO| folder (see ``aux_quantities``)
|
||||
* damping_rs_dft : the density is damped between the input_density and the WFT density, with a damping factor of :option:`density_for_dft damping_for_rs_dft`
|
||||
* `WFT`: the density is computed with a potentially multi determinant wave
|
||||
function (see variables `psi_det` and `psi_det`)# input_density: the density
|
||||
is set to a density previously stored in the |EZFIO| directory (see
|
||||
``aux_quantities``)
|
||||
* `damping_rs_dft`: the density is damped between the input_density and the WFT
|
||||
density, with a damping factor of :option:`density_for_dft damping_for_rs_dft`
|
||||
|
||||
|
||||
|
||||
|
@ -13,15 +13,15 @@ Contains everything for the computation of the Hamiltonian matrix elements in th
|
||||
The main providers for this module are:
|
||||
|
||||
* :option:`determinants n_states`: number of states to be computed
|
||||
* `psi_det`: list of determinants in the wave function used in many routines/providers of the |QP|.
|
||||
* `psi_coef`: list of coefficients, for all :option:`determinants n_states` states, and all determinants.
|
||||
* :c:data:`psi_det`: list of determinants in the wave function used in many routines/providers of the |QP|.
|
||||
* :c:data:`psi_coef`: list of coefficients, for all :option:`determinants n_states` states, and all determinants.
|
||||
|
||||
The main routines for this module are:
|
||||
|
||||
* `i_H_j`: computes the Hamiltonian matrix element between two arbitrary Slater determinants.
|
||||
* `i_H_j_s2`: computes the Hamiltonian and (:math:`S^2`) matrix element between two arbitrary Slater determinants.
|
||||
* `i_H_j_verbose`: returns the decomposition in terms of one- and two-body components of the Hamiltonian matrix elements between two arbitrary Slater determinants. Also return the fermionic phase factor.
|
||||
* `i_H_psi`: computes the Hamiltonian matrix element between an arbitrary Slater determinant and a wave function composed of a sum of arbitrary Slater determinants.
|
||||
* :c:func:`i_H_j`: computes the Hamiltonian matrix element between two arbitrary Slater determinants.
|
||||
* :c:func:`i_H_j_s2`: computes the Hamiltonian and (|S^2|) matrix element between two arbitrary Slater determinants.
|
||||
* :c:func:`i_H_j_verbose`: returns the decomposition in terms of one- and two-body components of the Hamiltonian matrix elements between two arbitrary Slater determinants. Also return the fermionic phase factor.
|
||||
* :c:func:`i_H_psi`: computes the Hamiltonian matrix element between an arbitrary Slater determinant and a wave function composed of a sum of arbitrary Slater determinants.
|
||||
|
||||
|
||||
For an example of how to use these routines and providers, take a look at :file:`example.irp.f`.
|
||||
@ -81,12 +81,12 @@ EZFIO parameters
|
||||
|
||||
.. option:: n_int
|
||||
|
||||
Number of integers required to represent bitstrings (set in module :ref:`bitmask`)
|
||||
Number of integers required to represent bitstrings (set in module :ref:`module_bitmask`)
|
||||
|
||||
|
||||
.. option:: bit_kind
|
||||
|
||||
(set in module :ref:`bitmask`)
|
||||
(set in module :ref:`module_bitmask`)
|
||||
|
||||
|
||||
.. option:: mo_label
|
||||
|
@ -769,13 +769,19 @@ Subroutines / functions
|
||||
subroutine density_and_grad_alpha_beta_and_all_aos_and_grad_aos_at_r(r,dm_a,dm_b, grad_dm_a, grad_dm_b, aos_array, grad_aos_array)
|
||||
|
||||
|
||||
input : r(1) ==> r(1) = x, r(2) = y, r(3) = z
|
||||
output : dm_a = alpha density evaluated at r
|
||||
: dm_b = beta density evaluated at r
|
||||
: aos_array(i) = ao(i) evaluated at r
|
||||
: grad_dm_a(1) = X gradient of the alpha density evaluated in r
|
||||
: grad_dm_a(1) = X gradient of the beta density evaluated in r
|
||||
: grad_aos_array(1) = X gradient of the aos(i) evaluated at r
|
||||
input:
|
||||
|
||||
* r(1) ==> r(1) = x, r(2) = y, r(3) = z
|
||||
|
||||
output:
|
||||
|
||||
* dm_a = alpha density evaluated at r
|
||||
* dm_b = beta density evaluated at r
|
||||
* aos_array(i) = ao(i) evaluated at r
|
||||
* grad_dm_a(1) = X gradient of the alpha density evaluated in r
|
||||
* grad_dm_a(1) = X gradient of the beta density evaluated in r
|
||||
* grad_aos_array(1) = X gradient of the aos(i) evaluated at r
|
||||
|
||||
|
||||
Needs:
|
||||
|
||||
|
@ -15,43 +15,52 @@ fci
|
||||
The user point of view
|
||||
----------------------
|
||||
|
||||
* :c:func:`fci` performs |CIPSI| calculations using a stochastic scheme for both the selection and the |PT2| contribution,
|
||||
* :c:func:`pt2` computes the |PT2| contribution using the wave function stored in the |EZFIO|
|
||||
database.
|
||||
* :ref:`fci` performs |CIPSI| calculations using a stochastic scheme for both
|
||||
the selection and the |PT2| contribution,
|
||||
|
||||
* :ref:`pt2` computes the |PT2| contribution using the wave function stored in
|
||||
the |EZFIO| database.
|
||||
|
||||
|
||||
The main keywords/options for this module are:
|
||||
|
||||
* :option:`determinants n_det_max` : maximum number of Slater determinants in the CIPSI wave function. The :command:`fci` program will stop when the size of the CIPSI wave function will exceed :option:`determinants n_det_max`.
|
||||
* :option:`determinants n_det_max` : maximum number of Slater determinants in
|
||||
the |CIPSI| wave function. The :ref:`fci` program will stop when the size of
|
||||
the |CIPSI| wave function will exceed :option:`determinants n_det_max`.
|
||||
|
||||
* :option:`perturbation pt2_max` : absolute value of the |PT2| to stop the CIPSI calculation. Once the |PT2| :math:`<` :option:`perturbation pt2_max`, the CIPSI calculation stops.
|
||||
* :option:`perturbation pt2_max` : absolute value of the |PT2| to stop the
|
||||
|CIPSI| calculation. Once the abs(|PT2|) :math:`<` :option:`perturbation pt2_max`,
|
||||
the |CIPSI| calculation stops.
|
||||
|
||||
* :option:`determinants n_states` : number of states to consider in the CIPSI calculation.
|
||||
* :option:`determinants n_states` : number of states to consider in the |CIPSI|
|
||||
calculation.
|
||||
|
||||
* :option:`determinants read_wf` : if False, starts with a ROHF-like determinant, if True, starts with the current wave function(s) stored in the |EZFIO| folder.
|
||||
* :option:`determinants read_wf` : if |false|, starts with a |ROHF|-like
|
||||
determinant, if |true|, starts with the current wave function(s) stored in
|
||||
the |EZFIO| directory.
|
||||
|
||||
.. note::
|
||||
For a multi-state calculation, it is recommended to start with :c:func:`cis` or :c:func:`cisd`
|
||||
wave functions as a guess.
|
||||
For a multi-state calculation, it is recommended to start with :ref:`cis`
|
||||
or :ref:`cisd` wave functions as a guess.
|
||||
|
||||
* :option:`determinants s2_eig` : if True, systematically add all the determinants needed to have a pure value of :math:`S^2`. Also, if True, it tracks only the states having the good :option:`determinants expected_s2`.
|
||||
* :option:`determinants expected_s2` : expected value of |S^2| for the
|
||||
desired spin multiplicity.
|
||||
|
||||
.. note::
|
||||
For a multi-state calculation, it is recommended to start with :c:func:`cis` or :c:func:`cisd`
|
||||
wave functions as a guess.
|
||||
|
||||
* :option:`determinants expected_s2` : expected value of :math:`S^2` for the desired spin multiplicity.
|
||||
* :option:`determinants s2_eig` : if |true|, systematically add all the
|
||||
determinants needed to have a pure value of |S^2|. Also, if |true|, it
|
||||
tracks only the states having the good :option:`determinants expected_s2`.
|
||||
|
||||
|
||||
|
||||
The programmer point of view
|
||||
----------------------------
|
||||
|
||||
This module have been created with the :ref:`cipsi` module.
|
||||
The programmer's point of view
|
||||
------------------------------
|
||||
|
||||
This module was created with the :ref:`module_cipsi` module.
|
||||
|
||||
.. seealso::
|
||||
|
||||
The documentation of the :ref:`cipsi` module.
|
||||
The documentation of the :ref:`module_cipsi` module.
|
||||
|
||||
|
||||
|
||||
|
@ -14,9 +14,9 @@ calculations (the spatial part of the |MOs| is common for alpha and beta
|
||||
spinorbitals).
|
||||
|
||||
The Hartree-Fock algorithm is a |SCF| and therefore is based on the
|
||||
:ref:`module_scf_utils`` module.
|
||||
:ref:`module_scf_utils` module.
|
||||
|
||||
The Fock matrix is defined in :file:`hartree_fock fock_matrix_hf.irp.f`.
|
||||
The Fock matrix is defined in :file:`fock_matrix_hf.irp.f`.
|
||||
|
||||
|
||||
|
||||
|
@ -106,39 +106,6 @@ EZFIO parameters
|
||||
Providers
|
||||
---------
|
||||
|
||||
.. c:function:: fill_h_apply_buffer_selection:
|
||||
|
||||
|
||||
File : :file:`perturbation/selection.irp.f`
|
||||
|
||||
.. code:: fortran
|
||||
|
||||
subroutine fill_H_apply_buffer_selection(n_selected,det_buffer,e_2_pert_buffer,coef_pert_buffer, &
|
||||
N_st,Nint,iproc,select_max_out)
|
||||
|
||||
|
||||
Fill the H_apply buffer with determiants for the selection
|
||||
|
||||
Needs:
|
||||
|
||||
.. hlist::
|
||||
:columns: 3
|
||||
|
||||
* :c:data:`selection_criterion`
|
||||
* :c:data:`h_apply_buffer_allocated`
|
||||
* :c:data:`n_det`
|
||||
* :c:data:`n_int`
|
||||
|
||||
Calls:
|
||||
|
||||
.. hlist::
|
||||
:columns: 3
|
||||
|
||||
* :c:func:`omp_set_lock`
|
||||
* :c:func:`omp_unset_lock`
|
||||
* :c:func:`resize_h_apply_buffer`
|
||||
|
||||
|
||||
.. c:var:: h0_type
|
||||
|
||||
|
||||
@ -253,6 +220,38 @@ Providers
|
||||
Subroutines / functions
|
||||
-----------------------
|
||||
|
||||
.. c:function:: fill_h_apply_buffer_selection:
|
||||
|
||||
|
||||
File : :file:`perturbation/selection.irp.f`
|
||||
|
||||
.. code:: fortran
|
||||
|
||||
subroutine fill_H_apply_buffer_selection(n_selected,det_buffer,e_2_pert_buffer,coef_pert_buffer, N_st,Nint,iproc,select_max_out)
|
||||
|
||||
|
||||
Fill the H_apply buffer with determiants for the selection
|
||||
|
||||
Needs:
|
||||
|
||||
.. hlist::
|
||||
:columns: 3
|
||||
|
||||
* :c:data:`selection_criterion`
|
||||
* :c:data:`h_apply_buffer_allocated`
|
||||
* :c:data:`n_det`
|
||||
* :c:data:`n_int`
|
||||
|
||||
Calls:
|
||||
|
||||
.. hlist::
|
||||
:columns: 3
|
||||
|
||||
* :c:func:`omp_set_lock`
|
||||
* :c:func:`omp_unset_lock`
|
||||
* :c:func:`resize_h_apply_buffer`
|
||||
|
||||
|
||||
.. c:function:: perturb_buffer_by_mono_dummy:
|
||||
|
||||
|
||||
@ -263,7 +262,7 @@ Subroutines / functions
|
||||
subroutine perturb_buffer_by_mono_dummy(i_generator,buffer,buffer_size,e_2_pert_buffer,coef_pert_buffer,sum_e_2_pert,sum_norm_pert,sum_H_pert_diag,N_st,Nint,key_mask,fock_diag_tmp,electronic_energy)
|
||||
|
||||
|
||||
Applly pertubration ``dummy`` to the buffer of determinants generated in the H_apply
|
||||
Apply pertubration ``dummy`` to the buffer of determinants generated in the H_apply
|
||||
routine.
|
||||
|
||||
Needs:
|
||||
@ -298,7 +297,7 @@ Subroutines / functions
|
||||
subroutine perturb_buffer_by_mono_epstein_nesbet(i_generator,buffer,buffer_size,e_2_pert_buffer,coef_pert_buffer,sum_e_2_pert,sum_norm_pert,sum_H_pert_diag,N_st,Nint,key_mask,fock_diag_tmp,electronic_energy)
|
||||
|
||||
|
||||
Applly pertubration ``epstein_nesbet`` to the buffer of determinants generated in the H_apply
|
||||
Apply pertubration ``epstein_nesbet`` to the buffer of determinants generated in the H_apply
|
||||
routine.
|
||||
|
||||
Needs:
|
||||
@ -333,7 +332,7 @@ Subroutines / functions
|
||||
subroutine perturb_buffer_by_mono_epstein_nesbet_2x2(i_generator,buffer,buffer_size,e_2_pert_buffer,coef_pert_buffer,sum_e_2_pert,sum_norm_pert,sum_H_pert_diag,N_st,Nint,key_mask,fock_diag_tmp,electronic_energy)
|
||||
|
||||
|
||||
Applly pertubration ``epstein_nesbet_2x2`` to the buffer of determinants generated in the H_apply
|
||||
Apply pertubration ``epstein_nesbet_2x2`` to the buffer of determinants generated in the H_apply
|
||||
routine.
|
||||
|
||||
Needs:
|
||||
@ -368,7 +367,7 @@ Subroutines / functions
|
||||
subroutine perturb_buffer_by_mono_epstein_nesbet_2x2_no_ci_diag(i_generator,buffer,buffer_size,e_2_pert_buffer,coef_pert_buffer,sum_e_2_pert,sum_norm_pert,sum_H_pert_diag,N_st,Nint,key_mask,fock_diag_tmp,electronic_energy)
|
||||
|
||||
|
||||
Applly pertubration ``epstein_nesbet_2x2_no_ci_diag`` to the buffer of determinants generated in the H_apply
|
||||
Apply pertubration ``epstein_nesbet_2x2_no_ci_diag`` to the buffer of determinants generated in the H_apply
|
||||
routine.
|
||||
|
||||
Needs:
|
||||
@ -403,7 +402,7 @@ Subroutines / functions
|
||||
subroutine perturb_buffer_by_mono_moller_plesset(i_generator,buffer,buffer_size,e_2_pert_buffer,coef_pert_buffer,sum_e_2_pert,sum_norm_pert,sum_H_pert_diag,N_st,Nint,key_mask,fock_diag_tmp,electronic_energy)
|
||||
|
||||
|
||||
Applly pertubration ``moller_plesset`` to the buffer of determinants generated in the H_apply
|
||||
Apply pertubration ``moller_plesset`` to the buffer of determinants generated in the H_apply
|
||||
routine.
|
||||
|
||||
Needs:
|
||||
@ -438,7 +437,7 @@ Subroutines / functions
|
||||
subroutine perturb_buffer_by_mono_qdpt(i_generator,buffer,buffer_size,e_2_pert_buffer,coef_pert_buffer,sum_e_2_pert,sum_norm_pert,sum_H_pert_diag,N_st,Nint,key_mask,fock_diag_tmp,electronic_energy)
|
||||
|
||||
|
||||
Applly pertubration ``qdpt`` to the buffer of determinants generated in the H_apply
|
||||
Apply pertubration ``qdpt`` to the buffer of determinants generated in the H_apply
|
||||
routine.
|
||||
|
||||
Needs:
|
||||
@ -473,7 +472,7 @@ Subroutines / functions
|
||||
subroutine perturb_buffer_dummy(i_generator,buffer,buffer_size,e_2_pert_buffer,coef_pert_buffer,sum_e_2_pert,sum_norm_pert,sum_H_pert_diag,N_st,Nint,key_mask,fock_diag_tmp,electronic_energy)
|
||||
|
||||
|
||||
Applly pertubration ``dummy`` to the buffer of determinants generated in the H_apply
|
||||
Apply pertubration ``dummy`` to the buffer of determinants generated in the H_apply
|
||||
routine.
|
||||
|
||||
Needs:
|
||||
@ -509,7 +508,7 @@ Subroutines / functions
|
||||
subroutine perturb_buffer_epstein_nesbet(i_generator,buffer,buffer_size,e_2_pert_buffer,coef_pert_buffer,sum_e_2_pert,sum_norm_pert,sum_H_pert_diag,N_st,Nint,key_mask,fock_diag_tmp,electronic_energy)
|
||||
|
||||
|
||||
Applly pertubration ``epstein_nesbet`` to the buffer of determinants generated in the H_apply
|
||||
Apply pertubration ``epstein_nesbet`` to the buffer of determinants generated in the H_apply
|
||||
routine.
|
||||
|
||||
Needs:
|
||||
@ -545,7 +544,7 @@ Subroutines / functions
|
||||
subroutine perturb_buffer_epstein_nesbet_2x2(i_generator,buffer,buffer_size,e_2_pert_buffer,coef_pert_buffer,sum_e_2_pert,sum_norm_pert,sum_H_pert_diag,N_st,Nint,key_mask,fock_diag_tmp,electronic_energy)
|
||||
|
||||
|
||||
Applly pertubration ``epstein_nesbet_2x2`` to the buffer of determinants generated in the H_apply
|
||||
Apply pertubration ``epstein_nesbet_2x2`` to the buffer of determinants generated in the H_apply
|
||||
routine.
|
||||
|
||||
Needs:
|
||||
@ -581,7 +580,7 @@ Subroutines / functions
|
||||
subroutine perturb_buffer_epstein_nesbet_2x2_no_ci_diag(i_generator,buffer,buffer_size,e_2_pert_buffer,coef_pert_buffer,sum_e_2_pert,sum_norm_pert,sum_H_pert_diag,N_st,Nint,key_mask,fock_diag_tmp,electronic_energy)
|
||||
|
||||
|
||||
Applly pertubration ``epstein_nesbet_2x2_no_ci_diag`` to the buffer of determinants generated in the H_apply
|
||||
Apply pertubration ``epstein_nesbet_2x2_no_ci_diag`` to the buffer of determinants generated in the H_apply
|
||||
routine.
|
||||
|
||||
Needs:
|
||||
@ -617,7 +616,7 @@ Subroutines / functions
|
||||
subroutine perturb_buffer_moller_plesset(i_generator,buffer,buffer_size,e_2_pert_buffer,coef_pert_buffer,sum_e_2_pert,sum_norm_pert,sum_H_pert_diag,N_st,Nint,key_mask,fock_diag_tmp,electronic_energy)
|
||||
|
||||
|
||||
Applly pertubration ``moller_plesset`` to the buffer of determinants generated in the H_apply
|
||||
Apply pertubration ``moller_plesset`` to the buffer of determinants generated in the H_apply
|
||||
routine.
|
||||
|
||||
Needs:
|
||||
@ -653,7 +652,7 @@ Subroutines / functions
|
||||
subroutine perturb_buffer_qdpt(i_generator,buffer,buffer_size,e_2_pert_buffer,coef_pert_buffer,sum_e_2_pert,sum_norm_pert,sum_H_pert_diag,N_st,Nint,key_mask,fock_diag_tmp,electronic_energy)
|
||||
|
||||
|
||||
Applly pertubration ``qdpt`` to the buffer of determinants generated in the H_apply
|
||||
Apply pertubration ``qdpt`` to the buffer of determinants generated in the H_apply
|
||||
routine.
|
||||
|
||||
Needs:
|
||||
|
@ -9,5 +9,5 @@ selectors_cassd
|
||||
===============
|
||||
|
||||
Selectors for |CAS-SD| calculations. The selectors are defined as first the
|
||||
generators from :ref:`Generators_CAS`, and then the rest of the wave function.
|
||||
generators from :ref:`module_generators_cas`, and then the rest of the wave function.
|
||||
|
||||
|
@ -855,8 +855,8 @@ Subroutines / functions
|
||||
* :c:func:`remove_duplicates_in_selection_buffer`
|
||||
* :c:func:`run_cipsi`
|
||||
* :c:func:`run_pt2_slave`
|
||||
* :c:func:`run_slave_main`
|
||||
* :c:func:`run_stochastic_cipsi`
|
||||
* :c:func:`select_singles_and_doubles`
|
||||
* :c:func:`selection_collector`
|
||||
* :c:func:`sort_selection_buffer`
|
||||
* :c:func:`testteethbuilding`
|
||||
@ -2651,6 +2651,7 @@ Subroutines / functions
|
||||
* :c:func:`check_mem`
|
||||
* :c:func:`davidson_diag_hjj_sjj`
|
||||
* :c:func:`print_memory_usage`
|
||||
* :c:func:`run_slave_main`
|
||||
* :c:func:`zmq_pt2`
|
||||
|
||||
Calls:
|
||||
|
@ -107,7 +107,7 @@ Only standard Fortran is allowed : Intel or GNU extensions are forbidden.
|
||||
The name of a program should be the same as the name of the file. For example,
|
||||
for the :ref:`fci` program, we have
|
||||
|
||||
.. code-block:: fortan
|
||||
.. code-block:: fortran
|
||||
|
||||
program fci
|
||||
|
||||
|
@ -8,7 +8,7 @@ EZFIO.cfg
|
||||
|
||||
The simplest way to add control parameters in the |EZFIO| directory is to create a
|
||||
:file:`EZFIO.cfg` file in the module. An example can be found in existing modules
|
||||
such as :ref:`hartree_fock`::
|
||||
such as :ref:`module_hartree_fock`::
|
||||
|
||||
[max_dim_diis]
|
||||
type: integer
|
||||
@ -92,7 +92,7 @@ Optional
|
||||
|
||||
It is possible to directly add to the current module |EZFIO| configuration
|
||||
files, named with the ``.ezfio_config`` suffix. An example is in the
|
||||
:ref:`bitmask` module.
|
||||
:ref:`module_bitmask` module.
|
||||
|
||||
.. code:: text
|
||||
|
||||
|
@ -226,7 +226,6 @@ Index of Providers
|
||||
* :c:data:`ezfio_work_dir`
|
||||
* :c:data:`fact_inv`
|
||||
* :c:data:`file_lock`
|
||||
* :c:data:`fill_h_apply_buffer_selection`
|
||||
* :c:data:`final_grid_points`
|
||||
* :c:data:`final_weight_at_r`
|
||||
* :c:data:`final_weight_at_r_vector`
|
||||
@ -606,7 +605,6 @@ Index of Providers
|
||||
* :c:data:`psi_selectors_coef_transp`
|
||||
* :c:data:`psi_selectors_diag_h_mat`
|
||||
* :c:data:`psi_selectors_size`
|
||||
* :c:data:`pt2_collector`
|
||||
* :c:data:`pt2_cw`
|
||||
* :c:data:`pt2_e0_denominator`
|
||||
* :c:data:`pt2_f`
|
||||
@ -907,6 +905,7 @@ Index of Subroutines/Functions
|
||||
* :c:func:`fcidump`
|
||||
* :c:func:`fill_buffer_double`
|
||||
* :c:func:`fill_h_apply_buffer_no_selection`
|
||||
* :c:func:`fill_h_apply_buffer_selection`
|
||||
* :c:func:`filter_connected`
|
||||
* :c:func:`filter_connected_i_h_psi0`
|
||||
* :c:func:`filter_not_connected`
|
||||
@ -1198,6 +1197,7 @@ Index of Subroutines/Functions
|
||||
* :c:func:`provide_all_mo_integrals_erf`
|
||||
* :c:func:`provide_everything`
|
||||
* :c:func:`pt2`
|
||||
* :c:func:`pt2_collector`
|
||||
* :c:func:`pt2_dummy`
|
||||
* :c:func:`pt2_epstein_nesbet`
|
||||
* :c:func:`pt2_epstein_nesbet_2x2`
|
||||
|
@ -20,25 +20,22 @@ cis
|
||||
This program can be useful in many cases:
|
||||
|
||||
|
||||
Ground state calculation
|
||||
------------------------
|
||||
1. Ground state calculation
|
||||
|
||||
To be sure to have the lowest |SCF| solution, perform an :ref:`scf`
|
||||
(see the :ref:`hartree_fock` module), then a :ref:`cis`, save
|
||||
the natural orbitals (see :ref:`save_natorb`) and re-run an
|
||||
:ref:`scf` optimization from this |MO| guess.
|
||||
(see the :ref:`module_hartree_fock` module), then a :ref:`cis`, save the
|
||||
natural orbitals (see :ref:`save_natorb`) and re-run an :ref:`scf`
|
||||
optimization from this |MO| guess.
|
||||
|
||||
|
||||
Excited states calculations
|
||||
---------------------------
|
||||
2. Excited states calculations
|
||||
|
||||
The lowest excited states are much likely to be dominated by
|
||||
single-excitations. Therefore, running a :ref:`cis` will save
|
||||
the `n_states` lowest states within the |CIS| space in the |EZFIO|
|
||||
single-excitations. Therefore, running a :ref:`cis` will save the
|
||||
`n_states` lowest states within the |CIS| space in the |EZFIO|
|
||||
directory, which can afterwards be used as guess wave functions for
|
||||
a further multi-state |FCI| calculation if :option:`determinants read_wf`
|
||||
is set to |true| before running the :ref:`fci`
|
||||
executable.
|
||||
a further multi-state |FCI| calculation if :option:`determinants
|
||||
read_wf` is set to |true| before running the :ref:`fci` executable.
|
||||
|
||||
|
||||
If :option:`determinants s2_eig` is set to |true|, the |CIS|
|
||||
|
@ -19,7 +19,7 @@ cisd
|
||||
|
||||
This program can be useful in many cases:
|
||||
|
||||
* GROUND STATE CALCULATION: if even after a :c:func:`cis` calculation, natural
|
||||
* **Ground state calculation**: if even after a :c:func:`cis` calculation, natural
|
||||
orbitals (see :c:func:`save_natorb`) and then :c:func:`scf` optimization, you are not sure to have the lowest scf
|
||||
solution,
|
||||
do the same strategy with the :c:func:`cisd` executable instead of the :c:func:`cis` exectuable to generate the natural
|
||||
@ -27,11 +27,11 @@ cisd
|
||||
|
||||
|
||||
|
||||
* EXCITED STATES CALCULATIONS: the lowest excited states are much likely to
|
||||
* **Excited states calculations**: the lowest excited states are much likely to
|
||||
be dominanted by single- or double-excitations.
|
||||
Therefore, running a :c:func:`cisd` will save the "n_states" lowest states within
|
||||
the CISD space
|
||||
in the EZFIO folder, which can afterward be used as guess wave functions
|
||||
in the |EZFIO| directory, which can afterward be used as guess wave functions
|
||||
for a further multi-state fci calculation if you specify "read_wf" = True
|
||||
before running the fci executable (see :option:`determinants read_wf`).
|
||||
Also, if you specify "s2_eig" = True, the cisd will only retain states
|
||||
@ -51,6 +51,7 @@ cisd
|
||||
|
||||
* "del" orbitals which will be never occupied
|
||||
|
||||
|
||||
Needs:
|
||||
|
||||
.. hlist::
|
||||
|
@ -9,11 +9,14 @@ diagonalize_h
|
||||
|
||||
|
||||
|
||||
Program that extracts the :option:`determinants 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| directory.
|
||||
|
||||
If :option:`determinants s2_eig` = True, it will retain only states
|
||||
If :option:`determinants s2_eig` = |true|, it will retain only states
|
||||
which correspond to the desired value of
|
||||
:option:`determinants expected_s2`.
|
||||
|
||||
which corresponds to the desired value of :option:`determinants expected_s2`.
|
||||
|
||||
Needs:
|
||||
|
||||
|
@ -21,7 +21,7 @@ fci
|
||||
conditions:
|
||||
|
||||
* number of Slater determinants > :option:`determinants n_det_max`
|
||||
* |PT2| < :option:`perturbation pt2_max`
|
||||
* abs(|PT2|) less than :option:`perturbation pt2_max`
|
||||
|
||||
The following other options can be of interest:
|
||||
|
||||
@ -38,7 +38,7 @@ fci
|
||||
:option:`determinants expected_s2`.
|
||||
|
||||
For excited states calculations, it is recommended to start with
|
||||
:ref:`.cis.` or :ref:`.cisd.` guess wave functions, eventually in
|
||||
:ref:`cis` or :ref:`cisd` guess wave functions, eventually in
|
||||
a restricted set of |MOs|, and to set :option:`determinants s2_eig`
|
||||
to |true|.
|
||||
|
||||
|
@ -9,17 +9,22 @@ fcidump
|
||||
|
||||
|
||||
|
||||
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|
|
||||
directory.
|
||||
|
||||
To specify an active space, the class of the mos have to set in the |EZFIO| folder (see :ref:`qp_set_mo_class`).
|
||||
To specify an active space, the class of the |MOs| have to set in the
|
||||
|EZFIO| directory (see :ref:`qp_set_mo_class`).
|
||||
|
||||
The fcidump program supports 3 types of MO_class :
|
||||
The :ref:`fcidump` program supports 3 types of |MO| classes :
|
||||
|
||||
* the "core" orbitals which are always doubly occupied in the calculation
|
||||
* the *core* orbitals which are always doubly occupied in the
|
||||
calculation
|
||||
|
||||
* the "del" orbitals that are never occupied in the calculation
|
||||
* the *deleted* orbitals that are never occupied in the calculation
|
||||
|
||||
* the *active* orbitals that are occupied with a varying number of
|
||||
electrons
|
||||
|
||||
* the "act" orbitals that will be occupied by a varying number of electrons
|
||||
|
||||
Needs:
|
||||
|
||||
|
@ -9,11 +9,15 @@ four_idx_transform
|
||||
|
||||
|
||||
|
||||
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| directory.
|
||||
|
||||
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.
|
||||
|
||||
Needs:
|
||||
|
||||
|
@ -9,7 +9,7 @@ molden
|
||||
|
||||
|
||||
|
||||
Produce a Molden file
|
||||
Produces a Molden file
|
||||
|
||||
Needs:
|
||||
|
||||
|
@ -9,13 +9,15 @@ print_wf
|
||||
|
||||
|
||||
|
||||
Print the ground state wave function stored in the |EZFIO| folder in the intermediate normalization.
|
||||
Print the ground state wave function stored in the |EZFIO| directory
|
||||
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.
|
||||
|
||||
If the wave function strongly deviates from the first-order analysis, something funny is going on :)
|
||||
If the wave function strongly deviates from the first-order analysis,
|
||||
something funny is going on :)
|
||||
|
||||
Needs:
|
||||
|
||||
|
@ -9,13 +9,18 @@ pt2
|
||||
|
||||
|
||||
|
||||
Second order perturbative correction to the wave function contained in the EZFIO directory.
|
||||
Second order perturbative correction to the wave function contained
|
||||
in the |EZFIO| directory.
|
||||
|
||||
This programs runs the stochastic PT2 correction on all "n_states" wave function stored in the EZFIO folder (see :option:`determinant n_states`).
|
||||
This programs runs the stochastic |PT2| correction on all
|
||||
:option:`determinants n_states` wave functions stored in the |EZFIO|
|
||||
directory.
|
||||
|
||||
The option for the PT2 correction are the "pt2_relative_error" which is the relative stochastic
|
||||
The main option for the |PT2| correction is the
|
||||
:option:`perturbation pt2_relative_error` which is the relative
|
||||
stochastic error on the |PT2| to reach before stopping the
|
||||
sampling.
|
||||
|
||||
error on the PT2 to reach before stopping the stochastic sampling. (see :option:`perturbation pt2_relative_error`)
|
||||
|
||||
Needs:
|
||||
|
||||
|
@ -9,15 +9,16 @@ save_natorb
|
||||
|
||||
|
||||
|
||||
Save natural MOs into the EZFIO
|
||||
Save natural |MOs| into the |EZFIO|.
|
||||
|
||||
This program reads the wave function stored in the EZFIO folder,
|
||||
This program reads the wave function stored in the |EZFIO| directory,
|
||||
extracts the corresponding natural orbitals and setd them as the new
|
||||
|MOs|.
|
||||
|
||||
extracts the corresponding natural orbitals and set them as the new MOs
|
||||
|
||||
If this is a multi-state calculation, the density matrix that produces the natural orbitals
|
||||
|
||||
is obtained from a state-averaged of the density matrices of each state with the corresponding state_average_weight (see the doc of state_average_weight).
|
||||
If this is a multi-state calculation, the density matrix that produces
|
||||
the natural orbitals is obtained from an average of the density
|
||||
matrices of each state with the corresponding
|
||||
:option:`determinants state_average_weight`
|
||||
|
||||
Needs:
|
||||
|
||||
|
@ -9,12 +9,16 @@ save_one_e_dm
|
||||
|
||||
|
||||
|
||||
programs that computes the one body density on the mo basis for alpha and beta electrons
|
||||
from the wave function stored in the EZFIO folder, and then save it into the EZFIO folder aux_quantities.
|
||||
Program that computes the one body density on the |MO| basis
|
||||
for $\alpha$ and $\beta$ electrons from the wave function
|
||||
stored in the |EZFIO| directory, and then saves it into the
|
||||
:ref:`module_aux_quantities`.
|
||||
|
||||
Then, the global variable data_one_e_dm_alpha_mo and data_one_e_dm_beta_mo will automatically read this density in a further calculation.
|
||||
|
||||
This can be used to perform damping on the density in RS-DFT calculation (see the density_for_dft module).
|
||||
Then, the global variable :option:`aux_quantities data_one_e_dm_alpha_mo`
|
||||
and :option:`aux_quantities data_one_e_dm_beta_mo` will automatically
|
||||
read this density in the next calculation. This can be used to perform
|
||||
damping on the density in |RSDFT| calculations (see
|
||||
:ref:`module_density_for_dft`).
|
||||
|
||||
Needs:
|
||||
|
||||
|
@ -9,7 +9,8 @@ write_integrals_erf
|
||||
|
||||
|
||||
|
||||
Saves the two-electron integrals with the :math:`erf(\mu r_{12})/r_{12}` oprerator into the EZFIO folder
|
||||
Saves the two-electron integrals with the $erf(\mu r_{12})/r_{12}$
|
||||
oprerator into the EZFIO directory.
|
||||
|
||||
Needs:
|
||||
|
||||
|
@ -15,7 +15,7 @@ A few interfaces to external codes are available.
|
||||
|qp| -> \*
|
||||
----------
|
||||
|
||||
`Molden`_
|
||||
`Molden <http://cheminf.cmbi.ru.nl/molden>`_
|
||||
3D plots of Molecular Orbitals
|
||||
|
||||
FCIDUMP
|
||||
|
@ -31,7 +31,7 @@ interactively in :ref:`qp_edit` mode. An alternative is to use the
|
||||
|
||||
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
|
||||
|EZFIO| directory. 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.
|
||||
|
||||
|
32
docs/source/users_guide/qp_reset.rst
Normal file
32
docs/source/users_guide/qp_reset.rst
Normal file
@ -0,0 +1,32 @@
|
||||
.. _qp_reset:
|
||||
|
||||
========
|
||||
qp_reset
|
||||
========
|
||||
|
||||
.. program:: qp_reset
|
||||
|
||||
This command resets parts of the |EZFIO| directory.
|
||||
|
||||
|
||||
Usage
|
||||
-----
|
||||
|
||||
.. code:: bash
|
||||
|
||||
qp_reset [-adhm] EZFIO_DIR
|
||||
|
||||
.. option:: -a, --all
|
||||
|
||||
Reset to the state in which the directory is after after running :ref:`qp_create_ezfio`.
|
||||
|
||||
.. option:: -d, --dets
|
||||
|
||||
Deletes the determinants and CI coefficients.
|
||||
|
||||
.. option:: -m, --mos
|
||||
|
||||
Deletes the |MOs|, and consequently the determinants and CI coefficients.
|
||||
|
||||
|
||||
|
@ -95,7 +95,7 @@ Running programs
|
||||
|
||||
qp (run|srun|mpirun) [options] <program>
|
||||
|
||||
Runs :ref:`qp_run`, :ref:`qp_srun`, or :ref:`qp_mpirun` using the current
|
||||
Runs :ref:`qp_run`, :command:`qp_srun`, or :command:`qp_mpirun` using the current
|
||||
|EZFIO| directory.
|
||||
|
||||
.. option:: stop
|
||||
|
@ -74,7 +74,8 @@ The expected energy is ``-92.827856698`` au.
|
||||
|
||||
.. seealso::
|
||||
|
||||
The documentation of the :ref:`hartree_fock` module and that of the :c:func:`scf` program.
|
||||
The documentation of the :ref:`module_hartree_fock` module and that of the
|
||||
:ref:`scf` program.
|
||||
|
||||
This creates the |MOs| in the |EZFIO| database that will be used to
|
||||
perform any other post-SCF method. The |qp| does not handle symmetry and
|
||||
@ -138,7 +139,7 @@ The estimated |FCI| energy of HCN is ``-93.0501`` au.
|
||||
|
||||
.. seealso::
|
||||
|
||||
The documentation of the :ref:`fci` module and that of the :c:func:`fci` program.
|
||||
The documentation of the :ref:`module_fci` module and that of the :ref:`fci` program.
|
||||
|
||||
|
||||
---------------------------
|
||||
|
@ -32,7 +32,8 @@ export PYTHONPATH=$(qp_prepend_export "PYTHONPATH" "${QP_EZFIO}/Python":"${QP_PY
|
||||
|
||||
export PATH=$(qp_prepend_export "PATH" "${QP_PYTHON}":"${QP_ROOT}"/bin:"${QP_ROOT}"/ocaml)
|
||||
|
||||
export LD_LIBRARY_PATH=$(qp_prepend_export "LD_LIBRARY_PATH" "${QP_ROOT}"/lib:"${QP_ROOT}"/lib64)
|
||||
export LD_LIBRARY_PATH=$(qp_prepend_export "LD_LIBRARY_PATH" "${QP_ROOT}"/lib)
|
||||
|
||||
|
||||
export LIBRARY_PATH=$(qp_prepend_export "LIBRARY_PATH" "${QP_ROOT}"/lib:"${QP_ROOT}"/lib64)
|
||||
|
||||
|
23
man/cis.1
23
man/cis.1
@ -1,6 +1,6 @@
|
||||
.\" Man page generated from reStructuredText.
|
||||
.
|
||||
.TH "CIS" "1" "Jan 25, 2019" "2.0" "Quantum Package"
|
||||
.TH "CIS" "1" "Jan 29, 2019" "2.0" "Quantum Package"
|
||||
.SH NAME
|
||||
cis \- | Quantum Package >
|
||||
.
|
||||
@ -40,19 +40,24 @@ Disregarding spatial symmetry, it computes the \fIn_states\fP lowest
|
||||
eigenstates of that CI matrix. (see \fBdeterminants n_states\fP)
|
||||
.sp
|
||||
This program can be useful in many cases:
|
||||
.INDENT 0.0
|
||||
.IP 1. 3
|
||||
Ground state calculation
|
||||
.sp
|
||||
To be sure to have the lowest SCF solution, perform an scf
|
||||
(see the hartree_fock module), then a \fI\%cis\fP, save
|
||||
the natural orbitals (see save_natorb) and re\-run an
|
||||
scf optimization from this MO guess.
|
||||
(see the module_hartree_fock module), then a \fI\%cis\fP, save the
|
||||
natural orbitals (see save_natorb) and re\-run an scf
|
||||
optimization from this MO guess.
|
||||
.IP 2. 3
|
||||
Excited states calculations
|
||||
.sp
|
||||
The lowest excited states are much likely to be dominated by
|
||||
single\-excitations. Therefore, running a \fI\%cis\fP will save
|
||||
the \fIn_states\fP lowest states within the CIS space in the \fI\%EZFIO\fP
|
||||
single\-excitations. Therefore, running a \fI\%cis\fP will save the
|
||||
\fIn_states\fP lowest states within the CIS space in the \fI\%EZFIO\fP
|
||||
directory, which can afterwards be used as guess wave functions for
|
||||
a further multi\-state FCI calculation if \fBdeterminants read_wf\fP
|
||||
is set to \fBtrue\fP before running the fci
|
||||
executable.
|
||||
a further multi\-state FCI calculation if \fBdeterminants
|
||||
read_wf\fP is set to \fBtrue\fP before running the fci executable.
|
||||
.UNINDENT
|
||||
.sp
|
||||
If \fBdeterminants s2_eig\fP is set to \fBtrue\fP, the CIS
|
||||
will only retain states having the expected \ewidehat{S^2} value (see
|
||||
|
@ -1,6 +1,6 @@
|
||||
.\" Man page generated from reStructuredText.
|
||||
.
|
||||
.TH "CISD" "1" "Jan 25, 2019" "2.0" "Quantum Package"
|
||||
.TH "CISD" "1" "Jan 29, 2019" "2.0" "Quantum Package"
|
||||
.SH NAME
|
||||
cisd \- | Quantum Package >
|
||||
.
|
||||
@ -43,17 +43,17 @@ matrix (see \fBdeterminants n_states\fP).
|
||||
This program can be useful in many cases:
|
||||
.INDENT 0.0
|
||||
.IP \(bu 2
|
||||
GROUND STATE CALCULATION: if even after a \fBcis()\fP calculation, natural
|
||||
\fBGround state calculation\fP: if even after a \fBcis()\fP calculation, natural
|
||||
orbitals (see \fBsave_natorb()\fP) and then \fBscf()\fP optimization, you are not sure to have the lowest scf
|
||||
solution,
|
||||
do the same strategy with the \fBcisd()\fP executable instead of the \fBcis()\fP\ exectuable to generate the natural
|
||||
orbitals as a guess for the \fBscf()\fP\&.
|
||||
.IP \(bu 2
|
||||
EXCITED STATES CALCULATIONS: the lowest excited states are much likely to
|
||||
\fBExcited states calculations\fP: the lowest excited states are much likely to
|
||||
be dominanted by single\- or double\-excitations.
|
||||
Therefore, running a \fBcisd()\fP will save the “n_states” lowest states within
|
||||
the CISD space
|
||||
in the EZFIO folder, which can afterward be used as guess wave functions
|
||||
in the \fI\%EZFIO\fP directory, which can afterward be used as guess wave functions
|
||||
for a further multi\-state fci calculation if you specify “read_wf” = True
|
||||
before running the fci executable (see \fBdeterminants read_wf\fP).
|
||||
Also, if you specify “s2_eig” = True, the cisd will only retain states
|
||||
|
@ -1,6 +1,6 @@
|
||||
.\" Man page generated from reStructuredText.
|
||||
.
|
||||
.TH "CONFIGURE" "1" "Jan 25, 2019" "2.0" "Quantum Package"
|
||||
.TH "CONFIGURE" "1" "Jan 29, 2019" "2.0" "Quantum Package"
|
||||
.SH NAME
|
||||
configure \- | Quantum Package >
|
||||
.
|
||||
|
@ -1,6 +1,6 @@
|
||||
.\" Man page generated from reStructuredText.
|
||||
.
|
||||
.TH "DIAGONALIZE_H" "1" "Jan 25, 2019" "2.0" "Quantum Package"
|
||||
.TH "DIAGONALIZE_H" "1" "Jan 29, 2019" "2.0" "Quantum Package"
|
||||
.SH NAME
|
||||
diagonalize_h \- | Quantum Package >
|
||||
.
|
||||
@ -32,11 +32,13 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
||||
..
|
||||
.INDENT 0.0
|
||||
.INDENT 3.5
|
||||
Program that extracts the \fBdeterminants n_states\fP lowest states of the Hamiltonian within the set of Slater determinants stored in the EZFIO folder.
|
||||
Program that extracts the \fBdeterminants n_states\fP lowest
|
||||
states of the Hamiltonian within the set of Slater determinants stored
|
||||
in the \fI\%EZFIO\fP directory.
|
||||
.sp
|
||||
If \fBdeterminants s2_eig\fP = True, it will retain only states
|
||||
.sp
|
||||
which corresponds to the desired value of \fBdeterminants expected_s2\fP\&.
|
||||
If \fBdeterminants s2_eig\fP = \fBtrue\fP, it will retain only states
|
||||
which correspond to the desired value of
|
||||
\fBdeterminants expected_s2\fP\&.
|
||||
.sp
|
||||
Needs:
|
||||
.INDENT 0.0
|
||||
|
@ -1,6 +1,6 @@
|
||||
.\" Man page generated from reStructuredText.
|
||||
.
|
||||
.TH "EXCITED_STATES" "1" "Jan 25, 2019" "2.0" "Quantum Package"
|
||||
.TH "EXCITED_STATES" "1" "Jan 29, 2019" "2.0" "Quantum Package"
|
||||
.SH NAME
|
||||
excited_states \- | Quantum Package >
|
||||
.
|
||||
|
@ -1,6 +1,6 @@
|
||||
.\" Man page generated from reStructuredText.
|
||||
.
|
||||
.TH "FCI" "1" "Jan 25, 2019" "2.0" "Quantum Package"
|
||||
.TH "FCI" "1" "Jan 29, 2019" "2.0" "Quantum Package"
|
||||
.SH NAME
|
||||
fci \- | Quantum Package >
|
||||
.
|
||||
@ -46,7 +46,7 @@ conditions:
|
||||
.IP \(bu 2
|
||||
number of Slater determinants > \fBdeterminants n_det_max\fP
|
||||
.IP \(bu 2
|
||||
PT2 < \fBperturbation pt2_max\fP
|
||||
abs(PT2) less than \fBperturbation pt2_max\fP
|
||||
.UNINDENT
|
||||
.sp
|
||||
The following other options can be of interest:
|
||||
@ -66,7 +66,7 @@ function with an \ewidehat{S^2} value corresponding to
|
||||
.UNINDENT
|
||||
.sp
|
||||
For excited states calculations, it is recommended to start with
|
||||
\&.cis. or \&.cisd. guess wave functions, eventually in
|
||||
cis or cisd guess wave functions, eventually in
|
||||
a restricted set of MOs, and to set \fBdeterminants s2_eig\fP
|
||||
to \fBtrue\fP\&.
|
||||
.sp
|
||||
|
@ -1,6 +1,6 @@
|
||||
.\" Man page generated from reStructuredText.
|
||||
.
|
||||
.TH "FCIDUMP" "1" "Jan 25, 2019" "2.0" "Quantum Package"
|
||||
.TH "FCIDUMP" "1" "Jan 29, 2019" "2.0" "Quantum Package"
|
||||
.SH NAME
|
||||
fcidump \- | Quantum Package >
|
||||
.
|
||||
@ -32,18 +32,22 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
||||
..
|
||||
.INDENT 0.0
|
||||
.INDENT 3.5
|
||||
Produce a regular FCIDUMP file from the MOs stored in the \fI\%EZFIO\fP folder.
|
||||
Produce a regular \fIFCIDUMP\fP file from the MOs stored in the \fI\%EZFIO\fP
|
||||
directory.
|
||||
.sp
|
||||
To specify an active space, the class of the mos have to set in the \fI\%EZFIO\fP folder (see qp_set_mo_class).
|
||||
To specify an active space, the class of the MOs have to set in the
|
||||
\fI\%EZFIO\fP directory (see qp_set_mo_class).
|
||||
.sp
|
||||
The fcidump program supports 3 types of MO_class :
|
||||
The \fI\%fcidump\fP program supports 3 types of MO classes :
|
||||
.INDENT 0.0
|
||||
.IP \(bu 2
|
||||
the “core” orbitals which are always doubly occupied in the calculation
|
||||
the \fIcore\fP orbitals which are always doubly occupied in the
|
||||
calculation
|
||||
.IP \(bu 2
|
||||
the “del” orbitals that are never occupied in the calculation
|
||||
the \fIdeleted\fP orbitals that are never occupied in the calculation
|
||||
.IP \(bu 2
|
||||
the “act” orbitals that will be occupied by a varying number of electrons
|
||||
the \fIactive\fP orbitals that are occupied with a varying number of
|
||||
electrons
|
||||
.UNINDENT
|
||||
.sp
|
||||
Needs:
|
||||
|
@ -1,6 +1,6 @@
|
||||
.\" Man page generated from reStructuredText.
|
||||
.
|
||||
.TH "FOUR_IDX_TRANSFORM" "1" "Jan 25, 2019" "2.0" "Quantum Package"
|
||||
.TH "FOUR_IDX_TRANSFORM" "1" "Jan 29, 2019" "2.0" "Quantum Package"
|
||||
.SH NAME
|
||||
four_idx_transform \- | Quantum Package >
|
||||
.
|
||||
@ -32,11 +32,14 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
||||
..
|
||||
.INDENT 0.0
|
||||
.INDENT 3.5
|
||||
4\-index transformation of two\-electron integrals from AO to MO integrals.
|
||||
4\-index transformation of two\-electron integrals from AO to MO
|
||||
integrals.
|
||||
.sp
|
||||
This program will compute the two\-electron integrals on the MO basis and store it into the \fI\%EZFIO\fP folder.
|
||||
This program will compute the two\-electron integrals on the MO basis
|
||||
and store it into the \fI\%EZFIO\fP directory.
|
||||
.sp
|
||||
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.
|
||||
.sp
|
||||
Needs:
|
||||
.INDENT 0.0
|
||||
|
@ -1,6 +1,6 @@
|
||||
.\" Man page generated from reStructuredText.
|
||||
.
|
||||
.TH "INTERFACES" "1" "Jan 25, 2019" "2.0" "Quantum Package"
|
||||
.TH "INTERFACES" "1" "Jan 29, 2019" "2.0" "Quantum Package"
|
||||
.SH NAME
|
||||
interfaces \- | Quantum Package >
|
||||
.
|
||||
|
@ -1,6 +1,6 @@
|
||||
.\" Man page generated from reStructuredText.
|
||||
.
|
||||
.TH "KS_SCF" "1" "Jan 25, 2019" "2.0" "Quantum Package"
|
||||
.TH "KS_SCF" "1" "Jan 29, 2019" "2.0" "Quantum Package"
|
||||
.SH NAME
|
||||
ks_scf \- | Quantum Package >
|
||||
.
|
||||
|
@ -1,6 +1,6 @@
|
||||
.\" Man page generated from reStructuredText.
|
||||
.
|
||||
.TH "MOLDEN" "1" "Jan 25, 2019" "2.0" "Quantum Package"
|
||||
.TH "MOLDEN" "1" "Jan 29, 2019" "2.0" "Quantum Package"
|
||||
.SH NAME
|
||||
molden \- | Quantum Package >
|
||||
.
|
||||
@ -32,7 +32,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
||||
..
|
||||
.INDENT 0.0
|
||||
.INDENT 3.5
|
||||
Produce a Molden file
|
||||
Produces a Molden file
|
||||
.sp
|
||||
Needs:
|
||||
.INDENT 0.0
|
||||
|
@ -1,6 +1,6 @@
|
||||
.\" Man page generated from reStructuredText.
|
||||
.
|
||||
.TH "NATURAL_ORBITALS" "1" "Jan 25, 2019" "2.0" "Quantum Package"
|
||||
.TH "NATURAL_ORBITALS" "1" "Jan 29, 2019" "2.0" "Quantum Package"
|
||||
.SH NAME
|
||||
natural_orbitals \- | Quantum Package >
|
||||
.
|
||||
|
@ -1,6 +1,6 @@
|
||||
.\" Man page generated from reStructuredText.
|
||||
.
|
||||
.TH "PLUGINS" "1" "Jan 25, 2019" "2.0" "Quantum Package"
|
||||
.TH "PLUGINS" "1" "Jan 29, 2019" "2.0" "Quantum Package"
|
||||
.SH NAME
|
||||
plugins \- | Quantum Package >
|
||||
.
|
||||
|
@ -1,6 +1,6 @@
|
||||
.\" Man page generated from reStructuredText.
|
||||
.
|
||||
.TH "PRINT_E_CONV" "1" "Jan 25, 2019" "2.0" "Quantum Package"
|
||||
.TH "PRINT_E_CONV" "1" "Jan 29, 2019" "2.0" "Quantum Package"
|
||||
.SH NAME
|
||||
print_e_conv \- | Quantum Package >
|
||||
.
|
||||
|
@ -1,6 +1,6 @@
|
||||
.\" Man page generated from reStructuredText.
|
||||
.
|
||||
.TH "PRINT_WF" "1" "Jan 25, 2019" "2.0" "Quantum Package"
|
||||
.TH "PRINT_WF" "1" "Jan 29, 2019" "2.0" "Quantum Package"
|
||||
.SH NAME
|
||||
print_wf \- | Quantum Package >
|
||||
.
|
||||
@ -32,13 +32,15 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
||||
..
|
||||
.INDENT 0.0
|
||||
.INDENT 3.5
|
||||
Print the ground state wave function stored in the \fI\%EZFIO\fP folder in the intermediate normalization.
|
||||
Print the ground state wave function stored in the \fI\%EZFIO\fP directory
|
||||
in the intermediate normalization.
|
||||
.sp
|
||||
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.
|
||||
.sp
|
||||
and a first\-order perturbative analysis of the wave function.
|
||||
.sp
|
||||
If the wave function strongly deviates from the first\-order analysis, something funny is going on :)
|
||||
If the wave function strongly deviates from the first\-order analysis,
|
||||
something funny is going on :)
|
||||
.sp
|
||||
Needs:
|
||||
.INDENT 0.0
|
||||
|
@ -1,6 +1,6 @@
|
||||
.\" Man page generated from reStructuredText.
|
||||
.
|
||||
.TH "PRINTING" "1" "Jan 25, 2019" "2.0" "Quantum Package"
|
||||
.TH "PRINTING" "1" "Jan 29, 2019" "2.0" "Quantum Package"
|
||||
.SH NAME
|
||||
printing \- | Quantum Package >
|
||||
.
|
||||
@ -74,7 +74,7 @@ qp_run print_wf file.ezfio | tee file.ezfio.fci_natorb.wf
|
||||
.sp
|
||||
This program will, by default, print out the first 10^4
|
||||
determinants whatever the size of the wave function stored in the
|
||||
\fI\%EZFIO\fP folder. If you want to change the number of printed Slater
|
||||
\fI\%EZFIO\fP directory. If you want to change the number of printed Slater
|
||||
determinants, just change the \fBdeterminants n_det_print_wf\fP
|
||||
keyword using the qp_edit tool.
|
||||
.sp
|
||||
|
16
man/pt2.1
16
man/pt2.1
@ -1,6 +1,6 @@
|
||||
.\" Man page generated from reStructuredText.
|
||||
.
|
||||
.TH "PT2" "1" "Jan 25, 2019" "2.0" "Quantum Package"
|
||||
.TH "PT2" "1" "Jan 29, 2019" "2.0" "Quantum Package"
|
||||
.SH NAME
|
||||
pt2 \- | Quantum Package >
|
||||
.
|
||||
@ -32,13 +32,17 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
||||
..
|
||||
.INDENT 0.0
|
||||
.INDENT 3.5
|
||||
Second order perturbative correction to the wave function contained in the EZFIO directory.
|
||||
Second order perturbative correction to the wave function contained
|
||||
in the \fI\%EZFIO\fP directory.
|
||||
.sp
|
||||
This programs runs the stochastic PT2 correction on all “n_states” wave function stored in the EZFIO folder (see \fBdeterminant n_states\fP).
|
||||
This programs runs the stochastic PT2 correction on all
|
||||
\fBdeterminants n_states\fP wave functions stored in the \fI\%EZFIO\fP
|
||||
directory.
|
||||
.sp
|
||||
The option for the PT2 correction are the “pt2_relative_error” which is the relative stochastic
|
||||
.sp
|
||||
error on the PT2 to reach before stopping the stochastic sampling. (see \fBperturbation pt2_relative_error\fP)
|
||||
The main option for the PT2 correction is the
|
||||
\fBperturbation pt2_relative_error\fP which is the relative
|
||||
stochastic error on the PT2 to reach before stopping the
|
||||
sampling.
|
||||
.sp
|
||||
Needs:
|
||||
.INDENT 0.0
|
||||
|
@ -1,6 +1,6 @@
|
||||
.\" Man page generated from reStructuredText.
|
||||
.
|
||||
.TH "QP_CONVERT_OUTPUT_TO_EZFIO" "1" "Jan 25, 2019" "2.0" "Quantum Package"
|
||||
.TH "QP_CONVERT_OUTPUT_TO_EZFIO" "1" "Jan 29, 2019" "2.0" "Quantum Package"
|
||||
.SH NAME
|
||||
qp_convert_output_to_ezfio \- | Quantum Package >
|
||||
.
|
||||
|
@ -1,6 +1,6 @@
|
||||
.\" Man page generated from reStructuredText.
|
||||
.
|
||||
.TH "QP_CREATE_EZFIO_FROM_XYZ" "1" "Jan 25, 2019" "2.0" "Quantum Package"
|
||||
.TH "QP_CREATE_EZFIO_FROM_XYZ" "1" "Jan 29, 2019" "2.0" "Quantum Package"
|
||||
.SH NAME
|
||||
qp_create_ezfio_from_xyz \- | Quantum Package >
|
||||
.
|
||||
|
@ -1,6 +1,6 @@
|
||||
.\" Man page generated from reStructuredText.
|
||||
.
|
||||
.TH "QP_EDIT" "1" "Jan 25, 2019" "2.0" "Quantum Package"
|
||||
.TH "QP_EDIT" "1" "Jan 29, 2019" "2.0" "Quantum Package"
|
||||
.SH NAME
|
||||
qp_edit \- | Quantum Package >
|
||||
.
|
||||
|
@ -1,6 +1,6 @@
|
||||
.\" Man page generated from reStructuredText.
|
||||
.
|
||||
.TH "QP_EXPORT_AS_TGZ" "1" "Jan 25, 2019" "2.0" "Quantum Package"
|
||||
.TH "QP_EXPORT_AS_TGZ" "1" "Jan 29, 2019" "2.0" "Quantum Package"
|
||||
.SH NAME
|
||||
qp_export_as_tgz \- | Quantum Package >
|
||||
.
|
||||
|
@ -1,6 +1,6 @@
|
||||
.\" Man page generated from reStructuredText.
|
||||
.
|
||||
.TH "QP_PLUGINS" "1" "Jan 25, 2019" "2.0" "Quantum Package"
|
||||
.TH "QP_PLUGINS" "1" "Jan 29, 2019" "2.0" "Quantum Package"
|
||||
.SH NAME
|
||||
qp_plugins \- | Quantum Package >
|
||||
.
|
||||
|
66
man/qp_reset.1
Normal file
66
man/qp_reset.1
Normal file
@ -0,0 +1,66 @@
|
||||
.\" Man page generated from reStructuredText.
|
||||
.
|
||||
.TH "QP_RESET" "1" "Jan 29, 2019" "2.0" "Quantum Package"
|
||||
.SH NAME
|
||||
qp_reset \- | Quantum Package >
|
||||
.
|
||||
.nr rst2man-indent-level 0
|
||||
.
|
||||
.de1 rstReportMargin
|
||||
\\$1 \\n[an-margin]
|
||||
level \\n[rst2man-indent-level]
|
||||
level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
||||
-
|
||||
\\n[rst2man-indent0]
|
||||
\\n[rst2man-indent1]
|
||||
\\n[rst2man-indent2]
|
||||
..
|
||||
.de1 INDENT
|
||||
.\" .rstReportMargin pre:
|
||||
. RS \\$1
|
||||
. nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin]
|
||||
. nr rst2man-indent-level +1
|
||||
.\" .rstReportMargin post:
|
||||
..
|
||||
.de UNINDENT
|
||||
. RE
|
||||
.\" indent \\n[an-margin]
|
||||
.\" old: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
||||
.nr rst2man-indent-level -1
|
||||
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
||||
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
|
||||
..
|
||||
.sp
|
||||
This command resets parts of the \fI\%EZFIO\fP directory.
|
||||
.SH USAGE
|
||||
.INDENT 0.0
|
||||
.INDENT 3.5
|
||||
.sp
|
||||
.nf
|
||||
.ft C
|
||||
qp_reset [\-adhm] EZFIO_DIR
|
||||
.ft P
|
||||
.fi
|
||||
.UNINDENT
|
||||
.UNINDENT
|
||||
.INDENT 0.0
|
||||
.TP
|
||||
.B \-a, \-\-all
|
||||
Reset to the state in which the directory is after after running qp_create_ezfio\&.
|
||||
.UNINDENT
|
||||
.INDENT 0.0
|
||||
.TP
|
||||
.B \-d, \-\-dets
|
||||
Deletes the determinants and CI coefficients.
|
||||
.UNINDENT
|
||||
.INDENT 0.0
|
||||
.TP
|
||||
.B \-m, \-\-mos
|
||||
Deletes the MOs, and consequently the determinants and CI coefficients.
|
||||
.UNINDENT
|
||||
.SH AUTHOR
|
||||
A. Scemama, E. Giner
|
||||
.SH COPYRIGHT
|
||||
2019, A. Scemama, E. Giner
|
||||
.\" Generated by docutils manpage writer.
|
||||
.
|
@ -1,6 +1,6 @@
|
||||
.\" Man page generated from reStructuredText.
|
||||
.
|
||||
.TH "QP_RUN" "1" "Jan 25, 2019" "2.0" "Quantum Package"
|
||||
.TH "QP_RUN" "1" "Jan 29, 2019" "2.0" "Quantum Package"
|
||||
.SH NAME
|
||||
qp_run \- | Quantum Package >
|
||||
.
|
||||
|
@ -1,6 +1,6 @@
|
||||
.\" Man page generated from reStructuredText.
|
||||
.
|
||||
.TH "QP_SET_FROZEN_CORE" "1" "Jan 25, 2019" "2.0" "Quantum Package"
|
||||
.TH "QP_SET_FROZEN_CORE" "1" "Jan 29, 2019" "2.0" "Quantum Package"
|
||||
.SH NAME
|
||||
qp_set_frozen_core \- | Quantum Package >
|
||||
.
|
||||
|
@ -1,6 +1,6 @@
|
||||
.\" Man page generated from reStructuredText.
|
||||
.
|
||||
.TH "QP_SET_MO_CLASS" "1" "Jan 25, 2019" "2.0" "Quantum Package"
|
||||
.TH "QP_SET_MO_CLASS" "1" "Jan 29, 2019" "2.0" "Quantum Package"
|
||||
.SH NAME
|
||||
qp_set_mo_class \- | Quantum Package >
|
||||
.
|
||||
|
@ -1,6 +1,6 @@
|
||||
.\" Man page generated from reStructuredText.
|
||||
.
|
||||
.TH "QP_STOP" "1" "Jan 25, 2019" "2.0" "Quantum Package"
|
||||
.TH "QP_STOP" "1" "Jan 29, 2019" "2.0" "Quantum Package"
|
||||
.SH NAME
|
||||
qp_stop \- | Quantum Package >
|
||||
.
|
||||
|
@ -1,6 +1,6 @@
|
||||
.\" Man page generated from reStructuredText.
|
||||
.
|
||||
.TH "QP_UPDATE" "1" "Jan 25, 2019" "2.0" "Quantum Package"
|
||||
.TH "QP_UPDATE" "1" "Jan 29, 2019" "2.0" "Quantum Package"
|
||||
.SH NAME
|
||||
qp_update \- | Quantum Package >
|
||||
.
|
||||
|
@ -1,6 +1,6 @@
|
||||
.\" Man page generated from reStructuredText.
|
||||
.
|
||||
.TH "QPSH" "1" "Jan 25, 2019" "2.0" "Quantum Package"
|
||||
.TH "QPSH" "1" "Jan 29, 2019" "2.0" "Quantum Package"
|
||||
.SH NAME
|
||||
qpsh \- | Quantum Package >
|
||||
.
|
||||
@ -153,7 +153,7 @@ qp (run|srun|mpirun) [options] <program>
|
||||
.UNINDENT
|
||||
.UNINDENT
|
||||
.sp
|
||||
Runs qp_run, qp_srun, or qp_mpirun using the current
|
||||
Runs qp_run, \fBqp_srun\fP, or \fBqp_mpirun\fP using the current
|
||||
\fI\%EZFIO\fP directory.
|
||||
.UNINDENT
|
||||
.INDENT 0.0
|
||||
|
@ -1,6 +1,6 @@
|
||||
.\" Man page generated from reStructuredText.
|
||||
.
|
||||
.TH "RS_KS_SCF" "1" "Jan 25, 2019" "2.0" "Quantum Package"
|
||||
.TH "RS_KS_SCF" "1" "Jan 29, 2019" "2.0" "Quantum Package"
|
||||
.SH NAME
|
||||
rs_ks_scf \- | Quantum Package >
|
||||
.
|
||||
|
@ -1,6 +1,6 @@
|
||||
.\" Man page generated from reStructuredText.
|
||||
.
|
||||
.TH "SAVE_NATORB" "1" "Jan 25, 2019" "2.0" "Quantum Package"
|
||||
.TH "SAVE_NATORB" "1" "Jan 29, 2019" "2.0" "Quantum Package"
|
||||
.SH NAME
|
||||
save_natorb \- | Quantum Package >
|
||||
.
|
||||
@ -32,15 +32,16 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
||||
..
|
||||
.INDENT 0.0
|
||||
.INDENT 3.5
|
||||
Save natural MOs into the EZFIO
|
||||
Save natural MOs into the \fI\%EZFIO\fP\&.
|
||||
.sp
|
||||
This program reads the wave function stored in the EZFIO folder,
|
||||
This program reads the wave function stored in the \fI\%EZFIO\fP directory,
|
||||
extracts the corresponding natural orbitals and setd them as the new
|
||||
MOs\&.
|
||||
.sp
|
||||
extracts the corresponding natural orbitals and set them as the new MOs
|
||||
.sp
|
||||
If this is a multi\-state calculation, the density matrix that produces the natural orbitals
|
||||
.sp
|
||||
is obtained from a state\-averaged of the density matrices of each state with the corresponding state_average_weight (see the doc of state_average_weight).
|
||||
If this is a multi\-state calculation, the density matrix that produces
|
||||
the natural orbitals is obtained from an average of the density
|
||||
matrices of each state with the corresponding
|
||||
\fBdeterminants state_average_weight\fP
|
||||
.sp
|
||||
Needs:
|
||||
.INDENT 0.0
|
||||
|
@ -1,6 +1,6 @@
|
||||
.\" Man page generated from reStructuredText.
|
||||
.
|
||||
.TH "SAVE_ONE_E_DM" "1" "Jan 25, 2019" "2.0" "Quantum Package"
|
||||
.TH "SAVE_ONE_E_DM" "1" "Jan 29, 2019" "2.0" "Quantum Package"
|
||||
.SH NAME
|
||||
save_one_e_dm \- | Quantum Package >
|
||||
.
|
||||
@ -32,12 +32,16 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
||||
..
|
||||
.INDENT 0.0
|
||||
.INDENT 3.5
|
||||
programs that computes the one body density on the mo basis for alpha and beta electrons
|
||||
from the wave function stored in the EZFIO folder, and then save it into the EZFIO folder aux_quantities.
|
||||
Program that computes the one body density on the MO basis
|
||||
for $alpha$ and $beta$ electrons from the wave function
|
||||
stored in the \fI\%EZFIO\fP directory, and then saves it into the
|
||||
module_aux_quantities\&.
|
||||
.sp
|
||||
Then, the global variable data_one_e_dm_alpha_mo and data_one_e_dm_beta_mo will automatically read this density in a further calculation.
|
||||
.sp
|
||||
This can be used to perform damping on the density in RS\-DFT calculation (see the density_for_dft module).
|
||||
Then, the global variable \fBaux_quantities data_one_e_dm_alpha_mo\fP
|
||||
and \fBaux_quantities data_one_e_dm_beta_mo\fP will automatically
|
||||
read this density in the next calculation. This can be used to perform
|
||||
damping on the density in RSDFT calculations (see
|
||||
module_density_for_dft).
|
||||
.sp
|
||||
Needs:
|
||||
.INDENT 0.0
|
||||
|
@ -1,6 +1,6 @@
|
||||
.\" Man page generated from reStructuredText.
|
||||
.
|
||||
.TH "SAVE_ORTHO_MOS" "1" "Jan 25, 2019" "2.0" "Quantum Package"
|
||||
.TH "SAVE_ORTHO_MOS" "1" "Jan 29, 2019" "2.0" "Quantum Package"
|
||||
.SH NAME
|
||||
save_ortho_mos \- | Quantum Package >
|
||||
.
|
||||
|
@ -1,6 +1,6 @@
|
||||
.\" Man page generated from reStructuredText.
|
||||
.
|
||||
.TH "SCF" "1" "Jan 25, 2019" "2.0" "Quantum Package"
|
||||
.TH "SCF" "1" "Jan 29, 2019" "2.0" "Quantum Package"
|
||||
.SH NAME
|
||||
scf \- | Quantum Package >
|
||||
.
|
||||
|
@ -1,6 +1,6 @@
|
||||
.\" Man page generated from reStructuredText.
|
||||
.
|
||||
.TH "WRITE_INTEGRALS_ERF" "1" "Jan 25, 2019" "2.0" "Quantum Package"
|
||||
.TH "WRITE_INTEGRALS_ERF" "1" "Jan 29, 2019" "2.0" "Quantum Package"
|
||||
.SH NAME
|
||||
write_integrals_erf \- | Quantum Package >
|
||||
.
|
||||
@ -32,7 +32,8 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
||||
..
|
||||
.INDENT 0.0
|
||||
.INDENT 3.5
|
||||
Saves the two\-electron integrals with the erf(\emu r_{12})/r_{12} oprerator into the EZFIO folder
|
||||
Saves the two\-electron integrals with the $erf(mu r_{12})/r_{12}$
|
||||
oprerator into the EZFIO directory.
|
||||
.sp
|
||||
Needs:
|
||||
.INDENT 0.0
|
||||
|
@ -50,7 +50,7 @@ let zmq_context =
|
||||
Zmq.Context.create ()
|
||||
|
||||
let () =
|
||||
Zmq.Context.set_io_threads zmq_context 8
|
||||
Zmq.Context.set_io_threads zmq_context 16
|
||||
|
||||
|
||||
let bind_socket ~socket_type ~socket ~port =
|
||||
|
@ -17,9 +17,13 @@ The |AO| coefficients are normalized as:
|
||||
|
||||
{\tilde c}_{ki} = \frac{c_{ki}}{ \int \left( (x-X_A)^a (y-Y_A)^b (z-Z_A)^c e^{-\gamma_{ki} |{\bf r} - {\bf R}_A|^2} \right)^2 dr}
|
||||
|
||||
Warning: `ao_coef` contains the |AO| coefficients given in input. These do not
|
||||
include the normalization constant of the |AO|. The `ao_coef_normalized` provider includes
|
||||
this normalization factor.
|
||||
|
||||
.. warning::
|
||||
|
||||
`ao_coef` contains the |AO| coefficients given in input. These do not
|
||||
include the normalization constant of the |AO|. The `ao_coef_normalized`
|
||||
provider includes this normalization factor.
|
||||
|
||||
|
||||
The |AOs| are also sorted by increasing exponent to accelerate the calculation of
|
||||
the two electron integrals.
|
||||
|
@ -1,7 +1,7 @@
|
||||
double precision function ao_value(i,r)
|
||||
implicit none
|
||||
BEGIN_DOC
|
||||
! return the value of the ith ao at point r
|
||||
! Returns the value of the i-th ao at point $\textbf{r}$
|
||||
END_DOC
|
||||
double precision, intent(in) :: r(3)
|
||||
integer, intent(in) :: i
|
||||
@ -35,7 +35,8 @@ end
|
||||
double precision function primitive_value(i,j,r)
|
||||
implicit none
|
||||
BEGIN_DOC
|
||||
! return the value of the jth primitive of ith ao at point r WITHOUT THE COEF
|
||||
! Returns the value of the j-th primitive of the i-th |AO| at point $\textbf{r}
|
||||
! **without the coefficient**
|
||||
END_DOC
|
||||
double precision, intent(in) :: r(3)
|
||||
integer, intent(in) :: i,j
|
||||
@ -69,7 +70,8 @@ subroutine give_all_aos_at_r(r,aos_array)
|
||||
implicit none
|
||||
BEGIN_dOC
|
||||
! input : r == r(1) = x and so on
|
||||
! aos_array(i) = aos(i) evaluated in r
|
||||
!
|
||||
! output : aos_array(i) = aos(i) evaluated in $\textbf{r}$
|
||||
END_DOC
|
||||
double precision, intent(in) :: r(3)
|
||||
double precision, intent(out):: aos_array(ao_num)
|
||||
@ -107,8 +109,12 @@ subroutine give_all_aos_and_grad_at_r(r,aos_array,aos_grad_array)
|
||||
implicit none
|
||||
BEGIN_DOC
|
||||
! input : r(1) ==> r(1) = x, r(2) = y, r(3) = z
|
||||
! output : aos_array(i) = ao(i) evaluated at r
|
||||
! : aos_grad_array(1,i) = gradient X of the ao(i) evaluated at r
|
||||
!
|
||||
! output :
|
||||
!
|
||||
! * aos_array(i) = ao(i) evaluated at ro
|
||||
! * aos_grad_array(1,i) = gradient X of the ao(i) evaluated at $\textbf{r}$
|
||||
!
|
||||
END_DOC
|
||||
double precision, intent(in) :: r(3)
|
||||
double precision, intent(out) :: aos_array(ao_num)
|
||||
@ -173,8 +179,11 @@ subroutine give_all_aos_and_grad_and_lapl_at_r(r,aos_array,aos_grad_array,aos_la
|
||||
implicit none
|
||||
BEGIN_DOC
|
||||
! input : r(1) ==> r(1) = x, r(2) = y, r(3) = z
|
||||
! output : aos_array(i) = ao(i) evaluated at r
|
||||
! : aos_grad_array(1,i) = gradient X of the ao(i) evaluated at r
|
||||
!
|
||||
! output :
|
||||
!
|
||||
! * aos_array(i) = ao(i) evaluated at $\textbf{r}$
|
||||
! * aos_grad_array(1,i) = $\nabla_x$ of the ao(i) evaluated at $\textbf{r}$
|
||||
END_DOC
|
||||
double precision, intent(in) :: r(3)
|
||||
double precision, intent(out) :: aos_array(ao_num)
|
||||
|
@ -5,8 +5,10 @@
|
||||
BEGIN_DOC
|
||||
! Second derivative matrix elements in the |AO| basis.
|
||||
!
|
||||
! :math:`{\tt ao\_deriv2\_x} =
|
||||
! \langle \chi_i(x,y,z) | \frac{\partial^2}{\partial x^2} |\chi_j (x,y,z) \rangle`
|
||||
! .. math::
|
||||
!
|
||||
! {\tt ao\_deriv2\_x} =
|
||||
! \langle \chi_i(x,y,z) | \frac{\partial^2}{\partial x^2} |\chi_j (x,y,z) \rangle
|
||||
!
|
||||
END_DOC
|
||||
integer :: i,j,n,l
|
||||
@ -122,7 +124,8 @@ BEGIN_PROVIDER [double precision, ao_kinetic_integrals, (ao_num,ao_num)]
|
||||
BEGIN_DOC
|
||||
! Kinetic energy integrals in the |AO| basis.
|
||||
!
|
||||
! :math:`\langle \chi_i |\hat{T}| \chi_j \rangle`
|
||||
! $\langle \chi_i |\hat{T}| \chi_j \rangle$
|
||||
!
|
||||
END_DOC
|
||||
integer :: i,j,k,l
|
||||
|
||||
|
@ -51,8 +51,12 @@ end
|
||||
double precision function NAI_pol_mult_erf(A_center,B_center,power_A,power_B,alpha,beta,C_center,n_pt_in,mu_in)
|
||||
BEGIN_DOC
|
||||
! Computes the following integral :
|
||||
! $\int dr (x-A_x)^a (x-B_x)^b \exp(-\alpha (x-A_x)^2 - \beta (x-B_x)^2 )
|
||||
! \frac{\erf(\mu |r-R_C|)}{|r-R_c|}$.
|
||||
!
|
||||
! .. math::
|
||||
!
|
||||
! \int dr (x-A_x)^a (x-B_x)^b \exp(-\alpha (x-A_x)^2 - \beta (x-B_x)^2 )
|
||||
! \frac{\erf(\mu | r - R_C | )}{ | r - R_C | }$.
|
||||
!
|
||||
END_DOC
|
||||
|
||||
implicit none
|
||||
@ -126,7 +130,8 @@ end
|
||||
subroutine give_polynomial_mult_center_one_e_erf_opt(A_center,B_center,alpha,beta,&
|
||||
power_A,power_B,C_center,n_pt_in,d,n_pt_out,mu_in,p,p_inv,p_inv_2,p_new,P_center)
|
||||
BEGIN_DOC
|
||||
! Returns the explicit polynomial in terms of the $t$ variable of the following polynomial:
|
||||
! Returns the explicit polynomial in terms of the $t$ variable of the
|
||||
! following polynomial:
|
||||
!
|
||||
! $I_{x1}(a_x, d_x,p,q) \times I_{x1}(a_y, d_y,p,q) \times I_{x1}(a_z, d_z,p,q)$.
|
||||
END_DOC
|
||||
@ -244,7 +249,8 @@ end
|
||||
subroutine give_polynomial_mult_center_one_e_erf(A_center,B_center,alpha,beta,&
|
||||
power_A,power_B,C_center,n_pt_in,d,n_pt_out,mu_in)
|
||||
BEGIN_DOC
|
||||
! Returns the explicit polynomial in terms of the $t$ variable of the following polynomial:
|
||||
! Returns the explicit polynomial in terms of the $t$ variable of the
|
||||
! following polynomial:
|
||||
!
|
||||
! $I_{x1}(a_x, d_x,p,q) \times I_{x1}(a_y, d_y,p,q) \times I_{x1}(a_z, d_z,p,q)$.
|
||||
END_DOC
|
||||
@ -262,7 +268,6 @@ subroutine give_polynomial_mult_center_one_e_erf(A_center,B_center,alpha,beta,&
|
||||
double precision :: accu, pq_inv, p10_1, p10_2, p01_1, p01_2
|
||||
double precision :: p,P_center(3),rho,p_inv,p_inv_2
|
||||
accu = 0.d0
|
||||
!COMPTEUR irp_rdtsc1 = irp_rdtsc()
|
||||
ASSERT (n_pt_in > 1)
|
||||
p = alpha+beta
|
||||
p_inv = 1.d0/p
|
||||
|
@ -458,11 +458,13 @@ end
|
||||
double precision function ERI_erf(alpha,beta,delta,gama,a_x,b_x,c_x,d_x,a_y,b_y,c_y,d_y,a_z,b_z,c_z,d_z)
|
||||
implicit none
|
||||
BEGIN_DOC
|
||||
! ATOMIC PRIMTIVE two-electron integral between the 4 primitives ::
|
||||
! primitive_1 = x1**(a_x) y1**(a_y) z1**(a_z) exp(-alpha * r1**2)
|
||||
! primitive_2 = x1**(b_x) y1**(b_y) z1**(b_z) exp(- beta * r1**2)
|
||||
! primitive_3 = x2**(c_x) y2**(c_y) z2**(c_z) exp(-delta * r2**2)
|
||||
! primitive_4 = x2**(d_x) y2**(d_y) z2**(d_z) exp(- gama * r2**2)
|
||||
! Atomic primtive two-electron integral between the 4 primitives :
|
||||
!
|
||||
! * primitive 1 : $x_1^{a_x} y_1^{a_y} z_1^{a_z} \exp(-\alpha * r1^2)$
|
||||
! * primitive 2 : $x_1^{b_x} y_1^{b_y} z_1^{b_z} \exp(- \beta * r1^2)$
|
||||
! * primitive 3 : $x_2^{c_x} y_2^{c_y} z_2^{c_z} \exp(-\delta * r2^2)$
|
||||
! * primitive 4 : $x_2^{d_x} y_2^{d_y} z_2^{d_z} \exp(-\gamma * r2^2)$
|
||||
!
|
||||
END_DOC
|
||||
double precision, intent(in) :: delta,gama,alpha,beta
|
||||
integer, intent(in) :: a_x,b_x,c_x,d_x,a_y,b_y,c_y,d_y,a_z,b_z,c_z,d_z
|
||||
@ -517,9 +519,11 @@ end
|
||||
|
||||
subroutine integrale_new_erf(I_f,a_x,b_x,c_x,d_x,a_y,b_y,c_y,d_y,a_z,b_z,c_z,d_z,p,q,n_pt)
|
||||
BEGIN_DOC
|
||||
! calculate the integral of the polynom ::
|
||||
! I_x1(a_x+b_x, c_x+d_x,p,q) * I_x1(a_y+b_y, c_y+d_y,p,q) * I_x1(a_z+b_z, c_z+d_z,p,q)
|
||||
! between ( 0 ; 1)
|
||||
! Calculate the integral of the polynomial :
|
||||
!
|
||||
! $I_x1(a_x+b_x, c_x+d_x,p,q) \, I_x1(a_y+b_y, c_y+d_y,p,q) \, I_x1(a_z+b_z, c_z+d_z,p,q)$
|
||||
!
|
||||
! between $( 0 ; 1)$
|
||||
END_DOC
|
||||
|
||||
|
||||
|
@ -641,9 +641,10 @@ end
|
||||
|
||||
subroutine integrale_new(I_f,a_x,b_x,c_x,d_x,a_y,b_y,c_y,d_y,a_z,b_z,c_z,d_z,p,q,n_pt)
|
||||
BEGIN_DOC
|
||||
! calculate the integral of the polynom ::
|
||||
! I_x1(a_x+b_x, c_x+d_x,p,q) * I_x1(a_y+b_y, c_y+d_y,p,q) * I_x1(a_z+b_z, c_z+d_z,p,q)
|
||||
! between ( 0 ; 1)
|
||||
! Calculates the integral of the polynomial :
|
||||
!
|
||||
! $I_{x_1}(a_x+b_x,c_x+d_x,p,q) \, I_{x_1}(a_y+b_y,c_y+d_y,p,q) \, I_{x_1}(a_z+b_z,c_z+d_z,p,q)$
|
||||
! in $( 0 ; 1)$
|
||||
END_DOC
|
||||
|
||||
|
||||
@ -775,8 +776,9 @@ integer function n_pt_sup(a_x,b_x,c_x,d_x,a_y,b_y,c_y,d_y,a_z,b_z,c_z,d_z)
|
||||
implicit none
|
||||
BEGIN_DOC
|
||||
! Returns the upper boundary of the degree of the polynomial involved in the
|
||||
! bielctronic integral :
|
||||
! Ix(a_x,b_x,c_x,d_x) * Iy(a_y,b_y,c_y,d_y) * Iz(a_z,b_z,c_z,d_z)
|
||||
! two-electron integral :
|
||||
!
|
||||
! $I_x(a_x,b_x,c_x,d_x) \, I_y(a_y,b_y,c_y,d_y) \, I_z(a_z,b_z,c_z,d_z)$
|
||||
END_DOC
|
||||
integer :: a_x,b_x,c_x,d_x,a_y,b_y,c_y,d_y,a_z,b_z,c_z,d_z
|
||||
n_pt_sup = shiftl( a_x+b_x+c_x+d_x + a_y+b_y+c_y+d_y + a_z+b_z+c_z+d_z,1 )
|
||||
@ -790,7 +792,8 @@ subroutine give_polynom_mult_center_x(P_center,Q_center,a_x,d_x,p,q,n_pt_in,pq_i
|
||||
BEGIN_DOC
|
||||
! subroutine that returns the explicit polynom in term of the "t"
|
||||
! variable of the following polynomw :
|
||||
! I_x1(a_x, d_x,p,q) * I_x1(a_y, d_y,p,q) * I_x1(a_z, d_z,p,q)
|
||||
!
|
||||
! $I_{x_1}(a_x,d_x,p,q) \, I_{x_1}(a_y,d_y,p,q) \ I_{x_1}(a_z,d_z,p,q)$
|
||||
END_DOC
|
||||
integer, intent(in) :: n_pt_in
|
||||
integer,intent(out) :: n_pt_out
|
||||
@ -851,7 +854,7 @@ end
|
||||
subroutine I_x1_pol_mult(a,c,B_10,B_01,B_00,C_00,D_00,d,nd,n_pt_in)
|
||||
implicit none
|
||||
BEGIN_DOC
|
||||
! recursive function involved in the two-electron integral
|
||||
! Recursive function involved in the two-electron integral
|
||||
END_DOC
|
||||
integer , intent(in) :: n_pt_in
|
||||
include 'utils/constants.include.F'
|
||||
@ -885,7 +888,7 @@ end
|
||||
recursive subroutine I_x1_pol_mult_recurs(a,c,B_10,B_01,B_00,C_00,D_00,d,nd,n_pt_in)
|
||||
implicit none
|
||||
BEGIN_DOC
|
||||
! recursive function involved in the two-electron integral
|
||||
! Recursive function involved in the two-electron integral
|
||||
END_DOC
|
||||
integer , intent(in) :: n_pt_in
|
||||
include 'utils/constants.include.F'
|
||||
@ -966,7 +969,7 @@ end
|
||||
recursive subroutine I_x1_pol_mult_a1(c,B_10,B_01,B_00,C_00,D_00,d,nd,n_pt_in)
|
||||
implicit none
|
||||
BEGIN_DOC
|
||||
! recursive function involved in the two-electron integral
|
||||
! Recursive function involved in the two-electron integral
|
||||
END_DOC
|
||||
integer , intent(in) :: n_pt_in
|
||||
include 'utils/constants.include.F'
|
||||
@ -1017,7 +1020,7 @@ end
|
||||
recursive subroutine I_x1_pol_mult_a2(c,B_10,B_01,B_00,C_00,D_00,d,nd,n_pt_in)
|
||||
implicit none
|
||||
BEGIN_DOC
|
||||
! recursive function involved in the two-electron integral
|
||||
! Recursive function involved in the two-electron integral
|
||||
END_DOC
|
||||
integer , intent(in) :: n_pt_in
|
||||
include 'utils/constants.include.F'
|
||||
@ -1075,7 +1078,7 @@ end
|
||||
recursive subroutine I_x2_pol_mult(c,B_10,B_01,B_00,C_00,D_00,d,nd,dim)
|
||||
implicit none
|
||||
BEGIN_DOC
|
||||
! recursive function involved in the two-electron integral
|
||||
! Recursive function involved in the two-electron integral
|
||||
END_DOC
|
||||
integer , intent(in) :: dim
|
||||
include 'utils/constants.include.F'
|
||||
|
@ -4,18 +4,19 @@ aux_quantities
|
||||
|
||||
|
||||
This module contains some global variables (such as densities and energies)
|
||||
which are stored in the EZFIO folder in a different place than determinants.
|
||||
which are stored in the |EZFIO| directory in a different place than determinants.
|
||||
This is used in practice to store density matrices which can be obtained from
|
||||
any methods, as long as they are stored in the same MO basis which is used for
|
||||
any method, as long as they are stored in the same |MO| basis which is used for
|
||||
the calculations. In |RSDFT| calculations, this can be done to perform damping
|
||||
on the density in order to speed up convergence.
|
||||
on the density in order to speed up the convergence.
|
||||
|
||||
The main providers of that module are:
|
||||
|
||||
* `data_one_e_dm_alpha_mo` and `data_one_e_dm_beta_mo` which are the
|
||||
one-body alpha and beta densities which are necessary read from the EZFIO
|
||||
folder.
|
||||
* :c:data:`data_one_e_dm_alpha_mo` and :c:data:`data_one_e_dm_beta_mo` which
|
||||
are the one-body alpha and beta densities which are necessary read from the
|
||||
|EZFIO| directory.
|
||||
|
||||
|
||||
Thanks to these providers you can use any density matrix that does not
|
||||
necessary corresponds to that of the current wave function.
|
||||
necessarily corresponds to that of the current wave function.
|
||||
|
||||
|
@ -43,7 +43,7 @@ By default, the program will stop when more than one million determinants have
|
||||
been selected, or when the |PT2| energy is below :math:`10^{-4}`.
|
||||
|
||||
The variational and |PT2| energies of the iterations are stored in the
|
||||
|EZFIO| database, in the :ref:`iterations` module.
|
||||
|EZFIO| database, in the :ref:`module_iterations` module.
|
||||
|
||||
|
||||
|
||||
|
@ -11,9 +11,15 @@ BEGIN_PROVIDER [ double precision, pt2_E0_denominator, (N_states) ]
|
||||
BEGIN_DOC
|
||||
! E0 in the denominator of the PT2
|
||||
END_DOC
|
||||
integer :: i,j
|
||||
if (initialize_pt2_E0_denominator) then
|
||||
if (h0_type == "EN") then
|
||||
pt2_E0_denominator(1:N_states) = psi_energy(1:N_states)
|
||||
else if (h0_type == "HF") then
|
||||
do i=1,N_states
|
||||
j = maxloc(abs(psi_coef(:,i)),1)
|
||||
pt2_E0_denominator(i) = psi_det_hii(j)
|
||||
enddo
|
||||
else if (h0_type == "Barycentric") then
|
||||
pt2_E0_denominator(1:N_states) = barycentric_electronic_energy(1:N_states)
|
||||
else if (h0_type == "Variance") then
|
||||
@ -24,7 +30,9 @@ BEGIN_PROVIDER [ double precision, pt2_E0_denominator, (N_states) ]
|
||||
print *, h0_type, ' not implemented'
|
||||
stop
|
||||
endif
|
||||
call write_double(6,pt2_E0_denominator(1)+nuclear_repulsion, 'PT2 Energy denominator')
|
||||
do i=1,N_states
|
||||
call write_double(6,pt2_E0_denominator(i)+nuclear_repulsion, 'PT2 Energy denominator')
|
||||
enddo
|
||||
else
|
||||
pt2_E0_denominator = -huge(1.d0)
|
||||
endif
|
||||
|
@ -10,13 +10,20 @@ END_PROVIDER
|
||||
&BEGIN_PROVIDER [ integer, pt2_n_tasks_max ]
|
||||
implicit none
|
||||
logical, external :: testTeethBuilding
|
||||
integer :: i
|
||||
integer :: e
|
||||
e = elec_num - n_core_orb * 2
|
||||
pt2_n_tasks_max = 1+min((e*(e-1))/2, int(dsqrt(dble(N_det_selectors)))/4)
|
||||
do i=1,N_det_generators
|
||||
pt2_F(i) = 1 + int(dble(pt2_n_tasks_max)*maxval(dsqrt(dabs(psi_coef_sorted_gen(i,1:N_states)))))
|
||||
integer :: i,j
|
||||
pt2_n_tasks_max = elec_beta_num*elec_beta_num + elec_alpha_num*elec_beta_num - n_core_orb*2
|
||||
pt2_n_tasks_max = min(pt2_n_tasks_max,1+N_det_generators/10000)
|
||||
call write_int(6,pt2_n_tasks_max,'pt2_n_tasks_max')
|
||||
|
||||
pt2_F(:) = int(sqrt(float(pt2_n_tasks_max)))
|
||||
do i=1,pt2_n_0(1+pt2_N_teeth/4)
|
||||
pt2_F(i) = pt2_n_tasks_max
|
||||
enddo
|
||||
do i=1+pt2_n_0(pt2_N_teeth-pt2_N_teeth/4), N_det_generators
|
||||
pt2_F(i) = 1
|
||||
enddo
|
||||
|
||||
|
||||
END_PROVIDER
|
||||
|
||||
BEGIN_PROVIDER [ integer, pt2_N_teeth ]
|
||||
@ -54,17 +61,16 @@ logical function testTeethBuilding(minF, N)
|
||||
|
||||
allocate(tilde_w(N_det_generators), tilde_cW(0:N_det_generators))
|
||||
|
||||
do i=1,N_det_generators
|
||||
tilde_w(i) = psi_coef_sorted_gen(i,pt2_stoch_istate)**2 !+ 1.d-20
|
||||
enddo
|
||||
|
||||
double precision :: norm
|
||||
norm = 0.d0
|
||||
double precision :: norm
|
||||
do i=N_det_generators,1,-1
|
||||
norm += tilde_w(i)
|
||||
tilde_w(i) = psi_coef_sorted_gen(i,pt2_stoch_istate) * &
|
||||
psi_coef_sorted_gen(i,pt2_stoch_istate)
|
||||
norm = norm + tilde_w(i)
|
||||
enddo
|
||||
|
||||
tilde_w(:) = tilde_w(:) / norm
|
||||
f = 1.d0/norm
|
||||
tilde_w(:) = tilde_w(:) * f
|
||||
|
||||
tilde_cW(0) = -1.d0
|
||||
do i=1,N_det_generators
|
||||
@ -74,10 +80,14 @@ logical function testTeethBuilding(minF, N)
|
||||
|
||||
n0 = 0
|
||||
testTeethBuilding = .false.
|
||||
double precision :: f
|
||||
integer :: minFN
|
||||
minFN = N_det_generators - minF * N
|
||||
f = 1.d0/dble(N)
|
||||
do
|
||||
u0 = tilde_cW(n0)
|
||||
r = tilde_cW(n0 + minF)
|
||||
Wt = (1d0 - u0) / dble(N)
|
||||
Wt = (1d0 - u0) * f
|
||||
if (dabs(Wt) <= 1.d-3) then
|
||||
return
|
||||
endif
|
||||
@ -86,7 +96,8 @@ logical function testTeethBuilding(minF, N)
|
||||
return
|
||||
end if
|
||||
n0 += 1
|
||||
if(N_det_generators - n0 < minF * N) then
|
||||
! if(N_det_generators - n0 < minF * N) then
|
||||
if(n0 > minFN) then
|
||||
return
|
||||
end if
|
||||
end do
|
||||
@ -103,7 +114,6 @@ subroutine ZMQ_pt2(E, pt2,relative_error, error, variance, norm, N_in)
|
||||
|
||||
integer(ZMQ_PTR) :: zmq_to_qp_run_socket, zmq_socket_pull
|
||||
integer, intent(in) :: N_in
|
||||
integer, external :: omp_get_thread_num
|
||||
double precision, intent(in) :: relative_error, E(N_states)
|
||||
double precision, intent(out) :: pt2(N_states),error(N_states)
|
||||
double precision, intent(out) :: variance(N_states),norm(N_states)
|
||||
@ -111,7 +121,6 @@ subroutine ZMQ_pt2(E, pt2,relative_error, error, variance, norm, N_in)
|
||||
|
||||
integer :: i, N
|
||||
|
||||
double precision, external :: omp_get_wtime
|
||||
double precision :: state_average_weight_save(N_states), w(N_states,4)
|
||||
integer(ZMQ_PTR), external :: new_zmq_to_qp_run_socket
|
||||
type(selection_buffer) :: b
|
||||
@ -120,7 +129,11 @@ subroutine ZMQ_pt2(E, pt2,relative_error, error, variance, norm, N_in)
|
||||
PROVIDE psi_bilinear_matrix_rows psi_det_sorted_order psi_bilinear_matrix_order
|
||||
PROVIDE psi_bilinear_matrix_transp_rows_loc psi_bilinear_matrix_transp_columns
|
||||
PROVIDE psi_bilinear_matrix_transp_order psi_selectors_coef_transp psi_det_sorted
|
||||
PROVIDE psi_det_hii N_generators_bitmask
|
||||
|
||||
if (h0_type == 'SOP') then
|
||||
PROVIDE psi_occ_pattern_hii det_to_occ_pattern
|
||||
endif
|
||||
|
||||
if (N_det < max(10,N_states)) then
|
||||
pt2=0.d0
|
||||
@ -132,6 +145,10 @@ subroutine ZMQ_pt2(E, pt2,relative_error, error, variance, norm, N_in)
|
||||
|
||||
N = max(N_in,1) * N_states
|
||||
state_average_weight_save(:) = state_average_weight(:)
|
||||
if (int(N,8)*2_8 > huge(1)) then
|
||||
print *, irp_here, ': integer too large'
|
||||
stop -1
|
||||
endif
|
||||
call create_selection_buffer(N, N*2, b)
|
||||
ASSERT (associated(b%det))
|
||||
ASSERT (associated(b%val))
|
||||
@ -244,8 +261,8 @@ subroutine ZMQ_pt2(E, pt2,relative_error, error, variance, norm, N_in)
|
||||
+ 64.d0*pt2_n_tasks_max & ! task
|
||||
+ 3.d0*pt2_n_tasks_max*N_states & ! pt2, variance, norm
|
||||
+ 1.d0*pt2_n_tasks_max & ! i_generator, subset
|
||||
+ 2.d0*(N_int*2.d0*N_in + N_in) & ! selection buffers
|
||||
+ 1.d0*(N_int*2.d0*N_in + N_in) & ! sort/merge selection buffers
|
||||
+ 1.d0*(N_int*2.d0*ii+ ii) & ! selection buffer
|
||||
+ 1.d0*(N_int*2.d0*ii+ ii) & ! sort selection buffer
|
||||
+ 2.0d0*(ii) & ! preinteresting, interesting,
|
||||
! prefullinteresting, fullinteresting
|
||||
+ 2.0d0*(N_int*2*ii) & ! minilist, fullminilist
|
||||
@ -275,6 +292,7 @@ subroutine ZMQ_pt2(E, pt2,relative_error, error, variance, norm, N_in)
|
||||
print '(A)', ' Samples Energy Stat. Err Variance Norm Seconds '
|
||||
print '(A)', '========== ================= =========== =============== =============== ================='
|
||||
|
||||
PROVIDE global_selection_buffer
|
||||
!$OMP PARALLEL DEFAULT(shared) NUM_THREADS(nproc_target+1) &
|
||||
!$OMP PRIVATE(i)
|
||||
i = omp_get_thread_num()
|
||||
@ -322,12 +340,12 @@ subroutine pt2_slave_inproc(i)
|
||||
implicit none
|
||||
integer, intent(in) :: i
|
||||
|
||||
PROVIDE global_selection_buffer
|
||||
call run_pt2_slave(1,i,pt2_e0_denominator)
|
||||
end
|
||||
|
||||
|
||||
subroutine pt2_collector(zmq_socket_pull, E, relative_error, pt2, error, &
|
||||
variance, norm, b, N_)
|
||||
subroutine pt2_collector(zmq_socket_pull, E, relative_error, pt2, error, variance, norm, b, N_)
|
||||
use f77_zmq
|
||||
use selection_types
|
||||
use bitmasks
|
||||
@ -347,7 +365,8 @@ subroutine pt2_collector(zmq_socket_pull, E, relative_error, pt2, error, &
|
||||
double precision, allocatable :: nI(:,:), nI_task(:,:), T3(:)
|
||||
integer(ZMQ_PTR),external :: new_zmq_to_qp_run_socket
|
||||
integer(ZMQ_PTR) :: zmq_to_qp_run_socket
|
||||
integer, external :: zmq_delete_tasks
|
||||
integer, external :: zmq_delete_tasks_async_send
|
||||
integer, external :: zmq_delete_tasks_async_recv
|
||||
integer, external :: zmq_abort
|
||||
integer, external :: pt2_find_sample_lr
|
||||
|
||||
@ -355,13 +374,12 @@ subroutine pt2_collector(zmq_socket_pull, E, relative_error, pt2, error, &
|
||||
integer, allocatable :: task_id(:)
|
||||
integer, allocatable :: index(:)
|
||||
|
||||
double precision, external :: omp_get_wtime
|
||||
double precision :: v, x, x2, x3, avg, avg2, avg3, eqt, E0, v0, n0
|
||||
double precision :: time, time1, time0
|
||||
|
||||
integer, allocatable :: f(:)
|
||||
logical, allocatable :: d(:)
|
||||
logical :: do_exit, stop_now
|
||||
logical :: do_exit, stop_now, sending
|
||||
logical, external :: qp_stop
|
||||
type(selection_buffer) :: b2
|
||||
|
||||
@ -369,6 +387,8 @@ subroutine pt2_collector(zmq_socket_pull, E, relative_error, pt2, error, &
|
||||
double precision :: rss
|
||||
double precision, external :: memory_of_double, memory_of_int
|
||||
|
||||
sending =.False.
|
||||
|
||||
rss = memory_of_int(pt2_n_tasks_max*2+N_det_generators*2)
|
||||
rss += memory_of_double(N_states*N_det_generators)*3.d0
|
||||
rss += memory_of_double(N_states*pt2_n_tasks_max)*3.d0
|
||||
@ -444,6 +464,7 @@ subroutine pt2_collector(zmq_socket_pull, E, relative_error, pt2, error, &
|
||||
! Add Stochastic part
|
||||
c = pt2_R(n)
|
||||
if(c > 0) then
|
||||
!print *, 'c>0'
|
||||
x = 0d0
|
||||
x2 = 0d0
|
||||
x3 = 0d0
|
||||
@ -470,6 +491,7 @@ subroutine pt2_collector(zmq_socket_pull, E, relative_error, pt2, error, &
|
||||
pt2(pt2_stoch_istate) = avg
|
||||
variance(pt2_stoch_istate) = avg2
|
||||
norm(pt2_stoch_istate) = avg3
|
||||
call wall_time(time)
|
||||
! 1/(N-1.5) : see Brugger, The American Statistician (23) 4 p. 32 (1969)
|
||||
if(c > 2) then
|
||||
eqt = dabs((S2(t) / c) - (S(t)/c)**2) ! dabs for numerical stability
|
||||
@ -490,30 +512,36 @@ subroutine pt2_collector(zmq_socket_pull, E, relative_error, pt2, error, &
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
call wall_time(time)
|
||||
end if
|
||||
n += 1
|
||||
else if(more == 0) then
|
||||
exit
|
||||
else
|
||||
call pull_pt2_results(zmq_socket_pull, index, eI_task, vI_task, nI_task, task_id, n_tasks, b2)
|
||||
if (zmq_delete_tasks(zmq_to_qp_run_socket,zmq_socket_pull,task_id,n_tasks,more) == -1) then
|
||||
stop 'Unable to delete tasks'
|
||||
if (zmq_delete_tasks_async_send(zmq_to_qp_run_socket,task_id,n_tasks,sending) == -1) then
|
||||
stop 'PT2: Unable to delete tasks (send)'
|
||||
endif
|
||||
do i=1,n_tasks
|
||||
eI(:, index(i)) += eI_task(:,i)
|
||||
vI(:, index(i)) += vI_task(:,i)
|
||||
nI(:, index(i)) += nI_task(:,i)
|
||||
eI(1:N_states, index(i)) += eI_task(1:N_states,i)
|
||||
vI(1:N_states, index(i)) += vI_task(1:N_states,i)
|
||||
nI(1:N_states, index(i)) += nI_task(1:N_states,i)
|
||||
f(index(i)) -= 1
|
||||
end do
|
||||
do i=1, b2%cur
|
||||
call add_to_selection_buffer(b, b2%det(1,1,i), b2%val(i))
|
||||
! We assume the pulled buffer is sorted
|
||||
if (b2%val(i) > b%mini) exit
|
||||
call add_to_selection_buffer(b, b2%det(1,1,i), b2%val(i))
|
||||
end do
|
||||
if (zmq_delete_tasks_async_recv(zmq_to_qp_run_socket,more,sending) == -1) then
|
||||
stop 'PT2: Unable to delete tasks (recv)'
|
||||
endif
|
||||
end if
|
||||
end do
|
||||
!print *, 'deleting b2'
|
||||
call delete_selection_buffer(b2)
|
||||
!print *, 'sorting b'
|
||||
call sort_selection_buffer(b)
|
||||
!print *, 'done'
|
||||
call end_zmq_to_qp_run_socket(zmq_to_qp_run_socket)
|
||||
|
||||
end subroutine
|
||||
|
@ -1,7 +1,46 @@
|
||||
use omp_lib
|
||||
use selection_types
|
||||
use f77_zmq
|
||||
BEGIN_PROVIDER [ integer(omp_lock_kind), global_selection_buffer_lock ]
|
||||
use omp_lib
|
||||
implicit none
|
||||
BEGIN_DOC
|
||||
! Global buffer for the OpenMP selection
|
||||
END_DOC
|
||||
call omp_init_lock(global_selection_buffer_lock)
|
||||
END_PROVIDER
|
||||
|
||||
BEGIN_PROVIDER [ type(selection_buffer), global_selection_buffer ]
|
||||
use omp_lib
|
||||
implicit none
|
||||
BEGIN_DOC
|
||||
! Global buffer for the OpenMP selection
|
||||
END_DOC
|
||||
call omp_set_lock(global_selection_buffer_lock)
|
||||
call delete_selection_buffer(global_selection_buffer)
|
||||
call create_selection_buffer(N_det_generators, 2*N_det_generators, &
|
||||
global_selection_buffer)
|
||||
call omp_unset_lock(global_selection_buffer_lock)
|
||||
END_PROVIDER
|
||||
|
||||
|
||||
subroutine run_pt2_slave(thread,iproc,energy)
|
||||
use f77_zmq
|
||||
use selection_types
|
||||
use f77_zmq
|
||||
implicit none
|
||||
|
||||
double precision, intent(in) :: energy(N_states_diag)
|
||||
integer, intent(in) :: thread, iproc
|
||||
if (N_det > nproc*(elec_alpha_num * (mo_num-elec_alpha_num))**2) then
|
||||
call run_pt2_slave_large(thread,iproc,energy)
|
||||
else
|
||||
call run_pt2_slave_small(thread,iproc,energy)
|
||||
endif
|
||||
end
|
||||
|
||||
subroutine run_pt2_slave_small(thread,iproc,energy)
|
||||
use selection_types
|
||||
use f77_zmq
|
||||
implicit none
|
||||
|
||||
double precision, intent(in) :: energy(N_states_diag)
|
||||
@ -18,18 +57,16 @@ subroutine run_pt2_slave(thread,iproc,energy)
|
||||
integer(ZMQ_PTR), external :: new_zmq_push_socket
|
||||
integer(ZMQ_PTR) :: zmq_socket_push
|
||||
|
||||
type(selection_buffer) :: b, b2
|
||||
type(selection_buffer) :: b
|
||||
logical :: done, buffer_ready
|
||||
|
||||
double precision,allocatable :: pt2(:,:), variance(:,:), norm(:,:)
|
||||
integer :: n_tasks, k, N
|
||||
integer, allocatable :: i_generator(:), subset(:)
|
||||
|
||||
double precision :: rss
|
||||
double precision, external :: memory_of_double, memory_of_int
|
||||
rss = memory_of_int(pt2_n_tasks_max)*67.d0
|
||||
rss += memory_of_double(pt2_n_tasks_max)*(N_states*3)
|
||||
call check_mem(rss,irp_here)
|
||||
integer :: bsize ! Size of selection buffers
|
||||
! logical :: sending
|
||||
|
||||
allocate(task_id(pt2_n_tasks_max), task(pt2_n_tasks_max))
|
||||
allocate(pt2(N_states,pt2_n_tasks_max), i_generator(pt2_n_tasks_max), subset(pt2_n_tasks_max))
|
||||
@ -50,8 +87,8 @@ subroutine run_pt2_slave(thread,iproc,energy)
|
||||
buffer_ready = .False.
|
||||
n_tasks = 1
|
||||
|
||||
! sending = .False.
|
||||
done = .False.
|
||||
n_tasks = 1
|
||||
do while (.not.done)
|
||||
|
||||
n_tasks = max(1,n_tasks)
|
||||
@ -72,11 +109,11 @@ subroutine run_pt2_slave(thread,iproc,energy)
|
||||
enddo
|
||||
if (b%N == 0) then
|
||||
! Only first time
|
||||
call create_selection_buffer(N, N*2, b)
|
||||
call create_selection_buffer(N, N*2, b2)
|
||||
bsize = min(N, (elec_alpha_num * (mo_num-elec_alpha_num))**2)
|
||||
call create_selection_buffer(bsize, bsize*2, b)
|
||||
buffer_ready = .True.
|
||||
else
|
||||
ASSERT (N == b%N)
|
||||
ASSERT (b%N == bsize)
|
||||
endif
|
||||
|
||||
double precision :: time0, time1
|
||||
@ -93,20 +130,19 @@ subroutine run_pt2_slave(thread,iproc,energy)
|
||||
!print *, i_generator(1), time1-time2, n_tasks, pt2_F(i_generator(1))
|
||||
enddo
|
||||
call wall_time(time1)
|
||||
!print *, i_generator(1), time1-time0, n_tasks
|
||||
!print *, '-->', i_generator(1), time1-time0, n_tasks
|
||||
|
||||
integer, external :: tasks_done_to_taskserver
|
||||
if (tasks_done_to_taskserver(zmq_to_qp_run_socket,worker_id,task_id,n_tasks) == -1) then
|
||||
done = .true.
|
||||
endif
|
||||
call sort_selection_buffer(b)
|
||||
call merge_selection_buffers(b,b2)
|
||||
call push_pt2_results(zmq_socket_push, i_generator, pt2, variance, norm, b, task_id, n_tasks)
|
||||
b%mini = b2%mini
|
||||
b%cur=0
|
||||
|
||||
! Try to adjust n_tasks around nproc/8 seconds per job
|
||||
n_tasks = min(2*n_tasks,int( dble(n_tasks * nproc/8) / (time1 - time0 + 1.d0)))
|
||||
! ! Try to adjust n_tasks around nproc/2 seconds per job
|
||||
! n_tasks = min(2*n_tasks,int( dble(n_tasks * nproc/2) / (time1 - time0 + 1.d0)))
|
||||
n_tasks = 1
|
||||
end do
|
||||
|
||||
integer, external :: disconnect_from_taskserver
|
||||
@ -120,14 +156,150 @@ subroutine run_pt2_slave(thread,iproc,energy)
|
||||
call end_zmq_to_qp_run_socket(zmq_to_qp_run_socket)
|
||||
if (buffer_ready) then
|
||||
call delete_selection_buffer(b)
|
||||
call delete_selection_buffer(b2)
|
||||
endif
|
||||
end subroutine
|
||||
|
||||
|
||||
subroutine push_pt2_results(zmq_socket_push, index, pt2, variance, norm, b, task_id, n_tasks)
|
||||
use f77_zmq
|
||||
subroutine run_pt2_slave_large(thread,iproc,energy)
|
||||
use selection_types
|
||||
use f77_zmq
|
||||
implicit none
|
||||
|
||||
double precision, intent(in) :: energy(N_states_diag)
|
||||
integer, intent(in) :: thread, iproc
|
||||
integer :: rc, i
|
||||
|
||||
integer :: worker_id, ctask, ltask
|
||||
character*(512), allocatable :: task(:)
|
||||
integer, allocatable :: task_id(:)
|
||||
|
||||
integer(ZMQ_PTR),external :: new_zmq_to_qp_run_socket
|
||||
integer(ZMQ_PTR) :: zmq_to_qp_run_socket
|
||||
|
||||
integer(ZMQ_PTR), external :: new_zmq_push_socket
|
||||
integer(ZMQ_PTR) :: zmq_socket_push
|
||||
|
||||
type(selection_buffer) :: b
|
||||
logical :: done, buffer_ready
|
||||
|
||||
double precision,allocatable :: pt2(:,:), variance(:,:), norm(:,:)
|
||||
integer :: n_tasks, k, N
|
||||
integer, allocatable :: i_generator(:), subset(:)
|
||||
|
||||
integer :: bsize ! Size of selection buffers
|
||||
logical :: sending
|
||||
PROVIDE global_selection_buffer global_selection_buffer_lock
|
||||
|
||||
|
||||
allocate(task_id(pt2_n_tasks_max), task(pt2_n_tasks_max))
|
||||
allocate(pt2(N_states,pt2_n_tasks_max), i_generator(pt2_n_tasks_max), subset(pt2_n_tasks_max))
|
||||
allocate(variance(N_states,pt2_n_tasks_max))
|
||||
allocate(norm(N_states,pt2_n_tasks_max))
|
||||
|
||||
zmq_to_qp_run_socket = new_zmq_to_qp_run_socket()
|
||||
|
||||
integer, external :: connect_to_taskserver
|
||||
if (connect_to_taskserver(zmq_to_qp_run_socket,worker_id,thread) == -1) then
|
||||
call end_zmq_to_qp_run_socket(zmq_to_qp_run_socket)
|
||||
return
|
||||
endif
|
||||
|
||||
zmq_socket_push = new_zmq_push_socket(thread)
|
||||
|
||||
b%N = 0
|
||||
buffer_ready = .False.
|
||||
n_tasks = 1
|
||||
|
||||
sending = .False.
|
||||
done = .False.
|
||||
do while (.not.done)
|
||||
|
||||
n_tasks = max(1,n_tasks)
|
||||
n_tasks = min(pt2_n_tasks_max,n_tasks)
|
||||
|
||||
integer, external :: get_tasks_from_taskserver
|
||||
if (get_tasks_from_taskserver(zmq_to_qp_run_socket,worker_id, task_id, task, n_tasks) == -1) then
|
||||
exit
|
||||
endif
|
||||
done = task_id(n_tasks) == 0
|
||||
if (done) then
|
||||
n_tasks = n_tasks-1
|
||||
endif
|
||||
if (n_tasks == 0) exit
|
||||
|
||||
do k=1,n_tasks
|
||||
read (task(k),*) subset(k), i_generator(k), N
|
||||
enddo
|
||||
if (b%N == 0) then
|
||||
! Only first time
|
||||
bsize = min(N, (elec_alpha_num * (mo_num-elec_alpha_num))**2)
|
||||
call create_selection_buffer(bsize, bsize*2, b)
|
||||
buffer_ready = .True.
|
||||
else
|
||||
ASSERT (b%N == bsize)
|
||||
endif
|
||||
|
||||
double precision :: time0, time1
|
||||
call wall_time(time0)
|
||||
do k=1,n_tasks
|
||||
pt2(:,k) = 0.d0
|
||||
variance(:,k) = 0.d0
|
||||
norm(:,k) = 0.d0
|
||||
b%cur = 0
|
||||
!double precision :: time2
|
||||
!call wall_time(time2)
|
||||
call select_connected(i_generator(k),energy,pt2(1,k),variance(1,k),norm(1,k),b,subset(k),pt2_F(i_generator(k)))
|
||||
!call wall_time(time1)
|
||||
!print *, i_generator(1), time1-time2, n_tasks, pt2_F(i_generator(1))
|
||||
enddo
|
||||
call wall_time(time1)
|
||||
!print *, '-->', i_generator(1), time1-time0, n_tasks
|
||||
|
||||
integer, external :: tasks_done_to_taskserver
|
||||
if (tasks_done_to_taskserver(zmq_to_qp_run_socket,worker_id,task_id,n_tasks) == -1) then
|
||||
done = .true.
|
||||
endif
|
||||
call sort_selection_buffer(b)
|
||||
call push_pt2_results_async_recv(zmq_socket_push,b%mini,sending)
|
||||
call omp_set_lock(global_selection_buffer_lock)
|
||||
global_selection_buffer%mini = b%mini
|
||||
call merge_selection_buffers(b,global_selection_buffer)
|
||||
b%cur=0
|
||||
call omp_unset_lock(global_selection_buffer_lock)
|
||||
if ( iproc == 1 ) then
|
||||
call omp_set_lock(global_selection_buffer_lock)
|
||||
call push_pt2_results_async_send(zmq_socket_push, i_generator, pt2, variance, norm, global_selection_buffer, task_id, n_tasks,sending)
|
||||
global_selection_buffer%cur = 0
|
||||
call omp_unset_lock(global_selection_buffer_lock)
|
||||
else
|
||||
call push_pt2_results_async_send(zmq_socket_push, i_generator, pt2, variance, norm, b, task_id, n_tasks,sending)
|
||||
endif
|
||||
|
||||
! ! Try to adjust n_tasks around nproc/2 seconds per job
|
||||
! n_tasks = min(2*n_tasks,int( dble(n_tasks * nproc/2) / (time1 - time0 + 1.d0)))
|
||||
n_tasks = 1
|
||||
end do
|
||||
call push_pt2_results_async_recv(zmq_socket_push,b%mini,sending)
|
||||
|
||||
integer, external :: disconnect_from_taskserver
|
||||
do i=1,300
|
||||
if (disconnect_from_taskserver(zmq_to_qp_run_socket,worker_id) /= -2) exit
|
||||
call sleep(1)
|
||||
print *, 'Retry disconnect...'
|
||||
end do
|
||||
|
||||
call end_zmq_push_socket(zmq_socket_push,thread)
|
||||
call end_zmq_to_qp_run_socket(zmq_to_qp_run_socket)
|
||||
if (buffer_ready) then
|
||||
call delete_selection_buffer(b)
|
||||
endif
|
||||
FREE global_selection_buffer
|
||||
end subroutine
|
||||
|
||||
|
||||
subroutine push_pt2_results(zmq_socket_push, index, pt2, variance, norm, b, task_id, n_tasks)
|
||||
use selection_types
|
||||
use f77_zmq
|
||||
implicit none
|
||||
|
||||
integer(ZMQ_PTR), intent(in) :: zmq_socket_push
|
||||
@ -136,10 +308,39 @@ subroutine push_pt2_results(zmq_socket_push, index, pt2, variance, norm, b, task
|
||||
double precision, intent(in) :: norm(N_states,n_tasks)
|
||||
integer, intent(in) :: n_tasks, index(n_tasks), task_id(n_tasks)
|
||||
type(selection_buffer), intent(inout) :: b
|
||||
|
||||
logical :: sending
|
||||
sending = .False.
|
||||
call push_pt2_results_async_send(zmq_socket_push, index, pt2, variance, norm, b, task_id, n_tasks, sending)
|
||||
call push_pt2_results_async_recv(zmq_socket_push, b%mini, sending)
|
||||
end subroutine
|
||||
|
||||
|
||||
subroutine push_pt2_results_async_send(zmq_socket_push, index, pt2, variance, norm, b, task_id, n_tasks, sending)
|
||||
use selection_types
|
||||
use f77_zmq
|
||||
implicit none
|
||||
|
||||
integer(ZMQ_PTR), intent(in) :: zmq_socket_push
|
||||
double precision, intent(in) :: pt2(N_states,n_tasks)
|
||||
double precision, intent(in) :: variance(N_states,n_tasks)
|
||||
double precision, intent(in) :: norm(N_states,n_tasks)
|
||||
integer, intent(in) :: n_tasks, index(n_tasks), task_id(n_tasks)
|
||||
type(selection_buffer), intent(inout) :: b
|
||||
logical, intent(inout) :: sending
|
||||
integer :: rc
|
||||
integer*8 :: rc8
|
||||
|
||||
if (sending) then
|
||||
print *, irp_here, ': sending is true'
|
||||
stop -1
|
||||
endif
|
||||
sending = .True.
|
||||
|
||||
rc = f77_zmq_send( zmq_socket_push, n_tasks, 4, ZMQ_SNDMORE)
|
||||
if (rc == -1) then
|
||||
print *, irp_here, ': error sending result'
|
||||
stop 1
|
||||
return
|
||||
else if(rc /= 4) then
|
||||
stop 'push'
|
||||
@ -148,6 +349,8 @@ subroutine push_pt2_results(zmq_socket_push, index, pt2, variance, norm, b, task
|
||||
|
||||
rc = f77_zmq_send( zmq_socket_push, index, 4*n_tasks, ZMQ_SNDMORE)
|
||||
if (rc == -1) then
|
||||
print *, irp_here, ': error sending result'
|
||||
stop 2
|
||||
return
|
||||
else if(rc /= 4*n_tasks) then
|
||||
stop 'push'
|
||||
@ -156,6 +359,8 @@ subroutine push_pt2_results(zmq_socket_push, index, pt2, variance, norm, b, task
|
||||
|
||||
rc = f77_zmq_send( zmq_socket_push, pt2, 8*N_states*n_tasks, ZMQ_SNDMORE)
|
||||
if (rc == -1) then
|
||||
print *, irp_here, ': error sending result'
|
||||
stop 3
|
||||
return
|
||||
else if(rc /= 8*N_states*n_tasks) then
|
||||
stop 'push'
|
||||
@ -164,6 +369,8 @@ subroutine push_pt2_results(zmq_socket_push, index, pt2, variance, norm, b, task
|
||||
|
||||
rc = f77_zmq_send( zmq_socket_push, variance, 8*N_states*n_tasks, ZMQ_SNDMORE)
|
||||
if (rc == -1) then
|
||||
print *, irp_here, ': error sending result'
|
||||
stop 4
|
||||
return
|
||||
else if(rc /= 8*N_states*n_tasks) then
|
||||
stop 'push'
|
||||
@ -172,6 +379,8 @@ subroutine push_pt2_results(zmq_socket_push, index, pt2, variance, norm, b, task
|
||||
|
||||
rc = f77_zmq_send( zmq_socket_push, norm, 8*N_states*n_tasks, ZMQ_SNDMORE)
|
||||
if (rc == -1) then
|
||||
print *, irp_here, ': error sending result'
|
||||
stop 5
|
||||
return
|
||||
else if(rc /= 8*N_states*n_tasks) then
|
||||
stop 'push'
|
||||
@ -180,35 +389,71 @@ subroutine push_pt2_results(zmq_socket_push, index, pt2, variance, norm, b, task
|
||||
|
||||
rc = f77_zmq_send( zmq_socket_push, task_id, n_tasks*4, ZMQ_SNDMORE)
|
||||
if (rc == -1) then
|
||||
print *, irp_here, ': error sending result'
|
||||
stop 6
|
||||
return
|
||||
else if(rc /= 4*n_tasks) then
|
||||
stop 'push'
|
||||
endif
|
||||
|
||||
|
||||
if (b%cur == 0) then
|
||||
|
||||
rc = f77_zmq_send( zmq_socket_push, b%cur, 4, 0)
|
||||
if (rc == -1) then
|
||||
print *, irp_here, ': error sending result'
|
||||
stop 7
|
||||
return
|
||||
else if(rc /= 4) then
|
||||
stop 'push'
|
||||
endif
|
||||
|
||||
else
|
||||
|
||||
rc = f77_zmq_send( zmq_socket_push, b%cur, 4, ZMQ_SNDMORE)
|
||||
if (rc == -1) then
|
||||
print *, irp_here, ': error sending result'
|
||||
stop 7
|
||||
return
|
||||
else if(rc /= 4) then
|
||||
stop 'push'
|
||||
endif
|
||||
|
||||
|
||||
rc = f77_zmq_send( zmq_socket_push, b%val, 8*b%cur, ZMQ_SNDMORE)
|
||||
if (rc == -1) then
|
||||
rc8 = f77_zmq_send8( zmq_socket_push, b%val, 8_8*int(b%cur,8), ZMQ_SNDMORE)
|
||||
if (rc8 == -1_8) then
|
||||
print *, irp_here, ': error sending result'
|
||||
stop 8
|
||||
return
|
||||
else if(rc /= 8*b%cur) then
|
||||
else if(rc8 /= 8_8*int(b%cur,8)) then
|
||||
stop 'push'
|
||||
endif
|
||||
|
||||
|
||||
rc = f77_zmq_send( zmq_socket_push, b%det, bit_kind*N_int*2*b%cur, 0)
|
||||
if (rc == -1) then
|
||||
rc8 = f77_zmq_send8( zmq_socket_push, b%det, int(bit_kind*N_int*2,8)*int(b%cur,8), 0)
|
||||
if (rc8 == -1_8) then
|
||||
print *, irp_here, ': error sending result'
|
||||
stop 9
|
||||
return
|
||||
else if(rc /= N_int*2*8*b%cur) then
|
||||
else if(rc8 /= int(N_int*2*8,8)*int(b%cur,8)) then
|
||||
stop 'push'
|
||||
endif
|
||||
|
||||
endif
|
||||
|
||||
end subroutine
|
||||
|
||||
subroutine push_pt2_results_async_recv(zmq_socket_push,mini,sending)
|
||||
use selection_types
|
||||
use f77_zmq
|
||||
implicit none
|
||||
|
||||
integer(ZMQ_PTR), intent(in) :: zmq_socket_push
|
||||
double precision, intent(out) :: mini
|
||||
logical, intent(inout) :: sending
|
||||
integer :: rc
|
||||
|
||||
if (.not.sending) return
|
||||
|
||||
! Activate is zmq_socket_push is a REQ
|
||||
IRP_IF ZMQ_PUSH
|
||||
@ -216,19 +461,31 @@ IRP_ELSE
|
||||
character*(2) :: ok
|
||||
rc = f77_zmq_recv( zmq_socket_push, ok, 2, 0)
|
||||
if (rc == -1) then
|
||||
print *, irp_here, ': error sending result'
|
||||
stop 10
|
||||
return
|
||||
else if ((rc /= 2).and.(ok(1:2) /= 'ok')) then
|
||||
print *, irp_here//': error in receiving ok'
|
||||
stop -1
|
||||
endif
|
||||
rc = f77_zmq_recv( zmq_socket_push, mini, 8, 0)
|
||||
if (rc == -1) then
|
||||
print *, irp_here, ': error sending result'
|
||||
stop 11
|
||||
return
|
||||
else if (rc /= 8) then
|
||||
print *, irp_here//': error in receiving mini'
|
||||
stop 12
|
||||
endif
|
||||
IRP_ENDIF
|
||||
|
||||
sending = .False.
|
||||
end subroutine
|
||||
|
||||
|
||||
|
||||
subroutine pull_pt2_results(zmq_socket_pull, index, pt2, variance, norm, task_id, n_tasks, b)
|
||||
use f77_zmq
|
||||
use selection_types
|
||||
use f77_zmq
|
||||
implicit none
|
||||
integer(ZMQ_PTR), intent(in) :: zmq_socket_pull
|
||||
double precision, intent(inout) :: pt2(N_states,*)
|
||||
@ -238,6 +495,7 @@ subroutine pull_pt2_results(zmq_socket_pull, index, pt2, variance, norm, task_id
|
||||
integer, intent(out) :: index(*)
|
||||
integer, intent(out) :: n_tasks, task_id(*)
|
||||
integer :: rc, rn, i
|
||||
integer*8 :: rc8
|
||||
|
||||
rc = f77_zmq_recv( zmq_socket_pull, n_tasks, 4, 0)
|
||||
if (rc == -1) then
|
||||
@ -295,27 +553,30 @@ subroutine pull_pt2_results(zmq_socket_pull, index, pt2, variance, norm, task_id
|
||||
stop 'pull'
|
||||
endif
|
||||
|
||||
rc = f77_zmq_recv( zmq_socket_pull, b%val, 8*b%cur, 0)
|
||||
if (rc == -1) then
|
||||
if (b%cur > 0) then
|
||||
|
||||
rc8 = f77_zmq_recv8( zmq_socket_pull, b%val, 8_8*int(b%cur,8), 0)
|
||||
if (rc8 == -1_8) then
|
||||
n_tasks = 1
|
||||
task_id(1) = 0
|
||||
else if(rc /= 8*b%cur) then
|
||||
else if(rc8 /= 8_8*int(b%cur,8)) then
|
||||
stop 'pull'
|
||||
endif
|
||||
|
||||
rc = f77_zmq_recv( zmq_socket_pull, b%det, bit_kind*N_int*2*b%cur, 0)
|
||||
if (rc == -1) then
|
||||
rc8 = f77_zmq_recv8( zmq_socket_pull, b%det, int(bit_kind*N_int*2,8)*int(b%cur,8), 0)
|
||||
if (rc8 == -1_8) then
|
||||
n_tasks = 1
|
||||
task_id(1) = 0
|
||||
else if(rc /= N_int*2*8*b%cur) then
|
||||
else if(rc8 /= int(N_int*2*8,8)*int(b%cur,8)) then
|
||||
stop 'pull'
|
||||
endif
|
||||
|
||||
endif
|
||||
|
||||
! Activate is zmq_socket_pull is a REP
|
||||
IRP_IF ZMQ_PUSH
|
||||
IRP_ELSE
|
||||
rc = f77_zmq_send( zmq_socket_pull, 'ok', 2, 0)
|
||||
rc = f77_zmq_send( zmq_socket_pull, 'ok', 2, ZMQ_SNDMORE)
|
||||
if (rc == -1) then
|
||||
n_tasks = 1
|
||||
task_id(1) = 0
|
||||
@ -323,6 +584,7 @@ IRP_ELSE
|
||||
print *, irp_here//': error in sending ok'
|
||||
stop -1
|
||||
endif
|
||||
rc = f77_zmq_send( zmq_socket_pull, b%mini, 8, 0)
|
||||
IRP_ENDIF
|
||||
|
||||
end subroutine
|
||||
|
@ -55,12 +55,13 @@ subroutine run_selection_slave(thread,iproc,energy)
|
||||
if (done) then
|
||||
ctask = ctask - 1
|
||||
else
|
||||
integer :: i_generator, N, subset
|
||||
integer :: i_generator, N, subset, bsize
|
||||
read(task,*) subset, i_generator, N
|
||||
if(buf%N == 0) then
|
||||
! Only first time
|
||||
call create_selection_buffer(N, N*2, buf)
|
||||
call create_selection_buffer(N, N*2, buf2)
|
||||
bsize = min(N, (elec_alpha_num * (mo_num-elec_alpha_num))**2)
|
||||
call create_selection_buffer(bsize, bsize*2, buf)
|
||||
! call create_selection_buffer(N, N*2, buf2)
|
||||
buffer_ready = .True.
|
||||
else
|
||||
ASSERT (N == buf%N)
|
||||
@ -83,9 +84,9 @@ subroutine run_selection_slave(thread,iproc,energy)
|
||||
end do
|
||||
if(ctask > 0) then
|
||||
call sort_selection_buffer(buf)
|
||||
call merge_selection_buffers(buf,buf2)
|
||||
! call merge_selection_buffers(buf,buf2)
|
||||
call push_selection_results(zmq_socket_push, pt2, variance, norm, buf, task_id(1), ctask)
|
||||
buf%mini = buf2%mini
|
||||
! buf%mini = buf2%mini
|
||||
pt2(:) = 0d0
|
||||
variance(:) = 0d0
|
||||
norm(:) = 0d0
|
||||
@ -108,7 +109,7 @@ subroutine run_selection_slave(thread,iproc,energy)
|
||||
call end_zmq_push_socket(zmq_socket_push,thread)
|
||||
if (buffer_ready) then
|
||||
call delete_selection_buffer(buf)
|
||||
call delete_selection_buffer(buf2)
|
||||
! call delete_selection_buffer(buf2)
|
||||
endif
|
||||
end subroutine
|
||||
|
||||
|
@ -153,27 +153,11 @@ subroutine select_singles_and_doubles(i_generator,hole_mask,particle_mask,fock_d
|
||||
logical :: monoAdo, monoBdo
|
||||
integer :: maskInd
|
||||
|
||||
double precision :: rss
|
||||
double precision, external :: memory_of_double, memory_of_int
|
||||
|
||||
PROVIDE psi_bilinear_matrix_columns_loc psi_det_alpha_unique psi_det_beta_unique
|
||||
PROVIDE psi_bilinear_matrix_rows psi_det_sorted_order psi_bilinear_matrix_order
|
||||
PROVIDE psi_bilinear_matrix_transp_rows_loc psi_bilinear_matrix_transp_columns
|
||||
PROVIDE psi_bilinear_matrix_transp_order psi_selectors_coef_transp
|
||||
|
||||
ii = min(N_det,(elec_alpha_num*(mo_num-elec_alpha_num))**2)
|
||||
rss = memory_of_double( &
|
||||
2*N_int*2*ii & ! minilist, fullminilist
|
||||
+ N_states*mo_num*mo_num & ! mat
|
||||
) + memory_of_int( &
|
||||
+ 2*ii & ! preinteresting, prefullinteresting,
|
||||
+ 2*ii & ! interesting, fullinteresting
|
||||
+ mo_num*mo_num/2 & ! banned
|
||||
+ mo_num/2 & ! bannedOrb
|
||||
)
|
||||
|
||||
call check_mem(rss,irp_here)
|
||||
|
||||
monoAdo = .true.
|
||||
monoBdo = .true.
|
||||
|
||||
@ -254,8 +238,8 @@ subroutine select_singles_and_doubles(i_generator,hole_mask,particle_mask,fock_d
|
||||
|
||||
allocate(preinteresting(0:32), prefullinteresting(0:32), &
|
||||
interesting(0:32), fullinteresting(0:32))
|
||||
preinteresting(0) = 0
|
||||
prefullinteresting(0) = 0
|
||||
preinteresting(:) = 0
|
||||
prefullinteresting(:) = 0
|
||||
|
||||
do i=1,N_int
|
||||
negMask(i,1) = not(psi_det_generators(i,1,i_generator))
|
||||
@ -658,13 +642,11 @@ subroutine splash_pq(mask, sp, det, i_gen, N_sel, bannedOrb, banned, mat, intere
|
||||
negMask(i,2) = not(mask(i,2))
|
||||
end do
|
||||
|
||||
do i=1, N_sel ! interesting(0)
|
||||
!i = interesting(ii)
|
||||
do i=1, N_sel
|
||||
if (interesting(i) < 0) then
|
||||
stop 'prefetch interesting(i) and det(i)'
|
||||
endif
|
||||
|
||||
|
||||
mobMask(1,1) = iand(negMask(1,1), det(1,1,i))
|
||||
mobMask(1,2) = iand(negMask(1,2), det(1,2,i))
|
||||
nt = popcnt(mobMask(1, 1)) + popcnt(mobMask(1, 2))
|
||||
@ -695,10 +677,10 @@ subroutine splash_pq(mask, sp, det, i_gen, N_sel, bannedOrb, banned, mat, intere
|
||||
end if
|
||||
end if
|
||||
|
||||
if (interesting(i) >= i_gen) then
|
||||
call bitstring_to_list_in_selection(mobMask(1,1), p(1,1), p(0,1), N_int)
|
||||
call bitstring_to_list_in_selection(mobMask(1,2), p(1,2), p(0,2), N_int)
|
||||
|
||||
if (interesting(i) >= i_gen) then
|
||||
perMask(1,1) = iand(mask(1,1), not(det(1,1,i)))
|
||||
perMask(1,2) = iand(mask(1,2), not(det(1,2,i)))
|
||||
do j=2,N_int
|
||||
@ -717,9 +699,14 @@ subroutine splash_pq(mask, sp, det, i_gen, N_sel, bannedOrb, banned, mat, intere
|
||||
else
|
||||
call get_d0(det(1,1,i), phasemask, bannedOrb, banned, mat, mask, h, p, sp, psi_selectors_coef_transp(1, interesting(i)))
|
||||
end if
|
||||
else
|
||||
if(nt == 4) call past_d2(banned, p, sp)
|
||||
if(nt == 3) call past_d1(bannedOrb, p)
|
||||
else if(nt == 4) then
|
||||
call bitstring_to_list_in_selection(mobMask(1,1), p(1,1), p(0,1), N_int)
|
||||
call bitstring_to_list_in_selection(mobMask(1,2), p(1,2), p(0,2), N_int)
|
||||
call past_d2(banned, p, sp)
|
||||
else if(nt == 3) then
|
||||
call bitstring_to_list_in_selection(mobMask(1,1), p(1,1), p(0,1), N_int)
|
||||
call bitstring_to_list_in_selection(mobMask(1,2), p(1,2), p(0,2), N_int)
|
||||
call past_d1(bannedOrb, p)
|
||||
end if
|
||||
end do
|
||||
|
||||
@ -1279,4 +1266,4 @@ subroutine bitstring_to_list_in_selection( string, list, n_elements, Nint)
|
||||
enddo
|
||||
|
||||
end
|
||||
|
||||
!
|
||||
|
@ -2,6 +2,10 @@
|
||||
subroutine create_selection_buffer(N, siz_, res)
|
||||
use selection_types
|
||||
implicit none
|
||||
BEGIN_DOC
|
||||
! Allocates the memory for a selection buffer.
|
||||
! The arrays have dimension siz_ and the maximum number of elements is N
|
||||
END_DOC
|
||||
|
||||
integer, intent(in) :: N, siz_
|
||||
type(selection_buffer), intent(out) :: res
|
||||
@ -33,6 +37,11 @@ subroutine delete_selection_buffer(b)
|
||||
if (associated(b%val)) then
|
||||
deallocate(b%val)
|
||||
endif
|
||||
NULLIFY(b%det)
|
||||
NULLIFY(b%val)
|
||||
b%cur = 0
|
||||
b%mini = 0.d0
|
||||
b%N = 0
|
||||
end
|
||||
|
||||
|
||||
@ -65,7 +74,7 @@ subroutine merge_selection_buffers(b1, b2)
|
||||
type(selection_buffer), intent(inout) :: b2
|
||||
integer(bit_kind), pointer :: detmp(:,:,:)
|
||||
double precision, pointer :: val(:)
|
||||
integer :: i, i1, i2, k, nmwen
|
||||
integer :: i, i1, i2, k, nmwen, sze
|
||||
if (b1%cur == 0) return
|
||||
do while (b1%val(b1%cur) > b2%mini)
|
||||
b1%cur = b1%cur-1
|
||||
@ -76,9 +85,10 @@ subroutine merge_selection_buffers(b1, b2)
|
||||
nmwen = min(b1%N, b1%cur+b2%cur)
|
||||
double precision :: rss
|
||||
double precision, external :: memory_of_double
|
||||
rss = memory_of_double(size(b1%val)) + 2*N_int*memory_of_double(size(b1%det,3))
|
||||
sze = max(size(b1%val), size(b2%val))
|
||||
rss = memory_of_double(sze) + 2*N_int*memory_of_double(sze)
|
||||
call check_mem(rss,irp_here)
|
||||
allocate( val(size(b1%val)), detmp(N_int, 2, size(b1%det,3)) )
|
||||
allocate(val(sze), detmp(N_int, 2, sze))
|
||||
i1=1
|
||||
i2=1
|
||||
do i=1,nmwen
|
||||
|
@ -53,7 +53,7 @@ subroutine run_slave_main
|
||||
|
||||
PROVIDE psi_det psi_coef threshold_generators state_average_weight mpi_master
|
||||
PROVIDE zmq_state N_det_selectors pt2_stoch_istate N_det pt2_e0_denominator
|
||||
PROVIDE N_det_generators N_states N_states_diag pt2_e0_denominator
|
||||
PROVIDE N_det_generators N_states N_states_diag pt2_e0_denominator mpi_rank
|
||||
|
||||
IRP_IF MPI
|
||||
call MPI_BARRIER(MPI_COMM_WORLD, ierr)
|
||||
@ -161,18 +161,17 @@ subroutine run_slave_main
|
||||
call mpi_print('zmq_get_psi')
|
||||
IRP_ENDIF
|
||||
if (zmq_get_psi(zmq_to_qp_run_socket,1) == -1) cycle
|
||||
IRP_IF MPI_DEBUG
|
||||
call mpi_print('zmq_get_dvector energy')
|
||||
IRP_ENDIF
|
||||
if (zmq_get_dvector(zmq_to_qp_run_socket,1,'energy',energy,N_states_diag) == -1) cycle
|
||||
|
||||
call wall_time(t1)
|
||||
call write_double(6,(t1-t0),'Broadcast time')
|
||||
|
||||
!---
|
||||
call omp_set_nested(.True.)
|
||||
call davidson_slave_tcp(0)
|
||||
call omp_set_nested(.False.)
|
||||
print *, mpi_rank, ': Davidson done'
|
||||
!---
|
||||
|
||||
IRP_IF MPI
|
||||
call MPI_BARRIER(MPI_COMM_WORLD, ierr)
|
||||
if (ierr /= MPI_SUCCESS) then
|
||||
@ -223,14 +222,6 @@ subroutine run_slave_main
|
||||
if (zmq_get_dvector(zmq_to_qp_run_socket,1,'state_average_weight',state_average_weight,N_states) == -1) cycle
|
||||
pt2_e0_denominator(1:N_states) = energy(1:N_states)
|
||||
SOFT_TOUCH pt2_e0_denominator state_average_weight pt2_stoch_istate threshold_generators
|
||||
if (mpi_master) then
|
||||
print *, 'N_det', N_det
|
||||
print *, 'N_det_generators', N_det_generators
|
||||
print *, 'N_det_selectors', N_det_selectors
|
||||
print *, 'pt2_e0_denominator', pt2_e0_denominator
|
||||
print *, 'pt2_stoch_istate', pt2_stoch_istate
|
||||
print *, 'state_average_weight', state_average_weight
|
||||
endif
|
||||
|
||||
call wall_time(t1)
|
||||
call write_double(6,(t1-t0),'Broadcast time')
|
||||
@ -241,17 +232,78 @@ subroutine run_slave_main
|
||||
endif
|
||||
IRP_ENDIF
|
||||
|
||||
|
||||
IRP_IF MPI_DEBUG
|
||||
call mpi_print('Entering OpenMP section')
|
||||
IRP_ENDIF
|
||||
if (.true.) then
|
||||
!$OMP PARALLEL PRIVATE(i)
|
||||
integer :: nproc_target, ii
|
||||
double precision :: mem_collector, mem, rss
|
||||
|
||||
call resident_memory(rss)
|
||||
|
||||
nproc_target = nthreads_pt2
|
||||
ii = min(N_det, (elec_alpha_num*(mo_num-elec_alpha_num))**2)
|
||||
|
||||
do
|
||||
mem = rss + & !
|
||||
nproc_target * 8.d0 * & ! bytes
|
||||
( 0.5d0*pt2_n_tasks_max & ! task_id
|
||||
+ 64.d0*pt2_n_tasks_max & ! task
|
||||
+ 3.d0*pt2_n_tasks_max*N_states & ! pt2, variance, norm
|
||||
+ 1.d0*pt2_n_tasks_max & ! i_generator, subset
|
||||
+ 3.d0*(N_int*2.d0*ii+ ii) & ! selection buffer
|
||||
+ 1.d0*(N_int*2.d0*ii+ ii) & ! sort selection buffer
|
||||
+ 2.0d0*(ii) & ! preinteresting, interesting,
|
||||
! prefullinteresting, fullinteresting
|
||||
+ 2.0d0*(N_int*2*ii) & ! minilist, fullminilist
|
||||
+ 1.0d0*(N_states*mo_num*mo_num) & ! mat
|
||||
) / 1024.d0**3
|
||||
|
||||
if (nproc_target == 0) then
|
||||
call check_mem(mem,irp_here)
|
||||
nproc_target = 1
|
||||
exit
|
||||
endif
|
||||
|
||||
if (mem+rss < qp_max_mem) then
|
||||
exit
|
||||
endif
|
||||
|
||||
nproc_target = nproc_target - 1
|
||||
|
||||
enddo
|
||||
|
||||
if (N_det > 100000) then
|
||||
|
||||
if (mpi_master) then
|
||||
print *, 'N_det', N_det
|
||||
print *, 'N_det_generators', N_det_generators
|
||||
print *, 'N_det_selectors', N_det_selectors
|
||||
print *, 'pt2_e0_denominator', pt2_e0_denominator
|
||||
print *, 'pt2_stoch_istate', pt2_stoch_istate
|
||||
print *, 'state_average_weight', state_average_weight
|
||||
print *, 'Number of threads', nproc_target
|
||||
endif
|
||||
|
||||
if (h0_type == 'SOP') then
|
||||
PROVIDE det_to_occ_pattern
|
||||
endif
|
||||
|
||||
PROVIDE global_selection_buffer
|
||||
if (mpi_master) then
|
||||
print *, 'Running PT2'
|
||||
endif
|
||||
!$OMP PARALLEL PRIVATE(i) NUM_THREADS(nproc_target+1)
|
||||
i = omp_get_thread_num()
|
||||
call run_pt2_slave(0,i,pt2_e0_denominator)
|
||||
!$OMP END PARALLEL
|
||||
endif
|
||||
FREE state_average_weight
|
||||
print *, mpi_rank, ': PT2 done'
|
||||
print *, '-------'
|
||||
|
||||
endif
|
||||
endif
|
||||
|
||||
IRP_IF MPI
|
||||
call MPI_BARRIER(MPI_COMM_WORLD, ierr)
|
||||
|
@ -10,7 +10,7 @@ subroutine run_stochastic_cipsi
|
||||
|
||||
double precision :: rss
|
||||
double precision, external :: memory_of_double
|
||||
PROVIDE H_apply_buffer_allocated
|
||||
PROVIDE H_apply_buffer_allocated N_generators_bitmask
|
||||
|
||||
threshold_generators = 1.d0
|
||||
SOFT_TOUCH threshold_generators
|
||||
|
@ -2,34 +2,39 @@
|
||||
cis
|
||||
===
|
||||
|
||||
This module contains a CIS program.
|
||||
This module contains a |CIS| program.
|
||||
|
||||
The user point of view
|
||||
----------------------
|
||||
|
||||
The :command:`cis` program performs the CI of the ROHF-like + all single excitations on top of it.
|
||||
This program can be very useful to :
|
||||
The :ref:`cis` program performs the CI to obtain the ROHF reference + all
|
||||
single excitations on top of it. This program can be very useful to:
|
||||
|
||||
* **Ground state calculations**: generate a guess for the ground state wave function if one is not sure that the :c:func:`scf` program gave the lowest SCF solution. In combination with :c:func:`save_natorb` it can produce new |MOs| in order to reperform an :c:func:`scf` optimization.
|
||||
* **Ground state calculations**: generate a guess for the ground state wave
|
||||
function if one is not sure that the :ref:`scf` program gave the lowest |SCF|
|
||||
solution. In combination with :ref:`save_natorb` it can produce new |MOs| in
|
||||
order to reperform an :ref:`scf` optimization.
|
||||
|
||||
* **Excited states calculations**: generate guess for all the :option:`determinants n_states` wave functions, that will be used by the :c:func:`fci` program.
|
||||
* **Excited states calculations**: generate guesses for all the
|
||||
:option:`determinants n_states` wave functions, that will be used by the
|
||||
:ref:`fci` program.
|
||||
|
||||
|
||||
The main keywords/options to be used are:
|
||||
|
||||
* :option:`determinants n_states`: number of states to consider for the |CIS| calculation
|
||||
|
||||
* :option:`determinants s2_eig` : force all states to have the desired value of :math:`S^2`
|
||||
* :option:`determinants s2_eig`: force all states to have the desired value of |S^2|
|
||||
|
||||
* :option:`determinants expected_s2` : desired value of :math:`S^2`
|
||||
* :option:`determinants expected_s2`: desired value of |S^2|
|
||||
|
||||
|
||||
|
||||
|
||||
The programmer point of view
|
||||
----------------------------
|
||||
The programmer's point of view
|
||||
------------------------------
|
||||
|
||||
This module have been built by setting the following rules:
|
||||
This module was built by setting the following rules:
|
||||
|
||||
* The only generator determinant is the Hartree-Fock (single-reference method)
|
||||
* All generated singly excited determinants are included in the wave function (no perturbative
|
||||
|
@ -12,25 +12,22 @@ program cis
|
||||
! This program can be useful in many cases:
|
||||
!
|
||||
!
|
||||
! Ground state calculation
|
||||
! ------------------------
|
||||
! 1. Ground state calculation
|
||||
!
|
||||
! To be sure to have the lowest |SCF| solution, perform an :ref:`scf`
|
||||
! (see the :ref:`hartree_fock` module), then a :ref:`cis`, save
|
||||
! the natural orbitals (see :ref:`save_natorb`) and re-run an
|
||||
! :ref:`scf` optimization from this |MO| guess.
|
||||
! (see the :ref:`module_hartree_fock` module), then a :ref:`cis`, save the
|
||||
! natural orbitals (see :ref:`save_natorb`) and re-run an :ref:`scf`
|
||||
! optimization from this |MO| guess.
|
||||
!
|
||||
!
|
||||
! Excited states calculations
|
||||
! ---------------------------
|
||||
! 2. Excited states calculations
|
||||
!
|
||||
! The lowest excited states are much likely to be dominated by
|
||||
! single-excitations. Therefore, running a :ref:`cis` will save
|
||||
! the `n_states` lowest states within the |CIS| space in the |EZFIO|
|
||||
! single-excitations. Therefore, running a :ref:`cis` will save the
|
||||
! `n_states` lowest states within the |CIS| space in the |EZFIO|
|
||||
! directory, which can afterwards be used as guess wave functions for
|
||||
! a further multi-state |FCI| calculation if :option:`determinants read_wf`
|
||||
! is set to |true| before running the :ref:`fci`
|
||||
! executable.
|
||||
! a further multi-state |FCI| calculation if :option:`determinants
|
||||
! read_wf` is set to |true| before running the :ref:`fci` executable.
|
||||
!
|
||||
!
|
||||
! If :option:`determinants s2_eig` is set to |true|, the |CIS|
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user