示例#1
0
//--------------------------------------------------------------------------------------------------
/// 
//--------------------------------------------------------------------------------------------------
const cvf::UByteArray* RivReservoirViewPartMgr::cellVisibility(RivCellSetEnum geometryType, size_t gridIndex, size_t timeStepIndex)
{
    ensureDynamicGeometryPartsCreated(geometryType, timeStepIndex);
    ensureStaticGeometryPartsCreated(geometryType);

    RivReservoirPartMgr * pmgr = (const_cast<RivReservoirViewPartMgr*>(this))->reservoirPartManager( geometryType,  timeStepIndex );
    
    return pmgr->cellVisibility(gridIndex).p();
}
示例#2
0
//--------------------------------------------------------------------------------------------------
/// 
//--------------------------------------------------------------------------------------------------
void RivReservoirViewPartMgr::updateFaultColors(RivCellSetEnum geometryType, size_t timeStepIndex, RimEclipseCellColors* cellResultColors)
{
    if (geometryType == PROPERTY_FILTERED && timeStepIndex >= m_propFilteredGeometryFrames.size())
    {
        return;
    }

    if (geometryType == PROPERTY_FILTERED_WELL_CELLS && timeStepIndex >= m_propFilteredWellGeometryFrames.size())
    {
        return;
    }

    RivReservoirPartMgr* pmgr = reservoirPartManager(geometryType, timeStepIndex);
    pmgr->updateFaultColors(timeStepIndex, cellResultColors);
}
示例#3
0
//--------------------------------------------------------------------------------------------------
/// 
//--------------------------------------------------------------------------------------------------
void RivReservoirViewPartMgr::updateFaultCellEdgeResultColor(RivCellSetEnum geometryType, size_t timeStepIndex, RimEclipseCellColors* cellResultColors, RimCellEdgeColors* cellEdgeResultColors)
{
    RivReservoirPartMgr * pmgr = reservoirPartManager(geometryType, timeStepIndex);
    pmgr->updateFaultCellEdgeResultColor(timeStepIndex, cellResultColors, cellEdgeResultColors);
}
示例#4
0
//--------------------------------------------------------------------------------------------------
/// 
//--------------------------------------------------------------------------------------------------
void RivReservoirViewPartMgr::updateCellColor(RivCellSetEnum geometryType, size_t timeStepIndex, cvf::Color4f color)
{
    RivReservoirPartMgr * pmgr = reservoirPartManager( geometryType,  timeStepIndex );
    pmgr->updateCellColor(color);
}
示例#5
0
//--------------------------------------------------------------------------------------------------
/// 
//--------------------------------------------------------------------------------------------------
void RivReservoirViewPartMgr::computeRangeVisibility(RivCellSetEnum geometryType, 
                                                     cvf::UByteArray* cellVisibility, 
                                                     const RigGridBase* grid, 
                                                     const cvf::UByteArray* nativeVisibility, 
                                                     const RimCellRangeFilterCollection* rangeFilterColl) 
{
    CVF_ASSERT(cellVisibility != nullptr);
    CVF_ASSERT(nativeVisibility != nullptr);
    CVF_ASSERT(rangeFilterColl != nullptr);

    CVF_ASSERT(grid != nullptr);
    CVF_ASSERT(nativeVisibility->size() == grid->cellCount());

    // Initialize range filter with native visibility
    if (cellVisibility != nativeVisibility) (*cellVisibility) = (*nativeVisibility);

    if (rangeFilterColl->hasActiveFilters() || m_reservoirView->wellCollection()->hasVisibleWellCells())
    {
        // Build range filter for current grid
        cvf::CellRangeFilter gridCellRangeFilter;
        rangeFilterColl->compoundCellRangeFilter(&gridCellRangeFilter, grid->gridIndex());

        const RigLocalGrid* lgr = nullptr;
        cvf::ref<cvf::UByteArray> parentGridVisibilities;

        if (!grid->isMainGrid())
        {
            lgr = static_cast<const RigLocalGrid*>(grid);

            size_t parentGridIndex = lgr->parentGrid()->gridIndex();
            CVF_ASSERT(parentGridIndex < grid->gridIndex());

            if (geometryType == RANGE_FILTERED_WELL_CELLS)
            {
                geometryType = RANGE_FILTERED; // Use the range filtering in the parent grid, not the well cells in the parent grid
            }

            RivReservoirPartMgr* reservoirGridPartMgr = &m_geometries[geometryType];

            parentGridVisibilities = reservoirGridPartMgr->cellVisibility(parentGridIndex);
        }

        bool hasAdditiveRangeFilters = rangeFilterColl->hasActiveIncludeFilters() || m_reservoirView->wellCollection()->hasVisibleWellCells();

#pragma omp parallel for 
        for (int cellIndex = 0; cellIndex < static_cast<int>(grid->cellCount()); cellIndex++)
        {
            if ( (*nativeVisibility)[cellIndex] )
            {
                const RigCell& cell = grid->cell(cellIndex);
                bool visibleDueToParentGrid = false;
                if (lgr)
                {
                    size_t parentGridCellIndex = cell.parentCellIndex();
                    visibleDueToParentGrid = parentGridVisibilities->get(parentGridCellIndex);
                }

                // Normal grid visibility
                size_t mainGridI;
                size_t mainGridJ;
                size_t mainGridK;

                bool isInSubGridArea = cell.subGrid() != nullptr;
                grid->ijkFromCellIndex(cellIndex, &mainGridI, &mainGridJ, &mainGridK);
                
                bool nativeRangeVisibility = false;
                   
                if (hasAdditiveRangeFilters)
                {
                    nativeRangeVisibility = gridCellRangeFilter.isCellVisible(mainGridI, mainGridJ, mainGridK, isInSubGridArea);
                }
                else
                {
                    // Special handling when no include filters are present. Use native visibility 
                    nativeRangeVisibility = (*nativeVisibility)[cellIndex];
                }
                
                (*cellVisibility)[cellIndex] = (visibleDueToParentGrid || nativeRangeVisibility) 
                                                && !gridCellRangeFilter.isCellExcluded(mainGridI, mainGridJ, mainGridK, isInSubGridArea);
            }
        }
    }
}
//--------------------------------------------------------------------------------------------------
/// 
//--------------------------------------------------------------------------------------------------
cvf::cref<cvf::UByteArray> RivReservoirViewPartMgr::cellVisibility(ReservoirGeometryCacheType geometryType, size_t gridIndex, size_t timeStepIndex) const
{
    RivReservoirPartMgr * pmgr = (const_cast<RivReservoirViewPartMgr*>(this))->reservoirPartManager( geometryType,  timeStepIndex );
    return pmgr->cellVisibility(gridIndex).p();
}
//--------------------------------------------------------------------------------------------------
/// 
//--------------------------------------------------------------------------------------------------
void RivReservoirViewPartMgr::updateFaultCellEdgeResultColor(ReservoirGeometryCacheType geometryType, size_t timeStepIndex, RimResultSlot* cellResultSlot, RimCellEdgeResultSlot* cellEdgeResultSlot)
{
	RivReservoirPartMgr * pmgr = reservoirPartManager(geometryType, timeStepIndex);
	pmgr->updateFaultCellEdgeResultColor(timeStepIndex, cellResultSlot, cellEdgeResultSlot);
}