Commit 734ab46b authored by Lorenz Huedepohl's avatar Lorenz Huedepohl

Merge branch 'master_pre_stage' of https://gitlab.mpcdf.mpg.de/elpa/elpa

parents f52e77d9 9e0fc71c
......@@ -28,7 +28,7 @@ for the documentation how to proceed.
*ELPA* can be installed with the build steps
- configure
- make
- make check
- make check | or make check CHECK_LEVEL=extended
- make install
Please look at configure --help for all available options.
......
......@@ -556,26 +556,26 @@ include legacy_test_programs.am
endif
noinst_PROGRAMS += double_instance@SUFFIX@
check_SCRIPTS += double_instance@SUFFIX@.sh
check_SCRIPTS += double_instance@SUFFIX@_default.sh
double_instance@SUFFIX@_SOURCES = test/Fortran/elpa2/double_instance.F90
double_instance@SUFFIX@_LDADD = $(test_program_ldadd)
double_instance@SUFFIX@_FCFLAGS = $(AM_FCFLAGS) $(FC_MODINC)test_modules $(FC_MODINC)modules
noinst_PROGRAMS += real_2stage_banded@SUFFIX@
check_SCRIPTS += real_2stage_banded@SUFFIX@.sh
check_SCRIPTS += real_2stage_banded@SUFFIX@_default.sh
real_2stage_banded@SUFFIX@_SOURCES = test/Fortran/elpa2/real_2stage_banded.F90
real_2stage_banded@SUFFIX@_LDADD = $(test_program_ldadd)
real_2stage_banded@SUFFIX@_FCFLAGS = $(AM_FCFLAGS) $(FC_MODINC)test_modules $(FC_MODINC)modules
noinst_PROGRAMS += complex_2stage_banded@SUFFIX@
check_SCRIPTS += complex_2stage_banded@SUFFIX@.sh
check_SCRIPTS += complex_2stage_banded@SUFFIX@_default.sh
complex_2stage_banded@SUFFIX@_SOURCES = test/Fortran/elpa2/complex_2stage_banded.F90
complex_2stage_banded@SUFFIX@_LDADD = $(test_program_ldadd)
complex_2stage_banded@SUFFIX@_FCFLAGS = $(AM_FCFLAGS) $(FC_MODINC)test_modules $(FC_MODINC)modules
if WANT_SINGLE_PRECISION_REAL
noinst_PROGRAMS += single_real_2stage_banded@SUFFIX@
check_SCRIPTS += single_real_2stage_banded@SUFFIX@.sh
check_SCRIPTS += single_real_2stage_banded@SUFFIX@_default.sh
single_real_2stage_banded@SUFFIX@_SOURCES = test/Fortran/elpa2/single_real_2stage_banded.F90
single_real_2stage_banded@SUFFIX@_LDADD = $(test_program_ldadd)
single_real_2stage_banded@SUFFIX@_FCFLAGS = $(AM_FCFLAGS) $(FC_MODINC)test_modules $(FC_MODINC)modules
......@@ -583,14 +583,14 @@ endif
if WANT_SINGLE_PRECISION_COMPLEX
noinst_PROGRAMS += single_complex_2stage_banded@SUFFIX@
check_SCRIPTS += single_complex_2stage_banded@SUFFIX@.sh
check_SCRIPTS += single_complex_2stage_banded@SUFFIX@_default.sh
single_complex_2stage_banded@SUFFIX@_SOURCES = test/Fortran/elpa2/single_complex_2stage_banded.F90
single_complex_2stage_banded@SUFFIX@_LDADD = $(test_program_ldadd)
single_complex_2stage_banded@SUFFIX@_FCFLAGS = $(AM_FCFLAGS) $(FC_MODINC)test_modules $(FC_MODINC)modules
endif
# test scriptsT
# test scripts
TASKS ?= 2
if WITH_MPI
wrapper=$(MPI_BINARY) -n $${TASKS:-$(TASKS)}
......@@ -598,7 +598,12 @@ else
wrapper=
endif
TESTS = $(check_SCRIPTS)
%.sh: %
%_extended.sh: %
@echo "#!/bin/bash" > $@
@echo 'if [ "$$CHECK_LEVEL" = "extended" ] ; then $(wrapper) ./$^ $$TEST_FLAGS ; else exit 77; fi' >> $@
@chmod +x $@
%_default.sh: %
@echo "#!/bin/bash" > $@
@echo '$(wrapper)' ./$^ '$$TEST_FLAGS' >> $@
@chmod +x $@
......
......@@ -14,7 +14,7 @@ coverage](https://gitlab.mpcdf.mpg.de/elpa/badges/master/coverage.svg)](http://e
[![License: LGPL v3][license-badge]](LICENSE)
[license-badge]: https://img.shields.io/badge/License-LGPL%20v3-blue.svg
aa About *ELPA*
## About *ELPA* ##
The computation of selected or all eigenvalues and eigenvectors of a symmetric
(Hermitian) matrix has high relevance for various scientific disciplines.
......
......@@ -2,68 +2,66 @@
from __future__ import print_function
from itertools import product
language_flag = {
"Fortran" : "Fortran",
"C" : "C",
language_flag = {
"Fortran": "",
"C": "_c_version",
}
domain_flag = {
"real" : "-DTEST_REAL",
"complex": "-DTEST_COMPLEX",
"real": "-DTEST_REAL",
"complex": "-DTEST_COMPLEX",
}
prec_flag = {
"double" : "-DTEST_DOUBLE",
"single" : "-DTEST_SINGLE",
"double": "-DTEST_DOUBLE",
"single": "-DTEST_SINGLE",
}
solver_flag = {
"1stage" : "-DTEST_SOLVER_1STAGE",
"2stage" : "-DTEST_SOLVER_2STAGE",
"scalapack_all" : "-DTEST_SCALAPACK_ALL",
"scalapack_part" : "-DTEST_SCALAPACK_PART",
"1stage": "-DTEST_SOLVER_1STAGE",
"2stage": "-DTEST_SOLVER_2STAGE",
"scalapack_all": "-DTEST_SCALAPACK_ALL",
"scalapack_part": "-DTEST_SCALAPACK_PART",
}
gpu_flag = {
0 : "-DTEST_GPU=0",
1 : "-DTEST_GPU=1",
0: "-DTEST_GPU=0",
1: "-DTEST_GPU=1",
}
matrix_flag = {
"random" : "-DTEST_MATRIX_RANDOM",
"analytic" : "-DTEST_MATRIX_ANALYTIC",
"toeplitz" : "-DTEST_MATRIX_TOEPLITZ",
"frank" : "-DTEST_MATRIX_FRANK",
"random": "-DTEST_MATRIX_RANDOM",
"analytic": "-DTEST_MATRIX_ANALYTIC",
"toeplitz": "-DTEST_MATRIX_TOEPLITZ",
"frank": "-DTEST_MATRIX_FRANK",
}
qr_flag = {
0 : "-DTEST_QR_DECOMPOSITION=0",
1 : "-DTEST_QR_DECOMPOSITION=1",
0: "-DTEST_QR_DECOMPOSITION=0",
1: "-DTEST_QR_DECOMPOSITION=1",
}
test_type_flag = {
"eigenvectors" : "-DTEST_EIGENVECTORS",
"eigenvalues" : "-DTEST_EIGENVALUES",
"solve_tridiagonal" : "-DTEST_SOLVE_TRIDIAGONAL",
"cholesky" : "-DTEST_CHOLESKY",
"hermitian_multiply" : "-DTEST_HERMITIAN_MULTIPLY",
"eigenvectors": "-DTEST_EIGENVECTORS",
"eigenvalues": "-DTEST_EIGENVALUES",
"solve_tridiagonal": "-DTEST_SOLVE_TRIDIAGONAL",
"cholesky": "-DTEST_CHOLESKY",
"hermitian_multiply": "-DTEST_HERMITIAN_MULTIPLY",
}
layout_flag = {
"all_layouts" : "-DTEST_ALL_LAYOUTS",
"square" : ""
"all_layouts": "-DTEST_ALL_LAYOUTS",
"square": ""
}
for lang, m, g, q, t, p, d, s, l in product(
sorted(language_flag.keys()),
sorted(matrix_flag.keys()),
sorted(gpu_flag.keys()),
sorted(qr_flag.keys()),
sorted(test_type_flag.keys()),
sorted(prec_flag.keys()),
sorted(domain_flag.keys()),
sorted(solver_flag.keys()),
sorted(layout_flag.keys())):
if (lang == "C"):
continue
if (lang == "C" and ( m == "analytic" or l == "all_layouts")):
for lang, m, g, q, t, p, d, s, lay in product(sorted(language_flag.keys()),
sorted(matrix_flag.keys()),
sorted(gpu_flag.keys()),
sorted(qr_flag.keys()),
sorted(test_type_flag.keys()),
sorted(prec_flag.keys()),
sorted(domain_flag.keys()),
sorted(solver_flag.keys()),
sorted(layout_flag.keys())):
if lang == "C" and (m == "analytic" or m == "toeplitz" or m == "frank" or lay == "all_layouts"):
continue
# exclude some test combinations
......@@ -73,17 +71,16 @@ for lang, m, g, q, t, p, d, s, l in product(
continue
# Frank tests only for "eigenvectors" and eigenvalues and real double precision case
if(m == "frank" and ((t != "eigenvectors" or t != "eigenvalues") and (d !="real" or p !="double"))):
if(m == "frank" and ((t != "eigenvectors" or t != "eigenvalues") and (d != "real" or p != "double"))):
continue
if(s in ["scalapack_all", "scalapack_part"] and (g == 1 or t != "eigenvectors" or m != "analytic")):
if(s in ["scalapack_all", "scalapack_part"] and (g == 1 or t != "eigenvectors" or m != "analytic")):
continue
# solve tridiagonal only for real toeplitz matrix in 1stage
if (t == "solve_tridiagonal" and (s != "1stage" or d !="real" or m != "toeplitz")):
if (t == "solve_tridiagonal" and (s != "1stage" or d != "real" or m != "toeplitz")):
continue
# cholesky tests only 1stage and teoplitz matrix
if (t == "cholesky" and (m != "toeplitz" or s == "2stage")):
continue
......@@ -106,13 +103,16 @@ for lang, m, g, q, t, p, d, s, l in product(
extra_flags = []
if (t == "eigenvalues" and kernel == "all_kernels"):
continue
continue
if (lang == "C" and kernel == "all_kernels"):
continue
if (g == 1):
print("if WITH_GPU_VERSION")
endifs += 1
if (l == "all_layouts"):
if (lay == "all_layouts"):
print("if WITH_MPI")
endifs += 1
......@@ -125,8 +125,8 @@ for lang, m, g, q, t, p, d, s, l in product(
elif kernel == "all_kernels":
extra_flags.append("-DTEST_ALL_KERNELS")
if layout_flag[l]:
extra_flags.append(layout_flag[l])
if layout_flag[lay]:
extra_flags.append(layout_flag[lay])
if (p == "single"):
if (d == "real"):
......@@ -137,67 +137,51 @@ for lang, m, g, q, t, p, d, s, l in product(
raise Exception("Oh no!")
endifs += 1
if (lang == "Fortran"):
name = "test_{0}_{1}_{2}_{3}{4}_{5}{6}{7}{8}".format(
d, p, t, s,
"" if kernel == "nokernel" else "_" + kernel,
"gpu_" if g else "",
"qr_" if q else "",
m,
"_all_layouts" if l == "all_layouts" else "")
print("if BUILD_KCOMPUTER")
print("bin_PROGRAMS += " + name)
print("else")
print("noinst_PROGRAMS += " + name)
print("endif")
print("check_SCRIPTS += " + name + ".sh")
name = "test{langsuffix}_{d}_{p}_{t}_{s}{kernelsuffix}_{gpusuffix}{qrsuffix}{m}{layoutsuffix}".format(
langsuffix=language_flag[lang],
d=d, p=p, t=t, s=s,
kernelsuffix="" if kernel == "nokernel" else "_" + kernel,
gpusuffix="gpu_" if g else "",
qrsuffix="qr_" if q else "",
m=m,
layoutsuffix="_all_layouts" if lay == "all_layouts" else "")
print("if BUILD_KCOMPUTER")
print("bin_PROGRAMS += " + name)
print("else")
print("noinst_PROGRAMS += " + name)
print("endif")
if lay == "square":
print("check_SCRIPTS += " + name + "_default.sh")
elif lay == "all_layouts":
print("check_SCRIPTS += " + name + "_extended.sh")
else:
raise Exception("Unknown layout {0}".format(lay))
if lang == "Fortran":
print(name + "_SOURCES = test/Fortran/test.F90")
print(name + "_LDADD = $(test_program_ldadd)")
print(name + "_FCFLAGS = $(test_program_fcflags) \\")
print(" -DTEST_CASE=\\\"{0}\\\" \\".format(name))
print(" " + " \\\n ".join([
domain_flag[d],
prec_flag[p],
test_type_flag[t],
solver_flag[s],
gpu_flag[g],
qr_flag[q],
matrix_flag[m]] + extra_flags))
print("endif\n" * endifs)
if (lang == "C"):
name = "test_c_version_{0}_{1}_{2}_{3}{4}_{5}{6}{7}{8}".format(
d, p, t, s,
"" if kernel == "nokernel" else "_" + kernel,
"gpu_" if g else "",
"qr_" if q else "",
m,
"_all_layouts" if l == "all_layouts" else "")
print("if BUILD_KCOMPUTER")
print("bin_PROGRAMS += " + name)
print("else")
print("noinst_PROGRAMS += " + name)
print("endif")
print("check_SCRIPTS += " + name + ".sh")
elif lang == "C":
print(name + "_SOURCES = test/C/test.c")
print(name + "_LDADD = $(test_program_ldadd) $(FCLIBS)")
print(name + "_CFLAGS = $(test_program_fcflags) \\")
print(" -DTEST_CASE=\\\"{0}\\\" \\".format(name))
print(" " + " \\\n ".join([
domain_flag[d],
prec_flag[p],
test_type_flag[t],
solver_flag[s],
gpu_flag[g],
qr_flag[q],
matrix_flag[m]] + extra_flags))
print("endif\n" * endifs)
for p, d in product(sorted(prec_flag.keys()), sorted(domain_flag.keys())):
print(name + "_CFLAGS = $(test_program_cflags) \\")
print(" -DTEST_CASE=\\\"{0}\\\" \\".format(name))
print(" " + " \\\n ".join([
domain_flag[d],
prec_flag[p],
test_type_flag[t],
solver_flag[s],
gpu_flag[g],
qr_flag[q],
matrix_flag[m]] + extra_flags))
print("endif\n" * endifs)
for lang, p, d in product(sorted(language_flag.keys()), sorted(prec_flag.keys()), sorted(domain_flag.keys())):
endifs = 0
if (p == "single"):
if (d == "real"):
......@@ -208,15 +192,21 @@ for p, d in product(sorted(prec_flag.keys()), sorted(domain_flag.keys())):
raise Exception("Oh no!")
endifs += 1
name = "test_autotune_{0}_{1}".format(d, p)
name = "test_autotune{langsuffix}_{d}_{p}".format(langsuffix=language_flag[lang], d=d, p=p)
print("check_SCRIPTS += " + name + "_extended.sh")
print("noinst_PROGRAMS += " + name)
#if (p != "single"):
# print("check_SCRIPTS += " + name + ".sh")
print(name + "_SOURCES = test/Fortran/test_autotune.F90")
print(name + "_LDADD = $(test_program_ldadd)")
print(name + "_FCFLAGS = $(test_program_fcflags) \\")
if lang == "Fortran":
print(name + "_SOURCES = test/Fortran/test_autotune.F90")
print(name + "_LDADD = $(test_program_ldadd)")
print(name + "_FCFLAGS = $(test_program_fcflags) \\")
elif lang == "C":
print(name + "_SOURCES = test/C/test_autotune.c")
print(name + "_LDADD = $(test_program_ldadd) $(FCLIBS)")
print(name + "_CFLAGS = $(test_program_cflags) \\")
print(" " + " \\\n ".join([
domain_flag[d],
prec_flag[p]]))
domain_flag[d],
prec_flag[p]]))
print("endif\n" * endifs)
noinst_PROGRAMS += \
real_2stage_c_version@SUFFIX@ \
autotune_c_version@SUFFIX@ \
legacy_real_1stage@SUFFIX@ \
legacy_complex_1stage@SUFFIX@ \
legacy_real_2stage@SUFFIX@ \
......@@ -74,14 +72,6 @@ noinst_PROGRAMS += \
endif
endif
real_2stage_c_version@SUFFIX@_SOURCES = test/C/real_2stage_c_version.c
real_2stage_c_version@SUFFIX@_LDADD = $(test_program_ldadd) $(FCLIBS)
real_2stage_c_version@SUFFIX@_FCFLAGS = $(test_program_fcflags)
autotune_c_version@SUFFIX@_SOURCES = test/C/autotune_c_version.c
autotune_c_version@SUFFIX@_LDADD = $(test_program_ldadd) $(FCLIBS)
autotune_c_version@SUFFIX@_FCFLAGS = $(test_program_fcflags)
legacy_real_1stage_c_version@SUFFIX@_SOURCES = test/C/elpa1/legacy_interface/legacy_real_1stage_c_version.c
legacy_real_1stage_c_version@SUFFIX@_LDADD = $(test_program_ldadd) $(FCLIBS)
legacy_real_1stage_c_version@SUFFIX@_FCFLAGS = $(test_program_fcflags)
......@@ -355,73 +345,73 @@ endif
endif
check_SCRIPTS += \
legacy_real_1stage@SUFFIX@.sh \
legacy_real_2stage@SUFFIX@.sh \
legacy_real_2stage_default@SUFFIX@.sh \
legacy_complex_1stage@SUFFIX@.sh \
legacy_complex_2stage@SUFFIX@.sh \
legacy_real_2stage_qr@SUFFIX@.sh \
legacy_complex_2stage_default@SUFFIX@.sh \
legacy_real_2stage_api@SUFFIX@.sh \
legacy_complex_2stage_api@SUFFIX@.sh \
legacy_real_driver@SUFFIX@.sh \
legacy_complex_driver@SUFFIX@.sh \
legacy_real_toeplitz@SUFFIX@.sh \
legacy_real_cholesky@SUFFIX@.sh \
legacy_real_invert_trm@SUFFIX@.sh \
legacy_real_transpose_multiply@SUFFIX@.sh \
legacy_complex_cholesky@SUFFIX@.sh \
legacy_complex_invert_trm@SUFFIX@.sh \
legacy_complex_transpose_multiply@SUFFIX@.sh \
legacy_real_1stage_c_version@SUFFIX@.sh \
legacy_complex_1stage_c_version@SUFFIX@.sh \
legacy_real_2stage_c_version@SUFFIX@.sh \
legacy_complex_2stage_c_version@SUFFIX@.sh \
legacy_real_driver_c_version@SUFFIX@.sh \
legacy_complex_driver_c_version@SUFFIX@.sh
legacy_real_1stage@SUFFIX@_default.sh \
legacy_real_2stage@SUFFIX@_default.sh \
legacy_real_2stage_default@SUFFIX@_default.sh \
legacy_complex_1stage@SUFFIX@_default.sh \
legacy_complex_2stage@SUFFIX@_default.sh \
legacy_real_2stage_qr@SUFFIX@_default.sh \
legacy_complex_2stage_default@SUFFIX@_default.sh \
legacy_real_2stage_api@SUFFIX@_default.sh \
legacy_complex_2stage_api@SUFFIX@_default.sh \
legacy_real_driver@SUFFIX@_default.sh \
legacy_complex_driver@SUFFIX@_default.sh \
legacy_real_toeplitz@SUFFIX@_default.sh \
legacy_real_cholesky@SUFFIX@_default.sh \
legacy_real_invert_trm@SUFFIX@_default.sh \
legacy_real_transpose_multiply@SUFFIX@_default.sh \
legacy_complex_cholesky@SUFFIX@_default.sh \
legacy_complex_invert_trm@SUFFIX@_default.sh \
legacy_complex_transpose_multiply@SUFFIX@_default.sh \
legacy_real_1stage_c_version@SUFFIX@_default.sh \
legacy_complex_1stage_c_version@SUFFIX@_default.sh \
legacy_real_2stage_c_version@SUFFIX@_default.sh \
legacy_complex_2stage_c_version@SUFFIX@_default.sh \
legacy_real_driver_c_version@SUFFIX@_default.sh \
legacy_complex_driver_c_version@SUFFIX@_default.sh
if WANT_SINGLE_PRECISION_REAL
check_SCRIPTS += \
legacy_single_real_1stage@SUFFIX@.sh \
legacy_single_real_2stage@SUFFIX@.sh \
legacy_single_real_2stage_default@SUFFIX@.sh \
legacy_single_real_2stage_qr@SUFFIX@.sh \
legacy_single_real_driver@SUFFIX@.sh \
legacy_single_real_cholesky@SUFFIX@.sh \
legacy_single_real_invert_trm@SUFFIX@.sh \
legacy_single_real_transpose_multiply@SUFFIX@.sh \
legacy_single_real_2stage_api@SUFFIX@.sh \
legacy_single_real_driver_c_version@SUFFIX@.sh
legacy_single_real_1stage@SUFFIX@_default.sh \
legacy_single_real_2stage@SUFFIX@_default.sh \
legacy_single_real_2stage_default@SUFFIX@_default.sh \
legacy_single_real_2stage_qr@SUFFIX@_default.sh \
legacy_single_real_driver@SUFFIX@_default.sh \
legacy_single_real_cholesky@SUFFIX@_default.sh \
legacy_single_real_invert_trm@SUFFIX@_default.sh \
legacy_single_real_transpose_multiply@SUFFIX@_default.sh \
legacy_single_real_2stage_api@SUFFIX@_default.sh \
legacy_single_real_driver_c_version@SUFFIX@_default.sh
endif
if WANT_SINGLE_PRECISION_COMPLEX
check_SCRIPTS += \
legacy_single_complex_1stage@SUFFIX@.sh \
legacy_single_complex_2stage@SUFFIX@.sh \
legacy_single_complex_2stage_default@SUFFIX@.sh \
legacy_single_complex_cholesky@SUFFIX@.sh \
legacy_single_complex_driver@SUFFIX@.sh \
legacy_single_complex_invert_trm@SUFFIX@.sh \
legacy_single_complex_transpose_multiply@SUFFIX@.sh \
legacy_single_complex_2stage_api@SUFFIX@.sh \
legacy_single_complex_driver_c_version@SUFFIX@.sh
legacy_single_complex_1stage@SUFFIX@_default.sh \
legacy_single_complex_2stage@SUFFIX@_default.sh \
legacy_single_complex_2stage_default@SUFFIX@_default.sh \
legacy_single_complex_cholesky@SUFFIX@_default.sh \
legacy_single_complex_driver@SUFFIX@_default.sh \
legacy_single_complex_invert_trm@SUFFIX@_default.sh \
legacy_single_complex_transpose_multiply@SUFFIX@_default.sh \
legacy_single_complex_2stage_api@SUFFIX@_default.sh \
legacy_single_complex_driver_c_version@SUFFIX@_default.sh
endif
if WITH_GPU_VERSION
check_SCRIPTS += \
legacy_real_1stage_gpu@SUFFIX@.sh \
legacy_complex_1stage_gpu@SUFFIX@.sh \
legacy_real_2stage_gpu@SUFFIX@.sh \
legacy_complex_2stage_gpu@SUFFIX@.sh
legacy_real_1stage_gpu@SUFFIX@_default.sh \
legacy_complex_1stage_gpu@SUFFIX@_default.sh \
legacy_real_2stage_gpu@SUFFIX@_default.sh \
legacy_complex_2stage_gpu@SUFFIX@_default.sh
if WANT_SINGLE_PRECISION_REAL
check_SCRIPTS += \
legacy_single_real_1stage_gpu@SUFFIX@.sh \
legacy_single_real_2stage_gpu@SUFFIX@.sh
legacy_single_real_1stage_gpu@SUFFIX@_default.sh \
legacy_single_real_2stage_gpu@SUFFIX@_default.sh
endif
if WANT_SINGLE_PRECISION_COMPLEX
check_SCRIPTS += \
legacy_single_complex_1stage_gpu@SUFFIX@.sh \
legacy_single_complex_2stage_gpu@SUFFIX@.sh
legacy_single_complex_1stage_gpu@SUFFIX@_default.sh \
legacy_single_complex_2stage_gpu@SUFFIX@_default.sh
endif
endif
/* This file is part of ELPA. */
/* */
/* The ELPA library was originally created by the ELPA consortium, */
/* consisting of the following organizations: */
/* */
/* - Max Planck Computing and Data Facility (MPCDF), formerly known as */
/* Rechenzentrum Garching der Max-Planck-Gesellschaft (RZG), */
/* - Bergische Universität Wuppertal, Lehrstuhl für angewandte */
/* Informatik, */
/* - Technische Universität München, Lehrstuhl für Informatik mit */
/* Schwerpunkt Wissenschaftliches Rechnen , */
/* - Fritz-Haber-Institut, Berlin, Abt. Theorie, */
/* - Max-Plack-Institut für Mathematik in den Naturwissenschaften, */
/* Leipzig, Abt. Komplexe Strukutren in Biologie und Kognition, */
/* and */
/* - IBM Deutschland GmbH */
/* */
/* */
/* More information can be found here: */
/* http://elpa.mpcdf.mpg.de/ */
/* */
/* ELPA is free software: you can redistribute it and/or modify */
/* it under the terms of the version 3 of the license of the */
/* GNU Lesser General Public License as published by the Free */
/* Software Foundation. */
/* */
/* ELPA is distributed in the hope that it will be useful, */
/* but WITHOUT ANY WARRANTY; without even the implied warranty of */
/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */
/* GNU Lesser General Public License for more details. */
/* */
/* You should have received a copy of the GNU Lesser General Public License */
/* along with ELPA. If not, see <http://www.gnu.org/licenses/> */
/* */
/* ELPA reflects a substantial effort on the part of the original */
/* ELPA consortium, and we ask you to respect the spirit of the */
/* license that we chose: i.e., please contribute any changes you */
/* may have back to the original ELPA library distribution, and keep */
/* any derivatives of ELPA under the same license that we chose for */
/* the original distribution, the GNU Lesser General Public License. */
/* */
/* */
#include "config-f90.h"
#include <stdio.h>
#include <stdlib.h>
#ifdef WITH_MPI
#include <mpi.h>
#endif
#include <math.h>
#include <elpa/elpa.h>
#include <assert.h>
#include <test/shared/generated.h>
#define DOUBLE_PRECISION_REAL 1
#define assert_elpa_ok(x) assert(x == ELPA_OK)
int main(int argc, char** argv) {
int myid;
int nprocs;
#ifndef WITH_MPI
int MPI_COMM_WORLD;
#endif
int na, nev, nblk;
int status;
int np_cols, np_rows, np_colsStart;
int my_blacs_ctxt, my_prow, my_pcol;
int mpierr;
int my_mpi_comm_world;
int mpi_comm_rows, mpi_comm_cols;
int info, *sc_desc;
int na_rows, na_cols;
double startVal;
#ifdef DOUBLE_PRECISION_REAL
double *a, *z, *as, *ev;
#else
float *a, *z, *as, *ev;
#endif
int success;
elpa_t handle;
int value, error;
#ifdef WITH_MPI
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &nprocs);
MPI_Comm_rank(MPI_COMM_WORLD, &myid);
#else
nprocs = 1;
myid=0;