mirror of
https://github.com/TREX-CoE/qmckl.git
synced 2024-12-22 20:36:01 +01:00
Workflows
This commit is contained in:
parent
cbc8b9bd58
commit
85e7592a6a
100
.github/workflows/test-build.yml
vendored
100
.github/workflows/test-build.yml
vendored
@ -147,60 +147,46 @@ jobs:
|
|||||||
name: test-report-ubuntu-debug
|
name: test-report-ubuntu-debug
|
||||||
path: _build_hpc/test-suite.log
|
path: _build_hpc/test-suite.log
|
||||||
|
|
||||||
# x86_macos:
|
macos:
|
||||||
#
|
|
||||||
# runs-on: macos-latest
|
runs-on: macos-12
|
||||||
# name: x86 MacOS latest
|
name: x86 MacOS 12
|
||||||
#
|
|
||||||
# steps:
|
steps:
|
||||||
# - uses: actions/checkout@e2f20e631ae6d7dd3b768f56a5d2af784dd54791
|
- uses: actions/checkout@e2f20e631ae6d7dd3b768f56a5d2af784dd54791
|
||||||
# - name: install dependencies
|
|
||||||
# run: brew install emacs hdf5 automake pkg-config
|
- name: Install dependencies
|
||||||
#
|
run: |
|
||||||
# - name: Symlink gfortran (macOS)
|
brew install emacs
|
||||||
# if: runner.os == 'macOS'
|
brew install automake
|
||||||
# run: |
|
brew install hdf5
|
||||||
# # make sure gfortran is available
|
brew --prefix hdf5
|
||||||
# # https://github.com/actions/virtual-environments/issues/2524
|
|
||||||
# # https://github.com/cbg-ethz/dce/blob/master/.github/workflows/pkgdown.yaml
|
- name: Install the latest TREXIO from the GitHub clone
|
||||||
# sudo ln -s /usr/local/bin/gfortran-10 /usr/local/bin/gfortran
|
run: |
|
||||||
# sudo mkdir /usr/local/gfortran
|
git clone https://github.com/TREX-CoE/trexio.git
|
||||||
# sudo ln -s /usr/local/Cellar/gcc@10/*/lib/gcc/10 /usr/local/gfortran/lib
|
cd trexio
|
||||||
# gfortran --version
|
./autogen.sh
|
||||||
#
|
./configure FC=gfortran-12 --enable-silent-rules
|
||||||
# - name: Install the latest TREXIO from the GitHub clone
|
make -j 4
|
||||||
# run: |
|
sudo make install
|
||||||
# git clone https://github.com/TREX-CoE/trexio.git
|
|
||||||
# cd trexio
|
- name: Compile QMCkl in HPC mode
|
||||||
# ./autogen.sh
|
run: |
|
||||||
# ./configure --prefix=${PWD}/_install --enable-silent-rules
|
./autogen.sh
|
||||||
# make -j 4
|
mkdir _build_hpc
|
||||||
# make install
|
cd _build_hpc
|
||||||
#
|
../configure --enable-hpc FC=gfortran-12
|
||||||
# - name: Test TREXIO
|
make -j2
|
||||||
# run: make -j 4 check
|
|
||||||
# working-directory: trexio
|
- name: Run test
|
||||||
#
|
run: make -j2 check
|
||||||
# - name: Archive TREXIO test log file
|
working-directory: _build_hpc
|
||||||
# if: failure()
|
|
||||||
# uses: actions/upload-artifact@82c141cc518b40d92cc801eee768e7aafc9c2fa2
|
- name: Archive test log file
|
||||||
# with:
|
if: failure()
|
||||||
# name: test-report-trexio-macos
|
uses: actions/upload-artifact@82c141cc518b40d92cc801eee768e7aafc9c2fa2
|
||||||
# path: trexio/test-suite.log
|
with:
|
||||||
#
|
name: test-report-macos-x86
|
||||||
# - name: Build QMCkl
|
path: _build_hpc/test-suite.log
|
||||||
# run: |
|
|
||||||
# export PKG_CONFIG_PATH=${PWD}/trexio/_install/lib/pkgconfig:$PKG_CONFIG_PATH
|
|
||||||
# ./autogen.sh
|
|
||||||
# ./configure CC=gcc-10 FC=gfortran-10 --enable-silent-rules
|
|
||||||
# make -j 4
|
|
||||||
#
|
|
||||||
# - name: Run test
|
|
||||||
# run: make -j 4 check
|
|
||||||
#
|
|
||||||
# - name: Archive test log file
|
|
||||||
# if: failure()
|
|
||||||
# uses: actions/upload-artifact@82c141cc518b40d92cc801eee768e7aafc9c2fa2
|
|
||||||
# with:
|
|
||||||
# name: test-report-macos
|
|
||||||
# path: test-suite.log
|
|
||||||
|
@ -490,6 +490,17 @@ Execution time : 5.608000 seconds
|
|||||||
printf("\n");
|
printf("\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Clean-up and exit
|
||||||
|
free(mo_value);
|
||||||
|
free(overlap);
|
||||||
|
|
||||||
|
rc = qmckl_context_destroy(context);
|
||||||
|
if (rc != QMCKL_SUCCESS) {
|
||||||
|
fprintf(stderr, "Error destroying context)\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
@ -499,6 +510,176 @@ Execution time : 5.608000 seconds
|
|||||||
200 0.039017 -0.013066 -0.000000 -0.001935 -0.000000 -0.003829 -0.000000 0.000996 -0.000000 0.000000 -0.003733 0.000000 0.000065 -0.000000 -0.000000 -0.002220 -0.000000 -0.001961 0.000000 0.000000 -0.004182 0.000000 -0.000000 -0.000165 -0.002445 0.000000 -0.000000 0.000000 0.001985 0.000000 0.001685 -0.000000 -0.002899 0.000000 0.000000 0.000000 -0.000000 0.002591 0.000000 -0.000000 0.000000 0.002385 0.000000 -0.011086 0.000000 -0.003885 0.000000 -0.000000 0.003602 -0.000000 0.000000 -0.003241 0.000000 0.000000 0.002613 -0.007344 -0.000000 -0.000000 0.000000 0.000017 0.000000 0.000000 0.000000 -0.008719 0.000000 -0.001358 -0.003233 0.000000 -0.000000 -0.000000 -0.000000 0.000000 0.003778 0.000000 0.000000 -0.000000 0.000000 0.000000 -0.001190 0.000000 0.000000 -0.000000 0.005578 -0.000000 -0.001502 0.003899 -0.000000 -0.000000 0.000000 -0.003291 -0.001775 -0.000000 -0.002374 0.000000 -0.000000 -0.000000 -0.000000 -0.001290 -0.000000 0.002178 0.000000 0.000000 0.000000 -0.001252 0.000000 -0.000000 -0.000926 0.000000 -0.000000 -0.013130 -0.000000 0.012124 0.000000 -0.000000 -0.000000 -0.000000 0.000000 0.025194 0.000343 -0.000000 0.000000 -0.000000 -0.004421 0.000000 0.000000 -0.000599 -0.000000 0.005289 0.000000 -0.000000 0.012826 -0.000000 0.000000 0.006190 0.000000 0.000000 -0.000000 0.000000 -0.000321 0.000000 -0.000000 -0.000000 0.000000 -0.000000 0.001499 -0.006629 0.000000 0.000000 0.000000 -0.000000 0.008737 -0.000000 0.006880 0.000000 -0.001851 -0.000000 -0.000000 0.000000 -0.007464 0.000000 0.010298 -0.000000 -0.000000 -0.000000 -0.000000 -0.000000 0.000000 0.000540 0.000000 -0.006616 -0.000000 0.000000 -0.002927 -0.000000 0.000000 0.010352 0.000000 -0.003103 -0.000000 -0.007640 -0.000000 -0.000000 0.005302 0.000000 0.000000 -0.000000 -0.000000 -0.010181 0.000000 -0.001108 0.000000 0.000000 -0.000000 0.000000 0.000000 -0.000998 -0.009754 0.013562 0.000000 -0.000000 0.887510
|
200 0.039017 -0.013066 -0.000000 -0.001935 -0.000000 -0.003829 -0.000000 0.000996 -0.000000 0.000000 -0.003733 0.000000 0.000065 -0.000000 -0.000000 -0.002220 -0.000000 -0.001961 0.000000 0.000000 -0.004182 0.000000 -0.000000 -0.000165 -0.002445 0.000000 -0.000000 0.000000 0.001985 0.000000 0.001685 -0.000000 -0.002899 0.000000 0.000000 0.000000 -0.000000 0.002591 0.000000 -0.000000 0.000000 0.002385 0.000000 -0.011086 0.000000 -0.003885 0.000000 -0.000000 0.003602 -0.000000 0.000000 -0.003241 0.000000 0.000000 0.002613 -0.007344 -0.000000 -0.000000 0.000000 0.000017 0.000000 0.000000 0.000000 -0.008719 0.000000 -0.001358 -0.003233 0.000000 -0.000000 -0.000000 -0.000000 0.000000 0.003778 0.000000 0.000000 -0.000000 0.000000 0.000000 -0.001190 0.000000 0.000000 -0.000000 0.005578 -0.000000 -0.001502 0.003899 -0.000000 -0.000000 0.000000 -0.003291 -0.001775 -0.000000 -0.002374 0.000000 -0.000000 -0.000000 -0.000000 -0.001290 -0.000000 0.002178 0.000000 0.000000 0.000000 -0.001252 0.000000 -0.000000 -0.000926 0.000000 -0.000000 -0.013130 -0.000000 0.012124 0.000000 -0.000000 -0.000000 -0.000000 0.000000 0.025194 0.000343 -0.000000 0.000000 -0.000000 -0.004421 0.000000 0.000000 -0.000599 -0.000000 0.005289 0.000000 -0.000000 0.012826 -0.000000 0.000000 0.006190 0.000000 0.000000 -0.000000 0.000000 -0.000321 0.000000 -0.000000 -0.000000 0.000000 -0.000000 0.001499 -0.006629 0.000000 0.000000 0.000000 -0.000000 0.008737 -0.000000 0.006880 0.000000 -0.001851 -0.000000 -0.000000 0.000000 -0.007464 0.000000 0.010298 -0.000000 -0.000000 -0.000000 -0.000000 -0.000000 0.000000 0.000540 0.000000 -0.006616 -0.000000 0.000000 -0.002927 -0.000000 0.000000 0.010352 0.000000 -0.003103 -0.000000 -0.007640 -0.000000 -0.000000 0.005302 0.000000 0.000000 -0.000000 -0.000000 -0.010181 0.000000 -0.001108 0.000000 0.000000 -0.000000 0.000000 0.000000 -0.000998 -0.009754 0.013562 0.000000 -0.000000 0.887510
|
||||||
#+end_example
|
#+end_example
|
||||||
|
|
||||||
|
|
||||||
|
** Fortran
|
||||||
|
Here is the same piece of code translated in Fortran
|
||||||
|
#+begin_src f90
|
||||||
|
#include <qmckl_f.F90>
|
||||||
|
|
||||||
|
program main
|
||||||
|
use iso_c_binding
|
||||||
|
use qmckl
|
||||||
|
implicit none
|
||||||
|
|
||||||
|
! Declare variables
|
||||||
|
integer :: argc
|
||||||
|
character(128) :: trexio_filename, err_msg
|
||||||
|
integer(qmckl_exit_code) :: rc
|
||||||
|
integer(qmckl_context) :: context
|
||||||
|
integer*8 :: nucl_num, mo_num, point_num
|
||||||
|
double precision, allocatable :: nucl_coord(:,:)
|
||||||
|
integer*8 :: nx(3)
|
||||||
|
double precision, dimension(3) :: shift, step, rmin, rmax
|
||||||
|
double precision, allocatable :: mo_value(:,:), overlap(:,:), point(:), linspace(:,:)
|
||||||
|
double precision :: before, after, dr
|
||||||
|
integer*8 :: i,j,k,m
|
||||||
|
|
||||||
|
! Initialize variables
|
||||||
|
err_msg = ' '
|
||||||
|
argc = command_argument_count()
|
||||||
|
if (argc /= 1) then
|
||||||
|
print *, "Usage: ./program <TREXIO filename>"
|
||||||
|
stop -1
|
||||||
|
end if
|
||||||
|
call get_command_argument(1, trexio_filename)
|
||||||
|
rc = QMCKL_SUCCESS
|
||||||
|
|
||||||
|
! Create a QMCkl context
|
||||||
|
context = qmckl_context_create()
|
||||||
|
|
||||||
|
! Read the TREXIO file into the context
|
||||||
|
rc = qmckl_trexio_read(context, trim(trexio_filename), len(trexio_filename)*1_8)
|
||||||
|
if (rc /= QMCKL_SUCCESS) then
|
||||||
|
call qmckl_string_of_error(rc, err_msg)
|
||||||
|
write(*,*) "Error reading TREXIO file:", err_msg
|
||||||
|
stop -1
|
||||||
|
end if
|
||||||
|
|
||||||
|
! Retrieve the number of nuclei
|
||||||
|
rc = qmckl_get_nucleus_num(context, nucl_num)
|
||||||
|
if (rc /= QMCKL_SUCCESS) then
|
||||||
|
call qmckl_string_of_error(rc, err_msg)
|
||||||
|
write(*,*) "Error getting nucl_num:", err_msg
|
||||||
|
stop -1
|
||||||
|
end if
|
||||||
|
|
||||||
|
! Retrieve the nuclear coordinates
|
||||||
|
allocate(nucl_coord(3, nucl_num))
|
||||||
|
rc = qmckl_get_nucleus_coord(context, 'N', nucl_coord, nucl_num * 3_8)
|
||||||
|
if (rc /= QMCKL_SUCCESS) then
|
||||||
|
call qmckl_string_of_error(rc, err_msg)
|
||||||
|
write(*,*) "Error getting nucl_coord:", err_msg
|
||||||
|
stop -1
|
||||||
|
end if
|
||||||
|
|
||||||
|
! Retrieve the number of MOs
|
||||||
|
rc = qmckl_get_mo_basis_mo_num(context, mo_num)
|
||||||
|
if (rc /= QMCKL_SUCCESS) then
|
||||||
|
call qmckl_string_of_error(rc, err_msg)
|
||||||
|
write(*,*) "Error getting mo_num:", err_msg
|
||||||
|
stop -1
|
||||||
|
end if
|
||||||
|
|
||||||
|
! Initialize grid points for the calculation
|
||||||
|
nx = (/ 120, 120, 120 /)
|
||||||
|
shift = (/ 5.d0, 5.d0, 5.d0 /)
|
||||||
|
point_num = nx(1) * nx(2) * nx(3)
|
||||||
|
|
||||||
|
! Initialize rmin and rmax
|
||||||
|
rmin = nucl_coord(:,1)
|
||||||
|
rmax = nucl_coord(:,1)
|
||||||
|
|
||||||
|
! Update rmin and rmax based on nucl_coord
|
||||||
|
do i = 1, 3
|
||||||
|
do j = 1, nucl_num
|
||||||
|
rmin(i) = min(nucl_coord(i,j), rmin(i))
|
||||||
|
rmax(i) = max(nucl_coord(i,j), rmax(i))
|
||||||
|
end do
|
||||||
|
end do
|
||||||
|
|
||||||
|
! Apply shift
|
||||||
|
rmin = rmin - shift
|
||||||
|
rmax = rmax + shift
|
||||||
|
|
||||||
|
! Initialize linspace and step
|
||||||
|
allocate(linspace(3, maxval(nx)))
|
||||||
|
|
||||||
|
do i = 1, 3
|
||||||
|
step(i) = (rmax(i) - rmin(i)) / real(nx(i) - 1, 8)
|
||||||
|
do j = 1, nx(i)
|
||||||
|
linspace(i, j) = rmin(i) + (j - 1) * step(i)
|
||||||
|
end do
|
||||||
|
end do
|
||||||
|
|
||||||
|
! Initialize point array
|
||||||
|
allocate(point(3 * point_num))
|
||||||
|
m = 1
|
||||||
|
do i = 1, nx(1)
|
||||||
|
do j = 1, nx(2)
|
||||||
|
do k = 1, nx(3)
|
||||||
|
point(m) = linspace(1, i); m = m + 1
|
||||||
|
point(m) = linspace(2, j); m = m + 1
|
||||||
|
point(m) = linspace(3, k); m = m + 1
|
||||||
|
end do
|
||||||
|
end do
|
||||||
|
end do
|
||||||
|
|
||||||
|
deallocate(linspace)
|
||||||
|
|
||||||
|
|
||||||
|
! Set points in QMCKL context
|
||||||
|
rc = qmckl_set_point(context, 'N', point_num, point, point_num * 3)
|
||||||
|
if (rc /= QMCKL_SUCCESS) then
|
||||||
|
call qmckl_string_of_error(rc, err_msg)
|
||||||
|
write(*,*) "Error setting point:", err_msg
|
||||||
|
stop -1
|
||||||
|
end if
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
! Perform the actual calculation and measure the time taken
|
||||||
|
call cpu_time(before)
|
||||||
|
allocate(mo_value(point_num, mo_num))
|
||||||
|
rc = qmckl_get_mo_basis_mo_value(context, mo_value, point_num * mo_num)
|
||||||
|
if (rc /= QMCKL_SUCCESS) then
|
||||||
|
call qmckl_string_of_error(rc, err_msg)
|
||||||
|
write(*,*) "Error getting mo_value:", err_msg
|
||||||
|
stop
|
||||||
|
end if
|
||||||
|
call cpu_time(after)
|
||||||
|
|
||||||
|
write(*,*) "Number of MOs:", mo_num
|
||||||
|
write(*,*) "Number of grid points:", point_num
|
||||||
|
write(*,*) "Execution time:", (after - before), "seconds"
|
||||||
|
|
||||||
|
! Compute the overlap matrix
|
||||||
|
dr = step(1) * step(2) * step(3)
|
||||||
|
|
||||||
|
allocate(overlap(mo_num, mo_num))
|
||||||
|
rc = qmckl_dgemm(context, 'N', 'T', mo_num, mo_num, point_num, dr, &
|
||||||
|
mo_value, mo_num, mo_value, mo_num, 0.d0, overlap, mo_num)
|
||||||
|
|
||||||
|
! Print the overlap matrix
|
||||||
|
do i = 1, mo_num
|
||||||
|
write(*,'(i4)', advance='no') i
|
||||||
|
do j = 1, mo_num
|
||||||
|
write(*,'(f8.4)', advance='no') overlap(i, j)
|
||||||
|
end do
|
||||||
|
write(*,*)
|
||||||
|
end do
|
||||||
|
|
||||||
|
! Clean-up and exit
|
||||||
|
deallocate(mo_value, overlap)
|
||||||
|
rc = qmckl_context_destroy(context)
|
||||||
|
if (rc /= QMCKL_SUCCESS) then
|
||||||
|
call qmckl_string_of_error(rc, err_msg)
|
||||||
|
write(*,*) "Error destroying context:", err_msg
|
||||||
|
stop -1
|
||||||
|
end if
|
||||||
|
|
||||||
|
end program main
|
||||||
|
#+end_src
|
||||||
* Fortran
|
* Fortran
|
||||||
** Checking errors
|
** Checking errors
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user