diff --git a/src/sampling/sampledSurface/sampledMeshedSurface/sampledMeshedSurface.C b/src/sampling/sampledSurface/sampledMeshedSurface/sampledMeshedSurface.C index 9506a9e85fab2f67461ad9d9cc6392a67456aff3..0af0390b951e9f29c8f3243bd4fa5f20bd71ca83 100644 --- a/src/sampling/sampledSurface/sampledMeshedSurface/sampledMeshedSurface.C +++ b/src/sampling/sampledSurface/sampledMeshedSurface/sampledMeshedSurface.C @@ -529,7 +529,65 @@ Foam::sampledMeshedSurface::sampledMeshedSurface zoneIds_(), sampleElements_(), samplePoints_() -{} +{ + wordRes includePatches; + dict.readIfPresent("patches", includePatches); + includePatches.uniq(); + + // Could also shift this to the reader itself, + // but not yet necessary. + + if (!includePatches.empty()) + { + Info<< "Subsetting surface " << surfaceName_ + << " to patches: " << flatOutput(includePatches) << nl; + + const surfZoneList& zones = surface_.surfZones(); + + const labelList zoneIndices + ( + stringListOps::findMatching + ( + zones, + includePatches, + wordRes(), + nameOp<surfZone>() + ) + ); + + // Faces to subset + bitSet includeMap(surface_.size()); + + for (const label zonei : zoneIndices) + { + const surfZone& zn = zones[zonei]; + includeMap.set(zn.range()); + } + + if (includeMap.none()) + { + WarningInFunction + << "Patch selection results in an empty surface" + << " - ignoring" << nl; + } + else if (!includeMap.all()) + { + meshedSurface newSurf(surface_.subsetMesh(includeMap)); + + if (newSurf.empty()) + { + WarningInFunction + << "Bad surface subset (empty)" + << " - skip and hope for the best" << nl; + } + else + { + // Replace + surface_.transfer(newSurf); + } + } + } +} // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // diff --git a/src/sampling/sampledSurface/sampledMeshedSurface/sampledMeshedSurface.H b/src/sampling/sampledSurface/sampledMeshedSurface/sampledMeshedSurface.H index a6ab32d799ff5da0dfbf9495d4b18a4bf90b9af4..05da864184ad6a5b42839248ff2d8a704f686d78 100644 --- a/src/sampling/sampledSurface/sampledMeshedSurface/sampledMeshedSurface.H +++ b/src/sampling/sampledSurface/sampledMeshedSurface/sampledMeshedSurface.H @@ -84,6 +84,7 @@ Usage Property | Description | Required | Default type | meshedSurface | yes | surface | surface name in triSurface/ | yes | + patches | Limit to named surface regions (wordRes) | no | source | cells/insideCells/boundaryFaces | yes | keepIds | pass through id numbering | no | false \endtable @@ -141,7 +142,7 @@ private: word surfaceName_; //- Surface to sample on - const meshedSurface surface_; + meshedSurface surface_; //- Whether to sample internal cell values or boundary values const samplingSource sampleSource_; diff --git a/src/sampling/sampledSurface/sampledMeshedSurface/sampledMeshedSurfaceNormal.H b/src/sampling/sampledSurface/sampledMeshedSurface/sampledMeshedSurfaceNormal.H index 7b595d64611d70c1dc54f610908bbc84b04437d7..24a580e0353ac99da5ce2af1cecdabcddcefad8e 100644 --- a/src/sampling/sampledSurface/sampledMeshedSurface/sampledMeshedSurfaceNormal.H +++ b/src/sampling/sampledSurface/sampledMeshedSurface/sampledMeshedSurfaceNormal.H @@ -54,6 +54,7 @@ Usage Property | Description | Required | Default type | meshedSurfaceNormal | yes | surface | surface name in triSurface/ | yes | + patches | Limit to named surface regions (wordRes) | no | source | cells/insideCells/boundaryFaces | yes | keepIds | pass through id numbering | no | false \endtable