void SerialBlockCommunicator2D::communicate ( std::vector<Overlap2D> const& overlaps, MultiBlock2D const& originMultiBlock, MultiBlock2D& destinationMultiBlock, modif::ModifT whichData ) const { for (pluint iOverlap=0; iOverlap<overlaps.size(); ++iOverlap) { copyOverlap(overlaps[iOverlap], originMultiBlock, destinationMultiBlock, whichData); } }
void SerialBlockCommunicator2D::duplicateOverlaps(MultiBlock2D& multiBlock, modif::ModifT whichData) const { MultiBlockManagement2D const& multiBlockManagement = multiBlock.getMultiBlockManagement(); LocalMultiBlockInfo2D const& localInfo = multiBlockManagement.getLocalInfo(); // Non-periodic communication for (pluint iOverlap=0; iOverlap<localInfo.getNormalOverlaps().size(); ++iOverlap) { copyOverlap(localInfo.getNormalOverlaps()[iOverlap], multiBlock, multiBlock, whichData); } // Periodic communication PeriodicitySwitch2D const& periodicity = multiBlock.periodicity(); for (pluint iOverlap=0; iOverlap<localInfo.getPeriodicOverlaps().size(); ++iOverlap) { PeriodicOverlap2D const& pOverlap = localInfo.getPeriodicOverlaps()[iOverlap]; if (periodicity.get(pOverlap.normalX, pOverlap.normalY)) { copyOverlap(pOverlap.overlap, multiBlock, multiBlock, whichData); } } }
template <class T, typename S> T* ArrayBase<T,S>::replace(S start, S end, S size) { FW_ASSERT(start >= 0); FW_ASSERT(start <= end); FW_ASSERT(end <= m_size); FW_ASSERT(size >= 0); S tailSize = m_size - end; S newEnd = start + size; resize(m_size + newEnd - end); copyOverlap(m_ptr + newEnd, m_ptr + end, tailSize); return m_ptr + start; }