⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 soilbeam.cpp

📁 Finite element program for mechanical problem. It can solve various problem in solid problem
💻 CPP
📖 第 1 页 / 共 2 页
字号:
  //  transformation of stiffness matrix to the global system  lgmatrixtransf3dblock (sm,tran);  //  transformation of stiffness matrix to the nodal system  transf = Mt->locsystems (nodes);  if (transf>0){    matrix tmat (ndofe,ndofe);    transf_matrix (nodes,tmat);    glmatrixtransf (sm,tmat);  }//  fprintf (Out,"\n\n MT prvek soil cislo %ld",eid);//  for (i=0;i<ndofe;i++){//   fprintf (Out,"\n %4ld",i);//   for (int j=0;j<ndofe;j++){//    fprintf (Out," %15.5e",sm[i][i]);//   }//  }//  fprintf (Out,"\n\n MT v MT Soilbeam cislo %ld \n",eid);//  for (i=0;i<3;i++){fprintf (Out," %15.5e",c1[i]);}//  for (i=0;i<3;i++){fprintf (Out," %15.5e",c2[i]);}}void soilbeam::strains (long lcid,long eid,long ri,long ci){  long ipp,i,j,ij,transf;  double dl;  ivector cn(ndofe),nodes(nne);  vector x(nne),y(nne),z(nne),vec(3),rl(ndofe),rg(ndofe),eps(6);  matrix tran(3,3);  // r  .... end forces last time// m  .... dl(i)/dl(i-1)  ipp=Mt->elements[eid].ipp[ri][ci];  Mt->give_elemnodes (eid,nodes);  Mt->give_node_coord3d (x,y,z,eid);  Mt->give_code_numbers (eid,cn.a);  eldispl (lcid,eid,rl.a,cn.a,ndofe);  Mc->give_vectorlcs (eid, vec);  beam_transf_matrix (tran,dl, vec,x,y,z,eid);    //  transformation of displacement vector  transf = Mt->locsystems (nodes);  if (transf>0){    matrix tmat (ndofe,ndofe);    transf_matrix (nodes,tmat);    //locglobtransf (rg,rl,tmat);    lgvectortransf (rg,rl,tmat);  }  else{    copyv (rl,rg);  }// *** transf. from gcs to lcs//  globloctransf (rg,rl,tran);     ij=0;  for (i=0;i<intordsm[0][0];i++){    for (j=0;j<6;j++){        eps[j]=rl[ij];	  ij++;	}//  fprintf (Out,"\n\n kontrola deformaci v soilbeam zapis,%ld \n",ipp);//  for (long j=0;j<eps.n;j++){fprintf (Out," %15.5e",eps[j]);}    Mm->storestrain(lcid,ipp,eps);	ipp++;  }}	  void soilbeam::res_internal_forces (long lcid,long eid,vector &ifor){   internal_forces (lcid, eid, 0, 0, ifor);}/**   function computes internal forces      @param lcid - load case id   @param eid - element id   @param ri,ci - row and column indices   @param ifor - vector of internal forces      20.12.2002*/void soilbeam::internal_forces (long lcid,long eid,long ri,long ci,vector &ifor){  long ipp,imat,i,j,k;  double dl,ll,a2,a4,ixyz[3],beta[2],a,e,g,gy,gz,g2;  ivector nodes(nne);  vector x(nne),y(nne),z(nne),vec(3),rl(ndofe),rg(ndofe),f(ndofe),eps(6);  matrix d(tncomp,tncomp),c(tncomp,tncomp),tran(3,3),r(2,ndofe);    Mt->give_elemnodes (eid,nodes);  Mt->give_node_coord3d (x,y,z,eid);    ipp=Mt->elements[eid].ipp[ri][ci];  imat=Mm->ip[ipp].idm[Mm->ip[ipp].gemid()];  Mm->matstiff (c,ipp);  Mc->give_area (eid,a);  Mc->give_mominer (eid,ixyz);  Mc->give_shearcoeff (eid,beta);  Mc->give_vectorlcs (eid, vec);  beam_transf_matrix (tran,dl, vec,x,y,z,eid);  e=Mm->eliso[imat].e;  g=e/(1.+2.*Mm->eliso[imat].nu);//  Mm->elmatstiff (d,ipp);//  e=d[0][0];  g=d[1][1];   c1[0]=c[0][0];  c1[1]=c[1][1];  c1[2]=c[2][2];  c2[0]=c[3][3];  c2[1]=c[4][4];  c2[2]=c[5][5];  k=0;  for (i=0;i<intordsm[0][0];i++){      Mm->computenlstresses (ipp);    Mm->givestress (lcid,ipp,eps);    for (j=0;j<6;j++){  rl[k]=eps[j]; k++;}	ipp++;  }    ll=dl*dl;  f[0]= c1[0]*dl/3*rl[0]+ c1[0]*dl/6*rl[6];   f[6]= c1[0]*dl/6*rl[0]+ c1[0]*dl/3*rl[6];   g2=(c2[1]+c2[2])/2.;  a2=bPod*bPod/2*( (c1[1]+c1[2])/2.*bPod/6.+sqrt((c1[1]+c1[2])/2.*g2) );  a4=bPod*bPod/2*( (c1[1]+c1[2])/2.*bPod/6.+sqrt(g2*g2*g2/((c1[1]+c1[2])/2.)) );  f[3]=  (a2/3.*dl+a4/dl)*rl[3]+(a2/6.*dl-a4/dl)*rl(9);  f[9]=  (a2/6.*dl-a4/dl)*rl[3]+(a2/3.*dl+a4/dl)*rl(9);  //  direct s Iy  if(beta[0]<Mp->zero) gy=0.0;  else                 gy=6.0*e*ixyz[1]/beta[0]/g/a/ll;//  direct s Iz  if(beta[1]<Mp->zero) gz=0.;  else                 gz=6.0*e*ixyz[2]/beta[1]/g/a/ll;//  direct s Iy  g2=gy*gy;  a2=bPod*(c1[2]+sqrt(c1[2]*c2[2])*2./bPod)*dl/(1.+2.*gy)/(1.+2.*gy);  a4=bPod*(c2[2]+sqrt(c2[2]*c2[2]*c2[2]/c1[2])/bPod);//  a4=0.0;  f[2] =   (a2*(4.*g2/3.+1.4*gy+13./35.)+a4*4*(g2+gy+0.3))*rl[2]	      +(a2*(2./3.*g2+0.6*gy+9./70.)-a4*4*(g2+gy+0.3))*rl[8]	      -(a2*(g2/6.+11.*gy/60.+11./210.)+a4/10.)*dl*rl[4]	      +(a2*(g2+0.9*gy+13./70.)/6.-a4/10. )*dl*rl[10];//  f[4] = -a2*( (g2/6.+11.*gy/60.+11./210.)*rl[2]+(g2+0.9*gy+13./70.)/6.*rl[8] )*dl//	     -a4/10.*(rl[4]-rl[10])*dl;  f[4] = -(a2*(g2/6.+11.*gy/60.+11./210.)+ a4/10. )*dl*rl[2]         +(a2*(g2/30.+gy/30.+1./105.)+a4*(g2+gy+0.4)/3.)*ll*rl[4]         -(a2*(g2+0.9*gy+13./70.)/6.-a4/10. )*dl*rl[8]         -(a2*(g2/30.+gy/30.+1./140.)+a4*(g2+gy+0.1)/3.)*ll*rl[10];  f[8] =   (a2*(2./3.*g2+0.6*gy+9./70.)-a4*4*(g2+gy+0.3))*rl[2]	      +(a2*(4.*g2/3.+1.4*gy+13./35.)+a4*4*(g2+gy+0.3))*rl[8]	      -(a2*(g2+0.9*gy+13./70.)/6.-a4/10.)*dl*rl[4]		  +(a2*(g2/6.+11.*gy/60.+11./210.)+ a4/10. )*dl*rl[10];//  f[10]=  a2*( (g2+0.9*gy+13./70.)/6.*rl[2]+(g2/6.+11.*gy/60.+11./210.)*rl[8] )*dl//	     +a4/10.*(rl[4]-rl[10])*dl;  f[10]= +(a2*(g2+0.9*gy+13./70.)/6.-a4/10. )*dl*rl[2]         -(a2*(g2/30.+gy/30.+1./140.)+a4*(g2+gy+0.1)/3.)*ll*rl[4]		 +(a2*(g2/6.+11.*gy/60.+11./210.)+ a4/10. )*dl*rl[8]                +(a2*(g2/30.+gy/30.+1./105.)+a4*(g2+gy+0.4)/3.)*ll*rl[10];//  direct s Iz  g2=gz*gz;  a2=bPod*(c1[1]+sqrt(c1[1]*c2[1])*2./bPod)*dl/(1.+2.*gz)/(1.+2.*gz);  a4=bPod*(c2[1]+sqrt(c2[1]*c2[1]*c2[1]/c1[1])/bPod);//  a4=0.0;//  f[1] =  a2*( (4.*g2/3.+1.4*gz+13./35.)*rl[1]+(2./3.*g2+0.6*gz+9./70.)*rl[7] )//	     +a4*4.*(g2+gz+.3)*(rl[5]-rl[11]);  f[1] =   (a2*(4.*g2/3.+1.4*gz+13./35.)+a4*4*(g2+gz+0.3))*rl[1]	      +(a2*(2./3.*g2+0.6*gz+9./70.)-a4*4*(g2+gz+0.3))*rl[7]	      -(a2*(g2/6.+11.*gz/60.+11./210.)+a4/10.)*dl*rl[5]	      +(a2*(g2+0.9*gz+13./70.)/6.-a4/10. )*dl*rl[11];//  f[5] =  a2*( (g2/6.+11.*gz/60.+11./210.)*rl[1]+(g2+0.9*gz+13./70.)/6.*rl[7] )*dl//	     +a4/10.*(rl[5]-rl[11])*dl;  f[5] = -(a2*(g2/6.+11.*gz/60.+11./210.)+ a4/10. )*dl*rl[1]         +(a2*(g2/30.+gz/30.+1./105.)+a4*(g2+gz+0.4)/3.)*ll*rl[5]         -(a2*(g2+0.9*gz+13./70.)/6.-a4/10. )*dl*rl[7]         -(a2*(g2/30.+gz/30.+1./140.)+a4*(g2+gz+0.1)/3.)*ll*rl[11];//  f[7] =  a2*( (2./3.*g2+0.6*gz+9./70.)*rl[1]+(4.*g2/3.+1.4*gz+13./35.)*rl[7] )//	     -a4*4.*(g2+gz+.3)*(rl[5]-rl[11]);  f[7] =   (a2*(2./3.*g2+0.6*gz+9./70.)-a4*4*(g2+gz+0.3))*rl[1]	      +(a2*(4.*g2/3.+1.4*gz+13./35.)+a4*4*(g2+gz+0.3))*rl[7]	      -(a2*(g2+0.9*gz+13./70.)/6.-a4/10.)*dl*rl[5]		  +(a2*(g2/6.+11.*gz/60.+11./210.)+ a4/10. )*dl*rl[11];//		  -(a2*(g2/6.+11.*gz/60.+11./210.)+a4/10.)*(rl[5]-rl[11]);//  f[11]= -a2*( (g2+0.9*gz+13./70.)/6.*rl[1]+(g2/6.+11.*gz/60.+11./210.)*rl[7] )*dl//	     -a4/10.*(rl[5]-rl[11])*dl;  f[11]= +(a2*(g2+0.9*gz+13./70.)/6.-a4/10. )*dl*rl[1]         -(a2*(g2/30.+gz/30.+1./140.)+a4*(g2+gz+0.1)/3.)*ll*rl[5]		 +(a2*(g2/6.+11.*gz/60.+11./210.)+ a4/10. )*dl*rl[7]                +(a2*(g2/30.+gz/30.+1./105.)+a4*(g2+gz+0.4)/3.)*ll*rl[11];// do GCS z LCS  glvectortransf3dblock (f, tran);  for (k=0;k<ndofe;k++){    ifor[k]+=f[k];  }//  fprintf (Out,"\n\n R prvek Soilbeam cislo %ld \n",eid);//  for (k=0;k<ndofe;k++){fprintf (Out," %15.5e",rl[k]);}//  fprintf (Out,"\n\n Fint prvek Soilbeam cislo %ld \n",eid);//  for (k=0;k<ndofe;k++){fprintf (Out," %15.5e",f[k]);}//  fprintf (Out,"\n\n MT v Soilbeam cislo %ld \n",eid);//  for (k=0;k<3;k++){fprintf (Out," %15.5e",c1[k]);}//  for (k=0;k<3;k++){fprintf (Out," %15.5e",c2[k]);}}void soilbeam::internal_forces1 (long lcid,long eid,long ri,long ci,vector &ifor){  long i,j,k,integr=2,ipp;  double dl,ll,a,ixyz[3],beta[2],g2,gy,gz,a2x,a2y,a2z,e,g,s;  ivector cn(ndofe),nodes(nne);  vector x(nne),y(nne),z(nne),vec(3),rl(ndofe),rg(ndofe),f(ndofe),fx(tncomp),w(integr),gp(integr),eps(6);  matrix n(tncomp,ndofe),c(tncomp,tncomp),d(tncomp,tncomp),tran(3,3),r(tncomp,2);    Mt->give_elemnodes (eid,nodes);  Mt->give_node_coord3d (x,y,z,eid);    ipp=Mt->elements[eid].ipp[ri][ci];  Mm->matstiff (c,ipp);  Mm->elmatstiff (d,ipp);  Mc->give_area (eid,a);  Mc->give_mominer (eid,ixyz);  Mc->give_shearcoeff (eid,beta);  Mc->give_vectorlcs (eid, vec);  beam_transf_matrix (tran,dl, vec,x,y,z,eid);  e=d[0][0];  g=d[1][1]; ll=dl*dl;  c1[0]=c[0][0];  c1[1]=c[1][1];  c1[2]=c[2][2];  c2[0]=c[3][3];  c2[1]=c[4][4];  c2[2]=c[5][5];  k=0;  for (i=0;i<intordsm[0][0];i++){      Mm->computenlstresses (ipp);    Mm->givestress (lcid,ipp,eps);    for (j=0;j<6;j++){      rl[k]=eps[j];	 k++; }	ipp++;  }  //  direct s Iy  if(beta[0]<Mp->zero) gy=0.0;  else                 gy=6.0*e*ixyz[1]/beta[0]/g/a/ll;//  direct s Iz  if(beta[1]<Mp->zero) gz=0.;  else                 gz=6.0*e*ixyz[2]/beta[1]/g/a/ll;  g2=(c2[1]+c2[2])/2.;  a2x=bPod*bPod/2*( (c1[1]+c1[2])/2.*bPod/6.+sqrt((c1[1]+c1[2])/2.*g2) );  g2=gy*gy;  a2y=bPod*(c1[2]+sqrt(c1[2]*c2[2])*2./bPod)*dl/(1.+2.*gy)/(1.+2.*gy);  g2=gz*gz;  a2z=bPod*(c1[1]+sqrt(c1[1]*c2[1])*2./bPod)*dl/(1.+2.*gz)/(1.+2.*gz);//	 s=x/dl     s=0.;   for (i=0;i<2;i++){     geom_matrix (n,s, dl, gy, gz);     fx[0]=( n[0][0]*rl[0]+n[0][6]*rl[6] )*c1[0];     fx[3]=( n[3][3]*rl[3]+n[3][9]*rl[9] )*a2x;     fx[1]=( n[1][1]*rl[1]+n[1][5]*rl[5]+n[1][7]*rl[7]+n[1][11]*rl[11] )*a2y;     fx[5]=( n[5][1]*rl[1]+n[5][5]*rl[5]+n[5][7]*rl[7]+n[5][11]*rl[11] )*a2y;     fx[2]=( n[2][2]*rl[2]+n[2][4]*rl[4]+n[2][8]*rl[8]+n[2][10]*rl[10] )*a2z;     fx[4]=( n[4][2]*rl[2]+n[4][4]*rl[4]+n[4][8]*rl[8]+n[4][10]*rl[10] )*a2z;	 s=dl;  }//  fprintf (Out,"\n\n R prvek beam cislo %ld\n",eid);//  for (k=0;k<ndofe;k++){fprintf (Out," %15.5e",rl[k]); }//  fprintf (Out,"\n\n Fint prvek cislo %ld\n",eid);//  for (k=0;k<ndofe;k++){fprintf (Out," %15.5e",f[k]);}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -