returning validCollapse as the status of the faceCollapse was wrong,
it didn't necessarily mean the face was collapsed.
Adding mpre filtering controls to cvContol and using them in the
filtering functions.
Removing minimumEdgeLength(const point& pt) - not needed, always using
the stored vertex size.
Moving removeUnusedPoints to calcDualMesh from
createFacesOwnerNeighbourAndPatches to allow the latter to be used to
build an intermediate mesh.
Adding the use of motionSmoother::checkMesh (as per snappyHexMesh) to
a new function: checkPolyMeshQuality. Will be the analysis component
of a filtering back-tracking scheme.
longest edge as the collapse direction. Discovered that, for long
thin faces, det(J)*aspectRatio^2 ~= 0.35. Could probably analyse this
to see what the actual value is, but it gives a good empirical measure
for the moment.
Using the middle of the line of all the projected vertices as the
split and applying the guardFraction- gives better handling of
triangles.
Making collapseFace use the cvMeshControls minimumEdgeLengthCoeff
value.
aggressive to take out line-like faces. Normalising the inertia tensor
is essential for small faces to avoid the calculation of eigenvectors
from falling off the bottom of SMALL. Normalsing by mag(J) instead of
cmptMax(J).
Moving face point merge, surface smoothing and face filtering
do-while loops to seprate functions.
Implementing point grouping and collapsing for collapseFaceToEdge.
Scotch is now built using its own build system which builds
an additional metis.h which conflicts with the metis one so
to have separate include directory settings we also need separate
Make/ structures.
This determines when faceZones and cellZones are being meshed any zone faces
can only be on the boundary of the cellZone or also 'free standing'. The
latter option can be used to e.g. create free-standing baffles
(that do not separate two regions)
- compatibility:
* 'polySpline' and 'simpleSpline' accepted
* detect and discard end tangent specifications
- a BSpline is also included (eg, for future support of NURBS), but is
not selectable from blockMesh since it really isn't as nice as the
Catmull-Rom (ie, doesn't *exactly* go through each point).
perpendicular faces.
Added code to attempt to determine the collapse direction of a face by
detemining the shorted distance across each triangle. Not working,
commited for reference.
Made some functions const.
Note:
PackedList constructor initializes to zero, faster not to do it
ourselves.
ie,
PackedList foo(nPoints);
vs.
PackedList foo(nPoints, 0);
saves an extra nPoints operations with shifts/masks etc.
If speed is important, change this type of code
PackedList isMaster(nPoints, 1u);
for (loop)
{
if (condition)
{
isMaster.set(i, 0u); // unset bit
}
}
return isMaster;
into this:
PackedList notMaster(nPoints);
for (loop)
{
if (!condition)
{
notMaster.set(i, 1u);
}
}
notMaster.flip();
return notMaster;
or this:
PackedList isMaster(nPoints);
isMaster.flip();
for (loop)
{
if (condition)
{
isMaster.set(i, 0u);
}
}
return isMaster;
- the blockMesh interface is splineEdge.H, selectable as "spline"
The first tests look fine - it works as expected for the case with
buggy polySpline reported on the forum. Should of course do some more
extensive testing.
The advantages compared to the current B-Spline implementation:
- Doesn't need a matrix solver.
- The coding resembles something that can be found in the literature.
- In contrast to the B-Spline implementation, it is fairly clear what
is actually going on. I don't even know if the B-Spline are actually
B-Spline, Beta-Splines or something else.
- Catmull-Rom splines seem to be what all the graphics people have as
their stable workhorse.
We now have 3 different names for splines in blockMesh:
- "spline" - *new* Catmull-Rom for arbitrary segments.
- "simpleSpline" - B-Spline for a single segment
- "polySpline" - B-Spline for a multiple segments
Assuming the Catmull-Rom splines continue to behave nicely, there is
no reason to keep the other (broken) B-Splines. This would help clean
up the blockMesh interface too.
Placed the older ones under legacy/ for easier identification in the
future.
TODO:
- currently no handling of non-zero end tangents
- could be extended to handle closed loops, which might be useful
for feature edges from CAD (eg, for the cvm mesher)
- slightly better code isolation, dropped unneed variables, changed
vector -> point in the appropriate places
- the spline stuff is still horribly broken.
Needs a complete rewrite or needs to get chucked.
- Include Sets/Zones now scans immediately to refresh the list of available
mesh parts. Unfortunately, this also causes the object panel to be
modified, even although the selection doesn't acutally need to change.
This seems to be due to how the pqNamedWidgets are getting the information
from the proxy properties. I can't figure if it's possible to acheive what
I want, but we can probably live with the current implementation.
After IncludeZones, simply us 'Reset' to undo the spurious GUI changes.
Works fine - just looks a bit silly.
- Added 'Refresh' button to rescan for new times/fields. Good for
post-processing ongoing calculations without exiting the reader.
- Added 'Skip Zero Time' checkbox: many (some) calculations have
data missing at time=0 (eg, rho, lagrangian, etc). This provides
a convenient way to skip over this time.
- Future?:
We could probably pick up favourite default values for these switches from
~OpenFOAM/controlDict, from a case system/paraview, or simply by making
the casename.OpenFOAM also be an OpenFOAM dictionary with the settings.
- in preparation for adding an optional '-reconstruct' to a few utilities
re-use as -lreconstruct library
- move related stuff there too
src/decompositionMethods/decompositionMethods
-> src/parallel/decompositionMethods
- added missing namespace qualifiers