123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- /*
- * cblas_zher.c
- * The program is a C interface to zher.
- *
- * Keita Teranishi 5/20/98
- *
- */
- #include <stdio.h>
- #include <stdlib.h>
- #include "cblas.h"
- #include "cblas_f77.h"
- void cblas_zher(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
- const int N, const double alpha, const void *X, const int incX
- ,void *A, const int lda)
- {
- char UL;
- #ifdef F77_CHAR
- F77_CHAR F77_UL;
- #else
- #define F77_UL &UL
- #endif
- #ifdef F77_INT
- F77_INT F77_N=N, F77_lda=lda, F77_incX=incX;
- #else
- #define F77_N N
- #define F77_lda lda
- #define F77_incX incx
- #endif
- int n, i, tincx, incx=incX;
- double *x=(double *)X, *xx=(double *)X, *tx, *st;
- extern int CBLAS_CallFromC;
- extern int RowMajorStrg;
- RowMajorStrg = 0;
-
- CBLAS_CallFromC = 1;
- if (order == CblasColMajor)
- {
- if (Uplo == CblasLower) UL = 'L';
- else if (Uplo == CblasUpper) UL = 'U';
- else
- {
- cblas_xerbla(2, "cblas_zher","Illegal Uplo setting, %d\n",Uplo );
- CBLAS_CallFromC = 0;
- RowMajorStrg = 0;
- return;
- }
- #ifdef F77_CHAR
- F77_UL = C2F_CHAR(&UL);
- #endif
- F77_zher(F77_UL, &F77_N, &alpha, X, &F77_incX, A, &F77_lda);
- } else if (order == CblasRowMajor)
- {
- RowMajorStrg = 1;
- if (Uplo == CblasUpper) UL = 'L';
- else if (Uplo == CblasLower) UL = 'U';
- else
- {
- cblas_xerbla(2, "cblas_zher","Illegal Uplo setting, %d\n", Uplo);
- CBLAS_CallFromC = 0;
- RowMajorStrg = 0;
- return;
- }
- #ifdef F77_CHAR
- F77_UL = C2F_CHAR(&UL);
- #endif
- if (N > 0)
- {
- n = N << 1;
- x = malloc(n*sizeof(double));
- tx = x;
- if( incX > 0 ) {
- i = incX << 1 ;
- tincx = 2;
- st= x+n;
- } else {
- i = incX *(-2);
- tincx = -2;
- st = x-2;
- x +=(n-2);
- }
- do
- {
- *x = *xx;
- x[1] = -xx[1];
- x += tincx ;
- xx += i;
- }
- while (x != st);
- x=tx;
- #ifdef F77_INT
- F77_incX = 1;
- #else
- incx = 1;
- #endif
- }
- else x = (double *) X;
- F77_zher(F77_UL, &F77_N, &alpha, x, &F77_incX, A, &F77_lda);
- } else cblas_xerbla(1, "cblas_zher", "Illegal Order setting, %d\n", order);
- if(X!=x)
- free(x);
-
- CBLAS_CallFromC = 0;
- RowMajorStrg = 0;
- return;
- }
|