Commit e5940a5b authored by Daniel Wortmann's avatar Daniel Wortmann

Some fixes in diagonalization part

apws has to be compiled without optimization on new intel compiler
parent 8464d007
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
if (${CMAKE_Fortran_COMPILER_ID} MATCHES "Intel") if (${CMAKE_Fortran_COMPILER_ID} MATCHES "Intel")
set_source_files_properties(io/eig66_mpi.F90 PROPERTIES COMPILE_FLAGS -O0) set_source_files_properties(io/eig66_mpi.F90 PROPERTIES COMPILE_FLAGS -O0)
set_source_files_properties(cdn/pwden.F90 PROPERTIES COMPILE_FLAGS -O0) set_source_files_properties(cdn/pwden.F90 PROPERTIES COMPILE_FLAGS -O0)
set_source_files_properties(eigen/apws.F90 PROPERTIES COMPILE_FLAGS -O0)
set_source_files_properties(init/lhcal.f PROPERTIES COMPILE_FLAGS -O0) set_source_files_properties(init/lhcal.f PROPERTIES COMPILE_FLAGS -O0)
endif() endif()
...@@ -18,16 +18,17 @@ function configure_machine(){ ...@@ -18,16 +18,17 @@ function configure_machine(){
if module list 2>&1 |grep -q intel-para if module list 2>&1 |grep -q intel-para
then then
echo "Intel toolchain used" echo "Intel toolchain used"
if module list 2>&1| grep -q Python/2.7.12 if module list 2>&1| grep -q Python/2.7.12 &&
module list 2>&1| grep -q HDF5 &&
module list 2>&1| grep -q CMake &&
module list 2>&1| grep -q ELPA
then then
echo "Python module loaded for XML (OK)" echo "All required modules load loaded"
else else
echo "You have to load the Python module" echo "You have to load the required modules"
echo "module load Python/2.7.12" echo "module load Python/2.7.12 CMake HDF5 ELPA/2016.05.003-hybrid"
exit exit
fi fi
#module load ELPA/2016.05.003-hybrid
module load HDF5
export CC=mpicc export CC=mpicc
export FC=mpif90 export FC=mpif90
export CMAKE_Fortran_FLAGS="$CMAKE_Fortran_FLAGS -I$ELPA_MODULES -I$EBROOTHDF5/include -mkl" export CMAKE_Fortran_FLAGS="$CMAKE_Fortran_FLAGS -I$ELPA_MODULES -I$EBROOTHDF5/include -mkl"
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
MODULE m_chani MODULE m_chani
CONTAINS CONTAINS
SUBROUTINE chani(M,N,Neigd, Myid,Np,Sub_comm,mpi_comm, & SUBROUTINE chani(M,Neigd, Myid,Np,Sub_comm,mpi_comm, &
Eig,Num,hamOvlp,zMat) Eig,Num,hamOvlp,zMat)
! !
!---------------------------------------------------- !----------------------------------------------------
...@@ -39,7 +39,7 @@ CONTAINS ...@@ -39,7 +39,7 @@ CONTAINS
IMPLICIT NONE IMPLICIT NONE
INCLUDE 'mpif.h' INCLUDE 'mpif.h'
INTEGER, INTENT (IN) :: neigd,m,n INTEGER, INTENT (IN) :: neigd,m
INTEGER, INTENT (IN) :: SUB_COMM,np,myid,mpi_comm INTEGER, INTENT (IN) :: SUB_COMM,np,myid,mpi_comm
INTEGER, INTENT (INOUT) :: num INTEGER, INTENT (INOUT) :: num
REAL, INTENT (OUT) :: eig(neigd) REAL, INTENT (OUT) :: eig(neigd)
...@@ -88,11 +88,11 @@ CONTAINS ...@@ -88,11 +88,11 @@ CONTAINS
DO i = myid+1, m, np DO i = myid+1, m, np
nc = nc + 1 nc = nc + 1
ENDDO ENDDO
IF (nc.GT.n) THEN !IF (nc.GT.n) THEN
WRITE (6,*) myid,'gets more columns than allowed:' ! WRITE (6,*) myid,'gets more columns than allowed:'
WRITE (6,*) myid,'will get',nc,' columns, only',n,' allowed' ! WRITE (6,*) myid,'will get',nc,' columns, only',n,' allowed'
CALL juDFT_error("chani: nc > n",calledby ="chani") ! CALL juDFT_error("chani: nc > n",calledby ="chani")
ENDIF !ENDIF
! !
! determine block size ! determine block size
! !
......
...@@ -119,8 +119,8 @@ CONTAINS ...@@ -119,8 +119,8 @@ CONTAINS
DO n=n_rank+1,lapw%nmat,n_size DO n=n_rank+1,lapw%nmat,n_size
DO nn=1,n DO nn=1,n
i=i+1 i=i+1
write(99,'(2(i10,1x),4(f15.4,1x))') n,nn,a(i) write(99,'(2(i10,1x),4(f15.8,1x))') n,nn,hamOvlp%a_c(i)
write(98,'(2(i10,1x),4(f15.4,1x))') n,nn,b(i) write(98,'(2(i10,1x),4(f15.8,1x))') n,nn,hamOvlp%b_c(i)
ENDDO ENDDO
ENDDO ENDDO
CALL MPI_BARRIER(MPI_COMM_WORLD,err) CALL MPI_BARRIER(MPI_COMM_WORLD,err)
...@@ -170,9 +170,9 @@ CONTAINS ...@@ -170,9 +170,9 @@ CONTAINS
#ifdef CPP_ELPA #ifdef CPP_ELPA
CASE (diag_elpa) CASE (diag_elpa)
IF (hamovlp%l_real) THEN IF (hamovlp%l_real) THEN
CALL elpa_diag(lapw%nmat,n,SUB_COMM,hamOvlp%a_r,hamOvlp%b_r,zMat%z_r,eig,ne_found) CALL elpa_diag(lapw%nmat,SUB_COMM,hamOvlp%a_r,hamOvlp%b_r,zMat%z_r,eig,ne_found)
ELSE ELSE
CALL elpa_diag(lapw%nmat,n,SUB_COMM,hamOvlp%a_c,hamOvlp%b_c,zMat%z_c,eig,ne_found) CALL elpa_diag(lapw%nmat,SUB_COMM,hamOvlp%a_c,hamOvlp%b_c,zMat%z_c,eig,ne_found)
ENDIF ENDIF
#endif #endif
#ifdef CPP_ELEMENTAL #ifdef CPP_ELEMENTAL
...@@ -186,7 +186,7 @@ CONTAINS ...@@ -186,7 +186,7 @@ CONTAINS
#endif #endif
#ifdef CPP_SCALAPACK #ifdef CPP_SCALAPACK
CASE (diag_scalapack) CASE (diag_scalapack)
CALL chani(lapw%nmat,dimension%nbasfcn/n_size,ndim, n_rank,n_size,SUB_COMM,mpi%mpi_comm,eig,ne_found,hamOvlp,zMat) CALL chani(lapw%nmat,ndim, n_rank,n_size,SUB_COMM,mpi%mpi_comm,eig,ne_found,hamOvlp,zMat)
#endif #endif
#ifdef CPP_MAGMA #ifdef CPP_MAGMA
CASE (diag_magma) CASE (diag_magma)
......
...@@ -28,7 +28,7 @@ CONTAINS ...@@ -28,7 +28,7 @@ CONTAINS
#define CPP_ZERO 0.0 #define CPP_ZERO 0.0
#define CPP_mult mult_at_b_real #define CPP_mult mult_at_b_real
#define CPP_REAL #define CPP_REAL
SUBROUTINE elpa_r(m,n, SUB_COMM, a,b, z,eig,num) SUBROUTINE elpa_r(m, SUB_COMM, a,b, z,eig,num)
! !
!---------------------------------------------------- !----------------------------------------------------
!- Parallel eigensystem solver - driver routine based on chani; dw'12 !- Parallel eigensystem solver - driver routine based on chani; dw'12
...@@ -65,7 +65,7 @@ CONTAINS ...@@ -65,7 +65,7 @@ CONTAINS
#define CPP_ZERO cmplx(0.,0.) #define CPP_ZERO cmplx(0.,0.)
#define CPP_mult mult_ah_b_complex #define CPP_mult mult_ah_b_complex
#undef CPP_REAL #undef CPP_REAL
SUBROUTINE elpa_c(m,n, SUB_COMM, a,b, z,eig,num) SUBROUTINE elpa_c(m, SUB_COMM, a,b, z,eig,num)
! !
!---------------------------------------------------- !----------------------------------------------------
!- Parallel eigensystem solver - driver routine based on chani; dw'12 !- Parallel eigensystem solver - driver routine based on chani; dw'12
......
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
IMPLICIT NONE IMPLICIT NONE
INCLUDE 'mpif.h' INCLUDE 'mpif.h'
INTEGER, INTENT (IN) :: m,n INTEGER, INTENT (IN) :: m
INTEGER, INTENT (IN) :: SUB_COMM INTEGER, INTENT (IN) :: SUB_COMM
INTEGER, INTENT (INOUT) :: num INTEGER, INTENT (INOUT) :: num
REAL, INTENT (OUT) :: eig(:) REAL, INTENT (OUT) :: eig(:)
......
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