diff --git a/applications/utilities/postProcessing/sampling/sample/sampleDict b/applications/utilities/postProcessing/sampling/sample/sampleDict index d0ce98158c4ff9610270135a3ee9888cc4670c5e..9a77a6641738e71c7cb209a4b9548ffbc9ed5018 100644 --- a/applications/utilities/postProcessing/sampling/sample/sampleDict +++ b/applications/utilities/postProcessing/sampling/sample/sampleDict @@ -188,8 +188,25 @@ surfaces // cell, can be arbitrarily far away. type patchInternalField; patches ( ".*Wall.*" ); - distance 0.0001; interpolate true; + + + // Optional: specify how to obtain sampling points from the patch + // face centres (default is 'normal') + // + // //- Specify distance to offset in normal direction + offsetMode normal; + distance 0.1; + // + // //- Specify single uniform offset + // offsetMode uniform; + // offset (0 0 0.0001); + // + // //- Specify offset per patch face + // offsetMode nonuniform; + // offsets ((0 0 0.0001) (0 0 0.0002)); + + // Optional: whether to leave as faces (=default) or triangulate // triangulate false; } diff --git a/src/meshTools/mappedPatches/mappedPolyPatch/mappedPatchBase.H b/src/meshTools/mappedPatches/mappedPolyPatch/mappedPatchBase.H index 34c7fa54792055d48b3ab1619549e2dc7b851fcd..8ee8022f6c85c3d0ab63c49ec3ee0b652c273cfd 100644 --- a/src/meshTools/mappedPatches/mappedPolyPatch/mappedPatchBase.H +++ b/src/meshTools/mappedPatches/mappedPolyPatch/mappedPatchBase.H @@ -112,6 +112,10 @@ public: NORMAL // use face normal + distance }; + static const NamedEnum<sampleMode, 4> sampleModeNames_; + + static const NamedEnum<offsetMode, 3> offsetModeNames_; + //- Helper class for finding nearest // Nearest: @@ -146,10 +150,6 @@ private: // Private data - static const NamedEnum<sampleMode, 4> sampleModeNames_; - - static const NamedEnum<offsetMode, 3> offsetModeNames_; - //- Patch to sample const polyPatch& patch_; diff --git a/src/sampling/sampledSurface/sampledPatchInternalField/sampledPatchInternalField.C b/src/sampling/sampledSurface/sampledPatchInternalField/sampledPatchInternalField.C index b9618f866a617ec42ebc0b808fd020a48975b5e8..4f16bbed599c089df6ba2f46789ed59f5d8e7888 100644 --- a/src/sampling/sampledSurface/sampledPatchInternalField/sampledPatchInternalField.C +++ b/src/sampling/sampledSurface/sampledPatchInternalField/sampledPatchInternalField.C @@ -58,24 +58,80 @@ Foam::sampledPatchInternalField::sampledPatchInternalField sampledPatch(name, mesh, dict), mappers_(patchIDs().size()) { - const scalar distance = readScalar(dict.lookup("distance")); - - forAll(patchIDs(), i) + mappedPatchBase::offsetMode mode = mappedPatchBase::NORMAL; + if (dict.found("offsetMode")) { - label patchI = patchIDs()[i]; - mappers_.set + mode = mappedPatchBase::offsetModeNames_.read ( - i, - new mappedPatchBase - ( - mesh.boundaryMesh()[patchI], - mesh.name(), // sampleRegion - mappedPatchBase::NEARESTCELL, // sampleMode - word::null, // samplePatch - -distance // sample inside my domain - ) + dict.lookup("offsetMode") ); } + + switch (mode) + { + case mappedPatchBase::NORMAL: + { + const scalar distance = readScalar(dict.lookup("distance")); + forAll(patchIDs(), i) + { + mappers_.set + ( + i, + new mappedPatchBase + ( + mesh.boundaryMesh()[patchIDs()[i]], + mesh.name(), // sampleRegion + mappedPatchBase::NEARESTCELL, // sampleMode + word::null, // samplePatch + -distance // sample inside my domain + ) + ); + } + } + break; + + case mappedPatchBase::UNIFORM: + { + const point offset(dict.lookup("offset")); + forAll(patchIDs(), i) + { + mappers_.set + ( + i, + new mappedPatchBase + ( + mesh.boundaryMesh()[patchIDs()[i]], + mesh.name(), // sampleRegion + mappedPatchBase::NEARESTCELL, // sampleMode + word::null, // samplePatch + offset // sample inside my domain + ) + ); + } + } + break; + + case mappedPatchBase::NONUNIFORM: + { + const pointField offsets(dict.lookup("offsets")); + forAll(patchIDs(), i) + { + mappers_.set + ( + i, + new mappedPatchBase + ( + mesh.boundaryMesh()[patchIDs()[i]], + mesh.name(), // sampleRegion + mappedPatchBase::NEARESTCELL, // sampleMode + word::null, // samplePatch + offsets // sample inside my domain + ) + ); + } + } + break; + } }