mirror of
https://github.com/TREX-CoE/qmckl.git
synced 2024-12-23 04:44:03 +01:00
OpenMP in HPC version
This commit is contained in:
parent
ce9909a6f7
commit
d83dad53cf
17
configure.ac
17
configure.ac
@ -53,7 +53,7 @@ AS_IF([test "$with_ifort" == "yes"], [
|
|||||||
|
|
||||||
AC_ARG_WITH(icc, [AS_HELP_STRING([--with-icc],[Use Intel C compiler])], with_icc=$withval, with_icc=no)
|
AC_ARG_WITH(icc, [AS_HELP_STRING([--with-icc],[Use Intel C compiler])], with_icc=$withval, with_icc=no)
|
||||||
AS_IF([test "$with_icc" == "yes"], [
|
AS_IF([test "$with_icc" == "yes"], [
|
||||||
FC=icc
|
CC=icc
|
||||||
CFLAGS="-xHost -ip -O2 -ftz -finline -g -mkl=sequential" ])
|
CFLAGS="-xHost -ip -O2 -ftz -finline -g -mkl=sequential" ])
|
||||||
|
|
||||||
AS_IF([test "$with_icc"."$with_ifort" == "yes.yes"], [
|
AS_IF([test "$with_icc"."$with_ifort" == "yes.yes"], [
|
||||||
@ -116,13 +116,14 @@ AC_CHECK_HEADERS([assert.h errno.h math.h pthread.h stdbool.h stdint.h stdio.h s
|
|||||||
AC_CHECK_LIB([pthread], [pthread_create])
|
AC_CHECK_LIB([pthread], [pthread_create])
|
||||||
|
|
||||||
# OpenMP
|
# OpenMP
|
||||||
#AC_ARG_WITH(openmp, [AS_HELP_STRING([--with-openmp],[enable OpenMP])], with_omp=$withval, with_omp=no)
|
AC_ARG_WITH(openmp, [AS_HELP_STRING([--with-openmp],[activate OpenMP])], with_omp=$withval, with_omp=no)
|
||||||
#if test "x$with_omp" = xyes; then
|
if test "x$with_omp" = xyes; then
|
||||||
# AC_DEFINE([HAVE_OPENMP], [1], [Define to use OpenMP threading.])
|
AC_DEFINE([HAVE_OPENMP], [1], [Define to use OpenMP threading.])
|
||||||
# AX_OPENMP([],
|
AX_OPENMP([],
|
||||||
# [AC_MSG_ERROR([Could not find OpenMP flags; configure with --without-openmp])])
|
[AC_MSG_ERROR([Could not find OpenMP flags; configure with --without-openmp])])
|
||||||
# CFLAGS="${CFLAGS} ${OPENMP_CFLAGS}"
|
CFLAGS="${CFLAGS} ${OPENMP_CFLAGS}"
|
||||||
#fi
|
FCFLAGS="${CFLAGS} ${OPENMP_FCFLAGS}"
|
||||||
|
fi
|
||||||
|
|
||||||
# CHAMELEON
|
# CHAMELEON
|
||||||
AC_ARG_WITH(chameleon,
|
AC_ARG_WITH(chameleon,
|
||||||
|
@ -4763,7 +4763,7 @@ integer function qmckl_compute_ao_vgl_hpc_f(context, &
|
|||||||
integer :: lstart(0:20)
|
integer :: lstart(0:20)
|
||||||
double precision :: x, y, z, r2, s1, s2, s3, s4, s5, s6
|
double precision :: x, y, z, r2, s1, s2, s3, s4, s5, s6
|
||||||
double precision :: cutoff, v, two_a
|
double precision :: cutoff, v, two_a
|
||||||
integer*8 :: iprim_start , iprim_end, iprim
|
integer*8 :: iprim_start , iprim_end, iprim, size_max
|
||||||
integer, external :: qmckl_ao_polynomial_transp_vgl_f
|
integer, external :: qmckl_ao_polynomial_transp_vgl_f
|
||||||
|
|
||||||
double precision, allocatable :: poly_vgl(:,:)
|
double precision, allocatable :: poly_vgl(:,:)
|
||||||
@ -4772,8 +4772,7 @@ integer function qmckl_compute_ao_vgl_hpc_f(context, &
|
|||||||
integer :: nidx, idx, n
|
integer :: nidx, idx, n
|
||||||
double precision, allocatable :: ar2(:), expo_(:), c_(:)
|
double precision, allocatable :: ar2(:), expo_(:), c_(:)
|
||||||
|
|
||||||
allocate(poly_vgl(ao_num,5), powers(3,ao_num), ao_index(ao_num))
|
allocate(ao_index(ao_num+1))
|
||||||
allocate(c_(prim_num), expo_(prim_num), ar2(prim_num))
|
|
||||||
|
|
||||||
! Pre-computed data
|
! Pre-computed data
|
||||||
do l=0,20
|
do l=0,20
|
||||||
@ -4781,6 +4780,7 @@ integer function qmckl_compute_ao_vgl_hpc_f(context, &
|
|||||||
end do
|
end do
|
||||||
|
|
||||||
k=1
|
k=1
|
||||||
|
size_max = 0
|
||||||
do inucl=1,nucl_num
|
do inucl=1,nucl_num
|
||||||
ishell_start = nucleus_index(inucl) + 1
|
ishell_start = nucleus_index(inucl) + 1
|
||||||
ishell_end = nucleus_index(inucl) + nucleus_shell_num(inucl)
|
ishell_end = nucleus_index(inucl) + nucleus_shell_num(inucl)
|
||||||
@ -4789,13 +4789,30 @@ integer function qmckl_compute_ao_vgl_hpc_f(context, &
|
|||||||
ao_index(ishell) = k
|
ao_index(ishell) = k
|
||||||
k = k + lstart(l+1) - lstart(l)
|
k = k + lstart(l+1) - lstart(l)
|
||||||
end do
|
end do
|
||||||
|
size_max = max(size_max, lstart(l+1))
|
||||||
end do
|
end do
|
||||||
|
ao_index(ishell_end+1) = ao_num+1
|
||||||
|
|
||||||
|
|
||||||
info = QMCKL_SUCCESS
|
info = QMCKL_SUCCESS
|
||||||
|
|
||||||
! Don't compute polynomials when the radial part is zero.
|
! Don't compute polynomials when the radial part is zero.
|
||||||
cutoff = -dlog(1.d-12)
|
cutoff = -dlog(1.d-12)
|
||||||
|
|
||||||
|
!$OMP PARALLEL DEFAULT(NONE) &
|
||||||
|
!$OMP SHARED (point_num, coord, nucl_coord, nucl_num, cutoff, &
|
||||||
|
!$OMP nucleus_range, context, nucleus_max_ang_mom, ao_num, &
|
||||||
|
!$OMP nucleus_index, nucleus_shell_num, shell_prim_index, &
|
||||||
|
!$OMP shell_prim_num, expo, coef_normalized, size_max, prim_num, &
|
||||||
|
!$OMP shell_ang_mom, ao_index, lstart, ao_vgl, ao_factor) &
|
||||||
|
!$OMP PRIVATE (ipoint, inucl, x, y, z, e_coord, r2, info, &
|
||||||
|
!$OMP n_coord, n_poly, powers, poly_vgl, ishell_start, k, &
|
||||||
|
!$OMP ishell_end, ishell, iprim_end, iprim_start, nidx, l, &
|
||||||
|
!$OMP iprim, v, expo_, c_, s1, s2, s3, s4, s5, s6, n, il, ar2)
|
||||||
|
|
||||||
|
allocate(c_(prim_num), expo_(prim_num), ar2(prim_num), &
|
||||||
|
powers(3,size_max), poly_vgl(size_max,5))
|
||||||
|
!$OMP DO
|
||||||
do ipoint = 1, point_num
|
do ipoint = 1, point_num
|
||||||
e_coord(1) = coord(ipoint,1)
|
e_coord(1) = coord(ipoint,1)
|
||||||
e_coord(2) = coord(ipoint,2)
|
e_coord(2) = coord(ipoint,2)
|
||||||
@ -4819,7 +4836,7 @@ integer function qmckl_compute_ao_vgl_hpc_f(context, &
|
|||||||
! Compute polynomials
|
! Compute polynomials
|
||||||
info = qmckl_ao_polynomial_transp_vgl_f(context, e_coord, n_coord, &
|
info = qmckl_ao_polynomial_transp_vgl_f(context, e_coord, n_coord, &
|
||||||
nucleus_max_ang_mom(inucl), n_poly, powers, 3_8, &
|
nucleus_max_ang_mom(inucl), n_poly, powers, 3_8, &
|
||||||
poly_vgl, int(ao_num,8))
|
poly_vgl, size_max)
|
||||||
|
|
||||||
! Loop over shells
|
! Loop over shells
|
||||||
ishell_start = nucleus_index(inucl) + 1
|
ishell_start = nucleus_index(inucl) + 1
|
||||||
@ -4887,7 +4904,10 @@ integer function qmckl_compute_ao_vgl_hpc_f(context, &
|
|||||||
end do
|
end do
|
||||||
end do
|
end do
|
||||||
|
|
||||||
deallocate(poly_vgl, powers)
|
deallocate(poly_vgl, powers, c_, expo_, ar2)
|
||||||
|
!$OMP END PARALLEL
|
||||||
|
|
||||||
|
deallocate(ao_index)
|
||||||
end function qmckl_compute_ao_vgl_hpc_f
|
end function qmckl_compute_ao_vgl_hpc_f
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user