Skip to content

Instantly share code, notes, and snippets.

@dojekon
Created February 10, 2022 19:27
Show Gist options
  • Save dojekon/77fbbebb3fee1a74c8aa48f48b1c1de5 to your computer and use it in GitHub Desktop.
Save dojekon/77fbbebb3fee1a74c8aa48f48b1c1de5 to your computer and use it in GitHub Desktop.
Find Determinant
REAL(dp) FUNCTION FindDet(matrix, n)
IMPLICIT NONE
REAL(dp), DIMENSION(n,n) :: matrix
INTEGER, INTENT(IN) :: n
REAL :: m, temp
INTEGER :: i, j, k, l
LOGICAL :: DetExists = .TRUE.
l = 1
!Convert to upper triangular form
DO k = 1, n-1
IF (matrix(k,k) == 0) THEN
DetExists = .FALSE.
DO i = k+1, n
IF (matrix(i,k) /= 0) THEN
DO j = 1, n
temp = matrix(i,j)
matrix(i,j)= matrix(k,j)
matrix(k,j) = temp
END DO
DetExists = .TRUE.
l=-l
EXIT
ENDIF
END DO
IF (DetExists .EQV. .FALSE.) THEN
FindDet = 0
return
END IF
ENDIF
DO j = k+1, n
m = matrix(j,k)/matrix(k,k)
DO i = k+1, n
matrix(j,i) = matrix(j,i) - m*matrix(k,i)
END DO
END DO
END DO
!Calculate determinant by finding product of diagonal elements
FindDet = l
DO i = 1, n
FindDet = FindDet * matrix(i,i)
END DO
END FUNCTION FindDet
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment