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

📄 ibgotype.cxx

📁 有限元学习研究用源代码(老外的),供科研人员参考
💻 CXX
字号:
#include "ibgoctree.hxx"
#include "wzoutput.hxx"

const ibgIndex		ibgOctreeType::XDim = 3;

typedef enum {
  ldirp,ldirn,ldir0
}ibgBintreldirection;

typedef enum {
  ldirp0,ldir0p,ldirn0,ldir0n,ldir00,ldirxx
}ibgQuadtreldirection;

typedef enum {
  ldirp00,ldir0p0,ldir00p,ldirn00,ldir0n0,ldir00n,ldir000
}ibgOctreedirection;

typedef enum {
  pdirnn,pdirpn,pdirnp,pdirpp,pdir00
}ibgQuadtreePlanldirection;

typedef enum {
  pdirnn0,pdirpn0,pdirnp0,pdirpp0,
  pdirn0n,pdirn0p,pdirp0n,pdirp0p,
  pdir0nn,pdir0pn,pdir0np,pdir0pp,
  pdir000
}ibgOctreePlanldirection;

const ibgIndex		ibgOctree1D::Lines =  ldir0;
const ibgIndex		ibgOctree2D::Lines =  ldir00;
const ibgIndex		ibgOctree3D::Lines =  ldir000;
const ibgIndex		ibgOctree2D::Planes =  pdir00;
const ibgIndex		ibgOctree3D::Planes =  pdir000;
const ibgIndex		ibgOctree3D::Corners =  cdir000;
const ibgIndex		ibgOctree2D::PlaneCorners =  pdir00;
const ibgIndex		ibgOctree3D::PlaneCorners =  pdir00;
const ibgIndex		ibgOctree2D::LineSides =  2;
const ibgIndex		ibgOctree3D::LineSides =  4;
const ibgIndex		ibgOctree3D::PlaneSides =  2;
const ibgIndex		ibgOctree3D::firstCorner = cdirnnn;
const ibgIndex		ibgOctree3D::lastCorner = cdirppp;

static ibgQuadtreePlanldirection pReverse2D[pdir00] = {
  pdirpp,pdirnp,pdirpn,pdirnn
};

static ibgQuadtreePlanldirection pReverse3D[pdir000] = {
  pdirpp,pdirnp,pdirpn,pdirnn,
  pdirpp,pdirnp,pdirpn,pdirnn,
  pdirpp,pdirnp,pdirpn,pdirnn
};

static ibgQuadtreldirection pSide0_2D[pdir00] = {
  ldirn0,ldir0n,ldir0p,ldirp0
};
static ibgQuadtreldirection pSide1_2D[pdir00] = {
  ldir0n,ldirp0,ldirn0,ldir0p
};
static ibgOctreedirection pSide0_3D[pdir000] = {
  //ldirnn0,ldirpn0,ldirnp0,ldirpp0,
  //ldirn0n,ldirn0p,ldirp0n,ldirp0p,
  //ldir0nn,ldir0pn,ldir0np,ldir0pp 
  ldirn00,ldir0n0,ldir0p0,ldirp00,
  ldir00n,ldirn00,ldirp00,ldir00p,
  ldir0n0,ldir00n,ldir00p,ldir0p0 
};
static ibgOctreedirection pSide1_3D[pdir000] = {
  ldir0n0,ldirp00,ldirn00,ldir0p0,
  ldirn00,ldir00p,ldir00n,ldirp00,
  ldir00n,ldir0p0,ldir0n0,ldir00p 
};
static ibgOctreedirection pOrtho3D[pdir000] = {
  ldir00p,ldir00p,ldir00p,ldir00p,
  ldir0p0,ldir0p0,ldir0p0,ldir0p0,
  ldirp00,ldirp00,ldirp00,ldirp00
};


static ibgOctreeCornerDirection cReverse3D[8]= {
  cdirppp,cdirnpp,cdirpnp,cdirnnp,cdirppn,cdirnpn,cdirpnn,cdirnnn
};

static ibgIndex sOther2D[3] = {
  1,0,1
};

static ibgIndex sOther3D[5] = {
  2,3,0,1,2
};

// lsLine[up][i] == lsLine[down][i]
  
static ibgQuadtreldirection lsLine2D[ldir00][3] = {
  {ldir0p,ldir0n,ldir0p},	// ldirp0
  {ldirp0,ldirn0,ldirp0},	// ldir0p
  {ldir0p,ldir0n,ldir0p},	// ldirn0
  {ldirp0,ldirn0,ldirp0}	// ldir0n
};

static ibgOctreedirection lsLine3D[ldir000][5] = {
  {ldir0p0,ldir00n,ldir0n0,ldir00p,ldir0p0},	// ldirp00
  {ldir00p,ldirn00,ldir00n,ldirp00,ldir00p},	// ldir0p0
  {ldirp00,ldir0n0,ldirn00,ldir0p0,ldirp00},	// ldir00p
  {ldir0p0,ldir00n,ldir0n0,ldir00p,ldir0p0},	// ldirn00
  {ldir00p,ldirn00,ldir00n,ldirp00,ldir00p},	// ldir0n0
  {ldirp00,ldir0n0,ldirn00,ldir0p0,ldirp00}	// ldir00n
};

static ibgOctreedirection llOrtho3D[ldir000][ldir000]={
  {ldir000,ldir00p,ldir0n0,ldir000,ldir00n,ldir0p0},	// ldirp00
  {ldir00n,ldir000,ldirp00,ldir00p,ldir000,ldirn00},	// ldir0p0
  {ldir0p0,ldirn00,ldir000,ldir0n0,ldirp00,ldir000},	// ldir00p
  {ldir000,ldir00n,ldir0p0,ldir000,ldir00p,ldir0n0},	// ldirn00
  {ldir00p,ldir000,ldirn00,ldir00n,ldir000,ldirp00},	// ldir0n0
  {ldir0n0,ldirp00,ldir000,ldir0p0,ldirn00,ldir000}	// ldir00n
};
static ibgQuadtreePlanldirection llPlane2D[ldir00][ldir00]={
  {pdir00,pdirpp,pdir00,pdirpn},	// ldirp0
  {pdirpp,pdir00,pdirnp,pdir00},	// ldir0p
  {pdir00,pdirnp,pdir00,pdirnn},	// ldirn0
  {pdirpn,pdir00,pdirnn,pdir00}		// ldir0n
};

static ibgQuadtreldirection llOrtho2D[ldir00][ldir00]={
  {ldir00,ldirxx,ldir00,ldirxx},	// ldirp0
  {ldirxx,ldir00,ldirxx,ldir00},	// ldir0p
  {ldir00,ldirxx,ldir00,ldirxx},	// ldirn0
  {ldirxx,ldir00,ldirxx,ldir00}		// ldir0n
};

static ibgOctreePlanldirection llPlane3D[ldir000][ldir000]={
  {pdir000,pdirpp0,pdirp0p,pdir000,pdirpn0,pdirp0n},	// ldirp00
  {pdirpp0,pdir000,pdir0pp,pdirnp0,pdir000,pdir0pn},	// ldir0p0
  {pdirp0p,pdir0pp,pdir000,pdirn0p,pdir0np,pdir000},	// ldir00p
  {pdir000,pdirnp0,pdirn0p,pdir000,pdirnn0,pdirn0n},	// ldirn00
  {pdirpn0,pdir000,pdir0np,pdirnn0,pdir000,pdir0nn},	// ldir0n0
  {pdirp0n,pdir0pn,pdir000,pdirn0n,pdir0nn,pdir000}	// ldir00n
};

static ibgOctreeCornerDirection lsCell3D[ldir000][5]=
	{{cdirppp,cdirppn,cdirpnn,cdirpnp,cdirppp}
	,{cdirppp,cdirnpp,cdirnpn,cdirppn,cdirppp}
	,{cdirppp,cdirpnp,cdirnnp,cdirnpp,cdirppp}
	,{cdirnpp,cdirnpn,cdirnnn,cdirnnp,cdirnpp}
	,{cdirpnp,cdirnnp,cdirnnn,cdirpnn,cdirpnp}
	,{cdirppn,cdirpnn,cdirnnn,cdirnpn,cdirppn}
};

static ibgOctreeCornerDirection llCell3D[ldir000][ldir000]=
	{{cdir000,cdirppp,cdirpnp,cdir000,cdirpnn,cdirppn}
	,{cdirppn,cdir000,cdirppp,cdirnpp,cdir000,cdirnpn}
	,{cdirppp,cdirnpp,cdir000,cdirnnp,cdirpnp,cdir000}
	,{cdir000,cdirnpn,cdirnpp,cdir000,cdirnnp,cdirnnn}
	,{cdirpnp,cdir000,cdirnnp,cdirnnn,cdir000,cdirpnn}
	,{cdirpnn,cdirppn,cdir000,cdirnpn,cdirnnn,cdir000}
};

ibgOctreeType::ibgOctreeType(ibgIndex dim)
{int i,j,e,c,t;
 GridDim = LinesUp = dim;
 switch(dim){
 case 3:
   Lines = ibgOctree3D::Lines;
   Planes = ibgOctree3D::Planes;
   LineSides = ibgOctree3D::LineSides;
   PlaneSides = ibgOctree3D::PlaneSides;
   PlaneCorners = ibgOctree3D::PlaneCorners;
   Corners = ibgOctree3D::Corners;
   for(i=0;i<Planes;i++){
     pSide[0][i] = pSide0[i]   = (int) pSide0_3D[i];
     pSide[1][i] = pSide1[i]   = (int) pSide1_3D[i];
     pSide[2][i] = pOrtho[i]   = t = (int) pOrtho3D[i];
     pReverse[i] = j = (int) pReverse3D[i];
     ptReverse[j][t] = i;
   }
   for(j=0;j<=LineSides;j++){
     sOther[j] = sOther3D[j];
   }
   for(i=0;i<Lines;i++){
     for(j=0;j<Lines;j++){
       llPlane[i][j]= (int) llPlane3D[i][j];
       llOrtho[i][j]= (int) llOrtho3D[i][j];
       llCell[i][j] = (int) llCell3D[i][j];
       llSide[i][j] = 0;
     }
     for(j=0;j<=LineSides;j++){
       lsLine[i][j] = e = (int) lsLine3D[i][j];
       lsCell[i][j] = (int) lsCell3D[i][j];
       llSide[i][e] = j;
     }
   }
   for(i=0;i<Corners;i++){
     cReverse[i]= (int) cReverse3D[i];
   }
   for(i=0;i<Planes;i++){
     c = cReverse[llCell[pSide0[i]][pSide1[i]]];
     t = pOrtho[i];
     csPlane[c][t] = i;
     csPlaneSide[c][t] = 0;
     c = cReverse[llCell[pSide1[i]][pSide0[i]]];
     csPlane[c][t] = i;
     csPlaneSide[c][t] = 1;
   }
   break;
 case 2:
   Lines = ibgOctree2D::Lines;
   Planes = ibgOctree2D::Planes;
   LineSides = ibgOctree2D::LineSides;
   PlaneCorners = ibgOctree2D::PlaneCorners;
   PlaneSides = 0;
   Corners = 0;
   for(i=0;i<Planes;i++){
     pReverse[i] = ptReverse[i][0] = (int) pReverse2D[i];
     pSide[0][i] = pSide0[i]   = (int) pSide0_2D[i];
     pSide[1][i] = pSide1[i]   = (int) pSide1_2D[i];
     pSide[2][i] = pOrtho[i]   = 0;
   }
   for(j=0;j<=LineSides;j++){
     sOther[j] = sOther2D[j];
   }
   for(i=0;i<Lines;i++){
     for(j=0;j<=Lines;j++){
       llPlane[i][j]= (int) llPlane2D[i][j];
       llOrtho[i][j]= (int) llOrtho2D[i][j];
       llCell[i][j] = 0;
       llSide[i][j] = 0;
     }
     for(j=0;j<=LineSides;j++){
       lsLine[i][j] = e = (int) lsLine2D[i][j];
       llSide[i][e] = j;
     }
   }break;
 case 1:
   Lines = ibgOctree1D::Lines;
   for(i=0;i<Lines;i++){
     for(j=0;j<=Lines;j++){
       llPlane[i][j]= 0;
       llOrtho[i][j]= Lines;
       llCell[i][j] = 0;
       llSide[i][j] = 0;
     }
   }
   Planes = 0;
   Corners = 0;
   LineSides = 0;
   PlaneSides = 0;
   break;
 case 0:
   Lines = 0;
   Planes = 0;
   Corners = 0;
   LineSides = 0;
   PlaneSides = 0;
   break;
 }
 for(i=0;i<Lines;i++){
     for(j=0;j<=LineSides;j++){
       e = (int) lsLine[i][j];
       lsPlane[i][j]= (int) llPlane[i][e];
     }
 }
}

⌨️ 快捷键说明

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