wzmetric.hxx
来自「有限元学习研究用源代码(老外的),供科研人员参考」· HXX 代码 · 共 96 行
HXX
96 行
#ifndef wzmetric_hxx
#define wzmetric_hxx
#include "wzpoint.hxx"
#include "cog.hxx"
#include "wzsafepointer.hxx"
const wzIndex wzMetricDataMaxSize = 20;
class wzMetricData{};
class wzMetricLocal: public wzMetricData{
public:
wzFloat g_ii[wzMetricDataMaxSize];
};
class wzDiagonalMetricData: public wzMetricData
{
public:
wzFloat g_ii[wzPointDim];
};
class wzMetric: public virtual wzProxyTarget{
public:
virtual wzIndex size() const {return 0;}
virtual void getMetric(wzMetricData& data, const wzPoint& p) const
{;}
virtual void getMetric(wzMetricData& data, const cogFlag1& f) const
{;}
virtual wzFloat g_ii(const wzMetricData& data,
const wzPoint& q, wzIndex i) const
{return 1.0;}
virtual wzFloat g_ii(const wzMetricData& data,
const cogFlag1& q, wzIndex i) const
{return 1.0;}
virtual wzFloat distance(const wzMetricData& data,
const wzPoint& p, const wzPoint& q) const;
virtual wzFloat distance(const wzMetricData& data,
const cogFlag1& f, const wzPoint& q) const;
wzBoolean refineBetween(const wzMetricData& data,
const wzPoint& p, const wzPoint& q) const
{return (distance(data,p,q)>1);}
wzBoolean refineBetween(const wzMetricData& data,
const cogFlag1& p, const wzPoint& q) const
{return (distance(data,p,q)>1);}
//obsolete
wzBoolean refineBetween(const wzPoint& p, const wzPoint& q) const
{wzMetricLocal m; getMetric(m,p); return refineBetween(m,p,q);}
void maximalLengthInRegion(wzFloat* d, const wzPoint& p) const
{*d = wzInfty;}
};
class wzDiagonalMetricSimple: public wzMetric
{
protected:
wzFloat G_ii[wzPointDim];
wzFloat f_oo, f_tt;
public:
wzIndex size() const {return wzPointDim*sizeof(wzFloat);}
void refinementGlobal(wzFloat dx, wzFloat dy=wzInfty, wzFloat dz=wzInfty);
void faceRefinementGlobal(wzFloat orthogonal, wzFloat tangential);
virtual void getMetric(wzMetricData& data, const wzPoint& p) const;
virtual void getMetric(wzMetricData& data, const cogFlag1& f) const;
virtual wzFloat g_ii(const wzMetricData& data,
const wzPoint& q, wzIndex i) const
{return G_ii[i];}
virtual wzFloat g_ii(const wzMetricData& data,
const cogFlag1& f, wzIndex i) const;
virtual wzFloat distance(const wzMetricData& data,
const wzPoint& p, const wzPoint& q) const;
virtual wzFloat distance(const wzMetricData& data,
const cogFlag1& f, const wzPoint& q) const;
wzDiagonalMetricSimple(wzFloat dx=wzInfty,
wzFloat dy=wzInfty,
wzFloat dz=wzInfty);
};
class wzMetricByFunction
: public wzDiagonalMetricSimple
{
wzFloat (*Function)(const wzPoint& p);
public:
wzMetricByFunction(wzFloat (*f)(const wzPoint& p)):Function(f){}
virtual void getMetric(wzMetricData& data, const wzPoint& p) const;
virtual void getMetric(wzMetricData& data, const cogFlag1& f) const;
};
typedef wzProxy<wzMetric> wzmetric;
// obsolete:
#define ibgcriteria wzmetric
#define ibgCriteriaSimpleFunction wzMetricByFunction
#endif
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?