1 #if !defined(__DSDP_DATAMATRIX_H) 2 #define __DSDP_DATAMATRIX_H 3 4 /*! 5 \file dsdpdatamat_impl.h 6 \brief Structure of function pointers that each SDP data matrix type 7 (sparse, dense, constant, identity, ...) must implement. 8 */ 9 10 /* DSDP Data Matrices have particular operations, and several implementations */ 11 /*! 12 struct DSDPDataMat_Ops 13 \brief Table of function pointers that operate on the data matrix. 14 */ 15 struct DSDPDataMat_Ops{ 16 int id; 17 int (*mataddallmultiple)(void*,double,double[],int,int); 18 int (*matdot)(void*, double[], int, int, double *); 19 int (*matgetrank)(void*,int*,int); 20 int (*matgeteig)(void*,int,double*,double[],int,int[],int*); 21 int (*matvecvec)(void*, double[], int,double*); 22 int (*mataddrowmultiple)(void*,int,double,double[],int); /* NEEDED? */ 23 int (*matmultiply)(void*,double[],double[],int); 24 int (*matfactor1)(void*); 25 int (*matfactor2)(void*,double[],int,double[],int,double[],int,int[],int); 26 int (*matfnorm2)(void*,int,double*); 27 int (*matrownz)(void*,int,int[],int*,int); 28 int (*matnnz)(void*,int*,int); 29 int (*mattest)(void*); 30 int (*matdestroy)(void*); 31 int (*matview)(void*); 32 const char *matname; 33 }; 34 35 #ifdef __cplusplus 36 extern "C" { 37 #endif 38 extern int DSDPGetEigs(double[],int,double[],int,long int[],int, 39 double[],int,double[],int,int[],int); 40 extern int DSDPGetEigs2(double[],int,double[],int,long int[],int, 41 double[],int,double[],int,int[],int); 42 43 int DSDPDataMatOpsInitialize(struct DSDPDataMat_Ops*); 44 45 #ifdef __cplusplus 46 } 47 #endif 48 49 /* 50 #include "dsdpdatamat.h" 51 */ 52 53 #endif 54 55 56