4 #if !defined(TYPES_H) || !defined(NAME_H)
5 #warning "tensor.h" requires "types.h" and "name.h"
10 # define tensor_dot(a,b,n) cblas_ddot((int)(n),a,1,b,1)
11 # define tensor_mxv(y,ny,A,x,nx) \
12 cblas_dgemv(CblasColMajor,CblasNoTrans,(int)ny,(int)nx, \
13 1.0,A,(int)ny,x,1,0.0,y,1)
14 # define tensor_mtxv(y,ny,A,x,nx) \
15 cblas_dgemv(CblasColMajor,CblasTrans,(int)nx,(int)ny, \
16 1.0,A,(int)nx,x,1,0.0,y,1)
17 # define tensor_mxm(C,nc,A,na,B,nb) \
18 cblas_dgemm(CblasColMajor,CblasNoTrans,CblasNoTrans, \
19 (int)nc,(int)nb,(int)na,1.0, \
20 A,(int)nc,B,(int)na,0.0,C,(int)nc)
21 # define tensor_mtxm(C,nc,A,na,B,nb) \
22 cblas_dgemm(CblasColMajor,CblasTrans,CblasNoTrans, \
23 (int)nc,(int)nb,(int)na,1.0, \
24 A,(int)na,B,(int)na,0.0,C,(int)nc)
26 # define tensor_dot PREFIXED_NAME(tensor_dot )
27 # define tensor_mtxm PREFIXED_NAME(tensor_mtxm)
32 const double *
A,
uint na,
const double *
B,
uint nb);
33 # if defined(USE_NAIVE_BLAS)
34 # define tensor_mxv PREFIXED_NAME(tensor_mxv )
35 # define tensor_mtxv PREFIXED_NAME(tensor_mtxv)
36 # define tensor_mxm PREFIXED_NAME(tensor_mxm )
45 const double *
A,
uint na,
const double *
B,
uint nb);
47 # define nek_mxm FORTRAN_UNPREFIXED(mxm,MXM)
50 const double *
B,
const uint *nb,
51 double *C,
const uint *nc);
54 const double *
A,
uint na,
const double *
B,
uint nb)
59 const double *
A,
const double *
x,
uint nx)
64 const double *
A,
const double *
x,
uint nx)
89 const double *u,
double *
work)
99 const double *u,
double *
work)
101 double *work2 = work+nt;
125 const double *wtr,
uint nr,
134 const double *wtr,
uint nr,
135 const double *wts,
uint ns,
136 const double *u,
double *
work)
146 const double *wtr,
uint nr,
147 const double *wts,
uint ns,
148 const double *wtt,
uint nt,
149 const double *u,
double *
work)
152 double *a =
work, *b = work+2*nrs, *c=b+2*
nr;
171 const double *u,
double *
work)
186 const double *Jtt,
uint nt,
uint mt,
187 const double *u,
double *
work)
189 const uint nrs=nr*
ns, mst=ms*mt, nrms=nr*ms;
191 double *work2 = work+nr*mst;
192 double *
p;
const double *q;
194 for(k=0,p=work2,q=work;k<mt;++k,p+=nrs,q+=nrms)
static double tensor_ig2(double g[2], const double *wtr, uint nr, const double *wts, uint ns, const double *u, double *work)
static double Jr[NR *TNR]
static double tensor_i2(const double *Jr, uint nr, const double *Js, uint ns, const double *u, double *work)
static const unsigned mr[D]
static double tensor_ig1(double g[1], const double *wtr, uint nr, const double *u)
static void tensor_mxv(double *y, uint ny, const double *A, const double *x, uint nx)
static void tensor_mtxv(double *y, uint ny, const double *A, const double *x, uint nx)
static void tensor_mxm(double *C, uint nc, const double *A, uint na, const double *B, uint nb)
static void tensor_2t(double *out, const double *Jrt, uint nr, uint mr, const double *Jst, uint ns, uint ms, const double *u, double *work)
static double tensor_i1(const double *Jr, uint nr, const double *u)
static double tensor_ig3(double g[3], const double *wtr, uint nr, const double *wts, uint ns, const double *wtt, uint nt, const double *u, double *work)
static double Js[NS *TNS]
static double tensor_i3(const double *Jr, uint nr, const double *Js, uint ns, const double *Jt, uint nt, const double *u, double *work)
static const unsigned nr[3]
static void tensor_3t(double *out, const double *Jrt, uint nr, uint mr, const double *Jst, uint ns, uint ms, const double *Jtt, uint nt, uint mt, const double *u, double *work)
static double work[TNR *NS]
static double y[NR *NS *NT *N]
static double Jt[NT *TNT]