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

📄 beamgen3d.cpp

📁 Finite element program for mechanical problem. It can solve various problem in solid problem
💻 CPP
📖 第 1 页 / 共 3 页
字号:
  vector x(nne),y(nne),z(nne),vec(3),d(ndofe),f(ndofe);  matrix tm(3,3);    //  code numbers on element  Mt->give_code_numbers (eid,cn.a);    //  nodal displacements and rotations  eldispl (lcid,eid,d.a,cn.a,ndofe);    //  element node numbers  Mt->give_elemnodes (eid,nodes);  //  transformation from nodal to global coordinate system  transf = Mt->locsystems (nodes);  if (transf>0){    matrix tmat (ndofe,ndofe);    //  assembling of transformation matrix    transf_matrix (nodes,tmat);    //  transformation of nodal displacements and rotations    mtxv (tmat,d,f);    copyv (f,d);  }  //  nodal coordinates  Mt->give_node_coord3d (x,y,z,eid);    //  vector of z-axis  Mc->give_vectorlcs (eid,vec);    //  assembling of transformation matrix from global to local coordinate system  beam_transf_matrix (tm,l,vec,x,y,z,eid);    //  transformation from global to local coordinate system//   !!!zmenit   glvectortransf3dblock (d,tm);  //  number of integration point  ii=Mt->elements[eid].ipp[0][0];      Mm->storestrain (lcid,ii,0,7,d);  Mm->storestrain (lcid,ii+1,7,7,d); }/**   function computes nodal forces and moments expressed in local coodinate system   this is equivalent to functions computing stresses   nodal forces and moments are better quantities in case of beams   x-axis goes through the beam   z-axis is defined in cross section   y-axis is defined by right hand orientation      @param eid - element id   @param lcid - load case id      JK, 20.2.2002, revised 2.9.2006*/void beamgen3d::nodal_forces (long eid,long lcid){  long ii,j,transf;  double l;  ivector nodes(nne),cn(ndofe);  vector x(nne),y(nne),z(nne),vec(3),d(ndofe),f(ndofe);  matrix sm(ndofe,ndofe),tm(3,3);    //  code numbers on element  Mt->give_code_numbers (eid,cn.a);    //  nodal displacements and rotations  eldispl (lcid,eid,d.a,cn.a,ndofe);    //  assembling of stiffness matrix  stiffness_matrix (eid,0,0,sm);    //  computation of nodal forces and moments   mxv (sm,d,f); 	fprintf (Out,"\n\n MT prvek beam cislo %ld",lcid);	fprintf (Out," \n u, v, w, fx, fy, fz, o  \n ");	for (j=0;j<ndofe;j++){		fprintf (Out," %15.5e",d[j]);    }	fprintf (Out," \n N,  Vy,  Vz, Mx, My, Mz, B,\n ");	for (j=0;j<ndofe;j++){		fprintf (Out," %15.5e",f[j]);    }   //  element node numbers  Mt->give_elemnodes (eid,nodes);  //  transformation from nodal to global coordinate system  transf = Mt->locsystems (nodes);  if (transf>0){    matrix tmat (ndofe,ndofe);    //  assembling of transformation matrix    transf_matrix (nodes,tmat);    //  transformation of nodal forces and moments    mtxv (tmat,f,d);    copyv (d,f);  }    //  nodal coordinates  Mt->give_node_coord3d (x,y,z,eid);    //  vector of z-axis  Mc->give_vectorlcs (eid,vec);    //  assembling of transformation matrix from global to local coordinate system  beam_transf_matrix (tm,l,vec,x,y,z,eid);  internal_forces (lcid, eid, 0, 0, f);  //  transformation from global to local coordinate system  //glvectortransf3dblock (f,tm);    //  number of integration point  ii=Mt->elements[eid].ipp[0][0];    //  storage of nodal forces and moments  //  nodal forces and moments are expressed in local coordinate system  Mm->storestress (lcid,ii,0,6,f);  Mm->storestress (lcid,ii+1,6,6,f);    }/**   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      PF 20.9.2006*/void beamgen3d::res_internal_forces (long lcid,long eid,vector &ifor){   internal_forces1 (lcid, eid, 0, 0, ifor);}// *******************************************************//     TORSION - Forcesvoid beamgen3d::internal_forces (long lcid,long eid,long ri,long ci,vector &ifor){  long i,j,integr=2,ipp,transf;  double dl,ll,a,ixyz[3],ioyz[3],beta[2],gy,gz,kakr,e,g;  double eh,ehx,ajy,ajz,ajk,xs, s,c;  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);  vector dderno(4),dderny(4),ddernz(4);  matrix n(tncomp,ndofe),d(tncomp,tncomp),tran(3,3),r(tncomp,2);  matrix bb(tncomp,ndofe), ck(4,4);  // r  .... end forces last time// m  .... dl(i)/dl(i-1)  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);  ll=dl*dl;// r  .... end forces last time// m  .... dl(i)/dl(i-1)  fillm (0.0,r);  //  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);//  stiffness_matrix (eid,ri,ci,sm);//  mxv (sm,r,contr);  ipp=Mt->elements[eid].ipp[0][0];  Mm->matstiff (d,ipp);  Mc->give_area (eid,a);  Mc->give_mominer (eid,ixyz);  Mc->give_shearcoeff (eid,beta);  // vysecovy Io, Ioy, Ioz//!!!  Mc->give_iomega (eid,ioyz);  ioyz[0]=4.2692e-6 ; ioyz[1]=-2.6687e-5;  ioyz[2]=0.0; ixyz[0]=2.646e-7; ixyz[1]=2.135e-4; ixyz[2]=3.333e-5;   ioyz[0]=1.1924e-6 ; ioyz[1]=0.0;  ioyz[2]=7.5625e-6; ixyz[0]=2.333e-7; ixyz[1]=3.048e-5; ixyz[2]=6.25e-5; //  ioyz[0]=1.1924e-6 ; ioyz[1]=7.5625e-6;  ioyz[2]=0.0;  ixyz[0]=2.333e-7; ixyz[1]=6.25e-5; ixyz[2]=3.048e-5; //  ioyz[0]=0.2773e-6 ; ioyz[1]=0.0;  ioyz[2]=0.0;//  ioyz[0]=1. ; ioyz[1]=0.;  ioyz[2]=10.0; ixyz[0]=1.; ixyz[1]=10.; ixyz[2]=1.;  e=d[0][0];  g=d[1][1];//  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;    gy=0.; gz=0.; 	kakr=0.;  eh=pow(g*ixyz[0]/e/ioyz[0],0.5); //  eh=1.;   eh=eh*dl;   s=sinh(eh); c=cosh(eh);  eh=eh/dl;   ck_matrix (ck,  s,c,eh,dl);  xs=0.0;  for (i=0;i<2;i++){    ehx=eh*xs*dl;    s=sinh(ehx); c=cosh(ehx);//    Vnitrni sily   N, My, Mz, B , Mvaz,  Mvol    bb[0][0]=-e*a/dl;    bb[0][7]= e*a/dl;//        BB(i,4/7/11/14)=  e*pru(10+i)*eh*eh*(CK(i,3)*C+CK(i,4)*S)    ajy= (1.+2.*gy); ajz= (1.+2.*gz); ajk= (1.+2.*kakr);    dderno[0]=(-6.+12.*xs)/ll;  dderno[1]=(-2.*(2.+kakr)+6.*xs)/dl; dderno[2]=( 6.-12.*xs)/ll;  dderno[3]=(-2.*(1.-kakr)+6.*xs)/dl;//    dderno[0]=eh*eh*(ck[0][2]*s+ck[0][3]*c);  dderno[1]=eh*eh*(ck[1][2]*s+ck[1][3]*c); dderno[2]=eh*eh*(ck[2][2]*s+ck[2][3]*c);  dderno[3]=eh*eh*(ck[3][2]*s+ck[3][3]*c);    dderny[0]=(-6.+12.*xs)/ll;  dderny[1]=(-2.*(2.+gy)+6.*xs)/dl;   dderny[2]=( 6.-12.*xs)/ll;  dderny[3]=(-2.*(1.-gy)+6.*xs)/dl;//  ex= - o O'' - y v'' - z w''//  My = Int. z E ex = - E Iy w''- E Ioy O''=  E Iy fiy'- E Ioy O''	bb[1][2]=  -e*ixyz[1]/ajy*dderny[0];    bb[1][3]=  -e*ioyz[1]/ajk*dderno[0];    bb[1][4]=   e*ixyz[1]/ajy*dderny[1];    bb[1][6]=  -e*ioyz[1]/ajk*dderno[1];    bb[1][9]=  -e*ixyz[1]/ajy*dderny[2];    bb[1][10]= -e*ioyz[1]/ajk*dderno[2];    bb[1][11]=  e*ixyz[1]/ajy*dderny[3];    bb[1][13]= -e*ioyz[1]/ajk*dderno[3];// Qz    bb[5][2]=  e*ixyz[1]/ajy*12./ll/dl;    bb[5][3]=  e*ioyz[1]/ajk*12./ll/dl;	bb[5][4]= -e*ixyz[1]/ajy*6./ll;    bb[5][6]=  e*ioyz[1]/ajk*6./ll;    bb[5][9]=  e*ixyz[1]/ajy*(-12.)/ll/dl;    bb[5][10]= e*ioyz[1]/ajk*(-12.)/ll/dl;    bb[5][11]=-e*ixyz[1]/ajy*6./ll;    bb[5][13]= e*ioyz[1]/ajk*6./ll;// Mz=  -Int. y E ex = E Iz v''+ E Ioz O''=  E Iz fiz'+ E Ioy O''    ddernz[0]=(-6.+12.*xs)/ll;  ddernz[1]=(-2.*(2.+gz)+6.*xs)/dl; ddernz[2]=( 6.-12.*xs)/ll;  ddernz[3]=(-2.*(1.-gz)+6.*xs)/dl;    bb[2][1]=  e*ixyz[2]/ajz*ddernz[0];    bb[2][3]=  e*ioyz[2]/ajk*dderno[0];    bb[2][5]=  e*ixyz[2]/ajz*ddernz[1];    bb[2][6]=  e*ioyz[2]/ajk*dderno[1];    bb[2][ 8]= e*ixyz[2]/ajz*ddernz[2];    bb[2][10]= e*ioyz[2]/ajk*dderno[2];    bb[2][12]= e*ixyz[2]/ajz*ddernz[3];    bb[2][13]= e*ioyz[2]/ajk*dderno[3];// Qy    bb[4][1]=  e*ixyz[2]/ajz*12./ll/dl;    bb[4][3]=  e*ioyz[2]/ajk*12./ll/dl;    bb[4][5]=  e*ixyz[2]/ajz*6./ll;    bb[4][6]=  e*ioyz[2]/ajk*6./ll;    bb[4][8] = e*ixyz[2]/ajz*(-12.)/ll/dl;    bb[4][10]= e*ioyz[2]/ajk*(-12.)/ll/dl;    bb[4][12]= e*ixyz[2]/ajz*6./ll;    bb[4][13]= e*ioyz[2]/ajk*6./ll;// B =  Int. o E ex = -E Io O'' - E Ioz v'' - E Ioy w''    bb[3][1]= -e*ioyz[2]/ajz*ddernz[0];//    bb[3][1]= -e*ioyz[2]/ajz*dderno[0];    bb[3][2]= -e*ioyz[1]/ajy*dderny[0];//    bb[3][2]= -e*ioyz[1]/ajy*dderno[0];    bb[3][3]= -e*ioyz[0]*eh*eh*(ck[0][2]*c+ck[0][3]*s);    bb[3][4]=  e*ioyz[1]/ajy*dderny[1];//    bb[3][4]=  e*ioyz[1]/ajy*dderno[1];    bb[3][5]= -e*ioyz[2]/ajz*ddernz[1];//    bb[3][5]= -e*ioyz[2]/ajz*dderno[1];    bb[3][6]= -e*ioyz[0]*eh*eh*(ck[1][2]*c+ck[1][3]*s);    bb[3][8]= -e*ioyz[2]/ajz*ddernz[2];//    bb[3][8]= -e*ioyz[2]/ajz*dderno[2];    bb[3][9]= -e*ioyz[1]/ajy*dderny[2];//    bb[3][9]= -e*ioyz[1]/ajy*dderno[2];    bb[3][10]=-e*ioyz[0]*eh*eh*(ck[2][2]*c+ck[2][3]*s);    bb[3][11]= e*ioyz[1]/ajy*dderny[3];//    bb[3][11]= e*ioyz[1]/ajy*dderno[3];    bb[3][12]=-e*ioyz[2]/ajz*ddernz[3];//    bb[3][12]=-e*ioyz[2]/ajz*dderno[3];    bb[3][13]=-e*ioyz[0]*eh*eh*(ck[3][2]*c+ck[3][3]*s);   //third deriv. +, +, -, + // Mvazane    bb[6][1]= -e*ioyz[2]/ajz*12./ll/dl;    bb[6][2]= -e*ioyz[1]/ajy*12./ll/dl;    bb[6][3]= -e*ioyz[0]*eh*eh*eh*(ck[0][2]*s+ck[0][3]*c);    bb[6][4]=  e*ioyz[1]/ajy*6./ll;    bb[6][5]= -e*ioyz[2]/ajz*6./ll;    bb[6][6]= -e*ioyz[0]*eh*eh*eh*(ck[1][2]*s+ck[1][3]*c);    bb[6][8]= -e*ioyz[2]/ajz*(-12.)/ll/dl;    bb[6][9]= -e*ioyz[1]/ajy*(-12.)/ll/dl;    bb[6][10]=-e*ioyz[0]*eh*eh*eh*(ck[2][2]*s+ck[2][3]*c);    bb[6][11]= e*ioyz[1]/ajy*6./ll;    bb[6][12]=-e*ioyz[2]/ajz*6./ll;    bb[6][13]=-e*ioyz[0]*eh*eh*eh*(ck[3][2]*s+ck[3][3]*c);// Mvolne    bb[7][3]=  g*ixyz[0]*(ck[0][1]+eh*(ck[0][2]*s+ck[0][3]*c));    bb[7][6]=  g*ixyz[0]*(ck[1][1]+eh*(ck[1][2]*s+ck[1][3]*c));    bb[7][10]= g*ixyz[0]*(ck[2][1]+eh*(ck[2][2]*s+ck[2][3]*c));    bb[7][13]= g*ixyz[0]*(ck[3][1]+eh*(ck[3][2]*s+ck[3][3]*c));    mxv (bb,rl,fx);    xs=1.0;	fprintf (Out,"\n\n MT prvek beam cislo %ld",lcid);	fprintf (Out," \n u, v, w, fx, fy, fz, o  \n ");	for (j=0;j<ndofe;j++){		fprintf (Out," %15.5e",rl[j]);    }	fprintf (Out," \n N, My, Mz, B, Vy,  Vz, Mo  Mt\n ");	for (j=0;j<tncomp;j++){		fprintf (Out," %15.5e",fx[j]);    }  }}// *******************************************************//     TORSION - Forcesvoid beamgen3d::internal_forces1 (long lcid,long eid,long ri,long ci,vector &ifor){  long i,j,integr=2,ipp,transf;  double dl,ll,a,ixyz[3],ioyz[3],beta[2],gy,gz,e,g;  double  ajy,ajz,ajk, xs, kakr ;  ivector cn(ndofe),nodes(nne);  vector x(nne),y(nne),z(nne),vec(3),rl(ndofe),rg(ndofe),f(ndofe),w(integr),gp(integr), ddern(4),dderno(4);  vector fx(4);  matrix n(tncomp,ndofe),d(tncomp,tncomp),tran(3,3),r(tncomp,2);  matrix bb(4,ndofe);  // r  .... end forces last time// m  .... dl(i)/dl(i-1)  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);  ll=dl*dl;// r  .... end forces last time// m  .... dl(i)/dl(i-1)  fillm (0.0,r);  //  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);//  stiffness_matrix (eid,ri,ci,sm);//  mxv (sm,r,contr);  ipp=Mt->elements[eid].ipp[0][0];  Mm->matstiff (d,ipp);  Mc->give_area (eid,a);  Mc->give_mominer (eid,ixyz);  Mc->give_shearcoeff (eid,beta);  ioyz[0]=4.2692e-6 ; ioyz[1]=-2.6687e-5;  ioyz[2]=0.0; ixyz[0]=2.646e-7; ixyz[1]=2.135e-4; ixyz[2]=3.333e-5; //  ioyz[0]=1.1924e-6 ; ioyz[1]=0.0;  ioyz[2]=7.5625e-6; ixyz[0]=2.333e-7; ixyz[1]=3.048e-5; ixyz[2]=6.25e-5; //  ioyz[0]=1.1924e-6 ; ioyz[1]=7.5625e-6;  ioyz[2]=0.0;  ixyz[0]=2.333e-7; ixyz[1]=6.25e-5; ixyz[2]=3.048e-5; //  ioyz[0]=0.2773e-6 ; ioyz[1]=0.0;  ioyz[2]=0.0;//  ioyz[0]=1. ; ioyz[1]=0.;  ioyz[2]=10.0; ixyz[0]=1.; ixyz[1]=10.; ixyz[2]=1.;  e=d[0][0];  g=d[1][1];//  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;  gy=0.; gz=0.; kakr=0.;  xs=0.0;  for (i=0;i<2;i++){//    Vnitrni sily   N, My, B, Mz, B    bb[0][0]=-e*a/dl;    bb[0][7]= e*a/dl;    ajy= (1.+2.*gy); ajz= (1.+2.*gz); ajk= (1.+2.*kakr);    dderno[0]=(-6.+12.*xs)/ll; dderno[1]=(-2.*(2.+kakr)+6.*xs)/dl; dderno[2]=( 6.-12.*xs)/ll;  dderno[3]=(-2.*(1.-kakr)+6.*xs)/dl;    ddern[0]=(-6.+12.*xs)/ll;  ddern[1]=(-2.*(2.+gy)+6.*xs)/dl;    ddern[2]=( 6.-12.*xs)/ll;   ddern[3]=(-2.*(1.-gy)+6.*xs)/dl;//My	bb[1][2]=  -e*ixyz[1]/ajy*ddern[0];    bb[1][3]=  -e*ioyz[1]/ajk*dderno[0];    bb[1][4]=   e*ixyz[1]/ajy*ddern[1];    bb[1][6]=  -e*ioyz[1]/ajk*dderno[1];    bb[1][9]=  -e*ixyz[1]/ajy*ddern[2];    bb[1][10]= -e*ioyz[1]/ajk*dderno[2];    bb[1][11]=  e*ixyz[1]/ajy*ddern[3];    bb[1][13]= -e*ioyz[1]/ajk*dderno[3];// B	bb[3][2]=  -e*ioyz[1]/ajy*ddern[0];    bb[3][3]=  -e*ioyz[0]/ajk*dderno[0];    bb[3][4]=   e*ioyz[1]/ajy*ddern[1];    bb[3][6]=  -e*ioyz[0]/ajk*dderno[1];    bb[3][9]=  -e*ioyz[1]/ajy*ddern[2];    bb[3][10]= -e*ioyz[0]/ajk*dderno[2];    bb[3][11]=  e*ioyz[1]/ajy*ddern[3];    bb[3][13]= -e*ioyz[0]/ajk*dderno[3];//Mz    ddern[0]=(-6.+12.*xs)/ll;  ddern[1]=(-2.*(2.+gz)+6.*xs)/dl; ddern[2]=( 6.-12.*xs)/ll;  ddern[3]=(-2.*(1.-gz)+6.*xs)/dl;    bb[2][1]=  e*ixyz[2]/ajz*ddern[0];    bb[2][3]=  e*ioyz[2]/ajk*dderno[0];    bb[2][5]=  e*ixyz[2]/ajz*ddern[1];    bb[2][6]=  e*ioyz[2]/ajk*dderno[1];    bb[2][ 8]= e*ixyz[2]/ajz*ddern[2];    bb[2][10]= e*ioyz[2]/ajk*dderno[2];    bb[2][12]= e*ixyz[2]/ajz*ddern[3];    bb[2][13]= e*ioyz[2]/ajk*dderno[3];// B    bb[3][1]=  -e*ioyz[2]/ajz*ddern[0];    bb[3][5]=  -e*ioyz[2]/ajz*ddern[1];    bb[3][8]=  -e*ioyz[2]/ajz*ddern[2];    bb[3][12]= -e*ioyz[2]/ajz*ddern[3];    mxv (bb,rl,fx);    xs=1.0;	fprintf (Out,"\n\n MT prvek beam cislo %ld",lcid);	fprintf (Out," \n u, v, w, fx, fy, fz, o  \n ");	for (j=0;j<ndofe;j++){		fprintf (Out," %15.5e",rl[j]);    }	fprintf (Out," \n N, My, Mz, B\n ");	for (j=0;j<4;j++){		fprintf (Out," %15.5e",fx[j]);    }  }}

⌨️ 快捷键说明

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