1
0
mirror of https://github.com/TREX-CoE/qmckl.git synced 2024-11-20 13:02:42 +01:00

Merge branch 'master' of github.com:TREX-CoE/qmckl

This commit is contained in:
Anthony Scemama 2021-10-28 17:59:24 +02:00
commit da8469eb38
49 changed files with 71075 additions and 646 deletions

View File

@ -24,7 +24,7 @@ jobs:
run: ./autogen.sh
- name: ./configure
run: QMCKL_DEVEL=1 ./configure --enable-silent-rules --enable-maintainer-mode
run: QMCKL_DEVEL=1 ./configure --enable-silent-rules --enable-maintainer-mode --without-trexio
- name: make
run: make -j 8 html

View File

@ -14,29 +14,49 @@ jobs:
steps:
- uses: actions/checkout@v2
- name: install dependencies
- name: Install dependencies
run: sudo apt-get install emacs autoconf libhdf5-dev
- name: install trexio
- name: Install trexio
run: |
wget https://github.com/TREX-CoE/trexio/releases/download/v1.0/trexio-1.0.0.tar.gz
tar -zxf trexio-1.0.0.tar.gz
cd trexio-1.0.0
./configure
export VERSION=1.1.0
wget https://github.com/TREX-CoE/trexio/releases/download/v${VERSION}/trexio-${VERSION}.tar.gz
tar -zxf trexio-${VERSION}.tar.gz
cd trexio-${VERSION}
./configure --prefix=/usr
make -j 8
sudo make install
- name: Run test
sudo make install
- name: Build
run: |
./autogen.sh
QMCKL_DEVEL=1 ./configure --enable-silent-rules --enable-maintainer-mode --enable-debug
make -j 8
- name: Run test
run: |
make -j check
make distcheck
- name: Archive test log file
if: failure()
uses: actions/upload-artifact@v2
with:
name: test-suite.log
name: test-report
path: test-suite.log
- name: Dist test
run: |
make distcheck
- name: Archive test log file
if: failure()
uses: actions/upload-artifact@v2
with:
name: dist-report
path: test-suite.log
# x86_macos:
#
# runs-on: macos-latest
@ -54,9 +74,9 @@ jobs:
# wget https://github.com/TREX-CoE/trexio/releases/download/v1.0/trexio-1.0.0.tar.gz
# tar -zxf trexio-1.0.0.tar.gz
# cd trexio-1.0.0
# ./configure
# ./configure
# make -j 8
# sudo make install
# sudo make install
# - name: Run test
# run: |
# ./autogen.sh

61
.github/workflows/vfc_test_workflow.yml vendored Normal file
View File

@ -0,0 +1,61 @@
# This workflow will be executed when master is updated:
# it will run the configured tests and upload the results on vfc_ci_master.
name: "Verificarlo CI (master)"
on:
# Triggers the workflow when master is updated
push:
branches: [ master ]
workflow_dispatch:
jobs:
run_verificarlo_tests:
runs-on: ubuntu-latest
container: verificarlo/verificarlo
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 0
- name: Install dependencies
run: |
ln -s /usr/bin/python3 /usr/bin/python
apt update
apt -y install emacs pkg-config wget libhdf5-dev
- name: Install trexio
run: |
export VERSION=1.1.0
wget https://github.com/TREX-CoE/trexio/releases/download/v${VERSION}/trexio-${VERSION}.tar.gz
tar -zxf trexio-${VERSION}.tar.gz
cd trexio-${VERSION}
./configure --prefix=/usr
make -j 8
sudo make install
- name: Run tests
run: vfc_ci test -g -r
- name: Commit test results
run: |
git_hash=$(git rev-parse --short "$GITHUB_SHA")
git config --local user.email "action@github.com"
git config --local user.name "GitHub Action"
git checkout vfc_ci_master
mkdir -p vfcruns
mv *.vfcrun.h5 vfcruns
git add vfcruns/*
git commit -m "[auto] New test results for commit ${git_hash}"
git push
- name: Upload raw results as artifacts
uses: actions/upload-artifact@v2
with:
name: ${{github.sha}}.vfcraw
path: ./*.vfcraw.h5

3
.gitignore vendored
View File

@ -13,6 +13,8 @@ config.status
config.sub
configure
generated.mk
.vfcwrapper.o
libtool
m4/libtool.m4
m4/ltoptions.m4
m4/ltsugar.m4
@ -20,6 +22,7 @@ m4/ltversion.m4
m4/lt~obsolete.m4
qmckl-*.tar.gz
qmckl.mod
qmckl_probes_f.mod
qmckl.pc
stamp-h1
tools/compile

View File

@ -30,7 +30,6 @@
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
ACLOCAL_AMFLAGS = -I m4
VERSION_MAJOR = @VERSION_MAJOR@
@ -38,7 +37,7 @@ VERSION_MINOR = @VERSION_MINOR@
VERSION_PATCH = @VERSION_PATCH@
SUBDIRS =
CLEANFILES = qmckl.mod
CLEANFILES = qmckl.mod qmckl_verificarlo_f.mod
EXTRA_DIST =
pkgconfigdir = $(libdir)/pkgconfig
@ -54,19 +53,23 @@ src_qmckl_f = src/qmckl_f.f90
src_qmckl_fo = src/qmckl_f.o
header_tests = tests/chbrclf.h tests/n2.h
fortrandir = $(datadir)/$(PACKAGE_NAME)/fortran/
fortrandir = $(datadir)/qmckl/fortran/
dist_fortran_DATA = $(qmckl_f)
AM_CPPFLAGS = -I$(srcdir)/src -I$(srcdir)/include
AM_CPPFLAGS = -I$(srcdir)/src -I$(srcdir)/include
AM_CPPFLAGS += -DQMCKL_TEST_DIR="\"$(abs_srcdir)/share/qmckl/test_data/\""
lib_LTLIBRARIES = src/libqmckl.la
src_libqmckl_la_SOURCES = $(qmckl_h) $(src_qmckl_f) $(C_FILES) $(F_FILES) $(H_PRIVATE_FUNC_FILES) $(H_PRIVATE_TYPE_FILES) $(header_tests)
export qmckl_f qmckl_h srcdir
CLEANFILES+=$(test_qmckl_f) $(src_qmckl_f) $(test_qmckl_o) $(src_qmckl_o)
CLEANFILES+=$(test_qmckl_f) $(src_qmckl_f) $(test_qmckl_o) $(src_qmckl_o)
htmlize_el=share/doc/qmckl/html/htmlize.el
htmlize_el=$(srcdir)/share/doc/qmckl/html/htmlize.el
include generated.mk
@ -105,6 +108,11 @@ doc: html text
if QMCKL_DEVEL
if VFC_CI
AM_LDFLAGS=-lvfc_probes -lvfc_probes_f
endif
dist_src_DATA = $(ORG_FILES) $(TANGLED_FILES) $(EXPORTED_FILES)
BUILT_SOURCES = $(C_FILES) $(F_FILES) $(FH_FUNC_FILES) $(FH_TYPE_FILES) $(H_FUNC_FILES) $(H_TYPE_FILES) $(H_PRIVATE_FUNC_FILES) $(H_PRIVATE_TYPE_FILES) $(qmckl_f) $(qmckl_h) $(header_tests)
@ -112,17 +120,17 @@ BUILT_SOURCES = $(C_FILES) $(F_FILES) $(FH_FUNC_FILES) $(FH_TYPE_FILES) $(H_FUNC
CLEANFILES += $(BUILT_SOURCES) $(C_TEST_FILES) $(F_TEST_FILES) $(TANGLED_FILES) $(C_TEST_FILES) $(F_TEST_FILES) $(qmckl_f) $(qmckl_h) $(HTML_FILES) $(TEXT_FILES) share/doc/qmckl/html/index.html $(EXPORTED_FILES) $(header_tests)
EXTRA_DIST += \
tools/build_doc.sh \
tools/build_makefile.py \
tools/build_qmckl_f.sh \
tools/build_qmckl_h.sh \
tools/config_doc.el \
tools/config_tangle.el \
tools/init.el \
tools/install_htmlize.sh \
tools/lib.org \
tools/tangle.sh \
tools/theme.setup
$(srcdir)/tools/build_doc.sh \
$(srcdir)/tools/build_makefile.py \
$(srcdir)/tools/build_qmckl_f.sh \
$(srcdir)/tools/build_qmckl_h.sh \
$(srcdir)/tools/config_doc.el \
$(srcdir)/tools/config_tangle.el \
$(srcdir)/tools/init.el \
$(srcdir)/tools/install_htmlize.sh \
$(srcdir)/tools/lib.org \
$(srcdir)/tools/tangle.sh \
$(srcdir)/tools/theme.setup
## Silent
@ -134,7 +142,7 @@ export_verbose_0 = @echo " DOC $@";
tangle_verbose = $(tangle_verbose_@AM_V@)
tangle_verbose_ = $(tangle_verbose_@AM_DEFAULT_V@)
tangle_verbose_0 = @echo " TANGLE $<";
tangle_verbose_0 = @echo " ORG $<";
cat_h_verbose = $(cat_h_verbose_@AM_V@)
cat_h_verbose_ = $(cat_h_verbose_@AM_DEFAULT_V@)
@ -156,14 +164,14 @@ $(htmlize_el):
$(srcdir)/tools/install_htmlize.sh $(htmlize_el)
tests/chbrclf.h: $(qmckl_h)
tests/n2.h: $(qmckl_h)
generated.mk: $(ORG_FILES)
$(PYTHON) $(srcdir)/tools/build_makefile.py
cppcheck: cppcheck.out
cppcheck.out: $(qmckl_h)
cd src/ && \
cppcheck --addon=cert -q --error-exitcode=0 \
@ -173,7 +181,6 @@ cppcheck.out: $(qmckl_h)
--language=c --std=c99 -rp --platform=unix64 \
-I../include *.c *.h 2>../$@
.PHONY: cppcheck
endif

View File

@ -46,6 +46,23 @@ sudo make install
sudo make installcheck
```
## Verificarlo CI
Since Verificarlo should not be a dependency of QMCkl, all Verificarlo
functions are called only when the support is explicitely enabled (and ignored
by the preprocessor otherwise). To enable vfc_ci support, the library should be
configured with the following command :
```
QMCKL_DEVEL=1 ./configure --prefix=$PWD/_install \ --enable-silent-rules --enable-maintainer-mode --enable-vfc_ci --host=x86_64 \ CC="verificarlo-f" FC="verificarlo-f"
```
where CC and FC are set to verificarlo-f, and support is explicitely enabled
with the --enable-vfc_ci flag. Configuring the library with the "standard"
command will cause all calls to Verificarlo related functions to be ignored,
and the library will be built as usual.
------------------------------
![European flag](https://trex-coe.eu/sites/default/files/inline-images/euflag.jpg)

View File

@ -1,21 +0,0 @@
* Set up CI on Travis
* Write tests
* malloc/free : Parameters for accelerators?
We should define qmckl_malloc and qmckl_free just to give the
possibility of the HPC implementations to define how they allocate the
memory (on CPU or GPU, using alternatives to malloc/free, etc).
A possibility could be to pass the id of a NUMA domain as a parameter of
qmckl_malloc, where the domain id is something obtained from the
context.
* TRANSA, TRANSB
* Performance info
* Benchmark interpolation of basis functions
* Complex numbers
* Adjustable number for derivatives (1,2,3)
* Put pictures
* Make the Makefile part of the documented code ?
* Put the data-flow graph in the code.

View File

@ -4,24 +4,24 @@
# QMCkl - Quantum Monte Carlo kernel library
#
# BSD 3-Clause License
#
#
# Copyright (c) 2020, TREX Center of Excellence
# All rights reserved.
#
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
#
# 1. Redistributions of source code must retain the above copyright notice, this
# list of conditions and the following disclaimer.
#
#
# 2. Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
#
#
# 3. Neither the name of the copyright holder nor the names of its
# contributors may be used to endorse or promote products derived from
# this software without specific prior written permission.
#
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
@ -49,9 +49,9 @@ AC_CONFIG_MACRO_DIR([m4])
VERSION_MAJOR=`echo ${PACKAGE_VERSION} | cut -d. -f1`
VERSION_MINOR=`echo ${PACKAGE_VERSION} | cut -d. -f2`
VERSION_PATCH=`echo ${PACKAGE_VERSION} | cut -d. -f3 | cut -d- -f1`
AC_DEFINE_UNQUOTED(QMCKL_VERSION_MAJOR, [$VERSION_MAJOR], [major version])
AC_DEFINE_UNQUOTED(QMCKL_VERSION_MINOR, [$VERSION_MINOR], [minor version])
AC_DEFINE_UNQUOTED(QMCKL_VERSION_PATCH, [$VERSION_PATCH], [patch version])
AC_DEFINE_UNQUOTED([QMCKL_VERSION_MAJOR], [$VERSION_MAJOR], [major version])
AC_DEFINE_UNQUOTED([QMCKL_VERSION_MINOR], [$VERSION_MINOR], [minor version])
AC_DEFINE_UNQUOTED([QMCKL_VERSION_PATCH], [$VERSION_PATCH], [patch version])
AC_SUBST([VERSION_MAJOR])
AC_SUBST([VERSION_MINOR])
AC_SUBST([VERSION_PATCH])
@ -92,12 +92,30 @@ AC_CHECK_LIB([pthread], [pthread_create])
# OpenMP
#AC_ARG_WITH(openmp, [AC_HELP_STRING([--with-openmp],[enable OpenMP])], with_omp=$withval, with_omp=no)
#if test "x$with_omp" = xyes; then
# AC_DEFINE([USE_OPENMP], [1], [Define to use OpenMP threading.])
# AC_DEFINE([HAVE_OPENMP], [1], [Define to use OpenMP threading.])
# AX_OPENMP([],
# [AC_MSG_ERROR([Could not find OpenMP flags; configure with --without-openmp])])
# CFLAGS="${CFLAGS} ${OPENMP_CFLAGS}"
#fi
# TREXIO
AC_ARG_WITH(trexio, [AC_HELP_STRING([--without-trexio],[disable support for TREXIO])],
with_trexio=$withval, with_trexio=yes)
AS_IF([test "x$with_trexio" != xno], [
AC_DEFINE([HAVE_TREXIO], [1], [Define if your have libtrexio])
ARGS="${ARGS} trexio"
AC_CHECK_LIB([trexio], [trexio_open],
[],
[AS_IF([test "x$with_trexio" != xcheck],
[PKG_CHECK_MODULES([TREXIO], [trexio]) ])
])
])
PKG_CFLAGS="$PKG_CFLAGS $TREXIO_CFLAGS"
PKG_LIBS="$PKG_LIBS $TREXIO_LIBS"
## BLAS
#AX_BLAS([], [AC_MSG_ERROR([BLAS was not found.])])
@ -167,7 +185,7 @@ AC_TYPE_UINT64_T
# Checks for library functions.
## qmckl
AC_FUNC_MALLOC
# AC_FUNC_MALLOC
AC_CHECK_FUNCS([memset strerror])
# Development mode
@ -196,11 +214,35 @@ if test "x${QMCKL_DEVEL}" != "x"; then
fi
# Enable Verificarlo tests
AC_ARG_ENABLE([vfc_ci],
[ --enable-vfc_ci Build the library with vfc_ci support],
[case "${enableval}" in
yes) vfc_ci=true && FCFLAGS="-D VFC_CI $FCFLAGS" && CFLAGS="-D VFC_CI $CFLAGS";;
no) vfc_ci=false ;;
*) AC_MSG_ERROR([bad value ${enableval} for --enable_vfc_ci]) ;;
esac],[vfc_ci=false])
AM_CONDITIONAL([VFC_CI], [test x$vfc_ci = xtrue])
# Enable Fortran preprocessor
if test "$FC" = "gfortran"; then
AC_MSG_NOTICE(gfortran detected)
# Arguments order is important here
FCFLAGS="-cpp $FCFLAGS"
fi
if test "$FC" = "verificarlo-f"; then
AC_MSG_NOTICE(verificarlo-f detected)
# Arguments order is important here
FCFLAGS="-Mpreprocess $FCFLAGS"
fi
#PKG-CONFIG
#mkl-dynamic-lp64-seq
LIBS="${LAPACK_LIBS} ${BLAS_LIBS} ${LIBS}"
PKG_LIBS="${PKG_LIBS} ${LIBS}"
PKG_LIBS="$PKG_LIBS $LIBS"
LIBS="$LAPACK_LIBS $BLAS_LIBS $PKG_LIBS"
CFLAGS="$CFLAGS $PKG_CFLAGS"
AC_SUBST([PKG_LIBS])
AC_SUBST([PKG_CFLAGS])
AC_SUBST([HAS_CPPCHECK])
@ -237,4 +279,3 @@ where the optional <target> is:
check - run tests
install - install ${PACKAGE_NAME}
--------------------------------------------------"

View File

@ -1,160 +0,0 @@
/* include/config.h.in. Generated from configure.ac by autoheader. */
/* Define to turn on debugging checks */
#undef DEBUG
/* Define when using the profiler tool */
#undef ENABLE_PROF
/* Define to 1 if your Fortran compiler doesn't accept -c and -o together. */
#undef FC_NO_MINUS_C_MINUS_O
/* Define to 1 if you have the <assert.h> header file. */
#undef HAVE_ASSERT_H
/* Define to 1 if you have the <dlfcn.h> header file. */
#undef HAVE_DLFCN_H
/* Define to 1 if you have the <errno.h> header file. */
#undef HAVE_ERRNO_H
/* Define to 1 if you have the <inttypes.h> header file. */
#undef HAVE_INTTYPES_H
/* Define to 1 if you have the `efence' library (-lefence). */
#undef HAVE_LIBEFENCE
/* Define to 1 if you have the `m' library (-lm). */
#undef HAVE_LIBM
/* Define to 1 if you have the `pthread' library (-lpthread). */
#undef HAVE_LIBPTHREAD
/* Define to 1 if your system has a GNU libc compatible `malloc' function, and
to 0 otherwise. */
#undef HAVE_MALLOC
/* Define to 1 if you have the <malloc.h> header file. */
#undef HAVE_MALLOC_H
/* Define to 1 if you have the <math.h> header file. */
#undef HAVE_MATH_H
/* Define to 1 if you have the <memory.h> header file. */
#undef HAVE_MEMORY_H
/* Define to 1 if you have the `memset' function. */
#undef HAVE_MEMSET
/* Define to 1 if you have the <pthread.h> header file. */
#undef HAVE_PTHREAD_H
/* Define to 1 if you have the <stdbool.h> header file. */
#undef HAVE_STDBOOL_H
/* Define to 1 if you have the <stdint.h> header file. */
#undef HAVE_STDINT_H
/* Define to 1 if you have the <stdio.h> header file. */
#undef HAVE_STDIO_H
/* Define to 1 if you have the <stdlib.h> header file. */
#undef HAVE_STDLIB_H
/* Define to 1 if you have the `strerror' function. */
#undef HAVE_STRERROR
/* Define to 1 if you have the <strings.h> header file. */
#undef HAVE_STRINGS_H
/* Define to 1 if you have the <string.h> header file. */
#undef HAVE_STRING_H
/* Define to 1 if you have the <sys/stat.h> header file. */
#undef HAVE_SYS_STAT_H
/* Define to 1 if you have the <sys/types.h> header file. */
#undef HAVE_SYS_TYPES_H
/* Define to 1 if you have the <unistd.h> header file. */
#undef HAVE_UNISTD_H
/* Define to 1 if the system has the type `_Bool'. */
#undef HAVE__BOOL
/* Define to the sub-directory where libtool stores uninstalled libraries. */
#undef LT_OBJDIR
/* Define to use debugging malloc/free */
#undef MALLOC_TRACE
/* Define to 1 if your C compiler doesn't accept -c and -o together. */
#undef NO_MINUS_C_MINUS_O
/* Name of package */
#undef PACKAGE
/* Define to the address where bug reports for this package should be sent. */
#undef PACKAGE_BUGREPORT
/* Define to the full name of this package. */
#undef PACKAGE_NAME
/* Define to the full name and version of this package. */
#undef PACKAGE_STRING
/* Define to the one symbol short name of this package. */
#undef PACKAGE_TARNAME
/* Define to the home page for this package. */
#undef PACKAGE_URL
/* Define to the version of this package. */
#undef PACKAGE_VERSION
/* major version */
#undef QMCKL_VERSION_MAJOR
/* minor version */
#undef QMCKL_VERSION_MINOR
/* patch version */
#undef QMCKL_VERSION_PATCH
/* Define to 1 if you have the ANSI C header files. */
#undef STDC_HEADERS
/* Version number of package */
#undef VERSION
/* Define for Solaris 2.5.1 so the uint32_t typedef from <sys/synch.h>,
<pthread.h>, or <semaphore.h> is not used. If the typedef were allowed, the
#define below would cause a syntax error. */
#undef _UINT32_T
/* Define for Solaris 2.5.1 so the uint64_t typedef from <sys/synch.h>,
<pthread.h>, or <semaphore.h> is not used. If the typedef were allowed, the
#define below would cause a syntax error. */
#undef _UINT64_T
/* Define to the type of a signed integer type of width exactly 32 bits if
such a type exists and the standard includes do not define it. */
#undef int32_t
/* Define to the type of a signed integer type of width exactly 64 bits if
such a type exists and the standard includes do not define it. */
#undef int64_t
/* Define to rpl_malloc if the replacement function should be used. */
#undef malloc
/* Define to `unsigned int' if <sys/types.h> does not define. */
#undef size_t
/* Define to the type of an unsigned integer type of width exactly 32 bits if
such a type exists and the standard includes do not define it. */
#undef uint32_t
/* Define to the type of an unsigned integer type of width exactly 64 bits if
such a type exists and the standard includes do not define it. */
#undef uint64_t

View File

@ -16,14 +16,23 @@ grep TITLE $(cat table_of_contents) | tr ':' ' '
#+end_src
#+RESULTS: toc
| qmckl.org | #+TITLE | Introduction | |
| qmckl_error.org | #+TITLE | Error | handling |
| qmckl_context.org | #+TITLE | Context | |
| qmckl_memory.org | #+TITLE | Memory | management |
| qmckl_numprec.org | #+TITLE | Numerical | precision |
| qmckl_electron.org | #+TITLE | Electrons | |
| qmckl_ao.org | #+TITLE | Atomic | Orbitals |
| qmckl_distance.org | #+TITLE | Inter-particle | distances |
| qmckl.org | #+TITLE | Introduction | | |
| qmckl_error.org | #+TITLE | Error | handling | |
| qmckl_context.org | #+TITLE | Context | | |
| qmckl_memory.org | #+TITLE | Memory | management | |
| qmckl_numprec.org | #+TITLE | Numerical | precision | |
| qmckl_distance.org | #+TITLE | Inter-particle | distances | |
| qmckl_nucleus.org | #+TITLE | Nucleus | | |
| qmckl_electron.org | #+TITLE | Electrons | | |
| qmckl_ao.org | #+TITLE | Atomic | Orbitals | |
| qmckl_mo.org | #+TITLE | Molecular | Orbitals | |
| qmckl_jastrow.org | #+TITLE | Jastrow | Factor | |
| qmckl_sherman_morrison_woodbury.org | #+TITLE | Sherman-Morrison-Woodbury | | |
| qmckl_utils.org | #+TITLE | Utility | functions | |
| qmckl_blas.org | #+TITLE | BLAS | functions | |
| qmckl_trexio.org | #+TITLE | TREXIO | I/O | library |
| qmckl_verificarlo.org | #+TITLE | Verificarlo | CI | |
| qmckl_tests.org | #+TITLE | Data | for | Tests |
#+begin_src python :var data=toc :exports results :results raw
result = []
@ -40,20 +49,30 @@ return '\n'.join(result)
- [[./qmckl_context.html][Context]]
- [[./qmckl_memory.html][Memory management]]
- [[./qmckl_numprec.html][Numerical precision]]
- [[./qmckl_distance.html][Inter-particle distances]]
- [[./qmckl_nucleus.html][Nucleus]]
- [[./qmckl_electron.html][Electrons]]
- [[./qmckl_ao.html][Atomic Orbitals]]
- [[./qmckl_distance.html][Inter-particle distances]]
- [[./qmckl_mo.html][Molecular Orbitals]]
- [[./qmckl_jastrow.html][Jastrow Factor]]
- [[./qmckl_sherman_morrison_woodbury.html][Sherman-Morrison-Woodbury]]
- [[./qmckl_utils.html][Utility functions]]
- [[./qmckl_blas.html][BLAS functions]]
- [[./qmckl_trexio.html][TREXIO I/O library]]
- [[./qmckl_verificarlo.html][Verificarlo CI]]
- [[./qmckl_tests.html][Data for Tests]]
--------------------------------
The ultimate goal of the QMCkl library is to provide a high-performance
implementation of the main kernels of QMC. In this particular
implementation of the library, we focus on the definition of the API
and the tests, and on a /pedagogical/ presentation of the
algorithms. We expect the HPC experts to use this repository as a
reference for re-writing optimized libraries.
implementation of the main kernels of Quantum Monte Carlo
methods.
In this particular implementation of the library, we focus on the
definition of the API and the tests, and on a /pedagogical/
presentation of the algorithms. We expect the HPC experts to use
this repository as a reference for re-writing optimized libraries.
The source code of the library is available at
https://github.com/trex-coe/qmckl

View File

@ -256,6 +256,53 @@ cppcheck --addon=cert --enable=all *.c &> cppcheck.out
functions will use the precision specified in the =context=
variable.
In order to automatize numerical accuracy tests, QMCkl uses
[[https://github.com/verificarlo/verificarlo][Verificarlo]] and
its CI functionality. You can read Verificarlo CI's documentation
at the [[https://github.com/verificarlo/verificarlo/blob/master/doc/06-Postprocessing.md#verificarlo-ci][following link]].
Reading it is advised to understand the remainder of this section.
To enable support for Verificarlo CI tests when building the
library, use the following configure command :
#+begin_src bash
QMCKL_DEVEL=1 ./configure --prefix=$PWD/_install --enable-silent-rules --enable-maintainer-mode CC=verificarlo-f FC=verificarlo-f --host=x86_64 --enable-vfc_ci
#+end_src
Note that this does require an install of Verificarlo *with
Fortran support*. Enabling the support for CI will define the
~VFC_CI~ preprocessor variable which use will be explained now.
As explained in the documentation, Verificarlo CI uses a probes
system to export variables from test programs to the tools itself.
To make tests easier to use, QMCkl has its own interface to the
probes system. To make the system very easy to use, these functions
are always defined, but will behave differently depending on the
~VFC_CI~ preprocessor variable. There are 3 functions at your
disposal. When the CI is enabled, they will place a ~vfc_ci~ probe
as if calling ~vfc_probes~ directly. Otherwise, they will either do
nothing or perform a check on the tested value and return its result
as a boolean that you are free to use or ignore.
Here are these 3 functions :
- ~qmckl_probe~ : place a normal probe witout any check. Won't do anything when ~vfc_ci~ is disabled (false is returned).
- ~qmckl_probe_check~ : place a probe with an absolute check. If ~vfc_ci~ is disabled, this will return the result of an absolute check (|val - ref| < accuracy target ?). If the check fails, true is returned (false otherwise).
- ~qmckl_probe_check_relative~ : place a probe with a relative check. If ~vfc_ci~ is disabled, this will return the result of a relative check (|val - ref| / ref < accuracy target?). If the check fails, true is returned (false otherwise).
If you need more details on these functions or their Fortran
interfaces, have a look at the ~tools/qmckl_probes~ files.
Finally, if you need to add a QMCkl kernel to the CI tests
or modify an existing one, you should pay attention to the
following points :
- you should add the new kernel to the ~vfc_tests_config.json~ file, which controls the backends and repetitions for each executable. More details can be found in the ~vfc_ci~ documentation.
- in order to call the ~qmckl_probes~ functions from Fortran, import the ~qmckl_probes_f~ module.
- if your tests include some asserts that rely on accurate FP values, you should probably wrap them inside a ~#ifndef VFC_CI~ statement, as the asserts would otherwise risk to fail when executed with the different Verificarlo backends.
** Algorithms
Reducing the scaling of an algorithm usually implies also reducing
@ -264,4 +311,3 @@ cppcheck --addon=cert --enable=all *.c &> cppcheck.out
algorithms are better adapted than linear scaling algorithms. As
QMCkl is a general purpose library, multiple algorithms should be
implemented adapted to different problem sizes.

File diff suppressed because it is too large Load Diff

View File

@ -23,7 +23,8 @@ int main() {
** ~qmckl_dgemm~
Matrix multiply l$C_{ij} = \beta C_{ij} + \alpha \sum_{k} A_{ik} \cdot B_{kj}$ using Fortran ~matmul~ function.
Matrix multiply: $C_{ij} = \beta C_{ij} + \alpha \sum_{k} A_{ik} \cdot B_{kj}$ using Fortran ~matmul~ function.
TODO: Add description about the external library dependence.
#+NAME: qmckl_dgemm_args
@ -41,7 +42,7 @@ int main() {
| double | beta | in | Array containing the $n \times m$ matrix $B$ |
| double | C[][ldc] | out | Array containing the $n \times m$ matrix $B$ |
| int64_t | ldc | in | Leading dimension of array ~B~ |
*** Requirements
- ~context~ is not ~QMCKL_NULL_CONTEXT~
@ -75,7 +76,7 @@ int main() {
const int64_t ldb,
const double beta,
double* const C,
const int64_t ldc );
const int64_t ldc );
#+END_src
@ -145,27 +146,39 @@ integer function qmckl_dgemm_f(context, TransA, TransB, m, n, k, alpha, A, LDA,
return
endif
if (LDA_2 .ne. m) then
if (LDA_2 /= m) then
info = QMCKL_INVALID_ARG_9
return
endif
if (LDB_2 .ne. k) then
if (LDB_2 /= k) then
info = QMCKL_INVALID_ARG_10
return
endif
if (LDC .ne. m) then
if (LDC /= m) then
info = QMCKL_INVALID_ARG_13
return
endif
if (TransA) then
C = matmul(AT,B)
if (alpha == 1.d0 .and. beta == 0.d0) then
C = matmul(AT,B)
else
C = beta*C + alpha*matmul(AT,B)
endif
else if (TransB) then
C = matmul(A,BT)
if (alpha == 1.d0 .and. beta == 0.d0) then
C = matmul(A,BT)
else
C = beta*C + alpha*matmul(A,BT)
endif
else
C = matmul(A,B)
if (alpha == 1.d0 .and. beta == 0.d0) then
C = matmul(A,B)
else
C = beta*C + alpha*matmul(A,B)
endif
endif
end function qmckl_dgemm_f
#+end_src
@ -251,7 +264,7 @@ integer(qmckl_exit_code) function test_qmckl_dgemm(context) bind(C)
double precision :: x, alpha, beta
TransA = .False.
TransB = .False.
TransB = .False.
m = 1_8
k = 4_8
n = 6_8
@ -302,7 +315,7 @@ integer(qmckl_exit_code) function test_qmckl_dgemm(context) bind(C)
deallocate(A,B,C,D)
end function test_qmckl_dgemm
#+end_src
#+begin_src c :comments link :tangle (eval c_test)
qmckl_exit_code test_qmckl_dgemm(qmckl_context context);
assert(QMCKL_SUCCESS == test_qmckl_dgemm(context));

View File

@ -12,6 +12,7 @@ Functions for the computation of distances between particles.
#+begin_src c :comments link :tangle (eval c_test) :noweb yes
#include "qmckl.h"
#include "assert.h"
#include <stdio.h>
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
@ -19,6 +20,7 @@ int main() {
qmckl_context context;
context = qmckl_context_create();
#+end_src
* Squared distance
@ -282,10 +284,17 @@ end function qmckl_distance_sq_f
*** Test :noexport:
#+begin_src f90 :tangle (eval f_test)
integer(qmckl_exit_code) function test_qmckl_distance_sq(context) bind(C)
use qmckl
use qmckl_verificarlo_f
use iso_c_binding
implicit none
integer(qmckl_context), intent(in), value :: context
logical(C_BOOL) :: vfc_err
double precision, allocatable :: A(:,:), B(:,:), C(:,:)
integer*8 :: m, n, LDA, LDB, LDC
@ -299,7 +308,6 @@ integer(qmckl_exit_code) function test_qmckl_distance_sq(context) bind(C)
LDC = 5
allocate( A(LDA,m), B(LDB,n), C(LDC,n) )
do j=1,m
do i=1,m
A(i,j) = -10.d0 + dble(i+j)
@ -314,17 +322,26 @@ integer(qmckl_exit_code) function test_qmckl_distance_sq(context) bind(C)
test_qmckl_distance_sq = &
qmckl_distance_sq(context, 'X', 't', m, n, A, LDA, B, LDB, C, LDC)
vfc_err = qmckl_probe("distance"//C_NULL_CHAR, "distance_sq_Xt_2_2"//C_NULL_CHAR, DBLE(C(2,2)))
if (test_qmckl_distance_sq == 0) return
test_qmckl_distance_sq = &
qmckl_distance_sq(context, 't', 'X', m, n, A, LDA, B, LDB, C, LDC)
vfc_err = qmckl_probe("distance"//C_NULL_CHAR, "distance_sq_tX_2_2"//C_NULL_CHAR, DBLE(C(2,2)))
if (test_qmckl_distance_sq == 0) return
test_qmckl_distance_sq = &
qmckl_distance_sq(context, 'T', 't', m, n, A, LDA, B, LDB, C, LDC)
if (test_qmckl_distance_sq /= 0) return
vfc_err = qmckl_probe_check("distance"//C_NULL_CHAR, "distance_sq_Tt_2_2"//C_NULL_CHAR, DBLE(C(2,2)), DBLE(0), DBLE(1.d-14))
if (test_qmckl_distance_sq == 0) return
test_qmckl_distance_sq = QMCKL_FAILURE
@ -333,14 +350,17 @@ integer(qmckl_exit_code) function test_qmckl_distance_sq(context) bind(C)
x = (A(i,1)-B(j,1))**2 + &
(A(i,2)-B(j,2))**2 + &
(A(i,3)-B(j,3))**2
if ( dabs(1.d0 - C(i,j)/x) > 1.d-14 ) return
#ifndef VFC_CI
if ( dabs(1.d0 - C(i,j)/x) > 1.d-14) return
#endif
end do
end do
test_qmckl_distance_sq = &
qmckl_distance_sq(context, 'n', 'T', m, n, A, LDA, B, LDB, C, LDC)
if (test_qmckl_distance_sq /= 0) return
vfc_err = qmckl_probe_check("distance"//C_NULL_CHAR, "distance_sq_nT_2_2"//C_NULL_CHAR, DBLE(C(2,2)), DBLE(0), DBLE(1.d-14))
test_qmckl_distance_sq = QMCKL_FAILURE
@ -349,14 +369,18 @@ integer(qmckl_exit_code) function test_qmckl_distance_sq(context) bind(C)
x = (A(1,i)-B(j,1))**2 + &
(A(2,i)-B(j,2))**2 + &
(A(3,i)-B(j,3))**2
if ( dabs(1.d0 - C(i,j)/x) > 1.d-14 ) return
#ifndef VFC_CI
if ( dabs(1.d0 - C(i,j)/x) > 1.d-14) return
#endif
end do
end do
test_qmckl_distance_sq = &
qmckl_distance_sq(context, 'T', 'n', m, n, A, LDA, B, LDB, C, LDC)
if (test_qmckl_distance_sq /= 0) return
vfc_err = qmckl_probe_check("distance"//C_NULL_CHAR, "distance_sq_Tn_2_2"//C_NULL_CHAR, DBLE(C(2,2)), DBLE(0), DBLE(1.d-14))
if (test_qmckl_distance_sq == 0) return
test_qmckl_distance_sq = QMCKL_FAILURE
@ -365,14 +389,16 @@ integer(qmckl_exit_code) function test_qmckl_distance_sq(context) bind(C)
x = (A(i,1)-B(1,j))**2 + &
(A(i,2)-B(2,j))**2 + &
(A(i,3)-B(3,j))**2
if ( dabs(1.d0 - C(i,j)/x) > 1.d-14 ) return
#ifndef VFC_CI
if ( dabs(1.d0 - C(i,j)/x) > 1.d-14) return
#endif
end do
end do
test_qmckl_distance_sq = &
qmckl_distance_sq(context, 'n', 'N', m, n, A, LDA, B, LDB, C, LDC)
if (test_qmckl_distance_sq /= 0) return
vfc_err = qmckl_probe_check("distance"//C_NULL_CHAR, "distance_sq_nN_2_2"//C_NULL_CHAR, DBLE(C(2,2)), DBLE(0), DBLE(1.d-14))
test_qmckl_distance_sq = QMCKL_FAILURE
@ -392,8 +418,8 @@ end function test_qmckl_distance_sq
#+end_src
#+begin_src c :comments link :tangle (eval c_test)
qmckl_exit_code test_qmckl_distance_sq(qmckl_context context);
assert(test_qmckl_distance_sq(context) == QMCKL_SUCCESS);
qmckl_exit_code test_qmckl_distance_sq(qmckl_context context);
assert(test_qmckl_distance_sq(context) == QMCKL_SUCCESS);
#+end_src
* Distance
@ -690,10 +716,17 @@ end function qmckl_distance_f
*** Test :noexport:
#+begin_src f90 :tangle (eval f_test)
integer(qmckl_exit_code) function test_qmckl_dist(context) bind(C)
use qmckl
use qmckl_verificarlo_f
use iso_c_binding
implicit none
integer(qmckl_context), intent(in), value :: context
logical(C_BOOL) :: vfc_err
double precision, allocatable :: A(:,:), B(:,:), C(:,:)
integer*8 :: m, n, LDA, LDB, LDC
@ -722,17 +755,24 @@ integer(qmckl_exit_code) function test_qmckl_dist(context) bind(C)
test_qmckl_dist = &
qmckl_distance(context, 'X', 't', m, n, A, LDA, B, LDB, C, LDC)
vfc_err = qmckl_probe("distance"//C_NULL_CHAR, "distance_Xt_2_2"//C_NULL_CHAR, DBLE(C(2,2)))
if (test_qmckl_dist == 0) return
test_qmckl_dist = &
qmckl_distance(context, 't', 'X', m, n, A, LDA, B, LDB, C, LDC)
vfc_err = qmckl_probe("distance"//C_NULL_CHAR, "distance_tX_2_2"//C_NULL_CHAR, DBLE(C(2,2)))
if (test_qmckl_dist == 0) return
test_qmckl_dist = &
qmckl_distance(context, 'T', 't', m, n, A, LDA, B, LDB, C, LDC)
if (test_qmckl_dist /= 0) return
vfc_err = qmckl_probe_check("distance"//C_NULL_CHAR, "distance_Tt_2_2"//C_NULL_CHAR, DBLE(C(2,2)), DBLE(0), DBLE(1.d-14))
if (test_qmckl_dist == 0) return
test_qmckl_dist = QMCKL_FAILURE
@ -741,14 +781,19 @@ integer(qmckl_exit_code) function test_qmckl_dist(context) bind(C)
x = dsqrt((A(i,1)-B(j,1))**2 + &
(A(i,2)-B(j,2))**2 + &
(A(i,3)-B(j,3))**2)
if ( dabs(1.d0 - C(i,j)/x) > 1.d-14 ) return
#ifndef VFC_CI
if ( dabs(1.d0 - C(i,j)/x) > 1.d-14) return
#endif
end do
end do
test_qmckl_dist = &
qmckl_distance(context, 'n', 'T', m, n, A, LDA, B, LDB, C, LDC)
if (test_qmckl_dist /= 0) return
vfc_err = qmckl_probe_check("distance"//C_NULL_CHAR, "distance_nT_2_2"//C_NULL_CHAR, DBLE(C(2,2)), DBLE(0), DBLE(1.d-14))
if (test_qmckl_dist == 0) return
test_qmckl_dist = QMCKL_FAILURE
@ -757,14 +802,19 @@ integer(qmckl_exit_code) function test_qmckl_dist(context) bind(C)
x = dsqrt((A(1,i)-B(j,1))**2 + &
(A(2,i)-B(j,2))**2 + &
(A(3,i)-B(j,3))**2)
if ( dabs(1.d0 - C(i,j)/x) > 1.d-14 ) return
#ifndef VFC_CI
if ( dabs(1.d0 - C(i,j)/x) > 1.d-14) return
#endif
end do
end do
test_qmckl_dist = &
qmckl_distance(context, 'T', 'n', m, n, A, LDA, B, LDB, C, LDC)
if (test_qmckl_dist /= 0) return
vfc_err = qmckl_probe_check("distance"//C_NULL_CHAR, "distance_Tn_2_2"//C_NULL_CHAR, DBLE(C(2,2)), DBLE(0), DBLE(1.d-14))
if (test_qmckl_dist == 0) return
test_qmckl_dist = QMCKL_FAILURE
@ -773,14 +823,19 @@ integer(qmckl_exit_code) function test_qmckl_dist(context) bind(C)
x = dsqrt((A(i,1)-B(1,j))**2 + &
(A(i,2)-B(2,j))**2 + &
(A(i,3)-B(3,j))**2)
if ( dabs(1.d0 - C(i,j)/x) > 1.d-14 ) return
#ifndef VFC_CI
if ( dabs(1.d0 - C(i,j)/x) > 1.d-14) return
#endif
end do
end do
test_qmckl_dist = &
qmckl_distance(context, 'n', 'N', m, n, A, LDA, B, LDB, C, LDC)
if (test_qmckl_dist /= 0) return
vfc_err = qmckl_probe_check("distance"//C_NULL_CHAR, "distance_nN_2_2"//C_NULL_CHAR, DBLE(C(2,2)), DBLE(0), DBLE(1.d-14))
if (test_qmckl_dist == 0) return
test_qmckl_dist = QMCKL_FAILURE
@ -789,7 +844,9 @@ integer(qmckl_exit_code) function test_qmckl_dist(context) bind(C)
x = dsqrt((A(1,i)-B(1,j))**2 + &
(A(2,i)-B(2,j))**2 + &
(A(3,i)-B(3,j))**2)
if ( dabs(1.d0 - C(i,j)/x) > 1.d-14 ) return
#ifndef VFC_CI
if ( dabs(1.d0 - C(i,j)/x) > 1.d-14) return
#endif
end do
end do
@ -800,8 +857,8 @@ end function test_qmckl_dist
#+end_src
#+begin_src c :comments link :tangle (eval c_test)
qmckl_exit_code test_qmckl_dist(qmckl_context context);
assert(test_qmckl_dist(context) == QMCKL_SUCCESS);
qmckl_exit_code test_qmckl_dist(qmckl_context context);
assert(test_qmckl_dist(context) == QMCKL_SUCCESS);
#+end_src
* Rescaled Distance
@ -1114,12 +1171,12 @@ end function qmckl_distance_rescaled_f
:FRetType: qmckl_exit_code
:END:
~qmckl_distance_rescaled_deriv_e~ computes the matrix of the gradient and laplacian of the
~qmckl_distance_rescaled_deriv_e~ computes the matrix of the gradient and laplacian of the
rescaled distance with respect to the electron coordinates. The derivative is a rank 3 tensor.
The first dimension has a dimension of 4 of which the first three coordinates
contains the gradient vector and the last index is the laplacian.
\[
C_{ij} = \left( 1 - \exp{-\kappa C_{ij}}\right)/\kappa
\]
@ -1130,12 +1187,12 @@ end function qmckl_distance_rescaled_f
\nabla (C_{ij}(\mathbf{r}_{ee})) = \left(\frac{\delta C_{ij}(\mathbf{r}_{ee})}{\delta x},\frac{\delta C_{ij}(\mathbf{r}_{ee})}{\delta y},\frac{\delta C_{ij}(\mathbf{r}_{ee})}{\delta z} \right)
\]
and the laplacian is defined as follows:
\[
\triangle (C_{ij}(r_{ee})) = \frac{\delta^2}{\delta x^2} + \frac{\delta^2}{\delta y^2} + \frac{\delta^2}{\delta z^2}
\]
Using the above three formulae, the expression for the gradient and laplacian is
Using the above three formulae, the expression for the gradient and laplacian is
as follows:
\[
@ -1462,7 +1519,9 @@ end function qmckl_distance_rescaled_deriv_e_f
* End of files :noexport:
#+begin_src c :comments link :tangle (eval c_test)
assert (qmckl_context_destroy(context) == QMCKL_SUCCESS);
return 0;
}

View File

@ -18,6 +18,11 @@ up-spin and down-spin electrons, and the electron coordinates.
#include <stdbool.h>
#+end_src
#+begin_src c :tangle (eval h_private_func)
#ifndef QMCKL_ELECTRON_HPF
#define QMCKL_ELECTRON_HPF
#+end_src
#+begin_src c :tangle (eval c_test) :noweb yes
#include "qmckl.h"
#include <assert.h>
@ -2408,6 +2413,10 @@ assert (rc == QMCKL_SUCCESS);
#endif
#+end_src
#+begin_src c :tangle (eval h_private_func)
#endif
#+end_src
*** Test
#+begin_src c :tangle (eval c_test)
if (qmckl_context_destroy(context) != QMCKL_SUCCESS)

View File

@ -456,8 +456,19 @@ qmckl_get_error(qmckl_context context,
qmckl_context_struct* const ctx = (qmckl_context_struct* const) context;
assert (ctx != NULL); /* Impossible because the context is valid. */
/* Turn off annoying GCC warning */
#ifdef __GNUC__
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wstringop-truncation"
#endif
strncpy(function_name, ctx->error.function, QMCKL_MAX_FUN_LEN-1);
strncpy(message , ctx->error.message , QMCKL_MAX_MSG_LEN-1);
#ifdef __GNUC__
#pragma GCC diagnostic pop
#endif
(*exit_code) = ctx->error.exit_code;
}
qmckl_unlock(context);

View File

@ -13,6 +13,11 @@ these factors along with their derivatives.
#+end_src
#+begin_src c :tangle (eval h_private_func)
#ifndef QMCKL_JASTROW_HPF
#define QMCKL_JASTROW_HPF
#+end_src
#+begin_src c :tangle (eval h_private_type)
#ifndef QMCKL_JASTROW_HPT
#define QMCKL_JASTROW_HPT
@ -5469,6 +5474,10 @@ assert(fabs(factor_een_deriv_e[0][0] + 0.0005481671107226865) < 1e-12);
#endif
#+end_src
#+begin_src c :tangle (eval h_private_func)
#endif
#+end_src
*** Test
#+begin_src c :tangle (eval c_test)
rc = qmckl_context_destroy(context);

View File

@ -41,6 +41,11 @@ int main() {
#+end_src
#+begin_src c :tangle (eval h_private_func) :noweb yes
#ifndef QMCKL_MEMORY_HPF
#define QMCKL_MEMORY_HPF
#+end_src
#+begin_src c :tangle (eval h_private_type) :noweb yes
#ifndef QMCKL_MEMORY_HPT
#define QMCKL_MEMORY_HPT
@ -273,6 +278,11 @@ assert(rc == QMCKL_SUCCESS);
* End of files :noexport:
#+begin_src c :comments org :tangle (eval h_private_func)
#endif
#+end_src
#+begin_src c :comments org :tangle (eval h_private_type)
#endif

View File

@ -21,6 +21,11 @@ function to calculate the MOs.
#+end_src
#+begin_src c :tangle (eval h_private_func)
#ifndef QMCKL_MO_HPF
#define QMCKL_MO_HPF
#+end_src
#+begin_src c :tangle (eval h_private_type)
#ifndef QMCKL_MO_HPT
#define QMCKL_MO_HPT
@ -78,18 +83,17 @@ int main() {
The following arrays are stored in the context:
|---------------------+--------------------+--------------------------------------------------------------|
| ~type~ | | Gaussian (~'G'~) or Slater (~'S'~) |
| ~mo_num~ | | Number of MOs |
| ~coefficient~ | ~[mo_num, ao_num]~ | Orbital coefficients |
|---------------+--------------------+----------------------|
| ~mo_num~ | | Number of MOs |
| ~coefficient~ | ~[mo_num][ao_num]~ | Orbital coefficients |
Computed data:
|---------------+-----------------------------------+----------------------------------------------------------------------------------------|
|---------------+-----------------------------------+----------------------------------------------------------------------------------------|
|---------------+-------------------------+----------------------------------------------------------------------------------------|
|---------------+-------------------------+----------------------------------------------------------------------------------------|
| ~mo_vgl~ | ~[5][elec_num][mo_num]~ | Value, gradients, Laplacian of the MOs at electron positions |
| ~mo_vgl_date~ | ~uint64_t~ | Late modification date of Value, gradients, Laplacian of the MOs at electron positions |
|---------------+-----------------------------------+----------------------------------------------------------------------------------------|
| ~mo_vgl_date~ | ~uint64_t~ | Late modification date of Value, gradients, Laplacian of the MOs at electron positions |
|---------------+-------------------------+----------------------------------------------------------------------------------------|
** Data structure
@ -103,7 +107,6 @@ typedef struct qmckl_mo_basis_struct {
int32_t uninitialized;
bool provided;
char type;
} qmckl_mo_basis_struct;
#+end_src
@ -115,33 +118,24 @@ typedef struct qmckl_mo_basis_struct {
this mechanism.
** Access functions
#+begin_src c :comments org :tangle (eval h_private_func) :exports none
char qmckl_get_mo_basis_type (const qmckl_context context);
int64_t qmckl_get_mo_basis_mo_num (const qmckl_context context);
double* qmckl_get_mo_basis_coefficient (const qmckl_context context);
#+begin_src c :comments org :tangle (eval h_func) :exports none
qmckl_exit_code
qmckl_get_mo_basis_mo_num (const qmckl_context context,
int64_t* mo_num);
#+end_src
When all the data for the AOs have been provided, the following
function returns ~true~.
#+begin_src c :comments org :tangle (eval h_func)
bool qmckl_mo_basis_provided (const qmckl_context context);
#+end_src
#+NAME:post
#+begin_src c :exports none
if ( (ctx->mo_basis.uninitialized & mask) != 0) {
return NULL;
}
#+end_src
#+begin_src c :comments org :tangle (eval c) :noweb yes :exports none
char qmckl_get_mo_basis_type (const qmckl_context context) {
if (qmckl_context_check(context) == QMCKL_NULL_CONTEXT) {
return (char) 0;
qmckl_exit_code
qmckl_get_mo_basis_mo_num (const qmckl_context context,
int64_t* mo_num)
{
if (qmckl_context_check(context) == QMCKL_NULL_CONTEXT) {
return qmckl_failwith( context,
QMCKL_INVALID_CONTEXT,
"qmckl_get_mo_basis_mo_num",
NULL);
return (int64_t) 0;
}
qmckl_context_struct* const ctx = (qmckl_context_struct* const) context;
@ -150,16 +144,37 @@ char qmckl_get_mo_basis_type (const qmckl_context context) {
int32_t mask = 1;
if ( (ctx->mo_basis.uninitialized & mask) != 0) {
return (char) 0;
return qmckl_failwith( context,
QMCKL_NOT_PROVIDED,
"qmckl_get_mo_basis_mo_num",
NULL);
}
assert (ctx->mo_basis.type != (char) 0);
return ctx->mo_basis.type;
assert (ctx->mo_basis.mo_num > (int64_t) 0);
,*mo_num = ctx->mo_basis.mo_num;
return QMCKL_SUCCESS;
}
int64_t qmckl_get_mo_basis_mo_num (const qmckl_context context) {
#+end_src
#+begin_src c :comments org :tangle (eval h_func) :exports none
qmckl_exit_code
qmckl_get_mo_basis_coefficient (const qmckl_context context,
double* const coefficient,
const int64_t size_max);
#+end_src
#+begin_src c :comments org :tangle (eval c) :exports none
qmckl_exit_code
qmckl_get_mo_basis_coefficient (const qmckl_context context,
double* const coefficient,
const int64_t size_max)
{
if (qmckl_context_check(context) == QMCKL_NULL_CONTEXT) {
return (int64_t) 0;
return qmckl_failwith( context,
QMCKL_INVALID_CONTEXT,
"qmckl_get_mo_basis_coefficient",
NULL);
}
qmckl_context_struct* const ctx = (qmckl_context_struct* const) context;
@ -167,14 +182,43 @@ int64_t qmckl_get_mo_basis_mo_num (const qmckl_context context) {
int32_t mask = 1 << 1;
if ( (ctx->mo_basis.uninitialized & mask) != 0) {
return (int64_t) 0;
if ( (ctx->ao_basis.uninitialized & mask) != 0) {
return qmckl_failwith( context,
QMCKL_NOT_PROVIDED,
"qmckl_get_mo_basis_coefficient",
NULL);
}
assert (ctx->mo_basis.mo_num > (int64_t) 0);
return ctx->mo_basis.mo_num;
}
if (coefficient == NULL) {
return qmckl_failwith( context,
QMCKL_INVALID_ARG_2,
"qmckl_get_mo_basis_coefficient",
"NULL pointer");
}
if (size_max < ctx->ao_basis.ao_num * ctx->mo_basis.mo_num) {
return qmckl_failwith( context,
QMCKL_INVALID_ARG_3,
"qmckl_get_mo_basis_coefficient",
"Array too small. Expected mo_num * ao_num");
}
assert (ctx->mo_basis.coefficient != NULL);
memcpy(coefficient, ctx->mo_basis.coefficient,
ctx->ao_basis.ao_num * ctx->mo_basis.mo_num * sizeof(int64_t));
return QMCKL_SUCCESS;
}
#+end_src
When all the data for the AOs have been provided, the following
function returns ~true~.
#+begin_src c :comments org :tangle (eval h_func)
bool qmckl_mo_basis_provided (const qmckl_context context);
#+end_src
#+begin_src c :comments org :tangle (eval c) :exports none
bool qmckl_mo_basis_provided(const qmckl_context context) {
if (qmckl_context_check(context) == QMCKL_NULL_CONTEXT) {
@ -196,12 +240,11 @@ bool qmckl_mo_basis_provided(const qmckl_context context) {
called.
#+begin_src c :comments org :tangle (eval h_func)
qmckl_exit_code qmckl_set_mo_basis_type (qmckl_context context, const char t);
qmckl_exit_code qmckl_set_mo_basis_mo_num (qmckl_context context, const int64_t mo_num);
qmckl_exit_code qmckl_set_mo_basis_coefficient (qmckl_context context, const double * coefficient);
#+end_src
#+NAME:pre2
#+NAME:pre
#+begin_src c :exports none
if (qmckl_context_check(context) == QMCKL_NULL_CONTEXT) {
return QMCKL_NULL_CONTEXT;
@ -210,7 +253,7 @@ if (qmckl_context_check(context) == QMCKL_NULL_CONTEXT) {
qmckl_context_struct* const ctx = (qmckl_context_struct* const) context;
#+end_src
#+NAME:post2
#+NAME:post
#+begin_src c :exports none
ctx->mo_basis.uninitialized &= ~mask;
ctx->mo_basis.provided = (ctx->mo_basis.uninitialized == 0);
@ -223,24 +266,8 @@ return QMCKL_SUCCESS;
#+end_src
#+begin_src c :comments org :tangle (eval c) :noweb yes :exports none
qmckl_exit_code qmckl_set_mo_basis_type(qmckl_context context, const char t) {
<<pre2>>
if (t != 'G' && t != 'S') {
return qmckl_failwith( context,
QMCKL_INVALID_ARG_2,
"qmckl_set_mo_basis_type",
NULL);
}
int32_t mask = 1;
ctx->mo_basis.type = t;
<<post2>>
}
qmckl_exit_code qmckl_set_mo_basis_mo_num(qmckl_context context, const int64_t mo_num) {
<<pre2>>
<<pre>>
if (mo_num <= 0) {
return qmckl_failwith( context,
@ -249,16 +276,16 @@ qmckl_exit_code qmckl_set_mo_basis_mo_num(qmckl_context context, const int64_t m
"mo_num <= 0");
}
int32_t mask = 1 << 1;
int32_t mask = 1 ;
ctx->mo_basis.mo_num = mo_num;
<<post2>>
<<post>>
}
qmckl_exit_code qmckl_set_mo_basis_coefficient(qmckl_context context, const double* coefficient) {
<<pre2>>
<<pre>>
int32_t mask = 1 << 2;
int32_t mask = 1 << 1;
if (ctx->mo_basis.coefficient != NULL) {
qmckl_exit_code rc = qmckl_free(context, ctx->mo_basis.coefficient);
@ -283,7 +310,7 @@ qmckl_exit_code qmckl_set_mo_basis_coefficient(qmckl_context context, const dou
ctx->mo_basis.coefficient = new_array;
<<post2>>
<<post>>
}
#+end_src
@ -398,20 +425,13 @@ qmckl_exit_code qmckl_provide_mo_vgl(qmckl_context context)
}
qmckl_exit_code rc;
if (ctx->mo_basis.type == 'G') {
rc = qmckl_compute_mo_basis_gaussian_vgl(context,
ctx->ao_basis.ao_num,
ctx->mo_basis.mo_num,
ctx->electron.num,
ctx->mo_basis.coefficient,
ctx->ao_basis.ao_vgl,
ctx->mo_basis.mo_vgl);
} else {
return qmckl_failwith( context,
QMCKL_FAILURE,
"compute_mo_basis_vgl",
"Not yet implemented");
}
rc = qmckl_compute_mo_basis_vgl(context,
ctx->ao_basis.ao_num,
ctx->mo_basis.mo_num,
ctx->electron.num,
ctx->mo_basis.coefficient,
ctx->ao_basis.ao_vgl,
ctx->mo_basis.mo_vgl);
if (rc != QMCKL_SUCCESS) {
return rc;
}
@ -425,22 +445,22 @@ qmckl_exit_code qmckl_provide_mo_vgl(qmckl_context context)
*** Compute
:PROPERTIES:
:Name: qmckl_compute_mo_basis_gaussian_vgl
:Name: qmckl_compute_mo_basis_vgl
:CRetType: qmckl_exit_code
:FRetType: qmckl_exit_code
:END:
#+NAME: qmckl_mo_basis_gaussian_vgl_args
| ~qmckl_context~ | ~context~ | in | Global state |
| ~int64_t~ | ~ao_num~ | in | Number of AOs |
| ~int64_t~ | ~mo_num~ | in | Number of MOs |
| ~int64_t~ | ~elec_num~ | in | Number of electrons |
| ~double~ | ~coef_normalized[mo_num][ao_num]~ | in | AO to MO transformation matrix |
| ~double~ | ~ao_vgl[5][elec_num][ao_num]~ | in | Value, gradients and Laplacian of the AOs |
| ~double~ | ~mo_vgl[5][elec_num][mo_num]~ | out | Value, gradients and Laplacian of the MOs |
| ~qmckl_context~ | ~context~ | in | Global state |
| ~int64_t~ | ~ao_num~ | in | Number of AOs |
| ~int64_t~ | ~mo_num~ | in | Number of MOs |
| ~int64_t~ | ~elec_num~ | in | Number of electrons |
| ~double~ | ~coef_normalized[mo_num][ao_num]~ | in | AO to MO transformation matrix |
| ~double~ | ~ao_vgl[5][elec_num][ao_num]~ | in | Value, gradients and Laplacian of the AOs |
| ~double~ | ~mo_vgl[5][elec_num][mo_num]~ | out | Value, gradients and Laplacian of the MOs |
#+begin_src f90 :comments org :tangle (eval f) :noweb yes
integer function qmckl_compute_mo_basis_gaussian_vgl_f(context, &
integer function qmckl_compute_mo_basis_vgl_f(context, &
ao_num, mo_num, elec_num, &
coef_normalized, ao_vgl, mo_vgl) &
result(info)
@ -528,14 +548,14 @@ integer function qmckl_compute_mo_basis_gaussian_vgl_f(context, &
info = QMCKL_FAILURE
end if
end function qmckl_compute_mo_basis_gaussian_vgl_f
end function qmckl_compute_mo_basis_vgl_f
#+end_src
#+CALL: generate_c_header(table=qmckl_mo_basis_gaussian_vgl_args,rettyp=get_value("CRetType"),fname="qmckl_compute_mo_basis_gaussian_vgl"))
#+CALL: generate_c_header(table=qmckl_mo_basis_gaussian_vgl_args,rettyp=get_value("CRetType"),fname="qmckl_compute_mo_basis_vgl"))
#+RESULTS:
#+begin_src c :tangle (eval h_func) :comments org
qmckl_exit_code qmckl_compute_mo_basis_gaussian_vgl (
qmckl_exit_code qmckl_compute_mo_basis_vgl (
const qmckl_context context,
const int64_t ao_num,
const int64_t mo_num,
@ -546,11 +566,11 @@ end function qmckl_compute_mo_basis_gaussian_vgl_f
#+end_src
#+CALL: generate_c_interface(table=qmckl_mo_basis_gaussian_vgl_args,rettyp=get_value("CRetType"),fname="qmckl_compute_mo_basis_gaussian_vgl"))
#+CALL: generate_c_interface(table=qmckl_mo_basis_gaussian_vgl_args,rettyp=get_value("CRetType"),fname="qmckl_compute_mo_basis_vgl"))
#+RESULTS:
#+begin_src f90 :tangle (eval f) :comments org :exports none
integer(c_int32_t) function qmckl_compute_mo_basis_gaussian_vgl &
integer(c_int32_t) function qmckl_compute_mo_basis_vgl &
(context, ao_num, mo_num, elec_num, coef_normalized, ao_vgl, mo_vgl) &
bind(C) result(info)
@ -565,15 +585,13 @@ end function qmckl_compute_mo_basis_gaussian_vgl_f
real (c_double ) , intent(in) :: ao_vgl(ao_num,elec_num,5)
real (c_double ) , intent(out) :: mo_vgl(mo_num,elec_num,5)
integer(c_int32_t), external :: qmckl_compute_mo_basis_gaussian_vgl_f
info = qmckl_compute_mo_basis_gaussian_vgl_f &
integer(c_int32_t), external :: qmckl_compute_mo_basis_vgl_f
info = qmckl_compute_mo_basis_vgl_f &
(context, ao_num, mo_num, elec_num, coef_normalized, ao_vgl, mo_vgl)
end function qmckl_compute_mo_basis_gaussian_vgl
end function qmckl_compute_mo_basis_vgl
#+end_src
*** Test
#+begin_src python :results output :exports none
@ -751,9 +769,6 @@ rc = qmckl_get_ao_vgl(context, &(ao_vgl[0][0][0][0]));
assert (rc == QMCKL_SUCCESS);
/* Set up MO data */
rc = qmckl_set_mo_basis_type(context, typ);
assert (rc == QMCKL_SUCCESS);
const int64_t mo_num = chbrclf_mo_num;
rc = qmckl_set_mo_basis_mo_num(context, mo_num);
assert (rc == QMCKL_SUCCESS);
@ -827,13 +842,16 @@ printf("\n");
#+end_src
* End of files :noexport:
#+begin_src c :tangle (eval h_private_type)
#endif
#+end_src
#+begin_src c :tangle (eval h_private_func)
#endif
#+end_src
*** Test
#+begin_src c :tangle (eval c_test)
rc = qmckl_context_destroy(context);

View File

@ -10,6 +10,11 @@ All the data relative to the molecular geometry is described here.
#+end_src
#+begin_src c :tangle (eval h_private_func)
#ifndef QMCKL_NUCLEUS_HPF
#define QMCKL_NUCLEUS_HPF
#+end_src
#+begin_src c :tangle (eval h_private_type)
#ifndef QMCKL_NUCLEUS_HPT
#define QMCKL_NUCLEUS_HPT
@ -1138,6 +1143,10 @@ assert(rep - 318.2309879436158 < 1.e-10);
#endif
#+end_src
#+begin_src c :tangle (eval h_private_func)
#endif
#+end_src
*** Test
#+begin_src c :tangle (eval c_test)
if (qmckl_context_destroy(context) != QMCKL_SUCCESS)

File diff suppressed because one or more lines are too long

View File

@ -60058,8 +60058,8 @@ double chbrclf_elec_coord[chbrclf_walk_num][chbrclf_elec_num][3] = { {
#+BEGIN_example
2
N2
N 0.000000 0.000000 0.000000
N 0.000000 0.000000 2.059801
N 0.000000 0.000000 0.00
N 0.000000 0.000000 1.09
#+END_example
Nuclear coordinates are stored in atomic units in transposed format.

1101
org/qmckl_trexio.org Normal file

File diff suppressed because it is too large Load Diff

328
org/qmckl_verificarlo.org Normal file
View File

@ -0,0 +1,328 @@
#+TITLE: Verificarlo CI
#+SETUPFILE: ../tools/theme.setup
#+INCLUDE: ../tools/lib.org
* Headers :noexport:
#+begin_src c :tangle (eval h_private_func)
#ifndef QMCKL_VERIFICARLO_HPT
#define QMCKL_VERIFICARLO_HPT
#include <stdbool.h>
#ifdef VFC_CI
#include <vfc_probes.h>
extern vfc_probes * probes;
#endif
#+end_src
#+begin_src c :tangle (eval c)
#include <stdbool.h>
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#ifdef VFC_CI
#include <vfc_probes.h>
vfc_probes probes;
#else
/* Disable GCC warnings with unused variables */
#ifdef __GNUC__
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wunused-parameter"
#endif
#endif
#+end_src
* Verificarlo probes
This file contains utility functions to enable the Verificarlo
Continuous Integration system (~VFC_CI~).
It is a wrapper to Verificarlo's ~vfc_probes~ system. The goal of QMCkl
probes is to simplify the use of ~vfc_probes~, and to provide functions that
can be called either with or without ~VFC_CI~ support by using ~#ifndef~
statements :
- when ~VFC_CI~ is disabled, the functions will either return ~false~
(no error) or perform a check based on a reference value
- when ~VFC_CI~ is enabled, the functions will simply encapsulate
calls to ~vfc_probe~.
Moreover, one does not have to worry about the life cycle of the probes
structure, as it is automatically created, dumped and freed by this wrapper.
~VFC_CI~ support can be enabled by using the following configure command :
#+begin_src bash
QMCKL_DEVEL=1 ./configure --prefix=$PWD/_install --enable-silent-rules \
--enable-maintainer-mode CC=verificarlo-f FC=verificarlo-f --host=x86_64
#+end_src
Finally, this wrapper also comes with a Fortran interface (in its dedicated
file).
To learn more about Verificarlo CI :
https://github.com/verificarlo/verificarlo/blob/master/doc/06-Postprocessing.md#verificarlo-ci
** Automatically initialize the ~vfc_probe~ object if ~VFC_CI~ is defined
#+begin_src c :tangle (eval h_private_func)
#ifdef VFC_CI
void qmckl_init_probes() __attribute__((constructor));
#endif
#+end_src
#+begin_src c :tangle (eval c)
#ifdef VFC_CI
void __attribute__((constructor)) qmckl_init_probes(){
probes = vfc_init_probes();
}
#endif
#+end_src
** Standard probe, without check
- if ~VFC_CI~ is defined, place a standard probe
- if ~VFC_CI~ is undefined, return ~false~ (no error)
#+begin_src c :tangle (eval h_private_func)
bool qmckl_probe(
char * testName,
char * varName,
double value
);
#+end_src
#+begin_src c :tangle (eval c)
bool qmckl_probe(
char * testName,
char * varName,
double value)
{
#ifdef VFC_CI
return vfc_probe(&probes, testName, varName, value);
#else
return false;
#endif
}
#+end_src
** Probe with absolute check
- if ~VFC_CI~ is defined, place a probe with an absolute check
- if ~VFC_CI~ is undefined, perform an absolute check based on target value
and accuracy
#+begin_src c :tangle (eval h_private_func)
bool qmckl_probe_check(
char * testName,
char * varName,
double value,
double expectedValue,
double accuracyTarget
);
#+end_src
#+begin_src c :tangle (eval c)
bool qmckl_probe_check(
char * testName,
char * varName,
double value,
double expectedValue,
double accuracyTarget)
{
#ifdef VFC_CI
return vfc_probe_check(&probes, testName, varName, value, accuracyTarget);
#else
return !(fabs(value - expectedValue) < accuracyTarget);
#endif
}
#+end_src
** Probe with relative check
- if ~VFC_CI~ is defined, place a probe with a relative check
- if ~VFC_CI~ is undefined, perform a relative check based on target value
and accuracy
#+begin_src c :tangle (eval h_private_func)
bool qmckl_probe_check_relative(
char * testName,
char * varName,
double value,
double expectedValue,
double accuracyTarget
);
#+end_src
#+begin_src c :tangle (eval c)
bool qmckl_probe_check_relative (
char * testName,
char * varName,
double value,
double expectedValue,
double accuracyTarget)
{
#ifdef VFC_CI
return vfc_probe_check_relative(&probes, testName, varName, value, accuracyTarget);
#else
return !(fabs(value - expectedValue) / fabs(expectedValue) < accuracyTarget);
#endif
}
#+end_src
** Automatically delete and dump the vfc_probe object if ~VFC_CI~ is defined
#+begin_src c :tangle (eval h_private_func)
#ifdef VFC_CI
void qmckl_dump_probes() __attribute__((destructor));
#endif
#+end_src
#+begin_src c :tangle (eval c)
#ifdef VFC_CI
void __attribute__((destructor)) qmckl_dump_probes(){
vfc_dump_probes(&probes);
}
#endif
#+end_src
* Fortran wrappers
#+begin_src c :tangle (eval h_private_func)
bool qmckl_probe_f(
char * testName,
char * varName,
double * value
);
bool qmckl_probe_check_f(
char * testName,
char * varName,
double * value,
double * expectedValue,
double * accuracyTarget
);
bool qmckl_probe_check_relative_f(
char * testName,
char * varName,
double * value,
double * expectedValue,
double * accuracyTarget
);
#+end_src
#+begin_src c :tangle (eval c)
bool qmckl_probe_f(
char * testName,
char * varName,
double * value)
{
return qmckl_probe(testName, varName, *value);
}
bool qmckl_probe_check_f(
char * testName,
char * varName,
double * value,
double * expectedValue,
double * accuracyTarget)
{
return qmckl_probe_check(
testName, varName,
,*value, *expectedValue, *accuracyTarget
);
}
bool qmckl_probe_check_relative_f(
char * testName,
char * varName,
double * value,
double * expectedValue,
double * accuracyTarget)
{
return qmckl_probe_check_relative(
testName, varName,
,*value, *expectedValue, *accuracyTarget
);
}
#+end_src
#+begin_src f90 :tangle (eval f)
module qmckl_verificarlo_f
interface
logical(c_bool) function qmckl_probe &
(testName, varName, val) &
bind(C, name="qmckl_probe_f")
use, intrinsic :: iso_c_binding
import
implicit none
character(C_CHAR), dimension(*) :: testName
character(C_CHAR), dimension(*) :: varName
real(C_DOUBLE) :: val
end function qmckl_probe
logical(c_bool) function qmckl_probe_check &
(testName, varName, val, expectedValue, accuracyTarget) &
bind(C, name="qmckl_probe_check_f")
use, intrinsic :: iso_c_binding
import
implicit none
character(C_CHAR), dimension(*) :: testName
character(C_CHAR), dimension(*) :: varName
real(C_DOUBLE) :: val
real(C_DOUBLE) :: expectedValue
real(C_DOUBLE) :: accuracyTarget
end function qmckl_probe_check
logical(c_bool) function qmckl_probe_check_relative &
(testName, varName, val, expectedValue, accuracyTarget) &
bind(C, name="qmckl_probe_check_relative_f")
use, intrinsic :: iso_c_binding
import
implicit none
character(C_CHAR), dimension(*) :: testName
character(C_CHAR), dimension(*) :: varName
real(C_DOUBLE) :: val
real(C_DOUBLE) :: expectedValue
real(C_DOUBLE) :: accuracyTarget
end function qmckl_probe_check_relative
end interface
end module qmckl_verificarlo_f
#+end_src
* End of files :noexport:
#+begin_src c :tangle (eval c)
#ifndef VFC_CI
#ifdef __GNUC__
#pragma GCC diagnostic pop
#endif
#endif
#+end_src
#+begin_src c :comments link :tangle (eval h_private_func)
#endif
#+end_src

View File

@ -3,13 +3,15 @@ qmckl_error.org
qmckl_context.org
qmckl_memory.org
qmckl_numprec.org
qmckl_distance.org
qmckl_nucleus.org
qmckl_electron.org
qmckl_ao.org
qmckl_mo.org
qmckl_jastrow.org
qmckl_sherman_morrison_woodbury.org
qmckl_distance.org
qmckl_utils.org
qmckl_blas.org
qmckl_trexio.org
qmckl_verificarlo.org
qmckl_tests.org

View File

View File

@ -0,0 +1,70 @@
rank_ao_shell 1
dims_ao_shell 0 30
rank_ao_normalization 1
dims_ao_normalization 0 30
ao_cartesian_isSet 1
ao_cartesian 1
ao_num_isSet 1
ao_num 30
ao_shell
0
1
2
3
3
3
4
4
4
5
5
5
5
5
5
6
7
8
9
9
9
10
10
10
11
11
11
11
11
11
ao_normalization
1.0000000000000000e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.0000000000000002e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.7320508075688772e+00
1.7320508075688767e+00
9.9999999999999978e-01
1.7320508075688772e+00
9.9999999999999978e-01
1.0000000000000000e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.0000000000000002e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.7320508075688776e+00
1.7320508075688772e+00
1.0000000000000000e+00
1.7320508075688776e+00
1.0000000000000000e+00

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,236 @@
rank_basis_nucleus_index 1
dims_basis_nucleus_index 0 2
rank_basis_nucleus_shell_num 1
dims_basis_nucleus_shell_num 0 2
rank_basis_shell_ang_mom 1
dims_basis_shell_ang_mom 0 12
rank_basis_shell_prim_num 1
dims_basis_shell_prim_num 0 12
rank_basis_shell_factor 1
dims_basis_shell_factor 0 12
rank_basis_shell_prim_index 1
dims_basis_shell_prim_index 0 12
rank_basis_exponent 1
dims_basis_exponent 0 50
rank_basis_coefficient 1
dims_basis_coefficient 0 50
rank_basis_prim_factor 1
dims_basis_prim_factor 0 50
basis_num_isSet 1
basis_num 12
basis_prim_num_isSet 1
basis_prim_num 50
len_basis_type 9
basis_type
Gaussian
basis_nucleus_index
0
6
basis_nucleus_shell_num
6
6
basis_shell_ang_mom
0
0
0
1
1
2
0
0
0
1
1
2
basis_shell_prim_num
9
9
1
4
1
1
9
9
1
4
1
1
basis_shell_factor
9.9999971897081508e-01
9.9999963111699008e-01
1.0000000000000000e+00
1.0000002163655846e+00
1.0000000000000000e+00
1.0000000000000002e+00
9.9999971897081508e-01
9.9999963111699008e-01
1.0000000000000000e+00
1.0000002163655846e+00
1.0000000000000000e+00
1.0000000000000002e+00
basis_shell_prim_index
0
9
18
19
23
24
25
34
43
44
48
49
basis_exponent
2.9400000000000000e+03
4.4119999999999999e+02
1.0050000000000000e+02
2.8430000000000000e+01
9.1690000000000005e+00
3.1960000000000002e+00
1.1590000000000000e+00
1.8110000000000001e-01
5.8900000000000001e-02
2.9400000000000000e+03
4.4119999999999999e+02
1.0050000000000000e+02
2.8430000000000000e+01
9.1690000000000005e+00
3.1960000000000002e+00
1.1590000000000000e+00
1.8110000000000001e-01
5.8900000000000001e-02
5.8900000000000001e-02
3.6190000000000002e+00
7.1099999999999997e-01
1.9510000000000000e-01
6.0179999999999997e-02
6.0179999999999997e-02
2.3540000000000000e-01
2.9400000000000000e+03
4.4119999999999999e+02
1.0050000000000000e+02
2.8430000000000000e+01
9.1690000000000005e+00
3.1960000000000002e+00
1.1590000000000000e+00
1.8110000000000001e-01
5.8900000000000001e-02
2.9400000000000000e+03
4.4119999999999999e+02
1.0050000000000000e+02
2.8430000000000000e+01
9.1690000000000005e+00
3.1960000000000002e+00
1.1590000000000000e+00
1.8110000000000001e-01
5.8900000000000001e-02
5.8900000000000001e-02
3.6190000000000002e+00
7.1099999999999997e-01
1.9510000000000000e-01
6.0179999999999997e-02
6.0179999999999997e-02
2.3540000000000000e-01
basis_coefficient
6.8000000000000005e-04
5.2360000000000002e-03
2.6606000000000001e-02
9.9992999999999999e-02
2.6970200000000000e-01
4.5146900000000001e-01
2.9507400000000000e-01
1.2586999999999999e-02
-3.7559999999999998e-03
-1.2300000000000001e-04
-9.6599999999999995e-04
-4.8310000000000002e-03
-1.9314000000000001e-02
-5.3280000000000001e-02
-1.2072300000000000e-01
-1.3343500000000000e-01
5.3076699999999999e-01
5.8011699999999999e-01
1.0000000000000000e+00
2.9111000000000001e-02
1.6936499999999999e-01
5.1345799999999997e-01
4.7933799999999999e-01
1.0000000000000000e+00
1.0000000000000000e+00
6.8000000000000005e-04
5.2360000000000002e-03
2.6606000000000001e-02
9.9992999999999999e-02
2.6970200000000000e-01
4.5146900000000001e-01
2.9507400000000000e-01
1.2586999999999999e-02
-3.7559999999999998e-03
-1.2300000000000001e-04
-9.6599999999999995e-04
-4.8310000000000002e-03
-1.9314000000000001e-02
-5.3280000000000001e-02
-1.2072300000000000e-01
-1.3343500000000000e-01
5.3076699999999999e-01
5.8011699999999999e-01
1.0000000000000000e+00
2.9111000000000001e-02
1.6936499999999999e-01
5.1345799999999997e-01
4.7933799999999999e-01
1.0000000000000000e+00
1.0000000000000000e+00
basis_prim_factor
2.8455786257606746e+02
6.8609889528700521e+01
2.2622189630797177e+01
8.7749113372175405e+00
3.7553599626065184e+00
1.7035903455455901e+00
7.9610924849766440e-01
1.9785586566953522e-01
8.5211176837619682e-02
2.8455786257606746e+02
6.8609889528700521e+01
2.2622189630797177e+01
8.7749113372175405e+00
3.7553599626065184e+00
1.7035903455455901e+00
7.9610924849766440e-01
1.9785586566953522e-01
8.5211176837619682e-02
8.5211176837619682e-02
7.1150149470514927e+00
9.3063008649662049e-01
1.8482540845270204e-01
4.2486926670212505e-02
4.2486926670212505e-02
1.3093952423233909e-01
2.8455786257606746e+02
6.8609889528700521e+01
2.2622189630797177e+01
8.7749113372175405e+00
3.7553599626065184e+00
1.7035903455455901e+00
7.9610924849766440e-01
1.9785586566953522e-01
8.5211176837619682e-02
2.8455786257606746e+02
6.8609889528700521e+01
2.2622189630797177e+01
8.7749113372175405e+00
3.7553599626065184e+00
1.7035903455455901e+00
7.9610924849766440e-01
1.9785586566953522e-01
8.5211176837619682e-02
8.5211176837619682e-02
7.1150149470514927e+00
9.3063008649662049e-01
1.8482540845270204e-01
4.2486926670212505e-02
4.2486926670212505e-02
1.3093952423233909e-01

View File

@ -0,0 +1,4 @@
electron_up_num_isSet 1
electron_up_num 4
electron_dn_num_isSet 1
electron_dn_num 4

View File

@ -0,0 +1,11 @@
rank_metadata_code 0
rank_metadata_author 0
metadata_code_num_isSet 0
metadata_author_num_isSet 0
len_metadata_package_version 6
metadata_package_version
1.1.0
len_metadata_description 0
metadata_description
metadata_code
metadata_author

View File

@ -0,0 +1,854 @@
rank_mo_coefficient 2
dims_mo_coefficient 0 28
dims_mo_coefficient 1 30
rank_mo_occupation 0
rank_mo_class 0
rank_mo_symmetry 0
mo_num_isSet 1
mo_num 28
len_mo_type 0
mo_type
mo_coefficient
-7.0721075166082403e-01
-8.4640142220538696e-04
2.9398577074268899e-04
2.4383493049404299e-10
2.2224952220095200e-10
2.7989678358100701e-04
-2.6329911213756698e-10
-2.2904776108994999e-10
-4.1344564092538202e-04
-5.7269518868910298e-05
-1.4534593577561000e-18
1.3575686263628201e-11
-5.7269518868925802e-05
9.2284264952617201e-12
1.1453903773783699e-04
-7.0721075166061498e-01
-8.4640137486997598e-04
2.9398147898855202e-04
-1.5386527980984601e-10
-5.7381766191219903e-11
-2.7989467487437902e-04
2.0567257857029200e-10
1.0069577755683501e-10
4.1344292069720498e-04
-5.7269890490102097e-05
9.4846217292739991e-19
-3.1091800440165801e-12
-5.7269890490100898e-05
-1.8692448451225200e-12
1.1453978098020499e-04
7.0755922441833596e-01
2.3295864170073300e-03
-4.5739491884162096e-03
1.6792264360620400e-10
1.7374668227397101e-10
-1.4548032295907600e-03
-1.6381999029192999e-10
-1.7763418845587500e-10
2.4599715411151202e-03
-2.7013636561849401e-04
-8.6882900914044800e-17
-6.5219039915486296e-12
-2.7013636561821298e-04
-3.3846199538894199e-12
5.4027273123671198e-04
-7.0755922403196403e-01
-2.3295864726529500e-03
4.5739492173190099e-03
-7.4629646084024303e-11
-1.3959225482197400e-10
-1.4548034467005500e-03
7.5727411712699505e-11
1.4538554754373699e-10
2.4599717569785502e-03
2.7013634642488501e-04
8.9010856268087394e-17
4.3478623902606402e-13
2.7013634642482598e-04
-8.3946884468938404e-13
-5.4027269284971505e-04
1.8814332337444600e-03
7.0971366351881204e-01
-1.4511148101077900e-01
4.8207867186895403e-10
7.9122938106352503e-10
-1.5746929814788699e-01
-5.5078352728447900e-10
-9.2179922719884896e-10
6.1723070208405902e-02
-8.7948100624307603e-03
1.1525644357643800e-16
8.6298754385290092e-12
-8.7948100624306406e-03
1.9541883824831700e-11
1.7589620124861399e-02
1.8814332463198500e-03
7.0971366352465404e-01
-1.4511148099536200e-01
-3.5283627986359002e-10
-7.1699840235555201e-10
1.5746929821713601e-01
4.3431941416993903e-10
8.5728180996150101e-10
-6.1723070244456300e-02
-8.7948100729340600e-03
-1.9032973973149101e-17
1.3494647445894400e-11
-8.7948100729343098e-03
2.0302916883829999e-11
1.7589620145868401e-02
-2.7094045638340202e-03
6.8362376295314298e-01
1.5764087330816101e-01
2.2956440424847301e-11
2.1768179290555201e-10
1.4403529789410299e-01
-3.3895539553199502e-11
-2.6244915057405802e-10
-2.6279053302808001e-02
6.9131665678477897e-03
-4.4851569673813903e-17
2.5807996521048300e-12
6.9131665678479398e-03
7.2465613130679097e-12
-1.3826333135695699e-02
2.7094066156690901e-03
-6.8362376293454497e-01
-1.5764087331776300e-01
-3.9610655163515502e-11
-2.2523636301667499e-10
1.4403529793836400e-01
4.9319263329388902e-11
2.6928031034895902e-10
-2.6279053347162001e-02
-6.9131665638129001e-03
6.8033103805249899e-18
1.5976349822409799e-12
-6.9131665638129400e-03
6.9420854729237001e-12
1.3826333127625800e-02
2.6169223221624700e-02
3.3928126066295097e-02
-3.7131325682296401e-01
-3.8054943571425903e-11
-9.7219511495836006e-11
-4.8414296655770400e-01
3.6637887649198898e-11
1.1042518972448299e-10
-1.8915347847529701e-01
-7.7446607959373703e-03
5.8352709498152800e-16
1.9206658837610000e-12
-7.7446607959373703e-03
-1.3625485197316100e-12
1.5489321591874701e-02
2.6169223260136699e-02
3.3928126053263799e-02
-3.7131325685442101e-01
-2.1555478878464700e-11
7.1826453231289794e-11
4.8414296654170202e-01
1.8909767099903602e-11
-8.7187669194950602e-11
1.8915347846135699e-01
-7.7446607910455099e-03
-4.3781226047057002e-18
-1.8910007914556899e-12
-7.7446607910465603e-03
-2.6225886213881401e-12
1.5489321582092101e-02
1.5436838988382599e-10
6.8441106343283396e-10
-6.5032696723372503e-10
-2.9395717785548697e-01
-1.9340252842475100e-01
-1.6245257273823701e-10
-2.1973031423966000e-01
-1.4456662924903399e-01
2.5750172905065701e-10
-1.6288544527154100e-11
-4.1536972840299702e-18
1.3763627299460800e-02
-1.6288473027628201e-11
9.0554697097865108e-03
3.2577017554782297e-11
1.5437714184527701e-10
6.8618453792743297e-10
-6.4581905028750498e-10
-2.9395717785548697e-01
-1.9340252842475000e-01
1.7553866368799799e-10
-2.1973031423966000e-01
-1.4456662924903499e-01
-2.6303964545136302e-10
-1.8414402314252599e-11
4.6419474571672102e-17
-1.3763627299460700e-02
-1.8414350219599801e-11
-9.0554697097869601e-03
3.6828752533852403e-11
3.5405233911983103e-11
1.5935657539442099e-10
-1.5126520035363701e-10
1.9340252842944800e-01
-2.9395717785857800e-01
-3.7911107547901000e-11
1.4456662924521399e-01
-2.1973031423714701e-01
5.9907713049249294e-11
-3.8167421437344899e-12
-6.2092957790451899e-16
-9.0554697096083808e-03
-3.8164920727211203e-12
1.3763627299345100e-02
7.6332342164556207e-12
3.5407034149459198e-11
1.5972108841729900e-10
-1.5033500951526601e-10
1.9340252842944899e-01
-2.9395717785857700e-01
4.0610695347977600e-11
1.4456662924521499e-01
-2.1973031423714801e-01
-6.1051179612880696e-11
-4.2549068865860598e-12
2.7731374944621400e-16
9.0554697096091805e-03
-4.2552184547439697e-12
-1.3763627299342799e-02
8.5101253413300400e-12
9.7418392979351705e-11
3.9142762782931900e-10
-3.8904596633517501e-10
2.5873597137038701e-01
2.3457640234950300e-01
-8.9040071713990102e-11
4.7991586834189798e-01
4.3510354292653503e-01
1.5393068037422900e-10
-8.6634539764106500e-12
3.5283381913778500e-16
3.1183292788531198e-03
-8.6637979643128103e-12
2.8271541049970802e-03
1.7327251940723501e-11
5.8168952994990298e-11
4.0339224634320402e-10
-3.6031660338831398e-10
-2.5873597137038501e-01
-2.3457640234950200e-01
9.5683928876472000e-11
-4.7991586834189898e-01
-4.3510354292653602e-01
-1.3563900822968601e-10
-1.2077935726964100e-11
-1.8742165367917301e-16
3.1183292788532499e-03
-1.2077878492649799e-11
2.8271541049970901e-03
2.4155814219613901e-11
6.7284214528756196e-12
2.9159091384607802e-11
-2.8458572011697100e-11
-2.3457640234507701e-01
2.5873597136637000e-01
-6.7812590869932097e-12
-4.3510354293083198e-01
4.7991586834579603e-01
1.1271018818141100e-11
-6.7531177632150998e-13
2.0754716138464700e-16
-2.8271541051292401e-03
-6.7555279009878003e-13
3.1183292789718200e-03
1.3508645664202900e-12
4.8050539944224999e-12
2.9740881248678898e-11
-2.7050139893577999e-11
2.3457640234507601e-01
-2.5873597136637400e-01
7.0997996742925101e-12
4.3510354293083098e-01
-4.7991586834579297e-01
-1.0372309818446899e-11
-8.4225570578491804e-13
-1.1301843461542301e-16
-2.8271541051277599e-03
-8.4205190976517805e-13
3.1183292789727000e-03
1.6843076155501000e-12
-2.5176096446687900e-02
3.2774465158704102e-01
2.2724112596623400e+00
-6.8613353667071494e-11
-6.5077716028125494e-11
-7.5326977570779205e-02
6.6980134520377796e-11
6.9850378741163298e-11
-2.1073114917167000e+00
-1.8684595323321600e-02
-6.4094675263288804e-17
3.7888042573808197e-12
-1.8684595323321201e-02
8.5745846931191503e-13
3.7369190646642798e-02
2.5176096778021101e-02
-3.2774465158178201e-01
-2.2724112596647998e+00
-2.4710382631654201e-11
3.1688598708784197e-11
-7.5326977541818496e-02
2.1302574147714999e-11
-3.8163446525789200e-11
-2.1073114917456000e+00
1.8684595325887000e-02
1.2104132960099100e-16
-3.3089349417006402e-12
1.8684595325886798e-02
-1.7687455406517800e-12
-3.7369190651773902e-02
-4.0136890502691402e-01
-2.0484865988120000e+00
1.9290087660434900e+00
-1.5255940559589300e-10
-1.1534206411468899e-10
4.9597491029698398e-01
1.9691808455836300e-10
1.4209490083669801e-10
-7.6535834916269097e-01
5.1442316980158699e-02
5.6652899273718298e-17
-1.1696674868144900e-11
5.1442316980158997e-02
-6.0194440436725501e-12
-1.0288463396031799e-01
-4.0136890506638001e-01
-2.0484865988013401e+00
1.9290087660688300e+00
2.9330987178913700e-10
1.6298981098252599e-10
-4.9597491030052798e-01
-6.1497325214211903e-10
-4.8679973082333303e-10
7.6535834918539902e-01
5.1442316978386998e-02
3.6085540934624898e-17
-5.1287403356897098e-13
5.1442316978387199e-02
-1.7807743229235301e-12
-1.0288463395677400e-01
2.1033019289790500e-01
1.2697223826999899e+00
-1.3982628680377001e+00
1.6310638156003901e-10
1.6518658352552201e-10
1.0299318537464099e+00
-1.9865612998472701e-10
-1.9418477121877900e-10
-1.1695812534093799e+00
1.3145488154253400e-02
-6.8623569595889600e-17
8.5776931755697107e-12
1.3145488154253300e-02
5.6577262870788797e-12
-2.6290976308506801e-02
2.1033019281597901e-01
1.2697223827284201e+00
-1.3982628679689899e+00
-2.4099332848813998e-10
-1.8412126289776701e-10
-1.0299318537071900e+00
2.7418568296147999e-10
2.1404612248438301e-10
1.1695812534368399e+00
1.3145488143007601e-02
1.2006077474994700e-17
1.0707933973629400e-12
1.3145488143007700e-02
2.5488093316238801e-12
-2.6290976286015299e-02
2.8417453260683301e-11
-5.1743791910840100e-10
5.3443319244642402e-10
-1.2008183484013000e+00
-4.3943075156660699e-01
6.0135257130292405e-11
1.1339180949585901e+00
4.1494908979973499e-01
-6.9861216666258398e-11
8.1255573499297103e-12
1.1515029506405300e-17
8.9577336989961800e-02
8.1254652480849700e-12
3.2780175761273199e-02
-1.6251022598014700e-11
2.8447325101490599e-11
-1.9714929400320900e-10
1.8680836737754399e-10
-1.2008183484013000e+00
-4.3943075156660699e-01
-1.6089681509883299e-11
1.1339180949585901e+00
4.1494908979973499e-01
5.1217852728328897e-11
9.7032581961001093e-13
-1.4060439976460400e-18
-8.9577336989961995e-02
9.7026640372573801e-13
-3.2780175761273102e-02
-1.9405922233357598e-12
1.2148954296671199e-11
-9.9601290906686698e-11
8.4681303499652098e-11
4.3943075158579997e-01
-1.2008183484083199e+00
2.9201470802937101e-11
-4.1494908981533701e-01
1.1339180949643000e+00
-3.4416520707022900e-11
3.9049691465164500e-12
-5.2205896098171798e-18
-3.2780175760547203e-02
3.9050231122230100e-12
8.9577336989695500e-02
-7.8099922587394592e-12
1.2164311859731400e-11
-9.6828000378008601e-11
9.1715700033760000e-11
4.3943075158580103e-01
-1.2008183484083199e+00
-8.7575777878504696e-12
-4.1494908981533901e-01
1.1339180949643000e+00
2.5761265644784199e-11
5.8398627909893700e-13
-2.5122924909986502e-16
3.2780175760546697e-02
5.8428623966483504e-13
-8.9577336989696096e-02
-1.1682725187637699e-12
-5.2500856688062801e-11
1.1528502754095500e-09
-6.4105219038733602e-10
-1.2317724801889900e+00
-5.8354969513373200e-01
-5.0452486787729097e-11
1.4525209636677900e+00
6.8812883803959302e-01
1.7028794905949300e-11
-7.3354377899700995e-12
2.8641277385968997e-17
-3.2418128002569102e-02
-7.3355582474280407e-12
-1.5358021888295400e-02
1.4670996037398101e-11
9.1930780776897502e-11
1.1077218478980699e-09
-9.9013250391666602e-10
1.2317724801889900e+00
5.8354969513373200e-01
2.6010923535908501e-11
-1.4525209636677900e+00
-6.8812883803959202e-01
-8.4348180219857700e-11
5.2275172418678799e-12
-5.3705789528586900e-17
-3.2418128002569199e-02
5.2274138818148398e-12
-1.5358021888295499e-02
-1.0454931123682700e-11
1.8217497441579499e-11
-4.2821771990202798e-10
1.6456367054240899e-11
-5.8354969511265598e-01
1.2317724801790000e+00
1.8672191492390200e-11
6.8812883801913705e-01
-1.4525209636581000e+00
-7.0921513549728897e-12
2.6876320253004498e-12
2.6506717230254200e-17
-1.5358021888920400e-02
2.6875184953851499e-12
3.2418128002865497e-02
-5.3751505206856098e-12
-3.3357457536767801e-11
-4.1210975726592101e-10
3.6916099446356498e-10
5.8354969511265498e-01
-1.2317724801790000e+00
-9.9432650706912908e-12
-6.8812883801913705e-01
1.4525209636581000e+00
3.1131825955132600e-11
-1.7987553779928500e-12
-3.2622741677602497e-17
-1.5358021888920799e-02
-1.7988219706279299e-12
3.2418128002865101e-02
3.5975773486207698e-12
-3.5176039875256399e-01
-1.6897995997401500e+00
2.8500768016438802e+00
5.6644264747632401e-11
7.3623850162506597e-11
-1.0530616397612900e+00
-5.5048547890554003e-11
-8.0641232360870602e-11
1.4349684097286500e-01
5.5222187307343802e-02
1.8731492197637699e-16
-2.1530699621449499e-12
5.5222187307343303e-02
6.8619297331144399e-13
-1.1044437461468699e-01
3.5176039885864002e-01
1.6897995997057500e+00
-2.8500768016232199e+00
3.4955535482365698e-11
-2.9432601922521700e-11
-1.0530616397553001e+00
-2.9237090644878498e-11
4.1122331701673297e-11
1.4349684096644100e-01
-5.5222187306985401e-02
-1.6425375108164399e-16
2.7873138346219898e-12
-5.5222187306985797e-02
2.0902479638670100e-12
1.1044437461397100e-01
-5.2656249894019802e-01
-2.6136337993155698e+00
5.5852212742701504e+00
4.0844571104151203e-11
3.5505982171968500e-11
8.6217787880040098e-01
-4.0839122014388802e-11
-4.0539124389347499e-11
-2.6568652552973702e+00
-1.0009706862156900e-01
-6.2461771813812901e-16
-3.1715851805511302e-12
-1.0009706862156800e-01
-7.3672870860297704e-13
2.0019413724313700e-01
5.2656249943361200e-01
2.6136337993437202e+00
-5.5852212742869600e+00
2.5890399708038000e-11
-1.9820484900284500e-11
8.6217787879296903e-01
-2.3987348571773002e-11
2.3917950888970299e-11
-2.6568652552897101e+00
1.0009706862108000e-01
3.7413768607055601e-16
3.3551279956744199e-12
1.0009706862107901e-01
1.9822342238817400e-12
-2.0019413724215801e-01
-2.4661985576074501e-12
3.4554206869590302e-12
-2.3479700077720898e-12
-1.8705246611175400e-01
2.6263216205041501e-01
-1.3415216966807200e-12
1.1330987906367800e-01
-1.5909343051552699e-01
1.0126329723616200e-12
-2.2663530673025501e-13
-6.9155972793808798e-16
-3.5668558671723899e-01
-2.2595730169050101e-13
5.0080658522999599e-01
4.5259260842075602e-13
-2.4673397099155001e-12
3.1815097717512002e-12
-3.0505620600711500e-12
-1.8705246611175400e-01
2.6263216205041501e-01
-6.8804692398897802e-13
1.1330987906367700e-01
-1.5909343051552699e-01
-1.5513758599267599e-13
1.0364516884727900e-13
-6.6362639016200102e-16
3.5668558671723799e-01
1.0412396486409400e-13
-5.0080658522999499e-01
-2.0776913371137301e-13
1.4993481987238401e-11
-1.8922695666285100e-11
1.2439702202050899e-11
-2.6263216204742601e-01
-1.8705246610755699e-01
7.5849192817525499e-12
1.5909343051309899e-01
1.1330987906026600e-01
-5.4184815012616199e-12
1.3041529782310100e-12
1.3145996896999699e-16
-5.0080658522988297e-01
1.3041111456745700e-12
-3.5668558671707901e-01
-2.6082641239055702e-12
1.5003803150870501e-11
-1.7280060840338200e-11
1.6586357115699799e-11
-2.6263216204742601e-01
-1.8705246610755799e-01
4.4885786575922101e-12
1.5909343051309599e-01
1.1330987906026700e-01
3.0554713649755500e-13
-6.5705815006041404e-13
1.9195023363100499e-16
5.0080658522988197e-01
-6.5732811617356697e-13
3.5668558671708001e-01
1.3143862662339800e-12
1.9831004149326600e-16
1.2173282744254400e-15
-1.6957141051853300e-15
1.0695022009804100e-16
-1.9376694833227101e-17
1.0853680180940700e-16
8.9016205154306094e-17
-7.8361329500674700e-17
3.8680635306250199e-16
5.1915289953861399e-01
-3.2212065132208401e-01
-1.9260375681964600e-16
-5.1915289953861399e-01
1.4701842130759499e-16
-3.1682290617889499e-16
6.0291695092213395e-17
1.4814119322235001e-16
5.1563629781359095e-16
2.5798282570549500e-17
-9.5394714762576903e-18
1.6119171845786999e-16
6.8661277831530796e-17
-6.3472613018684202e-17
8.2867114549150295e-17
5.1915289953861499e-01
-3.2212065132208600e-01
-4.4082874815270500e-17
-5.1915289953861399e-01
8.8542903790048200e-17
-1.3149886998078500e-16
-1.7928758133518600e-16
-8.8287028329936896e-16
4.4678552721665499e-16
-2.0063330061150699e-17
-6.8994703085366104e-17
-2.5487618105643599e-17
-2.3495411327371601e-16
2.6734243814771399e-16
-7.7382964115043100e-17
-2.7896466712851598e-01
-5.9946613259838699e-01
4.5863634879884100e-16
2.7896466712851598e-01
-3.5726394793376601e-16
1.1415954041885800e-16
-1.1358574425068199e-16
-5.6961595552658695e-16
6.7822833807832101e-16
1.0740856551724000e-17
-9.4748823554515400e-17
-4.3245272356297598e-17
-1.4161688442691101e-16
2.2961418579579798e-16
5.4441601365626598e-16
-2.7896466712851498e-01
-5.9946613259838899e-01
-2.8514234636220901e-16
2.7896466712851398e-01
1.1397749340997400e-15
5.3299051175046097e-16
-2.1055442539976200e-16
-9.2539006221329997e-16
5.4312101796389101e-15
-1.4254508684229199e-17
7.7769514662586003e-17
5.0083613545556301e-17
-1.0523701012825000e-17
-3.1061113529039299e-17
-2.4776494717215099e-15
-5.0466462465352901e-01
4.5130732174816202e-01
-1.6624562559764500e-16
5.0466462465352802e-01
-6.2362558175736501e-16
5.9452825564852101e-16
4.9503724342388397e-16
2.2555605197955902e-15
-6.2422984408117899e-15
-5.6534969606865097e-18
-4.8786995434470000e-18
-1.1795127982608399e-16
1.9809669565505800e-16
-3.7810704045338300e-16
-3.3167618203472301e-15
5.0466462465352901e-01
-4.5130732174816002e-01
-1.2578886233921600e-16
-5.0466462465352702e-01
-5.1738574973077103e-16
-1.5372784630585199e-15
1.7138353209207099e-16
7.6839284164587203e-16
-4.2030112383783396e-15
1.0409538678528000e-16
-7.2257067639476599e-17
1.9565221033825400e-16
3.6601853302426798e-16
-4.3492844732246999e-16
2.0901638181633501e-15
3.9084360554782399e-01
5.8273651378839197e-01
-7.4256397084404996e-16
-3.9084360554782399e-01
-5.4441790623460002e-16
-6.7914176332330997e-16
-2.1328882671189100e-16
-8.5699378636103499e-16
4.1496858620333897e-15
-1.0929456517064800e-18
-2.6419580815979800e-17
9.3913135070493002e-17
7.6345139005124505e-17
-1.9617510106642300e-16
2.4793195238279301e-15
-3.9084360554782399e-01
-5.8273651378839297e-01
-1.8257339205039500e-16
3.9084360554782299e-01
-1.1176754262129201e-15
8.9783377454185793e-16
2.2273129721104401e-01
1.0810634044288701e+00
-8.7832745398611600e-01
2.2662241796086099e-11
2.3566555823513202e-11
-6.1561349138910904e-01
-2.9826084929026401e-11
-2.9622199272019701e-11
7.0193925384499400e-01
3.5133925687712902e-01
-6.7220341064391800e-16
1.7515837617002400e-12
3.5133925687712803e-01
1.2294557786132601e-12
-7.0267851375425705e-01
2.2273129726002200e-01
1.0810634044139300e+00
-8.7832745402194801e-01
-3.9720861757923797e-11
-2.9809218957580201e-11
6.1561349138082000e-01
4.5934265595506099e-11
3.5516477685242500e-11
-7.0193925386781697e-01
3.5133925688138801e-01
-1.1465778507545800e-16
4.7953907991553398e-13
3.5133925688138901e-01
7.6460561416077804e-13
-7.0267851376277701e-01
-3.2043318544166899e-13
1.7534881088607200e-13
1.8584306770662101e-13
-8.8966251300795995e-02
8.0520306698256203e-02
-1.4126927998142599e-13
-1.7889670570350000e-01
1.6191328059768600e-01
-6.6273590812468005e-14
-2.4387516473889701e-14
-6.2459884712229098e-16
6.7665150748538805e-01
-2.4467271496101999e-14
-6.1241410213455005e-01
4.8854787969991697e-14
3.5130105504791798e-13
-3.0610125623170597e-14
-3.0664903182444902e-13
8.8966251300795995e-02
-8.0520306698257493e-02
2.5325485363886301e-14
1.7889670570350000e-01
-1.6191328059768501e-01
-2.4662316491051701e-13
3.4344718966134603e-14
1.6396621506589801e-16
6.7665150748538905e-01
3.4150203690015403e-14
-6.1241410213455005e-01
-6.8494922656150094e-14
6.2199387510491202e-12
-4.5940673682159397e-12
-2.6992046198076099e-12
8.0520306699779304e-02
8.8966251302173296e-02
3.0813650942880301e-12
1.6191328059620799e-01
1.7889670570216301e-01
9.2377238544556606e-13
5.1540194586667705e-13
-1.1453305154261000e-15
-6.1241410213459502e-01
5.1644877384985098e-13
-6.7665150748542802e-01
-1.0318507197165300e-12
-7.2645998690197898e-12
-4.8251528097410603e-13
7.1702470216735804e-12
-8.0520306699778901e-02
-8.8966251302173394e-02
-7.9930168253168102e-13
-1.6191328059620799e-01
-1.7889670570216301e-01
5.3610285788747998e-12
-6.5702136793927197e-13
6.8247448270587397e-16
-6.1241410213459502e-01
-6.5755124180901996e-13
-6.7665150748542802e-01
1.3145726097482900e-12
-7.2439162925477502e-02
2.1012513312147100e-02
2.4533973049632900e+00
-4.1317129812966003e-12
5.9809803799819196e-13
-1.1184360216680100e+00
5.1604427313037998e-12
-1.2338492226914499e-13
-8.6031448401599597e-01
-5.8157814334275004e-01
-6.2796905313327397e-16
8.6980208643988896e-13
-5.8157814334274804e-01
8.6813498818952896e-13
1.1631562866855001e+00
7.2439162549396405e-02
-2.1012513343480699e-02
-2.4533973049441302e+00
1.8071516922317900e-11
1.5836059015021800e-11
-1.1184360216394300e+00
-1.5976218913866899e-11
-1.3047323312282999e-11
-8.6031448404482502e-01
5.8157814334507396e-01
3.8643531451905200e-16
-1.0033126668429899e-13
5.8157814334507296e-01
8.4526095928371105e-14
-1.1631562866901499e+00
mo_occupation
mo_class
mo_symmetry

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,24 @@
rank_nucleus_charge 1
dims_nucleus_charge 0 2
rank_nucleus_coord 2
dims_nucleus_coord 0 2
dims_nucleus_coord 1 3
rank_nucleus_label 1
dims_nucleus_label 0 2
nucleus_num_isSet 1
nucleus_num 2
len_nucleus_point_group 0
nucleus_point_group
nucleus_charge
4.0000000000000000e+00
4.0000000000000000e+00
nucleus_coord
0.0000000000000000e+00
0.0000000000000000e+00
2.3183160107063618e+00
0.0000000000000000e+00
0.0000000000000000e+00
-2.3183160107063618e+00
nucleus_label
Be
Be

View File

View File

@ -0,0 +1,536 @@
rank_ao_shell 1
dims_ao_shell 0 263
rank_ao_normalization 1
dims_ao_normalization 0 263
ao_cartesian_isSet 1
ao_cartesian 1
ao_num_isSet 1
ao_num 263
ao_shell
0
1
2
3
4
5
5
5
6
6
6
7
7
7
8
8
8
9
9
9
9
9
9
10
10
10
10
10
10
11
11
11
11
11
11
12
12
12
12
12
12
12
12
12
12
13
13
13
13
13
13
13
13
13
13
14
15
16
17
18
18
18
19
19
19
20
20
20
21
21
21
21
21
21
22
22
22
22
22
22
23
24
25
26
27
28
28
28
29
29
29
30
30
30
31
31
31
32
32
32
32
32
32
33
33
33
33
33
33
34
34
34
34
34
34
35
35
35
35
35
35
35
35
35
35
36
36
36
36
36
36
36
36
36
36
37
38
39
40
41
42
43
43
43
44
44
44
45
45
45
46
46
46
47
47
47
48
48
48
48
48
48
49
49
49
49
49
49
50
50
50
50
50
50
51
51
51
51
51
51
51
51
51
51
52
52
52
52
52
52
52
52
52
52
53
54
55
56
57
58
59
60
60
60
61
61
61
62
62
62
63
63
63
64
64
64
65
65
65
66
66
66
66
66
66
67
67
67
67
67
67
68
68
68
68
68
68
69
69
69
69
69
69
70
70
70
70
70
70
70
70
70
70
71
71
71
71
71
71
71
71
71
71
ao_normalization
1.0000000000000000e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.7320508075688772e+00
1.7320508075688772e+00
9.9999999999999978e-01
1.7320508075688772e+00
9.9999999999999978e-01
1.0000000000000000e+00
1.7320508075688772e+00
1.7320508075688772e+00
1.0000000000000000e+00
1.7320508075688772e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.7320508075688776e+00
1.7320508075688776e+00
1.0000000000000000e+00
1.7320508075688776e+00
1.0000000000000000e+00
1.0000000000000000e+00
2.2360679774997894e+00
2.2360679774997894e+00
2.2360679774997898e+00
3.8729833462074166e+00
2.2360679774997894e+00
1.0000000000000000e+00
2.2360679774997898e+00
2.2360679774997894e+00
1.0000000000000000e+00
1.0000000000000000e+00
2.2360679774997894e+00
2.2360679774997894e+00
2.2360679774997894e+00
3.8729833462074157e+00
2.2360679774997894e+00
1.0000000000000000e+00
2.2360679774997894e+00
2.2360679774997894e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.0000000000000002e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.7320508075688774e+00
1.7320508075688772e+00
1.0000000000000000e+00
1.7320508075688774e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.7320508075688776e+00
1.7320508075688776e+00
1.0000000000000000e+00
1.7320508075688776e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.0000000000000002e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.7320508075688774e+00
1.7320508075688774e+00
1.0000000000000000e+00
1.7320508075688774e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.7320508075688772e+00
1.7320508075688772e+00
1.0000000000000000e+00
1.7320508075688772e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.7320508075688774e+00
1.7320508075688774e+00
1.0000000000000000e+00
1.7320508075688774e+00
1.0000000000000000e+00
1.0000000000000000e+00
2.2360679774997902e+00
2.2360679774997902e+00
2.2360679774997902e+00
3.8729833462074170e+00
2.2360679774997902e+00
1.0000000000000000e+00
2.2360679774997902e+00
2.2360679774997902e+00
1.0000000000000000e+00
1.0000000000000000e+00
2.2360679774997902e+00
2.2360679774997902e+00
2.2360679774997902e+00
3.8729833462074170e+00
2.2360679774997902e+00
1.0000000000000000e+00
2.2360679774997902e+00
2.2360679774997902e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.7320508075688770e+00
1.7320508075688770e+00
1.0000000000000000e+00
1.7320508075688770e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.7320508075688774e+00
1.7320508075688774e+00
1.0000000000000000e+00
1.7320508075688774e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.7320508075688770e+00
1.7320508075688770e+00
1.0000000000000000e+00
1.7320508075688770e+00
1.0000000000000000e+00
1.0000000000000000e+00
2.2360679774997898e+00
2.2360679774997898e+00
2.2360679774997902e+00
3.8729833462074170e+00
2.2360679774997898e+00
9.9999999999999989e-01
2.2360679774997902e+00
2.2360679774997898e+00
1.0000000000000000e+00
1.0000000000000000e+00
2.2360679774997894e+00
2.2360679774997894e+00
2.2360679774997894e+00
3.8729833462074175e+00
2.2360679774997894e+00
1.0000000000000000e+00
2.2360679774997894e+00
2.2360679774997894e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.7320508075688774e+00
1.7320508075688774e+00
1.0000000000000000e+00
1.7320508075688774e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.7320508075688772e+00
1.7320508075688772e+00
1.0000000000000000e+00
1.7320508075688772e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.7320508075688776e+00
1.7320508075688776e+00
1.0000000000000000e+00
1.7320508075688776e+00
1.0000000000000000e+00
1.0000000000000000e+00
1.7320508075688774e+00
1.7320508075688774e+00
1.0000000000000000e+00
1.7320508075688774e+00
1.0000000000000000e+00
1.0000000000000000e+00
2.2360679774997898e+00
2.2360679774997898e+00
2.2360679774997898e+00
3.8729833462074170e+00
2.2360679774997898e+00
1.0000000000000000e+00
2.2360679774997898e+00
2.2360679774997898e+00
1.0000000000000000e+00
1.0000000000000000e+00
2.2360679774997902e+00
2.2360679774997898e+00
2.2360679774997902e+00
3.8729833462074170e+00
2.2360679774997898e+00
1.0000000000000002e+00
2.2360679774997902e+00
2.2360679774997902e+00
1.0000000000000000e+00

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,4 @@
electron_up_num_isSet 1
electron_up_num 34
electron_dn_num_isSet 1
electron_dn_num 34

View File

@ -0,0 +1,11 @@
rank_metadata_code 0
rank_metadata_author 0
metadata_code_num_isSet 0
metadata_author_num_isSet 0
len_metadata_package_version 6
metadata_package_version
0.3.0
len_metadata_description 0
metadata_description
metadata_code
metadata_author

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,39 @@
rank_nucleus_charge 1
dims_nucleus_charge 0 5
rank_nucleus_coord 2
dims_nucleus_coord 0 5
dims_nucleus_coord 1 3
rank_nucleus_label 1
dims_nucleus_label 0 5
nucleus_num_isSet 1
nucleus_num 5
len_nucleus_point_group 0
nucleus_point_group
nucleus_charge
6.0000000000000000e+00
1.0000000000000000e+00
9.0000000000000000e+00
1.7000000000000000e+01
3.5000000000000000e+01
nucleus_coord
1.0962433534584579e+00
8.9070540169738155e-01
7.7770922802588915e-01
1.1684592373426630e+00
1.1256607200533930e+00
2.8333703148293430e+00
1.4870972977121319e+00
3.1196524844787969e+00
-3.8554381384115000e-01
3.4976638499838888e+00
-1.3029208100731819e+00
-1.2722203194390641e-01
-2.3025745920813350e+00
-3.5420270605050352e-01
-5.3341299343176142e-02
nucleus_label
C
H
F
Cl
Br

View File

@ -36,10 +36,17 @@ do
exported=${i%.org}.exported
exported=$(dirname $exported)/.$(basename $exported)
NOW=$(date +"%m%d%H%M.%S")
extract_doc ${i} > $exported
extract_doc ${i} &> $exported
rc=$?
# Make log file older than the exported files
touch -t ${NOW} $exported
# Fail if tangling failed
if [[ $rc -ne 0 ]] ; then
cat $exported
exit rc
fi
done

View File

@ -134,7 +134,7 @@ def main():
DEPS[fo] += [f90, "$(src_qmckl_fo)"]
else:
DEPS[fo] = [f90, "$(src_qmckl_fo)"]
if "(eval fh_func)" in grep:
FH_FUNC_FILES += [fh_func]
@ -151,7 +151,7 @@ def main():
else:
DEPS[fh_type] = [tangled]
if "(eval c_test)" in grep:
C_TEST_FILES += [c_test]
@ -164,7 +164,7 @@ def main():
TESTS[c_test_x] += [c_test, "$(qmckl_h)"]
else:
TESTS[c_test_x] = [c_test, "$(qmckl_h)"]
if "(eval f_test)" in grep:
F_TEST_FILES += [f_test]
@ -181,20 +181,20 @@ def main():
output = ["",
"## Source files",
"",
"ORG_FILES="+" ".join(ORG_FILES),
"ORG_FILES="+" ".join(ORG_FILES),
"TANGLED_FILES="+" ".join(TANGLED_FILES),
"EXPORTED_FILES="+" ".join(EXPORTED_FILES),
"C_FILES="+" ".join(C_FILES),
"F_FILES="+" ".join(F_FILES),
"C_O_FILES="+" ".join(C_O_FILES),
"FH_FUNC_FILES="+" ".join(FH_FUNC_FILES),
"FH_TYPE_FILES="+" ".join(FH_TYPE_FILES),
"H_FUNC_FILES="+" ".join(H_FUNC_FILES),
"H_TYPE_FILES="+" ".join(H_TYPE_FILES),
"H_PRIVATE_FUNC_FILES="+" ".join(H_PRIVATE_FUNC_FILES),
"H_PRIVATE_TYPE_FILES="+" ".join(H_PRIVATE_TYPE_FILES),
"C_TEST_FILES="+" ".join(C_TEST_FILES),
"F_TEST_FILES="+" ".join(F_TEST_FILES),
"EXPORTED_FILES="+" ".join(EXPORTED_FILES),
"C_FILES="+" ".join(C_FILES),
"F_FILES="+" ".join(F_FILES),
"C_O_FILES="+" ".join(C_O_FILES),
"FH_FUNC_FILES="+" ".join(FH_FUNC_FILES),
"FH_TYPE_FILES="+" ".join(FH_TYPE_FILES),
"H_FUNC_FILES="+" ".join(H_FUNC_FILES),
"H_TYPE_FILES="+" ".join(H_TYPE_FILES),
"H_PRIVATE_FUNC_FILES="+" ".join(H_PRIVATE_FUNC_FILES),
"H_PRIVATE_TYPE_FILES="+" ".join(H_PRIVATE_TYPE_FILES),
"C_TEST_FILES="+" ".join(C_TEST_FILES),
"F_TEST_FILES="+" ".join(F_TEST_FILES),
"TESTS="+" ".join(TESTS.keys()).replace("$(srcdir)/",""),
"HTML_FILES="+" ".join(HTML.values()),
"TEXT_FILES="+" ".join(TEXT.values()),
@ -234,10 +234,17 @@ def main():
prefix = "tests_" + f.rsplit("/",1)[-1]
output += [ prefix + "_SOURCES = " + \
" ".join(TESTS[f]).replace("$(srcdir)",""),
prefix + "_LDADD = src/libqmckl.la",
prefix + "_LDADD = src/libqmckl.la",
prefix + "_LDFLAGS = -no-install",
"" ]
tmp = "EXTRA_DIST += "
for dir in glob("share/qmckl/test_data/*"):
for f in glob("%s/*"%(dir)):
tmp += " \\\n "+f
tmp += "\n"
output += tmp.split("\n")
output+= ["",
"## Documentation",
"",

18
tools/ci_install.sh Executable file
View File

@ -0,0 +1,18 @@
#!/bin/bash
# This scripts is meant to be used by Verificarlo CI to automatically install
# the library dependencies and build it with Verificarlo with vfc_probes support
# enabled.
./autogen.sh
QMCKL_DEVEL=1 ./configure --prefix=$PWD/_install \
--enable-silent-rules --enable-maintainer-mode --enable-vfc_ci --host=x86_64 \
CC="verificarlo-f" FC="verificarlo-f"
make all
# Here we build the test suite, but expect it to fail because it is run without
# specifying VFC_BACKENDS. However, the generated executables will be reused
# individually by the CI.
make check
exit 0

141
tools/qmckl_probes.c Normal file
View File

@ -0,0 +1,141 @@
#include <stdbool.h>
#include <stdlib.h>
#include <stdio.h>
#ifdef VFC_CI
#include <vfc_probes.h>
vfc_probes probes;
#endif
// QMCkl is a wrapper to Verificarlo's vfc_probes system. The goal of QMCkl
// probes isto simplify the use of vfc_probes, and to provide functions that
// can be called either wit or without vfc_ci support by using #ifndef
// statements :
//
// - when vfc_ci is disabled, qmckl_probes functions will either return false
// (no error) or perform a check based on a reference value
// - when vfc_ci is enabled, qmckl_probe functions will simply encapsulate
// calls to vfc_probe
//
// Moreover, one does not have to worry about the life cycle of the probes
// structure, as it is automatically created, dumped and freed by this wrapper.
//
// vfc_ci support can be enabled by using the following configure command :
// QMCKL_DEVEL=1 ./configure --prefix=$PWD/_install --enable-silent-rules
// --enable-maintainer-mode CC=verificarlo-f FC=verificarlo-f --host=x86_64
//
// Finally, this wrapper also comes with a Fortran interface (in its dedicated
// file).
//
// To learn more about Verificarlo CI :
// https://github.com/verificarlo/verificarlo/blob/master/doc/06-Postprocessing.md#verificarlo-ci
// Automatically initialize the vfc_probe object if VFC_CI is defined
#ifdef VFC_CI
void __attribute__((constructor)) qmckl_init_probes(){
probes = vfc_init_probes();
}
#endif
// Standard probe, without check
// - if VFC_CI is defined, place a standard probe
// - if VFC_CI is undefined, return false (no error)
bool qmckl_probe(
char * testName,
char * varName,
double value
) {
#ifdef VFC_CI
return vfc_probe(&probes, testName, varName, value);
#else
return false;
#endif
}
// Probe with absolute check
// - if VFC_CI is defined, place a probe with an absolute check
// - if VFC_CI is undefined, perform an absolute check based on target value
// and accuracy
bool qmckl_probe_check(
char * testName,
char * varName,
double value,
double expectedValue,
double accuracyTarget
) {
#ifdef VFC_CI
return vfc_probe_check(&probes, testName, varName, value, accuracyTarget);
#else
return !(abs(value - expectedValue) < accuracyTarget);
#endif
}
// Probe with relative check
// - if VFC_CI is defined, place a probe with a relative check
// - if VFC_CI is undefined, perform a relative check based on target value
// and accuracy
bool qmckl_probe_check_relative (
char * testName,
char * varName,
double value,
double expectedValue,
double accuracyTarget
) {
#ifdef VFC_CI
return vfc_probe_check_relative(&probes, testName, varName, value, accuracyTarget);
#else
return !(abs(value - expectedValue) / abs(expectedValue) < accuracyTarget);
#endif
}
// Automatically delete and dump the vfc_probe object if VFC_CI is defined
#ifdef VFC_CI
void __attribute__((destructor)) qmckl_dump_probes(){
vfc_dump_probes(&probes);
}
#endif
// Fortran wrappers
bool qmckl_probe_f(
char * testName,
char * varName,
double * value
) {
return qmckl_probe(testName, varName, *value);
}
bool qmckl_probe_check_f(
char * testName,
char * varName,
double * value,
double * expectedValue,
double * accuracyTarget
) {
return qmckl_probe_check(
testName, varName,
*value, *expectedValue, *accuracyTarget
);
}
bool qmckl_probe_check_relative_f(
char * testName,
char * varName,
double * value,
double * expectedValue,
double * accuracyTarget
) {
return qmckl_probe_check_relative(
testName, varName,
*value, *expectedValue, *accuracyTarget
);
}

65
tools/qmckl_probes.h Normal file
View File

@ -0,0 +1,65 @@
#include <stdbool.h>
#ifdef VFC_CI
#include <vfc_probes.h>
extern vfc_probes * probes;
#endif
// Wrappers to Verificarlo functions
#ifdef VFC_CI
void qmckl_init_probes() __attribute__((constructor));
#endif
bool qmckl_probe(
char * testName,
char * varName,
double value
);
bool qmckl_probe_check(
char * testName,
char * varName,
double value,
double expectedValue,
double accuracyTarget
);
bool qmckl_probe_check_relative(
char * testName,
char * varName,
double value,
double expectedValue,
double accuracyTarget
);
#ifdef VFC_CI
void qmckl_dump_probes() __attribute__((destructor));
#endif
// Fortran wrappers
bool qmckl_probe_f(
char * testName,
char * varName,
double * value
);
bool qmckl_probe_check_f(
char * testName,
char * varName,
double * value,
double * expectedValue,
double * accuracyTarget
);
bool qmckl_probe_check_relative_f(
char * testName,
char * varName,
double * value,
double * expectedValue,
double * accuracyTarget
);

49
tools/qmckl_probes_f.f90 Normal file
View File

@ -0,0 +1,49 @@
module qmckl_probes_f
interface
logical(c_bool) function qmckl_probe &
(testName, varName, val) &
bind(C, name="qmckl_probe_f")
use, intrinsic :: iso_c_binding
import
implicit none
character(C_CHAR), dimension(*) :: testName
character(C_CHAR), dimension(*) :: varName
real(C_DOUBLE) :: val
end function qmckl_probe
logical(c_bool) function qmckl_probe_check &
(testName, varName, val, expectedValue, accuracyTarget) &
bind(C, name="qmckl_probe_check_f")
use, intrinsic :: iso_c_binding
import
implicit none
character(C_CHAR), dimension(*) :: testName
character(C_CHAR), dimension(*) :: varName
real(C_DOUBLE) :: val
real(C_DOUBLE) :: expectedValue
real(C_DOUBLE) :: accuracyTarget
end function qmckl_probe_check
logical(c_bool) function qmckl_probe_check_relative &
(testName, varName, val, expectedValue, accuracyTarget) &
bind(C, name="qmckl_probe_check_relative_f")
use, intrinsic :: iso_c_binding
import
implicit none
character(C_CHAR), dimension(*) :: testName
character(C_CHAR), dimension(*) :: varName
real(C_DOUBLE) :: val
real(C_DOUBLE) :: expectedValue
real(C_DOUBLE) :: accuracyTarget
end function qmckl_probe_check_relative
end interface
end module qmckl_probes_f

View File

@ -35,8 +35,13 @@ do
tangled=${i%.org}.tangled
tangled=$(dirname $tangled)/.$(basename $tangled)
NOW=$(date +"%m%d%H%M.%S")
tangle ${i} > $tangled
tangle ${i} &> $tangled
rc=$?
# Make log file older than the tangled files
touch -t ${NOW} $tangled
# Fail if tangling failed
if [[ $rc -ne 0 ]] ; then
cat $tangled
exit rc
fi
done

19
vfc_tests_config.json Normal file
View File

@ -0,0 +1,19 @@
{
"make_command": "tools/ci_install.sh",
"executables": [
{
"executable": "tests/test_qmckl_distance",
"vfc_backends": [{
"name": "libinterflop_mca.so",
"repetitions": 25
}]
},
{
"executable": "tests/test_qmckl_ao",
"vfc_backends": [{
"name": "libinterflop_mca.so",
"repetitions": 25
}]
}
]
}