SUBROUTINE SPIN(Q,N,MM,DET,IDEXP) C C THIS IS THE SOURCE OF THE VECTORIZED VERSION OF SPIN C *** MAY 1988 **** BY MILDA MARKAUSKAS C C THE UNVECTORIZED SOURCE FOR THIS SUBROUTINE IS AVAILABLE C IN A.M12129.SELIBSRC(SPIN) C C THIS PROGRAM CALLS DGEICD, AN ESSL SUBROUTINE C C *********************************************************** C SUBROUTINE SPIN IS A MATRIX INVERSION ROUTINE C THE MATRIX INVERTED IS THE UPPER C N BY N PORTION OF THE MATRIX Q WHICH IS DIMENSIONED MM BY MM C IN THE CALLING ROUTINE. C C INPUT: C Q - THE MATRIX DIMENSIONED MM BY MM WHICH CONTAINS THE C MATRIX TO BE INVERTED. C C N - THE DIMENSION OF THE ACTUAL PART( UPPER LEFT CORNER) C OF Q WHICH IS TO BE INVERTED. ( N MAY BE EQUAL BUT MUST C NOT BE LARGER THAN MM) . C MM- DIMENSIONED SIZE OF Q IN THE CALLING ROUTINE. C C C OUTPUT: C C Q - THE UPPER LEFT N BY N PORTION CONTAINS THE INVERSE OF C THE INPUT UPPER LEFT N BY N PORTION. C C DET - THE NON-EXPONENT PORTION OF THE DETERMINANT OF THE C INPUT N BY N (UPPER LEFT PORTION OF Q) MATRIX. SEE C IDEXP BELOW. C C IDEXP - THE EXPONENT (OF 10) PART OF THE DETERMINANT DESCRIBED C UNDER DET ABOVE. THUS THE DETERMINANT IS RETURNED IN C TWO PARTS CORRESPONDING TO C DETERMINANT = DET * 10 ** IDEXP . C THIS IS DONE TO AVOID UNDER OR OVERFLOW IN THE C COMPUTATION OF THE DETERMINANT. TO PRINT THE DETERM- C INANT THE USER SHOULD PRINT BOTH NUMBERS AS FOLLOWS; C (FOR EXAMPLE) C PRINT 10,DET,IDEXP C 10 FORMAT(' ','DETERMINANT= ',F7.4,'D',I4) C C R.R. STEEVES C SEPT., 1979 C C REAL*8 Q(MM,MM),DET,RCOND,DETER(2),AUX(33000) C C IOPT=2 MEANS THAT THE INVERSE AND DETERMINANT ARE COMPUTED C IOPT=2 C C NAUX IS THE DIMENSION OF AUX (TEMPORARY STORAGE) C NAUX = 33,000 C THIS MEANS THAT 1000 X 1000 IS THE LARGEST MATRIX C INVERTABLE WITH THIS SUBROUTINE. C NAUX=33000 C C PRINT OUT A MESSAGE IF MATRIX IS LARGER THAN 1000 X 1000 C IF(N.LE.1000) GO TO 10 WRITE(6,90) 90 FORMAT(' '/'*** CATASTROPHIC ERROR *******'/ @ ' YOU ARE TRYING TO INVERT A MATRIX THAT', @ ' HAS MORE THAN 1000 ROWS ',/ @ ' YOU MUST GO TO AN ESSL SUBROUTINE') C STOP 16 RETURN C 10 CALL DGEICD(Q,MM,N,IOPT,RCOND,DETER,AUX,NAUX) C DET =DETER(1) IDEXP=DETER(2) RETURN END