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

Merge branch 'TREX-CoE:master' into master

This commit is contained in:
joguenzl 2023-05-08 10:42:38 +02:00 committed by GitHub
commit 7ed53ab71c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 172 additions and 40 deletions

View File

@ -112,8 +112,8 @@ jobs:
run: make maintainer-clean run: make maintainer-clean
trexio_macos: trexio_macos:
name: x86 MacOS 11 name: x86 MacOS 12
runs-on: macos-11 runs-on: macos-12
steps: steps:
- uses: actions/checkout@e2f20e631ae6d7dd3b768f56a5d2af784dd54791 - uses: actions/checkout@e2f20e631ae6d7dd3b768f56a5d2af784dd54791
@ -121,13 +121,14 @@ jobs:
- name: install dependencies - name: install dependencies
run: | run: |
brew install emacs brew install emacs
brew install hdf5 brew install hdf5@1.12
brew install automake brew install automake
brew --prefix hdf5
- name: configure with autotools - name: configure with autotools
run: | run: |
./autogen.sh ./autogen.sh
./configure FC=gfortran-10 --enable-silent-rules ./configure FC=gfortran-12 --enable-silent-rules
- name: compile TREXIO - name: compile TREXIO
run: make -j3 run: make -j3
@ -135,6 +136,15 @@ jobs:
- name: check TREXIO - name: check TREXIO
run: make -j3 check run: make -j3 check
- name: compile Python API
run: |
export H5_CFLAGS="-I$(brew --prefix hdf5)/include"
export H5_LDFLAGS="-L$(brew --prefix hdf5)/lib"
make python-install
- name: test Python API
run: make python-test
- name: Archive test log file - name: Archive test log file
if: failure() if: failure()
uses: actions/upload-artifact@82c141cc518b40d92cc801eee768e7aafc9c2fa2 uses: actions/upload-artifact@82c141cc518b40d92cc801eee768e7aafc9c2fa2

View File

@ -21,7 +21,7 @@ jobs:
message: ${{ steps.commit_message.outputs.message }} message: ${{ steps.commit_message.outputs.message }}
steps: steps:
- name: Checkout the repo - name: Checkout the repo
uses: actions/checkout@v2 uses: actions/checkout@v3
# Gets the correct commit message for pull request # Gets the correct commit message for pull request
with: with:
ref: ${{ github.event.pull_request.head.sha }} ref: ${{ github.event.pull_request.head.sha }}
@ -42,14 +42,14 @@ jobs:
runs-on: ubuntu-20.04 runs-on: ubuntu-20.04
strategy: strategy:
matrix: matrix:
manylinux_tag: [2010_x86_64, 2014_x86_64, 2_24_x86_64] manylinux_tag: [2014_x86_64, 2_24_x86_64]
steps: steps:
- name: Checkout the branch - name: Checkout the branch
uses: actions/checkout@v2 uses: actions/checkout@v3
- name: Set up Python - name: Set up Python
uses: actions/setup-python@v1 uses: actions/setup-python@v4
with: with:
python-version: '3.9' python-version: '3.9'
@ -103,22 +103,14 @@ jobs:
runs-on: ${{ matrix.os }} runs-on: ${{ matrix.os }}
strategy: strategy:
matrix: matrix:
os: [macos-10.15] os: [macos-12]
python-version: ['3.6', '3.7', '3.8', '3.9', '3.10'] python-version: ['3.7', '3.8', '3.9', '3.10', '3.11']
# TODO: normally, one could include macos-11 and the OS list above but the produced wheels receive an error upon installation:
# ERROR: trexio-1.1.0-cp39-cp39-macosx_11_0_x86_64.whl is not a supported wheel on this platform.
# This happens even with the MACOSX_DEPLOYMENT_TARGET trick. Perhaps it can be solved by configuring the build system
# to produce the wheels for MacOS-11 from the very beginning
#exclude:
# - os: macos-11
env:
H5_LDFLAGS: '-L/usr/local/Cellar/hdf5/1.12.1/lib'
H5_CFLAGS: '-I/usr/local/Cellar/hdf5/1.12.1/include'
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v3
- name: Set up Python - name: Set up Python
uses: actions/setup-python@v2 uses: actions/setup-python@v4
with: with:
python-version: ${{ matrix.python-version }} python-version: ${{ matrix.python-version }}
@ -128,11 +120,6 @@ jobs:
- name: Install HDF5 - name: Install HDF5
run: brew install hdf5@1.12 run: brew install hdf5@1.12
# This step is needed to produce wheels with the correct platform tag for MacOS-11 (Big Sur)
#- name: Set MACOSX_DEPLOYMENT_TARGET environment variable
# if: ${{ matrix.os == 'macos-11' }}
# run: echo "MACOSX_DEPLOYMENT_TARGET=11.0" >> $GITHUB_ENV
- name: Compute the PYTREXIO_VERSION environment variable - name: Compute the PYTREXIO_VERSION environment variable
run: echo "PYTREXIO_VERSION=$(grep __version__ python/pytrexio/_version.py | cut -d\ -f3 | tr -d '"')" >> $GITHUB_ENV run: echo "PYTREXIO_VERSION=$(grep __version__ python/pytrexio/_version.py | cut -d\ -f3 | tr -d '"')" >> $GITHUB_ENV
@ -158,6 +145,8 @@ jobs:
run: | run: |
mkdir wheelhouse/ mkdir wheelhouse/
cd trexio-${{ env.PYTREXIO_VERSION }}/ cd trexio-${{ env.PYTREXIO_VERSION }}/
export H5_CFLAGS="-I$(brew --prefix hdf5)/include"
export H5_LDFLAGS="-L$(brew --prefix hdf5)/lib"
python -m build --wheel --outdir=./ python -m build --wheel --outdir=./
delocate-wheel trexio-*.whl delocate-wheel trexio-*.whl
mv trexio-*.whl ../wheelhouse/ mv trexio-*.whl ../wheelhouse/
@ -186,10 +175,10 @@ jobs:
steps: steps:
- name: Checkout the branch - name: Checkout the branch
uses: actions/checkout@v2 uses: actions/checkout@v3
- name: Set up Python - name: Set up Python
uses: actions/setup-python@v1 uses: actions/setup-python@v4
with: with:
python-version: '3.9' python-version: '3.9'

View File

@ -4,7 +4,7 @@ cmake_minimum_required(VERSION 3.16)
# Initialize the CMake project. # Initialize the CMake project.
project(Trexio project(Trexio
VERSION 2.4.0 VERSION 2.3.1
DESCRIPTION "TREX I/O library" DESCRIPTION "TREX I/O library"
LANGUAGES C Fortran LANGUAGES C Fortran
) )

View File

@ -2,7 +2,7 @@
# Process this file with autoconf to produce a configure script. # Process this file with autoconf to produce a configure script.
AC_PREREQ([2.69]) AC_PREREQ([2.69])
AC_INIT([trexio],[2.4.0],[https://github.com/TREX-CoE/trexio/issues]) AC_INIT([trexio],[2.3.1],[https://github.com/TREX-CoE/trexio/issues])
AC_CONFIG_SRCDIR([Makefile.in]) AC_CONFIG_SRCDIR([Makefile.in])
AC_CONFIG_HEADERS([include/config.h]) AC_CONFIG_HEADERS([include/config.h])

View File

@ -200,7 +200,7 @@ program print_energy
#+begin_src f90 #+begin_src f90
call getarg(1, filename) call getarg(1, filename)
f = trexio_open (filename, 'r', TREXIO_HDF5, rc) f = trexio_open (filename, 'r', TREXIO_AUTO, rc)
if (rc /= TREXIO_SUCCESS) then if (rc /= TREXIO_SUCCESS) then
call trexio_string_of_error(rc, err_msg) call trexio_string_of_error(rc, err_msg)
print *, 'Error opening TREXIO file: '//trim(err_msg) print *, 'Error opening TREXIO file: '//trim(err_msg)
@ -410,6 +410,139 @@ program print_energy
end program end program
#+end_src #+end_src
** Python
:PROPERTIES:
:header-args: :tangle print_energy.py
:END:
#+begin_src python
import sys
import trexio
import numpy as np
BUFSIZE = 100000
#+end_src
This program computes the energy as:
\[
E = E_{\text{NN}} + \sum_{ij} \gamma_{ij}\, \langle j | h | i \rangle\,
+\, \frac{1}{2} \sum_{ijkl} \Gamma_{ijkl}\, \langle k l | i j
\rangle\; \textrm{ with } \; 0 < i,j,k,l \le n
\]
One needs to read from the TREXIO file:
- $n$ :: The number of molecular orbitals
- $E_{\text{NN}}$ :: The nuclear repulsion energy
- $\gamma_{ij}$ :: The one-body reduced density matrix
- $\langle j |h| i \rangle$ :: The one-electron Hamiltonian integrals
- $\Gamma_{ijkl}$ :: The two-body reduced density matrix
- $\langle k l | i j \rangle$ :: The electron repulsion integrals
*** Obtain the name of the TREXIO file from the command line, and open it for reading
#+begin_src python
filename = sys.argv[1]
f = trexio.File(filename, 'r', trexio.TREXIO_AUTO)
#+end_src
*** Read the nuclear repulsion energy
#+begin_src python
E_nn = trexio.read_nucleus_repulsion(f)
#+end_src
*** Read the number of molecular orbitals
#+begin_src python
n = trexio.read_mo_num(f)
#+end_src
*** Read one-electron quantities
#+begin_src python
if not trexio.has_mo_1e_int_core_hamiltonian(f):
print("No core hamiltonian in file")
sys.exit(-1)
h0 = trexio.read_mo_1e_int_core_hamiltonian(f)
if not trexio.has_rdm_1e(f):
print("No 1e RDM in file")
sys.exit(-1)
D = trexio.read_rdm_1e(f)
#+end_src
*** Read two-electron quantities
**** Electron repulsion integrals
#+begin_src python
if not trexio.has_mo_2e_int_eri(f):
print("No electron repulsion integrals in file")
sys.exit(-1)
size_max = trexio.read_mo_2e_int_eri_size(f)
offset = 0
icount = BUFSIZE
feof = False
W = np.zeros( (n,n,n,n) )
while not feof:
buffer_index, buffer_values, icount, feof = trexio.read_mo_2e_int_eri(f, offset, icount)
for m in range(icount):
i, j, k, l = buffer_index[m]
W[i,j,k,l] = buffer_values[m]
W[k,j,i,l] = buffer_values[m]
W[i,l,k,j] = buffer_values[m]
W[k,l,i,j] = buffer_values[m]
W[j,i,l,k] = buffer_values[m]
W[j,k,l,i] = buffer_values[m]
W[l,i,j,k] = buffer_values[m]
W[l,k,j,i] = buffer_values[m]
#+end_src
**** Reduced density matrix
#+begin_src python
if not trexio.has_rdm_2e(f):
print("No two-body density matrix in file")
offset = 0
icount = BUFSIZE
feof = False
G = np.zeros( (n,n,n,n) )
while not feof:
buffer_index, buffer_values, icount, feof = trexio.read_rdm_2e(f, offset, icount)
for m in range(icount):
i, j, k, l = buffer_index[m]
G[i,j,k,l] = buffer_values[m]
#+end_src
*** Compute the energy
When the orbitals are real, we can use
\begin{eqnarray*}
E &=& E_{\text{NN}} + \sum_{ij} \gamma_{ij}\, \langle j | h | i \rangle\,
+\, \frac{1}{2} \sum_{ijkl} \Gamma_{ijkl}\, \langle k l | i j
\rangle \\
&=& E_{\text{NN}} + \sum_{ij} \gamma_{ij}\, \langle i | h | j \rangle\,
+\, \frac{1}{2} \sum_{ijkl} \Gamma_{ijkl}\, \langle i j | k l
\rangle \\
\end{eqnarray*}
#+begin_src python
G = np.reshape(G, (n*n, n*n) )
W = np.reshape(W, (n*n, n*n) )
E = E_nn
E += 0.5*sum( [ np.dot(G[:,l], W[:,l]) for l in range(n*n) ] )
E += sum( [ np.dot(D[:,l], h0[:,l]) for l in range(n) ] )
print (f"Energy: {E}")
#+end_src
* Reading determinants * Reading determinants
** Fortran ** Fortran

View File

@ -1 +1 @@
__version__ = "1.4.0" __version__ = "1.3.2"

View File

@ -1,4 +1,4 @@
setuptools>=42 setuptools>=42
pkgconfig pkgconfig
numpy<1.23.0 numpy<1.24.0
numpy>=1.17.3 numpy>=1.17.3

View File

@ -34,14 +34,14 @@
num variable is modified by address num variable is modified by address
*/ */
/* Return num variables as part of the output tuple */ /* Return num variables as part of the output tuple */
%apply int *OUTPUT { int32_t* const num}; %apply int32_t *OUTPUT { int32_t* const num};
%apply int *OUTPUT { int64_t* const num}; %apply int64_t *OUTPUT { int64_t* const num};
%apply int *OUTPUT { int32_t* const num_up}; %apply int32_t *OUTPUT { int32_t* const num_up};
%apply int *OUTPUT { int32_t* const num_dn}; %apply int32_t *OUTPUT { int32_t* const num_dn};
%apply int *OUTPUT { int64_t* const num_up}; %apply int64_t *OUTPUT { int64_t* const num_up};
%apply int *OUTPUT { int64_t* const num_dn}; %apply int64_t *OUTPUT { int64_t* const num_dn};
%apply float *OUTPUT { float* const num}; %apply float *OUTPUT { float* const num};
%apply float *OUTPUT { double* const num}; %apply double *OUTPUT { double* const num};
/* Return TREXIO exit code from trexio_open as part of the output tuple */ /* Return TREXIO exit code from trexio_open as part of the output tuple */
%apply int *OUTPUT { trexio_exit_code* const rc_open}; %apply int *OUTPUT { trexio_exit_code* const rc_open};
/* Return number of sparse data points stored in the file as part of the output tuple */ /* Return number of sparse data points stored in the file as part of the output tuple */