SUBROUTINE sym_check (hamil, nsize) USE Numeric_Kinds_Module USE FileUnits_Module IMPLICIT NONE !============================================================================== INTEGER :: i, j, nsize REAL (dp), PARAMETER::errtol = 1.d-12 REAL (dp) :: hamil (nsize, nsize), err, maxerr !============================================================================== maxerr = 0.d0 DO i = 1, nsize-1 DO j = i + 1, nsize err = abs (hamil (i, j) - hamil (j, i) ) IF (err.gt.maxerr) maxerr = err IF (err.gt.errtol) THEN WRITE(Output_Unit, * ) 'Error: i, j, err=', i, j, err WRITE(Output_Unit, * ) 'hamil(i,j)=', hamil (i, j) WRITE(Output_Unit, * ) 'hamil(j,i)=', hamil (j, i) ENDIF ENDDO ENDDO IF (maxerr.lt.errtol) THEN WRITE(Output_Unit, * ) 'Hamiltonian is symmetric' ELSE WRITE(Output_Unit, * ) 'Hamiltonian is NOT symmetric' WRITE(Output_Unit, * ) 'Maximum asymmetry=', maxerr !cc STOP 'sym_check' ENDIF WRITE(Output_Unit, * ) 'END(Sym_Check)' WRITE(Output_Unit, * ) RETURN END SUBROUTINE sym_check