Improved ODB support (#8046)

* Experiments for supporting visualization of new ODB files from WIA workflow

* Some more experiments to get odb working for wia results

* More work in progress, experimenting to get wellIA result files to load properly

* Make sure all part geometries use the same global bounding box

* Clean up code

* Add some safeguards for data calculations
Move parts below grid in project tree

* Fix warnings

* Add support for C3D8RT elements
Add some more safeguards for missing data
Remove strange part handling

* Support elements with reduced number of integration points by pretending to have 8.

* Change integration point mapping to correct order (ref. Stein and Abaqus 2019 doc)

* Do not allocate too much memory for element nodal results for 20 element node types

* Code cleanup.
Revert back to old integration point numbering scheme (ref. Stein)

* And, another integration point order update...

* Update comments
This commit is contained in:
jonjenssen
2021-09-27 12:44:29 +02:00
committed by GitHub
parent ed2beec359
commit d09ae4e1cb
26 changed files with 539 additions and 123 deletions

View File

@@ -202,10 +202,11 @@ RivGeoMechPartMgr* RivGeoMechVizLogic::getUpdatedPartMgr( RivGeoMechPartMgrCache
partMgrToUpdate->clearAndSetReservoir( caseData );
}
partMgrToUpdate->setTransform( m_geomechView->scaleTransform() );
for ( int femPartIdx = 0; femPartIdx < partCount; ++femPartIdx )
{
cvf::ref<cvf::UByteArray> elmVisibility = partMgrToUpdate->cellVisibility( femPartIdx );
partMgrToUpdate->setTransform( m_geomechView->scaleTransform() );
if ( pMgrKey.geometryType() == RANGE_FILTERED )
{
@@ -269,9 +270,12 @@ void RivGeoMechVizLogic::calculateCurrentTotalCellVisibility( cvf::UByteArray* t
if ( gridCount == 0 ) return;
RigFemPart* part = m_geomechView->femParts()->part( 0 );
int elmCount = part->elementCount();
int elmCount = 0;
for ( int i = 0; i < m_geomechView->femParts()->partCount(); i++ )
{
RigFemPart* part = m_geomechView->femParts()->part( i );
elmCount += part->elementCount();
}
totalVisibility->resize( elmCount );
totalVisibility->setAll( false );
@@ -282,10 +286,17 @@ void RivGeoMechVizLogic::calculateCurrentTotalCellVisibility( cvf::UByteArray* t
CVF_ASSERT( partMgr );
if ( partMgr )
{
cvf::ref<cvf::UByteArray> visibility = partMgr->cellVisibility( 0 );
for ( int elmIdx = 0; elmIdx < elmCount; ++elmIdx )
int elmOffset = 0;
for ( int i = 0; i < m_geomechView->femParts()->partCount(); i++ )
{
( *totalVisibility )[elmIdx] |= ( *visibility )[elmIdx];
RigFemPart* part = m_geomechView->femParts()->part( i );
cvf::ref<cvf::UByteArray> visibility = partMgr->cellVisibility( i );
for ( int elmIdx = 0; elmIdx < part->elementCount(); ++elmIdx )
{
( *totalVisibility )[elmOffset + elmIdx] |= ( *visibility )[elmIdx];
}
elmOffset += part->elementCount();
}
}
}