00001 #if !defined(__DSDP_VECTORS_H)
00002 #define __DSDP_VECTORS_H
00003
00004 #include <math.h>
00009
00010
00020 struct _P_DSDPVec{
00021 int dim;
00022 double *val;
00023 };
00024
00025 typedef struct _P_DSDPVec DSDPVec;
00026
00027 #define DSDPVecGetArray(a,b) 0;{ *(b)=((a).val); }
00028 #define DSDPVecRestoreArray(a,b) 0;{ *(b)=0; }
00029 #define DSDPVecGetSize(a,b) 0;{ *(b)=((a).dim); }
00030 #define DSDPVecAddElement(a,b,c) 0;{ if (c){((a).val[b])+=(c);} }
00031 #define DSDPVecSetElement(a,b,c) 0;{ {((a).val[b])=(c); } }
00032 #define DSDPVecGetElement(a,b,c) 0;{ *(c)=((a).val[b]); }
00033 #define DSDPVecSetR(a,b) 0;{ {((a).val[(a).dim-1])=(b); } }
00034 #define DSDPVecAddR(a,b) 0;{ if(b){((a).val[(a).dim-1])+=(b); } }
00035 #define DSDPVecGetR(a,b) 0;{ *(b)=((a).val[(a).dim-1]); }
00036 #define DSDPVecSetC(a,b) 0;{ {((a).val[0])=(b); } }
00037 #define DSDPVecAddC(a,b) 0;{ if(b){((a).val[0])+=(b); } }
00038 #define DSDPVecGetC(a,b) 0;{ *(b)=((a).val[0]); }
00039 #define DSDPVecCreateWArray(a,b,c) 0;{ (*(a)).val=(b); (*(a)).dim=(c);}
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049 extern int DSDPVecCreateSeq(int,DSDPVec *);
00050 extern int DSDPVecDuplicate(DSDPVec,DSDPVec *);
00051 extern int DSDPVecSet(double, DSDPVec );
00052 extern int DSDPVecISet(int*,DSDPVec);
00053 extern int DSDPVecZero(DSDPVec );
00054 extern int DSDPVecNormalize(DSDPVec );
00055 extern int DSDPVecSetValue(DSDPVec,int,double);
00056 extern int DSDPVecSetBasis(DSDPVec,int);
00057 extern int DSDPVecCopy( DSDPVec, DSDPVec);
00058 extern int DSDPVecScale(double, DSDPVec);
00059 extern int DSDPVecScaleCopy(DSDPVec, double, DSDPVec);
00060 extern int DSDPVecAXPY(double, DSDPVec, DSDPVec);
00061 extern int DSDPVecAYPX(double, DSDPVec, DSDPVec);
00062 extern int DSDPVecWAXPY(DSDPVec,double,DSDPVec,DSDPVec);
00063 extern int DSDPVecWAXPBY(DSDPVec,double,DSDPVec,double,DSDPVec);
00064 extern int DSDPVecPointwiseMin( DSDPVec, DSDPVec, DSDPVec);
00065 extern int DSDPVecPointwiseMax( DSDPVec, DSDPVec, DSDPVec);
00066 extern int DSDPVecPointwiseMult( DSDPVec, DSDPVec, DSDPVec);
00067 extern int DSDPVecPointwiseDivide( DSDPVec, DSDPVec, DSDPVec);
00068 extern int DSDPVecReciprocalSqrt(DSDPVec);
00069 extern int DSDPVecDot(DSDPVec, DSDPVec, double *);
00070 extern int DSDPVecSum( DSDPVec, double *);
00071 extern int DSDPVecNorm1( DSDPVec, double *);
00072 extern int DSDPVecNorm2( DSDPVec, double *);
00073 extern int DSDPVecNorm22( DSDPVec, double *);
00074 extern int DSDPVecNormInfinity( DSDPVec, double *);
00075 extern int DSDPVecAbsoluteValue( DSDPVec);
00076 extern int DSDPVecShift(double, DSDPVec);
00077 extern int DSDPVecView( DSDPVec);
00078 extern int DSDPVecDestroy(DSDPVec*);
00079
00080
00081 #endif
00082