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

📄 cogenchart.cxx

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

cogenChart	CogenChart::cogenchart() const {return (CogenChart *) this;}

CogenChart::CogenChart(cogenerator gen, wzcoordinates c)
  //  :original(gen),
  :CogenDecorator(gen),
   coordinates(c)
{
  original->endInitialization();
}

wzFloat CogenChart::chi(const wzPoint& p0) const
{
  wzPoint p;
  coordinates->y(p.X,p0.X);
  return original->chi(p);
}

static wzFloat ppmin = 1/(wzInfty*wzInfty);
void CogenChart::getMetric(wzMetricData& data, const wzPoint& p0) const
{
  wzPoint po,p;
  wzFloat pp;
  wzIndex i,j,d=coordinates->dim;
  for(i=0;i<d;i++){
    coordinates->dx(p.X,p0.X,i);
    for(j=0,pp=0;j<d;j++) pp += p[j]*p[j];
    if(pp<ppmin) pp=ppmin;
    ((wzDiagonalMetricData*)(&data))->g_ii[i] = pp;
  }
}

void CogenChart::getMetric(wzMetricData& data, const cogFlag1& f) const
{
  wzPoint po,p;
  wzFloat pp;
  wzIndex i,j,d=coordinates->dim;
  for(i=0;i<d;i++){
    coordinates->dx(p.X,f.p1.X,i);
    for(j=0,pp=0;j<d;j++) pp += p[j]*p[j];
    ((wzDiagonalMetricData*)(&data))->g_ii[i] = pp;
  }
}

wzFloat CogenChart::g_ii(const wzMetricData& data, 
			 const wzPoint& q, wzIndex i) const
{
  return ((wzDiagonalMetricData*)(&data))->g_ii[i];
}
wzFloat CogenChart::g_ii(const wzMetricData& data, 
			 const cogFlag1& q, wzIndex i) const
{
  return ((wzDiagonalMetricData*)(&data))->g_ii[i];
}

cogIndex CogenChart::Point(wzPoint& p0) const
{
  wzPoint p;
  coordinates->y(p.X,p0.X);
  wzIndex rc = original->geometry()->Point(p);
  p0.segment() = p.segment();
  return rc;
}

cogIndex CogenChart::Line (cogFlag1& f0, const cogLine& s0) const
{
  wzPoint fp1,fp0,fpo,sp0,sp1;
  cogLine s(sp0,sp1);
  cogFlag1 f(fp1,fp0,fpo);
  wzIndex rc = Cogeometry::Line(f0,s0);
  if(rc == cogRCFaceFound){
    sp0 = f0.p0; coordinates->y(sp0.X,f0.p0.X); 
    sp1 = f0.po; coordinates->y(sp1.X,f0.po.X);
    //  sp0 = s0.c0; coordinates->y(sp0.X,s0.c0.X); 
    //  sp1 = s0.c1; coordinates->y(sp1.X,s0.c1.X);
    rc = original->geometry()->Line(f,s);
    f0.p1 = fp1; coordinates->x(f0.p1.X,fp1.X);
    f0.p0 = fp0; coordinates->x(f0.p0.X,fp0.X);
    f0.po = fpo; coordinates->x(f0.po.X,fpo.X);
    //    f0.p1 = fp1; coordinates->x(f0.p1.X,fp1.X);
    //    f0.p0 = fp0; coordinates->x(f0.p0.X,fp0.X);
    //    f0.po = fpo; coordinates->x(f0.po.X,fpo.X);
  }
  return rc;
}

cogIndex CogenChart::BoundaryCondition(cogFlag1& f) const
{
  wzPoint p1,p0,po; cogFlag1 pp(p1,p0,po);
  coordinates->y(p1.X,f.p1.X);
  coordinates->y(p0.X,f.p0.X);
  coordinates->y(po.X,f.po.X);
  original->geometry()->BoundaryCondition(pp);
  f.p1.segment() = p1.segment();
  return cogRCConditionFound;
}

CogeometryChart::CogeometryChart(cogeometry old, wzcoordinates c)
  :original(old),
   coordinates(c)
{}

cogIndex CogeometryChart::Point(wzPoint& p0) const
{
  wzPoint p;
  coordinates->x(p.X,p0.X);
  wzIndex rc = original->Point(p);
  p0.segment() = p.segment();
  return rc;
}

cogIndex CogeometryChart::BoundaryCondition(cogFlag1& f) const
{
  wzPoint p1,p0,po; cogFlag1 pp(p1,p0,po);
  coordinates->x(p1.X,f.p1.X);
  coordinates->x(p0.X,f.p0.X);
  coordinates->x(po.X,f.po.X);
  original->BoundaryCondition(pp);
  f.p1.segment() = p1.segment();
  return cogRCConditionFound;
}

cogIndex CogeometryChart::Line (cogFlag1& f0, const cogLine& s0) const
{
  wzPoint fp1,fp0,fpo,sp0,sp1;
  cogLine s(sp0,sp1);
  cogFlag1 f(fp1,fp0,fpo);
  wzIndex rc = Cogeometry::Line(f0,s0);
  if(rc == cogRCFaceFound){
    sp0 = f0.p0; coordinates->x(sp0.X,f0.p0.X); 
    sp1 = f0.po; coordinates->x(sp1.X,f0.po.X);
    rc = original->Line(f,s);
    f0.p1 = fp1; coordinates->y(f0.p1.X,fp1.X);
    f0.p0 = fp0; coordinates->y(f0.p0.X,fp0.X);
    f0.po = fpo; coordinates->y(f0.po.X,fpo.X);
  }
  return rc;
}

⌨️ 快捷键说明

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