LCOV - code coverage report
Current view: top level - diagonalization - symmetrize_matrix.f90 (source / functions) Hit Total Coverage
Test: FLEUR test coverage Lines: 17 17 100.0 %
Date: 2024-04-26 04:44:34 Functions: 1 1 100.0 %

          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

Generated by: LCOV version 1.14