vasp 5.2.2 install by pgi compiler
In the world/컴퓨터 2009. 9. 4. 15:51vasp 5.2.2 를 pgi compiler를 이용하여 설치하면 실행할 때 이유없이 죽는 기묘한 현상이 발생한다.
특정 변수가 mpi 루틴에서 사용될 때 mpi 프로세스가 이유없이 죽는다.
참고로 intel compiler를 사용하여 설치한 경우는 이 분제가 발생하지 않는다.
이를 해결하기 위해서 paw.F 라는 코드에서 선언되는 일부 변수를 동적으로 메모리에 할당되도록 변경해 주면 된다.
1. Near line 880 (ALLOCATABLE 변수로 선언한다.)
LOGICAL, EXTERNAL :: USEFOCK_CONTRIBUTION, USEFOCK_AE_ONECENTER
REAL(q) DDLM(LMDIM*LMDIM),RHOLM(LMDIM*LMDIM),RHOLM_(LMDIM*LMDIM,WDES%NCDIJ)
!OVERLAP CTMP(LMDIM,LMDIM,MAX(2,WDES%NCDIJ)),CSO(LMDIM,LMDIM,WDES%NCDIJ), &
! CHF(LMDIM,LMDIM,WDES%NCDIJ)
!OVERLAP COCC(LMDIM,LMDIM,MAX(2,WDES%NCDIJ)),COCC_IM(LMDIM,LMDIM)
OVERLAP,ALLOCATABLE:: CTMP(:,:,:),CSO(:,:,:),CHF(:,:,:)
OVERLAP,ALLOCATABLE:: COCC(:,:,:),COCC_IM(:,:)
REAL(q),ALLOCATABLE :: POT(:,:,:), RHO(:,:,:), POTAE(:,:,:), RHOAE(:,:,:)
2. around Line 958 (ALLOCATE 문으로 메모리에 할당해 준다.)
ALLOCATE (RHOCOL( NDIM, LMMAX, NCDIJ ))
ALLOCATE (CTMP(LMDIM,LMDIM,MAX(2,WDES%NCDIJ)),CSO(LMDIM,LMDIM,WDES%NCDIJ), &
CHF(LMDIM,LMDIM,MAX(2,WDES%NCDIJ)))
ALLOCATE (COCC(LMDIM,LMDIM,MAX(2,WDES%NCDIJ)),COCC_IM(LMDIM,LMDIM))
! allocate kinetic energy density if metagga
3. around line 1428 (DEALLOCATE 문으로 메모리에서 제거한다.)
E%PAWAE=DOUBLEC_AE
E%PAWPS=DOUBLEC_PS
DEALLOCATE (COCC,COCC_IM,CHF)
DEALLOCATE (CTMP,CSO)
IF (LUSE_THOMAS_FERMI) CALL POP_XC_TYPE
CALL RELEASE_PAWFOCK
END SUBROUTINE SET_DD_PAW
특정 변수가 mpi 루틴에서 사용될 때 mpi 프로세스가 이유없이 죽는다.
참고로 intel compiler를 사용하여 설치한 경우는 이 분제가 발생하지 않는다.
이를 해결하기 위해서 paw.F 라는 코드에서 선언되는 일부 변수를 동적으로 메모리에 할당되도록 변경해 주면 된다.
1. Near line 880 (ALLOCATABLE 변수로 선언한다.)
LOGICAL, EXTERNAL :: USEFOCK_CONTRIBUTION, USEFOCK_AE_ONECENTER
REAL(q) DDLM(LMDIM*LMDIM),RHOLM(LMDIM*LMDIM),RHOLM_(LMDIM*LMDIM,WDES%NCDIJ)
!OVERLAP CTMP(LMDIM,LMDIM,MAX(2,WDES%NCDIJ)),CSO(LMDIM,LMDIM,WDES%NCDIJ), &
! CHF(LMDIM,LMDIM,WDES%NCDIJ)
!OVERLAP COCC(LMDIM,LMDIM,MAX(2,WDES%NCDIJ)),COCC_IM(LMDIM,LMDIM)
OVERLAP,ALLOCATABLE:: CTMP(:,:,:),CSO(:,:,:),CHF(:,:,:)
OVERLAP,ALLOCATABLE:: COCC(:,:,:),COCC_IM(:,:)
REAL(q),ALLOCATABLE :: POT(:,:,:), RHO(:,:,:), POTAE(:,:,:), RHOAE(:,:,:)
2. around Line 958 (ALLOCATE 문으로 메모리에 할당해 준다.)
ALLOCATE (RHOCOL( NDIM, LMMAX, NCDIJ ))
ALLOCATE (CTMP(LMDIM,LMDIM,MAX(2,WDES%NCDIJ)),CSO(LMDIM,LMDIM,WDES%NCDIJ), &
CHF(LMDIM,LMDIM,MAX(2,WDES%NCDIJ)))
ALLOCATE (COCC(LMDIM,LMDIM,MAX(2,WDES%NCDIJ)),COCC_IM(LMDIM,LMDIM))
! allocate kinetic energy density if metagga
3. around line 1428 (DEALLOCATE 문으로 메모리에서 제거한다.)
E%PAWAE=DOUBLEC_AE
E%PAWPS=DOUBLEC_PS
DEALLOCATE (COCC,COCC_IM,CHF)
DEALLOCATE (CTMP,CSO)
IF (LUSE_THOMAS_FERMI) CALL POP_XC_TYPE
CALL RELEASE_PAWFOCK
END SUBROUTINE SET_DD_PAW