FUNCTION DDETRM(ARRAY,NORDER) C C FUNCTION TO FIND DETERMINANT OF DOUBLE PRECISION ARRAY(NORDER,NORDER) C REAL*8 ARRAY(NORDER,NORDER),SAVE,DETSAV DETSAV = 1. !INITIAL VALUE DO 50 K = 1,NORDER !DO ALL ROWS SAVE = 1.E-30 ISAVE = 0 DO 23 J = K,NORDER !FIND BIGGEST ELEMENT IN ROW IF(ABS(ARRAY(K,J)) .LT. SAVE)GO TO 23 SAVE = ABS(ARRAY(K,J)) ISAVE = J !COLUMN NUMBER OF BIGGEST 23 CONTINUE IF(ISAVE .GT. 0)GO TO 31 !AOK IF FOUND BIGGEST DDETRM = 0. !NO LARGE ELEMENT, DETERMINANT=0 RETURN !NULL DETERMINANT 31 IF(ISAVE .EQ. K)GO TO 41 !IF ROW# = COLUMN DO NOT SWAP CALL SWAP(ARRAY(1,ISAVE),ARRAY(1,K),NORDER*4) DETSAV = - DETSAV 41 DETSAV = DETSAV * ARRAY(K,K) IF(K .GE. NORDER) GO TO 50 KI = K KI = K + 1 DO 46 I = KI,NORDER !DO ELEMENTARY ROW MANIPULATION DO 46 J = KI,NORDER !AND COLUMN MANIPULATION C PRODUCE ALL ZERO ELEMENTS IN ROW + COLUMN ON DIAGONAL 46 ARRAY(I,J) = ARRAY(I,J) - ARRAY(I,K)*ARRAY(K,J)/ARRAY(K,K) 50 CONTINUE DDETRM = DETSAV RETURN !ANSWER IS NON ZERO END