aboutsummaryrefslogtreecommitdiff
path: root/math/bevington/determ.f
diff options
context:
space:
mode:
authorJoe Hunkeler <jhunkeler@gmail.com>2015-08-11 16:51:37 -0400
committerJoe Hunkeler <jhunkeler@gmail.com>2015-08-11 16:51:37 -0400
commit40e5a5811c6ffce9b0974e93cdd927cbcf60c157 (patch)
tree4464880c571602d54f6ae114729bf62a89518057 /math/bevington/determ.f
downloadiraf-osx-40e5a5811c6ffce9b0974e93cdd927cbcf60c157.tar.gz
Repatch (from linux) of OSX IRAF
Diffstat (limited to 'math/bevington/determ.f')
-rw-r--r--math/bevington/determ.f54
1 files changed, 54 insertions, 0 deletions
diff --git a/math/bevington/determ.f b/math/bevington/determ.f
new file mode 100644
index 00000000..4bdc2778
--- /dev/null
+++ b/math/bevington/determ.f
@@ -0,0 +1,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