




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
图57。图STYLEREF1\s5SEQ图表\*ARABIC\s16应力比较图STYLEREF1\s5SEQ图表\*ARABIC\s17位移比较自编程序所得结果与ANSYS分析结果进行比较发现,应力偏大而位移偏小。分析其中的原因,一方面是编程水平有限,自编程序有很多不完善之处,有很多因素没有考虑(温度、变形、非线性等),所得结果可信度不是很高,只能得到应力以及位移大概的分布情况;另一方面是在后处理阶段,在对高斯积分点结果进行处理时,误差难以避免,还有一方面的原因是在进行求解时保留数据精度不够,造成误差较大,并且进行数值运算时可能会造成大数吃小数,从而引起结果的差异。
参考文献(美)史密斯(Smith,I.m.)著;王崧等译.有限单元法编程(第三版)[M].北京:电子工业出版社,2003王勖成.有限单元法[M].北京:清华大学出版社,2003宋建辉,涂志刚.MATLAB语言及其在有限元编程中的应用[J].湛江师范学院学报.2003.6(24):101-105郑大玉,连宏玉,周跃发.有限元编程与C语言[J].黑龙江商学院学报.1997.3(13):23-28王伟,刘德富.有限元编程中应用面向对象编程技术的探讨[J].三峡大学学报.2001.2(23):124-128汪文立,吕士俊.二级C语言程序设计教程[M].北京:中国水利水电出版社,2006赵翔龙.FORTRAN90学习教程[M].北京:北京大学出版社,2002附录程序源代码#include<stdio.h>#include<math.h>/*Thegemotryofthemodel*/floatmesh[2];floatwide,hight;floatwsize,hsize,young,poiss,thick;inti,j,k,knelem,npoin,elem[500],ielem;floatcoord[2][1],props[3][1],lnods[8][500],ifpre[1];floatposgp[3],weigp[3],estif[136],elcod[2][8];intnpoin,nelem,kevab,igaus,jgaus,kgasp,ngash,djacb;floatgpcod[2][9],bmatx[3][16],dmatx[3][3];floatshape[8],deriv[2][8];floatxjacm[2][2],xjaci[2][2],elcod[2][8];floatcartd[2][8];floatbmatx[3][16],dmatx[3][3];floatnload[1];floatpress[3][2],pgash[2],dgash[2];structnode{intnodenu;/*Thenumberofthenode*/floatcor[2];/*Thecoordinateofthenode*/floatdisplacement[2];/*Thedisplacementofthenode*/floatload[2];/*Theloadofthenode*/floatboundary[2];}node[500];struct{intelementnu;/*Thenumberofelement*/intlocalnu[8];/*Localnumber*/intlocalcorx[8];intlocalcory[8];/*Localcoordinateofnode*/floatqx,qy,t;/*Thestressandstrain*/}element[500];voidmeshing(floatwide,floathight,floatmesh[2]){printf("Pleaseinputthemeshingsize\n");scanf("%f%f",&wsize,&hsize);getchar();mesh[0]=wide/wsize;mesh[1]=hight/hsize;}/*Theglobalcoordinateofnode*/voidcoordinate(){inti,j=1;floatx,y;for(i=1;i<=2*mesh[1]+1;i++){x=0;while(x<=wide)if(i%2!=0){node[j].cor[1]+=wsize/2;node[j].cor[2]+=(i-1)*hsize;j++;}else{node[j].cor[1]+=wsize;node[j].cor[2]+=(i-1)*hsize;j++;}}}main(){inttop[500],bottom[500];/*Thenumberoftopandbottomelement*/voidinput();voidstif();voidjacobi2();voidload();voidasem();voidsolve();voidstre();npoin=8;for(i=1;i<=8;i++)lnods[i][1]=i;for(i=1;i<=3;i++)scanf("%f",&props[i][1]);printf("TheEXis%e\nTheuois%8f\nThebtis%8f",props[1][1],props[2][1],props[3][1]);getch();printf("Pleaseinputthegemotryofthemodel\n");scanf("%f%f",&wide,&hight);getchar();printf("Thewideis%0.3f,thehightis%0.3f",wide,hight);getchar();meshing(wide,hight,mesh);printf("Thewidesizeis%f,thehightsizeis%f\n",mesh[0],mesh[1]);input();getchar();nelem=mesh[0]*mesh[1];for(i=1;i<=nelem;i++)/*Theelementnumber*/element[i].elementnu=i;for(i=1;i<mesh[0];i++)npoin+=5;for(i=1;i<mesh[1];i++)npoin+=3*mesh[0]+2;printf("%d",npoin);for(i=1;i<=npoin;i++)node[i].nodenu=i;for(i=1;i<=nelem;i++)for(j=1;j<=8;j++)element[i].localnu[j]=j;for(i=1;i<=mesh[0];i++)bottom[i]=i;j=1;for(i=mesh[0]*(mesh[1]-1)+1;i<=nelem;i++)top[j++]=i;for(i=1;i<j;i++)printf("thetopnumberis%d\n",top[i]);printf("%d\n",element[1].localnu[8]);coordinate();stif();jacobi2();load();asem();solve();stre();getchar();}/*datainput*/voidinput(){intnnode=8;intnotreadchar;/*inputelementnodenumber*/printf("inputelementnodenumber\n");for(ielem=1;ielem<=nelem;ielem++)for(i=1;i<=nnode;i++)scanf("%d",&lnods[i][ielem]);/*Inputrestrictionmessage*/printf("double-digitissymboloftherestriction,1representatesstable,2representatesgiveddisplacement\n");i=1;while(i){scanf("%d",&i);if(i!=0){scanf("%d",&j);scanf("%d",&ifpre[j]);}elsebreak;}}/*Elementstiffnessmatrix*/voidstif(){intkevab,nstre,ievab,istre,lnode,jstre,jevab;floatkgasp,exisp,etasp,dvolu;floatbtdbm,dbmat[3];voidsfr();/*Gausspoint*/posgp[1]=-sqrt(0.6);posgp[2]=0;posgp[3]=sqrt(0.6);/*weightcoefficient*/weigp[1]=5.0/9.0;weigp[2]=8.0/9.0;weigp[3]=5.0/9.0;/*numberofstress*/nstre=3;/*formelasticmatrix*/for(ielem=1;ielem<=nelem;ielem++){printf("Thenumberofelementis%d\n",ielem);for(i=1;i<=8;i++){lnode=lnods[i][ielem];for(j=1;j<=2;j++){coord[j][lnode]=node[lnode].cor[j];elcod[j][i]=coord[j][lnode];}}young=props[1][1];poiss=props[2][1];thick=props[3][1];modps(young,poiss);/*Theinitialvalueof[k]*/kevab=0;for(i=1;i<=16;i++)for(j=1;j<=i;j++){kevab++;estif[kevab]=0.0;}/*Thegausspointshapefunctionandderiv*/kgasp=0;for(igaus=1;igaus<=3;igaus++)for(jgaus=1;jgaus<=3;jgaus++){kgasp=kgasp+1;exisp=posgp[igaus];etasp=posgp[jgaus];printf("Thenumberofgausspointis%d\n",kgasp);sfr2(exisp,etasp);jacob2(ielem,djacb,kgasp,elcod);dvolu=djacb*weigp[igaus]*weigp[jgaus]*thick;bmatps()/*Theinitialvalueofelasticmatrix[D]*/kevab=0;for(ievab=1;ievab<=16;ievab++){for(istre=1;istre<=nstre;istre++){dbmat[istre]=0.0;for(jstre=1;jstre<=nstre;jstre++)dbmat[istre]=dbmat[istre]+bmatx[jstre][ievab]*dmatx[jstre][istre];}for(jevab=1;jevab<=ievab;ievab++){kevab=kevab+1;btdbm=0.0;for(istre=1;istre<=nstre;istre++)btdbm=btdbm+dbmat[istre]*bmatx[istre][jevab];estif[kevab]=estif[kevab]+btdbm*dvolu;}}}}}/*floatsfr2(floats,floatt){floats2,t2,ss,tt,st,stt,sst,st2;/*Shapefunction*//*thesevariablesaretosimplifytheformula*/s2=s*2.0;t2=t*2.0;ss=s*s;tt=t*t;st=s*t;stt=s*t*t;sst=s*s*t;st2=s*t*2.0;/*shapefunction*/shape[1]=(-1.0+st+ss+tt-sst-stt)/4.0;shape[2]=(1.0-t-ss+sst)/2.0;shape[3]=(-1.0-st+ss+tt-sst+stt)/4.0;shape[4]=(1.0+s-tt-stt)/2.0;shape[5]=(-1.0+st+ss+tt+sst+stt)/4.0;shape[6]=(1.0+t-ss-sst)/2.0;shape[7]=(-1.0-st+ss+tt+sst-stt)/4.0;shape[8]=(1.0-s-tt+stt)/2.0;/*differentialcoefficienttolocalcoordinate*/deriv[1][1]=(t+s2-st2-tt)/4.0;deriv[1][2]=-s+st;deriv[1][3]=(-t+s2-st2+tt)/4.0;deriv[1][4]=(1.0-tt)/2.0;deriv[1][5]=(t+s2+st2+tt)/4.0;deriv[1][6]=-s-st;deriv[1][7]=(-t+s2+st2-tt)/4.0;deriv[1][8]=(-1.0+tt)/2.0;deriv[2][1]=(s+t2-ss-st2)/4.0;deriv[2][2]=(-1.0+ss)/2.0;deriv[2][3]=(-s+t2-ss+st2)/4.0;deriv[2][4]=-t-st;deriv[2][5]=(s+t2+ss+st2)/4.0;deriv[2][6]=(1.0-ss)/2.0;deriv[2][7]=(-s+t2+ss-st2)/4.0;deriv[2][8]=-t+st;}*//*Jacobimatrix*/voidjacobi2(){/*xjacm[2][2]:jacobimatrix;xjaci[2][2]:[j]-1;elcod[2][8]:localcoordinate*/floatcartd[2][8],gpcod[2][9];inti,j,k;for(i=1;i<=2;i++){gpcod[i][kgasp]=0.0;for(j=1;j<=8;j++)gpcod[i][kgasp]=gpcod[i][kgasp]+elcod[i][j]*shape[j];}for(i=1;i<=2;i++)for(j=1;j<=2;j++){xjacm[i][j]=0.0;for(k=1;k<=8;k++)xjacm[i][j]=xjacm[i][j]+deriv[i][k]*elcod[j][k];}/*CaculatethevalueofJacobimatrix*/djacb=xjacm[1][1]*xjacm[2][2]-xjacm[1][2]*xjacm[2][1];printf("Thedetofjacobimatrixis%f\n",djacb);if(djacb<=1e-6)printf("Thejacobidetof%dislessorequal0\n",ielem);/*Theelementof[j]-1*/xjaci[1][1]=xjacm[2][2]/djacb;xjaci[2][2]=xjacm[1][1]/djacb;xjaci[1][2]=-xjacm[1][2]/djacb;xjaci[2][1]=-xjacm[2][1]/djacb;/*Thederivofshapefunctiontoglobalcoordinate*/for(i=1;i<=2;i++)for(k=1;k<=8;k++){cartd[i][k]=0.0;for(j=1;j<=2;j++)cartd[i][k]=cartd[i][k]+xjaci[i][j]*deriv[j][k];}}/*Formelasticmatris*//*floatmodps(){floatbmatx[3][16],dmatx[3][3];floatconstant;inti,j,y,p;y=props[1][1];p=props[2][1];for(i=1;i<=3;i++)for(j=1;j<=3;j++)dmatx[i][j]=0.0;/*IfNtype=1,itisplanestressquestion*/constant=y/(1.0-p*p);dmatx[1][1]=constant;dmatx[2][2]=constant;dmatx[1][2]=constant*p;dmatx[2][1]=constant*p;dmatx[3][3]=constant*(1.0-p)/2.0;}*//*Formstrainmatrix*//*voidbmatps(){floatcartd[2][8],shape[8],deriv[2][8],bmatx[3][16],dmatx[3][3];intnpoin,nelem,ngash,mgash;floatgpcod[2][9];/*Theinitialvalueof[B]*/for(i=1;i<=16;i++)for(j=1;j<=3;j++)bmatx[j][i]=0.0;/*Form[B]*/ngash=0;for(i=1;i<=8;i++){mgash=ngash+1;ngash=mgash+1;bmatx[1][mgash]=cartd[1][i];bmatx[1][ngash]=0.0;bmatx[2][mgash]=0.0;bmatx[2][ngash]=cartd[2][i];bmatx[3][mgash]=cartd[2][i];bmatx[3][ngash]=cartd[1][i];}}*//*equalloadofnode*/voidload(){floatnload[500];floatelcod[2][3],eload[16],posgp[3],weigp[3];floatpress[3][2],pgash[2],dgash[2],noprs[3];intiedge,nedge,kount;floatsgmar,tau,s,dvolu,pxcom,pycom,n,m,t;intlnode,number,nloca;/*Thenumberofloadside*//*elementload*//*Thepositionofgausspoint*/printf("inputthenumberofloadside*/n");scanf("%d",&number);posgp[1]=-sqrt(0.6);posgp[2]=0.0;posgp[3]=sqrt(0.6);/*Theweightofgausspoint*/weigp[1]=5.0/9.0;weigp[2]=8.0/9.0;weigp[3]=5.0/9.0;/*Theinitialloadofelement*/for(i=1;i<=nelem;i++)nload[i]=0.0;for(i=1;i<=number;i++)/*Theinitialvalueofequalnodeload*/for(i=1;i<=16;i++)eload[i]=0;scanf("%d",&nedge);for(iedge=1;iedge<=nedge;iedge++){for(i=1;i<=3;i++)scanf("%f%f",&sgmar,&tau);/*ifsgmar=0,inputnodeloadq(1,2,3)andt(1,2,3)*/if((fabs(sgmar)<1e-8)&&(fabs(tau)<1e-8))for(j=1;j<=3;j++)for(i=1;i<=2;i++)scanf("%f",&press[j][i]);elsefor(i=1;i<=3;i++){press[i][1]=sgmar;press[i][2]=tau;}/*Thecoordinateoftheloadnode*/for(i=1;i<=3;i++){/*inputloadnode*/printf("inputnodeloadnumber\n");scanf("%d",&noprs[i]);lnode=noprs[i];for(j=1;j<=2;j++)coord[j][lnode]=node[lnode].cor[j];elcod[j][i]=coord[j][lnode];}t=-1.0;for(igaus=1;igaus<=3;igaus++){s=posgp[igaus];sfr(s,t);for(j=1;j<=2;j++){pgash[j]=0.0;dgash[j]=0.0;/*currentpointq,tandthevalueofderiv*/{pgash[j]=pgash[j]+press[i][j]*shape[i];dgash[j]=dgash[j]+elcod[j][i]*deriv[1][i];}}dvolu=weigp[igaus];pxcom=dgash[1]*pgash[2]-dgash[2]*pgash[1];pycom=dgash[1]*pgash[1]+dgash[2]*pgash[2];for(i=1;i<=8;i++){nloca=lnods[i][ielem];if(nloca==noprs[1]){j=i+2;break;}}j=i+2;kount=0;for(k=i;k<=j;k++){kount=kount+1;n=(k-1)*2+1;m=n+1;/*ifthelocalnodenumner>8,thenitis1*/if(k>8){n=1;m=2;}/*sumtogettheequalnodeload*/eload[n]=eload[n]+shape[kount]*pxcom*dvolu;eload[m]=eload[m]+shape[kount]*pycom*dvolu;}}}print("Theelementloadmatrxis/n");for(i=1;i<=16;i++)printf("%f\n",eload[i]);}/*Toformglobalstiffnessmatrixandloadmatrix*/voidasem(){floatv[1],a[1];floatlnods[8][1],ifpre[1],nload[1],maxa[1];floatncodf[2],estif[136],eload[16];floatdlarge,x;intipoin,kmin,lnode,khigh,kdofn,nn,nnm,nwk,iwk,in;intinodi,inode,icodf,idofn,ievab,icoln,jnode,lnodj,jdofn,jevab,jrow,ldis,lnodi;maxa[1]=1;for(ipoin=1;ipoin<=npoin;ipoin++){kmin=npoin+1;for(ielem=1;ielem<=nelem;ielem++)for(i=1;i<=8;i++){lnode=lnods[i][ielem];if(lnode==ipoin)break;}for(i=1;i<=8;i++){lnode=lnods[i][ielem];if(lnode>=kmin)break;}kmin=lnode;khigh=(ipoin-1)*2+j+1;for(j=1;j<=2;j++){kdofn=(ipoin-1)*2+j+1;maxa[kdofn]=maxa[kdofn-1]+khigh+j;}}nn=npoin*2;nnm=nn+1;nwk=maxa[nnm]-1;printf("Thesumis%d\n",nwk);for(iwk=1;iwk<=nwk;iwk++)a[iwk]=0.0;for(in=1;in<=nn;nn++)v[in]=0.0;dlarge=1.0e+15;for(ielem=1;ielem<=nelem;ielem++){printf("Thenumberofelementis%d\n",ielem);for(inode=1;inode<=8;inode++){inodi=lnods[inode][ielem];icodf=ifpre[lnodi];ncodf[1]=icodf/10;ncodf[2]=icodf-ncodf[1]*10;for(idofn=1;idofn<=2;idofn++){ievab=(inode-1)*2+idofn;icoln=(lnodi-1)*2+idofn;for(jnode=1;jnode<=8;jnode++){lnodj=lnods[jnode][ielem];for(jdofn=1;jdofn<=2;jdofn++){jevab=(jnode-1)*2+jdofn;jrow=(lnodj-1)*2+jnode;if(jrow>icoln)break;if(jevab>ievab)kevab=jevab*(jevab-1)/2+ievab;elsekevab=ievab*(ievab-1)/2+jevab;ldis=maxa[icoln]+(icoln-jrow);a[ldis]=a[ldis]+estif[kevab];}}if(nload[ielem]>0)v[icoln]=v[icoln]+eload[ievab];if(ncodf[idofn]==0)break;kevab=ievab*(ievab+1)/2;ldis=maxa[icoln];a[ldis]=a[ldis]+dlarge*estif[kevab];}}}printf("Entergiveddisplacement\n");for(i=1;i<=npoin;i++){icodf=ifpre[i];ncodf[1]=icodf/10;ncodf[2]=icodf-ncodf[1]*10;for(j=1;j<=2;j++){if(ncodf[j]==2)scanf("%f",&x);icoln=(i-1)*2+j;v[icoln]=a[ldis]*x;}}}/*Tosolvetheequation*/voidsolve(){floatv[1],a[1],maxa[1];intnpoin,nelem,ntype,nmats;intl,k,nn,nnm,nwk,n,ku,kl,kh,kn;floatic,b,c,klt,ki,nd,kk,m1,m2,kul;nn=npoin*2;nnm=nn+1;for(n=1;n<=nn;n++){kn=maxa[n];kl=kn+1;ku=maxa[n+1]-1;kh=ku-kl;if(kh<0)if(a[kn]<=0){printf("*****Stoprun!Coefficientmatrixisnotillegal!*****Non+positivepivotforequation%d,pivot=%f\n",n,a[kn]);break;}elseif(kh==0){k=n;b=0.0;for(kk=kl;kk<=ku;kk++){k=k-1;ki=maxa[k];c=a[kk]/a[ki];b=b+c*a[kk];a[kk]=c;a[kn]=a[kn]-b;}if(kh>0){k=n-kh;ic=0;klt=ku;for(j=1;j<=kh;j++){ic=ic+1;klt=klt-1;ki=maxa[k];nd=maxa[k+1]-ki-1;if(nd<=0)k=k+1;c=0;for(l=1;l<=kk;l++){m1=ki+l;m2=klt+l;c=c+a[m1]*a[m2];}}printf("Reduceright--hand--sideloadvector\n");for(n=1;n<=nn;n++){kl=maxa[n]+1;ku=maxa[n+1]-1;kul=ku-kl;if(kul>=0){k=n;c=0.0;for(kk=kl;kk<=ku;kk++){k=k-1;c=c+a[kk]*v[k];v[n]=v[n]-c;}}}printf("Back--substitute\n");for(n=1;n<=nn;n++){k=maxa[n];v[n]=v[n]/a[k];}if(nn!=1){n=nn;for(l=2;l<=nn;l++){kl=maxa[n]+1;ku=maxa[n+1]-1;kul=ku-kl;if(kul>=0){k=n;for(kk=kl;kk<=ku;kk++){k=k-1;v[k]=v[k]-a[kk]*v[n];}}n=n-1;}printf("Outputdisplacement\n");printf("xdirection,ydirection\n");m2=0;for(i=1;i<=npoin;i++){m1=m2+1;m2=m1+1;printf("Thenumberofgausspointis%d,%16.5e%16.5e\n",i,v[m1],v[m2]);}}}}}/*Togetelementstress*//*voidstre()*/{floatv[1],lnods[8][500];floatposgp[3],elcod[2][8],eldis[16],be[3],s[3],sp[2];intievab,mdofn,ldofn,l,lnode;flo
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年中国成套工具市场调查研究报告
- 2025年中国快速镀铬光亮剂数据监测报告
- 分享设计师考试中的重点资源整合经验试题及答案
- 化妆品行业中的区块链技术应用及挑战
- 2025年中国强光/照明防身器市场调查研究报告
- 2025年中国引出棒数据监测报告
- 2025年中国建筑装饰品市场调查研究报告
- 2024年机械工程师资格证的教学改革探讨及试题及答案
- 2025年中国常压连续喷淋杀菌机数据监测报告
- 2025年中国布沙发数据监测研究报告
- 无人机失控应急事件处置预案
- 驻厂协议书模板
- 树木清除合同协议
- 2024年韶关市始兴县事业单位招聘工作人员笔试真题
- 安徽省皖南八校2024-2025学年高一下学期4月期中考试数学试题
- 国家发展改革委低空经济司
- 单位体检协议书模板合同
- 委托律师签署协议书
- 图文工厂转让协议书
- 货物贸易的居间合同
- 2025-2030中国疗养院行业市场深度分析及前景趋势与投资研究报告
评论
0/150
提交评论