diff --git a/.integrated_tests.yaml b/.integrated_tests.yaml index 373eae27d7a..8ccd9f29703 100644 --- a/.integrated_tests.yaml +++ b/.integrated_tests.yaml @@ -1,6 +1,6 @@ baselines: bucket: geosx - baseline: integratedTests/baseline_integratedTests-pr4165-17850-4a6ed2e + baseline: integratedTests/baseline_integratedTests-pr4169-17857-d74ab90 allow_fail: all: '' streak: '' \ No newline at end of file diff --git a/BASELINE_NOTES.md b/BASELINE_NOTES.md index d18697ae942..b288f0f493c 100644 --- a/BASELINE_NOTES.md +++ b/BASELINE_NOTES.md @@ -5,6 +5,10 @@ This file is designed to track changes to the integrated test baselines. Any developer who updates the baseline ID in the .integrated_tests.yaml file is expected to create an entry in this file with the pull request number, date, and their justification for rebaselining. These notes should be in reverse-chronological order, and use the following time format: (YYYY-MM-DD). +PR #4169 (2026-10-23) +===================== +Fix surface generator splitting for contact mechanics case with wells + PR #4165 (2026-10-29) ===================== Add zero salinity, non-default compressibility pvt driver test diff --git a/inputFiles/poromechanicsFractures/Contact/AugmentedLagrangianMultipliers/ALM_inclinedFault_ESG_friction_cohesion_smoke.xml b/inputFiles/poromechanicsFractures/Contact/AugmentedLagrangianMultipliers/ALM_inclinedFault_ESG_friction_cohesion_smoke.xml index d5faabd5dbd..50f099f595d 100755 --- a/inputFiles/poromechanicsFractures/Contact/AugmentedLagrangianMultipliers/ALM_inclinedFault_ESG_friction_cohesion_smoke.xml +++ b/inputFiles/poromechanicsFractures/Contact/AugmentedLagrangianMultipliers/ALM_inclinedFault_ESG_friction_cohesion_smoke.xml @@ -173,6 +173,13 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/inputFiles/poromechanicsFractures/Contact/AugmentedLagrangianMultipliers/ALM_inclinedFault_base.xml b/inputFiles/poromechanicsFractures/Contact/AugmentedLagrangianMultipliers/ALM_inclinedFault_base.xml index 0df32c00838..59f576bb598 100755 --- a/inputFiles/poromechanicsFractures/Contact/AugmentedLagrangianMultipliers/ALM_inclinedFault_base.xml +++ b/inputFiles/poromechanicsFractures/Contact/AugmentedLagrangianMultipliers/ALM_inclinedFault_base.xml @@ -60,13 +60,6 @@ fieldName="fracturePorosity_porosity" scale="1.00"/> - - ( &elemManager.getRegion( er ).getSubRegion( esr ) ); +} + /// Return the other edge of a face given one edge. static localIndex GetOtherFaceEdge( const map< localIndex, std::pair< localIndex, localIndex > > & localFacesToEdges, const localIndex thisFace, const localIndex thisEdge ) @@ -1076,7 +1085,11 @@ bool SurfaceGenerator::findFracturePlanes( localIndex const nodeID, localIndex const er = nodeToRegionMap[k]; localIndex const esr = nodeToSubRegionMap[k]; localIndex const ei = nodeToElementMap[k]; - CellElementSubRegion const * subRegion = &elemManager.getRegion( er ).getSubRegion< CellElementSubRegion >( esr ); + CellElementSubRegion const * subRegion = getCellSubRegion( elemManager, er, esr ); + if( subRegion == nullptr ) + { + continue; + } std::pair< CellElementSubRegion const *, localIndex > const p( subRegion, ei ); // Keep pairs unique (small N — linear search is fine). @@ -1100,6 +1113,12 @@ bool SurfaceGenerator::findFracturePlanes( localIndex const nodeID, stdVector< std::pair< CellElementSubRegion const *, localIndex > > const nodeToElementMaps( buildNodeToElementMaps() ); + // A node attached only to non-3D elements (e.g. a well node) cannot be split. + if( nodeToElementMaps.empty() ) + { + return false; + } + arrayView1d< integer const > const & isEdgeExternal = edgeManager.isExternal(); // const std::set& usedFaces = nodeManager.GetUnorderedVariableOneToManyMap("usedFaces")[nodeID]; @@ -2725,9 +2744,11 @@ void SurfaceGenerator::mapConsistencyCheck( localIndex const GEOS_UNUSED_PARAM( { if( nodeToRegionMap[a][k]!=-1 && nodeToSubRegionMap[a][k]!=-1 && nodeToElementMap[a][k]!=-1 ) { - nodeToElements.emplace( &elementManager.getRegion( nodeToRegionMap( a, k ) ). - getSubRegion< CellElementSubRegion >( nodeToSubRegionMap( a, k ) ), - nodeToElementMap( a, k ) ); + CellElementSubRegion const * const subRegion = getCellSubRegion( elementManager, nodeToRegionMap( a, k ), nodeToSubRegionMap( a, k ) ); + if( subRegion != nullptr ) + { + nodeToElements.emplace( subRegion, nodeToElementMap( a, k ) ); + } } } @@ -3142,7 +3163,12 @@ void SurfaceGenerator::calculateNodeAndFaceSif( DomainPartition const & domain, localIndex const esr = nodeToSubRegionMap[nodeIndex][k]; localIndex const ei = nodeToElementMap[nodeIndex][k]; - CellElementSubRegion const & elementSubRegion = elementManager.getRegion( er ).getSubRegion< CellElementSubRegion >( esr ); + CellElementSubRegion const * const cellSubRegion = getCellSubRegion( elementManager, er, esr ); + if( cellSubRegion == nullptr ) + { + continue; + } + CellElementSubRegion const & elementSubRegion = *cellSubRegion; arrayView2d< localIndex const, cells::NODE_MAP_USD > const & elementsToNodes = elementSubRegion.nodeList(); arrayView2d< real64 const > const & elementCenter = elementSubRegion.getElementCenter().toViewConst(); @@ -3243,20 +3269,31 @@ void SurfaceGenerator::calculateNodeAndFaceSif( DomainPartition const & domain, { real64 averageYoungModulus( 0 ), averagePoissonRatio( 0 ); localIndex nodeID = i == 0 ? tralingNodeID : theOtherTrailingNodeID; + localIndex numCellElements = 0; for( localIndex k=0; k( fExternal[i], fext[nodeID] ); LvArray::tensorOps::scale< 3 >( fExternal[i], averageYoungModulus / (1 - averagePoissonRatio * averagePoissonRatio) ); @@ -3933,7 +3970,12 @@ int SurfaceGenerator::calculateElementForcesOnEdge( DomainPartition const & doma localIndex const esr = nodeToSubRegionMap[nodeID][k]; localIndex const ei = nodeToElementMap[nodeID][k]; - CellElementSubRegion const & elementSubRegion = elementManager.getRegion( er ).getSubRegion< CellElementSubRegion >( esr ); + CellElementSubRegion const * const cellSubRegion = getCellSubRegion( elementManager, er, esr ); + if( cellSubRegion == nullptr ) + { + continue; + } + CellElementSubRegion const & elementSubRegion = *cellSubRegion; real64 xEle[3] = LVARRAY_TENSOROPS_INIT_LOCAL_3( elemCenter[er][esr][ei] );