1
0
mirror of https://github.com/TREX-CoE/trexio.git synced 2024-12-23 04:43:57 +01:00

Merge branch 'master' into unit-testing

This commit is contained in:
q-posev 2021-06-22 14:46:39 +02:00
commit 411334e2ee
7 changed files with 81 additions and 54 deletions

View File

@ -55,13 +55,13 @@ lib_LTLIBRARIES = src/libtrexio.la
SOURCES = \ SOURCES = \
$(trexio_h) \ $(trexio_h) \
$(srcdir)/src/trexio.c \ src/trexio.c \
$(srcdir)/src/trexio_private.h \ src/trexio_private.h \
$(srcdir)/src/trexio_s.h \ src/trexio_s.h \
$(srcdir)/src/trexio_hdf5.c \ src/trexio_hdf5.c \
$(srcdir)/src/trexio_hdf5.h \ src/trexio_hdf5.h \
$(srcdir)/src/trexio_text.c \ src/trexio_text.c \
$(srcdir)/src/trexio_text.h src/trexio_text.h
ORG_FILES = \ ORG_FILES = \
src/templates_front/templator_front.org \ src/templates_front/templator_front.org \
@ -99,6 +99,7 @@ check_PROGRAMS = $(TESTS)
# specify common options for all tests # specify common options for all tests
LDADD = src/libtrexio.la LDADD = src/libtrexio.la
# in principal, specifying -no-install (see example below) is not mandatory # in principal, specifying -no-install (see example below) is not mandatory
# for the tests to compile and pass, but the compilations itself differs # for the tests to compile and pass, but the compilations itself differs
tests_io_num_hdf5_LDFLAGS = -no-install tests_io_num_hdf5_LDFLAGS = -no-install
@ -124,18 +125,37 @@ tests_test_f_SOURCES = $(test_trexio_f) tests/test_f.f90
tests_test_f_LDFLAGS = -no-install tests_test_f_LDFLAGS = -no-install
HTML_FILES = docs/trexio.css \
docs/index.html \
docs/Sparse.html \
docs/templator_hdf5.html \
docs/trex.html \
docs/README.html \
docs/templator_front.html \
docs/templator_text.html
htmldir = $(docdir)
dist_html_DATA = $(HTML_FILES)
$(HTML_FILES): docs/index.html
if TREXIO_DEVEL if TREXIO_DEVEL
CLEANFILES += $(SOURCES) $(trexio_f) $(trexio_h) CLEANFILES += $(SOURCES) $(trexio_f) $(trexio_h)
BUILT_SOURCES = $(SOURCES) $(trexio_f) $(test_trexio_f) BUILT_SOURCES = $(SOURCES) $(trexio_f) $(test_trexio_f)
$(SOURCES): $(trexio_f) $(SOURCES): $(trexio_f)
src/trexio.c: $(trexio_h) src/trexio.c: $(trexio_h)
$(trexio_f): $(ORG_FILES) $(trexio_f): $(ORG_FILES)
cd $(srcdir)/tools && ./build_trexio.sh cd $(srcdir)/tools && ./build_trexio.sh
docs/index.html: $(SOURCES) $(srcdir)/src/README.org
cd $(srcdir)/tools && ./build_doc.sh
cppcheck: cppcheck.out cppcheck: cppcheck.out
cat cppcheck.out cat cppcheck.out

View File

@ -2,7 +2,7 @@
# Process this file with autoconf to produce a configure script. # Process this file with autoconf to produce a configure script.
AC_PREREQ([2.69]) AC_PREREQ([2.69])
AC_INIT([trexio], [0.2.0], [https://github.com/TREX-CoE/trexio/issues]) AC_INIT([trexio], [0.3.0], [https://github.com/TREX-CoE/trexio/issues])
AM_INIT_AUTOMAKE([subdir-objects color-tests parallel-tests silent-rules 1.11]) AM_INIT_AUTOMAKE([subdir-objects color-tests parallel-tests silent-rules 1.11])
AM_MAINTAINER_MODE() AM_MAINTAINER_MODE()
LT_INIT LT_INIT
@ -72,7 +72,7 @@ AC_CHECK_HEADERS([fcntl.h inttypes.h stdint.h stdbool.h stdlib.h string.h unistd
PKG_HDF5="" PKG_HDF5=""
AX_LIB_HDF5([serial]) AX_LIB_HDF5()
if test "x${with_hdf5}" = xno; then if test "x${with_hdf5}" = xno; then
AC_MSG_WARN([ AC_MSG_WARN([

View File

@ -4,6 +4,7 @@
------------------ ------------------
- [[./trex.html][Data stored with TREXIO]]
- [[./templator_front.html][Front end API]] - [[./templator_front.html][Front end API]]
- [[./templator_hdf5.html][HDF5 back end]] - [[./templator_hdf5.html][HDF5 back end]]
- [[./templator_text.html][TEXT back end]] - [[./templator_text.html][TEXT back end]]

View File

@ -1643,6 +1643,7 @@ trexio_read_$group_dset$_low (trexio_t* const file, char* dset, const uint32_t m
,*/ ,*/
} }
return TREXIO_FAILURE;
} }
trexio_exit_code trexio_exit_code
@ -1803,7 +1804,6 @@ trexio_write_$group_dset$ (trexio_t* const file, const char** dset, const uint32
FREE(str_compiled); FREE(str_compiled);
return rc; return rc;
} }
#+end_src #+end_src
@ -1831,6 +1831,7 @@ trexio_has_$group_dset$ (trexio_t* const file)
break; break;
,*/ ,*/
} }
return TREXIO_FAILURE; return TREXIO_FAILURE;
} }
#+end_src #+end_src
@ -1968,6 +1969,7 @@ trexio_read_$group_str$ (trexio_t* const file, char* const str, const uint32_t m
,*/ ,*/
} }
return TREXIO_FAILURE;
} }
#+end_src #+end_src
@ -2000,6 +2002,7 @@ trexio_write_$group_str$ (trexio_t* const file, const char* str, const uint32_t
,*/ ,*/
} }
return TREXIO_FAILURE;
} }
#+end_src #+end_src

View File

@ -289,15 +289,6 @@ trexio_hdf5_read_$group_dset$ (trexio_t* const file, $group_dset_dtype$* const $
const trexio_hdf5_t* f = (const trexio_hdf5_t*) file; const trexio_hdf5_t* f = (const trexio_hdf5_t*) file;
herr_t status;
int rrank;
// get the rank of the dataset in a file
status = H5LTget_dataset_ndims (f->$group$_group, $GROUP_DSET$_NAME, &rrank);
if (status < 0) return TREXIO_FAILURE;
if (rrank != (int) rank) return TREXIO_INVALID_ARG_3;
// open the dataset to get its dimensions // open the dataset to get its dimensions
hid_t dset_id = H5Dopen(f->$group$_group, $GROUP_DSET$_NAME, H5P_DEFAULT); hid_t dset_id = H5Dopen(f->$group$_group, $GROUP_DSET$_NAME, H5P_DEFAULT);
if (dset_id <= 0) return TREXIO_INVALID_ID; if (dset_id <= 0) return TREXIO_INVALID_ID;
@ -306,28 +297,37 @@ trexio_hdf5_read_$group_dset$ (trexio_t* const file, $group_dset_dtype$* const $
hsize_t* ddims = CALLOC( (int) rank, hsize_t); hsize_t* ddims = CALLOC( (int) rank, hsize_t);
if (ddims == NULL) return TREXIO_FAILURE; if (ddims == NULL) return TREXIO_FAILURE;
// read dimensions from the existing dataset // get the dataspace of the dataset
status = H5LDget_dset_dims(dset_id, ddims); hid_t dspace_id = H5Dget_space(dset_id);
// get the rank and dimensions of the dataset
int rrank = H5Sget_simple_extent_dims(dspace_id, ddims, NULL);
H5Dclose(dset_id); // check that dimensions are consistent
if (status < 0) { if (rrank != (int) rank) {
FREE(ddims); FREE(ddims);
return TREXIO_FAILURE; H5Sclose(dspace_id);
H5Dclose(dset_id);
return TREXIO_INVALID_ARG_3;
} }
for (uint32_t i=0; i<rank; ++i){ for (uint32_t i=0; i<rank; ++i){
if (ddims[i] != dims[i]) { if (ddims[i] != dims[i]) {
FREE(ddims); FREE(ddims);
H5Sclose(dspace_id);
H5Dclose(dset_id);
return TREXIO_INVALID_ARG_4; return TREXIO_INVALID_ARG_4;
} }
} }
FREE(ddims); FREE(ddims);
H5Sclose(dspace_id);
H5Dclose(dset_id);
/* High-level H5LT API. No need to deal with dataspaces and datatypes */ /* High-level H5LT API. No need to deal with dataspaces and datatypes */
status = H5LTread_dataset(f->$group$_group, herr_t status = H5LTread_dataset(f->$group$_group,
$GROUP_DSET$_NAME, $GROUP_DSET$_NAME,
H5T_$GROUP_DSET_H5_DTYPE$, H5T_$GROUP_DSET_H5_DTYPE$,
$group_dset$); $group_dset$);
if (status < 0) return TREXIO_FAILURE; if (status < 0) return TREXIO_FAILURE;
return TREXIO_SUCCESS; return TREXIO_SUCCESS;

View File

@ -99,10 +99,11 @@ function main() {
# Create documentation # Create documentation
cd ${SRC} cd ${SRC}
for dir in ${SRC}/templates_*/ for dir in ${SRC}/templates_*/ ${TREXIO_ROOT}/
do do
dir=${dir%*/} dir=${dir%*/}
echo ${dir} echo ${dir}
OLDPWD=$PWD
cd ${dir} cd ${dir}
for i in *.org for i in *.org
do do
@ -110,7 +111,7 @@ function main() {
echo "======= ${i} =======" echo "======= ${i} ======="
extract_doc ${i} ${dir} extract_doc ${i} ${dir}
done done
cd .. cd $OLDPWD
done done
echo echo

View File

@ -1,5 +1,7 @@
#+TITLE: TREX Configuration file #+TITLE: TREX Configuration file
#+STARTUP: latexpreview #+STARTUP: latexpreview
#+SETUPFILE: docs/theme.setup
All the quantities are saved in atomic units. All the quantities are saved in atomic units.
The dimensions of the arrays in the tables below are given in The dimensions of the arrays in the tables below are given in
@ -11,12 +13,12 @@ In Fortran, the arrays are 1-based and in most other languages the
arrays are 0-base. Hence, we introduce the ~index~ type which is an arrays are 0-base. Hence, we introduce the ~index~ type which is an
1-based ~int~ in the Fortran interface and 0-based otherwise. 1-based ~int~ in the Fortran interface and 0-based otherwise.
#+begin_src python :tangle trex.json #+begin_src python :tangle trex.json
{ {
#+end_src #+end_src
* Metadata * Metadata
As we expect our files to be archived in open-data repositories, we As we expect our files to be archived in open-data repositories, we
need to give the possibility to the users to store some metadata need to give the possibility to the users to store some metadata
inside the files. We propose to store the list of names of the codes inside the files. We propose to store the list of names of the codes
@ -175,7 +177,7 @@ arrays are 0-base. Hence, we introduce the ~index~ type which is an
R_s(\mathbf{r}) = \mathcal{N}_s \vert\mathbf{r}-\mathbf{R}_A\vert^{n_s} R_s(\mathbf{r}) = \mathcal{N}_s \vert\mathbf{r}-\mathbf{R}_A\vert^{n_s}
\sum_{k=1}^{N_{\text{prim}}} a_{ks}\, f_{ks}(\gamma_{ks},p)\, \sum_{k=1}^{N_{\text{prim}}} a_{ks}\, f_{ks}(\gamma_{ks},p)\,
\exp \left( - \gamma_{ks} \exp \left( - \gamma_{ks}
\vert \mathbf{r}-\mathbf{R}_A \vert ^p \right). \vert \mathbf{r}-\mathbf{R}_A \vert ^p \right).
\] \]
In the case of Gaussian functions, $n_s$ is always zero. In the case of Gaussian functions, $n_s$ is always zero.
@ -190,7 +192,7 @@ arrays are 0-base. Hence, we introduce the ~index~ type which is an
combination of /normalized/ primitives. This implies that a normalization combination of /normalized/ primitives. This implies that a normalization
constant for the primitive $ks$ needs to be computed and stored. If constant for the primitive $ks$ needs to be computed and stored. If
this normalization factor is not required, $f_{ks}=1$. this normalization factor is not required, $f_{ks}=1$.
Some codes assume that the basis function are normalized. This Some codes assume that the basis function are normalized. This
implies the computation of an extra normalization factor, $\mathcal{N}_s$. implies the computation of an extra normalization factor, $\mathcal{N}_s$.
If the the basis function is not considered normalized, $\mathcal{N}_s=1$. If the the basis function is not considered normalized, $\mathcal{N}_s=1$.
@ -208,10 +210,10 @@ arrays are 0-base. Hence, we introduce the ~index~ type which is an
| ~shell_prim_num~ | ~int~ | ~(basis.num)~ | Number of primitives in the shell ($N_{\text{prim}}$) | | ~shell_prim_num~ | ~int~ | ~(basis.num)~ | Number of primitives in the shell ($N_{\text{prim}}$) |
| ~shell_factor~ | ~float~ | ~(basis.num)~ | Normalization factor of the shell ($\mathcal{N}_s$) | | ~shell_factor~ | ~float~ | ~(basis.num)~ | Normalization factor of the shell ($\mathcal{N}_s$) |
| ~shell_prim_index~ | ~index~ | ~(basis.num)~ | Index of the first primitive in the complete list | | ~shell_prim_index~ | ~index~ | ~(basis.num)~ | Index of the first primitive in the complete list |
| ~exponent~ | ~float~ | ~(basis.prim_num)~ | Exponents of the primitives ($\gamma_{ks}) | | ~exponent~ | ~float~ | ~(basis.prim_num)~ | Exponents of the primitives ($\gamma_{ks}$) |
| ~coefficient~ | ~float~ | ~(basis.prim_num)~ | Coefficients of the primitives ($a_{ks}$) | | ~coefficient~ | ~float~ | ~(basis.prim_num)~ | Coefficients of the primitives ($a_{ks}$) |
| ~prim_factor~ | ~float~ | ~(basis.prim_num)~ | Normalization coefficients for the primitives ($f_{ks}$) | | ~prim_factor~ | ~float~ | ~(basis.prim_num)~ | Normalization coefficients for the primitives ($f_{ks}$) |
#+CALL: json(data=basis, title="basis") #+CALL: json(data=basis, title="basis")
#+RESULTS: #+RESULTS:
@ -221,12 +223,12 @@ arrays are 0-base. Hence, we introduce the ~index~ type which is an
"type" : [ "str" , [] ] "type" : [ "str" , [] ]
, "num" : [ "int" , [] ] , "num" : [ "int" , [] ]
, "prim_num" : [ "int" , [] ] , "prim_num" : [ "int" , [] ]
, "nucleus_index" : [ "index" , [ "nucleus.num" ] ] , "nucleus_index" : [ "index", [ "nucleus.num" ] ]
, "nucleus_shell_num" : [ "int" , [ "nucleus.num" ] ] , "nucleus_shell_num" : [ "int" , [ "nucleus.num" ] ]
, "shell_ang_mom" : [ "int" , [ "basis.num" ] ] , "shell_ang_mom" : [ "int" , [ "basis.num" ] ]
, "shell_prim_num" : [ "int" , [ "basis.num" ] ] , "shell_prim_num" : [ "int" , [ "basis.num" ] ]
, "shell_factor" : [ "float", [ "basis.num" ] ] , "shell_factor" : [ "float", [ "basis.num" ] ]
, "shell_prim_index" : [ "index" , [ "basis.num" ] ] , "shell_prim_index" : [ "index", [ "basis.num" ] ]
, "exponent" : [ "float", [ "basis.prim_num" ] ] , "exponent" : [ "float", [ "basis.prim_num" ] ]
, "coefficient" : [ "float", [ "basis.prim_num" ] ] , "coefficient" : [ "float", [ "basis.prim_num" ] ]
, "prim_factor" : [ "float", [ "basis.prim_num" ] ] , "prim_factor" : [ "float", [ "basis.prim_num" ] ]
@ -324,9 +326,9 @@ prim_factor =
shell, as in the GAMESS convention where shell, as in the GAMESS convention where
$\mathcal{N}_{x^2} \ne \mathcal{N}_{xy}$ because $\mathcal{N}_{x^2} \ne \mathcal{N}_{xy}$ because
\[ \left[ \iiint \left(x-X_A \right)^2 R_{\theta(i)} \[ \left[ \iiint \left(x-X_A \right)^2 R_{\theta(i)}
(\mathbf{r}) dx\, dy\, dz \right]^{-1/2} \ne (\mathbf{r}) dx\, dy\, dz \right]^{-1/2} \ne
\left[ \iiint \left( x-X_A \right) \left( y-Y_A \right) R_{\theta(i)} \left[ \iiint \left( x-X_A \right) \left( y-Y_A \right) R_{\theta(i)}
(\mathbf{r}) dx\, dy\, dz \right]^{-1/2}. \] (\mathbf{r}) dx\, dy\, dz \right]^{-1/2}. \]
In such a case, one should set the normalization of the shell (in In such a case, one should set the normalization of the shell (in
the [[Basis set][Basis set]] section) to $\mathcal{N}_{z^2}$, which is the the [[Basis set][Basis set]] section) to $\mathcal{N}_{z^2}$, which is the
@ -353,7 +355,7 @@ prim_factor =
} , } ,
#+end_src #+end_src
:end: :end:
** One-electron integrals ** One-electron integrals
:PROPERTIES: :PROPERTIES:
:CUSTOM_ID: ao_one_e :CUSTOM_ID: ao_one_e
@ -362,7 +364,7 @@ prim_factor =
- \[ \hat{V}_{\text{ne}} = \sum_{A=1}^{N_\text{nucl}} - \[ \hat{V}_{\text{ne}} = \sum_{A=1}^{N_\text{nucl}}
\sum_{i=1}^{N_\text{elec}} \frac{-Z_A }{\vert \mathbf{R}_A - \sum_{i=1}^{N_\text{elec}} \frac{-Z_A }{\vert \mathbf{R}_A -
\mathbf{r}_i \vert} \] : electron-nucleus attractive potential, \mathbf{r}_i \vert} \] : electron-nucleus attractive potential,
- \[ \hat{T}_{\text{e}} = - \[ \hat{T}_{\text{e}} =
\sum_{i=1}^{N_\text{elec}} -\frac{1}{2}\hat{\Delta}_i \] : electronic kinetic energy \sum_{i=1}^{N_\text{elec}} -\frac{1}{2}\hat{\Delta}_i \] : electronic kinetic energy
- $\hat{h} = \hat{T}_\text{e} + \hat{V}_\text{ne} + - $\hat{h} = \hat{T}_\text{e} + \hat{V}_\text{ne} +
\hat{V}_\text{ecp,l} + \hat{V}_\text{ecp,nl}$ : core electronic Hamiltonian \hat{V}_\text{ecp,l} + \hat{V}_\text{ecp,nl}$ : core electronic Hamiltonian
@ -375,8 +377,8 @@ prim_factor =
| ~overlap~ | ~float~ | ~(ao.num, ao.num)~ | $\langle p \vert q \rangle$ | | ~overlap~ | ~float~ | ~(ao.num, ao.num)~ | $\langle p \vert q \rangle$ |
| ~kinetic~ | ~float~ | ~(ao.num, ao.num)~ | $\langle p \vert \hat{T}_e \vert q \rangle$ | | ~kinetic~ | ~float~ | ~(ao.num, ao.num)~ | $\langle p \vert \hat{T}_e \vert q \rangle$ |
| ~potential_n_e~ | ~float~ | ~(ao.num, ao.num)~ | $\langle p \vert \hat{V}_{\text{ne}} \vert q \rangle$ | | ~potential_n_e~ | ~float~ | ~(ao.num, ao.num)~ | $\langle p \vert \hat{V}_{\text{ne}} \vert q \rangle$ |
| ~ecp_local~ | ~float~ | ~(ao.num, ao.num)~ | $\langle p \vert \hat{V}_{\text{ecp,l} \vert q \rangle$ | | ~ecp_local~ | ~float~ | ~(ao.num, ao.num)~ | $\langle p \vert \hat{V}_{\text{ecp,l}} \vert q \rangle$ |
| ~ecp_non_local~ | ~float~ | ~(ao.num, ao.num)~ | $\langle p \vert \hat{V}_{\text{ecp,nl} \vert q \rangle$ | | ~ecp_non_local~ | ~float~ | ~(ao.num, ao.num)~ | $\langle p \vert \hat{V}_{\text{ecp,nl}} \vert q \rangle$ |
| ~core_hamiltonian~ | ~float~ | ~(ao.num, ao.num)~ | $\langle p \vert \hat{h} \vert q \rangle$ | | ~core_hamiltonian~ | ~float~ | ~(ao.num, ao.num)~ | $\langle p \vert \hat{h} \vert q \rangle$ |
#+CALL: json(data=ao_1e_int, title="ao_1e_int") #+CALL: json(data=ao_1e_int, title="ao_1e_int")
@ -409,7 +411,7 @@ prim_factor =
notation. notation.
# TODO: Physicist / Chemist functions # TODO: Physicist / Chemist functions
- \[ \hat{W}_{\text{ee}} = \sum_{i=2}^{N_\text{elec}} \sum_{j=1}^{i-1} \frac{1}{\vert \mathbf{r}_i - \mathbf{r}_j \vert} \] : electron-electron repulsive potential operator. - \[ \hat{W}_{\text{ee}} = \sum_{i=2}^{N_\text{elec}} \sum_{j=1}^{i-1} \frac{1}{\vert \mathbf{r}_i - \mathbf{r}_j \vert} \] : electron-electron repulsive potential operator.
- \[ \hat{W}^{lr}_{\text{ee}} = \sum_{i=2}^{N_\text{elec}} - \[ \hat{W}^{lr}_{\text{ee}} = \sum_{i=2}^{N_\text{elec}}
\sum_{j=1}^{i-1} \frac{\text{erf}(\vert \mathbf{r}_i - \sum_{j=1}^{i-1} \frac{\text{erf}(\vert \mathbf{r}_i -
@ -460,15 +462,15 @@ prim_factor =
** One-electron integrals ** One-electron integrals
The operators as the same as those defined in the The operators as the same as those defined in the
[[ao_one_e][AO one-electron integrals section]]. Here, the integrals are given in [[#ao_one_e][AO one-electron integrals section]]. Here, the integrals are given in
the basis of molecular orbitals. the basis of molecular orbitals.
#+NAME: mo_1e_int #+NAME: mo_1e_int
| ~overlap~ | ~float~ | ~(mo.num, mo.num)~ | $\langle i \vert j \rangle$ | | ~overlap~ | ~float~ | ~(mo.num, mo.num)~ | $\langle i \vert j \rangle$ |
| ~kinetic~ | ~float~ | ~(mo.num, mo.num)~ | $\langle i \vert \hat{T}_e \vert j \rangle$ | | ~kinetic~ | ~float~ | ~(mo.num, mo.num)~ | $\langle i \vert \hat{T}_e \vert j \rangle$ |
| ~potential_n_e~ | ~float~ | ~(mo.num, mo.num)~ | $\langle i \vert \hat{V}_{\text{ne}} \vert j \rangle$ | | ~potential_n_e~ | ~float~ | ~(mo.num, mo.num)~ | $\langle i \vert \hat{V}_{\text{ne}} \vert j \rangle$ |
| ~ecp_local~ | ~float~ | ~(mo.num, mo.num)~ | $\langle i \vert \hat{V}_{\text{ecp,l} \vert j \rangle$ | | ~ecp_local~ | ~float~ | ~(mo.num, mo.num)~ | $\langle i \vert \hat{V}_{\text{ecp,l}} \vert j \rangle$ |
| ~ecp_non_local~ | ~float~ | ~(mo.num, mo.num)~ | $\langle i \vert \hat{V}_{\text{ecp,nl} \vert j \rangle$ | | ~ecp_non_local~ | ~float~ | ~(mo.num, mo.num)~ | $\langle i \vert \hat{V}_{\text{ecp,nl}} \vert j \rangle$ |
| ~core_hamiltonian~ | ~float~ | ~(mo.num, mo.num)~ | $\langle i \vert \hat{h} \vert j \rangle$ | | ~core_hamiltonian~ | ~float~ | ~(mo.num, mo.num)~ | $\langle i \vert \hat{h} \vert j \rangle$ |
#+CALL: json(data=mo_1e_int, title="mo_1e_int") #+CALL: json(data=mo_1e_int, title="mo_1e_int")
@ -490,7 +492,7 @@ prim_factor =
** Two-electron integrals ** Two-electron integrals
The operators as the same as those defined in the The operators as the same as those defined in the
[[ao_two_e][AO two-electron integrals section]]. Here, the integrals are given in [[#ao_one_e][AO one-electron integrals section]]. Here, the integrals are given in
the basis of molecular orbitals. the basis of molecular orbitals.
#+NAME: mo_2e_int #+NAME: mo_2e_int
@ -511,7 +513,7 @@ prim_factor =
* TODO Slater determinants * TODO Slater determinants
* TODO Reduced density matrices * TODO Reduced density matrices
#+NAME: rdm #+NAME: rdm
| ~one_e~ | ~float~ | ~(mo.num, mo.num)~ | | ~one_e~ | ~float~ | ~(mo.num, mo.num)~ |
| ~one_e_up~ | ~float~ | ~(mo.num, mo.num)~ | | ~one_e_up~ | ~float~ | ~(mo.num, mo.num)~ |
@ -532,12 +534,12 @@ prim_factor =
#+end_src #+end_src
:end: :end:
* Appendix :noexport: * Appendix
** Python script from table to json ** Python script from table to json
#+NAME: json #+NAME: json
#+begin_src python :var data=nucleus title="nucleus" last=0 :results output drawer #+begin_src python :var data=nucleus title="nucleus" last=0 :results output drawer
print("""#+begin_src python :tangle trex.json""") print("""#+begin_src python :tangle trex.json""")
print(""" "%s": {"""%(title)) print(""" "%s": {"""%(title))
indent = " " indent = " "
f1 = 0 ; f2 = 0 ; f3 = 0 f1 = 0 ; f2 = 0 ; f3 = 0