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

📄 sg-dump.cxx

📁 Delaunay三角形的网格剖分程序
💻 CXX
字号:
#include <time.h>#include "ibgold.hxx"#include "sg-dump.hxx"int sgWriteSmp(	       ibGrid *gg,	       FILE *file,	       int cmat_max,	       int *cmat_table,	       wzRegion(*cmat_function)(const cogPoint&p),	       int fmat_max,	       int *fmat_table,	       wzFace(*fmat_function)(const cogPoint&p)	       ){  int gdim,d,ic,cc,t,u,in,nn,n,*cs,*cn,*nnum,*cnum,i,  nnodes,ncells,nfaces,mat,rc;  ibgPoint *point;  cogPoint pt;  time_t date,tt;  int id;  rc = ibgSuccess;  date=time(&tt);    fprintf(file,"SimplexGrid");  fprintf(file," ");  fprintf(file,"2.0\n");  fprintf(file,"#created by sg-cog (c) I.Schmelzer,J.Fuhrmann\n");  fprintf(file,"#$Id: sg-dump.cxx,v 1.2 1997/11/05 15:40:13 fuhrmann Exp $\n");  fprintf(file,"#%s",ctime(&date));  fprintf(file,"DIMENSION\n%d\n",gdim=gg->gridDimension);  printf("I-Data: %d dimensional grid\n",gdim=gg->gridDimension);  cnum = (int*)calloc((gg->lastCell+1),sizeof(int));  nnum = (int*)calloc((gg->lastPoint+1),sizeof(int));  ncells = 0;  foribgRegionCells(*gg,ic,t,u)    {      if (!cmat_table[u]) continue;      cnum[ic] = ++ncells;      cn = ibgridCPointList(*gg,ic);      for(n=0;n<ibgcPoints(t);n++)	{	  nnum[cn[n]] = 1;	}    }  endibgRegionCells(*gg,ic,t,u);    nfaces = 0;  foribgFaceCells(*gg,ic,t,u){    cc = ibgridCellLeft(*gg,ic,t);    if(!cmat_table[ibgridCellSegment(*gg,cc)])      {	cc = ibgridCellRight(*gg,ic,t);	if(!cmat_table[ibgridCellSegment(*gg,cc)]) continue;      }    cnum[ic] = ++nfaces;    cn = ibgridCPointList(*gg,ic);    for(n=0;n<ibgcPoints(t);n++)      {	nnum[cn[n]] = 1;      }  }  endibgFaceCells(*gg,ic,t,u);  nnodes = 0;  foribgPoints(*gg,in,t,u,point)    {      if(nnum[in]) nnum[in] = ++nnodes;    }  endibgPoints(*gg,in,t,u,point);  fprintf(file,"NODES\n%d %d\n",nnodes,gg->gridDimension);  printf("I-Data: %d nodes\n",nnodes);  foribgPoints(*gg,in,t,u,point)     {       if(nnum[in]==0) continue;       for(d=0;d<gdim;d++) fprintf(file,"%f ",(float)(ibgpX(*point)[d]));       fprintf(file,"\n");     }  endibgPoints(*gg,in,t,u,point);    if(ncells)    {      fprintf(file,"CELLS\n%d\n",ncells);      printf("I-Data: %d cells\n",ncells);          foribgRegionCells(*gg,ic,t,u){	if(cnum[ic]==0) continue;	if(gg->gridDimension==2)	  {	    if(t!=ibgc2Triangle)	{rc=ibgError;continue;}	  }	else if(gg->gridDimension==3)	  {	    if(t!=ibgc3Tetrahedron){rc=ibgError;continue;}	  }	cn = ibgridCPointList(*gg,ic);	for(i=0;i<ibgcPoints(t);i++)	  {	    nn = cn[i];	    ibgassert(nn>0);	    nn = nnum[nn];	    ibgassert(nn>0);	    fprintf(file,"%d ",nn);	  }	mat=cmat_table[u];	if (cmat_function)	  {	    for (id=0;id<3;id++) pt.X[id]=0.0;	    for(i=0;i<ibgcPoints(t);i++)	      {		for (id=0;id<gdim;id++)		  pt.X[id]+=ibgpX(ibgridPoint(*gg,cn[i]))[id];	      }	    for (id=0;id<gdim;id++) pt.X[id]/=(double)ibgcPoints(t);	    mat=cmat_function(pt);	  }        fprintf(file,"%d ",mat);	cs = ibgridCSideList(*gg,ic);	for(i=0;i<ibgcSides(t);i++)	  {	    cc = cs[i];            t = ibgridCellType(*gg,cc);	    if(ibgcCODIM(t)==ibgSRegion)	      {		fprintf(file,"%d ",cnum[cc]);	      }	    else if(ibgcCODIM(t)==ibgSFace)	      {		fprintf(file,"-%d ",cnum[cc]);	      }	    else	ibgfatal;	  }	fprintf(file,"\n");      }      endibgRegionCells(*gg,ic,t,u);    }    if(nfaces)    {      fprintf(file,"FACES\n%d\n",nfaces);      printf("I-Data: %d faces\n",nfaces);            foribgFaceCells(*gg,ic,t,u)	{	  if(cnum[ic]==0) continue;	  if(gg->gridDimension==2)	    {	      if(t!=ibgc2Edge)	{rc=ibgError;continue;}	    }	  else if(gg->gridDimension==3)	    {	      if(t!=ibgc3Triangle)      {rc=ibgError;continue;}	    }	  	  	  cc = ibgridCellLeft(*gg,ic,t);	  if(!cmat_table[ibgridCellSegment(*gg,cc)])	    {	      cc = ibgridCellRight(*gg,ic,t);	      if(!cmat_table[ibgridCellSegment(*gg,cc)]) continue;	    }	  	  	  cn = ibgridCPointList(*gg,ic);	  for(i=0;i<ibgcPoints(t);i++)	    {	      nn = cn[i];	      ibgassert(nn>0);	      nn = nnum[nn];	      ibgassert(nn>0);	      fprintf(file,"%d ",nn);	    }	  	  mat=0;	  if(u < fmat_max)	    mat=fmat_table[u];	  	  if (fmat_function)	    {	      for (id=0;id<3;id++) pt.X[id]=0.0;	      for(i=0;i<ibgcPoints(t);i++)		{		  for (id=0;id<gdim;id++)		    pt.X[id]+=ibgpX(ibgridPoint(*gg,cn[i]))[id];		}	      for (id=0;id<gdim;id++) pt.X[id]/=(double)ibgcPoints(t);	      mat=fmat_function(pt);	    }	  	  fprintf(file,"%d ",mat);	  	  cc = ibgridCellLeft(*gg,ic,t);	  fprintf(file,"%d ",cmat_table[ibgridCellSegment(*gg,cc)]);	  cc = ibgridCellRight(*gg,ic,t);	  fprintf(file,"%d ",cmat_table[ibgridCellSegment(*gg,cc)]);	  cs = ibgridCSideList(*gg,ic);	  for(i=0;i<ibgcSides(t);i++)	    {	      cc = cs[i]; t = ibgridCellType(*gg,cc);	      if(ibgcCODIM(t)==ibgSFace)		{		fprintf(file,"%d ",cnum[cc]);	      }	    else if(ibgcCODIM(t)==ibgSLine){	      fprintf(file,"0 ");	    }	    else	ibgfatal;	  }	fprintf(file,"\n");      }      endibgFaceCells(*gg,ic,t,u);    }  fprintf(file,"END\n");  printf("I-Data: end\n",nfaces);    free(nnum);  free(cnum);  return rc;}

⌨️ 快捷键说明

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