Commit 8f5c16b8 authored by Lorenz Huedepohl's avatar Lorenz Huedepohl

Clean separation of public and private interfaces

Remove all references to private functions and symbols from the public
Fortran modules. Install also only the public modules
parent e47ac8ac
...@@ -2,43 +2,55 @@ ...@@ -2,43 +2,55 @@
ACLOCAL_AMFLAGS = ${ACLOCAL_FLAGS} -I m4 ACLOCAL_AMFLAGS = ${ACLOCAL_FLAGS} -I m4
AM_FCFLAGS = $(SCALAPACK_FCFLAGS) @FC_MODINC@modules @FC_MODOUT@modules AM_FCFLAGS = $(SCALAPACK_FCFLAGS) @FC_MODINC@modules @FC_MODINC@private_modules
AM_LDFLAGS = $(SCALAPACK_LDFLAGS) AM_LDFLAGS = $(SCALAPACK_LDFLAGS)
# libelpa # libelpa
lib_LTLIBRARIES = libelpa@SUFFIX@.la
libelpa@SUFFIX@_la_LINK = $(FCLINK) $(AM_LDFLAGS) -version-info $(ELPA_SO_VERSION) -lstdc++
libelpa@SUFFIX@_la_SOURCES = \ # parts with public interface
noinst_LTLIBRARIES = libelpa@SUFFIX@_public.la
libelpa@SUFFIX@_public_la_FCFLAGS = $(AM_FCFLAGS) @FC_MODOUT@modules
libelpa@SUFFIX@_public_la_SOURCES = \
src/elpa1.F90 \
src/elpa2.F90 \
src/elpa2_utilities.F90 \
src/elpa_utilities.F90
# internal parts
noinst_LTLIBRARIES += libelpa@SUFFIX@_private.la
libelpa@SUFFIX@_private_la_FCFLAGS = $(AM_FCFLAGS) @FC_MODOUT@private_modules
libelpa@SUFFIX@_private_la_SOURCES = \
src/mod_precision.f90 \ src/mod_precision.f90 \
src/mod_mpi.F90 \ src/mod_mpi.F90 \
src/mod_mpi_stubs.F90 \ src/mod_mpi_stubs.F90 \
src/elpa2_kernels/mod_fortran_interfaces.F90 \
src/elpa_utilities.F90 \
src/elpa1_compute.F90 \
src/elpa1.F90 \
src/elpa2_utilities.F90 \
src/mod_pack_unpack_real.F90 \ src/mod_pack_unpack_real.F90 \
src/elpa2_kernels/mod_single_hh_trafo_real.F90 \
src/mod_compute_hh_trafo_real.F90 \ src/mod_compute_hh_trafo_real.F90 \
src/mod_compute_hh_trafo_complex.F90 \ src/mod_compute_hh_trafo_complex.F90 \
src/mod_pack_unpack_complex.F90 \ src/mod_pack_unpack_complex.F90 \
src/aligned_mem.F90 \ src/aligned_mem.F90 \
src/elpa1_compute.F90 \
src/elpa2_compute.F90 \ src/elpa2_compute.F90 \
src/elpa2.F90 \ src/elpa2_kernels/mod_fortran_interfaces.F90 \
src/elpa2_kernels/mod_single_hh_trafo_real.F90 \
src/elpa_c_interface.F90 \ src/elpa_c_interface.F90 \
src/elpa_qr/qr_utils.F90 \ src/elpa_qr/qr_utils.F90 \
src/elpa_qr/elpa_qrkernels.f90 \ src/elpa_qr/elpa_qrkernels.f90 \
src/elpa_qr/elpa_pdlarfb.F90 \ src/elpa_qr/elpa_pdlarfb.F90 \
src/elpa_qr/elpa_pdgeqrf.F90 src/elpa_qr/elpa_pdgeqrf.F90
EXTRA_libelpa@SUFFIX@_la_DEPENDENCIES = \ EXTRA_libelpa@SUFFIX@_private_la_DEPENDENCIES = \
src/elpa_reduce_add_vectors.X90 \ src/elpa_reduce_add_vectors.X90 \
src/elpa_transpose_vectors.X90 \ src/elpa_transpose_vectors.X90 \
src/redist_band.X90 src/redist_band.X90
lib_LTLIBRARIES = libelpa@SUFFIX@.la
libelpa@SUFFIX@_la_LINK = $(FCLINK) $(AM_LDFLAGS) -version-info $(ELPA_SO_VERSION) -lstdc++
libelpa@SUFFIX@_la_LIBADD = libelpa@SUFFIX@_public.la libelpa@SUFFIX@_private.la
libelpa@SUFFIX@_la_SOURCES =
if HAVE_DETAILED_TIMINGS if HAVE_DETAILED_TIMINGS
libelpa@SUFFIX@_la_SOURCES += \ libelpa@SUFFIX@_private_la_SOURCES += \
src/timer.F90 \ src/timer.F90 \
src/ftimings/ftimings.F90 \ src/ftimings/ftimings.F90 \
src/ftimings/ftimings_type.F90 \ src/ftimings/ftimings_type.F90 \
...@@ -51,101 +63,101 @@ if HAVE_DETAILED_TIMINGS ...@@ -51,101 +63,101 @@ if HAVE_DETAILED_TIMINGS
endif endif
if !WITH_MPI if !WITH_MPI
libelpa@SUFFIX@_la_SOURCES += src/mod_time_c.F90 libelpa@SUFFIX@_private_la_SOURCES += src/mod_time_c.F90
if !HAVE_DETAILED_TIMINGS if !HAVE_DETAILED_TIMINGS
libelpa@SUFFIX@_la_SOURCES += src/ftimings/time.c libelpa@SUFFIX@_private_la_SOURCES += src/ftimings/time.c
endif endif
endif endif
if WITH_REAL_GENERIC_KERNEL if WITH_REAL_GENERIC_KERNEL
libelpa@SUFFIX@_la_SOURCES += src/elpa2_kernels/elpa2_kernels_real.F90 libelpa@SUFFIX@_private_la_SOURCES += src/elpa2_kernels/elpa2_kernels_real.F90
endif endif
if WITH_COMPLEX_GENERIC_KERNEL if WITH_COMPLEX_GENERIC_KERNEL
libelpa@SUFFIX@_la_SOURCES += src/elpa2_kernels/elpa2_kernels_complex.F90 libelpa@SUFFIX@_private_la_SOURCES += src/elpa2_kernels/elpa2_kernels_complex.F90
endif endif
if WITH_REAL_GENERIC_SIMPLE_KERNEL if WITH_REAL_GENERIC_SIMPLE_KERNEL
libelpa@SUFFIX@_la_SOURCES += src/elpa2_kernels/elpa2_kernels_real_simple.F90 libelpa@SUFFIX@_private_la_SOURCES += src/elpa2_kernels/elpa2_kernels_real_simple.F90
endif endif
if WITH_COMPLEX_GENERIC_SIMPLE_KERNEL if WITH_COMPLEX_GENERIC_SIMPLE_KERNEL
libelpa@SUFFIX@_la_SOURCES += src/elpa2_kernels/elpa2_kernels_complex_simple.F90 libelpa@SUFFIX@_private_la_SOURCES += src/elpa2_kernels/elpa2_kernels_complex_simple.F90
endif endif
if WITH_REAL_BGP_KERNEL if WITH_REAL_BGP_KERNEL
libelpa@SUFFIX@_la_SOURCES += src/elpa2_kernels/elpa2_kernels_real_bgp.f90 libelpa@SUFFIX@_private_la_SOURCES += src/elpa2_kernels/elpa2_kernels_real_bgp.f90
endif endif
if WITH_REAL_BGQ_KERNEL if WITH_REAL_BGQ_KERNEL
libelpa@SUFFIX@_la_SOURCES += src/elpa2_kernels/elpa2_kernels_real_bgq.f90 libelpa@SUFFIX@_private_la_SOURCES += src/elpa2_kernels/elpa2_kernels_real_bgq.f90
endif endif
if WITH_REAL_SSE_ASSEMBLY_KERNEL if WITH_REAL_SSE_ASSEMBLY_KERNEL
libelpa@SUFFIX@_la_SOURCES += src/elpa2_kernels/elpa2_kernels_asm_x86_64.s libelpa@SUFFIX@_private_la_SOURCES += src/elpa2_kernels/elpa2_kernels_asm_x86_64.s
else else
if WITH_COMPLEX_SSE_ASSEMBLY_KERNEL if WITH_COMPLEX_SSE_ASSEMBLY_KERNEL
libelpa@SUFFIX@_la_SOURCES += src/elpa2_kernels/elpa2_kernels_asm_x86_64.s libelpa@SUFFIX@_private_la_SOURCES += src/elpa2_kernels/elpa2_kernels_asm_x86_64.s
endif endif
endif endif
if WITH_REAL_SSE_BLOCK2_KERNEL if WITH_REAL_SSE_BLOCK2_KERNEL
libelpa@SUFFIX@_la_SOURCES += src/elpa2_kernels/elpa2_kernels_real_sse_2hv.c libelpa@SUFFIX@_private_la_SOURCES += src/elpa2_kernels/elpa2_kernels_real_sse_2hv.c
endif endif
if WITH_REAL_AVX_BLOCK2_KERNEL if WITH_REAL_AVX_BLOCK2_KERNEL
libelpa@SUFFIX@_la_SOURCES += src/elpa2_kernels/elpa2_kernels_real_avx-avx2_2hv.c libelpa@SUFFIX@_private_la_SOURCES += src/elpa2_kernels/elpa2_kernels_real_avx-avx2_2hv.c
else else
if WITH_REAL_AVX2_BLOCK2_KERNEL if WITH_REAL_AVX2_BLOCK2_KERNEL
libelpa@SUFFIX@_la_SOURCES += src/elpa2_kernels/elpa2_kernels_real_avx-avx2_2hv.c libelpa@SUFFIX@_private_la_SOURCES += src/elpa2_kernels/elpa2_kernels_real_avx-avx2_2hv.c
endif endif
endif endif
if WITH_REAL_SSE_BLOCK4_KERNEL if WITH_REAL_SSE_BLOCK4_KERNEL
libelpa@SUFFIX@_la_SOURCES += src/elpa2_kernels/elpa2_kernels_real_sse_4hv.c libelpa@SUFFIX@_private_la_SOURCES += src/elpa2_kernels/elpa2_kernels_real_sse_4hv.c
endif endif
if WITH_REAL_AVX_BLOCK4_KERNEL if WITH_REAL_AVX_BLOCK4_KERNEL
libelpa@SUFFIX@_la_SOURCES += src/elpa2_kernels/elpa2_kernels_real_avx-avx2_4hv.c libelpa@SUFFIX@_private_la_SOURCES += src/elpa2_kernels/elpa2_kernels_real_avx-avx2_4hv.c
else else
if WITH_REAL_AVX2_BLOCK4_KERNEL if WITH_REAL_AVX2_BLOCK4_KERNEL
libelpa@SUFFIX@_la_SOURCES += src/elpa2_kernels/elpa2_kernels_real_avx-avx2_4hv.c libelpa@SUFFIX@_private_la_SOURCES += src/elpa2_kernels/elpa2_kernels_real_avx-avx2_4hv.c
endif endif
endif endif
if WITH_REAL_SSE_BLOCK6_KERNEL if WITH_REAL_SSE_BLOCK6_KERNEL
libelpa@SUFFIX@_la_SOURCES += src/elpa2_kernels/elpa2_kernels_real_sse_6hv.c libelpa@SUFFIX@_private_la_SOURCES += src/elpa2_kernels/elpa2_kernels_real_sse_6hv.c
endif endif
if WITH_REAL_AVX_BLOCK6_KERNEL if WITH_REAL_AVX_BLOCK6_KERNEL
libelpa@SUFFIX@_la_SOURCES += src/elpa2_kernels/elpa2_kernels_real_avx-avx2_6hv.c libelpa@SUFFIX@_private_la_SOURCES += src/elpa2_kernels/elpa2_kernels_real_avx-avx2_6hv.c
else else
if WITH_REAL_AVX2_BLOCK6_KERNEL if WITH_REAL_AVX2_BLOCK6_KERNEL
libelpa@SUFFIX@_la_SOURCES += src/elpa2_kernels/elpa2_kernels_real_avx-avx2_6hv.c libelpa@SUFFIX@_private_la_SOURCES += src/elpa2_kernels/elpa2_kernels_real_avx-avx2_6hv.c
endif endif
endif endif
if WITH_COMPLEX_SSE_BLOCK1_KERNEL if WITH_COMPLEX_SSE_BLOCK1_KERNEL
libelpa@SUFFIX@_la_SOURCES += src/elpa2_kernels/elpa2_kernels_complex_sse_1hv.c libelpa@SUFFIX@_private_la_SOURCES += src/elpa2_kernels/elpa2_kernels_complex_sse_1hv.c
endif endif
if WITH_COMPLEX_AVX_BLOCK1_KERNEL if WITH_COMPLEX_AVX_BLOCK1_KERNEL
libelpa@SUFFIX@_la_SOURCES += src/elpa2_kernels/elpa2_kernels_complex_avx-avx2_1hv.c libelpa@SUFFIX@_private_la_SOURCES += src/elpa2_kernels/elpa2_kernels_complex_avx-avx2_1hv.c
else else
if WITH_COMPLEX_AVX2_BLOCK1_KERNEL if WITH_COMPLEX_AVX2_BLOCK1_KERNEL
libelpa@SUFFIX@_la_SOURCES += src/elpa2_kernels/elpa2_kernels_complex_avx-avx2_1hv.c libelpa@SUFFIX@_private_la_SOURCES += src/elpa2_kernels/elpa2_kernels_complex_avx-avx2_1hv.c
endif endif
endif endif
if WITH_COMPLEX_SSE_BLOCK2_KERNEL if WITH_COMPLEX_SSE_BLOCK2_KERNEL
libelpa@SUFFIX@_la_SOURCES += src/elpa2_kernels/elpa2_kernels_complex_sse_2hv.c libelpa@SUFFIX@_private_la_SOURCES += src/elpa2_kernels/elpa2_kernels_complex_sse_2hv.c
endif endif
if WITH_COMPLEX_AVX_BLOCK2_KERNEL if WITH_COMPLEX_AVX_BLOCK2_KERNEL
libelpa@SUFFIX@_la_SOURCES += src/elpa2_kernels/elpa2_kernels_complex_avx-avx2_2hv.c libelpa@SUFFIX@_private_la_SOURCES += src/elpa2_kernels/elpa2_kernels_complex_avx-avx2_2hv.c
else else
if WITH_COMPLEX_AVX2_BLOCK2_KERNEL if WITH_COMPLEX_AVX2_BLOCK2_KERNEL
libelpa@SUFFIX@_la_SOURCES += src/elpa2_kernels/elpa2_kernels_complex_avx-avx2_2hv.c libelpa@SUFFIX@_private_la_SOURCES += src/elpa2_kernels/elpa2_kernels_complex_avx-avx2_2hv.c
endif endif
endif endif
......
...@@ -855,11 +855,10 @@ AC_SUBST([FC_MODOUT]) ...@@ -855,11 +855,10 @@ AC_SUBST([FC_MODOUT])
AC_SUBST([OPENMP_CFLAGS]) AC_SUBST([OPENMP_CFLAGS])
AC_SUBST([OPENMP_FCFLAGS]) AC_SUBST([OPENMP_FCFLAGS])
AC_SUBST([OPENMP_LDFLAGS]) AC_SUBST([OPENMP_LDFLAGS])
#AC_SUBST(OPT_FCFLAGS)
AC_SUBST([DOXYGEN_OUTPUT_DIR], [docs]) AC_SUBST([DOXYGEN_OUTPUT_DIR], [docs])
rm -rf modules/ .fortran_dependencies/ rm -rf modules/ private_modules/ .fortran_dependencies/
mkdir modules mkdir modules private_modules
#gl_VISIBILITY #gl_VISIBILITY
#AH_BOTTOM([#if HAVE_VISIBILITY #AH_BOTTOM([#if HAVE_VISIBILITY
......
...@@ -4,10 +4,10 @@ define extract_interface ...@@ -4,10 +4,10 @@ define extract_interface
endef endef
elpa test: elpa test:
mkdir $@ @mkdir $@
test/shared_sources: | test test/shared_sources: | test
mkdir $@ @mkdir $@
config-f90.h: config.h config-f90.h: config.h
@echo "Generating $@..."; @echo "Generating $@...";
......
...@@ -83,13 +83,7 @@ ...@@ -83,13 +83,7 @@
module ELPA1 module ELPA1
use precision use precision
use elpa_utilities use elpa_utilities
use elpa1_compute
#ifdef HAVE_DETAILED_TIMINGS
use timings
#endif
use elpa_mpi
implicit none implicit none
PRIVATE ! By default, all routines contained are private PRIVATE ! By default, all routines contained are private
...@@ -295,6 +289,8 @@ function solve_evp_real_1stage(na, nev, a, lda, ev, q, ldq, nblk, matrixCols, mp ...@@ -295,6 +289,8 @@ function solve_evp_real_1stage(na, nev, a, lda, ev, q, ldq, nblk, matrixCols, mp
#ifdef HAVE_DETAILED_TIMINGS #ifdef HAVE_DETAILED_TIMINGS
use timings use timings
#endif #endif
use elpa_mpi
use elpa1_compute
implicit none implicit none
integer(kind=ik), intent(in) :: na, nev, lda, ldq, nblk, matrixCols, mpi_comm_rows, mpi_comm_cols integer(kind=ik), intent(in) :: na, nev, lda, ldq, nblk, matrixCols, mpi_comm_rows, mpi_comm_cols
...@@ -397,6 +393,8 @@ function solve_evp_complex_1stage(na, nev, a, lda, ev, q, ldq, nblk, matrixCols, ...@@ -397,6 +393,8 @@ function solve_evp_complex_1stage(na, nev, a, lda, ev, q, ldq, nblk, matrixCols,
use timings use timings
#endif #endif
use precision use precision
use elpa_mpi
use elpa1_compute
implicit none implicit none
integer(kind=ik), intent(in) :: na, nev, lda, ldq, nblk, matrixCols, mpi_comm_rows, mpi_comm_cols integer(kind=ik), intent(in) :: na, nev, lda, ldq, nblk, matrixCols, mpi_comm_rows, mpi_comm_cols
......
...@@ -67,13 +67,9 @@ module ELPA2 ...@@ -67,13 +67,9 @@ module ELPA2
! Version 1.1.2, 2011-02-21 ! Version 1.1.2, 2011-02-21
use elpa_utilities use elpa_utilities
use elpa1_compute
use elpa1, only : elpa_print_times, time_evp_back, time_evp_fwd, time_evp_solve use elpa1, only : elpa_print_times, time_evp_back, time_evp_fwd, time_evp_solve
use elpa2_utilities use elpa2_utilities
use elpa2_compute
use elpa_pdgeqrf
use elpa_mpi
implicit none implicit none
PRIVATE ! By default, all routines contained are private PRIVATE ! By default, all routines contained are private
...@@ -135,6 +131,9 @@ function solve_evp_real_2stage(na, nev, a, lda, ev, q, ldq, nblk, & ...@@ -135,6 +131,9 @@ function solve_evp_real_2stage(na, nev, a, lda, ev, q, ldq, nblk, &
#ifdef HAVE_DETAILED_TIMINGS #ifdef HAVE_DETAILED_TIMINGS
use timings use timings
#endif #endif
use elpa1_compute
use elpa2_compute
use elpa_mpi
use precision use precision
implicit none implicit none
logical, intent(in), optional :: useQR logical, intent(in), optional :: useQR
...@@ -375,6 +374,9 @@ function solve_evp_complex_2stage(na, nev, a, lda, ev, q, ldq, nblk, & ...@@ -375,6 +374,9 @@ function solve_evp_complex_2stage(na, nev, a, lda, ev, q, ldq, nblk, &
#ifdef HAVE_DETAILED_TIMINGS #ifdef HAVE_DETAILED_TIMINGS
use timings use timings
#endif #endif
use elpa1_compute
use elpa2_compute
use elpa_mpi
use precision use precision
implicit none implicit none
integer(kind=ik), intent(in), optional :: THIS_COMPLEX_ELPA_KERNEL_API integer(kind=ik), intent(in), optional :: THIS_COMPLEX_ELPA_KERNEL_API
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment