mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
ENH: sampling: add offsetMode to patchInternalField sampleSurface
This commit is contained in:
@ -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;
|
||||
}
|
||||
|
||||
@ -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_;
|
||||
|
||||
|
||||
@ -58,17 +58,28 @@ Foam::sampledPatchInternalField::sampledPatchInternalField
|
||||
sampledPatch(name, mesh, dict),
|
||||
mappers_(patchIDs().size())
|
||||
{
|
||||
const scalar distance = readScalar(dict.lookup("distance"));
|
||||
mappedPatchBase::offsetMode mode = mappedPatchBase::NORMAL;
|
||||
if (dict.found("offsetMode"))
|
||||
{
|
||||
mode = mappedPatchBase::offsetModeNames_.read
|
||||
(
|
||||
dict.lookup("offsetMode")
|
||||
);
|
||||
}
|
||||
|
||||
switch (mode)
|
||||
{
|
||||
case mappedPatchBase::NORMAL:
|
||||
{
|
||||
const scalar distance = readScalar(dict.lookup("distance"));
|
||||
forAll(patchIDs(), i)
|
||||
{
|
||||
label patchI = patchIDs()[i];
|
||||
mappers_.set
|
||||
(
|
||||
i,
|
||||
new mappedPatchBase
|
||||
(
|
||||
mesh.boundaryMesh()[patchI],
|
||||
mesh.boundaryMesh()[patchIDs()[i]],
|
||||
mesh.name(), // sampleRegion
|
||||
mappedPatchBase::NEARESTCELL, // sampleMode
|
||||
word::null, // samplePatch
|
||||
@ -77,6 +88,51 @@ Foam::sampledPatchInternalField::sampledPatchInternalField
|
||||
);
|
||||
}
|
||||
}
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||
|
||||
Reference in New Issue
Block a user