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

📄 cogfaces.hxx

📁 有限元学习研究用源代码(老外的),供科研人员参考
💻 HXX
字号:
#ifndef cogfaces_hxx
#define cogfaces_hxx

//  defines the following classes:

class CogeometryForBoundary;
class CogeometryForFaces;
class CogeometryWithBoundary;
class CogeometryWithFaces;
class CogeometryOfBoundary;
class CogeometryOfFaces;

/*
  naming convention: 
  "Faces" defines only boundary conditions for inner boundary faces;
  "Boundary" defines also the boundary condition for outside;
  "For" uses a cogeometry (their Point function) to define the face function;
  "With" uses an abstract PointToSegment object to define the face function;
  "Of" uses a simple function cogSegment face(cogPoint);
  */

#include "cogfunction.hxx"

class CogeometryForBoundary: public Cogeometry{
  const cogeometry old;
  const cogeometry face;
  CogeometryForBoundary(cogeometry boundary, cogeometry original)
    :old(original),face(boundary){;}
  cogIndex	Point(cogPoint& p0) const {return old->Point(p0);}
  cogIndex	Line (cogFlag1& f, const cogLine& s) const;
  cogIndex 	BoundaryCondition(cogFlag1& f) const;
  void setDelta(cogFloat delta=1.e-4);
};

class CogeometryForFaces: public Cogeometry{
  const cogeometry old;
  const cogeometry face;
  CogeometryForFaces(const Cogeometry& for_face, const Cogeometry& original)
    :old(&original),face(&for_face){;}
  cogIndex	Point(cogPoint& p0) const {return old->Point(p0);}
  cogIndex	Line (cogFlag1& f, const cogLine& s) const;
  void setDelta(cogFloat delta=1.e-4);
};

class CogeometryWithBoundary: public Cogeometry{
  const cogPointToSegment& f;
  const cogeometry old;
public:
  CogeometryWithBoundary(const cogPointToSegment& func,const cogeometry geom)
    :f(func),old(geom){;}
  cogIndex	Point(cogPoint& p0) const {return old->Point(p0);}
  cogIndex	Line (cogFlag1& f, const cogLine& s) const;
  cogIndex 	BoundaryCondition(cogFlag1& f) const;
  void setDelta(cogFloat delta=1.e-4);
};

class CogeometryWithFaces: public Cogeometry{
  const cogPointToSegment& f;
  const cogeometry old;
public:
  CogeometryWithFaces(const cogPointToSegment& func,const cogeometry geom)
    :f(func),old(geom){;}
  cogIndex	Point(cogPoint& p0) const {return old->Point(p0);}
  cogIndex	Line (cogFlag1& f, const cogLine& s) const;
  void setDelta(cogFloat delta=1.e-4);
};

class CogeometryOfBoundary
:public cogPointToSegment
,public CogeometryWithBoundary
{
public:
  cogSegment (*f)(const cogPoint& p);
  CogeometryOfBoundary(cogSegment (*func)(const cogPoint& p),cogeometry geom)
    :CogeometryWithBoundary(*(cogPointToSegment*)this,geom),f(func){;}
  cogSegment operator()(const cogPoint& p) const
  {return f(p);}
};

class CogeometryOfFaces
:public cogPointToSegment
,public CogeometryWithFaces
{
public:
  cogSegment (*f)(const cogPoint& p);
  CogeometryOfFaces(cogSegment (*func)(const cogPoint& p),cogeometry g)
    :CogeometryWithFaces(*(cogPointToSegment*)this,g),f(func){;}
  cogSegment operator()(const cogPoint& p) const
  {return f(p);}
};

// obsolete names:

#define CogeometrySimpleFaces CogeometryOfFaces

#endif

⌨️ 快捷键说明

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