aboutsummaryrefslogtreecommitdiff
path: root/math/bevington/determ.f
blob: 4bdc2778930cf41fb55e487ae023ac61887c9c22 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
C FUNCTION DETERM.F
C
C SOURCE
C   BEVINGTON, PAGE 294.
C
C PURPOSE
C   CALCULATE THE DETERMINANT OF A SQUARE MATRIX
C
C USAGE 
C   DET = DETERM (ARRAY, NORDER)
C
C DESCRIPTION OF PARAMETERS
C   ARRAY  - MATRIX
C   NORDER - ORDER OF DETERMINANT (DEGREE OF MATRIX)
C
C SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED 
C   NONE
C
C COMMENTS
C   THIS SUBPROGRAM DESTROYS THE INPUT MATRIX ARRAY
C   DIMENSION STATEMENT VALID FOR NORDER UP TO 10
C
	FUNCTION DETERM (ARRAY,NORDER)
	DOUBLE PRECISION ARRAY,SAVE
	DIMENSION ARRAY(10,10)
C
10	DETERM=1.
11	DO 50 K=1,NORDER
C
C INTERCHANGE COLUMNS IF DIAGONAL ELEMENT IS ZERO
C
	IF (ARRAY(K,K)) 41,21,41
21	DO 23 J=K,NORDER
	IF (ARRAY(K,J)) 31,23,31
23	CONTINUE
	DETERM=0.
	GOTO 60 
31	DO 34 I=K,NORDER
	SAVE=ARRAY(I,J) 
	ARRAY(I,J)=ARRAY(I,K)
34	ARRAY(I,K)=SAVE 
	DETERM=-DETERM
C
C SUBTRACT ROW K FROM LOWER ROWS TO GET DIAGONAL MATRIX 
C
41	DETERM=DETERM*ARRAY(K,K)
	IF (K-NORDER) 43,50,50
43	K1=K+1
	DO 46 I=K1,NORDER
	DO 46 J=K1,NORDER
46	ARRAY(I,J)=ARRAY(I,J)-ARRAY(I,K)*ARRAY(K,J)/ARRAY(K,K)
50	CONTINUE
60	RETURN
	END