cblas.h 2 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
/* CLAPACK 3.0 BLAS wrapper macros and functions
 * Feb 5, 2000
 */

#ifndef __CBLAS_H
#define __CBLAS_H

#include "f2c.h"

#if defined _MSC_VER && _MSC_VER >= 1400
#pragma warning(disable: 4244 4554)
#endif

#ifdef __cplusplus
extern "C" {
#endif

static __inline double r_lg10(real *x)
{
    return 0.43429448190325182765*log(*x);
}

static __inline double d_lg10(doublereal *x)
{
    return 0.43429448190325182765*log(*x);
}

static __inline double d_sign(doublereal *a, doublereal *b)
{
    double x = fabs(*a);
    return *b >= 0 ? x : -x;
}

static __inline double r_sign(real *a, real *b)
{
    double x = fabs((double)*a);
    return *b >= 0 ? x : -x;
}

40 41 42 43 44 45 46
extern const unsigned char lapack_toupper_tab[];
#define lapack_toupper(c) ((char)lapack_toupper_tab[(unsigned char)(c)])

extern const unsigned char lapack_lamch_tab[];
extern const doublereal lapack_dlamch_tab[];
extern const doublereal lapack_slamch_tab[];
    
47 48
static __inline logical lsame_(char *ca, char *cb)
{
49
    return lapack_toupper(ca[0]) == lapack_toupper(cb[0]);
50 51
}

52 53 54 55 56 57 58 59 60 61
static __inline doublereal dlamch_(char* cmach)
{
    return lapack_dlamch_tab[lapack_lamch_tab[(unsigned char)cmach[0]]];
}
    
static __inline doublereal slamch_(char* cmach)
{
    return lapack_slamch_tab[lapack_lamch_tab[(unsigned char)cmach[0]]];
}    
    
62 63 64 65 66 67 68 69 70 71
static __inline integer i_nint(real *x)
{
    return (integer)(*x >= 0 ? floor(*x + .5) : -floor(.5 - *x));
}

static __inline void exit_(integer *rc)
{
    exit(*rc);
}

72 73 74 75
integer pow_ii(integer *ap, integer *bp);
double pow_ri(real *ap, integer *bp);
double pow_di(doublereal *ap, integer *bp);

76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
static __inline double pow_dd(doublereal *ap, doublereal *bp)
{
    return pow(*ap, *bp);
}

logical slaisnan_(real *in1, real *in2);
logical dlaisnan_(doublereal *din1, doublereal *din2);

static __inline logical sisnan_(real *in1)
{
    return slaisnan_(in1, in1);
}

static __inline logical disnan_(doublereal *din1)
{
    return dlaisnan_(din1, din1);
}

char *F77_aloc(ftnlen, char*);

#ifdef __cplusplus
}
#endif

#endif /* __BLASWRAP_H */