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; }
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); }