DSDP
sdpdvct.c
1 #include "numchol.h"
2 #include <stdio.h>
3 
4 int ExitProc(int,char *);
5 
6 void 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 
20 void 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 
35 void 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 
48 void iCopy(int n,
49  int *s,
50  int *d)
51 {
52  memcpy(d,s,n*sizeof(int));
53 } /* iCopy */
54 
55 int 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 
66 void dCopy(int n,
67  double *s,
68  double *d)
69 {
70  if (n) memcpy(d,s,n*sizeof(double));
71 } /* dCopy */
72 
73 void 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 
86 double 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 
100 void 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 */