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

📄 cogenerator.cxx

📁 有限元学习研究用源代码(老外的),供科研人员参考
💻 CXX
字号:
#include "cogenerator.hxx"
#include "cogenoctree.hxx"
#include "cogenchart.hxx"
#include "cogenrefine.hxx"
#include "cogenpoints.hxx"
#include "cogencomposite.hxx"
#include "cog1d.hxx"
#include "cogwarnings.hxx"
#include <time.h>

cogenOctree	Cogenerator::cogenoctree() const	{return 0;}
cogenRefine	Cogenerator::cogenrefine() const	{return 0;}
cogenComposite	Cogenerator::cogencomposite() const	{return 0;}
cogenChart	Cogenerator::cogenchart() const		{return 0;}
cogenPoints	Cogenerator::cogenpoints() const	{return 0;}

cogenOctree	CogenDecorator::cogenoctree() const	
{return original->cogenoctree();}
cogenRefine	CogenDecorator::cogenrefine() const	
{return original->cogenrefine();}
cogenComposite	CogenDecorator::cogencomposite() const	
{return original->cogencomposite();}
cogenChart	CogenDecorator::cogenchart() const	
{return original->cogenchart();}
cogenPoints 	CogenDecorator::cogenpoints() const	
{return original->cogenpoints();}

wzgrid Cogenerator::generateGrid(cogeometry g,wzpoints plist) const
{
  plist->computeBox();
  wzdelaunayGenerator gen = new wzDelaunayGenerator(plist->boxDim,plist->spaceDim);
  gen->Delaunay(plist,g);
  return gen->grid();
}

wzgrid Cogenerator::generateGrid(cogeometry g,wzmetric r,wzchart c) const
{
  ((Cogenerator*) this)->endInitialization();
  wzpoints plist = generatePoints(g,r,c);
  return generateGrid(g,plist);
}

CogenDecorator::CogenDecorator(cogenerator content)
:original(content)
{
  initialize();
}

wzgrid Cogenerator::generateGrid(wzpoints plist) const
{return generateGrid(new Cogeometry(),plist);}

wzgrid Cogenerator::generateGrid(char* pointlistfile) const
{
  wzPointList plist(pointlistfile);
  wzgrid g = generateGrid(&plist);
  return g;
}
static int suppress_unreachable_warning = 1;
//  more or less useless dummy (nobody creates a grid to get the points):
wzpoints Cogenerator::generatePoints(cogeometry g,wzmetric r,wzchart c) const
{
  if(suppress_unreachable_warning) return new wzPointList();
  wzIndex i,j;
  wzPoint *n;
  wzgrid grid = generateGrid(g,r,c);
  wzpoints p = new wzPointList();
  cogLoop(grid->points,i){
    j = p->create(); 
    n  = &(p->Point[j]);
    *n = grid->Point[i];
  }
  return p;
}

extern int ibgNumberOfFaceCells;

void ibgDistinguishOutsideInside(wzgrid g, wzRegion out, wzRegion ins, wzRegion undef);
wzgrid Cogenerator::generateGrid1(wzpoints plist) const
{
  clock_t time0=clock();
  clock_t timeo;
  long int timed;
  wzIndex p;
  cogeometry g = new Cogeometry0D;
  cogInfoGenerate("\nCOG 2.0: <>D Delaunay grid with <> points");
  wzRangeLoop(*plist,p){
    g->Point(plist->Point[p]);
  }
  cogInfoGenerate<<plist->spaceDim, plist->length();
  wzdelaunayGenerator gen = new wzDelaunayGenerator(plist->boxDim,plist->spaceDim);
  //  wzgrid grid = new wzGrid(plist->spaceDim,plist->spaceDim);
  // grid->Delaunay(plist,g);
  gen->Delaunay(plist);
  timed = (1000*(long int)((timeo=clock()) - time0))/CLOCKS_PER_SEC;
  cogInfoGenerate(" created in <> ms;")
    <<(wzIndex)timed;
  ibgDistinguishOutsideInside(gen->grid(),1,2,3);
  ibgFaceOutside = 0; ibgSetDefaultFace=1;
  gen->createFaces(g);
  ibgFaceOutside = 1; ibgSetDefaultFace=0;
  timed = (1000*(long int)((clock()) - timeo))/CLOCKS_PER_SEC;
  cogInfoGenerate("\nboundary detection: <> face cells created in <> ms;")
    <<ibgNumberOfFaceCells,(wzIndex)timed;
  return gen->grid();
}

wzgrid	Cogenerator::operator()(cogeometry g,wzmetric r,wzchart c)const
{
  clock_t time0=clock();
  clock_t timeo;
  long int timed;
  cogInfoGenerate("\nCOG 2.0: <> ")<<"Grid";
  wzgrid grid = generateGrid(g,r,c);
  timed = (1000*(long int)((timeo=clock()) - time0))/CLOCKS_PER_SEC;
  cogInfoGenerate(" created in <> ms;\n")<<(wzIndex)timed;
  return grid;
}

⌨️ 快捷键说明

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