00001 #include "numchol.h"
00002 #include <stdio.h>
00003
00004 int ExitProc(int,char *);
00005
00006 void iZero(int n,
00007 int *x,
00008 int *s)
00009 {
00010 int i;
00011
00012 if (s) {
00013 for(i=0; i<n; ++i)
00014 x[s[i]]=0;
00015 }
00016 else
00017 memset(x,0,n*sizeof(int));
00018 }
00019
00020 void iSet(int n,
00021 int a,
00022 int *x,
00023 int *id)
00024 {
00025 int i;
00026
00027 if (!id)
00028 for(i=0; i<n; ++i)
00029 x[i]=a;
00030 else
00031 for(i=0; i<n; ++i)
00032 x[id[i]]=a;
00033 }
00034
00035 void iSwap(int i1,
00036 int i2,
00037 int *v)
00038 {
00039 int temp;
00040
00041 if (i1<0||i2<0)
00042 ExitProc(SysError,"index error");
00043 temp = v[i1];
00044 v[i1] = v[i2];
00045 v[i2] = temp;
00046 }
00047
00048 void iCopy(int n,
00049 int *s,
00050 int *d)
00051 {
00052 memcpy(d,s,n*sizeof(int));
00053 }
00054
00055 int iSum(int n,
00056 int *x)
00057 {
00058 int i,sum=0;
00059
00060 for (i=0; i<n; i++)
00061 sum+=x[i];
00062
00063 return sum;
00064 }
00065
00066 void dCopy(int n,
00067 double *s,
00068 double *d)
00069 {
00070 if (n) memcpy(d,s,n*sizeof(double));
00071 }
00072
00073 void dCat(int n,
00074 int *ix,
00075 double *s,
00076 double *d)
00077 {
00078 int i;
00079
00080 for (i=0; i<n; i++) {
00081 d[i]=s[ix[i]];
00082 s[ix[i]]=0.0;
00083 }
00084 }
00085
00086 double dDot(double *x,
00087 double *y,
00088 int n)
00089 {
00090 int i;
00091 double r;
00092
00093 r=0.0;
00094 for (i=0; i<n; i++)
00095 r+=x[i]*y[i];
00096
00097 return r;
00098 }
00099
00100 void plusXs(int n,
00101 int *x,
00102 int *s)
00103 {
00104 int i;
00105
00106 if (!s) {
00107 for (i=0; i<n; i++)
00108 x[i]++;
00109 }
00110 else {
00111 for (i=0; i<n; i++)
00112 x[s[i]]++;
00113 }
00114 }