PffAll源程序.docx

上传人:b****2 文档编号:24136767 上传时间:2023-05-24 格式:DOCX 页数:97 大小:40.40KB
下载 相关 举报
PffAll源程序.docx_第1页
第1页 / 共97页
PffAll源程序.docx_第2页
第2页 / 共97页
PffAll源程序.docx_第3页
第3页 / 共97页
PffAll源程序.docx_第4页
第4页 / 共97页
PffAll源程序.docx_第5页
第5页 / 共97页
点击查看更多>>
下载资源
资源描述

PffAll源程序.docx

《PffAll源程序.docx》由会员分享,可在线阅读,更多相关《PffAll源程序.docx(97页珍藏版)》请在冰豆网上搜索。

PffAll源程序.docx

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节)的杆件结构静力分析程序。

这七个源文件必须插入到同一个VisualC++6.0工程中进行编译连接,才能获得完整的可执行程序。

将源文件插入工程的具体操作方法,请参见附录A。

除外壳源文件外,其余六个源文件经过少量修改,均可作为独立的静力分析程序进行编译连接。

具体修改方法有如下两步:

1.去除头文件引用声明后,文件指针声明行前的“extern”,即该行变为“FILE*fpin,*fpout;”;

2.将主文件名中“main”后的数字删除。

下面分文件列出七个cpp源文件的代码。

一.Shell.cpp

/*杆件结构静力分析程序*/

/*(先处理法)*/

#include"stdio.h"

#include"math.h"

#include"stdlib.h"

FILE*fpin,*fpout;

externintmain1();

externintmain2();

externintmain3();

externintmain4();

externintmain5();

externintmain6();

voidmain()

{

intstype;

printf("请选择结构类型\n\n");

printf("类型1->平面刚架\n");

printf("类型2->无结点线位移的连续梁或刚架\n");

printf("类型3->无结点水平线位移的连续梁或刚架\n");

printf("类型4->平面桁架\n");

printf("类型5->空间桁架\n");

printf("类型6->交叉梁系\n\n");

scanf("%d",&stype);

if(stype<1||stype>6)

{

printf("非法输入!

请重试。

\n");

return;

}

printf("你已选择类型%d。

\n",stype);

switch(stype)

{

case1:

main1();

break;

case2:

main2();

break;

case3:

main3();

break;

case4:

main4();

break;

case5:

main5();

break;

case6:

main6();

break;

}

}

二.pff.cpp

/*第1类:

平面刚架静力分析程序*/

/*(先处理法)*/

#include"stdio.h"

#include"math.h"

#include"stdlib.h"

externFILE*fpin,*fpout;

staticconstintARRSIZE=50;//数组大小

staticconstintJDOF=3;//结构坐标系下的结点自由度

staticconstintJPE=2;//每单元结点数

//一级子程序原型声明

staticintinput(intne,intnj,intnp,intnf,double*x,double*y,int(*ij)[JPE],

double*a,double*zi,int(*jn)[JDOF],double(*pj)[3],double(*pf)[4]);

staticinttsm(intne,intnj,intn,doublee,double*x,double*y,

int(*ij)[JPE],double*a,double*zi,int(*jn)[JDOF],

double(*tk)[JDOF*ARRSIZE]);

staticintjlp(intne,intnj,intn,intnp,intnf,double*x,double*y,

int(*ij)[JPE],int(*jn)[JDOF],double(*pj)[3],double(*pf)[4],

double*p);

staticintgauss(double(*a)[JDOF*ARRSIZE],double*b,intn);

staticintmvn(intne,intnj,intn,intnf,doublee,double*x,double*y,

int(*ij)[JPE],double*a,double*zi,int(*jn)[JDOF],double(*pf)[4],

double*p);

//二级子程序原型声明

staticintlsc(intm,intne,intnj,double*x,double*y,int(*ij)[JPE],

double*bl,double*si,double*co);

staticintelv(intm,intne,intnj,int(*ij)[JPE],int(*jn)[JDOF],int*lv);

staticintesm(intm,intne,doublee,double*a,double*zi,doublebl,

doublesi,doubleco,doubleek[JPE*JDOF][JPE*JDOF]);

staticinteff(inti,double(*pf)[4],intnf,doublebl,double*fo);

/*主程序读取总体信息,调用一级子程序进行计算*/

intmain1()

{

charindat[30],outdat[30];

intne,nj,n,np,nf;

doublee;

doublex[ARRSIZE],y[ARRSIZE],a[ARRSIZE],zi[ARRSIZE],pj[ARRSIZE][3],

pf[ARRSIZE][4];

doublep[JDOF*ARRSIZE],tk[JDOF*ARRSIZE][JDOF*ARRSIZE];

intij[ARRSIZE][JPE],jn[ARRSIZE][JDOF];

printf("请输入原始数据文件名:

\n");

scanf("%s",indat);

if((fpin=fopen(indat,"r"))==NULL)

{printf("无法打开原始数据文件!

\n");

return

(1);}

printf("请输入结果数据文件名:

\n");

scanf("%s",outdat);

if((fpout=fopen(outdat,"w"))==NULL)

{printf("无法打开结果数据文件!

\n");

return

(1);}

fscanf(fpin,"%d,%d,%d,%d,%d,%lg",&ne,&nj,&n,&np,&nf,&e);

fprintf(fpout,"平面刚架静力分析程序\n\n");

fprintf(fpout,"总体信息\n");

fprintf(fpout,"NE=%dNJ=%dN=%dNP=%dNF=%dE=%lg\n",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(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);

}

/*读取并输出原始数据*/

staticintinput(intne,intnj,intnp,intnf,double*x,double*y,int(*ij)[JPE],

double*a,double*zi,int(*jn)[JDOF],double(*pj)[3],double(*pf)[4])

{

inti,j;

for(i=0;i

fscanf(fpin,"%lg,%lg",&x[i],&y[i]);

fprintf(fpout,"\n结点坐标信息表\n");

fprintf(fpout,"结点号xy\n");

for(i=0;i

fprintf(fpout,"%-4d%-7lg%-7lg\n",i+1,x[i],y[i]);//0基调整

for(i=0;i

fscanf(fpin,"%d,%d,%lg,%lg",&ij[i][0],&ij[i][1],&a[i],&zi[i]);

fprintf(fpout,"\n单元信息表\n");

fprintf(fpout,"单元号始结点号i末结点号j横截面积A截面惯性矩ZI\n");

for(i=0;i

fprintf(fpout,"%-4d%-4d%-4d%-7lg%-7lg\n",

i+1,ij[i][0],ij[i][1],a[i],zi[i]);//0基调整

for(i=0;i

for(j=0;j

fscanf(fpin,"%d,",&jn[i][j]);

fprintf(fpout,"\n结点位移分量统一编码表\n");

fprintf(fpout,"结点号u方向v方向ceta方向\n");

for(i=0;i

{

fprintf(fpout,"%-4d",i+1);//0基调整

for(j=0;j

fprintf(fpout,"%-4d",jn[i][j]);

fprintf(fpout,"\n");

}

if(np>0)

{

for(i=0;i

for(j=0;j<3;j++)

fscanf(fpin,"%lg,",&pj[i][j]);

fprintf(fpout,"\n结点荷载表\n");

fprintf(fpout,"结点号方向代码XYM荷载大小\n");

for(i=0;i

{

for(j=0;j<3;j++)

fprintf(fpout,"%-7lg",pj[i][j]);

fprintf(fpout,"\n");

}

}

if(nf>0)

{

for(i=0;i

for(j=0;j<4;j++)

fscanf(fpin,"%lg,",&pf[i][j]);

fprintf(fpout,"\n非结点荷载表\n");

fprintf(fpout,"单元号荷载类型荷载大小荷载位置参数c\n");

for(i=0;i

{

for(j=0;j<4;j++)

fprintf(fpout,"%-7lg",pf[i][j]);

fprintf(fpout,"\n");

}

}

return(0);

}

/*计算单元长度,夹角alph的正余弦值*/

staticintlsc(intm,intne,intnj,double*x,double*y,int(*ij)[JPE],double*bl,

double*si,double*co)

{

inti,j;

doubledx,dy;

i=ij[m][0]-1,j=ij[m][1]-1;//0基调整

dx=x[j]-x[i];

dy=y[j]-y[i];

*bl=sqrt(dx*dx+dy*dy);

*si=dy/*bl;

*co=dx/*bl;

return(0);

}

/*形成单元定位向量*/

staticintelv(intm,intne,intnj,int(*ij)[JPE],int(*jn)[JDOF],int*lv)

{

inti,j,k;

i=ij[m][0]-1,j=ij[m][1]-1;//0基调整

for(k=0;k

{

lv[k]=jn[i][k];

lv[k+JDOF]=jn[j][k];

}

return(0);

}

/*计算整体坐标系下的单元刚度矩阵*/

staticintesm(intm,intne,doublee,double*a,double*zi,doublebl,

doublesi,doubleco,doubleek[JPE*JDOF][JPE*JDOF])

{

inti,j;

doublec1,c2,c3,c4,s1,s2,s3,s4,s5,s6;

c1=e*a[m]/bl;

c2=2.0*e*zi[m]/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;

ek[0][0]=s1;

ek[0][1]=s2;

ek[0][2]=-s3;

ek[0][3]=-s1;

ek[0][4]=-s2;

ek[0][5]=-s3;

ek[1][1]=s4;

ek[1][2]=s5;

ek[1][3]=-s2;

ek[1][4]=-s4;

ek[1][5]=s5;

ek[2][2]=2.0*s6;

ek[2][3]=s3;

ek[2][4]=-s5;

ek[2][5]=s6;

ek[3][3]=s1;

ek[3][4]=s2;

ek[3][5]=s3;

ek[4][4]=s4;

ek[4][5]=-s5;

ek[5][5]=2.0*s6;

for(i=0;i

for(j=i+1;j

ek[j][i]=ek[i][j];

return(0);

}

/*集成总刚*/

staticinttsm(intne,intnj,intn,doublee,double*x,double*y,int(*ij)[JPE],

double*a,double*zi,int(*jn)[JDOF],double(*tk)[JDOF*ARRSIZE])

{

doubleek[JPE*JDOF][JPE*JDOF];

intlv[JPE*JDOF];

inti,j,l,k,m;

doublebl,si,co;

for(i=0;i

for(j=0;j

tk[i][j]=0.0;

for(m=0;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;l

{

i=lv[l];

if(i!

=0)

{

for(k=0;k

{

j=lv[k];

if(j!

=0)tk[i-1][j-1]=tk[i-1][j-1]+ek[l][k];//0基调整

}

}

}

}

return(0);

}

/*计算单元固端力*/

staticinteff(inti,double(*pf)[4],intnf,doublebl,double*fo)

{

intno;

doubleq,c,b,c1,c2,c3;

intj;

no=int(pf[i][1]);

q=pf[i][2];

c=pf[i][3];

b=bl-c;

c1=c/bl;

c2=c1*c1;

c3=c1*c2;

for(j=0;j

fo[j]=0.0;

switch(no)

{

case1:

fo[1]=-q*c*(1.0-c2+c3/2.0);

fo[2]=-q*c*c*(0.5-2.0*c1/3.0+0.25*c2);

fo[4]=-q*c*c2*(1.0-0.5*c1);

fo[5]=q*c*c*c1*(1.0/3.0-0.25*c1);

return(0);

case2:

fo[1]=-q*b*b*(1.0+2.0*c1)/bl/bl;

fo[2]=-q*c*b*b/bl/bl;

fo[4]=-q*c2*(1.0+2.0*b/bl);

fo[5]=q*c2*b;

return(0);

case3:

fo[1]=6.0*q*c1*b/bl/bl;

fo[2]=q*b*(2.0-3.0*b/bl)/bl;

fo[4]=-6.0*q*c1*b/bl/bl;

fo[5]=q*c1*(2.0-3.0*c1);

return(0);

case4:

fo[1]=-q*c*(0.5-0.75*c2+0.4*c3);

fo[2]=-q*c*c*(1.0/3.0-0.5*c1+0.2*c2);

fo[4]=-q*c*c2*(0.75-0.4*c1);

fo[5]=q*c*c*c1*(0.25-0.2*c1);

return(0);

case5:

fo[0]=-q*c*(1.0-0.5*c1);

fo[3]=-0.5*q*c*c1;

return(0);

case6:

fo[0]=-q*b/bl;

fo[3]=-q*c1;

return(0);

}

return(0);

}

 

/*计算综合结点荷载列阵*/

staticintjlp(intne,intnj,intn,intnp,intnf,double*x,double*y,

int(*ij)[JPE],int(*jn)[JDOF],double(*pj)[3],double(*pf)[4],double*p)

{

inti,j,k,l,m;

doublebl,si,co;

intlv[JPE*JDOF];

doublefo[6],pe[JPE*JDOF];

for(i=0;i

p[i]=0.0;

if(np>0)

{

for(i=0;i

{

j=int(pj[i][0]);

k=int(pj[i][1]);

l=jn[j-1][k-1];//0基调整

if(l!

=0)p[l-1]=pj[i][2];//0基调整

}

}

if(nf>0)

{

for(i=0;i

{

m=int(pf[i][0])-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);

pe[0]=-fo[0]*co+fo[1]*si;

pe[1]=-fo[0]*si-fo[1]*co;

pe[2]=-fo[2];

pe[3]=-fo[3]*co+fo[4]*si;

pe[4]=-fo[3]*si-fo[4]*co;

pe[5]=-fo[5];

for(j=0;j

{

l=lv[j];

if(l!

=0)p[l-1]=p[l-1]+pe[j];//0基调整

}

}

}

return(0);

}

/*Gauss消去法解方程*/

staticintgauss(double(*a)[JDOF*ARRSIZE],double*b,intn)

{

inti,j,k;

doublea1;

for(k=0;k

{

for(i=k+1;i

{

a1=a[k][i]/a[k][k];

for(j=k+1;j

a[i][j]=a[i][j]-a1*a[k][j];

b[i]=b[i]-a1*b[k];

}

}

b[n-1]=b[n-1]/a[n-1][n-1];//0基调整

for(i=n-2;i>-1;i--)//0基调整

{

for(j=i+1;j

b[i]=b[i]-a[i][j]*b[j];

b[i]=b[i]/a[i][i];

}

return(0);

}

/*输出结点位移;计算并输出单元杆端力*/

staticintmvn(intne,intnj,intn,intnf,doublee,double*x,double*y,

int(*ij)[JPE],double*a,double*zi,int(*jn)[JDOF],double(*pf)[4],

double*p)

{

inti,j,l,m,ii;

intlv[JPE*JDOF];

doublebl,si,co;

doublefo[6],d[JPE*JDOF],fd[JPE*JDOF],f[6];

doubleek[JPE*JDOF][JPE*JDOF];

fprintf(fpout,"\n结点位移表\n");

fprintf(fpout,"结点号uvceta\n");

fo

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 外语学习 > 其它语言学习

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1