Line data Source code
1 : !-------------------------------------------------------------------------------- 2 : ! Copyright (c) 2016 Peter Grünberg Institut, Forschungszentrum Jülich, Germany 3 : ! This file is part of FLEUR and available as free software under the conditions 4 : ! of the MIT license as expressed in the LICENSE file in more detail. 5 : !-------------------------------------------------------------------------------- 6 : 7 : MODULE m_symmetrize_matrix 8 : USE m_juDFT 9 : 10 : CONTAINS 11 7342 : SUBROUTINE symmetrize_matrix(fmpi,noco,kpts,nk,hmat,smat,force_sym) 12 : USE m_types 13 : USE m_constants 14 : IMPLICIT NONE 15 : TYPE(t_mpi),INTENT(IN) :: fmpi 16 : TYPE(t_noco),INTENT(in) :: noco 17 : TYPE(t_kpts),INTENT(in) :: kpts 18 : INTEGER,INTENT(in) :: nk 19 : CLASS(t_mat),INTENT(inout) :: hmat,smat 20 : LOGICAL, INTENT(IN) :: force_sym 21 : 22 : REAL :: max_imag 23 : !Check if we could exploit a real matrix even without inversion symmetry 24 : SELECT TYPE(hmat) 25 : TYPE IS(t_mat) 26 2470 : realcomplex:IF (.NOT.noco%l_noco.AND..NOT.hmat%l_real) THEN 27 2816 : IF (ALL(ABS(kpts%bk(:,nk))<1E-10).OR.force_sym) THEN 28 1405416 : max_imag=MAXVAL(ABS(AIMAG(hmat%data_c))) 29 48 : IF (max_imag>1e-10) THEN 30 : RETURN 31 : ENDIF 32 : 33 2 : IF (fmpi%irank==0.AND..NOT.force_sym) THEN 34 2 : PRINT *,"Complex matrix made real" 35 2 : WRITE(oUnit,*) "Complex matrix made real" 36 : END IF 37 : 38 : !We are using Gamma point, so matrix should be real 39 2 : IF (ALLOCATED(smat%data_r)) DEALLOCATE(smat%data_r) 40 8 : ALLOCATE(smat%data_r(SIZE(smat%data_c,1),SIZE(smat%data_c,2))) 41 7084 : smat%data_r=smat%data_c;smat%l_real=.TRUE. 42 2 : DEALLOCATE(smat%data_c) 43 : 44 2 : IF (ALLOCATED(hmat%data_r)) DEALLOCATE(hmat%data_r) 45 8 : ALLOCATE(hmat%data_r(SIZE(hmat%data_c,1),SIZE(hmat%data_c,2))) 46 7084 : hmat%data_r=hmat%data_c;hmat%l_real=.TRUE. 47 2 : DEALLOCATE(hmat%data_c) 48 : 49 : ENDIF 50 : ENDIF realcomplex 51 : END SELECT 52 : END SUBROUTINE symmetrize_matrix 53 7342 : END MODULE m_symmetrize_matrix