1
0
mirror of https://github.com/TREX-CoE/trexio.git synced 2024-11-03 20:54:07 +01:00

Merge pull request #108 from TREX-CoE/jastrow-mu

Jastrow mu
This commit is contained in:
Anthony Scemama 2023-01-07 18:41:38 +01:00 committed by GitHub
commit b13fac2012
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 98 additions and 34 deletions

View File

@ -98,6 +98,31 @@ case $CC in
;; ;;
esac esac
# Check if `cp -r -n` works, otherwise use `cp -r`
AC_CHECK_PROGS(CP_PROG, [cp])
AC_MSG_CHECKING([for cp -r -n option])
AC_RUN_IFELSE(
[AC_LANG_PROGRAM([
#include <unistd.h>
],[
execl("/bin/sh", "sh", "-c", "mkdir tmpdir1 && \
touch tmpdir1/test_file && \
$CP_PROG -r -n tmpdir1 tmpdir2 && \
exec ls tmpdir2/test_file", NULL);
])],
[ rm -rf tmpdir1 tmpdir2
CP_COMMAND="\"$CP_PROG\", \"-r\", \"-n\""
AC_MSG_RESULT([yes])],
[ rm -rf tmpdir1 tmpdir2
CP_COMMAND="\"$CP_PROG\", \"-r\""
AC_MSG_RESULT([no])],
[ rm -rf tmpdir1 tmpdir2
CP_COMMAND="\"$CP_PROG\", \"-r\""
AC_MSG_RESULT([no])]
)
AC_DEFINE_UNQUOTED([CP_COMMAND], [$CP_COMMAND], [Command used for trexio_cp])
## --------- ## ---------
## Libraries ## Libraries
@ -175,6 +200,9 @@ AC_TYPE_INT64_T
AC_TYPE_SIZE_T AC_TYPE_SIZE_T
AC_TYPE_UINT32_T AC_TYPE_UINT32_T
AC_TYPE_UINT64_T AC_TYPE_UINT64_T
AC_TYPE_PID_T
AC_C_CONST
AC_C_INLINE
# Checks for library functions. # Checks for library functions.
# AC_FUNC_MALLOC # AC_FUNC_MALLOC

View File

@ -1590,7 +1590,7 @@ def _inquire(file_name: str) -> bool:
** File copy ** File copy
~trexio_cp~ copies a TREXIO file using =/bin/cp=. ~trexio_cp~ copies a TREXIO file using =cp=.
**Input parameters:** **Input parameters:**
1) ~source_file_name~ - string containing the name of the source file 1) ~source_file_name~ - string containing the name of the source file
@ -1650,24 +1650,14 @@ trexio_cp(const char* source, const char* dest)
/* Call cp */ /* Call cp */
#ifndef CP_COMMAND
#define CP_COMMAND "cp", "-r"
#endif
pid_t pid = fork(); pid_t pid = fork();
if (pid == 0) { if (pid == 0) {
switch (back_end_local) { execlp("cp", CP_COMMAND, source, dest, (char *)0);
case TREXIO_TEXT:
execl("/bin/cp", "/bin/cp", "-r", "-n", source, dest, (char *)0);
case TREXIO_HDF5:
#ifdef HAVE_HDF5
execl("/bin/cp", "/bin/cp", "-n", source, dest, (char *)0);
#else
return TREXIO_FILE_ERROR;
#endif
/*
case TREXIO_JSON:
execl("/bin/cp", "/bin/cp", source, dest, (char *)0);
,*/
default:
return TREXIO_FILE_ERROR;
}
} else if (pid < 0) { } else if (pid < 0) {
return TREXIO_FILE_ERROR; return TREXIO_FILE_ERROR;
} else { } else {

View File

@ -1132,12 +1132,7 @@ power = [
The Jastrow factor is an $N$-electron function to which the CI The Jastrow factor is an $N$-electron function to which the CI
expansion is multiplied: $\Psi = \Phi \times \exp(J)$, expansion is multiplied: $\Psi = \Phi \times \exp(J)$,
where
\[
J(\mathbf{r},\mathbf{R}) = J_{\text{eN}}(\mathbf{r},\mathbf{R}) + J_{\text{ee}}(\mathbf{r}) + J_{\text{eeN}}(\mathbf{r},\mathbf{R})
\]
In the following, we use the notations $r_{ij} = |\mathbf{r}_i - \mathbf{r}_j|$ and In the following, we use the notations $r_{ij} = |\mathbf{r}_i - \mathbf{r}_j|$ and
$R_{i\alpha} = |\mathbf{r}_i - \mathbf{R}_\alpha|$, where indices $R_{i\alpha} = |\mathbf{r}_i - \mathbf{R}_\alpha|$, where indices
$i$ and $j$ correspond to electrons and $\alpha$ to nuclei. $i$ and $j$ correspond to electrons and $\alpha$ to nuclei.
@ -1152,7 +1147,12 @@ power = [
*** CHAMP *** CHAMP
The first form of Jastrow factor is the one used in The first form of Jastrow factor is the one used in
the [[https://trex-coe.eu/trex-quantum-chemistry-codes/champ][CHAMP]] program. the [[https://trex-coe.eu/trex-quantum-chemistry-codes/champ][CHAMP]] program:
\[
J(\mathbf{r},\mathbf{R}) = J_{\text{eN}}(\mathbf{r},\mathbf{R}) + J_{\text{ee}}(\mathbf{r}) + J_{\text{eeN}}(\mathbf{r},\mathbf{R})
\]
$J_{\text{eN}}$ contains electron-nucleus terms: $J_{\text{eN}}$ contains electron-nucleus terms:
@ -1197,25 +1197,71 @@ power = [
g_\alpha(r) = e^{-\kappa_\alpha\, r}. g_\alpha(r) = e^{-\kappa_\alpha\, r}.
\] \]
*** mu *** Mu
The "mu" Jastrow factor has only a single parameter $\mu$ for the [[https://aip.scitation.org/doi/10.1063/5.0044683][Mu-Jastrow]] is based on a one-parameter correlation factor that has
[[https://doi.org/10.1063/5.0044683][electron-electron term]]: been introduced in the context of transcorrelated methods. This
correlation factor imposes the electron-electron cusp and it is
built such that the leading order in $1/r_{12}$ of the effective
two-electron potential reproduces the long-range interaction of the
range-separated density functional theory. Its analytical
expression reads
\[
J(\mathbf{r}, \mathbf{R}) = J_{\text{eeN}}(\mathbf{r}, \mathbf{R}) +
J_{\text{eN}}(\mathbf{r}, \mathbf{R})
\].
The electron-electron cusp is incorporated in the three-body term.
\[
J_\text{eeN} (\mathbf{r}, \mathbf{R}) =
\sum_{i=1}^{N_\text{elec}} \sum_{j=1}^{i-1} \, u\left(\mu, r_{ij}\right) \,
\Pi_{\alpha=1}^{N_{\text{nucl}}} \, E_\alpha({R}_{i\alpha}) \, E_\alpha({R}_{j\alpha})
\]
$u$ is an electron-electron function given by the symetric function
\[
u\left(\mu, r\right) = \frac{r}{2} \, \left[ 1 - \text{erf}(\mu\, r) \right] - \frac{1}{2 \, \mu \, \sqrt{\pi}} \exp \left[ -(\mu \, r)^2 \right].
\]
This electron-electron term is tuned by the parameter $\mu$ which
controls the depth and the range of the Coulomb hole between
electrons.
An envelope function has been introduced to cancel out the Jastrow
effects between two-electrons when they are both close to a nucleus
(to perform a frozen-core calculation). The envelope function is
given by
\[
E_\alpha(R) = 1 - \exp\left( - \gamma_{\alpha} \, R^2 \right).
\]
In particular, if the parameters $\gamma_\alpha$ tend to zero, the
Mu-Jastrow factor becomes a two-body Jastrow factor:
\[ \[
J_{\text{ee}}(\mathbf{r}) = J_{\text{ee}}(\mathbf{r}) =
\sum_{i=1}^{N_\text{elec}} \sum_{j=1}^{i-1} r_{ij} \sum_{i=1}^{N_\text{elec}} \sum_{j=1}^{i-1} \, u\left(\mu, r_{ij}\right)
\left( 1 - \text{erf}(\mu\, r_{ij})\right) - \frac{1}{\mu\sqrt{\pi}}
e^{-(\mu\,r_{ij})^2}
\] \]
# It was then updated for frozen-core calculations by introducing a and for large $\gamma_\alpha$ it becomes zero.
# set of electron-electron-nucleus terms with one parameter per nucleus:
To increase the flexibility of the Jastrow and improve the
electron density the following electron-nucleus term is added
# \[ \[
# J_{\text{eeN}}(\mathbf{r}) = J_{\text{eN}}(\mathbf{r},\mathbf{R}) = \sum_{i=1}^{N_\text{elec}} \sum_{\alpha=1}^{N_\text{nucl}} \,
# \] \left[ \exp\left( a_{\alpha} R_{i \alpha}^2 \right) - 1\right].
\]
The parameter $\mu$ is stored in the ~ee~ array, the parameters
$\gamma_\alpha$ are stored in the ~een~ array, and the parameters
$a_\alpha$ are stored in the ~en~ array.
*** Table of values *** Table of values
#+name: jastrow #+name: jastrow