#include #include "type_sg.h" #ifndef PI #define PI 3.14159265358979323844 #endif double* asgn(double a[3], double b[3]) { a[0]=b[0]; a[1]=b[1]; a[2]=b[2]; return(a); } double* asgn_n(double *a, double *b, int n) { int i; for(i=0; i TOL ) return(0); return(1); } double* mul_mv(double p[3], double a[3][3], double r[3]) { /* p=a*r */ int i,j; double r1[3]; for(i=0;i<3;i++) { r1[i]=0.; for(j=0;j<3;j++) r1[i]+=a[i][j]*r[j]; } p[0]=r1[0]; p[1]=r1[1]; p[2]=r1[2]; return(p); } double* mul_vm(double p[3], double a[3][3], double r[3]) { /* p=r*a */ int i,j; double r1[3]; for(i=0;i<3;i++) { r1[i]=0.; for(j=0;j<3;j++) r1[i]+=a[j][i]*r[j]; } p[0]=r1[0]; p[1]=r1[1]; p[2]=r1[2]; return(p); } /* c=a*b */ void mul_mm(double c[3][3], double a[3][3], double b[3][3]) { double d[3][3]; int i,j,k; for(i=0;i<3;i++) for(j=0;j<3;j++) for(d[i][j]=0.,k=0; k<3; k++) d[i][j]+=a[i][k]*b[k][j]; for(i=0;i<3;i++) for(j=0;j<3;j++) c[i][j]=d[i][j]; } void transp(double a[3][3],double at[3][3]) { int i,j; double b[3][3]; for(i=0; i<3; i++) for(j=0; j<3; j++) b[i][j]=a[j][i]; for(i=0; i<3; i++) for(j=0; j<3; j++) at[i][j]=b[i][j]; /* double t; t=a[0][1]; a[0][1]=a[1][0]; a[1][0]=t; t=a[0][2]; a[0][2]=a[2][0]; a[2][0]=t; t=a[1][2]; a[1][2]=a[2][1]; a[2][1]=t;*/ return; } int norm_vec(double r[3]) /* set length of vec=1 */ { double d; d=sqrt(r[0]*r[0] + r[1]*r[1] + r[2]*r[2]); if( d < TOL ) return(0); r[0]/=d; r[1]/=d; r[2]/=d; return(1); } double dvec(double r[3]) { return(sqrt(r[0]*r[0] + r[1]*r[1] + r[2]*r[2])); } double ddvec(double r1[3], double r2[3]) { return( sqrt( (r1[0]-r2[0])*(r1[0]-r2[0]) + (r1[1]-r2[1])*(r1[1]-r2[1]) + (r1[2]-r2[2])*(r1[2]-r2[2])) ); } double dvec_n(double r[], int n) { int i; double s=0.; for(i=0; i a[j] ) { k=a[i]; a[i]=a[j]; a[j]=k; } } void round_to_zero( double *d, int n) { int i; for(i=0; i TOL ) { T1[0]=p[0]; T1[1]=p[1]; T1[2]=p[2]; d1=d; fl_ch=1; } else if( d TOL ) { T2[0]=p[0]; T2[1]=p[1]; T2[2]=p[2]; d2=d; fl_ch=1; } } if( !fl_ch ) return(0); } /* printf(" Error in shortest2(): shortest vectors not found!\n"); */ return(1); }