DSDP
|
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 } /* iZero */ 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 } /* iSet */ 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 } /* iSwap */ 00047 00048 void iCopy(int n, 00049 int *s, 00050 int *d) 00051 { 00052 memcpy(d,s,n*sizeof(int)); 00053 } /* iCopy */ 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 } /* iSum */ 00065 00066 void dCopy(int n, 00067 double *s, 00068 double *d) 00069 { 00070 if (n) memcpy(d,s,n*sizeof(double)); 00071 } /* dCopy */ 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 } /* dCat */ 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 }/* dDot */ 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 } /* plusXs */