当前位置:文档之家› 计算结构力学自编平面桁架

计算结构力学自编平面桁架

平面桁架程序:#include "stdio.h"#include "math.h"#define unitmax 30#define pointmax 30#define matermax 10#define Pmaxnum 20#define bindmax 20main(){int unit[unitmax][4],bind[bindmax][3],number[5];float point[pointmax][2],material[matermax][2],P[Pmaxnum][3];float allarray[pointmax*2][pointmax*2];void readdata(int unit[unitmax][4],float point[pointmax][2],int number[5],int bind[bindmax][3],float material[matermax][2],float P[Pmaxnum][3]);void all(float point[pointmax][2],int unit[unitmax][4],float material[matermax][2], int number[5],float allarray[][pointmax*2]);void equa(float allarray[][pointmax*2],float P[Pmaxnum][3],int bind[][3],int number[]);void result(int unit[unitmax][4],float point[pointmax][2],int number[5],float material[matermax][2],float allarray[][pointmax*2]);readdata(unit,point,number,bind,material,P);all(point,unit,material,number,allarray);equa(allarray,P,bind,number);result(unit,point,number,material,allarray);}/******************************************************************/ void readdata(int unit[unitmax][4],float point[pointmax][2],int number[5],int bind[bindmax][3],float material[matermax][2],float P[Pmaxnum][3]){FILE *fp;int pointnum,unitnum,maternum,Pnum,bindnum,no_use,i,j,k,n,m;if((fp=fopen("data.txt","r"))==NULL){printf("data file can't be opened,please create it");exit(0);return;}for(i=0;i<=4;i++)if(fscanf(fp,"%d",&number[i])==EOF){printf("file error");fclose(fp);}pointnum=number[0];unitnum=number[1] ;maternum=number[2];Pnum=number[3];bindnum=number[4];for(i=0;i<pointnum;i++)fscanf(fp,"%d %f %f",&k,&point[i][0],&point[i][1]);for(i=0;i<unitnum;i++)if(fscanf(fp,"%d %d %d %d\n",&unit[i][0],&unit[i][1],&unit[i][2],&unit[i][3])==EOF) {printf("file error\n");fclose(fp);}for(i=0;i<maternum;i++)if(fscanf(fp,"%d %g %g\n",&k,&material[i][0],&material[i][1])==EOF){printf("file error\n");fclose(fp);}for(i=0;i<Pnum;i++)fscanf(fp,"%d %f %f %f\n",&k,&P[i][0],&P[i][1],&P[i][2]);for(i=0;i<bindnum;i++)if(fscanf(fp,"%d %d %d %d\n",&k,&bind[i][0],&bind[i][1],&bind[i][2])==EOF){printf("file error\n");fclose(fp);}fclose(fp);return;}/*OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOPPPPPPPPPPPPPPPPP*/void all(float point[pointmax][2],int unit[unitmax][4],float material[matermax][2],int number[5],float allarray[][pointmax*2]){float unitarray[2][2][4],allar[pointmax*2][pointmax*2]; int i,j,ii[2],r,s,v,w,kk;float xi,xj,yi,yj,E,A,L,EAL,SRF,CRF,SS,CC,CS;FILE *wp;wp=fopen("out.txt","w");for(v=0;v<2*number[0];v++)for(w=0;w<2*number[0];w++)allarray[v][w]=0.0;kk=0;for(kk=0;kk<number[1];kk++){i=unit[kk][1];j=unit[kk][2];ii[0]=i;ii[1]=j;xi=point[i-1][0];yi=point[i-1][1];xj=point[j-1][0];yj=point[j-1][1];L=sqrt((xj-xi)*(xj-xi)+(yj-yi)*(yj-yi));E=material[unit[kk][3]-1][0];A=material[unit[kk][3]-1][1];EAL=E*A/L ;SRF=(yj-yi)/L;CRF=(xj-xi)/L;SS=SRF*SRF;CC=CRF*CRF;CS=SRF*CRF;for(r=0;r<=1;r++)for(s=0;s<=1;s++){{if(r==s){unitarray[r][s][0]=EAL*CC;unitarray[r][s][1]=EAL*CS;unitarray[r][s][2]=EAL*CS;unitarray[r][s][3]=EAL*SS;}else{unitarray[r][s][0]=-EAL*CC;unitarray[r][s][1]=-EAL*CS;unitarray[r][s][2]=-EAL*CS;unitarray[r][s][3]=-EAL*SS;}}}for(v=0;v<=1;v++)for(w=0;w<=1;w++){allarray[2*ii[v]-2][2*ii[w]-2]+=unitarray[v][w][0]; allarray[2*ii[v]-2][2*ii[w]-1]+=unitarray[v][w][1];allarray[2*ii[v]-1][2*ii[w]-2]+=unitarray[v][w][2];allarray[2*ii[v]-1][2*ii[w]-1]+= unitarray[v][w][3];}for(v=0;v<number[0]*2;v++)for(w=0;w<number[0]*2;w++)allar[v][w]=0;for(v=0;v<=1;v++)for(w=0;w<=1;w++){allar[2*ii[v]-2][2*ii[w]-2]+=unitarray[v][w][0];allar[2*ii[v]-2][2*ii[w]-1]+=unitarray[v][w][1];allar[2*ii[v]-1][2*ii[w]-2]+=unitarray[v][w][2];allar[2*ii[v]-1][2*ii[w]-1]+= unitarray[v][w][3];}}fclose(wp);return;}/***********************************************************************/void equa(float allarray[][pointmax*2],float P[Pmaxnum][3],int bind[][3],int number[]) {int i,j,k,n,m;float op;FILE *wp;wp=fopen("out.txt","w");for(i=0;i<number[4];i++){ if(bind[i][1]==0){for(j=0;j<2*number[0];j++){allarray[2*bind[i][0]-2][j]=0.0;allarray[j][2*bind[i][0]-2]=0.0;}allarray[2*bind[i][0]-2][2*bind[i][0]-2]=1.0;}if(bind[i][2]==0){ for(j=0;j<2*number[0];j++){allarray[2*bind[i][0]-1][j]=0.0;allarray[j][2*bind[i][0]-1]=0.0;}allarray[2*bind[i][0]-1][2*bind[i][0]-1]=1.0;}}for(i=0;i<2*number[0];i++)allarray[i][2*number[0]]=0.0;for(i=0;i<number[3];i++){allarray[2*(int)P[i][0]-2][2*number[0]]=P[i][1];allarray[2*(int)P[i][0]-1][2*number[0]]=P[i][2];}n=2*number[0];for(k=0;k<n;k++){ op=allarray[k][k];for(m=k;m<=n;m++)allarray[k][m]=allarray[k][m]/op;for(i=k+1;i<n;i++){op=allarray[i][k];for(m=k;m<=n;m++)allarray[i][m]=allarray[i][m]-allarray[k][m]*op;}}for(k=n-1;k>=0;k--){for(i=k-1;i>=0;i--){op=allarray[i][k];for(m=n;m>=0;m--)allarray[i][m]=allarray[i][m]-allarray[k][m]*op;}}return;}/*_____________________________________________________________________________ ___*/void result(int unit[unitmax][4],float point[pointmax][2],int number[5],float material[matermax][2],float allarray[][pointmax*2]){int i,j,k,kk,ii;float disXi,disXj,disYi,disYj,xi,xj,yi,yj,EAL,E,A,L,SRF,CRF,N;FILE *wp;if((wp=fopen("out.txt","a"))==NULL){printf("data file can't be opened,please create it");exit(0);return;}printf("\n");for(kk=0;kk<number[1];kk++){i=unit[kk][1];j=unit[kk][2];xi=point[i-1][0];yi=point[i-1][1];xj=point[j-1][0];yj=point[j-1][1];L=sqrt((xj-xi)*(xj-xi)+(yj-yi)*(yj-yi));E=material[unit[kk][3]-1][0];A=material[unit[kk][3]-1][1];EAL=E*A/L ;SRF=(yj-yi)/L;CRF=(xj-xi)/L;disXi=allarray[2*i-2][2*number[0]];disYi=allarray[2*i-1][2*number[0]];disXj=allarray[2*j-2][2*number[0]];disYj=allarray[2*j-1][2*number[0]];printf("the unit=%d i=%d j=%d\n",unit[kk][0],i,j);printf("disXi=%f disYi=%f disXj=%f disYj=%f \n",disXi,disYi,disXj,disYj);N=-EAL*(CRF*(disXi-disXj)+SRF*(disYi-disYj));printf("the inner force=%f\n",N);fprintf(wp,"the unit=%d i=%d j=%d\n",unit[kk][0],i,j);fprintf(wp,"disXi=%f disYi=%f disXj=%f disYj=%f \n",disXi,disYi,disXj,disYj); fprintf(wp,"the inner force=%f\n",N);}return;}数据:10 17 1 1 21 0.0 0.02 0.0 1.03 1.0 1.04 1.0 0.05 2.0 1.06 2.0 0.07 3.0 1.08 3.0 0.09 4.0 1.010 4.0 0.01 12 12 23 13 1 3 14 1 4 15 3 4 16 3 5 17 3 6 18 4 6 19 5 6 110 5 7 111 6 7 112 6 8 113 7 8 114 7 9 115 7 10 116 8 10 117 9 10 11 2.1e9 0.0025 1 3 0 -501 1 0 02 10 1 0。

相关主题