From c77c83f1e442e5fff408d883b7aac5043ba512a9 Mon Sep 17 00:00:00 2001 From: Alberto Ruiz Date: Wed, 27 May 2015 10:47:02 +0200 Subject: omat, AT, remap --- packages/base/src/C/lapack-aux.c | 28 ++++++++++++++++++++++++++++ packages/base/src/C/lapack-aux.h | 18 ++++++++++++++++++ 2 files changed, 46 insertions(+) (limited to 'packages/base/src/C') diff --git a/packages/base/src/C/lapack-aux.c b/packages/base/src/C/lapack-aux.c index 77381cc..a977d5f 100644 --- a/packages/base/src/C/lapack-aux.c +++ b/packages/base/src/C/lapack-aux.c @@ -1670,3 +1670,31 @@ int extractI(int modei, int modej, int tm, KIVEC(i), KIVEC(j), KIMAT(m), IMAT(r) EXTRACT_IMP } +//////////////////////// remap ///////////////////////////////// + +#define REMAP_IMP \ + REQUIRES(ir==jr && ic==jc && ir==rr && ic==rc ,BAD_SIZE); \ + { TRAV(r,a,b) { AT(r,a,b) = AT(m,AT(i,a,b),AT(j,a,b)); } \ + } \ + OK + +int remapD(KOIMAT(i), KOIMAT(j), KODMAT(m), ODMAT(r)) { + REMAP_IMP +} + +int remapF(KOIMAT(i), KOIMAT(j), KOFMAT(m), OFMAT(r)) { + REMAP_IMP +} + +int remapI(KOIMAT(i), KOIMAT(j), KOIMAT(m), OIMAT(r)) { + REMAP_IMP +} + +int remapC(KOIMAT(i), KOIMAT(j), KOCMAT(m), OCMAT(r)) { + REMAP_IMP +} + +int remapQ(KOIMAT(i), KOIMAT(j), KOQMAT(m), OQMAT(r)) { + REMAP_IMP +} + diff --git a/packages/base/src/C/lapack-aux.h b/packages/base/src/C/lapack-aux.h index b49c7c9..6ffbef1 100644 --- a/packages/base/src/C/lapack-aux.h +++ b/packages/base/src/C/lapack-aux.h @@ -42,6 +42,7 @@ typedef short ftnlen; #define QVEC(A) int A##n, complex*A##p #define CVEC(A) int A##n, doublecomplex*A##p #define PVEC(A) int A##n, void* A##p, int A##s + #define IMAT(A) int A##r, int A##c, int* A##p #define FMAT(A) int A##r, int A##c, float* A##p #define DMAT(A) int A##r, int A##c, double* A##p @@ -49,12 +50,20 @@ typedef short ftnlen; #define CMAT(A) int A##r, int A##c, doublecomplex* A##p #define PMAT(A) int A##r, int A##c, void* A##p, int A##s +#define OIMAT(A) int A##r, int A##c, int A##Xr, int A##Xc, int* A##p +#define OFMAT(A) int A##r, int A##c, int A##Xr, int A##Xc, float* A##p +#define ODMAT(A) int A##r, int A##c, int A##Xr, int A##Xc, double* A##p +#define OQMAT(A) int A##r, int A##c, int A##Xr, int A##Xc, complex* A##p +#define OCMAT(A) int A##r, int A##c, int A##Xr, int A##Xc, doublecomplex* A##p + + #define KIVEC(A) int A##n, const int*A##p #define KFVEC(A) int A##n, const float*A##p #define KDVEC(A) int A##n, const double*A##p #define KQVEC(A) int A##n, const complex*A##p #define KCVEC(A) int A##n, const doublecomplex*A##p #define KPVEC(A) int A##n, const void* A##p, int A##s + #define KIMAT(A) int A##r, int A##c, const int* A##p #define KFMAT(A) int A##r, int A##c, const float* A##p #define KDMAT(A) int A##r, int A##c, const double* A##p @@ -62,3 +71,12 @@ typedef short ftnlen; #define KCMAT(A) int A##r, int A##c, const doublecomplex* A##p #define KPMAT(A) int A##r, int A##c, const void* A##p, int A##s +#define KOIMAT(A) int A##r, int A##c, int A##Xr, int A##Xc, const int* A##p +#define KOFMAT(A) int A##r, int A##c, int A##Xr, int A##Xc, const float* A##p +#define KODMAT(A) int A##r, int A##c, int A##Xr, int A##Xc, const double* A##p +#define KOQMAT(A) int A##r, int A##c, int A##Xr, int A##Xc, const complex* A##p +#define KOCMAT(A) int A##r, int A##c, int A##Xr, int A##Xc, const doublecomplex* A##p + +#define AT(m,i,j) (m##p[(i)*m##Xr + (j)*m##Xc]) +#define TRAV(m,i,j) int i,j; for (i=0;i