mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
BUG: nearWallFields: point on the face is inside/outside any tet.
Now we directly releate the intersected face triangle to the tet of the cell the point is on/in. We hope that the tracking handles this ok. Fixes #549.
This commit is contained in:
@ -3,7 +3,7 @@
|
|||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation
|
||||||
\\/ M anipulation | Copyright (C) 2015 OpenCFD Ltd.
|
\\/ M anipulation | Copyright (C) 2015-2017 OpenCFD Ltd.
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
This file is part of OpenFOAM.
|
This file is part of OpenFOAM.
|
||||||
@ -77,6 +77,7 @@ void Foam::functionObjects::nearWallFields::calcAddressing()
|
|||||||
|
|
||||||
vectorField nf(patch.nf());
|
vectorField nf(patch.nf());
|
||||||
vectorField faceCellCentres(patch.patch().faceCellCentres());
|
vectorField faceCellCentres(patch.patch().faceCellCentres());
|
||||||
|
const labelUList& faceCells = patch.patch().faceCells();
|
||||||
|
|
||||||
forAll(patch, patchFacei)
|
forAll(patch, patchFacei)
|
||||||
{
|
{
|
||||||
@ -95,40 +96,62 @@ void Foam::functionObjects::nearWallFields::calcAddressing()
|
|||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
|
// Starting point and tet
|
||||||
point start;
|
point start;
|
||||||
|
label tetFacei = -1;
|
||||||
|
label tetPti = -1;
|
||||||
|
const label celli = faceCells[patchFacei];
|
||||||
|
|
||||||
if (startInfo.hit())
|
if (startInfo.hit())
|
||||||
{
|
{
|
||||||
|
// Move start point slightly in so it is inside the tet
|
||||||
|
const face& f = mesh_.faces()[meshFacei];
|
||||||
|
|
||||||
|
tetFacei = meshFacei;
|
||||||
|
tetPti = (startInfo.index()+1) % f.size();
|
||||||
|
|
||||||
start = startInfo.hitPoint();
|
start = startInfo.hitPoint();
|
||||||
|
//// Uncomment below to shift slightly in:
|
||||||
|
//tetIndices tet(celli, meshFacei, tetPti, mesh_);
|
||||||
|
//start =
|
||||||
|
// (1.0-1e-6)*startInfo.hitPoint()
|
||||||
|
// + 1e-6*tet.tet(mesh_).centre();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Fallback: start tracking from neighbouring cell centre
|
// Fallback: start tracking from neighbouring cell centre
|
||||||
start = faceCellCentres[patchFacei];
|
start = faceCellCentres[patchFacei];
|
||||||
|
mesh_.findTetFacePt(celli, start, tetFacei, tetPti);
|
||||||
}
|
}
|
||||||
|
|
||||||
const point end = start-distance_*nf[patchFacei];
|
const point end = start-distance_*nf[patchFacei];
|
||||||
|
|
||||||
// Find tet for starting location
|
if (tetFacei == -1)
|
||||||
label celli = -1;
|
{
|
||||||
label tetFacei = -1;
|
WarningInFunction << "Did not find point " << start
|
||||||
label tetPti = -1;
|
<< " inside cell " << celli
|
||||||
mesh_.findCellFacePt(start, celli, tetFacei, tetPti);
|
<< ". Not seeding particle originating from face centre "
|
||||||
|
<< mesh_.faceCentres()[meshFacei]
|
||||||
// Add to cloud. Add originating face as passive data
|
<< " with cell centre " << mesh_.cellCentres()[celli]
|
||||||
cloud.addParticle
|
<< endl;
|
||||||
(
|
}
|
||||||
new findCellParticle
|
else
|
||||||
|
{
|
||||||
|
// Add to cloud. Add originating face as passive data
|
||||||
|
cloud.addParticle
|
||||||
(
|
(
|
||||||
mesh_,
|
new findCellParticle
|
||||||
start,
|
(
|
||||||
celli,
|
mesh_,
|
||||||
tetFacei,
|
start,
|
||||||
tetPti,
|
celli,
|
||||||
end,
|
tetFacei,
|
||||||
globalWalls.toGlobal(nPatchFaces) // passive data
|
tetPti,
|
||||||
)
|
end,
|
||||||
);
|
globalWalls.toGlobal(nPatchFaces) // passive data
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
nPatchFaces++;
|
nPatchFaces++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user