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