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

📄 wzcoordinates.hxx

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

#include "wzpoint.hxx"
#include "wzsafepointer.hxx"

// defined in wzcroundedbox.cxx:
class wzRoundedBoxCoordinates;

// may be thrown by any coordinate transformation:

class wzCoordinateFailure{};

class wzCoordinates;

// these classes are for internal use by derived classes only:
class wz3DCoordinates;
class wz2DCoordinates;
class wz1DCoordinates;

extern const wzFloat	wzPi;

class wzCoordinates: public wzProxyTarget{
public:
  wzIndex dim;
  wzFloat ymin[3], ymax[3];
  virtual void x1(wzFloat *y) const;	// single argument version
  virtual void y1(wzFloat *x) const;	// single argument version
  virtual void x(wzFloat *x, const wzFloat *y) const;
  virtual void y(wzFloat *y, const wzFloat *x) const;
  virtual void dx(wzFloat *d, const wzFloat *y, wzIndex dir) const;
  virtual void dy(wzFloat *d, const wzFloat *x, wzIndex dir) const;
  wzCoordinates(wzIndex dim=3);
  void test();
};

typedef wzProxy<wzCoordinates> wzcoordinates;

class wz3DCoordinates: public wzCoordinates{
public:
  void x1(wzFloat *y) const;
  void y1(wzFloat *x) const;
protected:
  wz3DCoordinates():wzCoordinates(3){}
};

class wz2DCoordinates: public wzCoordinates{
public:
  void x1(wzFloat *y) const;
  void y1(wzFloat *x) const;
protected:
  wz2DCoordinates():wzCoordinates(2){}
};

class wz1DCoordinates: public wzCoordinates{
public:
  void x1(wzFloat *y) const;
  void y1(wzFloat *x) const;
protected:
  wz1DCoordinates():wzCoordinates(1){}
};

class wz3DContinuation: public wz3DCoordinates{
  wzcoordinates original;
  wzcoordinates scale;
public:
  void x(wzFloat *x, const wzFloat *y) const;
  void y(wzFloat *y, const wzFloat *x) const;
  wz3DContinuation(wzcoordinates orig,wzcoordinates s=0);
};

class wzXYSwitch: public wz3DCoordinates{
  wzcoordinates original;
public:
  void x(wzFloat *x, const wzFloat *y) const;
  void y(wzFloat *y, const wzFloat *x) const;
  wzXYSwitch(wzcoordinates orig);
};
class wzYZSwitch: public wz3DCoordinates{
  wzcoordinates original;
public:
  void x(wzFloat *x, const wzFloat *y) const;
  void y(wzFloat *y, const wzFloat *x) const;
  wzYZSwitch(wzcoordinates orig);
};
class wzZXSwitch: public wz3DCoordinates{
  wzcoordinates original;
public:
  void x(wzFloat *x, const wzFloat *y) const;
  void y(wzFloat *y, const wzFloat *x) const;
  wzZXSwitch(wzcoordinates orig);
};

class wzPolarCoordinates: public wz2DCoordinates{
  wzFloat Epsilon;
public:
  void x(wzFloat *x, const wzFloat *y) const;
  void y(wzFloat *y, const wzFloat *x) const;
  wzPolarCoordinates();
  void setMinimalRadius(wzFloat eps);
};

class wzEllipticCoordinates: public wz2DCoordinates{
  wzcoordinates polar;
  wzcoordinates shukowski;
public:
  void x(wzFloat *x, const wzFloat *y) const;
  void y(wzFloat *y, const wzFloat *x) const;
  wzEllipticCoordinates(wzFloat a0=1);
};

class wzScaleExp: public wz1DCoordinates{
public:
  void x(wzFloat *x, const wzFloat *y) const;
  void y(wzFloat *y, const wzFloat *x) const;
  wzScaleExp();
};
class wzScaleLog: public wz1DCoordinates{
public:
  void x(wzFloat *x, const wzFloat *y) const;
  void y(wzFloat *y, const wzFloat *x) const;
  wzScaleLog();
};

class wzComplexExp: public wz2DCoordinates{
public:
  void x(wzFloat *x, const wzFloat *y) const;
  void y(wzFloat *y, const wzFloat *x) const;
  wzComplexExp();
};

class wzComplexShukowski: public wz2DCoordinates{
  wzFloat lambda,rr,m0,m1,d0,d1,e0,e1,c0,c1;
  wzcoordinates base;
public:
  void x(wzFloat *x, const wzFloat *y) const;
  void y(wzFloat *y, const wzFloat *x) const;
  void setShiftPoints(wzFloat x0=0,wzFloat y0=-1,wzFloat x1=0,wzFloat y1=0);
  void setLambda(wzFloat lambda=0);
  wzComplexShukowski(wzcoordinates base=0);
};

class wzSphericalCoordinates: public wz3DCoordinates{
  wzFloat Epsilon;
public:
  void x(wzFloat *x, const wzFloat *y) const;
  void y(wzFloat *y, const wzFloat *x) const;
  wzSphericalCoordinates();
  void setMinimalRadius(wzFloat eps);
};



/*
class wzCylinderCoordinates: public wzCoordinates{
  wzcoordinates coordinates;
public:
  void x(wzFloat *x, const wzFloat *y) const;
  void y(wzFloat *y, const wzFloat *x) const;
  wzCylinderCoordinates(wzcoordinates planar);
};

class wzParabolicCoordinates: public wzCoordinates{
public:
  void x(wzFloat *x, const wzFloat *y) const;
  void y(wzFloat *y, const wzFloat *x) const;
};

class wzEllipticCoordinates: public wzCoordinates{
public:
  void x(wzFloat *x, const wzFloat *y) const;
  void y(wzFloat *y, const wzFloat *x) const;
};
*/

class wzRoundedBoxCoordinates: public wz2DCoordinates{
  wzFloat xc,yc,lx,ly,st1,st2,st3,st4,st5,up,phi;
public:
  void x(wzFloat *x, const wzFloat *y) const;
  void y(wzFloat *y, const wzFloat *x) const;
  wzRoundedBoxCoordinates(wzFloat cx, wzFloat cy, wzFloat xl, wzFloat yl);
};

#endif

⌨️ 快捷键说明

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