コード例 #1
0
ZouHeDynamics::DensityType
ZouHeDynamics::calcDensity(DataType& data, const VelocityType& velocity) const noexcept
{
    const auto center = sumValues(data, CENTER_RHO.at(m_position));
    const auto known  = sumValues(data, KNOWN_RHO.at(m_position));
    const auto velP = velocity.dot(VELOCITIES.at(m_position));
    const auto wHs = Descriptor::getSplitCoefficient();

    return (center + 2.0 * known) / (wHs - velP);
}
コード例 #2
0
ZouHeDynamics::VelocityType
ZouHeDynamics::calcVelocity(DataType& data, DensityType rho) const noexcept
{
    const auto center = sumValues(data, CENTER_RHO.at(m_position));
    const auto known  = sumValues(data, KNOWN_RHO.at(m_position));
    const auto wHs = Descriptor::getSplitCoefficient();

    const RealType speed = wHs - (1.0 / rho * (center + 2.0 * known));

    // Velocity vector
    return speed * VELOCITIES.at(m_position);
}
コード例 #3
0
bool checkLTSumConsistency(LinearTermPtr a, LinearTermPtr b, DofOrderingPtr dofOrdering, BasisCachePtr basisCache)
{
  double tol = 1e-14;

  int numCells = basisCache->cellIDs().size();
  int numDofs = dofOrdering->totalDofs();
  bool forceBoundaryTerm = false;
  FieldContainer<double> aValues(numCells,numDofs), bValues(numCells,numDofs), sumValues(numCells,numDofs);
  a->integrate(aValues,dofOrdering,basisCache,forceBoundaryTerm);
  b->integrate(bValues,dofOrdering,basisCache,forceBoundaryTerm);
  (a+b)->integrate(sumValues, dofOrdering, basisCache, forceBoundaryTerm);

  int size = aValues.size();

  for (int i=0; i<size; i++)
  {
    double expectedValue = aValues[i] + bValues[i];
    double diff = abs( expectedValue - sumValues[i] );
    if (diff > tol)
    {
      return false;
    }
  }
  return true;
}