Esempio n. 1
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;
}
Esempio n. 2
0
void 
FreeImageStack::appendAzimuthalAnalysis(const float * pPixels, unsigned int nPitch)
{
            // make the maximum offset the smaller of either width or height of
            // the fourier image
    std::vector<float> aValues(nMaxOffset_ + 1, 0.0f);
    std::vector<unsigned int> aCount(nMaxOffset_ + 1, 0);
    const unsigned char * pData = reinterpret_cast<const unsigned char *>(pPixels);

    for (unsigned int iRow = 0; iRow < nMaxXY_; ++iRow)
        for (unsigned int iColumn = 0; iColumn < nMaxXY_; ++iColumn)
        {
            unsigned int iBin = static_cast<unsigned int>(sqrt(static_cast<double>(iRow) * static_cast<double>(iRow) 
                                                             + static_cast<double>(iColumn) * static_cast<double>(iColumn)));
            aCount[iBin]++;
			 aValues[iBin] += *reinterpret_cast<const float *>((pData + iRow * nPitch + iColumn * sizeof(float)));

        }
    std::vector<float>::iterator iValue;
    std::vector<unsigned int>::const_iterator iCount;
    for (iValue = aValues.begin(), iCount = aCount.begin();
         iValue != aValues.end();
         ++iValue, ++iCount)
        if (*iCount > 0)
            *iValue /= static_cast<float>(*iCount);
        
    aTimeStepAverages_.push_back(aValues);
}