Annotation of capa/capa51/pProj/linpack.c, revision 1.1
1.1 ! albertel 1: #include <math.h>
! 2: float sdot(long n,float *sx,long incx,float *sy,long incy)
! 3: {
! 4: static long i,ix,iy,m,mp1;
! 5: static float sdot,stemp;
! 6: stemp = sdot = 0.0;
! 7: if(n <= 0) return sdot;
! 8: if(incx == 1 && incy == 1) goto S20;
! 9: ix = iy = 1;
! 10: if(incx < 0) ix = (-n+1)*incx+1;
! 11: if(incy < 0) iy = (-n+1)*incy+1;
! 12: for(i=1; i<=n; i++) {
! 13: stemp += (*(sx+ix-1)**(sy+iy-1));
! 14: ix += incx;
! 15: iy += incy;
! 16: }
! 17: sdot = stemp;
! 18: return sdot;
! 19: S20:
! 20: m = n % 5L;
! 21: if(m == 0) goto S40;
! 22: for(i=0; i<m; i++) stemp += (*(sx+i)**(sy+i));
! 23: if(n < 5) goto S60;
! 24: S40:
! 25: mp1 = m+1;
! 26: for(i=mp1; i<=n; i+=5) stemp += (*(sx+i-1)**(sy+i-1)+*(sx+i)**(sy+i)+*(sx+i
! 27: +1)**(sy+i+1)+*(sx+i+2)**(sy+i+2)+*(sx+i+3)**(sy+i+3));
! 28: S60:
! 29: sdot = stemp;
! 30: return sdot;
! 31: }
! 32: void spofa(float *a,long lda,long n,long *info)
! 33: /*
! 34: SPOFA FACTORS A REAL SYMMETRIC POSITIVE DEFINITE MATRIX.
! 35: SPOFA IS USUALLY CALLED BY SPOCO, BUT IT CAN BE CALLED
! 36: DIRECTLY WITH A SAVING IN TIME IF RCOND IS NOT NEEDED.
! 37: (TIME FOR SPOCO) = (1 + 18/N)*(TIME FOR SPOFA) .
! 38: ON ENTRY
! 39: A REAL(LDA, N)
! 40: THE SYMMETRIC MATRIX TO BE FACTORED. ONLY THE
! 41: DIAGONAL AND UPPER TRIANGLE ARE USED.
! 42: LDA INTEGER
! 43: THE LEADING DIMENSION OF THE ARRAY A .
! 44: N INTEGER
! 45: THE ORDER OF THE MATRIX A .
! 46: ON RETURN
! 47: A AN UPPER TRIANGULAR MATRIX R SO THAT A = TRANS(R)*R
! 48: WHERE TRANS(R) IS THE TRANSPOSE.
! 49: THE STRICT LOWER TRIANGLE IS UNALTERED.
! 50: IF INFO .NE. 0 , THE FACTORIZATION IS NOT COMPLETE.
! 51: INFO INTEGER
! 52: = 0 FOR NORMAL RETURN.
! 53: = K SIGNALS AN ERROR CONDITION. THE LEADING MINOR
! 54: OF ORDER K IS NOT POSITIVE DEFINITE.
! 55: LINPACK. THIS VERSION DATED 08/14/78 .
! 56: CLEVE MOLER, UNIVERSITY OF NEW MEXICO, ARGONNE NATIONAL LAB.
! 57: SUBROUTINES AND FUNCTIONS
! 58: BLAS SDOT
! 59: FORTRAN SQRT
! 60: INTERNAL VARIABLES
! 61: */
! 62: {
! 63: extern float sdot(long n,float *sx,long incx,float *sy,long incy);
! 64: static long j,jm1,k;
! 65: static float t,s;
! 66: /*
! 67: BEGIN BLOCK WITH ...EXITS TO 40
! 68: */
! 69: for(j=1; j<=n; j++) {
! 70: *info = j;
! 71: s = 0.0;
! 72: jm1 = j-1;
! 73: if(jm1 < 1) goto S20;
! 74: for(k=0; k<jm1; k++) {
! 75: t = *(a+k+(j-1)*lda)-sdot(k,(a+k*lda),1L,(a+(j-1)*lda),1L);
! 76: t /= *(a+k+k*lda);
! 77: *(a+k+(j-1)*lda) = t;
! 78: s += (t*t);
! 79: }
! 80: S20:
! 81: s = *(a+j-1+(j-1)*lda)-s;
! 82: /*
! 83: ......EXIT
! 84: */
! 85: if(s <= 0.0) goto S40;
! 86: *(a+j-1+(j-1)*lda) = sqrt(s);
! 87: }
! 88: *info = 0;
! 89: S40:
! 90: return;
! 91: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>