#include #include main() { int np,np2,ne,p,koteix[100],koteiy[100],i,j,k,l,ielm[100][3]; float x[100],y[100],em[6][6],tk[150][150],loadx[100],loady[100],f[150]; float d[3][3],bb[3][6],bbt[6][3],btd[6][3]; float eps[100][3],sigma[100][3],disp[150]; float elas,pois,s,b[3],c[3],c1,c2,pmax,w,ww[150]; float x0,x1,x2,y0,y1,y2,z; FILE *fp1; FILE *fp2; /* ----- zero clear of matrix and vector ------------- */ for(i=0;i<100;i++){ x[i]=0.0; y[i]=0.0; koteix[i]=0; koteiy[i]=0; loadx[i]=0.0; loady[i]=0.0; } for(i=0;i<100;i++){ ielm[i][0]=0; ielm[i][1]=0; ielm[i][2]=0; eps[i][0]=0.0; eps[i][1]=0.0; eps[i][2]=0.0; sigma[i][0]=0.0; sigma[i][1]=0.0; sigma[i][2]=0.0; } for(i=0;i<150;i++){ disp[i]=0.0; f[i]=0.0; ww[i]=0.0; for(j=0;j<150;j++){ tk[i][j]=0.0; } } for(i=0;i<3;i++){ for(j=0;j<3;j++){ d[i][j]=0.0; } } /* ------------ input of data ------------------------ */ if((fp1=fopen("c:data3.txt","r"))==NULL){ printf("no data file\n"); exit(1); } fscanf(fp1,"%d %d",&np,&ne); fscanf(fp1,"%f %f",&elas,&pois); for(i=0;i pmax){ p = i; pmax = fabs( tk[i][k] ); } } /* エラー処理:ピボットがあまりに小さい時はメッセージを表示して終了 */ if(fabs( pmax ) < 1.0e-12){ printf("too small pivot! \n"); return(0); } if(p != k){ /* 第k行と第p行の交換 */ for(i = k; i < np2; i++){ /* 係数行列 */ w = tk[k][i]; tk[k][i] = tk[p][i]; tk[p][i] = w; } /* 既知ベクトル */ w = f[k]; f[k] = f[p]; f[p] = w; } /* 前進消去 */ for(i = k +1; i < np2; i++){ /* 第i行 */ ww[i] = tk[i][k] / tk[k][k]; tk[i][k] = 0.0; /* 第k行を-tk[i][k]/tk[k][k]倍して、第i行に加える */ for(j = k + 1; j < np2; j++){ tk[i][j] = tk[i][j] - tk[k][j] * ww[i]; } f[i] = f[i] - f[k] * ww[i]; } } /* 後退代入 */ for(i = np2 - 1; i >= 0; i--){ for(j = i + 1; j < np2; j++){ f[i] = f[i] - tk[i][j] * f[j]; tk[i][j] = 0.0; } f[i] = f[i] / tk[i][i]; tk[i][i] = 1.0; } for(i=0;i