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

📄 linhex_nb1.cpp

📁 Finite element program for mechanical problem. It can solve various problem in solid problem
💻 CPP
📖 第 1 页 / 共 5 页
字号:
      for (j=0;j<intordb;j++){	zeta=gp[j];		jac2d_3d (jac,x,y,z,eta,zeta,2);	bf_matrix (n,xi,eta,zeta);	jac = jac*w[i]*w[j];	nnj (am.a,n.a,jac,n.m,n.n);      }    }        if (is[2]==1){      av[6] = nv[24+0*3+0];      av[7] = nv[24+0*3+1];      av[8] = nv[24+0*3+2];            av[3] = nv[24+1*3+0];      av[4] = nv[24+1*3+1];      av[5] = nv[24+1*3+2];            av[15] = nv[24+2*3+0];      av[16] = nv[24+2*3+1];      av[17] = nv[24+2*3+2];      av[18] = nv[24+3*3+0];      av[19] = nv[24+3*3+1];      av[20] = nv[24+3*3+2];    }    if (is[2]==2){            av[0] = nv[24+0*3+0];      av[1] = nv[24+0*3+1];      av[2] = nv[24+0*3+2];            av[3] = nv[24+1*3+0];      av[4] = nv[24+1*3+1];      av[5] = nv[24+1*3+2];            av[6] = nv[24+2*3+0];      av[7] = nv[24+2*3+1];      av[8] = nv[24+2*3+2];      av[9]  = nv[24+3*3+0];      av[10] = nv[24+3*3+1];      av[11] = nv[24+3*3+2];            locglob_nodeval (2,av,tnv,x,y,z);            av[6] = tnv[0*3+0];      av[7] = tnv[0*3+1];      av[8] = tnv[0*3+2];            av[3] = tnv[1*3+0];      av[4] = tnv[1*3+1];      av[5] = tnv[1*3+2];            av[15] = tnv[2*3+0];      av[16] = tnv[2*3+1];      av[17] = tnv[2*3+2];      av[18] = tnv[3*3+0];      av[19] = tnv[3*3+1];      av[20] = tnv[3*3+2];    }    mxv (am,av,v);    addv (v,nf,nf);  }  //  surface number 4  if (is[3]>0 ){    eta=-1.0;    for (i=0;i<intordb;i++){      xi=gp[i];      for (j=0;j<intordb;j++){	zeta=gp[j];		jac2d_3d (jac,x,y,z,xi,zeta,3);	bf_matrix (n,xi,eta,zeta);	jac = jac*w[i]*w[j];	nnj (am.a,n.a,jac,n.m,n.n);      }    }        if (is[3]==1){      av[9] = nv[36+0*3+0];      av[10] = nv[36+0*3+1];      av[11] = nv[36+0*3+2];            av[6] = nv[36+1*3+0];      av[7] = nv[36+1*3+1];      av[8] = nv[36+1*3+2];            av[18] = nv[36+2*3+0];      av[19] = nv[36+2*3+1];      av[20] = nv[36+2*3+2];      av[21] = nv[36+3*3+0];      av[22] = nv[36+3*3+1];      av[23] = nv[36+3*3+2];    }    if (is[3]==2){            av[0] = nv[36+0*3+0];      av[1] = nv[36+0*3+1];      av[2] = nv[36+0*3+2];            av[3] = nv[36+1*3+0];      av[4] = nv[36+1*3+1];      av[5] = nv[36+1*3+2];            av[6] = nv[36+2*3+0];      av[7] = nv[36+2*3+1];      av[8] = nv[36+2*3+2];      av[9]  = nv[36+3*3+0];      av[10] = nv[36+3*3+1];      av[11] = nv[36+3*3+2];            locglob_nodeval (3,av,tnv,x,y,z);            av[9] = tnv[0*3+0];      av[10]= tnv[0*3+1];      av[11]= tnv[0*3+2];            av[6] = tnv[1*3+0];      av[7] = tnv[1*3+1];      av[8] = tnv[1*3+2];            av[18] = tnv[2*3+0];      av[19] = tnv[2*3+1];      av[20] = tnv[2*3+2];      av[21] = tnv[3*3+0];      av[22] = tnv[3*3+1];      av[23] = tnv[3*3+2];    }    mxv (am,av,v);    addv (v,nf,nf);  }  //  surface number 5  if (is[4]>0 ){    zeta=1.0;    for (i=0;i<intordb;i++){      xi=gp[i];      for (j=0;j<intordb;j++){	eta=gp[j];		jac2d_3d (jac,x,y,z,xi,eta,4);	bf_matrix (n,xi,eta,zeta);	jac = jac*w[i]*w[j];	nnj (am.a,n.a,jac,n.m,n.n);      }    }        if (is[4]==1){      av[0] = nv[48+0*3+0];      av[1] = nv[48+0*3+1];      av[2] = nv[48+0*3+2];            av[3] = nv[48+1*3+0];      av[4] = nv[48+1*3+1];      av[5] = nv[48+1*3+2];            av[6] = nv[48+2*3+0];      av[7] = nv[48+2*3+1];      av[8] = nv[48+2*3+2];      av[9] = nv[48+3*3+0];      av[10] = nv[48+3*3+1];      av[11] = nv[48+3*3+2];    }    if (is[4]==2){            av[0] = nv[48+0*3+0];      av[1] = nv[48+0*3+1];      av[2] = nv[48+0*3+2];            av[3] = nv[48+1*3+0];      av[4] = nv[48+1*3+1];      av[5] = nv[48+1*3+2];            av[6] = nv[48+2*3+0];      av[7] = nv[48+2*3+1];      av[8] = nv[48+2*3+2];      av[9]  = nv[48+3*3+0];      av[10] = nv[48+3*3+1];      av[11] = nv[48+3*3+2];            locglob_nodeval (4,av,tnv,x,y,z);            av[0] = tnv[0*3+0];      av[1] = tnv[0*3+1];      av[2] = tnv[0*3+2];            av[3] = tnv[1*3+0];      av[4] = tnv[1*3+1];      av[5] = tnv[1*3+2];            av[6] = tnv[2*3+0];      av[7] = tnv[2*3+1];      av[8] = tnv[2*3+2];      av[9] = tnv[3*3+0];      av[10] = tnv[3*3+1];      av[11] = tnv[3*3+2];    }    mxv (am,av,v);    addv (v,nf,nf);  }  //  surface number 6  if (is[5]>0 ){    zeta=-1.0;    for (i=0;i<intordb;i++){      xi=gp[i];      for (j=0;j<intordb;j++){	eta=gp[j];		jac2d_3d (jac,x,y,z,xi,eta,5);	bf_matrix (n,xi,eta,zeta);	jac = jac*w[i]*w[j];	nnj (am.a,n.a,jac,n.m,n.n);      }    }        if (is[5]==1){      av[12] = nv[60+0*3+0];      av[13] = nv[60+0*3+1];      av[14] = nv[60+0*3+2];            av[21] = nv[60+1*3+0];      av[22] = nv[60+1*3+1];      av[23] = nv[60+1*3+2];            av[18] = nv[60+2*3+0];      av[19] = nv[60+2*3+1];      av[20] = nv[60+2*3+2];      av[15] = nv[60+3*3+0];      av[16] = nv[60+3*3+1];      av[17] = nv[60+3*3+2];    }    if (is[5]==2){            av[0] = nv[60+0*3+0];      av[1] = nv[60+0*3+1];      av[2] = nv[60+0*3+2];            av[3] = nv[60+1*3+0];      av[4] = nv[60+1*3+1];      av[5] = nv[60+1*3+2];            av[6] = nv[60+2*3+0];      av[7] = nv[60+2*3+1];      av[8] = nv[60+2*3+2];      av[9]  = nv[60+3*3+0];      av[10] = nv[60+3*3+1];      av[11] = nv[60+3*3+2];            locglob_nodeval (5,av,tnv,x,y,z);            av[12] = tnv[0*3+0];      av[13] = tnv[0*3+1];      av[14] = tnv[0*3+2];            av[21] = tnv[1*3+0];      av[22] = tnv[1*3+1];      av[23] = tnv[1*3+2];            av[18] = tnv[2*3+0];      av[19] = tnv[2*3+1];      av[20] = tnv[2*3+2];      av[15] = tnv[3*3+0];      av[16] = tnv[3*3+1];      av[17] = tnv[3*3+2];    }    mxv (am,av,v);    addv (v,nf,nf);  }  destrv (gp);  destrv (w);  delete [] tnv;}void linhex::locglob_nodeval (long is,vector &nv,double *tnv,vector &x,vector &y,vector &z){  double norm;  vector g1(3),g2(3),g3(3),lv(3),gv(3);  matrix t(3,3);    if (is==0){    g1[0]=x[4]-x[7];    g1[1]=y[4]-y[7];    g1[2]=z[4]-z[7];        g2[0]=x[3]-x[7];    g2[1]=y[3]-y[7];    g2[2]=z[3]-z[7];  }  if (is==1){    g1[0]=x[5]-x[4];    g1[1]=y[5]-y[4];    g1[2]=z[5]-z[4];        g2[0]=x[0]-x[4];    g2[1]=y[0]-y[4];    g2[2]=z[0]-z[4];  }  if (is==2){    g1[0]=x[6]-x[5];    g1[1]=y[6]-y[5];    g1[2]=z[6]-z[5];        g2[0]=x[1]-x[5];    g2[1]=y[1]-y[5];    g2[2]=z[1]-z[5];  }  if (is==3){    g1[0]=x[7]-x[6];    g1[1]=y[7]-y[6];    g1[2]=z[7]-z[6];        g2[0]=x[2]-x[6];    g2[1]=y[2]-y[6];    g2[2]=z[2]-z[6];  }  if (is==4){    g1[0]=x[3]-x[2];    g1[1]=y[3]-y[2];    g1[2]=z[3]-z[2];        g2[0]=x[1]-x[2];    g2[1]=y[1]-y[2];    g2[2]=z[1]-z[2];  }  if (is==5){    g1[0]=x[5]-x[6];    g1[1]=y[5]-y[6];    g1[2]=z[5]-z[6];        g2[0]=x[7]-x[6];    g2[1]=y[7]-y[6];    g2[2]=z[7]-z[6];  }      scprd (g1,g1,norm);  norm=1.0/sqrt(norm);  cmulv (norm,g1,g1);    scprd (g1,g2,norm);  g2[0]=g2[0]-norm*g1[0];  g2[1]=g2[1]-norm*g1[1];  g2[2]=g2[2]-norm*g1[2];    scprd (g2,g2,norm);  norm=1.0/sqrt(norm);  cmulv (norm,g2,g2);    g3[0]=g1[1]*g2[2]-g1[2]*g2[1];  g3[1]=g1[2]*g2[0]-g1[0]*g2[2];  g3[2]=g1[0]*g2[1]-g1[1]*g2[0];    t[0][0]=g1[0];  t[1][0]=g1[1];  t[2][0]=g1[2];  t[0][1]=g2[0];  t[1][1]=g2[1];  t[2][1]=g2[2];  t[0][2]=g3[0];  t[1][2]=g3[1];  t[2][2]=g3[2];    mxv (t.a,nv.a,tnv,3,3);  mxv (t.a,nv.a+3,tnv+3,3,3);  mxv (t.a,nv.a+6,tnv+6,3,3);  mxv (t.a,nv.a+9,tnv+9,3,3);  }/**   function computes nodal forces caused by presure on surface      @param eid - element id   @param ri,ci - row and column indices   @param nfor - vector of presure    @param eis - surface id       4.2002, PF*/void linhex::node_forces_surf_old (long lcid,long eid,long *is,double *nv,vector &nf){  long i,j,i1,ii;  double xi=0.0,eta=0.0,zeta=0.0,jac, w1,w2;  ivector nodes(nne);  vector gx(nne),gy(nne),gz(nne),x(nnsurf),y(nnsurf),z(nnsurf),gp(intordb),w(intordb),av(ndofe),v(ndofe),pom(3);  matrix n(napfun,ndofe),an(napfun,ndofe),am(ndofe,ndofe), tran(3,3);  Mt->give_elemnodes (eid,nodes);  Mt->give_node_coord3d (gx,gy,gz,eid);  gauss_points (gp.a,w.a,intordb);  fillv (0.0,nf);  fillm (0.0,an);  for (ii=0;ii<6;ii++){    fillv (0.0,av);    // is=0 not loading    if (is[ii] ==0){}    else {      tran_mat( tran, gx, gy, gz, ii);      // is=1 surface node 1,4,8,5      if (ii ==0){	xi=1.0;        x[0]=gx[0];x[1]=gx[3];x[2]=gx[7];x[3]=gx[4];         y[0]=gy[0];y[1]=gy[3];y[2]=gy[7];y[3]=gy[4];         z[0]=gz[0];z[1]=gz[3];z[2]=gz[7];z[3]=gz[4]; 	for (i=0;i<intordb;i++){	  eta=gp[i];  w1=w[i];      	  for (j=0;j<intordb;j++){	    zeta=gp[j];  w2=w[j];	    bf_matrix (n,xi,eta,zeta);	    jac2d3d (jac,x,y,z,eta,zeta);	    jac = jac*w1*w2;     	    nnj (am.a,n.a,jac,n.m,n.n);	  }	}	for (i=0;i<3;i++){	  av[i]=nv[i];  av[9+i]=nv[3+i];  av[21+i]=nv[6+i];  av[12+i]=nv[9+i];	}	// Load in LCS and transformation to GCS	if (is[ii] ==2){	  lgvectortransf3dblock (av, tran);	}        mxv (am,av,v);      }      // is=2 surface node 2,1,5,6      else if (ii ==1){	eta=1.0;        x[0]=gx[1];x[1]=gx[0];x[2]=gx[4];x[3]=gx[5];        y[0]=gy[1];y[1]=gy[0];y[2]=gy[4];y[3]=gy[5];         z[0]=gz[1];z[1]=gz[0];z[2]=gz[4];z[3]=gz[5]; 	for (i=0;i<intordb;i++){	  xi=gp[i];  w1=w[i];      	  for (j=0;j<intordb;j++){	    zeta=gp[j];  w2=w[j];	    bf_matrix (n,xi,eta,zeta);	    jac2d3d (jac,x,y,z,xi,zeta);	    jac = jac*w1*w2;      	    nnj (am.a,n.a,jac,n.m,n.n);	  }	}	for (i=0;i<3;i++){	  av[3+i]=nv[12+i];  av[i]=nv[15+i];  av[12+i]=nv[18+i];  av[15+i]=nv[21+i];	}	// Load in LCS and transformation to GCS	if (is[ii] ==2){	  lgvectortransf3dblock (av, tran);	}        mxv (am,av,v);      }      // is=3 surface node 3,2,6,7      else if (ii ==2){	xi=-1.0;        x[0]=gx[2];x[1]=gx[1];x[2]=gx[5];x[3]=gx[6];         y[0]=gy[2];y[1]=gy[1];y[2]=gy[5];y[3]=gy[6];         z[0]=gz[2];z[1]=gz[1];z[2]=gz[5];z[3]=gz[6]; 	for (i=0;i<intordb;i++){	  eta=gp[i];  w1=w[i];      	  for (j=0;j<intordb;j++){	    zeta=gp[j];  w2=w[j];	    bf_matrix (n,xi,eta,zeta);	    jac2d3d (jac,x,y,z,eta,zeta);	    jac = jac*w1*w2;      	    nnj (am.a,n.a,jac,n.m,n.n);	  }	}	for (i=0;i<3;i++){	  av[6+i]=nv[24+i];  av[3+i]=nv[27+i];  av[15+i]=nv[30+i];  av[18+i]=nv[33+i];	}	// Load in LCS and transformation to GCS	if (is[ii] ==2){	  lgvectortransf3dblock (av, tran);	}        mxv (am,av,v);      }      // is=4 surface node 4,3,7,8      else if (ii ==3){	eta=-1.0;        x[0]=gx[3];x[1]=gx[2];x[2]=gx[6];x[3]=gx[7];         y[0]=gy[3];y[1]=gy[2];y[2]=gy[6];y[3]=gy[7];        z[0]=gz[3];z[1]=gz[2];z[2]=gz[6];z[3]=gz[7]; 	for (i=0;i<intordb;i++){	  xi=gp[i];  w1=w[i];      	  for (j=0;j<intordb;j++){	    zeta=gp[j];  w2=w[j];	    bf_matrix (n,xi,eta,zeta);	    jac2d3d (jac,x,y,z,xi,zeta);	    jac = jac*w1*w2;	    	    nnj (am.a,n.a,jac,n.m,n.n);	  }	}	for (i=0;i<3;i++){	  av[9+i]=nv[36+i];  av[6+i]=nv[39+i];  av[18+i]=nv[42+i];  av[21+i]=nv[45+i];	}	// Load in LCS and transformation to GCS	if (is[ii] ==2){	  lgvectortransf3dblock (av, tran);	}        mxv (am,av,v);      }      // is=5  surface node 1,2,3,4      else if (ii ==4) {	zeta=1.0;        x[0]=gx[0];x[1]=gx[1];x[2]=gx[2];x[3]=gx[3];         y[0]=gy[0];y[1]=gy[1];y[2]=gy[2];y[3]=gy[3];         z[0]=gz[0];z[1]=gz[1];z[2]=gz[2];z[3]=gz[3]; 	for (i=0;i<intordb;i++){	  xi=gp[i];  w1=w[i];      	  for (j=0;j<intordb;j++){	    eta=gp[j];  w2=w[j];	    bf_matrix (n,xi,eta,zeta);	    jac2d3d (jac,x,y,z,xi,eta);	    jac = jac*w1*w2;      	    //	for constant			for (i1=0;i1<ndofe;i1++){	    //								for (j1=0;j1<3;j1++){	    //									an[j1][i1]=an[j1][i1]+n[j1][i1]*jac;}	}	    nnj (am.a,n.a,jac,n.m,n.n);	  }	}	for (i=0;i<3;i++){	  av[i]=nv[48+i];  av[3+i]=nv[51+i];  av[6+i]=nv[54+i];  av[9+i]=nv[57+i];	}	//		fprintf (Out,"\n\n nn");	//		for (i1=0;i1<ndofe;i1++){	//			fprintf (Out,"\n %4ld   %20.10e %20.10e %20.10e",i1,an[0][i1],an[1][i1],an[2][i1]);}       		// for constant		for (i=0;i<ndofe;i++){	//						for (j=0;j<pom.n;j++){	//							v[i]=an[j][i]*pom[j];}	}	// Load in LCS and transformation to GCS	if (is[ii] ==2){	  lgvectortransf3dblock (av, tran);	}        mxv (am,av,v);      }      // is=6  surface node 6,5,8,7      else if (ii ==5) {	zeta=-1.0;        x[0]=gx[5];x[1]=gx[4];x[2]=gx[7];x[3]=gx[6];         y[0]=gy[5];y[1]=gy[4];y[2]=gy[7];y[3]=gy[6];         z[0]=gz[5];z[1]=gz[4];z[2]=gz[7];z[3]=gz[6]; 	for (i=0;i<intordb;i++){	  xi=gp[i];  w1=w[i];      	  for (j=0;j<intordb;j++){	    eta=gp[j];  w2=w[j];	    bf_matrix (n,xi,eta,zeta);	    jac2d3d (jac,x,y,z,xi,eta);	    jac = jac*w1*w2;      	    nnj (am.a,n.a,jac,n.m,n.n);	  }	}	for (i=0;i<3;i++){	  av[12+i]=nv[60+i];  av[15+i]=nv[63+i];  av[18+i]=nv[66+i];  av[21+i]=nv[69+i];	}	// Load in LCS and transformation to GCS	if (is[ii] ==2){	  lgvectortransf3dblock (av, tran);	}        mxv (am,av,v);        }      			fprintf (Out,"\n\n zatiz");			for (i=0;i<nne;i++){                i1=3*i;				fprintf (Out,"\n %4ld   %20.10e %20.10e %20.10e",i,av[i1],av[i1+1],av[i1+2]);}       			fprintf (Out,"\n\n vloc");			for (i=0;i<nne;i++){                i1=3*i;				fprintf (Out,"\n %4ld   

⌨️ 快捷键说明

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