cogenoctree.hxx
来自「有限元学习研究用源代码(老外的),供科研人员参考」· HXX 代码 · 共 150 行
HXX
150 行
#ifndef cogenoctree_hxx
#define cogenoctree_hxx
#ifndef cogenerator_hxx
#include "cogenerator.hxx"
#endif
class CogenOctreeBox
{
protected:
friend class CogenOctree;
wzRegion region;
wzFloat min[wzPointDim];
wzFloat max[wzPointDim];
wzIndex part;
};
class CogenOctreeFace
{
protected:
friend class CogenOctree;
wzFace face;
wzFloat min[wzPointDim];
wzFloat max[wzPointDim];
wzIndex part;
};
class CogenOctreeRefineItem{
protected:
friend class CogenOctree;
wzFloat dist[wzPointDim];
wzIndex box;
};
class ibgOctree;
typedef wzProxy<ibgOctree> ibgoctree;
class CogenOctree
:public Cogenerator,
protected Cogeometry,
public wzChart,
public wzDiagonalMetricSimple,
protected wzTensorGrid
{
public:
static wzFloat epsilon;
wzSimpleRange blist;
wzSimpleRange flist;
wzSimpleRange rlist;
wzArray<CogenOctreeBox> box;
wzArray<CogenOctreeFace> face;
wzArray<CogenOctreeRefineItem> refine;
CogenOctree();
virtual cogenOctree cogenoctree() const;
cogenerator generator() const {return (CogenOctree*)this;}
virtual cogeometry geometry() const {return (CogenOctree*)this;}
virtual wzmetric refinement() const
{return (wzDiagonalMetricSimple*)(CogenOctree*)this;}
virtual wzchart chart() const
{return (CogenOctree*)this;}
wzIndex addBox(wzRegion r, wzFloat *xmin, wzFloat *xmax);
wzIndex addBox(wzRegion r,
wzFloat xmin = -wzInfty, wzFloat xmax = wzInfty,
wzFloat ymin = -wzInfty, wzFloat ymax = wzInfty,
wzFloat zmin = -wzInfty, wzFloat zmax = wzInfty);
wzIndex refinementInBox(wzFloat dx, wzFloat dy, wzFloat dz, wzIndex b);
wzIndex refinementIsotropicalInBox(wzFloat dx, wzIndex b)
{return refinementInBox(dx,dx,dx,b);}
void setBorder(
wzFloat xmin = -wzInfty, wzFloat xmax = wzInfty,
wzFloat ymin = -wzInfty, wzFloat ymax = wzInfty,
wzFloat zmin = -wzInfty, wzFloat zmax = wzInfty);
void addPlane(wzIndex dir, wzFloat x);
void addPlaneX(wzFloat x) {addPlane(0,x);}
void addPlaneY(wzFloat y) {addPlane(1,y);}
void addPlaneZ(wzFloat z) {addPlane(2,z);}
void addPlanesOfPoint(wzFloat x = 0, wzFloat y = 0, wzFloat z = 0)
{addPlane(0,x);addPlane(1,y);addPlane(2,z);}
void setFaceOfBox(wzFace f, wzIndex box);
void setFaceOfBoxSide(wzFace f, wzIndex box, wzIndex dir);
void setFaceInBox(wzFace f, wzFloat *xmin, wzFloat *xmax);
void setFaceInBox(wzFace f,
wzFloat xmin = -wzInfty, wzFloat xmax = wzInfty,
wzFloat ymin = -wzInfty, wzFloat ymax = wzInfty,
wzFloat zmin = -wzInfty, wzFloat zmax = wzInfty);
void setFaceOnPlaneX(wzFace f, wzFloat x,
wzFloat ymin = -wzInfty, wzFloat ymax = wzInfty,
wzFloat zmin = -wzInfty, wzFloat zmax = wzInfty)
{setFaceInBox(f,x,x,ymin,ymax,zmin,zmax);}
void setFaceOnPlaneY(wzFace f, wzFloat y,
wzFloat xmin = -wzInfty, wzFloat xmax = wzInfty,
wzFloat zmin = -wzInfty, wzFloat zmax = wzInfty)
{setFaceInBox(f,xmin,xmax,y,y,zmin,zmax);}
void setFaceOnPlaneZ(wzFace f, wzFloat z,
wzFloat xmin = -wzInfty, wzFloat xmax = wzInfty,
wzFloat ymin = -wzInfty, wzFloat ymax = wzInfty)
{setFaceInBox(f,xmin,xmax,ymin,ymax,z,z);}
void setRegularRefinementX(wzIndex i) {setRefinement(0,i);}
void setRegularRefinementY(wzIndex i) {setRefinement(1,i);}
void setRegularRefinementZ(wzIndex i) {setRefinement(2,i);}
void setRegularRefinement(wzIndex dir, wzIndex i) {setRefinement(dir,i);}
virtual void endInitialization();
// implementations
virtual wzFloat chi(const wzPoint& p) const;
virtual wzIndex Point(wzPoint& p0) const;
virtual wzIndex Line (cogFlag1& f, const cogLine& s) const;
virtual wzIndex BoundaryCondition(cogFlag1& f) const;
virtual wzpoints generatePoints(cogeometry g,wzmetric r,wzchart c) const;
virtual void getMetric(wzMetricData& data, const wzPoint& p) const;
virtual void getMetric(wzMetricData& data, const cogFlag1& f) const;
// internal calls:
private:
wzBoolean inBox(wzIndex b, const wzPoint& p) const;
void mark(ibgoctree gg, wzFloat delta) const;
void shift(ibgoctree gg, wzFloat delta) const;
void hideIrregular(ibgoctree gg) const;
void hideLongSideIntersections(ibgoctree gg) const;
wzIndex boundaryLevel;
public:
void omitVertexComputation() {boundaryLevel = 2;}
void omitEdgeComputation() {boundaryLevel = 1;}
void omitFaceComputation() {boundaryLevel = 0;}
wzObsoleteCode:
wzIndex addRegion(wzRegion r, wzFloat *xmin, wzFloat *xmax)
{return addBox(r,xmin,xmax);}
wzIndex addRegion(wzRegion r,
wzFloat xmin = -wzInfty, wzFloat xmax = wzInfty,
wzFloat ymin = -wzInfty, wzFloat ymax = wzInfty,
wzFloat zmin = -wzInfty, wzFloat zmax = wzInfty)
{return addBox(r,xmin,xmax,ymin,ymax,zmin,zmax);}
void setBox(
wzFloat xmin = -wzInfty, wzFloat xmax = wzInfty,
wzFloat ymin = -wzInfty, wzFloat ymax = wzInfty,
wzFloat zmin = -wzInfty, wzFloat zmax = wzInfty)
{setBorder(xmin,xmax,ymin,ymax,zmin,zmax);}
void setFaceOfRegion(wzFace f, wzIndex r)
{setFaceOfBox(f,r);}
void setFaceOfRegionSide(wzFace f, wzIndex r, wzIndex dir)
{setFaceOfBoxSide(f,r,dir);}
};
typedef wzProxy<CogenOctree> cogenOctree;
// obsolete:
#define cogenBasic cogenOctree
#define CogenBasic CogenOctree
#endif
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?