DSDP
sdpdvct.c
1#include "numchol.h"
2#include <stdio.h>
3
4int ExitProc(int,char *);
5
6void iZero(int n,
7 int *x,
8 int *s)
9{
10 int i;
11
12 if (s) {
13 for(i=0; i<n; ++i)
14 x[s[i]]=0;
15 }
16 else
17 memset(x,0,n*sizeof(int));
18} /* iZero */
19
20void iSet(int n,
21 int a,
22 int *x,
23 int *id)
24{
25 int i;
26
27 if (!id)
28 for(i=0; i<n; ++i)
29 x[i]=a;
30 else
31 for(i=0; i<n; ++i)
32 x[id[i]]=a;
33} /* iSet */
34
35void iSwap(int i1,
36 int i2,
37 int *v)
38{
39 int temp;
40
41 if (i1<0||i2<0)
42 ExitProc(SysError,"index error");
43 temp = v[i1];
44 v[i1] = v[i2];
45 v[i2] = temp;
46} /* iSwap */
47
48void iCopy(int n,
49 int *s,
50 int *d)
51{
52 memcpy(d,s,n*sizeof(int));
53} /* iCopy */
54
55int iSum(int n,
56 int *x)
57{
58 int i,sum=0;
59
60 for (i=0; i<n; i++)
61 sum+=x[i];
62
63 return sum;
64} /* iSum */
65
66void dCopy(int n,
67 double *s,
68 double *d)
69{
70 if (n) memcpy(d,s,n*sizeof(double));
71} /* dCopy */
72
73void dCat(int n,
74 int *ix,
75 double *s,
76 double *d)
77{
78 int i;
79
80 for (i=0; i<n; i++) {
81 d[i]=s[ix[i]];
82 s[ix[i]]=0.0;
83 }
84} /* dCat */
85
86double dDot(double *x,
87 double *y,
88 int n)
89{
90 int i;
91 double r;
92
93 r=0.0;
94 for (i=0; i<n; i++)
95 r+=x[i]*y[i];
96
97 return r;
98}/* dDot */
99
100void plusXs(int n,
101 int *x,
102 int *s)
103{
104 int i;
105
106 if (!s) {
107 for (i=0; i<n; i++)
108 x[i]++;
109 }
110 else {
111 for (i=0; i<n; i++)
112 x[s[i]]++;
113 }
114} /* plusXs */