/*===========================*/ /* gccSCAone.c */ /*===========================*/ #include #include #include #include #include #define pi M_PI #define NN 21 struct DATA{ double SF; double sumR; double sumS; double aa; double bb; double rr; int nd; double xsta; double ylsta; double yusta; double xend; double ylend; double yuend; }; int main_part(char fnameR[50],char fnameF[50]); void CALC_ONE(double gamma,double cc,double phi,double aa,double bb,double rr, double dx,double ylmin,struct DATA *cur,int np,double xp[NN],double yp[NN]); double COYL(double x,double aa,double bb,double rr); double COYU(double x,int np,double xp[NN],double yp[NN]); void CALC_RS(double x1,double x2,double yl1,double yl2,double yu1,double yu2, double gamma,double cc,double phi,double *R,double *S); void GPL1(char fnameF[50],double gamma, double cc,double phi,double dx, struct DATA cur,int np,double xp[NN],double yp[NN]); /*------------------------------------------------------------------------------*/ int main(int argc, char* argv[]) { char fnameR[50]; /* Input csv file */ char fnameF[50]; /* Output epsfile */ strcpy(fnameR,argv[1]); strcpy(fnameF,argv[2]); main_part(fnameR,fnameF); return 0; } /*------------------------------------------------------------------------------*/ int main_part(char fnameR[50],char fnameF[50]) { /*Circle Slip Analysis*/ FILE *fin; char dat[256]=""; int np,i,nd,ii,jj; double gamma,cc,phi; double xp[NN],yp[NN]; double dx,ylmin; double x1,x2,yl1,yl2,yu1,yu2; double aaa,bbb,rrr; struct DATA cur; fin=fopen(fnameR,"r"); fgets(dat,sizeof dat,fin); gamma=atof(strtok(dat,",")); /* Unit weight of soil */ cc =atof(strtok(NULL,",")); /* Cohesion */ phi =atof(strtok(NULL,",")); /* Friction angle */ fgets(dat,sizeof dat,fin); dx =atof(strtok(dat,",")); /* Pitch of strip */ aaa =atof(strtok(NULL,",")); /* x-coordinate of circle center */ bbb =atof(strtok(NULL,",")); /* y-coordinate of circle center */ rrr =atof(strtok(NULL,",")); /* Radius of circle */ ylmin=atof(strtok(NULL,",")); /* Minimum elevation of slip circle */ fgets(dat,sizeof dat,fin); np=atoi(strtok(dat,",")); /* Number of slope point */ for(i=1;i<=np;i++){ fgets(dat,sizeof dat,fin); xp[i]=atof(strtok(dat,",")); /* x-coordinate of slope */ yp[i]=atof(strtok(NULL,","));/* y-coordinate of slope */ } fclose(fin); printf("%g %g %g\n",gamma,cc,phi); printf("%g %g %g %g %g\n",dx,aaa,bbb,rrr,ylmin); printf("%d\n",np); for(i=1;i<=np;i++){ printf("%g %g\n",xp[i],yp[i]); } CALC_ONE(gamma,cc,phi,aaa,bbb,rrr,dx,ylmin,&cur,np,xp,yp); GPL1(fnameF,gamma,cc,phi,dx,cur,np,xp,yp); } /*---------------------------------------------------------------------------*/ void CALC_ONE(double gamma,double cc,double phi,double aa,double bb,double rr, double dx,double ylmin,struct DATA *cur,int np,double xp[NN],double yp[NN]) { int i; double x1,x2,yl1,yl2,yu1,yu2; double SF,R,S,sumR,sumS; int nd; double xsta,ylsta,yusta,xend,ylend,yuend; /* start of calculation */ SF=1e6; sumR=0.0; sumS=0.0; i=0; x1=aa; x2=x1+dx; do{ yl1=COYL(x1,aa,bb,rr); yl2=COYL(x2,aa,bb,rr); yu1=COYU(x1,np,xp,yp); yu2=COYU(x2,np,xp,yp); R=0.0; S=0.0; if(yl2<0.0)break; if(ylmin<=yl1){ if(yl1<=yu1&&yl2<=yu2){ i=i+1; if(i==1){ xsta=x1; ylsta=yl1; yusta=yu1; } if(2.0*dxSF =SF; cur->sumR =sumR; cur->sumS =sumS; cur->aa =aa; cur->bb =bb; cur->rr =rr; cur->nd =nd; cur->xsta =xsta; cur->ylsta=ylsta; cur->yusta=yusta; cur->xend =xend; cur->ylend=ylend; cur->yuend=yuend; } /*---------------------------------------------------------------------------*/ double COYL(double x,double aa,double bb,double rr) { double y,d; y=-1.0; d=rr*rr-(x-aa)*(x-aa); if(0.0