コード例 #1
0
ファイル: ASMs1D.C プロジェクト: OPM/IFEM
bool ASMs1D::refine (const RealArray& xi)
{
  if (!curv || xi.empty()) return false;
  if (xi.front() < 0.0 || xi.back() > 1.0) return false;
  if (shareFE) return true;

  RealArray extraKnots;
  RealArray::const_iterator uit = curv->basis().begin();
  double ucurr, uprev = *(uit++);
  while (uit != curv->basis().end())
  {
    ucurr = *(uit++);
    if (ucurr > uprev)
      for (size_t i = 0; i < xi.size(); i++)
	if (i > 0 && xi[i] < xi[i-1])
	  return false;
	else
	  extraKnots.push_back(ucurr*xi[i] + uprev*(1.0-xi[i]));

    uprev = ucurr;
  }

  curv->insertKnot(extraKnots);
  return true;
}
コード例 #2
0
ファイル: SparseMatrix.C プロジェクト: kmokstad/IFEM-2
bool SparseMatrix::assembleCol (const RealArray& V, const SAM& sam,
                                int n, size_t col)
{
  if (V.empty() || col > ncol) return false;

  IntVec mnen;
  if (!sam.getNodeEqns(mnen,n)) return false;

  assemSparse(V,*this,col,mnen,sam.meqn,sam.mpmceq,sam.mmceq,sam.ttcc);
  return true;
}