|
#include "StdAfx.h"
#include<math.h>
#include "Functions.h"
#define PI 3.14159265358979
//已知夹杂的泊松比及长径比求Eshelby张量各分量
void Eshelby(double v,double a,double (*E)[3][3][3])
{
ASSERT(E!=NULL);
ASSERT(v>0&&v<1);
int i,j,k,l;
float g=0,h=0,s=0;
memset(&E[0][0][0][0],0,3*3*3*3*sizeof(double));
s=pow(a,2);
h=log(a+sqrt(s-1));
g=(s*sqrt(s-1)-a*h)/pow(s-1,1.5);
E[0][0][0][0]=((1-2*v+(3*s-1)/(s-1))-(1-2*v+(3*s)/(s-1))*g)/(2*(1-v));
E[1][1][1][1]=E[2][2][2][2]=((3*s)/(8*(1-v)*(s-1))+(1-2*v-9/(4*(s-1)))*g)/(4*(1-v));
E[1][1][2][2]=E[2][2][1][1]=(s/(2*(s-1))-(1-2*v+9/(4*(s-1)))*g)/(4*(1-v));
E[1][1][0][0]=E[2][2][0][0]=((2*s)/(s-1)+((3*s)/(s-1)-(1-2*v))*g)/(4*(1-v));
E[1][2][1][2]=E[2][1][2][1]=(s/(2*(s-1))-((1-2*v+3/(4*(s-1)))*g))/(4*(1-v));
E[0][1][0][1]=E[0][2][0][2]=(1-2*v-((s+1)/(s-1))-0.5*(1-2*v+(3*(s+1)/(s-1)))*g)/(4*(1-v));
for (i=0;i<3;i++)
for (j=0;j<3;j++)
for (k=0;k<3;k++)
for (l=0;l<3;l++)
cout<<"The Eshelby tensor E["<<i<<"]["<<j<<"]["<<k<<"]["<<l<<"]="<<E[i][j][k][l]<<endl;
}
void Run()
{
double v0,v1,a,E0,E1,c,u0,u1,x0,x1;
double E11,E22,u12,u23,v12;
v0 =0;
u1 =0;
x0=0;
x1=0;
E11=0;
E22=0;
u12=0;
u23=0;
v12=0; v0=0.38;//基体泊松比
v1=0.2;//纤维泊松比
E0=1000000;//基体杨氏模量
E1=30000000;//纤维杨氏模量
a=100000;//纤维长径比
c=0.2;//体积百分含量
//将杨氏模量及泊松比转换成拉梅常数x与u
x0=v0*E0/((1+v0)*(1-2*v0));
cerr<<x0<<endl;
x1=v1*E1/((1+v1)*(1-2*v1));
cerr<<x1<<endl;
ASSERT(v0!=NULL);
u0=E0/(2*(1+v0));
cerr<<u0<<endl;
u1=E1/(2*(1+v1));
cerr<<u1<<endl;
double (*E)[3][3][3] = new double[3][3][3][3];
Eshelby(v0,a,E);
double D1=0,D2=0,D3=0,B1=0,B2=0,B3=0,B4=0,B5=0,A1=0,A2=0,A3=0,A4=0,A5=0,A=0;
D1=1+2*(u1-u0)/(x1-x0);
cerr<<D1<<endl;
D2=(x0+2*u0)/(x1-x0);
cerr<<D2<<endl;
D3=x0/(x1-x0);
cerr<<D3<<endl;
B1=c*D1+D2+(1-c)*(D1*E[0][0][0][0]+2*E[1][1][0][0]);
cerr<<B1<<endl;
B2=c+D3+(1-c)*(D1*E[0][0][1][1]+E[1][1][1][1]+E[1][1][2][2]);
cerr<<B2<<endl;
B3=c+D3+(1-c)*(E[0][0][0][0]+(1+D1)*E[1][1][0][0]);
cerr<<B3<<endl;
B4=c*D1+D2+(1-c)*(E[0][0][1][1]+D1*E[1][1][1][1]+E[1][1][2][2]);
cerr<<B4<<endl;
B5=c+D3+(1-c)*(E[0][0][1][1]+E[1][1][1][1]+D1*E[1][1][2][2]);
cerr<<B5<<endl;
A1=D1*(B4+B5)-2*B2;
cerr<<A1<<endl;
A2=(1+D1)*B2-(B4+B5);
cerr<<A2<<endl;
A3=B1-D1*B3;
cerr<<A3<<endl;
A4=(1+D1)*B1-2*B3;
cerr<<A4<<endl;
A5=(1-D1)/(B4-B5);
cerr<<A5<<endl;
A=2*B2*B3-B1*(B4+B5);
cerr<<A<<endl;
//计算复合材料等效弹性模量
E11=E0/(1+c*(A1+2*v0*A2)/A);//计算纵向杨氏模量
E22=E0/(1+c*((1-v0)*A4+(1+v0)*A5*A-2*v0*A3)/(2*A));//横向杨氏模量
u12=u0+(c*u0)/(u0/(u1-u0)+2*(1-c)*E[0][1][0][1]);//面内剪切模量
u23=u0+(c*u0)/(u0/(u1-u0)+2*(1-c)*E[1][2][1][2]);//面外剪切模量
v12=(v0*A-c*(A3-v0*A4))/(A+c*(A1+2*v0*A2));//主泊松比
cout<<"纵向杨氏模量 E11="<<E11<<endl;
cout<<"横向杨氏模量 E22="<<E22<<endl;
cout<<"面内剪切模量 u12="<<u12<<endl;
cout<<"面外剪切模量 u23="<<u23<<endl;
cout<<"主泊松比 v12="<<v12<<endl;
delete []E;
}
上面是我的程序,大家帮我看看 |
|