Closed jsboer closed 6 months ago
Dear @jsboer
this should not happen at all. Up to numerical precision results must be the same, or ELPA should indicate an error. I understand you are using a fixed matrix for all three tests? Can you provide this to us via the ELPA email? Please also provide:
Can you please also run the two ELPA test programs for the correct datatype and solving eigenvectors for 1stage and 2stage with arguments "240 the_number_of_eigenvectors_you_need blacs_blocksize" with the exact number of MPI processes you used in your tests? So sth. like: mpirun -n 2 ./validate_real_double_eigenvectors_1stage_random 240 240 16
And report whether this tests pass...
Hi, these three test are use the exactly same matrix, I use the same matrix first solved by elpa and then solved by scalapack. When compile the ELPA, all the ELPA check are passed. So Maybe ELPA do not have error but maybe how I use ELPA is wrong?
I use mpirun -n 2 ./validate_real_double_eigenvectors_1stage_random 240 240 64
and mpirun -n 2 ./validate_real_double_eigenvectors_2stage_all_kernels_random 240 240 64
, the result seems true.
! one stage
Results of numerical residual checks:
Error Residual : 9.396239274961853E-014
Maximal error in eigenvector lengths: 2.442490654175344E-015
Error Orthogonality: 2.442490654175344E-015
! two stage
Results of numerical residual checks:
Error Residual : 2.831158399978648E-013
Maximal error in eigenvector lengths: 2.664535259100376E-015
Error Orthogonality: 2.664535259100376E-015
And following is the information
FC=mpiifort CC=mpiicc CXX=mpiicpc ../configure \
FCFLAGS="-O3 -march=core-avx2 " \
CFLAGS=" -O3 -march=core-avx2 " CXXFLAGS="-O3 -march=core-avx2 " \
--enable-option-checking=fatal \
SCALAPACK_LDFLAGS=" -L$MKL_HOME/lib/intel64 -lmkl_scalapack_lp64 -lmkl_intel_lp64 -lmkl_sequential -lmkl_core -lmkl_blacs_intelmpi_lp64 -lpthread " \
SCALAPACK_FCFLAGS="-I$MKL_HOME/include -I$MKL_HOME/include/intel64/lp64 -L$MKL_HOME/lib/intel64 -lmkl_scalapack_lp64 -lmkl_intel_lp64 -lmkl_sequential -lmkl_core -lmkl_blacs_intelmpi_lp64 -lpthread " \
--enable-avx2 --disable-avx512-kernels
the number of MPI processes
and the block size for the block-cyclic distribution of BLACS
and datatype
All from intel 2021.3 version
I have send the matrix to the ELPA email elpa-library@mpcdf.mpg.de.
The way I compare the results between ELPA and Scalapack is as follows. So the matrix layout should be right? Or are there some different requirements for ELPA and Scalapack? By the way, the results of ScaLAPACK and Lapack(dsyevd) are consistent.
allocate(elpa_eigenvalue_slave(1:s%norbitals)); allocate(elpa_eigenvec_slave(1:ir, 1:ic))
call elpa_diag(desc_x, yyyy, s%norbitals, s%norbitals, elpa_eigenvalue_slave, elpa_eigenvec_slave, info)
call pdsyevd('V', 'U', s%norbitals, yyyy, 1, 1, desc_x, eigen, &
& xxxx, 1, 1, desc_x, rwork, -1, iwork, -1, info)
lrwork = rwork(1)
liwork = iwork(1)
deallocate (rwork, iwork)
allocate (rwork(lrwork)); allocate (iwork(liwork))
call pdsyevd('V', 'U', s%norbitals, yyyy, 1, 1, desc_y, eigen, &
& xxxx, 1, 1, desc_x, rwork, lrwork, iwork, liwork, info)
Dear @jsboer ,
I have also noticed that you set
call e%set("bandwidth", int(bandwidth,kind=c_int), error_elpa)
As I understand it, your matrix is a full, dense matrix so setting the "bandwidth" option will lead to wrong results in ELPA2.
The banwidth-option is for the case that a matrix has already a certain bandwidth, i.e. only some diagonals below/above the main-diagonal contain non-zero values. Away from this band , all entries must be zero. If this is not the case this is not a banded matrix and setting bandwidth to a value is wrong
Oh! thank you! Now I get the right result.
Hi, I have solve the matrix use 1 step\ 2 step and scalapack way, but get three different resulet. This is a 240*240 symmetry matrix, and compute all eigenvalue. All the test has passed. what could cause this ?
some smallest eigenvalue
scalapack
elpa 2step
elpa 1 step
procedure
blacs initial
elpa set