Commit 198c68e0 authored by Andreas Marek's avatar Andreas Marek

Merge branch 'kernel' into fix_omp

parents c3a093a6 a04d597a
...@@ -455,6 +455,7 @@ nobase_nodist_elpa_include_HEADERS = \ ...@@ -455,6 +455,7 @@ nobase_nodist_elpa_include_HEADERS = \
elpa/elpa_version.h \ elpa/elpa_version.h \
elpa/elpa_constants.h \ elpa/elpa_constants.h \
elpa/elpa_generated.h \ elpa/elpa_generated.h \
elpa/elpa_generated_c_api.h \
elpa/elpa_generated_legacy.h elpa/elpa_generated_legacy.h
dist_man_MANS = \ dist_man_MANS = \
...@@ -686,7 +687,8 @@ test_python.sh: ...@@ -686,7 +687,8 @@ test_python.sh:
include doxygen.am include doxygen.am
CLEANFILES = \ CLEANFILES = \
elpa-generated.h \ elpa_generated.h \
elpa_generated_c_api.h \
elpa1_test* \ elpa1_test* \
elpa2_test*\ elpa2_test*\
elpa2_real* \ elpa2_real* \
...@@ -718,16 +720,14 @@ clean-local: ...@@ -718,16 +720,14 @@ clean-local:
-rm -rf $(generated_headers) -rm -rf $(generated_headers)
distclean-local: distclean-local:
-rm -rf ./m4
-rm -rf ./src
-rm -rf ./test
-rm -rf ./modules
-rm -rf .fortran_dependencies
-rm config-f90.h -rm config-f90.h
-rm -rf ./src/elpa2/kernels/.deps
-rm -rf ./src/.deps
-rm -rf ./test/.deps -rm -rf ./test/.deps
-rmdir ./src/elpa2/kernels/ -rm -rf elpa/elpa_generated_c_api.h
-rmdir ./src
-rmdir ./test
-rmdir ./m4
-rmdir modules/
-rmdir .fortran_dependencies/
EXTRA_DIST = \ EXTRA_DIST = \
elpa.spec \ elpa.spec \
......
...@@ -1473,5 +1473,11 @@ if test x"$enable_kcomputer" = x"yes" ; then ...@@ -1473,5 +1473,11 @@ if test x"$enable_kcomputer" = x"yes" ; then
echo "call: make -f ../generated_headers.am generated-headers top_srcdir=.." echo "call: make -f ../generated_headers.am generated-headers top_srcdir=.."
echo "BEFORE triggering the build with make!" echo "BEFORE triggering the build with make!"
else else
if test x"$optional_c_error_argument" = x"yes" ; then
echo "#define OPTIONAL_C_ERROR_ARGUMENT" > elpa/elpa_generated_c_api.h
else
echo "#undef OPTIONAL_C_ERROR_ARGUMENT" > elpa/elpa_generated_c_api.h
fi
make -f $srcdir/generated_headers.am generated-headers top_srcdir="$srcdir" CPP="$CPP" make -f $srcdir/generated_headers.am generated-headers top_srcdir="$srcdir" CPP="$CPP"
fi fi
...@@ -14,6 +14,7 @@ typedef struct elpa_autotune_struct *elpa_autotune_t; ...@@ -14,6 +14,7 @@ typedef struct elpa_autotune_struct *elpa_autotune_t;
#include <elpa/elpa_constants.h> #include <elpa/elpa_constants.h>
#include <elpa/elpa_generated_c_api.h>
#include <elpa/elpa_generated.h> #include <elpa/elpa_generated.h>
#include <elpa/elpa_generic.h> #include <elpa/elpa_generic.h>
......
...@@ -22,6 +22,22 @@ elpa/elpa_generated.h: $(top_srcdir)/src/elpa_impl.F90 \ ...@@ -22,6 +22,22 @@ elpa/elpa_generated.h: $(top_srcdir)/src/elpa_impl.F90 \
$(top_srcdir)/src/elpa_api.F90 | elpa $(top_srcdir)/src/elpa_api.F90 | elpa
@rm -f $@ @rm -f $@
$(call extract_interface,!c>) $(call extract_interface,!c>)
$(call extract_interface,!c_o>)
$(call extract_interface,!c_no>)
#if OPTIONAL_C_ERROR_ARGUMENT
#
#elpa/elpa_generated.h: $(top_srcdir)/src/elpa_impl.F90 \
# $(top_srcdir)/src/elpa_impl_math_template.F90 \
# $(top_srcdir)/src/elpa_api.F90 | elpa
# $(call extract_interface,!c_o>)
#
#else
#elpa/elpa_generated.h: $(top_srcdir)/src/elpa_impl.F90 \
# $(top_srcdir)/src/elpa_impl_math_template.F90 \
# $(top_srcdir)/src/elpa_api.F90 | elpa
# $(call extract_interface,!c_no>)
#endif
generated_headers += elpa/elpa_generated_legacy.h generated_headers += elpa/elpa_generated_legacy.h
elpa/elpa_generated_legacy.h: $(top_srcdir)/src/elpa_driver/legacy_interface/elpa_driver_c_interface.F90 \ elpa/elpa_generated_legacy.h: $(top_srcdir)/src/elpa_driver/legacy_interface/elpa_driver_c_interface.F90 \
......
...@@ -818,13 +818,17 @@ module elpa_api ...@@ -818,13 +818,17 @@ module elpa_api
end function end function
#ifdef OPTIONAL_C_ERROR_ARGUMENT #ifdef OPTIONAL_C_ERROR_ARGUMENT
!c> #define elpa_uninit(...) CONC(elpa_uninit, NARGS(__VA_ARGS__))(__VA_ARGS__) !c_o> #ifdef OPTIONAL_C_ERROR_ARGUMENT
!c_o> #define elpa_uninit(...) CONC(elpa_uninit, NARGS(__VA_ARGS__))(__VA_ARGS__)
!c_o> #endif
#endif #endif
!> \brief subroutine to uninit the ELPA library. Does nothing at the moment. Might do sth. later !> \brief subroutine to uninit the ELPA library. Does nothing at the moment. Might do sth. later
! !
#ifdef OPTIONAL_C_ERROR_ARGUMENT #ifdef OPTIONAL_C_ERROR_ARGUMENT
!c> void elpa_uninit1(int *error); !c_o> #ifdef OPTIONAL_C_ERROR_ARGUMENT
!c> void elpa_uninit0(); !c_o> void elpa_uninit1(int *error);
!c_o> void elpa_uninit0();
!c_o> #endif
subroutine elpa_uninit_c1(error) bind(C, name="elpa_uninit1") subroutine elpa_uninit_c1(error) bind(C, name="elpa_uninit1")
integer(kind=c_int) :: error integer(kind=c_int) :: error
call elpa_uninit(error) call elpa_uninit(error)
...@@ -834,6 +838,9 @@ module elpa_api ...@@ -834,6 +838,9 @@ module elpa_api
call elpa_uninit() call elpa_uninit()
end subroutine end subroutine
#else #else
!c_no> #ifndef OPTIONAL_C_ERROR_ARGUMENT
!c_no> void elpa_uninit(int *error);
!c_no> #endif
subroutine elpa_uninit_c(error) bind(C, name="elpa_uninit") subroutine elpa_uninit_c(error) bind(C, name="elpa_uninit")
integer(kind=c_int) :: error integer(kind=c_int) :: error
call elpa_uninit(error) call elpa_uninit(error)
......
...@@ -216,7 +216,9 @@ module elpa_impl ...@@ -216,7 +216,9 @@ module elpa_impl
end function end function
#ifdef OPTIONAL_C_ERROR_ARGUMENT #ifdef OPTIONAL_C_ERROR_ARGUMENT
!c> #define elpa_allocate(...) CONC(elpa_allocate, NARGS(__VA_ARGS__))(__VA_ARGS__) !c_o> #ifdef OPTIONAL_C_ERROR_ARGUMENT
!c_o> #define elpa_allocate(...) CONC(elpa_allocate, NARGS(__VA_ARGS__))(__VA_ARGS__)
!c_o> #endif
#endif #endif
!c> /*! \brief C interface for the implementation of the elpa_allocate method !c> /*! \brief C interface for the implementation of the elpa_allocate method
!c> * !c> *
...@@ -224,8 +226,10 @@ module elpa_impl ...@@ -224,8 +226,10 @@ module elpa_impl
!c> * \result elpa_t handle !c> * \result elpa_t handle
!c> */ !c> */
#ifdef OPTIONAL_C_ERROR_ARGUMENT #ifdef OPTIONAL_C_ERROR_ARGUMENT
!c> elpa_t elpa_allocate2(int *error); !c_o> #ifdef OPTIONAL_C_ERROR_ARGUMENT
!c> elpa_t elpa_allocate1(); !c_o> elpa_t elpa_allocate2(int *error);
!c_o> elpa_t elpa_allocate1();
!c_o> #endif
function elpa_impl_allocate_c1() result(ptr) bind(C, name="elpa_allocate1") function elpa_impl_allocate_c1() result(ptr) bind(C, name="elpa_allocate1")
type(c_ptr) :: ptr type(c_ptr) :: ptr
type(elpa_impl_t), pointer :: obj type(elpa_impl_t), pointer :: obj
...@@ -243,6 +247,9 @@ module elpa_impl ...@@ -243,6 +247,9 @@ module elpa_impl
ptr = c_loc(obj) ptr = c_loc(obj)
end function end function
#else #else
!c_no> #ifndef OPTIONAL_C_ERROR_ARGUMENT
!c_no> elpa_t elpa_allocate(int *error);
!c_no> #endif
function elpa_impl_allocate_c(error) result(ptr) bind(C, name="elpa_allocate") function elpa_impl_allocate_c(error) result(ptr) bind(C, name="elpa_allocate")
integer(kind=c_int) :: error integer(kind=c_int) :: error
type(c_ptr) :: ptr type(c_ptr) :: ptr
...@@ -254,11 +261,13 @@ module elpa_impl ...@@ -254,11 +261,13 @@ module elpa_impl
#endif #endif
#ifdef OPTIONAL_C_ERROR_ARGUMENT #ifdef OPTIONAL_C_ERROR_ARGUMENT
!c> #define NARGS(...) NARGS_(__VA_ARGS__, 5, 4, 3, 2, 1, 0) !c_o> #ifdef OPTIONAL_C_ERROR_ARGUMENT
!c> #define NARGS_(_5, _4, _3, _2, _1, N, ...) N !c_o> #define NARGS(...) NARGS_(__VA_ARGS__, 5, 4, 3, 2, 1, 0)
!c> #define CONC(A, B) CONC_(A, B) !c_o> #define NARGS_(_5, _4, _3, _2, _1, N, ...) N
!c> #define CONC_(A, B) A##B !c_o> #define CONC(A, B) CONC_(A, B)
!c> #define elpa_deallocate(...) CONC(elpa_deallocate, NARGS(__VA_ARGS__))(__VA_ARGS__) !c_o> #define CONC_(A, B) A##B
!c_o> #define elpa_deallocate(...) CONC(elpa_deallocate, NARGS(__VA_ARGS__))(__VA_ARGS__)
!c_o> #endif
#endif #endif
!c> /*! \brief C interface for the implementation of the elpa_deallocate method !c> /*! \brief C interface for the implementation of the elpa_deallocate method
!c> * !c> *
...@@ -267,8 +276,10 @@ module elpa_impl ...@@ -267,8 +276,10 @@ module elpa_impl
!c> * \result void !c> * \result void
!c> */ !c> */
#ifdef OPTIONAL_C_ERROR_ARGUMENT #ifdef OPTIONAL_C_ERROR_ARGUMENT
!c> void elpa_deallocate2(elpa_t handle, int *error); !c_o> #ifdef OPTIONAL_C_ERROR_ARGUMENT
!c> void elpa_deallocate1(elpa_t handle); !c_o> void elpa_deallocate2(elpa_t handle, int *error);
!c_o> void elpa_deallocate1(elpa_t handle);
!c_o> #endif
subroutine elpa_impl_deallocate_c2(handle, error) bind(C, name="elpa_deallocate2") subroutine elpa_impl_deallocate_c2(handle, error) bind(C, name="elpa_deallocate2")
type(c_ptr), value :: handle type(c_ptr), value :: handle
type(elpa_impl_t), pointer :: self type(elpa_impl_t), pointer :: self
...@@ -288,6 +299,9 @@ module elpa_impl ...@@ -288,6 +299,9 @@ module elpa_impl
deallocate(self) deallocate(self)
end subroutine end subroutine
#else #else
!c_no> #ifndef OPTIONAL_C_ERROR_ARGUMENT
!c_no> void elpa_deallocate(elpa_t handle, int *error);
!c_no> #endif
subroutine elpa_impl_deallocate_c(handle, error) bind(C, name="elpa_deallocate") subroutine elpa_impl_deallocate_c(handle, error) bind(C, name="elpa_deallocate")
type(c_ptr), value :: handle type(c_ptr), value :: handle
type(elpa_impl_t), pointer :: self type(elpa_impl_t), pointer :: self
...@@ -439,7 +453,9 @@ module elpa_impl ...@@ -439,7 +453,9 @@ module elpa_impl
#ifdef ENABLE_AUTOTUNING #ifdef ENABLE_AUTOTUNING
#ifdef OPTIONAL_C_ERROR_ARGUMENT #ifdef OPTIONAL_C_ERROR_ARGUMENT
!c> #define elpa_autotune_deallocate(...) CONC(elpa_autotune_deallocate, NARGS(__VA_ARGS__))(__VA_ARGS__) !c_o> #ifdef OPTIONAL_C_ERROR_ARGUMENT
!c_o> #define elpa_autotune_deallocate(...) CONC(elpa_autotune_deallocate, NARGS(__VA_ARGS__))(__VA_ARGS__)
!c_o> #endif
#endif #endif
!c> /*! \brief C interface for the implementation of the elpa_autotune_deallocate method !c> /*! \brief C interface for the implementation of the elpa_autotune_deallocate method
!c> * !c> *
...@@ -447,8 +463,10 @@ module elpa_impl ...@@ -447,8 +463,10 @@ module elpa_impl
!c> * \result void !c> * \result void
!c> */ !c> */
#ifdef OPTIONAL_C_ERROR_ARGUMENT #ifdef OPTIONAL_C_ERROR_ARGUMENT
!c> void elpa_autotune_deallocate2(elpa_autotune_t handle, int *error); !c_o> #ifdef OPTIONAL_C_ERROR_ARGUMENT
!c> void elpa_autotune_deallocate1(elpa_autotune_t handle); !c_o> void elpa_autotune_deallocate2(elpa_autotune_t handle, int *error);
!c_o> void elpa_autotune_deallocate1(elpa_autotune_t handle);
!c_o> #endif
subroutine elpa_autotune_impl_deallocate_c1( autotune_handle) bind(C, name="elpa_autotune_deallocate1") subroutine elpa_autotune_impl_deallocate_c1( autotune_handle) bind(C, name="elpa_autotune_deallocate1")
type(c_ptr), value :: autotune_handle type(c_ptr), value :: autotune_handle
...@@ -469,6 +487,9 @@ module elpa_impl ...@@ -469,6 +487,9 @@ module elpa_impl
deallocate(self) deallocate(self)
end subroutine end subroutine
#else #else
!c_no> #ifndef OPTIONAL_C_ERROR_ARGUMENT
!c_no> void elpa_autotune_deallocate(elpa_autotune_t handle, int *error);
!c_no> #endif
subroutine elpa_autotune_impl_deallocate( autotune_handle, error) bind(C, name="elpa_autotune_deallocate") subroutine elpa_autotune_impl_deallocate( autotune_handle, error) bind(C, name="elpa_autotune_deallocate")
type(c_ptr), value :: autotune_handle type(c_ptr), value :: autotune_handle
......
...@@ -199,7 +199,7 @@ int main(int argc, char** argv) { ...@@ -199,7 +199,7 @@ int main(int argc, char** argv) {
} }
handle = elpa_allocate(&error); handle = elpa_allocate(&error);
assert_elpa_ok(error); //assert_elpa_ok(error);
/* Set parameters */ /* Set parameters */
elpa_set(handle, "na", na, &error); elpa_set(handle, "na", na, &error);
......
...@@ -180,6 +180,7 @@ int main(int argc, char** argv) { ...@@ -180,6 +180,7 @@ int main(int argc, char** argv) {
handle = elpa_allocate(&error); handle = elpa_allocate(&error);
#endif #endif
assert_elpa_ok(error); assert_elpa_ok(error);
#endif
/* Set parameters */ /* Set parameters */
elpa_set(handle, "na", na, &error); elpa_set(handle, "na", na, &error);
......
...@@ -236,6 +236,7 @@ int main(int argc, char** argv) { ...@@ -236,6 +236,7 @@ int main(int argc, char** argv) {
elpa_handle_2 = elpa_allocate(&error); elpa_handle_2 = elpa_allocate(&error);
#endif #endif
assert_elpa_ok(error); assert_elpa_ok(error);
#endif
set_basic_parameters(&elpa_handle_2, na, nev, na_rows, na_cols, nblk, my_prow, my_pcol); set_basic_parameters(&elpa_handle_2, na, nev, na_rows, na_cols, nblk, my_prow, my_pcol);
/* Setup */ /* Setup */
......
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