1、PffAll源程序Pff_All源程序Pff_All源程序共包含七个cpp源文件:Shell.cpp、pff.cpp、pff_nuv.cpp、pff_nu.cpp、pff_2DTr.cpp、pff_3DTr.cpp和pff_GlBm.cpp,它们分别对应外壳调用程序及类型1至类型6(参见2.6节)的杆件结构静力分析程序。这七个源文件必须插入到同一个Visual C+ 6.0工程中进行编译连接,才能获得完整的可执行程序。将源文件插入工程的具体操作方法,请参见附录A。除外壳源文件外,其余六个源文件经过少量修改,均可作为独立的静力分析程序进行编译连接。具体修改方法有如下两步:1. 去除头文件引用声明
2、后,文件指针声明行前的“extern”,即该行变为“FILE *fpin, *fpout;”;2. 将主文件名中“main”后的数字删除。下面分文件列出七个cpp源文件的代码。一Shell.cpp/* 杆件结构静力分析程序 */* (先处理法) */#include stdio.h#include math.h#include stdlib.hFILE *fpin, *fpout;extern int main1();extern int main2();extern int main3();extern int main4();extern int main5();extern int ma
3、in6();void main() int stype; printf(请选择结构类型nn); printf(类型1 - 平面刚架n); printf(类型2 - 无结点线位移的连续梁或刚架n); printf(类型3 - 无结点水平线位移的连续梁或刚架n); printf(类型4 - 平面桁架n); printf(类型5 - 空间桁架n); printf(类型6 - 交叉梁系nn); scanf(%d,&stype); if(stype6) printf(非法输入!请重试。n); return; printf(你已选择类型%d。n,stype); switch(stype) case 1:
4、main1(); break; case 2: main2(); break; case 3: main3(); break; case 4: main4(); break; case 5: main5(); break; case 6: main6(); break; 二pff.cpp/* 第1类:平面刚架静力分析程序 */* (先处理法) */#include stdio.h#include math.h#include stdlib.hextern FILE *fpin, *fpout;static const int ARRSIZE=50; /数组大小static const int
5、JDOF=3; /结构坐标系下的结点自由度static const int JPE=2; /每单元结点数/一级子程序原型声明static int input(int ne,int nj,int np,int nf,double *x,double *y,int (*ij)JPE, double *a,double *zi,int (*jn)JDOF,double (*pj)3,double (*pf)4);static int tsm(int ne, int nj, int n, double e, double *x, double *y, int (*ij)JPE, double *a,
6、double *zi, int (*jn)JDOF, double (*tk)JDOF*ARRSIZE);static int jlp(int ne, int nj, int n, int np, int nf, double *x, double *y, int (*ij)JPE, int (*jn)JDOF, double (*pj)3, double (*pf)4, double *p);static int gauss(double (*a)JDOF*ARRSIZE, double *b, int n);static int mvn(int ne, int nj, int n, int
7、 nf, double e, double *x, double *y, int (*ij)JPE, double *a, double *zi, int (*jn)JDOF, double (*pf)4, double *p);/二级子程序原型声明static int lsc(int m, int ne, int nj, double *x, double *y, int (*ij)JPE, double *bl,double *si, double *co);static int elv(int m, int ne, int nj, int (*ij)JPE,int (*jn)JDOF,
8、int *lv);static int esm(int m, int ne, double e, double *a, double *zi, double bl, double si, double co, double ekJPE*JDOFJPE*JDOF);static int eff(int i, double (*pf)4, int nf, double bl, double *fo);/* 主程序读取总体信息,调用一级子程序进行计算 */int main1() char indat30, outdat30; int ne,nj,n,np,nf; double e; double x
9、ARRSIZE,yARRSIZE,aARRSIZE,ziARRSIZE,pjARRSIZE3, pfARRSIZE4; double pJDOF*ARRSIZE,tkJDOF*ARRSIZEJDOF*ARRSIZE; int ijARRSIZEJPE,jnARRSIZEJDOF; printf(请输入原始数据文件名:n); scanf(%s,indat); if(fpin=fopen(indat,r)=NULL) printf(无法打开原始数据文件!n); return(1); printf(请输入结果数据文件名:n); scanf(%s,outdat); if(fpout=fopen(out
10、dat,w)=NULL) printf(无法打开结果数据文件!n); return(1); fscanf(fpin,%d,%d,%d,%d,%d,%lg,&ne,&nj,&n,&np,&nf,&e); fprintf(fpout,平面刚架静力分析程序nn); fprintf(fpout,总体信息n); fprintf(fpout, NE=%d NJ=%d N=%d NP=%d NF=%d E=%lgn,ne,nj,n,np,nf,e); input(ne,nj,np,nf,x,y,ij,a,zi,jn,pj,pf); tsm(ne,nj,n,e,x,y,ij,a,zi,jn,tk); jlp(
11、ne,nj,n,np,nf,x,y,ij,jn,pj,pf,p); gauss(tk,p,n); mvn(ne,nj,n,nf,e,x,y,ij,a,zi,jn,pf,p); fclose(fpin); fclose(fpout); printf(n计算结束!n); printf(请查看结果数据文件“%s”。n,outdat); return(0);/* 读取并输出原始数据 */static int input(int ne,int nj,int np,int nf,double *x,double *y,int (*ij)JPE,double *a,double *zi,int (*jn)J
12、DOF,double (*pj)3,double (*pf)4) int i,j; for(i=0;inj;i+) fscanf(fpin,%lg,%lg,&xi,&yi); fprintf(fpout,n结点坐标信息表n); fprintf(fpout, 结点号 x yn); for(i=0;inj;i+) fprintf(fpout, %-4d %-7lg %-7lgn,i+1,xi,yi); /0基调整 for(i=0;ine;i+) fscanf(fpin,%d,%d,%lg,%lg,&iji0,&iji1,&ai,&zii); fprintf(fpout,n单元信息表n); fpri
13、ntf(fpout, 单元号 始结点号i 末结点号j 横截面积A 截面惯性矩ZIn); for(i=0;ine;i+) fprintf(fpout, %-4d %-4d %-4d %-7lg %-7lgn, i+1,iji0,iji1,ai,zii); /0基调整 for(i=0;inj;i+) for(j=0;jJDOF;j+) fscanf(fpin,%d,&jnij); fprintf(fpout,n结点位移分量统一编码表n); fprintf(fpout, 结点号 u方向 v方向 ceta方向n); for(i=0;inj;i+) fprintf(fpout, %-4d,i+1); /
14、0基调整 for(j=0;j0) for(i=0;inp;i+) for(j=0;j3;j+) fscanf(fpin,%lg,&pjij); fprintf(fpout,n结点荷载表n); fprintf(fpout, 结点号 方向代码XYM 荷载大小n); for(i=0;inp;i+) for(j=0;j0) for(i=0;inf;i+) for(j=0;j4;j+) fscanf(fpin,%lg,&pfij); fprintf(fpout,n非结点荷载表n); fprintf(fpout, 单元号 荷载类型 荷载大小 荷载位置参数cn); for(i=0;inf;i+) for(j
15、=0;j4;j+) fprintf(fpout, %-7lg, pfij); fprintf(fpout,n); return(0);/* 计算单元长度,夹角alph的正余弦值 */static int lsc(int m, int ne, int nj, double *x, double *y, int (*ij)JPE, double *bl,double *si, double *co) int i,j; double dx,dy; i=ijm0-1,j=ijm1-1; /0基调整 dx=xj-xi; dy=yj-yi; *bl=sqrt(dx*dx+dy*dy); *si=dy /
16、*bl; *co=dx / *bl; return(0);/* 形成单元定位向量 */static int elv(int m, int ne, int nj, int (*ij)JPE,int (*jn)JDOF,int *lv) int i,j,k; i=ijm0-1,j=ijm1-1; /0基调整 for(k=0;kJDOF;k+) lvk=jnik; lvk+JDOF=jnjk; return(0);/* 计算整体坐标系下的单元刚度矩阵 */static int esm(int m, int ne, double e, double *a, double *zi, double bl,
17、double si, double co, double ekJPE*JDOFJPE*JDOF) int i,j; double c1,c2,c3,c4,s1,s2,s3,s4,s5,s6; c1=e*am/bl; c2=2.0*e*zim/bl; c3=3.0*c2/bl; c4=2.0*c3/bl; s1=c1*co*co+c4*si*si; s2=(c1-c4)*si*co; s3=c3*si; s4=c1*si*si+c4*co*co; s5=c3*co; s6=c2; ek00=s1; ek01=s2; ek02=-s3; ek03=-s1; ek04=-s2; ek05=-s3;
18、ek11=s4; ek12=s5; ek13=-s2; ek14=-s4; ek15=s5; ek22=2.0*s6; ek23=s3; ek24=-s5; ek25=s6; ek33=s1; ek34=s2; ek35=s3; ek44=s4; ek45=-s5; ek55=2.0*s6; for(i=0;iJPE*JDOF-1;i+) for(j=i+1;jJPE*JDOF;j+) ekji=ekij; return(0);/* 集成总刚 */static int tsm(int ne, int nj, int n, double e, double *x, double *y, int
19、(*ij)JPE,double *a, double *zi, int (*jn)JDOF, double (*tk)JDOF*ARRSIZE) double ekJPE*JDOFJPE*JDOF; int lvJPE*JDOF; int i,j,l,k,m; double bl,si,co; for(i=0;in;i+) for(j=0;jn;j+) tkij=0.0; for(m=0;mne;m+) lsc(m,ne,nj,x,y,ij,&bl,&si,&co); esm(m,ne,e,a,zi,bl,si,co,ek); elv(m,ne,nj,ij,jn,lv); for(l=0;lJ
20、PE*JDOF;l+) i=lvl; if(i!=0) for(k=0;kJPE*JDOF;k+) j=lvk; if(j!=0) tki-1j-1=tki-1j-1+eklk; /0基调整 return(0);/* 计算单元固端力 */static int eff(int i, double (*pf)4, int nf, double bl, double *fo) int no; double q,c,b,c1,c2,c3; int j; no=int(pfi1); q=pfi2; c=pfi3; b=bl-c; c1=c/bl; c2=c1*c1; c3=c1*c2; for(j=0;
21、jJPE*3;j+) foj=0.0; switch(no) case 1: fo1=-q*c*(1.0-c2+c3/2.0); fo2=-q*c*c*(0.5-2.0*c1/3.0+0.25*c2); fo4=-q*c*c2*(1.0-0.5*c1); fo5=q*c*c*c1*(1.0/3.0-0.25*c1); return(0); case 2: fo1=-q*b*b*(1.0+2.0*c1)/bl/bl; fo2=-q*c*b*b/bl/bl; fo4=-q*c2*(1.0+2.0*b/bl); fo5=q*c2*b; return(0); case 3: fo1=6.0*q*c1*
22、b/bl/bl; fo2=q*b*(2.0-3.0*b/bl)/bl; fo4=-6.0*q*c1*b/bl/bl; fo5=q*c1*(2.0-3.0*c1); return(0); case 4: fo1=-q*c*(0.5-0.75*c2+0.4*c3); fo2=-q*c*c*(1.0/3.0-0.5*c1+0.2*c2); fo4=-q*c*c2*(0.75-0.4*c1); fo5=q*c*c*c1*(0.25-0.2*c1); return(0); case 5: fo0=-q*c*(1.0-0.5*c1); fo3=-0.5*q*c*c1; return(0); case 6:
23、 fo0=-q*b/bl; fo3=-q*c1; return(0); return(0);/* 计算综合结点荷载列阵 */static int jlp(int ne, int nj, int n, int np, int nf, double *x, double *y,int (*ij)JPE, int (*jn)JDOF, double (*pj)3, double (*pf)4, double *p) int i,j,k,l,m; double bl,si,co; int lvJPE*JDOF; double fo6,peJPE*JDOF; for(i=0;i0) for(i=0;i0
24、) for(i=0;inf;i+) m=int(pfi0)-1; /0基调整 lsc(m,ne,nj,x,y,ij,&bl,&si,&co); eff(i,pf,nf,bl,fo); elv(m,ne,nj,ij,jn,lv); pe0=-fo0*co+fo1*si; pe1=-fo0*si-fo1*co; pe2=-fo2; pe3=-fo3*co+fo4*si; pe4=-fo3*si-fo4*co; pe5=-fo5; for(j=0;jJPE*JDOF;j+) l=lvj; if(l!=0) pl-1=pl-1+pej; /0基调整 return(0);/* Gauss消去法解方程 *
25、/static int gauss(double (*a)JDOF*ARRSIZE, double *b, int n) int i,j,k; double a1; for(k=0;kn-1;k+) for(i=k+1;in;i+) a1=aki/akk; for(j=k+1;j-1;i-) /0基调整 for(j=i+1;jn;j+) bi=bi-aij*bj; bi=bi/aii; return(0);/* 输出结点位移;计算并输出单元杆端力 */static int mvn(int ne, int nj, int n, int nf, double e, double *x, double *y,int (*ij)JPE, double *a, double *zi, int (*jn)JDOF, double (*pf)4,double *p) int i,j,l,m,ii; int lvJPE*JDOF; double bl,si,co; double fo6,dJPE*JDOF,fdJPE*JDOF,f6; double ekJPE*JDOFJPE*JDOF; fprintf(fpout,n结点位移表n); fprintf(fpout, 结点号 u v cetan); fo
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1