/*===========================*/ /* gccCPTT.c */ /*===========================*/ /* Stress analysis for Circular Pressure Tunnel */ /* using multiple cylindrical theorem */ #include #include #include #include #define Nmax 12 #define NDmax 100 char strcom[256]; /* Comment */ int nd; /* Numbers of calculation */ int IE_inp[NDmax+1]; /* 0:Inner pressure, 1:External pressure */ double PP_inp[NDmax+1]; /* Water pressure */ double TT_inp[NDmax+1]; /* Temperature change (+:increse of temperature) */ double aa_inp[NDmax+1]; /* Internal radius of pressure tunnel */ double bb_inp[NDmax+1]; /* Excavation radius */ double rr_inp[NDmax+1]; /* Model edge radius */ double cc_inp[NDmax+1]; /* Cover for reinforcement */ double ta_inp[NDmax+1]; /* Equivalent thickness of inner reinforcement */ double tb_inp[NDmax+1]; /* Equivalent thickness of outer reinforcement */ double Ec_inp[NDmax+1]; /* Elastic modulus of concrete */ double nc_inp[NDmax+1]; /* Poisson ratio of concrete */ double ac_inp[NDmax+1]; /* Thermal expansion coefficient of concrete */ double Es_inp[NDmax+1]; /* Elastic modulus of reinforcement */ double ns_inp[NDmax+1]; /* Poisson ratio of reinforcement */ double as_inp[NDmax+1]; /* Thermal expansion coefficient of reinforcement */ double Eg_inp[NDmax+1]; /* Elastic modulus of bed rock */ double ng_inp[NDmax+1]; /* Poisson ratio of bed rock */ void main_part(char fnameR[],char fnameW[]); void main_sng_pin(char fnameW[],int k); void main_dbl_pin(char fnameW[],int k); void main_sng_pex(char fnameW[],int k); void main_dbl_pex(char fnameW[],int k); void ELAS(double C1,double C2,double xx,double xa,double E,double nu,double alp,double TT, double *u,double *sigr,double *sigt); void CON(double C1,double C2,double xx,double xa,double E,double alp,double TT,double *u,double *sigr); void MATGJ(int n,double a[Nmax][Nmax+1]); /*------------------------------------------------------------------------------*/ int main(int argc,char *argv[]) { char fnameR[50]; /* Input file name */ char fnameW[50]; /* Output file name */ strcpy(fnameR,argv[1]); strcpy(fnameW,argv[2]); main_part(fnameR,fnameW); return 0; } /*------------------------------------------------------------------------------*/ void main_part(char fnameR[],char fnameW[]) { FILE *fin,*fout; char dat[1000]; char sv[20]; int i,k; /* Data input */ fin=fopen(fnameR,"r"); fgets(dat,sizeof dat,fin);strcpy(strcom,strtok(dat,",")); k=0; while(fgets(dat,sizeof dat,fin)!=NULL){ if((strstr(dat,"#"))==NULL){ IE_inp[k]=atoi(strtok(dat,",")); PP_inp[k]=atof(strtok(NULL,",")); TT_inp[k]=atof(strtok(NULL,",")); aa_inp[k]=atof(strtok(NULL,",")); bb_inp[k]=atof(strtok(NULL,",")); rr_inp[k]=atof(strtok(NULL,",")); cc_inp[k]=atof(strtok(NULL,",")); ta_inp[k]=atof(strtok(NULL,",")); tb_inp[k]=atof(strtok(NULL,",")); Ec_inp[k]=atof(strtok(NULL,",")); nc_inp[k]=atof(strtok(NULL,",")); ac_inp[k]=atof(strtok(NULL,",")); Es_inp[k]=atof(strtok(NULL,",")); ns_inp[k]=atof(strtok(NULL,",")); as_inp[k]=atof(strtok(NULL,",")); Eg_inp[k]=atof(strtok(NULL,",")); ng_inp[k]=atof(strtok(NULL,",")); k=k+1; } } fclose(fin); nd=k-1; /* Making output file */ fout=fopen(fnameW,"w"); fprintf(fout,"%s",strcom); fprintf(fout,"*Input data\n"); fprintf(fout,"k,IE,PP,TT,aa,bb,rr,cc,ta,tb,Ec,nc,ac,Es,ns,as,Eg,ng\n"); for(i=0;i<=nd;i++){ sprintf(sv,"%d",i);strcpy(dat,sv); sprintf(sv,"%d",IE_inp[i]);strcat(dat,",");strcat(dat,sv); sprintf(sv,"%.3f",PP_inp[i]);strcat(dat,",");strcat(dat,sv); sprintf(sv,"%.3f",TT_inp[i]);strcat(dat,",");strcat(dat,sv); sprintf(sv,"%.3f",aa_inp[i]);strcat(dat,",");strcat(dat,sv); sprintf(sv,"%.3f",bb_inp[i]);strcat(dat,",");strcat(dat,sv); sprintf(sv,"%.3f",rr_inp[i]);strcat(dat,",");strcat(dat,sv); sprintf(sv,"%.3f",cc_inp[i]);strcat(dat,",");strcat(dat,sv); sprintf(sv,"%.3f",ta_inp[i]);strcat(dat,",");strcat(dat,sv); sprintf(sv,"%.3f",tb_inp[i]);strcat(dat,",");strcat(dat,sv); sprintf(sv,"%.3f",Ec_inp[i]);strcat(dat,",");strcat(dat,sv); sprintf(sv,"%.3f",nc_inp[i]);strcat(dat,",");strcat(dat,sv); sprintf(sv,"%.3f",ac_inp[i]);strcat(dat,",");strcat(dat,sv); sprintf(sv,"%.3f",Es_inp[i]);strcat(dat,",");strcat(dat,sv); sprintf(sv,"%.3f",ns_inp[i]);strcat(dat,",");strcat(dat,sv); sprintf(sv,"%.3f",as_inp[i]);strcat(dat,",");strcat(dat,sv); sprintf(sv,"%.3f",Eg_inp[i]);strcat(dat,",");strcat(dat,sv); sprintf(sv,"%.3f",ng_inp[i]);strcat(dat,",");strcat(dat,sv); strcat(dat,"\n"); fputs(dat,fout); } fprintf(fout,"*Output data\n"); /* k : Sequence */ /* IE : Inner pressure (=0) or Outer pressure (=1) */ /* Eg : Water pressure */ /* dT : Temperature change */ /* sr_c : Stress in the r-direction at inner surface concrete */ /* st_c : Stress in the t-direction at inner surface concrete */ /* sr_si : Stress in the r-direction of inner reinforcement */ /* st_si : Stress in the t-direction of inner reinforcement */ /* sr_so : Stress in the r-direction of outer reinforcement */ /* st_so : Stress in the t-direction of outer reinforcement */ /* sr_g : Stress in the r-direction at outer surface concrete or bed rock */ /* st_g : Stress in the t-direction at outer surface concrete or bed rock */ /* ua : Radial displacement of inner surface concrete */ /* ub : Radial displacement of outer surface concrete */ fprintf(fout,"k,IE,Eg,dT,sr_c,st_c,sr_si,st_si,sr_so,st_so,sr_g,st_g,ua,ub\n"); fclose(fout); /* Execution of calculation */ for(k=0;k<=nd;k++){ switch(IE_inp[k]){ case 0: if(tb_inp[k]<=0)main_sng_pin(fnameW,k); if(0max){ max=fabs(a[j][k]); s=j; } } for(j=0;j<=n+1;j++){ dumy=a[k][j]; a[k][j]=a[s][j]; a[s][j]=dumy; } p=a[k][k]; for(j=k;j<=n+1;j++){ a[k][j]=a[k][j]/p; } for(i=0;i<=n;i++){ if(i!=k){ d=a[i][k]; for(j=k;j<=n+1;j++){ a[i][j]=a[i][j]-d*a[k][j]; } } } } } /*------------------------------------------------------------------------------*/