Commit 003e62fa authored by mattijs's avatar mattijs
Browse files

ENH: distanceSurface: use either cell (default) or cross-cell isosurface

parent 644dfbbf
......@@ -2,7 +2,7 @@
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2011 OpenFOAM Foundation
\\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
License
......@@ -49,6 +49,8 @@ void Foam::distanceSurface::createGeometry()
// Clear any stored topologies
facesPtr_.clear();
isoSurfCellPtr_.clear();
isoSurfPtr_.clear();
// Clear derived data
clearGeom();
......@@ -265,24 +267,33 @@ void Foam::distanceSurface::createGeometry()
//- Direct from cell field and point field.
isoSurfPtr_.reset
(
new isoSurface
if (cell_)
{
isoSurfCellPtr_.reset
(
cellDistance,
pointDistance_,
distance_,
regularise_
)
//new isoSurfaceCell
//(
// fvm,
// cellDistance,
// pointDistance_,
// distance_,
// regularise_
//)
);
new isoSurfaceCell
(
fvm,
cellDistance,
pointDistance_,
distance_,
regularise_
)
);
}
else
{
isoSurfPtr_.reset
(
new isoSurface
(
cellDistance,
pointDistance_,
distance_,
regularise_
)
);
}
if (debug)
{
......@@ -321,10 +332,12 @@ Foam::distanceSurface::distanceSurface
),
distance_(readScalar(dict.lookup("distance"))),
signed_(readBool(dict.lookup("signed"))),
cell_(dict.lookupOrDefault("cell", true)),
regularise_(dict.lookupOrDefault("regularise", true)),
average_(dict.lookupOrDefault("average", false)),
zoneKey_(keyType::null),
needsUpdate_(true),
isoSurfCellPtr_(NULL),
isoSurfPtr_(NULL),
facesPtr_(NULL)
{
......@@ -338,6 +351,52 @@ Foam::distanceSurface::distanceSurface
}
Foam::distanceSurface::distanceSurface
(
const word& name,
const polyMesh& mesh,
const bool interpolate,
const word& surfaceType,
const word& surfaceName,
const scalar distance,
const bool signedDistance,
const bool cell,
const Switch regularise,
const Switch average
)
:
sampledSurface(name, mesh, interpolate),
surfPtr_
(
searchableSurface::New
(
surfaceType,
IOobject
(
surfaceName, // name
mesh.time().constant(), // directory
"triSurface", // instance
mesh.time(), // registry
IOobject::MUST_READ,
IOobject::NO_WRITE
),
dictionary()
)
),
distance_(distance),
signed_(signedDistance),
cell_(cell),
regularise_(regularise),
average_(average),
zoneKey_(keyType::null),
needsUpdate_(true),
isoSurfCellPtr_(NULL),
isoSurfPtr_(NULL),
facesPtr_(NULL)
{}
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
Foam::distanceSurface::~distanceSurface()
......
......@@ -2,7 +2,7 @@
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2011 OpenFOAM Foundation
\\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
License
......@@ -27,6 +27,8 @@ Class
Description
A sampledSurface defined by a distance to a surface.
Uses either isoSurfaceCell or isoSurface.
SourceFiles
distanceSurface.C
......@@ -37,7 +39,7 @@ SourceFiles
#include "sampledSurface.H"
#include "searchableSurface.H"
//#include "isoSurfaceCell.H"
#include "isoSurfaceCell.H"
#include "isoSurface.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
......@@ -64,6 +66,9 @@ class distanceSurface
//- signed distance
const bool signed_;
//- Whether to use isoSurfaceCell or isoSurface
const bool cell_;
//- Whether to coarsen
const Switch regularise_;
......@@ -84,7 +89,9 @@ class distanceSurface
scalarField pointDistance_;
//- Constructed iso surface
//autoPtr<isoSurfaceCell> isoSurfPtr_;
autoPtr<isoSurfaceCell> isoSurfCellPtr_;
//- Constructed iso surface
autoPtr<isoSurface> isoSurfPtr_;
//- triangles converted to faceList
......@@ -125,6 +132,21 @@ public:
const dictionary& dict
);
//- Construct from components
distanceSurface
(
const word& name,
const polyMesh& mesh,
const bool interpolate,
const word& surfaceType,
const word& surfaceName,
const scalar distance,
const bool signedDistance,
const bool cell,
const Switch regularise,
const Switch average
);
//- Destructor
virtual ~distanceSurface();
......@@ -167,11 +189,16 @@ public:
return facesPtr_;
}
//const isoSurfaceCell& surface() const
const isoSurface& surface() const
const triSurface& surface() const
{
return isoSurfPtr_();
if (cell_)
{
return isoSurfCellPtr_();
}
else
{
return isoSurfPtr_();
}
}
//- sample field on surface
......
......@@ -2,7 +2,7 @@
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2011 OpenFOAM Foundation
\\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
License
......@@ -37,7 +37,20 @@ Foam::distanceSurface::sampleField
const GeometricField<Type, fvPatchField, volMesh>& vField
) const
{
return tmp<Field<Type> >(new Field<Type>(vField, surface().meshCells()));
if (cell_)
{
return tmp<Field<Type> >
(
new Field<Type>(vField, isoSurfCellPtr_().meshCells())
);
}
else
{
return tmp<Field<Type> >
(
new Field<Type>(vField, isoSurfPtr_().meshCells())
);
}
}
......@@ -60,15 +73,30 @@ Foam::distanceSurface::interpolateField
);
// Sample.
return surface().interpolate
(
if (cell_)
{
return isoSurfCellPtr_().interpolate
(
average_
? pointAverage(pointFld())()
: volFld
),
pointFld()
);
(
average_
? pointAverage(pointFld())()
: volFld
),
pointFld()
);
}
else
{
return isoSurfPtr_().interpolate
(
(
average_
? pointAverage(pointFld())()
: volFld
),
pointFld()
);
}
}
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment